]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
Modif V6_4_°
authorPascale Noyret <pascale.noyret@edf.fr>
Tue, 10 Jan 2012 14:25:12 +0000 (14:25 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Tue, 10 Jan 2012 14:25:12 +0000 (14:25 +0000)
308 files changed:
Accas/A_ASSD.py
Accas/A_MEME_NOMBRE.py [new file with mode: 0644]
Accas/__init__.py
Accas/__init__NonAster.py
Aide/eficas_ASTER.adp
Aster/Cata/cataSTA10/Cata_Utils/__init__.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Cata_Utils/t_fonction.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/asse_elem_ssd_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_essai_ops.py
Aster/Cata/cataSTA10/Macro/calc_europlexus_ops.py
Aster/Cata/cataSTA10/Macro/calc_fonction_ops.py
Aster/Cata/cataSTA10/Macro/calc_ifs_dnl_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_miss_ops.py
Aster/Cata/cataSTA10/Macro/calc_modal_ops.py
Aster/Cata/cataSTA10/Macro/calc_mode_rotation_ops.py
Aster/Cata/cataSTA10/Macro/calc_precont_ops.py
Aster/Cata/cataSTA10/Macro/calc_table_ops.py
Aster/Cata/cataSTA10/Macro/crea_elem_ssd_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/creation_donnees_homard.py
Aster/Cata/cataSTA10/Macro/defi_sol_miss_ops.py
Aster/Cata/cataSTA10/Macro/dyna_iss_vari_ops.py
Aster/Cata/cataSTA10/Macro/exec_logiciel_ops.py
Aster/Cata/cataSTA10/Macro/impr_diag_campbell_ops.py
Aster/Cata/cataSTA10/Macro/impr_diag_campbell_utils.py
Aster/Cata/cataSTA10/Macro/impr_fonction_ops.py
Aster/Cata/cataSTA10/Macro/info_fonction_ops.py
Aster/Cata/cataSTA10/Macro/lire_fonction_ops.py
Aster/Cata/cataSTA10/Macro/lire_inte_spec_ops.py
Aster/Cata/cataSTA10/Macro/macr_adap_mail_ops.py
Aster/Cata/cataSTA10/Macro/macr_ascouf_calc_ops.py
Aster/Cata/cataSTA10/Macro/macr_aspic_calc_ops.py
Aster/Cata/cataSTA10/Macro/macr_cara_poutre_ops.py
Aster/Cata/cataSTA10/Macro/macr_ecre_calc_ops.py
Aster/Cata/cataSTA10/Macro/macr_ecrevisse_ops.py
Aster/Cata/cataSTA10/Macro/macr_lign_coupe_ops.py
Aster/Cata/cataSTA10/Macro/macr_recal_ops.py
Aster/Cata/cataSTA10/Macro/macr_spectre_ops.py
Aster/Cata/cataSTA10/Macro/macro_elas_mult_ops.py
Aster/Cata/cataSTA10/Macro/macro_expans_ops.py
Aster/Cata/cataSTA10/Macro/macro_miss_3d_ops.py
Aster/Cata/cataSTA10/Macro/macro_mode_meca_ops.py
Aster/Cata/cataSTA10/Macro/observation_ops.py
Aster/Cata/cataSTA10/Macro/post_bordet_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_coque_ops.py
Aster/Cata/cataSTA10/Macro/post_decollement_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_endo_fiss_ops.py
Aster/Cata/cataSTA10/Macro/post_gp_ops.py
Aster/Cata/cataSTA10/Macro/post_k1_k2_k3_ops.py
Aster/Cata/cataSTA10/Macro/post_k_trans_ops.py
Aster/Cata/cataSTA10/Macro/post_miss_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/propa_fiss_ops.py
Aster/Cata/cataSTA10/Macro/raff_xfem_ops.py
Aster/Cata/cataSTA10/Macro/reca_calcul_aster.py
Aster/Cata/cataSTA10/Macro/reca_mac.py
Aster/Cata/cataSTA10/Macro/recal.py
Aster/Cata/cataSTA10/Macro/simu_point_mat_ops.py
Aster/Cata/cataSTA10/Macro/stanley_ops.py
Aster/Cata/cataSTA10/Macro/test_compor_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_cham_no.py
Aster/Cata/cataSTA10/SD/co_corresp_2_mailla.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_grille.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_matr_asse.py
Aster/Cata/cataSTA10/SD/sd_cham_no.py
Aster/Cata/cataSTA10/SD/sd_compor.py
Aster/Cata/cataSTA10/SD/sd_contact.py
Aster/Cata/cataSTA10/SD/sd_corresp_2_mailla.py
Aster/Cata/cataSTA10/SD/sd_grille.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_maillage.py
Aster/Cata/cataSTA10/SD/sd_nume_ddl_gene.py
Aster/Cata/cataSTA10/SD/sd_nume_elim.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_partition.py
Aster/Cata/cataSTA10/SD/sd_proj_mesu.py
Aster/Cata/cataSTA10/SD/sd_resultat.py
Aster/Cata/cataSTA10/SD/sd_solveur.py
Aster/Cata/cataSTA10/SD/sd_util.py
Aster/Cata/cataSTA10/SD/sd_xfem.py
Aster/Cata/cataSTA10/SD/utilsd.py
Aster/Cata/cataSTA10/Utilitai/Graph.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/System.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/Table.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/UniteAster.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/Utmess.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/__init__.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/as_timer.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/courbes.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/funct_root.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/liss_enveloppe.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/macro_rota_globale.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/optimize.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/partition.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/stats.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/sup_gmsh.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/transpose.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/utils.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Utilitai/veri_matr_tang.py [new file with mode: 0644]
Aster/Cata/cataSTA10/cata.py
Aster/Cata/cataSTA10/ops.py
Aster/Cata/cataSTA11/__init__.py [new file with mode: 0644]
Aster/Cata/cataSTA11/cata.py [new file with mode: 0755]
Aster/Cata/cataSTA11/ops.py [new file with mode: 0644]
Aster/Cata/cataSTA6/__init__.py
Aster/Cata/cataSTA74/__init__.py
Aster/Cata/cataSTA76/__init__.py
Aster/Cata/cataSTA9/Macro/calc_table_ops.py
Aster/Cata/cataSTA9/Macro/recal.py
Aster/Cata/cataSTA9/Numeric.py [new file with mode: 0644]
Aster/Cata/cataSTA9/SD/utilsd.py
Aster/Cata/cataSTA9/cata.py
Aster/Cata/cataSTA9/ops.py
Aster/Include.com [new file with mode: 0644]
Aster/a.dat [new file with mode: 0644]
Aster/configuration_ASTER.py
Aster/editeur.ini
Aster/editeur.ini.win
Aster/editeur_salome.ini
Aster/prefs.py
Aster/prefs.py.win
Aster/prefs_ASTER.py
Aster/qtEficas_aster.py
Aster/qtGroup.py
Aster/test_eficas.py
CMakeLists.txt
Carmel3D/Carmel3D_cata_etendu.py [new file with mode: 0644]
Carmel3D/Carmel3D_cata_fact.py [new file with mode: 0644]
Carmel3D/Carmel3D_cata_mat.py [new file with mode: 0644]
Carmel3D/Carmel3D_cata_matloi.py [new file with mode: 0644]
Carmel3D/Carmel3D_cata_pa.py [new file with mode: 0644]
Carmel3D/Carmel3D_cata_pn.py [new file with mode: 0644]
Carmel3D/__init__.py [new file with mode: 0644]
Carmel3D/configuration_CARMEL3D.py [new file with mode: 0644]
Carmel3D/editeur.ini [new file with mode: 0644]
Carmel3D/jdc_e1.comm [new file with mode: 0644]
Carmel3D/jdc_e2.comm [new file with mode: 0644]
Carmel3D/jdc_f1.comm [new file with mode: 0644]
Carmel3D/jdc_m1.comm [new file with mode: 0644]
Carmel3D/jdc_ml1.comm [new file with mode: 0644]
Carmel3D/jdc_pa1.comm [new file with mode: 0644]
Carmel3D/prefs.py [new file with mode: 0644]
Carmel3D/prefs_CARMEL3D.py [new file with mode: 0644]
Carmel3D/properties.py [new file with mode: 0644]
Carmel3D/qtEficas_Carmel3D.py [new file with mode: 0755]
Carmel3D/style.py [new file with mode: 0644]
Cuve2dg/prefs_CUVE2DG.py
Descartes/editeur.ini
Descartes/prefs.py
Editeur/analyse_catalogue.py
Editeur/analyse_catalogue_initial.py
Editeur/autre_analyse_cata.py
Editeur/catadesc.py
Editeur/icons/delete.png [new file with mode: 0644]
Editeur/icons/image240.png [new file with mode: 0644]
Editeur/import_code.py
Editeur/listePatrons.py
Editeur/session.py
Editeur/styles.py
Editeur/uiinfo.py
Exemples/ex20/prefs.py
Exemples/ex21/prefs.py
Exemples/profile/prefs.py
Extensions/parametre.py
Homard/editeur.ini
Homard/prefs.py
Ihm/I_JDC.py
Ihm/I_MACRO_ETAPE.py
Ihm/I_MCCOMPO.py
Ihm/I_MCFACT.py
Ihm/I_MCSIMP.py
Ihm/I_OBJECT.py
InterfaceQT/qtEficas.py
InterfaceQT4/CMakeLists.txt
InterfaceQT4/browser.py
InterfaceQT4/compomacro.py
InterfaceQT4/compooper.py
InterfaceQT4/compoparam.py
InterfaceQT4/composimp.py
InterfaceQT4/configuration.py
InterfaceQT4/editor.py
InterfaceQT4/eficas_go.py
InterfaceQT4/gereTraduction.py
InterfaceQT4/monChoixCode.py [new file with mode: 0644]
InterfaceQT4/monChoixMap.py
InterfaceQT4/monCommandePanel.py
InterfaceQT4/monCommentairePanel.py
InterfaceQT4/monFonctionPanel.py
InterfaceQT4/monFormulePanel.py
InterfaceQT4/monInactifPanel.py
InterfaceQT4/monIncludePanel.py
InterfaceQT4/monListeParamPanel.py
InterfaceQT4/monMacroPanel.py
InterfaceQT4/monOptions_ASTER.py
InterfaceQT4/monOptions_CUVE2DG.py
InterfaceQT4/monOptions_MAP.py
InterfaceQT4/monOptions_OPENTURNS_STUDY.py
InterfaceQT4/monOptions_OPENTURNS_WRAPPER.py
InterfaceQT4/monParamPanel.py
InterfaceQT4/monPlusieursASSDPanel.py
InterfaceQT4/monPlusieursIntoPanel.py
InterfaceQT4/monRacinePanel.py
InterfaceQT4/monSelectImage.py [new file with mode: 0644]
InterfaceQT4/monUniqueBasePanel.py
InterfaceQT4/monUniqueIntoPanel.py
InterfaceQT4/politiquesValidation.py
InterfaceQT4/qtCommun.py
InterfaceQT4/qtEficas.py
InterfaceQT4/qtSaisie.py
InterfaceQT4/readercata.py
InterfaceQT4/ssIhm.py
InterfaceQT4/typeNode.py
InterfaceQT4/viewManager.py
InterfaceTK/appli.py
InterfaceTK/change_comm.py
InterfaceTK/styles.py
Minicode/editeur.ini
Minicode/prefs.py
Noyau/N_ASSD.py
Noyau/N_BLOC.py
Noyau/N_ENTITE.py
Noyau/N_ETAPE.py
Noyau/N_FACT.py
Noyau/N_FONCTION.py
Noyau/N_JDC.py
Noyau/N_MACRO.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_MCCOMPO.py
Noyau/N_MCSIMP.py
Noyau/N_OPER.py
Noyau/N_OPS.py [new file with mode: 0644]
Noyau/N_PROC.py
Noyau/N_SIMP.py
Noyau/N_VALIDATOR.py
Noyau/N__F.py
Noyau/N_info.py [new file with mode: 0644]
Noyau/N_types.py
Noyau/N_utils.py
Noyau/__init__.py
Noyau/asojb.py
Noyau/basetype.py
Noyau/context.py
Noyau/nommage.py
Openturns_Study/OpenTURNS_Cata_Study_V8.py
Openturns_Study/catalogues_openturns.ini
Openturns_Study/configuration_OPENTURNS_STUDY.py
Openturns_Study/prefs.py
Openturns_Study/prefs_OPENTURNS_STUDY.py
Openturns_Study/prefs_OPENTURNS_STUDY.py.in
Openturns_Wrapper/catalogues_openturns.ini
Openturns_Wrapper/configuration_OPENTURNS_WRAPPER.py
Openturns_Wrapper/prefs.py
Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py
Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py.in
Saturne/editeur.ini
Saturne/prefs.py
Sep/SEP_Cata_V0.py
Sep/catalogues_sep.ini
Sep/editeur.ini
Sep/prefs.py
Sep/prefs_SEP.py
Syrthes/editeur.ini
Syrthes/prefs.py
Tests/editeur.ini
Tests/prefs.py
Traducteur/CMakeLists.txt
Traducteur/dictErreurs.py
Traducteur/inseremocle.py
Traducteur/movemocle.py
Traducteur/regles.py
Traducteur/removemocle.py
Traducteur/renamemocle.py
Traducteur/traduitV9V10.py [new file with mode: 0755]
UiQT4/CMakeLists.txt
UiQT4/OptionsCuve.ui
UiQT4/OptionsOT.ui
UiQT4/OptionsPdf.ui
UiQT4/desChoixCata.ui
UiQT4/desChoixCode.ui [new file with mode: 0644]
UiQT4/desChoixMap.ui
UiQT4/desCommande.ui
UiQT4/desError.ui
UiQT4/desImage.ui [new file with mode: 0644]
UiQT4/desInclude.ui
UiQT4/desListeParam.ui
UiQT4/desMCFact.ui
UiQT4/desPlusieursBase.ui
UiQT4/desPlusieursInto.ui
UiQT4/desPoursuite.ui
UiQT4/desSelectVal.ui
UiQT4/desUniqueASSD.ui
UiQT4/desUniqueBase.ui
UiQT4/desUniqueComp.ui
UiQT4/desUniqueInto.ui
UiQT4/desUniqueSDCOInto.ui
UiQT4/makefile
UiQT4/myMain.ui
Validation/V_AU_PLUS_UN.py
Validation/V_MCCOMPO.py
Validation/V_MCSIMP.py
Validation/V_MEME_NOMBRE.py [new file with mode: 0644]
convert/convert_openturns_study.py
generator/OpenturnsSTD.py
generator/generator_cuve2dg.py
generator/generator_homard.py
generator/generator_map.py
generator/generator_openturns_study.py
generator/generator_openturns_wrapper.py
generator/generator_s_DIC.py [new file with mode: 0644]
generator/generator_s_polymers_st_1.py
generator/generator_vers3DSalome.py
generator/monCreateYacs.py

index 9182b06949e344ab505047594bb06e13389f5889..1e8cade52ea414f93d3287ab93abf2319ffd8351 100644 (file)
@@ -28,10 +28,10 @@ from Noyau import N_GEOM
 from Noyau import N_FONCTION 
 from Noyau import N_CO 
 
-# On ajoute la classe ASSD dans l'héritage multiple pour recréer 
-# une hiérarchie d'héritage identique à celle de Noyau
-# pour faire en sorte que isinstance(o,ASSD) marche encore aprè
-# dérivation
+# On ajoute la classe ASSD dans l'heritage multiple pour recreer 
+# une hierarchie d'heritage identique a celle de Noyau
+# pour faire en sorte que isinstance(o,ASSD) marche encore apre
+# derivation
 
 class ASSD(I_ASSD.ASSD,N_ASSD.ASSD):pass
 #class LASSD(I_LASSD.LASSD,N_LASSD.LASSD):pass
diff --git a/Accas/A_MEME_NOMBRE.py b/Accas/A_MEME_NOMBRE.py
new file mode 100644 (file)
index 0000000..9574f3a
--- /dev/null
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+from Noyau import N_REGLE
+from Validation import V_MEME_NOMBRE
+from Ihm import I_REGLE
+
+class MEME_NOMBRE(V_MEME_NOMBRE.MEME_NOMBRE,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_MEME_NOMBRE.MEME_NOMBRE n'en a pas 
+   """
index 4897f586af8699d54ff0a954659538fb65130983..c26ee293c93c722fc2ae03bd2c0b6e2328913b3a 100644 (file)
@@ -56,8 +56,9 @@ from A_MCLIST import MCList
 from A_MCBLOC import MCBLOC
 from A_MCSIMP import MCSIMP
 
-# Les règles
+# Les regles
 from A_AU_MOINS_UN import AU_MOINS_UN
+from A_MEME_NOMBRE import MEME_NOMBRE
 from A_AU_PLUS_UN import AU_PLUS_UN
 from A_UN_PARMI import UN_PARMI
 from A_PRESENT_PRESENT import PRESENT_PRESENT
@@ -79,8 +80,11 @@ from Noyau.N__F import _F
 
 from Noyau.N_Exception import AsException
 from Noyau.N_utils import AsType
+from Noyau.N_utils import AsType
+from Noyau.N_OPS import OPS, EMPTY_OPS
+from Noyau.N_ASSD import not_checked
 
-from A_VALIDATOR import OrVal,AndVal
+from A_VALIDATOR import OrVal,AndVal,OnlyStr
 from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory
 from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
 from A_VALIDATOR import CardVal, InstanceVal
index 324ed712c8d13c996c46e347ebae449a738441da..d1c6f695f707f53c1605a4241917d2dc65463281 100644 (file)
@@ -58,6 +58,7 @@ from A_MCSIMP import MCSIMP
 
 # Les règles
 from A_AU_MOINS_UN import AU_MOINS_UN
+from A_MEME_NOMBRE import MEME_NOMBRE
 from A_AU_PLUS_UN import AU_PLUS_UN
 from A_UN_PARMI import UN_PARMI
 from A_PRESENT_PRESENT import PRESENT_PRESENT
@@ -80,7 +81,7 @@ from Noyau.N__F import _F
 from Noyau.N_Exception import AsException
 from Noyau.N_utils import AsType
 
-from A_VALIDATOR import OrVal,AndVal
+from A_VALIDATOR import OrVal,AndVal,OnlyStr
 from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory
 from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
 from A_VALIDATOR import CardVal, InstanceVal
index e12922ce6bbe739149c80fdb22e61b2d6e4d48af..f0444c5990e1113aaecd2b6f546ba17cb40619cd 100644 (file)
@@ -1,5 +1,10 @@
- <assistantconfig version="3.2.0">
-     <DCF ref="eficas_aster.html"
+<assistantconfig version="3.2.0">
+  <profile>
+     <property name="title">Eficas Pour Aster </property>
+  </profile>
+
+   <DCF ref="fichiers_ASTER/index.html"
              title="Eficas pour Aster ">
-     </DCF>
+            
+   </DCF>
  </assistantconfig>
diff --git a/Aster/Cata/cataSTA10/Cata_Utils/__init__.py b/Aster/Cata/cataSTA10/Cata_Utils/__init__.py
new file mode 100644 (file)
index 0000000..17af639
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF __init__ Cata_Utils  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+#
+# Ce package ne doit contenir que les modules nécessaires au catalogue
+# qui ne peuvent pas être dans Macro ou SD.
+# Exemple : t_fonction permettant d'évaluer les fonctions dans le catalogue materiau.
+#
+
diff --git a/Aster/Cata/cataSTA10/Cata_Utils/t_fonction.py b/Aster/Cata/cataSTA10/Cata_Utils/t_fonction.py
new file mode 100644 (file)
index 0000000..82f41c3
--- /dev/null
@@ -0,0 +1,780 @@
+#@ MODIF t_fonction Cata_Utils  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+import copy
+import types
+from math import exp, log
+
+import numpy as NP
+import numpy.fft as FFT
+
+from Noyau.N_types import is_float, is_float_or_int, is_complex, is_number, is_enum
+
+
+# -----------------------------------------------------------------------------
+class FonctionError(Exception): pass
+
+class ParametreError(FonctionError):      pass  # probleme de NOM_PARA
+class InterpolationError(FonctionError):  pass
+class ProlongementError(FonctionError):   pass
+
+# -----------------------------------------------------------------------------
+def interp(typ_i,val,x1,x2,y1,y2,tol=1.e-6) :
+  """Interpolation linéaire/logarithmique entre un couple de valeurs
+  """
+  if abs(val-x1) < tol : return y1
+  if abs(val-x2) < tol : return y2
+  if typ_i[0] == 'LOG' and (x1 <= 0. or x2 <= 0.):
+      raise InterpolationError("Interpolation LOG invalide sur l'intervalle [%g, %g]." % (x1, x2))
+  if typ_i[1] == 'LOG' and (y1 <= 0. or y2 <= 0.):
+      raise InterpolationError("Interpolation LOG invalide sur les ordonnées [%g, %g]." % (y1, y2))
+  if typ_i==['LIN','LIN']: return y1+(y2-y1)*(val-x1)/(x2-x1)
+  if typ_i==['LIN','LOG']: return exp(log(y1)+(val-x1)*(log(y2)-log(y1))/(x2-x1))
+  if typ_i==['LOG','LOG']: return exp(log(y1)+(log(val)-log(x1))*(log(y2)-log(y1))/(log(x2)-log(x1)))
+  if typ_i==['LOG','LIN']: return y1+(log(val)-log(x1))*(y2-y1)/(log(x2)-log(x1))
+  raise InterpolationError, "abscisse = %g, intervalle = [%g, %g]" % (val, x1, x2)
+
+
+def is_ordo(liste):
+  if len(liste) > 1:
+    val = NP.array(liste, float)
+    return min(val[1:len(val)] - val[0:len(val)-1]) >= 0.
+  else: return True
+
+# -----------------------------------------------------------------------------
+class t_fonction :
+  """Classe pour fonctions réelles, équivalent au type aster = fonction_sdaster
+  """
+  def __init__(self,vale_x,vale_y,para,nom='') :
+    """Création d'un objet fonction
+    - vale_x et vale_y sont des listes de réels de meme longueur
+    - para est un dictionnaire contenant les entrées PROL_DROITE, PROL_GAUCHE et INTERPOL (cf sd ASTER)
+    """
+    self.nom=nom
+    pk=para.keys()
+    pk.sort()
+    if pk!=['INTERPOL','NOM_PARA','NOM_RESU','PROL_DROITE','PROL_GAUCHE'] :
+         raise FonctionError, 'fonction : parametres incorrects'
+    if para['INTERPOL'] not in [['NON','NON'],['LIN','LIN'],['LIN','LOG'],['LOG','LOG'],['LOG','LIN'],] :
+         raise FonctionError, 'fonction : parametre INTERPOL incorrect : %s' % para['INTERPOL']
+    if para['PROL_DROITE'] not in ['EXCLU','CONSTANT','LINEAIRE'] :
+         raise FonctionError, 'fonction : parametre PROL_DROITE incorrect : %s' % para['PROL_DROITE']
+    if para['PROL_GAUCHE'] not in ['EXCLU','CONSTANT','LINEAIRE'] :
+         raise FonctionError, 'fonction : parametre PROL_GAUCHE incorrect : %s' % para['PROL_GAUCHE']
+    self.vale_x    = NP.array(vale_x)
+    self.vale_y    = NP.array(vale_y)
+    self.para      = para
+    if len(self.vale_x)!=len(self.vale_y) :
+         raise FonctionError, 'fonction : longueur abscisse <> longueur ordonnées'
+    if not is_ordo(self.vale_x) :
+         raise FonctionError, 'fonction : abscisses non strictement croissantes'
+
+  def __add__(self,other) :
+    """addition avec une autre fonction ou un nombre, par surcharge de l'opérateur +
+    """
+    if   isinstance(other,t_fonction):
+      para=copy.copy(self.para)
+      vale_x,para['PROL_GAUCHE'],para['PROL_DROITE']=self.homo_support(other)
+      fff=self.evalfonc(vale_x)
+      ggg=other.evalfonc(vale_x)
+      if   isinstance(self,t_fonction_c): return t_fonction_c(vale_x,fff.vale_y+ggg.vale_y,para)
+      else                              : return t_fonction(vale_x,fff.vale_y+ggg.vale_y,para)
+    elif is_number(other):
+      if   isinstance(self,t_fonction_c): return t_fonction_c(self.vale_x,self.vale_y+other,self.para)
+      else                              : return t_fonction(self.vale_x,self.vale_y+other,self.para)
+    else:  raise FonctionError, 'fonctions : erreur de type dans __add__ : %s %s' % (self, type(other))
+
+  def __mul__(self,other) :
+    """multiplication avec une autre fonction ou un nombre, par surcharge de l'opérateur *
+    """
+    if   isinstance(other,t_fonction):
+      para=copy.copy(self.para)
+      vale_x,para['PROL_GAUCHE'],para['PROL_DROITE']=self.homo_support(other)
+      fff=self.evalfonc(vale_x)
+      ggg=other.evalfonc(vale_x)
+      if   isinstance(self,t_fonction_c): return t_fonction_c(vale_x,fff.vale_y*ggg.vale_y,para)
+      else                              : return t_fonction(vale_x,fff.vale_y*ggg.vale_y,para)
+    elif is_float_or_int(other):
+      return t_fonction(self.vale_x,self.vale_y*other,self.para)
+    elif is_complex(other):
+      return t_fonction_c(self.vale_x,self.vale_y*other,self.para)
+    else:  raise FonctionError, 'fonctions : erreur de type dans __mul__%s %s' % (self, type(other))
+
+  def __repr__(self) :
+    """affichage de la fonction en double colonne
+    """
+    texte=[]
+    for i in range(len(self.vale_x)) :
+      texte.append('%f %f' % (self.vale_x[i],self.vale_y[i]))
+    return '\n'.join(texte)
+
+  def __getitem__(self,other) :
+    """composition de deux fonction F[G]=FoG=F(G(x))
+    """
+    para=copy.copy(self.para)
+    if other.para['NOM_RESU'] != self.para['NOM_PARA'] :
+       raise ParametreError,'''composition de fonctions : NOM_RESU1 et NOM_PARA2 incohérents '''
+    para['NOM_PARA']==other.para['NOM_PARA']
+    return t_fonction(other.vale_x,map(self,other.vale_y),para)
+
+  def __call__(self,val,tol=1.e-6):
+    """méthode pour évaluer f(x)
+    - tolérance, par défaut 1.e-6 en relatif sur la longueur de l'intervalle
+    - adjacent, pour capter les erreurs d'arrondi en cas de prolongement exclu
+    """
+    i=NP.searchsorted(self.vale_x, val)
+    n=len(self.vale_x)
+    if n == 1:
+      # Utilisation abusive de la tolérance relative mais ce cas est particulier
+      if (val-self.vale_x[0]) < tol:
+         return self.vale_y[0]
+      elif val-self.vale_x[0] > 0:
+         if (self.para['PROL_DROITE']=='CONSTANT') or (self.para['PROL_DROITE']=='LINEAIRE'):
+            return self.vale_y[0]
+         else: raise ProlongementError, 'fonction évaluée hors du domaine de définition'
+      elif val-self.vale_x[0] < 0:
+         if (self.para['PROL_GAUCHE']=='CONSTANT') or (self.para['PROL_GAUCHE']=='LINEAIRE'):
+            return self.vale_y[0]
+         else: raise ProlongementError, 'fonction évaluée hors du domaine de définition'
+    
+    if i==0 :
+      if self.para['PROL_GAUCHE']=='EXCLU'    :
+         eps_g=(val-self.vale_x[0] )/(self.vale_x[1] -self.vale_x[0])
+         if abs(eps_g)<=tol  : return self.vale_y[0]
+         else                : raise ProlongementError, 'fonction évaluée hors du domaine de définition'
+      else  : 
+         if self.para['PROL_GAUCHE']=='CONSTANT' : return self.vale_y[0]
+         if self.para['PROL_GAUCHE']=='LINEAIRE' : return interp(self.para['INTERPOL'],val,self.vale_x[0],
+                                                                                           self.vale_x[1],
+                                                                                           self.vale_y[0],
+                                                                                           self.vale_y[1])
+    elif i==n :
+      if self.para['PROL_DROITE']=='EXCLU'    :
+         eps_d=(val-self.vale_x[-1])/(self.vale_x[-1]-self.vale_x[-2])
+         if abs(eps_d)<=tol  : return self.vale_y[-1]
+         else                : raise ProlongementError, 'fonction évaluée hors du domaine de définition'
+      else  : 
+         if self.para['PROL_DROITE']=='CONSTANT' : return self.vale_y[-1]
+         if self.para['PROL_DROITE']=='LINEAIRE' : return interp(self.para['INTERPOL'],val,self.vale_x[-1],
+                                                                                           self.vale_x[-2],
+                                                                                           self.vale_y[-1],
+                                                                                           self.vale_y[-2])
+    else :
+      return interp(self.para['INTERPOL'],val,self.vale_x[i-1],
+                                              self.vale_x[i],
+                                              self.vale_y[i-1],
+                                              self.vale_y[i])
+
+  def homo_support(self,other) :
+    """Renvoie le support d'abscisses homogénéisé entre self et other
+    i.e. si prolongement exclu, on retient plus grand min ou plus petit max, selon
+    si prolongement autorisé, on conserve les abscisses d'une fonction, extrapolantes
+    sur l'autre.
+    Pour les points intermédiaires : union et tri des valeurs des vale_x réunis.
+    """
+    if other.vale_x[0]>self.vale_x[0]:
+       if other.para['PROL_GAUCHE']!='EXCLU' : f_g=self
+       else                                  : f_g=other
+    else :
+       if self.para['PROL_GAUCHE'] !='EXCLU' : f_g=other
+       else                                  : f_g=self
+    val_min    =f_g.vale_x[0]
+    prol_gauche=f_g.para['PROL_GAUCHE']
+    if self.vale_x[-1]>other.vale_x[-1]:
+       if other.para['PROL_DROITE']!='EXCLU' : f_d=self
+       else                                  : f_d=other
+    else :
+       if self.para['PROL_DROITE'] !='EXCLU' : f_d=other
+       else                                  : f_d=self
+    val_max    =f_d.vale_x[-1]
+    prol_droite=f_d.para['PROL_DROITE']
+    vale_x=NP.concatenate((self.vale_x,other.vale_x))
+    vale_x=NP.clip(vale_x,val_min,val_max)
+    vale_x=NP.sort(list(set(vale_x)))
+    return vale_x, prol_gauche, prol_droite
+
+  def cut(self,rinf,rsup,prec,crit='RELATIF',nom='') :
+    """Renvoie la fonction self dont on a 'coupé' les extrémités en x=rinf et x=rsup
+    pour la recherche de rinf et rsup dans la liste d'abscisses :
+       prec=precision crit='absolu' ou 'relatif'
+    """
+    para=copy.copy(self.para)
+    para['PROL_GAUCHE']='EXCLU'
+    para['PROL_DROITE']='EXCLU'
+    if   crit=='ABSOLU' : rinf_tab=NP.greater(abs(self.vale_x-rinf),prec)
+    elif crit=='RELATIF': rinf_tab=NP.greater(abs(self.vale_x-rinf),prec*rinf)
+    else : raise FonctionError, 'fonction : cut : critère absolu ou relatif'
+    if   crit=='ABSOLU' : rsup_tab=NP.greater(abs(self.vale_x-rsup),prec)
+    elif crit=='RELATIF': rsup_tab=NP.greater(abs(self.vale_x-rsup),prec*rsup)
+    else : raise FonctionError, 'fonction : cut : critère absolu ou relatif'
+    if NP.alltrue(rinf_tab) : i=NP.searchsorted(self.vale_x,rinf)
+    else                 : i=rinf_tab.tolist().index(0)+1
+    if NP.alltrue(rsup_tab) : j=NP.searchsorted(self.vale_x,rsup)
+    else                 : j=rsup_tab.tolist().index(0)
+    vale_x=NP.array([rinf,]+self.vale_x.tolist()[i:j]+[rsup,])
+    vale_y=NP.array([self(rinf),]+self.vale_y.tolist()[i:j]+[self(rsup),])
+    return t_fonction(vale_x,vale_y,para,nom)
+
+  def cat(self,other,surcharge) :
+    """renvoie une fonction concaténée avec une autre, avec règles de surcharge
+    """
+    para=copy.copy(self.para)
+    if self.para['INTERPOL']!=other.para['INTERPOL'] : raise FonctionError, 'concaténation de fonctions à interpolations différentes'
+    if NP.min(self.vale_x)<NP.min(other.vale_x) :
+            f1=self
+            f2=other
+    else                                  :
+            f1=other
+            f2=self
+    para['PROL_GAUCHE']=f1.para['PROL_GAUCHE']
+    if   surcharge=='GAUCHE' :
+       i=NP.searchsorted(f2.vale_x,f1.vale_x[-1])
+       if i!=len(f2.vale_x) : para['PROL_DROITE']=f2.para['PROL_DROITE']
+       else                 : para['PROL_DROITE']=f1.para['PROL_DROITE']
+       vale_x = NP.concatenate((f1.vale_x, f2.vale_x[i:len(f2.vale_x)]))
+       vale_y = NP.concatenate((f1.vale_y, f2.vale_y[i:len(f2.vale_y)]))
+    elif surcharge=='DROITE' :
+       i=NP.searchsorted(f1.vale_x,f2.vale_x[0])
+       if i!=len(f1.vale_x) : para['PROL_DROITE']=f2.para['PROL_DROITE']
+       else                 : para['PROL_DROITE']=f1.para['PROL_DROITE']
+       vale_x = NP.concatenate((f1.vale_x[:i], f2.vale_x))
+       vale_y = NP.concatenate((f1.vale_y[:i], f2.vale_y))
+    return t_fonction(vale_x,vale_y,para)
+
+  def tabul(self) :
+    """mise en forme de la fonction selon un vecteur unique (x1,y1,x2,y2,...)
+    """
+    __tab=NP.array([self.vale_x,self.vale_y])
+    return NP.ravel(NP.transpose(__tab)).tolist()
+
+  def extreme(self) :
+    """renvoie un dictionnaire des valeurs d'ordonnées min et max
+    """
+    val_min=min(self.vale_y)
+    val_max=max(self.vale_y)
+    vm={}
+    vm['min']=[[self.vale_y[i],self.vale_x[i]] for i in range(len(self.vale_x))\
+                                               if self.vale_y[i]==val_min]
+    vm['max']=[[self.vale_y[i],self.vale_x[i]] for i in range(len(self.vale_x))\
+                                               if self.vale_y[i]==val_max]
+    vm['min'].sort()
+    vm['max'].sort()
+    for item in vm['min'] : item.reverse()
+    for item in vm['max'] : item.reverse()
+    return vm
+
+  def trapeze(self,coef) :
+    """renvoie la primitive de la fonction, calculée avec la constante d'intégration 'coef'
+    """
+    n = len(self.vale_y)   # [1:n] car pb sur calibre 5 (etch, python2.5 x86_64)
+    trapz     = NP.zeros(n, float)
+    trapz[0]  = coef
+    trapz[1:n] = (self.vale_y[1:n]+self.vale_y[:-1])/2*(self.vale_x[1:n]-self.vale_x[:-1])
+    prim_y=NP.cumsum(trapz)
+    para=copy.copy(self.para)
+    para['PROL_GAUCHE']='EXCLU'
+    para['PROL_DROITE']='EXCLU'
+    if   para['NOM_RESU'][:4]=='VITE' : para['NOM_RESU']='DEPL'
+    elif para['NOM_RESU'][:4]=='ACCE' : para['NOM_RESU']='VITE'
+    return t_fonction(self.vale_x,prim_y,para)
+
+  def simpson(self,coef) :
+    """renvoie la primitive de la fonction, calculée avec la constante d'intégration 'coef'
+    """
+    para=copy.copy(self.para)
+    para['PROL_GAUCHE']='EXCLU'
+    para['PROL_DROITE']='EXCLU'
+    if   para['NOM_RESU'][:4]=='VITE' : para['NOM_RESU']='DEPL'
+    elif para['NOM_RESU'][:4]=='ACCE' : para['NOM_RESU']='VITE'
+    fm      = self.vale_y[0]
+    fb      = self.vale_y[1]
+    h2      = self.vale_x[1] - self.vale_x[0]
+    tabl    = [coef,coef +(fb+fm)*h2/2.]
+    prim_y  = copy.copy(tabl)
+    iperm   = 0
+    ip      = (1,0)
+    eps     = 1.E-4
+    for i in range(2,len(self.vale_x)) :
+       h1  = h2
+       h2  = self.vale_x[i] - self.vale_x[i-1]
+       bma = h1 + h2
+       fa  = fm
+       fm  = fb
+       fb  = self.vale_y[i]
+       deltah = h2 - h1
+       if h1==0. or h2==0. or abs( deltah / h1 ) <= eps :
+          ct  = (1.,4.,1.)
+       else :
+          epsi = deltah / (h1*h2)
+          ct   = (1.-epsi*h2,2.+epsi*deltah,1.+epsi*h1)
+       tabl[iperm] = tabl[iperm] + (bma/6.)*(ct[0]*fa+ct[1]*fm+ct[2]*fb)
+       prim_y.append(tabl[iperm])
+       iperm       = ip[iperm]
+    return t_fonction(self.vale_x,prim_y,para)
+
+  def derive(self) :
+    """renvoie la dérivée de la fonction
+    """
+    n = len(self.vale_y)   # [1:n] car pb sur calibre 5 (etch, python2.5 x86_64)
+    pas=self.vale_x[1:n]-self.vale_x[:-1]
+    pentes=(self.vale_y[1:n]-self.vale_y[:-1])/(self.vale_x[1:n]-self.vale_x[:-1])
+    derive=(pentes[1:n-1]*pas[1:n-1]+pentes[:-1]*pas[:-1])/(pas[1:n-1]+pas[:-1])
+    derv_y=[pentes[0]]+derive.tolist()+[pentes[-1]]
+    para=copy.copy(self.para)
+    para['PROL_GAUCHE']='EXCLU'
+    para['PROL_DROITE']='EXCLU'
+    if   para['NOM_RESU'][:4]=='DEPL' : para['NOM_RESU']='VITE'
+    elif para['NOM_RESU'][:4]=='VITE' : para['NOM_RESU']='ACCE'
+    return t_fonction(self.vale_x,derv_y,para)
+
+  def inverse(self) :
+    """renvoie l'inverse de la fonction
+    on intervertit vale_x et vale_y, on swape interpolation
+    """
+    para=copy.copy(self.para)
+    para['NOM_RESU']='TOUTRESU'
+    para['NOM_PARA']=self.para['NOM_PARA']
+    para['INTERPOL'].reverse()
+    if para['PROL_GAUCHE']=='CONSTANT' : para['PROL_GAUCHE']='EXCLU'
+    if para['PROL_DROITE']=='CONSTANT' : para['PROL_DROITE']='EXCLU'
+    vale_x=self.vale_y
+    vale_y=self.vale_x
+    if not is_ordo(vale_x) :
+       vale_x=vale_x[::-1]
+       vale_y=vale_y[::-1]
+    return t_fonction(vale_x,vale_y,para)
+
+  def abs(self) :
+    """renvoie la mm fonction avec valeur absolue des ordonnées
+    """
+    para=copy.copy(self.para)
+    if para['PROL_GAUCHE']=='LINEAIRE' : para['PROL_GAUCHE']='EXCLU'
+    if para['PROL_DROITE']=='LINEAIRE' : para['PROL_DROITE']='EXCLU'
+    return t_fonction(self.vale_x,NP.absolute(self.vale_y),para)
+
+  def evalfonc(self,liste_val) :
+    """renvoie la mm fonction interpolée aux points définis par la liste 'liste_val'
+    """
+    return self.__class__(liste_val,map(self,liste_val),self.para)
+
+  def suppr_tend(self) :
+    """pour les corrections d'accélérogrammes
+    suppression de la tendance moyenne d'une fonction
+    """
+    para=copy.copy(self.para)
+    xy=NP.sum(self.vale_x*self.vale_y)
+    x0=NP.sum(self.vale_x)
+    y0=NP.sum(self.vale_y)
+    xx=NP.sum(self.vale_x*self.vale_x)
+    n=len(self.vale_x)
+    a1 = ( n*xy - x0*y0) / (n*xx - x0*x0)
+    a0 = (xx*x0 - x0*xy) / (n*xx - x0*x0)
+    return t_fonction(self.vale_x,self.vale_y-a1*self.vale_x-a0,self.para)
+
+  def normel2(self) :
+    """norme de la fonction
+    """
+    __ex=self*self
+    __ex=__ex.trapeze(0.)
+    return NP.sqrt(__ex.vale_y[-1])
+
+  def fft(self,methode) :
+    """renvoie la transformée de Fourier rapide FFT
+    """
+    para=copy.copy(self.para)
+    para['NOM_PARA']='FREQ'
+    if self.para['NOM_PARA']!='INST' :
+       raise ParametreError, 'fonction réelle : FFT : NOM_PARA=INST pour une transformée directe'
+    pas = self.vale_x[1]-self.vale_x[0]
+    for i in range(1,len(self.vale_x)) :
+        ecart = NP.abs(((self.vale_x[i]-self.vale_x[i-1])-pas)/pas)
+        if ecart>1.e-2 :
+           raise FonctionError, 'fonction réelle : FFT : la fonction doit etre à pas constant'
+    n = get_len_puis2(self.vale_x)
+    if   methode=='TRONCATURE' :
+       vale_y=self.vale_y[:2**n]
+    elif methode=='PROL_ZERO'  :
+       vale_y=self.vale_y
+       if len(self.vale_y) > 2**n:
+          vale_y=NP.array(self.vale_y)
+          vale_y = NP.concatenate( (vale_y, NP.zeros(2**(n+1)-len(self.vale_x))) )
+    elif   methode=='COMPLET'  : 
+       vale_y=self.vale_y
+    vect=FFT.fft(vale_y)
+    pasfreq =1./(pas*(len(vect)))
+    vale_x  =[pasfreq*i for i in range(len(vect))]
+    vale_y  =vect
+    return t_fonction_c(vale_x,vale_y,para)
+
+
+# -----------------------------------------------------------------------------
+class t_fonction_c(t_fonction) :
+  """Classe pour fonctions complexes, équivalent au type aster = fonction_c
+  """
+  def __add__(self,other) :
+    """addition avec une autre fonction ou un nombre, par surcharge de l'opérateur +
+    """
+    if isinstance(other,t_fonction_c):
+      para=copy.copy(self.para)
+      vale_x, para['PROL_GAUCHE'], para['PROL_DROITE'] = self.homo_support(other)
+      fff = self.evalfonc(vale_x)
+      ggg = other.evalfonc(vale_x)
+      res = t_fonction_c(vale_x, fff.vale_y + ggg.vale_y, para)
+    elif is_number(other):
+      res = t_fonction_c(self.vale_x, self.vale_y + other, self.para)
+    else:
+        raise FonctionError, 'fonctions : erreur de type dans __add__ : %s %s' % (self, type(other))
+    return res
+
+  def __mul__(self,other) :
+    """multiplication avec une autre fonction ou un nombre, par surcharge de l'opérateur *
+    """
+    if   isinstance(other,t_fonction_c):
+      para=copy.copy(self.para)
+      vale_x, para['PROL_GAUCHE'], para['PROL_DROITE'] = self.homo_support(other)
+      fff = self.evalfonc(vale_x)
+      ggg = other.evalfonc(vale_x)
+      res = t_fonction_c(vale_x, fff.vale_y * ggg.vale_y, self.para)
+    elif is_number(other):
+      res = t_fonction_c(self.vale_x, self.vale_y*other, self.para)
+    else:
+        raise FonctionError, 'fonctions : erreur de type dans __mul__%s %s' % (self, type(other))
+    return res
+
+  def tabul(self) :
+    """mise en forme de la fonction selon un vecteur unique (x1,yr1,yi1,x2,yr2,yr2,...)
+    """
+    __tab=NP.array([self.vale_x,self.vale_y.real,self.vale_y.imag])
+    return NP.ravel(NP.transpose(__tab)).tolist()
+
+  def __repr__(self) :
+    """affichage de la fonction en double colonne
+    """
+    texte=[]
+    for i in range(len(self.vale_x)) :
+      texte.append('%f %f + %f .j' % (self.vale_x[i],self.vale_y[i].real,self.vale_y[i].imag))
+    return '\n'.join(texte)
+
+  def fft(self,methode,syme) :
+    """renvoie la transformée de Fourier rapide FFT (sens inverse)
+
+       Dans le cas syme == 'NON', on choisit de renvoyer 
+       un vecteur de longueur 2N, ou N est la longueur du vecteur F de depart,
+       en faisant l'approximation que pour la vraie FFT, F(N+1) est fonction
+       de F(N) et F(N-1).
+       On effectue un prolongement a l'ordre 2 par continuite pour simplifier
+       l'analyse des pas de temps en post traitement
+    """
+    para=copy.copy(self.para)
+    para['NOM_PARA']='INST'
+    if self.para['NOM_PARA']!='FREQ' :
+       raise ParametreError, 'fonction complexe : FFT : NOM_PARA=FREQ pour une transformée directe'
+    pas = self.vale_x[1]-self.vale_x[0]
+    for i in range(1,len(self.vale_x)) :
+        ecart = NP.abs(((self.vale_x[i]-self.vale_x[i-1])-pas)/pas)
+        if ecart>1.e-3 :
+           raise FonctionError, 'fonction complexe : FFT : la fonction doit etre à pas constant'
+    n = get_len_puis2(self.vale_x)
+    if   syme=='OUI' :
+       vale_fonc=self.vale_y
+    else :
+       if methode=='PROL_ZERO' :
+          fonc_temp=self.vale_y
+          if len(self.vale_y) > 2**n:
+             fonc_temp = NP.concatenate( (self.vale_y, NP.zeros(2**(n+1)-len(self.vale_x)))  )
+       elif methode=='TRONCATURE' :
+          fonc_temp=self.vale_y[:2**n]
+       elif methode=='COMPLET' :
+          fonc_temp=self.vale_y
+       part1=fonc_temp.tolist()
+
+       if NP.remainder(len(part1),2) == 0 :
+          # Si le nombre de point du spectre est pair,
+          # on prolonge en interpolant les 3 dernier points par un polynome de
+          # degre 2, en imposant une tangente horizontale au dernier point (celui
+          # dont on cherche l'ordonnee :
+          # on pose Y=a.w^2+b.w+C , ou Y est la partie reelle de la FFT, et
+          # w la frequence. On connait Y(N-1), Y(N), et on impose dY/dw(N+1)=0
+          # pour la symetrie. On identifie a, b et c, pour calculer Y(N+1)
+          middle=[];
+          middle.append((4*part1[-1].real-part1[len(part1)-2].real)/3);
+          part2=NP.conjugate(fonc_temp[1:len(part1)])
+          part2=part2.tolist();
+          part2.reverse();
+          vale_fonc=NP.array(part1+middle+part2)
+       else :
+          # Si le dernier point est effectivement reel, on reconstruit theoriquement
+          if abs(part1[-1].imag) < abs(part1[-1].real*1e-6) :
+             part1[-1]=part1[-1].real
+          else :
+          # Sinon, on approxime comme dans le cas ou N est pair
+             part1[-1]=(4*part1[len(part1)-2].real-part1[len(part1)-3].real)/3
+          part2=NP.conjugate(fonc_temp[1:len(part1)-1])
+          part2=part2.tolist();
+          part2.reverse();
+          vale_fonc=NP.array(part1+part2)
+
+    vect=FFT.ifft(vale_fonc)
+    vect=vect.real
+    pasfreq =1./(pas*(len(vect)))
+    vale_x  =[pasfreq*i for i in range(len(vect))]
+    vale_y  =vect
+    return t_fonction(vale_x,vale_y,para)
+
+# -----------------------------------------------------------------------------
+class t_nappe :
+  """Classe pour nappes, équivalent au type aster = nappe_sdaster
+  """
+  def __init__(self,vale_para,l_fonc,para,nom='') :
+    """Création d'un objet nappe
+    - vale_para est la liste de valeur des parametres (mot clé PARA dans DEFI_NAPPE)
+    - para est un dictionnaire contenant les entrées PROL_DROITE, PROL_GAUCHE et INTERPOL (cf sd ASTER)
+    - l_fonc est la liste des fonctions, de cardinal égal à celui de vale_para
+    """
+    self.nom = nom
+    pk=para.keys()
+    pk.sort()
+    if pk!=['INTERPOL','NOM_PARA','NOM_PARA_FONC','NOM_RESU','PROL_DROITE','PROL_GAUCHE'] :
+         raise FonctionError, 'nappe : parametres incorrects'
+    if para['INTERPOL'] not in ['NON', 'LIN', 'LOG', ['NON','NON'],['LIN','LIN'],
+                                ['LIN','LOG'],['LOG','LOG'],['LOG','LIN'],] :
+         raise FonctionError, 'nappe : parametre INTERPOL incorrect : %s' % para['INTERPOL']
+    if para['PROL_DROITE'] not in ['EXCLU','CONSTANT','LINEAIRE'] :
+         raise FonctionError, 'nappe : parametre PROL_DROITE incorrect : %s' % para['PROL_DROITE']
+    if para['PROL_GAUCHE'] not in ['EXCLU','CONSTANT','LINEAIRE'] :
+         raise FonctionError, 'nappe : parametre PROL_GAUCHE incorrect : %s' % para['PROL_GAUCHE']
+    self.vale_para    = NP.array(vale_para)
+    if not is_enum(l_fonc):
+         raise FonctionError, 'nappe : la liste de fonctions fournie n est pas une liste'
+    if len(l_fonc)!=len(vale_para) :
+         raise FonctionError, 'nappe : nombre de fonctions différent du nombre de valeurs du paramètre'
+    for f in l_fonc :
+      if not isinstance(f,t_fonction) and not isinstance(f,t_fonction_c) :
+         raise FonctionError, 'nappe : les fonctions fournies ne sont pas du bon type'
+    self.l_fonc       = l_fonc
+    self.para         = para
+
+  def __call__(self,val1,val2):
+    """méthode pour évaluer nappe(val1,val2)
+    """
+    i=NP.searchsorted(self.vale_para,val1)
+    n=len(self.vale_para)
+    if i==0 :
+      if val1==self.vale_para[0]  : return self.l_fonc[0](val2)
+      if val1 <self.vale_para[0]  : 
+         if self.para['PROL_GAUCHE']=='EXCLU'    : raise ParametreError, 'nappe évaluée hors du domaine de définition'
+         if self.para['PROL_GAUCHE']=='CONSTANT' : return self.l_fonc[0](val2)
+         if self.para['PROL_GAUCHE']=='LINEAIRE' : return interp(self.para['INTERPOL'],val1,
+                                                                 self.vale_para[0],
+                                                                 self.vale_para[1],
+                                                                 self.l_fonc[0](val2),
+                                                                 self.l_fonc[1](val2))
+    elif i==n :
+      if val1==self.vale_para[-1] : return self.l_fonc[-1](val2)
+      if val1 >self.vale_para[-1]  : 
+         if self.para['PROL_DROITE']=='EXCLU'    : raise ParametreError, 'nappe évaluée hors du domaine de définition'
+         if self.para['PROL_DROITE']=='CONSTANT' : return self.l_fonc[-1](val2)
+         if self.para['PROL_DROITE']=='LINEAIRE' : return interp(self.para['INTERPOL'],val1,
+                                                                 self.vale_para[-1],
+                                                                 self.vale_para[-2],
+                                                                 self.l_fonc[-1](val2),
+                                                                 self.l_fonc[-2](val2))
+    else :
+      return interp(self.para['INTERPOL'],val1,self.vale_para[i-1],
+                                               self.vale_para[i],
+                                               self.l_fonc[i-1](val2),
+                                               self.l_fonc[i](val2))
+
+  def evalfonc(self, liste_val) :
+    """Renvoie la mm nappe dont les fonctions sont interpolées aux points définis
+    par la liste 'liste_val'.
+    """
+    l_fonc = []
+    for f in self.l_fonc:
+      f2 = f.evalfonc(liste_val)
+      l_fonc.append(f2)
+    return t_nappe(self.vale_para, l_fonc, self.para)
+
+  def __add__(self,other) :
+    """addition avec une autre nappe ou un nombre, par surcharge de l'opérateur +
+    """
+    l_fonc=[]
+    if   isinstance(other,t_nappe):
+      if NP.all(self.vale_para != other.vale_para):
+          raise ParametreError, 'nappes à valeurs de paramètres différentes'
+      for i in range(len(self.l_fonc)) : l_fonc.append(self.l_fonc[i]+other.l_fonc[i])
+    elif is_float_or_int(other):
+      for i in range(len(self.l_fonc)) : l_fonc.append(self.l_fonc[i]+other)
+    else:  raise FonctionError, 't_nappe : erreur de type dans __add__ : %s %s' % (other, type(other))
+    return t_nappe(self.vale_para,l_fonc,self.para)
+
+  def __mul__(self,other) :
+    """multiplication avec une autre fonction ou un nombre, par surcharge de l'opérateur *
+    """
+    l_fonc=[]
+    if   isinstance(other,t_nappe):
+      if NP.all(self.vale_para != other.vale_para) :
+          raise ParametreError, 'nappes à valeurs de paramètres différentes'
+      for i in range(len(self.l_fonc)) : l_fonc.append(self.l_fonc[i]*other.l_fonc[i])
+    elif is_float_or_int(other):
+      for i in range(len(self.l_fonc)) : l_fonc.append(self.l_fonc[i]*other)
+    else:  raise FonctionError, 't_nappe : erreur de type dans __mul__ : %s %s' % (other, type(other))
+    return t_nappe(self.vale_para,l_fonc,self.para)
+
+  def __repr__(self) :
+    """affichage de la nappe en double colonne
+    """
+    texte=[]
+    for i in range(len(self.vale_para)) :
+      texte.append('paramètre : %f' % self.vale_para[i])
+      texte.append(repr(self.l_fonc[i]))
+    return '\n'.join(texte)
+
+  def homo_support(self,other) :
+    """Renvoie la nappe self avec un support union de celui de self et de other
+    le support est la discrétisation vale_para et les discrétisations des fonctions
+    """
+    if self==other:
+       return self
+    vale_para=self.vale_para.tolist()+other.vale_para.tolist()
+    vale_para=list(set(vale_para))
+    vale_para.sort()
+    vale_para=NP.array(vale_para)
+    l_fonc=[]
+    for val in vale_para :
+      if   val in self.vale_para:
+         l_fonc.append(self.l_fonc[NP.searchsorted(self.vale_para, val)])
+      elif val in other.vale_para:
+         other_fonc=other.l_fonc[NP.searchsorted(other.vale_para, val)]
+         new_vale_x=other_fonc.vale_x
+         new_para  =other_fonc.para
+         new_vale_y=[self(val,x) for x in new_vale_x]
+         if isinstance(other_fonc, t_fonction):
+            l_fonc.append(t_fonction(new_vale_x, new_vale_y, new_para))
+         if isinstance(other_fonc, t_fonction_c):
+            l_fonc.append(t_fonction_c(new_vale_x, new_vale_y, new_para))
+      else:
+         raise FonctionError, 'combinaison de nappes : incohérence'
+    return t_nappe(vale_para,l_fonc,self.para)
+
+  def extreme(self) :
+    """renvoie un dictionnaire des valeurs d'ordonnées min et max
+    """
+    val_min=min([min(fonc.vale_y) for fonc in self.l_fonc])
+    val_max=max([max(fonc.vale_y) for fonc in self.l_fonc])
+    vm={'min':[],'max':[]}
+    for i in range(len(self.vale_para)) :
+        for j in range(len(self.l_fonc[i].vale_y)) :
+          y = self.l_fonc[i].vale_y[j]
+          if y==val_min : vm['min'].append([y,self.l_fonc[i].vale_x[j],self.vale_para[i]])
+          if y==val_max : vm['max'].append([y,self.l_fonc[i].vale_x[j],self.vale_para[i]])
+    vm['min'].sort()
+    vm['max'].sort()
+    for item in vm['min'] : item.reverse()
+    for item in vm['max'] : item.reverse()
+    return vm
+
+
+# -----------------------------------------------------------------------------
+def homo_support_nappe(l_f):
+   """Homogénéisation du support d'une liste de nappes.
+   Retourne une liste de nappes.
+   """
+   if not is_enum(l_f):
+      l_f = [l_f,]
+   l_fres=[]
+   for f in l_f:
+      assert isinstance(f, t_nappe), 'Erreur : homo_support_nappe est réservé aux nappes !'
+      __ff=f
+      for g in l_f:
+         __ff=__ff.homo_support(g)
+      l_fres.append(__ff)
+   return l_fres
+
+
+def func_union(func,l_f) :
+    """Retourne la fonction x : func(y0=l_f[0](x), y1=l_f[1](x), ...)
+    sur la liste d'abscisses union de celles de self et de other.
+    """
+    para = copy.copy(l_f[0].para)
+    # Pour les prolongements et l'interpolation, c'est la première fonction qui prime
+    vale_x=[]
+    for f in l_f :
+        vale_x = vale_x + f.vale_x.tolist()
+    # on ote les abscisses doublons
+    vale_x = list(set(vale_x))
+    vale_x.sort()
+    vale_x = NP.array(vale_x)
+    # interpolation des fonctions sur l'union des abscisses
+    vale_y = [map(f,vale_x) for f in l_f]
+    # applique la fonction
+    vale_y = map(func, *vale_y)
+    return t_fonction(vale_x, vale_y, para)
+
+
+def enveloppe(l_f, crit):
+    """renvoie l'enveloppe supérieure ou inférieure de self et other.
+    """
+    if crit.upper() == 'SUP':
+       env = func_union(max, l_f)
+    elif crit.upper() == 'INF':
+       env = func_union(min, l_f)
+    else:
+       raise FonctionError, 'enveloppe : le critère doit etre SUP ou INF !'
+    return env
+
+
+def fractile(l_f, fract):
+    """renvoie l'enveloppe supérieure ou inférieure de self et other.
+    """
+    para = copy.copy(l_f[0].para)
+    # Pour les prolongements et l'interpolation, c'est la première fonction qui prime
+    vale_x=[]
+    for f in l_f :
+        vale_x = vale_x + f.vale_x.tolist()
+    # on ote les abscisses doublons
+    vale_x = list(set(vale_x))
+    vale_x.sort()
+    vale_x = NP.array(vale_x)
+    #
+    l_vale_y=[]
+    for f in l_f :
+        vale_y = map(f,vale_x)
+        l_vale_y.append(vale_y)
+    tab_val=NP.transpose(NP.array(l_vale_y))
+    tab_val=tab_val.tolist()
+    for l in tab_val : l.sort()
+    vale_y=[]
+    if fract>=1. :
+       for l_val in tab_val :
+           vale_y.append(l_val[-1])
+    else :
+       indice=int((len(tab_val[0])-1)*fract)
+       reste =(len(tab_val[0])-1)*fract-indice
+       for l_val in tab_val :
+           vale_y.append(l_val[indice]*(1-reste)+l_val[indice+1]*reste)
+    return t_fonction(vale_x, vale_y, para)
+
+
+def get_len_puis2(tab_in):
+    """Retourne N, la plus grande puissance de 2 telle que 2**N <= len(tab_in)
+    """
+    return int( log(len(tab_in)) / log(2.) )
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/asse_elem_ssd_ops.py b/Aster/Cata/cataSTA10/Macro/asse_elem_ssd_ops.py
new file mode 100644 (file)
index 0000000..fa9d494
--- /dev/null
@@ -0,0 +1,119 @@
+#@ MODIF asse_elem_ssd_ops Macro  DATE 03/01/2011   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# ======================================================================
+
+def asse_elem_ssd_ops(self, RESU_ASSE_SSD, SOUS_STRUC, LIAISON, VERIF, **args):
+    """
+     Echainement des commandes :
+       DEFI_MODELE_GENE + NUME_DDL_GENE + ASSE_MATR_GENE
+    """
+
+    from Accas import _F
+
+    # On importe les definitions des commandes a utiliser dans la macro
+    DEFI_MODELE_GENE = self.get_cmd('DEFI_MODELE_GENE')
+    NUME_DDL_GENE = self.get_cmd('NUME_DDL_GENE')
+    ASSE_MATR_GENE = self.get_cmd('ASSE_MATR_GENE')
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    self.DeclareOut('modele', RESU_ASSE_SSD['MODELE'])
+    self.DeclareOut('nugene', RESU_ASSE_SSD['NUME_DDL_GENE'])
+    if  RESU_ASSE_SSD['RIGI_GENE']:
+        self.DeclareOut('rigidite', RESU_ASSE_SSD['RIGI_GENE'])
+    if RESU_ASSE_SSD['MASS_GENE']:
+        self.DeclareOut('masse', RESU_ASSE_SSD['MASS_GENE'])
+
+    modl_gene = {}
+    mcfact = []
+    for i in range(len(SOUS_STRUC)):
+        arg_sstruc = {}
+        if SOUS_STRUC[i]['ANGL_NAUT'] :
+            arg_sstruc['ANGL_NAUT'] = SOUS_STRUC[i]['ANGL_NAUT']
+        else: # on impose un angle nul
+            arg_sstruc['ANGL_NAUT'] = (0.,0.,0.,)
+        if SOUS_STRUC[i]['TRANS'] :
+            arg_sstruc['TRANS'] = SOUS_STRUC[i]['TRANS']
+        else: # on impose une translation nulle
+            arg_sstruc['TRANS'] = (0.,0.,0.,)
+        mcfact.append( _F(NOM = SOUS_STRUC[i]['NOM'],
+                          MACR_ELEM_DYNA = SOUS_STRUC[i]['MACR_ELEM_DYNA'],
+                       **arg_sstruc))
+    modl_gene['SOUS_STRUC'] = mcfact
+
+    mcfact = []
+    for i in range(len(LIAISON)):
+        arg_liaison = {}
+        if LIAISON[i]['GROUP_MA_MAIT_1'] :
+            arg_liaison['GROUP_MA_MAIT_1'] = LIAISON[i]['GROUP_MA_MAIT_1']
+        if LIAISON[i]['MAILLE_MAIT_1'] :
+            arg_liaison['MAILLE_MAIT_1'] = LIAISON[i]['MAILLE_MAIT_1']
+        if LIAISON[i]['GROUP_MA_MAIT_2'] :
+            arg_liaison['GROUP_MA_MAIT_2'] = LIAISON[i]['GROUP_MA_MAIT_2']
+        if LIAISON[i]['MAILLE_MAIT_2'] :
+            arg_liaison['MAILLE_MAIT_2'] = LIAISON[i]['MAILLE_MAIT_2']
+        if LIAISON[i]['OPTION'] :
+            arg_liaison['OPTION'] = LIAISON[i]['OPTION']
+            if arg_liaison['OPTION'] == 'CLASSIQUE' and args['METHODE'] == 'ELIMINE':
+                print 'ALARME : methode ELIMINE non adaptee a OPTION : ', \
+                      arg_liaison['OPTION']
+        mcfact.append( _F(SOUS_STRUC_1 = LIAISON[i]['SOUS_STRUC_1'],
+                          INTERFACE_1 = LIAISON[i]['INTERFACE_1'],
+                          SOUS_STRUC_2 = LIAISON[i]['SOUS_STRUC_2'],
+                          INTERFACE_2 = LIAISON[i]['INTERFACE_2'],
+                       **arg_liaison))
+    modl_gene['LIAISON'] = mcfact
+
+    if VERIF:
+        mcfact = []
+        for i in range(len(VERIF)):
+            arg_verif = {}
+            if VERIF[i]['STOP_ERREUR'] :
+                arg_verif['STOP_ERREUR'] = VERIF[i]['STOP_ERREUR']
+            if VERIF[i]['PRECISION'] :
+                arg_verif['PRECISION'] = VERIF[i]['PRECISION']
+            if VERIF[i]['CRITERE'] :
+                arg_verif['CRITERE'] = VERIF[i]['CRITERE']
+            mcfact.append( _F( **arg_verif))
+        modl_gene['VERIF'] = mcfact
+    else:
+        modl_gene['VERIF'] = None
+
+    modele = DEFI_MODELE_GENE(
+                 SOUS_STRUC = modl_gene['SOUS_STRUC'],
+                 LIAISON = modl_gene['LIAISON'],
+                 VERIF = modl_gene['VERIF'],
+                       )
+
+    nugene = NUME_DDL_GENE(MODELE_GENE = modele,
+                           METHODE = args['METHODE'],
+                           STOCKAGE = args['STOCKAGE'],
+                          )
+
+    if  RESU_ASSE_SSD['RIGI_GENE']:
+        rigidite = ASSE_MATR_GENE( NUME_DDL_GENE = nugene,
+                                   OPTION = 'RIGI_GENE')
+    if RESU_ASSE_SSD['MASS_GENE']:
+        masse = ASSE_MATR_GENE( NUME_DDL_GENE = nugene,
+                                OPTION = 'MASS_GENE')
+
+    return
+
index 749fa42751602d103832980971a2fce9f953fce0..e2967d47b12fc3d68818ccb64415c216413841e0 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calc_essai_ops Macro  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+#@ MODIF calc_essai_ops Macro  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
 ## \package calc_essai_ops Implémentation de la macro CALC_ESSAI
 #
 # Ce module contient la partie controle de la macro CALC_ESSAI
-# l'implémetation de cette macro se trouve dans les modules
-# meidee_help, meidee_mac, meidee_massamor, meidee_turbulent
-# on utilise aussi une librairie de support
-# pour la gestion de l'interface graphique dans meidee_iface
+# les autres fichiers sources sont situes dans ../Calc_essai
 
 
 def calc_essai_ops( self,
                     INTERACTIF          = None,
-                    #UNITE_FIMEN         = None,
                     UNITE_RESU          = None,
                     EXPANSION           = None,
-                    #MEIDEE_FLUDELA      = None,
-                    #MEIDEE_TURBULENT    = None,
                     IDENTIFICATION      = None,
                     MODIFSTRUCT         = None,
                     TRAITEMENTSIG       = None,
                     GROUP_NO_CAPTEURS   = None,
                     GROUP_NO_EXTERIEUR  = None,
-                    #RESU_FLUDELA        = None,
-                    #RESU_TURBULENT      = None,
                     RESU_IDENTIFICATION = None,
                     RESU_MODIFSTRU      = None,
                     **args):
+
+    from Calc_essai.cata_ce import CalcEssaiObjects
     import aster
-    from Meidee.meidee_cata import MeideeObjects
     ier = 0
     
     # La macro compte pour 1 dans la numerotation des commandes
@@ -75,60 +68,35 @@ def calc_essai_ops( self,
                           "ComptTable" : 0,
                           "TablesOut"  : table_fonction}
 
-## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
-##    if not RESU_FLUDELA:
-##        RESU_FLUDELA = []
-##    else:
-##        for res in RESU_FLUDELA:
-##            table.append(res['TABLE'])
-##    out_fludela = {"DeclareOut" : self.DeclareOut,
-##                   "TypeTables" : 'TABLE',
-##                   "ComptTable" : 0,
-##                   "TablesOut" : table}
-##
-##    if not RESU_TURBULENT:
-##        RESU_TURBULENT = []
-##    else:
-##        for res in RESU_TURBULENT:
-##            table_fonction.append(res['FONCTION'])
-##    out_meideeturb = {"DeclareOut" : self.DeclareOut,
-##                      "FoncOut" : table_fonction}
     
     # Mode interactif : ouverture d'une fenetre Tk
     if INTERACTIF == "OUI":
         aster.onFatalError('EXCEPTION')
 
         create_interactive_window(self,
-                                  #UNITE_FIMEN,
-                                  #out_fludela,
-                                  #out_meideeturb,
                                   out_identification,
                                   out_modifstru,
                                   )
     else:
-        from Meidee.meidee_calcul import MessageBox
-        from Meidee.meidee_test import TestMeidee
+        from Calc_essai.ce_test import MessageBox
+        from Calc_essai.ce_test import TestCalcEssai
         mess = MessageBox(UNITE_RESU)
         mess.disp_mess("Mode non intéractif")
         
-        objects = MeideeObjects(self, mess)
+        objects = CalcEssaiObjects(self, mess)
 
         # importation des concepts aster existants de la memoire jeveux
-        TestMeidee(self,
-                   mess,
-                   #out_fludela,
-                   #out_meideeturb,
-                   out_identification,
-                   out_modifstru,
-                   objects,
-                   EXPANSION,
-                   #MEIDEE_FLUDELA,
-                   #MEIDEE_TURBULENT,
-                   IDENTIFICATION,
-                   MODIFSTRUCT,
-                   GROUP_NO_CAPTEURS,
-                   GROUP_NO_EXTERIEUR              
-                   )
+        TestCalcEssai(self,
+                      mess,
+                      out_identification,
+                      out_modifstru,
+                      objects,
+                      EXPANSION,
+                      IDENTIFICATION,
+                      MODIFSTRUCT,
+                      GROUP_NO_CAPTEURS,
+                      GROUP_NO_EXTERIEUR              
+                      )
 
         mess.close_file()
     aster.onFatalError(prev)
@@ -136,28 +104,21 @@ def calc_essai_ops( self,
 
 
 
-def create_tab_mess_widgets(tk):
+def create_tab_mess_widgets(tk,tabskeys):
     """Construits les objects table et boîte à messages."""
     try:
         from Pmw import PanedWidget
     except ImportError:
         PanedWidget = None
     
-    from Meidee.meidee_iface import MessageBoxInteractif, TabbedWindow
+    from Calc_essai.outils_ihm import MessageBoxInteractif, TabbedWindow
     
     tabsw = tk
     msgw = tk
     tk.rowconfigure(0, weight=2)
     tk.rowconfigure(1, weight=1)
 
-    tabs = TabbedWindow(tabsw, ["Expansion de modeles",
-                                "Modification structurale",
-                                #"MEIDEE mono-modal fludela",
-                                #"MEIDEE mono-modal turbulent",
-                                "Identification de chargement",
-                                "Traitement du signal",
-                                "Parametres de visualisation",
-                               ])
+    tabs = TabbedWindow(tabsw, tabskeys)
 
     tabs.grid(row=0, column=0, sticky='nsew')
     # pack(side='top',expand=1,fill='both')
@@ -168,23 +129,6 @@ def create_tab_mess_widgets(tk):
     
     return tabs, mess
 
-## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
-##def get_fimen_files(UNITE_FIMEN, FIMEN=None):
-##    """Fichiers fimen éventuels associés aux unités logiques en entrée"""
-##    # XXX FIMEN is not defined (should it be included in the macro)
-##    from Utilitai.UniteAster import UniteAster
-##    fichiers_fimen = []
-##    print "FIMEN:", UNITE_FIMEN
-##
-##    if UNITE_FIMEN:
-##        if type(FIMEN)==int:
-##            UNITE_FIMEN= [ UNITE_FIMEN ]
-##        for unit in UNITE_FIMEN:
-##            UL = UniteAster()
-##            fichiers_fimen.append( (unit, UL.Nom(unit)) )
-##
-##    return fichiers_fimen
-
 
 class FermetureCallback:
     """Opérations à appliquer lors de la fermeture de la
@@ -203,70 +147,60 @@ class FermetureCallback:
 
 
 def create_interactive_window(macro,
-                              #UNITE_FIMEN,
-                              #out_fludela,
-                              #out_meideeturb,
                               out_identification,
                               out_modifstru,
                               ):
     """Construit la fenêtre interactive comprenant une table pour 
-    les 4 domaines de Meidee."""
+    les 4 domaines de CALC_ESSAI."""
     from Tkinter import Tk
     
-    from Meidee.meidee_cata import MeideeObjects
-    from Meidee.meidee_correlation import InterfaceCorrelation
-    from Meidee.meidee_modifstruct import InterfaceModifStruct
-    from Meidee.meidee_turbulent import InterfaceTurbulent
-    from Meidee.meidee_parametres import InterfaceParametres
-    from Meidee.meidee_calc_spec import InterfaceCalcSpec
-## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
-##    from Meidee.meidee_fludela import InterfaceFludela, InterfaceTurbMonomod
+    from Calc_essai.cata_ce import CalcEssaiObjects
+    from Calc_essai.ce_ihm_expansion import InterfaceCorrelation
+    from Calc_essai.ce_ihm_modifstruct import InterfaceModifStruct
+    from Calc_essai.ce_ihm_identification import InterfaceIdentification
+    from Calc_essai.ce_ihm_parametres import InterfaceParametres
+    from Calc_essai.ce_calc_spec import InterfaceCalcSpec
     
     # fenetre principale
     tk = Tk()
-    tk.rowconfigure(0, weight=1)
-    tk.columnconfigure(0,weight=1)
     tk.title("CALC_ESSAI")
+    tk.rowconfigure(0,weight=1)
+    tk.rowconfigure(1,weight=20)
+    tk.rowconfigure(2,weight=1)
 
-    tabs, mess = create_tab_mess_widgets(tk)
+    tabskeys = ["Expansion de modeles",
+                "Modification structurale",
+                "Identification de chargement",
+                "Traitement du signal",
+                "Parametres de visualisation" ]
+    
+    tabs, mess = create_tab_mess_widgets(tk, tabskeys)
     main = tabs.root()
     
     # importation des concepts aster de la memoire jeveux    
-    objects = MeideeObjects(macro, mess)
+    objects = CalcEssaiObjects(macro, mess)
     tabs.set_objects(objects)
     
     param_visu = InterfaceParametres(main, mess)
     
-    iface = InterfaceCorrelation(main, objects, macro, mess,
-                                 param_visu)
-    imodifstruct = InterfaceModifStruct(main, objects, macro,
-                                        mess, out_modifstru, param_visu)
-    identification = InterfaceTurbulent(main, objects, mess, out_identification, param_visu)
-    
+    iface = InterfaceCorrelation(main, objects, macro, mess,param_visu)
+    imodifstruct = InterfaceModifStruct(main, objects, macro,mess, out_modifstru, param_visu)
+    identification = InterfaceIdentification(main, objects, mess, out_identification, param_visu)
     calc_spec= InterfaceCalcSpec(main,objects,mess,param_visu)
-## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
-##    fludelamonomod = InterfaceFludela(main, objects,
-##                                      get_fimen_files(UNITE_FIMEN), mess, out_fludela, param_visu)
-##    turbmonomod = InterfaceTurbMonomod(main, objects,get_fimen_files(UNITE_FIMEN) ,mess, out_meideeturb, param_visu)
-
 
-    tabs.set_tab("Expansion de modeles", iface.main)
-    tabs.set_tab("Modification structurale", imodifstruct.main)
-    tabs.set_tab("Identification de chargement", identification)
-    tabs.set_tab("Traitement du signal", calc_spec)
-    tabs.set_tab("Parametres de visualisation", param_visu)
-## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
-##    tabs.set_tab("MEIDEE mono-modal fludela", fludelamonomod )
-##    tabs.set_tab("MEIDEE mono-modal turbulent", turbmonomod )
-    
+    tabs.set_tab(tabskeys[0], iface.main)
+    tabs.set_tab(tabskeys[1], imodifstruct.main)
+    tabs.set_tab(tabskeys[2], identification)
+    tabs.set_tab(tabskeys[3], calc_spec)
+    tabs.set_tab(tabskeys[4], param_visu)    
     
-    tabs.set_current_tab("Expansion de modeles")
+    tabs.set_current_tab(tabskeys[4])
 
     tk.protocol("WM_DELETE_WINDOW", FermetureCallback(tk, identification).apply)
     
     try:
         tk.mainloop()
     except :
-        print "MEIDEE : *ERREUR*"
+        print "CALC_ESSAI : *ERREUR*"
 
     
index 95a09ffffb5f8382ace625f8b6edd487b4c43e6c..7d2ac6d1d3b607ac98c6302a8cf2fb6ecf67c4a4 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calc_europlexus_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_europlexus_ops Macro  DATE 15/02/2011   AUTEUR ASSIRE A.ASSIRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -113,10 +113,13 @@ def calc_europlexus_ops(self,MODELE,CARA_ELEM,CHAM_MATER,EXCIT,FONC_PARASOL=None
   from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
   MasquerAlarme('MED_1')
   MasquerAlarme('MED_54')
+  MasquerAlarme('MED_77')
+  MasquerAlarme('MED_37')
+
 
   # Ligne de commande d'Europlexus
   if args.has_key('LOGICIEL'): EXEC = args['LOGICIEL']
-  else: EXEC = '/home/europlex/EPXD/EUROPLEXUS_GESTION/runepx_d'
+  else: EXEC = '/home/europlex/EPXD/bin/europlexus'
   if debug: print 'args_keys : %s'%args.keys()
   if args.has_key('PAS_NBRE_COURBE') :
      if debug: print 'PAS NBRE COURBE = ok (%s)'%args['PAS_NBRE_COURBE']
@@ -168,6 +171,8 @@ def calc_europlexus_ops(self,MODELE,CARA_ELEM,CHAM_MATER,EXCIT,FONC_PARASOL=None
   # Pour la gestion des alarmes
   RetablirAlarme('MED_1')
   RetablirAlarme('MED_54')
+  RetablirAlarme('MED_77')
+  RetablirAlarme('MED_37')
 
   return ier
 
@@ -1815,7 +1820,7 @@ class EUROPLEXUS:
     
     # Dictionnaire permettant de traduire le champ epx en med au nom asscie dans aster
 # AA    epx2aster = {'CONTRAINTE':'SIEF_ELGA','ECROUISSAGE':'VARI_ELGA'}
-    epx2aster = {'CONTRAINTE':'SIEF_ELGA','DEFORMATION':'EPSI_ELGA_DEPL','ECROUISSAGE':'VARI_ELGA'}
+    epx2aster = {'CONTRAINTE':'SIEF_ELGA','DEFORMATION':'EPSI_ELGA','ECROUISSAGE':'VARI_ELGA'}
 
 # AA : desactive pour le moment
 #     # Enrichir la liste format_med par les champs aux pts de gauss
@@ -1842,6 +1847,8 @@ class EUROPLEXUS:
     fort = 'fort.%i' %unite
     if os.path.isfile(fort) : os.remove(fort)
 
+    if not os.path.isfile(fichier_med): UTMESS('F','PLEXUS_14')   
+
     os.symlink(fichier_med,fort)
 
     # Regeneration des mots-cles EXCIT passés en argument de la macro
@@ -1850,6 +1857,7 @@ class EUROPLEXUS:
        dExcit.append(j.cree_dict_valeurs(j.mc_liste))
        for i in dExcit[-1].keys():
           if dExcit[-1][i]==None : del dExcit[-1][i]
+
     resu = LIRE_RESU(TYPE_RESU='EVOL_NOLI',
 #                  VERI_ELGA='NON',
                   FORMAT='MED',
@@ -2299,7 +2307,7 @@ class EUROPLEXUS:
         # resu = CREA_RESU(reuse=resu,
             # OPERATION = 'AFFE',
             # TYPE_RESU = 'EVOL_NOLI',
-            # NOM_CHAM  = 'EPSI_ELGA_DEPL',
+            # NOM_CHAM  = 'EPSI_ELGA',
             # AFFE = dicAffe2)
         resu = CREA_RESU(reuse=resu,
             OPERATION = 'AFFE',
@@ -2316,7 +2324,11 @@ class EUROPLEXUS:
   def lancer_calcul(self,fichier_med='auto'):
 
      fichier_epx = self.nom_fichiers['COMMANDE']
-     EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; %s -usetmpdir %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+#     EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; %s -usetmpdir %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+#                   CODE_RETOUR_MAXI=-1,
+#                   INFO=2)
+
+     EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; unset PMI_RANK ; %s %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
                    CODE_RETOUR_MAXI=-1,
                    INFO=2)
 
index 6ad2972405f3b3beab69e96f6ec8a4bf1f9c2f5d..baf97a6175ba7bc5eec1081b4ab1d8473a65b1e4 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calc_fonction_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_fonction_ops Macro  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -17,6 +17,7 @@
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 
 import os
 import copy
@@ -26,6 +27,7 @@ import traceback
 def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
                       SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION,
                       ENVELOPPE,FRACTILE,ASSE,CORR_ACCE,PUISSANCE,INVERSE,
+                      REGR_POLYNOMIALE,
                       NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
                       PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC,
                       PROL_GAUCHE_FONC,INFO,**args):
@@ -33,6 +35,8 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
       Ecriture de la macro CALC_FONCTION
    """
    ier=0
+   import numpy as NP
+
    from Cata_Utils.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \
             FonctionError, ParametreError, InterpolationError, ProlongementError, enveloppe, fractile
    from Utilitai import liss_enveloppe
@@ -301,7 +305,7 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
       
          # construction de la nappe
          vale_para = l_amor
-         para      = { 'INTERPOL'      : ['LIN','LOG'],
+         para      = { 'INTERPOL'      : ['LIN', 'LOG'],
                        'NOM_PARA_FONC' : 'FREQ',
                        'NOM_PARA'      : 'AMOR',
                        'PROL_DROITE'   : 'EXCLU',
@@ -325,6 +329,7 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
       ###
       if (LISS_ENVELOP!= None):
          __ff=LISS_ENVELOP['NAPPE'].convert()
+         ctxt.f = __ff.nom
          sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="")
          sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS'])
          para_fonc=__ff.l_fonc[0].para
@@ -332,6 +337,26 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
          for val in sp_lisse.listTable: 
             l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc))
          __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para)
+      ###
+      if (REGR_POLYNOMIALE != None):
+          __ff = REGR_POLYNOMIALE['FONCTION'].convert()
+          ctxt.f = __ff.nom
+          deg = REGR_POLYNOMIALE['DEGRE']
+          coef = NP.polyfit(__ff.vale_x, __ff.vale_y, deg)
+          if coef is None:
+              raise FonctionError("La régression polynomiale n'a pas convergé.")
+          # interpolation sur une liste d'abscisses
+          absc = __ff.vale_x
+          if args['LIST_PARA'] is not None:
+            absc = args['LIST_PARA'].Valeurs()
+          vale = NP.polyval(coef, absc)
+          # paramètres
+          para = __ff.para.copy()
+          para['INTERPOL'] = ['LIN', 'LIN']
+          __ex = t_fonction(absc, vale, para)
+          coef_as_str = os.linesep.join(['   a[%d] = %f' % (i, ci) \
+                                         for i, ci in enumerate(coef)])
+          UTMESS('I', 'FONCT0_57', coef_as_str)
 
    except InterpolationError, msg:
       UTMESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg)))
@@ -348,11 +373,11 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
    
    if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c):
       para=__ex.para
-      if NOM_PARA   !=None : para['NOM_PARA']   =NOM_PARA
-      if NOM_RESU   !=None : para['NOM_RESU']   =NOM_RESU
-      if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE
-      if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE
-      if INTERPOL   !=None : para['INTERPOL']   =INTERPOL
+      if NOM_PARA    != None: para['NOM_PARA']    = NOM_PARA
+      if NOM_RESU    != None: para['NOM_RESU']    = NOM_RESU
+      if PROL_DROITE != None: para['PROL_DROITE'] = PROL_DROITE
+      if PROL_GAUCHE != None: para['PROL_GAUCHE'] = PROL_GAUCHE
+      if INTERPOL    != None: para['INTERPOL']    = INTERPOL
       if   isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul()
       elif isinstance(__ex,t_fonction)  : para['VALE']   = __ex.tabul()
       C_out=DEFI_FONCTION(**para)
@@ -361,17 +386,20 @@ def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
       for f in __ex.l_fonc :
          para=f.para
          def_fonc.append(_F(VALE       =f.tabul(),
-                            INTERPOL   =f.para['INTERPOL'],
-                            PROL_DROITE=f.para['PROL_DROITE'],
-                            PROL_GAUCHE=f.para['PROL_GAUCHE'],))
+                            INTERPOL   =INTERPOL_FONC or f.para['INTERPOL'],
+                            PROL_DROITE=PROL_DROITE_FONC or f.para['PROL_DROITE'],
+                            PROL_GAUCHE=PROL_GAUCHE_FONC or f.para['PROL_GAUCHE'],))
       para=__ex.para
-      if NOM_PARA      !=None : para['NOM_PARA']   =NOM_PARA
-      if NOM_RESU      !=None : para['NOM_RESU']   =NOM_RESU
-      if PROL_DROITE   !=None : para['PROL_DROITE']=PROL_DROITE
-      if PROL_GAUCHE   !=None : para['PROL_GAUCHE']=PROL_GAUCHE
-      if NOM_PARA_FONC !=None : para['NOM_PARA_FONC']   =INTERPOL
-      if INTERPOL_FONC !=None : para['INTERPOL']   =INTERPOL
-      C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para)
+      if NOM_PARA      != None: para['NOM_PARA']      = NOM_PARA
+      if NOM_RESU      != None: para['NOM_RESU']      = NOM_RESU
+      if PROL_DROITE   != None: para['PROL_DROITE']   = PROL_DROITE
+      if PROL_GAUCHE   != None: para['PROL_GAUCHE']   = PROL_GAUCHE
+      if NOM_PARA_FONC != None: para['NOM_PARA_FONC'] = NOM_PARA_FONC
+      if INTERPOL      != None: para['INTERPOL']      = INTERPOL
+      print para
+      C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),
+                       DEFI_FONCTION=def_fonc,
+                       **para)
    if INFO > 1:
       IMPR_FONCTION(FORMAT='TABLEAU',
                     UNITE=6,
diff --git a/Aster/Cata/cataSTA10/Macro/calc_ifs_dnl_ops.py b/Aster/Cata/cataSTA10/Macro/calc_ifs_dnl_ops.py
new file mode 100644 (file)
index 0000000..0794c6a
--- /dev/null
@@ -0,0 +1,580 @@
+#@ MODIF calc_ifs_dnl_ops Macro  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# MACRO DE COUPLAGE IFS AVEC SATURNE VIA YACS
+#
+import os
+def calc_ifs_dnl_ops(self,GROUP_MA_IFS,NOM_CMP_IFS,UNITE_NOEUD,UNITE_ELEM,MODELE,ETAT_INIT,EXCIT,PAS_INIT,**args):
+  #=================================================================#
+  # Initialisations                                                 #
+  # --------------------------------------------------------------- #
+  """
+     Corps de la macro CALC_IFS_DNL
+  """
+  ier=0
+  import aster
+  import os,string,types
+  from Accas import _F
+  from Utilitai.Table import Table
+  from Utilitai.Utmess import  UTMESS
+  # from Cata.cata import *
+  from Cata.cata import EXTR_RESU, DEFI_LIST_ENTI, IMPR_RESU
+  from SD.sd_maillage      import sd_maillage
+  #
+  self.set_icmd(1)
+  #=================================================================#
+  # Liste des commandes ASTER utilisees                             #
+  # --------------------------------------------------------------- #
+  AFFE_CHAR_MECA=self.get_cmd('AFFE_CHAR_MECA')
+  DEFI_GROUP    =self.get_cmd('DEFI_GROUP')
+  DEFI_LIST_REEL=self.get_cmd('DEFI_LIST_REEL')
+  DYNA_NON_LINE=self.get_cmd('DYNA_NON_LINE')
+  LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
+  PROJ_CHAMP    =self.get_cmd('PROJ_CHAMP')
+  # Operateurs specifiques pour IFS
+  IMPR_MAIL_YACS  =self.get_cmd('IMPR_MAIL_YACS')
+  ENV_CINE_YACS=self.get_cmd('ENV_CINE_YACS')
+  MODI_CHAR_YACS =self.get_cmd('MODI_CHAR_YACS')
+  RECU_PARA_YACS =self.get_cmd('RECU_PARA_YACS')
+  #=================================================================#
+  # Gestion des mots cles specifiques a CALC_IFS_DNL                #
+  # --------------------------------------------------------------- #
+  motscles     = {}
+  poidsMocle   = {}
+  grpRefeMocle = {}
+  grpProjMocle = {}
+  ifsCharMocle = {}
+  tmpListe     = []
+  ifsCharList  = []
+  poidsMocle  ['VIS_A_VIS']     = []
+  grpRefeMocle['CREA_GROUP_NO'] = []
+  grpProjMocle['CREA_GROUP_NO'] = []
+  ifsCharMocle['GROUP_NO']      = []
+  
+  ifsCharTuple = (GROUP_MA_IFS,)
+  #print "ifsCharTuple=",ifsCharTuple
+  ifsCharList = GROUP_MA_IFS
+  #print "len(ifsCharList)=",len(ifsCharList)
+  prefix="_"
+  for j in range(len(ifsCharTuple)):
+    poidsDico              = {}
+    poidsDico['GROUP_MA_1']= ifsCharTuple[j]
+    poidsDico['GROUP_NO_2']= 'GN'+str(j+1)
+    poidsMocle['VIS_A_VIS'].append(poidsDico)
+
+    grpProjDico                  ={}
+    grpProjDico['GROUP_MA']      ='GM'+str(j+1)
+    grpProjDico['NOM']           ='GN'+str(j+1)
+    grpProjMocle['CREA_GROUP_NO'].append(grpProjDico)
+
+    if (not(ifsCharTuple[j] in tmpListe)):
+      tmpListe.append(ifsCharTuple[j])
+      grpRefeNode  = prefix + ifsCharTuple[j]
+    #  ifsCharTuple = ifsCharTuple[1:] + (grpRefeNode,)
+            
+      grpRefeDico                  = {}
+      grpRefeDico['GROUP_MA']      = ifsCharTuple[j]
+      grpRefeDico['NOM']           = grpRefeNode
+      grpRefeMocle['CREA_GROUP_NO'].append(grpRefeDico)
+
+  for j in range(len(tmpListe)):
+    tmpListe[j] = prefix + tmpListe[j]
+  ifsCharMocle['GROUP_NO']=tuple(tmpListe)
+
+  for j in range(len(NOM_CMP_IFS)):
+    if (NOM_CMP_IFS[j] == 'FX'):
+      ifsCharMocle['FX'] = 0.0
+    elif (NOM_CMP_IFS[j] == 'FY'):
+      ifsCharMocle['FY'] = 0.0
+    elif (NOM_CMP_IFS[j] == 'FZ'):
+      ifsCharMocle['FZ'] = 0.0
+    else:
+      raise AsException("MOT-CLE NON PERMIS : ",NOM_CMP_IFS[j])
+
+  #=================================================================#
+  # Gestion des mots cles de DYNA_NON_LINE                          #
+  # --------------------------------------------------------------- #
+  motCleSimpTuple= ('MODELE',
+                    'CHAM_MATER',
+                    'MODE_STAT',
+                    'CARA_ELEM',
+                    'MASS_DIAG',
+                    'SENSIBILITE',
+                    'INFO',
+                    'TITRE')
+
+# 'COMP_INCR' =C_COMP_INCR() : dans motCleFactTuple ?
+  motCleFactTuple= ('EXCIT',
+                    'EXCIT_GENE',
+                    'SOUS_STRUC',
+                    'AMOR_MODAL',
+                    'PROJ_MODAL',
+                    'COMP_INCR',
+                    'COMP_ELAS',
+                    'ETAT_INIT',
+                    'SCHEMA_TEMPS',
+                    'NEWTON',
+                    'SOLVEUR',
+                    'RECH_LINEAIRE',
+                    'PILOTAGE',
+                    'CONVERGENCE',
+                    'OBSERVATION',
+                    'AFFICHAGE',
+                    'ARCHIVAGE',
+                    'CRIT_FLAMB',
+                    'MODE_VIBR')
+
+  for i in range(len(motCleSimpTuple)):
+    cle = motCleSimpTuple[i]
+    if args.has_key(cle):
+      motscles[cle]=args[cle]
+
+  for i in range(len(motCleFactTuple)):
+    cle = motCleFactTuple[i]  
+    if args.has_key(cle):
+      if args[cle] != None :
+        dMotCle=[]
+        for j in args[cle]:
+          dMotCle.append(j.cree_dict_valeurs(j.mc_liste))
+          for k in dMotCle[-1].keys():
+            if dMotCle[-1][k]==None : del dMotCle[-1][k]
+        motscles[cle]=dMotCle
+  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
+
+  #===============================#
+  # INITIALISATION DE LA SD MACRO #
+  # ----------------------------- #
+  self.DeclareOut('resdnl',self.sd)
+
+
+  #============================================================#
+  # GENERATION DES GROUPES DE NOEUDS SUR LE MAILLAGE STRUCTURE #
+  # ---------------------------------------------------------- #
+  ### on recupere le concept maillage
+  #print "MODELE=",MODELE
+  #print "MODELE.strip()=",MODELE.strip()
+  
+  iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',MODELE.nom,'MODELE')
+  _strucMesh = self.get_concept(nom_ma.strip())
+  #print "MAILLAGE STRUCTURE=",_strucMesh
+  #print "DEFI_GROUP MAILLAGE STRUCTURE"
+  #print "grpRefeMocle=",grpRefeMocle
+  _strucMesh = DEFI_GROUP(reuse    = _strucMesh,
+                          MAILLAGE = _strucMesh,
+                          **grpRefeMocle)
+
+  #=============================================================================#
+  # RECUPERATION DU MAILLAGE COUPLE POUR LES DEPLACEMENTS (NOEUDS Code_Saturne) #  !!! YACS COMMUNICATION !!!
+  # --------------------------------------------------------------------------- #
+  print "IMPR_MAIL_YACS MAILLAGE NOEUDS"
+  IMPR_MAIL_YACS(UNITE_MAILLAGE = UNITE_NOEUD,TYPE_MAILLAGE = 'SOMMET',),
+  print "LIRE_MAILLAGE MAILLAGE NOEUDS"
+  _fluidNodeMesh = LIRE_MAILLAGE(UNITE = UNITE_NOEUD)
+  print "DEFI_GROUP MAILLAGE NOEUDS"
+  #print "grpProjMocle=",grpProjMocle
+  _fluidNodeMesh = DEFI_GROUP(reuse    = _fluidNodeMesh,
+                              MAILLAGE = _fluidNodeMesh,
+                              **grpProjMocle)
+
+  #====================================================================================#
+  # RECUPERATION DU MAILLAGE COUPLE POUR LES FORCES (CENTRE DES ELEMENTS Code_Saturne) #  !!! YACS COMMUNICATION !!!
+  # ---------------------------------------------------------------------------------- #
+  print "IMPR_MAIL_YACS MAILLAGE ELEMENTS"
+  IMPR_MAIL_YACS(UNITE_MAILLAGE = UNITE_ELEM,TYPE_MAILLAGE = 'MILIEU',)
+  print "LIRE_MAILLAGE MAILLAGE ELEMENTS"
+  _fluidElemMesh = LIRE_MAILLAGE(UNITE = UNITE_ELEM)
+  print "DEFI_GROUP MAILLAGE ELEMENTS"
+  #print "grpProjMocle=",grpProjMocle
+  _fluidElemMesh = DEFI_GROUP(reuse    = _fluidElemMesh,
+                               MAILLAGE = _fluidElemMesh,
+                               **grpProjMocle)
+
+  #==============================================#
+  # CALCUL DES PROJECTEURS POUR LES DEPLACEMENTS #
+  # ASTER -> CODE COUPLE                         #
+  # -------------------------------------------- #
+  print "PROJ_CHAMP MAILLAGE NOEUDS"
+  #print "MAILLAGE_1=",_strucMesh.nom
+  #print "MAILLAGE_2=",_fluidNodeMesh.nom
+  _fluidNodePoids = PROJ_CHAMP(PROJECTION = 'NON',
+                               METHODE    = 'COUPLAGE',
+                               MAILLAGE_1 = _strucMesh,
+                               MAILLAGE_2 = _fluidNodeMesh,
+                               **poidsMocle)
+
+  #========================================#
+  # CALCUL DES PROJECTEURS POUR LES FORCES #
+  # CODE COUPLE -> ASTER                   #
+  # -------------------------------------- #
+  print "PROJ_CHAMP MAILLAGE ELEMENTS"
+  #print "MAILLAGE_1=",_strucMesh
+  #print "MAILLAGE_2=",_fluidElemMesh
+  _fluidElemPoids = PROJ_CHAMP(PROJECTION = 'NON',
+                               METHODE    = 'COUPLAGE',
+                               MAILLAGE_1 = _strucMesh,
+                               MAILLAGE_2 = _fluidElemMesh,
+                               **poidsMocle)
+
+  #====================================================================================#
+  # CREATION DE LA CARTES DES FORCES NODALES AVEC UNE INITIALISATION DES FORCES A ZERO #
+  # ---------------------------------------------------------------------------------- #
+  print "AFFE_CHAR_MECA"
+  _ifsCharMeca = AFFE_CHAR_MECA(MODELE       = MODELE,
+                                FORCE_NODALE = _F(**ifsCharMocle),)
+  dExcit=[]
+  if (EXCIT != None):
+    for j in EXCIT :
+      dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+      for i in dExcit[-1].keys():
+        if dExcit[-1][i]==None : del dExcit[-1][i]
+  dExcit.append(_F(CHARGE=_ifsCharMeca),)
+
+  #====================================#
+  # ENVOIE DU MAILLAGE INITIAL DEFORME #  !!! YACS COMMUNICATION !!!
+  # ---------------------------------- #
+  dEtatInit=[]
+  dExtrInit={}
+  if (ETAT_INIT != None):
+    if (ETAT_INIT['DEPL'] != None):
+      dExtrInit['DEPL']=ETAT_INIT['DEPL']
+    if (ETAT_INIT['VITE'] != None):
+      dExtrInit['VITE']=ETAT_INIT['VITE']
+    if (ETAT_INIT['ACCE'] != None):
+      dExtrInit['ACCE']=ETAT_INIT['ACCE']
+    for j in ETAT_INIT:
+      dEtatInit.append(j.cree_dict_valeurs(j.mc_liste))
+      for i in dEtatInit[-1].keys():
+        if dEtatInit[-1][i]==None : del dEtatInit[-1][i]
+
+  #======================================#
+  # RECUPERATION DES DONNEES TEMPORELLES #  !!! YACS COMMUNICATION !!!
+  # ------------------------------------ #
+  print "Appel initialisation"
+  
+  _timeStepAster = PAS_INIT
+  print "PAS=",_timeStepAster
+  _timeV = RECU_PARA_YACS(DONNEES    = 'INITIALISATION',
+                     PAS    = _timeStepAster,)
+  #print "__timeValues=",_timeV.Valeurs()
+  _timeValues   = _timeV.Valeurs()
+  _nbTimeStep  = int(_timeValues[0])
+  
+#  Ancien nommage
+#   _timeStep    = _timeValues[1]
+#   _tInitial    = _timeValues[2]
+#   _nbSsIterMax = int(_timeValues[3])
+#   _impEnsight  = int(_timeValues[4])
+#   _PeriodImp   = int(_timeValues[5])
+#   _StartImp    = int(_timeValues[6])
+  _nbSsIterMax  = int(_timeValues[1])
+  _Epsilo       = _timeValues[2]
+  _impEnsight   = int(_timeValues[3])
+  _PeriodImp    = int(_timeValues[4])
+  _tInitial     = _timeValues[5]
+  _timeStep     = _timeValues[6]
+  _StartImp     = _tInitial
+  print '_nbTimeStep  = ',_nbTimeStep
+  print '_timeStep    = ',_timeStep
+  print '_tInitial    = ',_tInitial
+  print '_nbSsIterMax = ',_nbSsIterMax
+  print '_impEnsight  = ',_impEnsight
+  print '_PeriodImp   = ',_PeriodImp
+  print '_StartImp   = ',_StartImp
+  if (_nbSsIterMax == 0):
+    _nbSsIterMax = 1
+
+#  _endValue   = int(_timeValues[7])
+#  _nbTimeStep = _endValue
+  #print '_nbTimeStep 2  = ',_nbTimeStep
+  
+#  Compteur de pas :
+  _numpas     = 1
+# Compteur pour le couplage : CP_ITERATION
+  _ntcast     = 0
+# Compteur de sous-itearation
+  _SousIterations = 1
+  
+  ticv=[None]*(_nbTimeStep+1) ;
+  endv=[None]*(_nbTimeStep+1) ;
+
+
+#
+#   Envoi des donnees initiales si besoin est
+#
+#   print "ENV_CINE_YACS 1"
+#   ENV_CINE_YACS(ETAT_INIT   = dExtrInit,
+#                 MATR_PROJECTION       = _fluidNodePoids,
+#                 NUME_ORDRE_YACS   = _numpas,
+#                 INST     = _tInitial,
+#                 PAS     = _timeStep,
+#                 **poidsMocle)
+#   print "RETOUR ENV_CINE_YACS 1"
+
+  #=================================#
+  # 1ER PASSAGE POUR L'ETAT INITIAL #
+  # ------------------------------- #
+
+  # ------------------------------------- #
+  # CALCUL NON LINEAIRE AVEC ETAT INITIAL #
+  # ------------------------------------- #
+  if (_numpas <= _nbTimeStep):
+    # ---------------------------------- #
+    # Affectation de l'instant de calcul #
+    # ---------------------------------- #
+    print "RECU_PARA_YACS 1"
+    _tStart = _tInitial
+    _pastps = RECU_PARA_YACS(DONNEES   = 'PAS',
+                        NUME_ORDRE_YACS = _numpas,
+                        INST   = _tStart,
+                        PAS   = _timeStepAster,
+                     )
+    _pastps0   = _pastps.Valeurs() 
+    print "_pastps0[0]=", _pastps0[0]
+    _timeStep  = _pastps0[0]
+    print "DEFI_LIST_REEL"
+    _tEnd   = _tInitial+_timeStep
+    print "_tStart=",_tStart," ; _tEnd=",_tEnd
+    _liste=DEFI_LIST_REEL(DEBUT      = _tStart,
+                          INTERVALLE = _F(JUSQU_A = _tEnd,
+                                          NOMBRE  = 1,),)
+#    _iter = 1
+    _SousIterations = 0
+    icv = 0
+    while (_SousIterations < _nbSsIterMax):
+
+      # Increment des sous-iterations
+      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      _SousIterations = _SousIterations + 1
+      _ntcast = _ntcast + 1
+
+      # Reception des forces nodales et projection !!! YACS COMMUNICATION !!!
+      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      print "MODI_CHAR_YACS"
+      _ifsCharMeca = MODI_CHAR_YACS(reuse      = _ifsCharMeca,
+                                    CHAR_MECA  = _ifsCharMeca,
+                                    MATR_PROJECTION      = _fluidElemPoids,
+                                    NOM_CMP_IFS  = NOM_CMP_IFS,
+                                    NUME_ORDRE_YACS  = _ntcast,
+                                    INST    = _tStart,
+                                    PAS    = _timeStep,
+                                    **poidsMocle)
+
+      # Resolution non-lineaire
+      # ~~~~~~~~~~~~~~~~~~~~~~~
+      print "DYNA_NON_LINE NUMPAS=",_numpas
+      #__rescur=DYNA_NON_LINE(
+      __rescur=DYNA_NON_LINE(
+      #                       ETAT_INIT = dEtatInit,
+                             MODELE    = MODELE,
+                             INCREMENT = _F(LIST_INST=_liste,),
+                             EXCIT     = dExcit,
+                             **motscles)
+      # test de convergence
+      # ~~~~~~~~~~~~~~~~~~~
+      _ticv = RECU_PARA_YACS(DONNEES   = 'CONVERGENCE',
+                          NUME_ORDRE_YACS = _ntcast,
+                          INST   = _tEnd,
+                          PAS   = _timeStep,)
+      __icv   = _ticv.Valeurs()
+      icv = int(__icv[0])
+      print "Convergence=",icv
+      if (icv == 1 or _SousIterations == _nbSsIterMax ):
+        # Envoi des deplacements
+        # ~~~~~~~~~~~~~~~~~~~~~~
+        print "ENV_CINE_YACS ",_numpas
+        ENV_CINE_YACS(RESULTAT = _F(RESU       = __rescur,
+        #ENV_CINE_YACS(RESULTAT = _F(RESU       = resdnl,
+                                  NUME_ORDRE = _numpas),
+                    MATR_PROJECTION    = _fluidNodePoids,
+                    NUME_ORDRE_YACS = _ntcast,
+                    INST  = _tEnd,
+                    PAS  = _timeStep,
+                    **poidsMocle)
+
+        _SousIterations = _nbSsIterMax
+        print "EXTR_RESU"
+        resdnl=EXTR_RESU(RESULTAT=__rescur,
+                        ARCHIVAGE=_F(NUME_ORDRE = (0,1),))
+        #resdnl = __rescur
+
+#     endv[0] = RECU_PARA_YACS(DONNEES='FIN',
+#                         NUME_ORDRE_YACS = _iter,
+#                         INST  = _tEnd,
+#                         PAS  = _timeStep,)
+#     __endv = endv[0].Valeurs()
+#     _endValue   = __endv[0]
+#     _nbTimeStep = _endValue
+#     print "FIN=",_endValue
+    _numpas = _numpas + 1
+
+  #===============================#
+  # CALCUL NON-LINEAIRE PAS A PAS #
+  # ----------------------------- #
+  while (_numpas <= _nbTimeStep):
+
+    # ------------------ #
+    # Increment du temps #
+    # ------------------ #
+    _tStart = _tStart + _timeStep
+    _tyacs = _tStart + _timeStep
+    _pastps = RECU_PARA_YACS(DONNEES   = 'PAS',
+                        NUME_ORDRE_YACS = _numpas,
+                        INST   = _tyacs,
+                        PAS   = _timeStepAster,
+                     )
+    _pastps0   = _pastps.Valeurs() 
+    print "_pastps0[0]=", _pastps0[0]
+    _timeStep  = _pastps0[0]
+    _tEnd   = _tStart   + _timeStep
+    print "_tStart=",_tStart," ; _tEnd=",_tEnd
+    _liste=DEFI_LIST_REEL(DEBUT      = _tStart,
+                          INTERVALLE = _F(JUSQU_A = _tEnd,
+                                          NOMBRE  = 1,),)
+#    _iter = _iter + 1
+    _SousIterations = 0
+    icv = 0
+    while (_SousIterations < _nbSsIterMax):
+
+      # Increment des sous-iterations
+      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      _SousIterations = _SousIterations + 1
+      _ntcast = _ntcast + 1
+
+      # Reception des forces nodales et projection !!! YACS COMMUNICATION !!!
+      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      print "MODI_CHAR_YACS_BOUCLE"
+      _ifsCharMeca = MODI_CHAR_YACS(reuse      = _ifsCharMeca,
+                                    CHAR_MECA  = _ifsCharMeca,
+                                    MATR_PROJECTION      = _fluidElemPoids,
+                                    NOM_CMP_IFS  = NOM_CMP_IFS,
+                                    NUME_ORDRE_YACS  = _ntcast,
+                                    INST    = _tStart,
+                                    PAS    = _timeStep,
+                                    **poidsMocle)
+
+      # Resolution non-lineaire
+      # ~~~~~~~~~~~~~~~~~~~~~~~
+      print "DYNA_NON_LINE_BOUCLE"
+      resdnl=DYNA_NON_LINE(reuse     = resdnl,
+                           MODELE    = MODELE,
+                           ETAT_INIT = _F(EVOL_NOLI = resdnl,),
+                           INCREMENT = _F(LIST_INST = _liste,),
+                           EXCIT     = dExcit,
+                           **motscles)
+
+
+      # test de convergence
+      # ~~~~~~~~~~~~~~~~~~~
+      print "CONVERGENCE ",_SousIterations
+      #icv = cocas_fonctions.CONVERGENCE()
+      _ticv = RECU_PARA_YACS(DONNEES   = 'CONVERGENCE',
+                              NUME_ORDRE_YACS = _ntcast,
+                              INST   = _tEnd,
+                              PAS   = _timeStep,)
+      __icv   = _ticv.Valeurs()
+      icv = int(__icv[0])
+      print "Convergence=",icv
+      _ntcat = _ntcast + 1
+      if (icv == 1 or _SousIterations == _nbSsIterMax ):
+        _SousIterations = _nbSsIterMax
+        # Envoi des deplacements !!! YACS COMMUNICATION !!!
+        # ~~~~~~~~~~~~~~~~~~~~~~
+        print "ENV_CINE_YACS_BOUCLE"
+        ENV_CINE_YACS(RESULTAT = _F(RESU       = resdnl,
+                                  NUME_ORDRE = _numpas),
+                    MATR_PROJECTION     = _fluidNodePoids,
+                    NUME_ORDRE_YACS = _ntcast,
+                    INST   = _tEnd,
+                    PAS   = _timeStep,
+                    **poidsMocle)
+
+      else:
+        _list2=DEFI_LIST_ENTI(DEBUT=0,
+                              INTERVALLE=_F(JUSQU_A = _numpas-1,
+                                            PAS     = 1,),);
+        resdnl=EXTR_RESU(RESULTAT = resdnl,
+                         ARCHIVAGE = _F(LIST_ORDRE =  _list2,))
+    
+#     endv[_iter] = RECU_PARA_YACS(DONNEES='FIN',
+#                         NUME_ORDRE_YACS = _iter,
+#                         INST  = _tEnd,
+#                         PAS  = _timeStep,)
+#     __endv = endv[_iter].Valeurs()
+#     _endValue   = __endv[0]
+#     _nbTimeStep = _endValue
+    _numpas = _numpas + 1
+
+    print "NUMPAS : ",_numpas,"nbTimeStep=",_nbTimeStep
+
+
+
+  #========================================================================#
+  # Impression Ensight si demandee                                         #
+  # (premier et dernier pas d'impression pour coherence avec Code_Saturne) #
+  # ---------------------------------------------------------------------- #
+  print "impression ensight : ",_impEnsight
+  if (_impEnsight == 1):
+
+    impEnsiMocle               = {}
+    impEnsiMocle['INTERVALLE'] = []
+
+    if (_nbTimeStep < _PeriodImp):
+      _StartImp                  = 0
+      impEnsiDico                = {}
+      impEnsiDico['JUSQU_A']     = _nbTimeStep
+      impEnsiDico['PAS']         = 1
+      impEnsiMocle['INTERVALLE'].append(impEnsiDico)
+    elif (_nbTimeStep == _PeriodImp and _nbTimeStep == _StartImp):
+      _StartImp                  = 0
+      impEnsiDico                = {}
+      impEnsiDico['JUSQU_A']     = _nbTimeStep
+      impEnsiDico['PAS']         = 1
+      impEnsiMocle['INTERVALLE'].append(impEnsiDico)
+    elif (_PeriodImp == -1):
+      if (_nbTimeStep == _StartImp):
+        _StartImp                = 0
+      impEnsiDico                = {}
+      impEnsiDico['JUSQU_A']     = _nbTimeStep
+      impEnsiDico['PAS']         = 1
+      impEnsiMocle['INTERVALLE'].append(impEnsiDico)
+    else:
+      impEnsiDico                = {}
+      _reste                     = (_nbTimeStep-_StartImp) % _PeriodImp
+      impEnsiDico['JUSQU_A']     = _nbTimeStep - _reste
+      impEnsiDico['PAS']         = _PeriodImp
+      impEnsiMocle['INTERVALLE'].append(impEnsiDico)
+      if (_reste != 0):
+        impEnsiDico                = {}
+        impEnsiDico['JUSQU_A']     = _nbTimeStep
+        impEnsiDico['PAS']         = _reste
+        impEnsiMocle['INTERVALLE'].append(impEnsiDico)
+
+    print "Liste impEnsiMocle=", impEnsiMocle
+    _listImp=DEFI_LIST_ENTI(DEBUT      = _StartImp,
+                            **impEnsiMocle);
+    print "Liste impression=", _listImp
+    IMPR_RESU(FORMAT='ENSIGHT',
+              RESU=_F(MAILLAGE=_strucMesh,
+                      RESULTAT=resdnl,
+                      LIST_ORDRE=_listImp,),);
+
+  return ier
+
index dae87e78552d9114b82a938061b95d66e2e3a459..3eb5034c7a302464967456c098847fc846c05b3b 100644 (file)
@@ -1,15 +1,35 @@
-#@ AJOUT calc_miss_ops Macro
+#@ MODIF calc_miss_ops Macro  DATE 01/03/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 
+import sys
 import os
+import traceback
 
 
-def calc_miss_ops(self, OPTION, **kwargs):
+def calc_miss_ops(self, **kwargs):
     """Macro CALC_MISS :
     Préparation des données et exécution d'un calcul MISS3D
     """
-    from Utilitai.Utmess  import UTMESS, MessageError
+    import aster
+    from Utilitai.Utmess  import UTMESS
     from Miss.miss_utils  import MISS_PARAMETER
     from Miss.miss_calcul import CalculMissFactory
     
@@ -21,15 +41,16 @@ def calc_miss_ops(self, OPTION, **kwargs):
     param = MISS_PARAMETER(initial_dir=os.getcwd(), **kwargs)
     
     # création de l'objet CALCUL_MISS_xxx
-    option_calcul = "TOUT"
-    if OPTION["TOUT"] != "OUI":
-        option_calcul = OPTION["MODULE"]
-    calcul = CalculMissFactory(option_calcul, self, param)
+    calcul = CalculMissFactory(self, param)
 
     try:
         calcul.prepare_donnees()
         calcul.execute()
         calcul.post_traitement()
-    except MessageError, err:
+    except aster.error, err:
         UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
+    except Exception, err:
+        trace = ''.join(traceback.format_tb(sys.exc_traceback))
+        UTMESS('F', 'SUPERVIS2_5', valk=('CALC_MISS', trace, str(err)))
+
 
index 0a7a1baef69089f220ac511e515d6b8b7ffd73d7..57ee83edb7f6a96f64bc86a3bbfbdc0f75334c10 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_modal_ops Macro  DATE 27/04/2009   AUTEUR NISTOR I.NISTOR 
+#@ MODIF calc_modal_ops Macro  DATE 13/10/2010   AUTEUR BOITEAU O.BOITEAU 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -21,7 +21,7 @@
 
 
 def calc_modal_ops(self,MODELE,CHAM_MATER,CARA_ELEM,AMORTISSEMENT,
-                        SOLVEUR,CHARGE,INST,METHODE,CALC_FREQ, MODE_RIGIDE,
+                        CHARGE,INST,METHODE,CALC_FREQ, MODE_RIGIDE,
                         VERI_MODE,INFO,**args):
   """
      Ecriture de la macro CALC_MODAL
@@ -58,12 +58,8 @@ def calc_modal_ops(self,MODELE,CHAM_MATER,CARA_ELEM,AMORTISSEMENT,
                        RIGI_MECA=_a, MASS_MECA=_b,**motsclece)
 
   #on produit en local le concept NUME_DDL, il n'est pas visible pour l'utilisateur
-  
-  # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
-  methode=SOLVEUR['METHODE']
-  renum=SOLVEUR['RENUM'] 
 
-  _num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=INFO)
+  _num=NUME_DDL(MATR_RIGI=_a,INFO=INFO)
   
   #assemblages des matrices 
   _rigas=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=_num)
@@ -122,7 +118,6 @@ def calc_modal_ops(self,MODELE,CHAM_MATER,CARA_ELEM,AMORTISSEMENT,
      
   motscit['CALC_FREQ'] = _F(OPTION          =CALC_FREQ['OPTION'],
                             SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
-                            NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
                             NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
                             PREC_SHIFT      =CALC_FREQ['PREC_SHIFT'],
                             APPROCHE        =CALC_FREQ['APPROCHE'],
index f5c598e84f90d24a856b385f9aee6769354b7fce..d11b752fe6a9ef0bf55320dd26132edfb9400f1b 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_mode_rotation_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_mode_rotation_ops Macro  DATE 14/06/2010   AUTEUR COURTOIS M.COURTOIS 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
index 090b69e66b573743cb58c346baea046c6b3d3f48..33d847652f37988a8e443dc1cd6d9b4af18a79a5 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF calc_precont_ops Macro  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_precont_ops Macro  DATE 21/03/2011   AUTEUR MICHEL S.MICHEL 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -23,8 +23,8 @@
 
 def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                                 CABLE_BP,CABLE_BP_INACTIF,
-                                COMP_INCR,ETAT_INIT,NEWTON,RECH_LINEAIRE,
-                                CONVERGENCE,INCREMENT,SOLVEUR,
+                                COMP_INCR,ETAT_INIT,METHODE,
+                                RECH_LINEAIRE,CONVERGENCE,INCREMENT,SOLVEUR,
                                 INFO,TITRE,**args):
 
 
@@ -69,12 +69,24 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   # 1.1 Recuperation de la liste d'instants, de l'instant initial et final
   #     Creation de la nouvelle liste d'instants
   # ----------------------------------------------------------
-
   dIncrement=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
-
   __prec = dIncrement['PRECISION']
+
+
+#  import pdb ; pdb.set_trace()
+
   __L0   = dIncrement['LIST_INST']
-  __L1   = __L0.Valeurs()
+  from SD.co_listr8 import listr8_sdaster
+  from SD.co_list_inst import list_inst
+
+  if   type(__L0) == listr8_sdaster:
+  #cas où liste definie par DEFI_LIST_REEL 
+     __L1   = __L0.Valeurs()
+  elif type(__L0) == list_inst:
+  # cas où liste definie par DEFI_LIST_INST
+     tmp = __L0.get_name().ljust(8) + '.LIST.' + 'DITR'.ljust(18)
+     __L1 = aster.getvectjev(tmp)
+
 
   # Traitement de l'etat initial
   if ETAT_INIT:
@@ -135,10 +147,18 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
 
   # 1.2 Recuperation des parametres pour STAT_NON_LINE
   # -------------------------------------------------------
+  motscle4={}
+  motscle5={}
 
-  dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
-  for i in dNewton.keys():
-      if dNewton[i]==None : del dNewton[i]
+  if METHODE=='IMPL_EX':
+     motscle4['IMPL_EX']=args['IMPL_EX'].List_F() 
+     motscle5['IMPL_EX']=args['IMPL_EX'].List_F() 
+  else:
+     motscle4['NEWTON']=args['NEWTON'].List_F()
+     motscle5['NEWTON']=args['NEWTON'].List_F()
+#     for j in dNewton.keys():
+#       if dNewton[j]==None : del dNewton[j]
+       
 
   dConvergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
   for i in dConvergence.keys():
@@ -351,7 +371,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
 
   __EV1 = CALC_NO( reuse    = __EV1,
                    RESULTAT = __EV1,
-                   GROUP_MA = __GROUP_MA_A,
+                  # GROUP_MA = __GROUP_MA_A,
                    OPTION = 'FORC_NODA' )
 
   __REA = CREA_CHAMP (
@@ -394,7 +414,7 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
   dExcit1.append(_F(CHARGE = _F_CA,
                     FONC_MULT=__FCT ),)
 
-  motscle4={}
+  
   if self.reuse:
     motscle4['reuse'] = self.reuse
 
@@ -405,14 +425,14 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                      COMP_INCR=dComp_incr0,
                      INCREMENT=dIncrement,
                      ETAT_INIT = dEtatInit,
-                     NEWTON =dNewton,
+                     METHODE=METHODE,
                      CONVERGENCE=dConvergence,
                      RECH_LINEAIRE = dRech_lin,
                      SOLVEUR = dSolveur,
                      ARCHIVAGE = _F(INST = __TINT),
                      INFO     =INFO,
                      TITRE = TITRE,
-                     EXCIT = dExcit1,
+                     EXCIT = dExcit1,  
                      **motscle4)
 
   # Recuperation du dernier numero d'ordre pour pouvoir  l'écraser dans RES
@@ -437,15 +457,19 @@ def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
                      COMP_INCR=dComp_incr1,
                      INCREMENT=_F(LIST_INST = __LST,
                                   PRECISION = __prec),
-                     NEWTON =dNewton,
+                     METHODE=METHODE,
+#                     NEWTON =dNewton,
+#                     IMPL_EX=dImplex,
+    
                      RECH_LINEAIRE = dRech_lin,
                      CONVERGENCE=dConvergence,
                      SOLVEUR = dSolveur,
-                     ARCHIVAGE = _F(NUME_INIT = __no,
+                     ARCHIVAGE = _F(
                                     DETR_NUME_SUIV = 'OUI' ),
                      INFO  =INFO,
                      TITRE = TITRE,
                      EXCIT =dExcit2,
+                     **motscle5 
                      )
 
   return ier
index 842f7c5e3316107541627a427100b6d6174269ba..b221d7b55122a8c197edbe147166b65d9e628743 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_table_ops Macro  DATE 26/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_table_ops Macro  DATE 24/08/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -19,6 +19,7 @@
 # ======================================================================
 
 # RESPONSABLE COURTOIS M.COURTOIS
+import os
 
 def calc_table_ops(self, TABLE, ACTION, INFO, **args):
    """
@@ -51,7 +52,6 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
    DETRUIRE      = self.get_cmd('DETRUIRE')
 
    # 0. faut-il utiliser une table dérivée
-   form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
    if args['SENSIBILITE']:
       ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, args['SENSIBILITE'].nom)
       sdtab = table_jeveux(ncomp)
@@ -151,7 +151,8 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
          tab.fromfunction(occ['NOM_PARA'], occ['FORMULE'])
          if INFO == 2:
             vectval = getattr(tab, occ['NOM_PARA']).values()
-            aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' % (occ['NOM_PARA']+repr(vectval))+'\n')
+            aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' \
+                % (occ['NOM_PARA'], repr(vectval)))
 
       #----------------------------------------------
       # 8. Traitement de AJOUT
@@ -170,13 +171,12 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
 
    dprod = tab.dict_CREA_TABLE()
    if INFO == 2:
-      echo_mess = []
-      echo_mess.append( '@-'*30+'\n' )
-      echo_mess.append( tab )
+      echo_mess = ['']
+      echo_mess.append( repr(tab) )
       from pprint import pformat
       echo_mess.append( pformat(dprod) )
-      echo_mess.append( '@-'*30+'\n' )
-      texte_final = ' '.join(echo_mess)
+      echo_mess.append('')
+      texte_final = os.linesep.join(echo_mess)
       aster.affiche('MESSAGE', texte_final)
 
    # surcharge par le titre fourni
diff --git a/Aster/Cata/cataSTA10/Macro/crea_elem_ssd_ops.py b/Aster/Cata/cataSTA10/Macro/crea_elem_ssd_ops.py
new file mode 100644 (file)
index 0000000..8b37f32
--- /dev/null
@@ -0,0 +1,265 @@
+#@ MODIF crea_elem_ssd_ops Macro  DATE 03/01/2011   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# ======================================================================
+
+def crea_elem_ssd_ops(self,  NUME_DDL, INTERFACE, BASE_MODALE,
+                             CALC_FREQ, SOLVEUR, **args):
+    """
+     Enchainement des commandes :
+        CALC_MATR_ELEM + ASSE_MATRICE + MODE_ITER_SIMULT + MODE_STATIQUE
+        DEFI_INTERF_DYNA + DEFI_BASE_MODALE + MACR_ELEM_DYNA
+    """
+
+    from Accas import _F
+
+    # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+    numeddl=NUME_DDL
+
+    if numeddl:
+        self.DeclareOut('_nume_ddl', numeddl)
+
+    # On importe les definitions des commandes a utiliser dans la macro
+    CALC_MATR_ELEM = self.get_cmd('CALC_MATR_ELEM')
+    NUME_DDL = self.get_cmd('NUME_DDL')
+    ASSE_MATRICE = self.get_cmd('ASSE_MATRICE')
+    EXTR_MODE = self.get_cmd('EXTR_MODE')
+    MODE_ITER_SIMULT = self.get_cmd('MODE_ITER_SIMULT')
+    MODE_STATIQUE = self.get_cmd('MODE_STATIQUE')
+    DEFI_INTERF_DYNA = self.get_cmd('DEFI_INTERF_DYNA')
+    DEFI_BASE_MODALE = self.get_cmd('DEFI_BASE_MODALE')
+    MACR_ELEM_DYNA = self.get_cmd('MACR_ELEM_DYNA')
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    mSolveur = SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+    # SYME ne fait pas partie des mots cles lies a SOLVEUR
+    # dans MODE_STATIQUE et DEFI_BASE_MODALE
+    for i in mSolveur.keys():
+        if mSolveur[i] == None or i == 'SYME' :
+            del mSolveur[i]
+
+    _kelem = CALC_MATR_ELEM(CHARGE = args['CHARGE'],
+                            OPTION = 'RIGI_MECA',
+                            CARA_ELEM = args['CARA_ELEM'],
+                            MODELE = args['MODELE'],
+                            CHAM_MATER = args['CHAM_MATER'],)
+
+    __melem = CALC_MATR_ELEM(CHARGE = args['CHARGE'],
+                             OPTION = 'MASS_MECA',
+                             CARA_ELEM = args['CARA_ELEM'],
+                             MODELE = args['MODELE'],
+                             CHAM_MATER = args['CHAM_MATER'],)
+
+    _nume_ddl = NUME_DDL(MATR_RIGI = _kelem,
+                         METHODE = SOLVEUR[0]['METHODE'],
+                         RENUM = SOLVEUR[0]['RENUM'],)
+
+    _matrigi = ASSE_MATRICE(NUME_DDL = _nume_ddl,
+                            MATR_ELEM = _kelem,)
+
+    __mmass = ASSE_MATRICE(NUME_DDL = _nume_ddl,
+                           MATR_ELEM = __melem,)
+
+    # recuperation des options de MODE_ITER_SIMULT (equivalent CALC_MODAL)
+    motscit = {}
+    motscfa = {}
+
+    if CALC_FREQ['OPTION'] == 'PLUS_PETITE':
+        nbande = 1
+
+    if CALC_FREQ['OPTION'] == 'CENTRE':
+        nbande = 1
+
+    if CALC_FREQ['OPTION'] == 'BANDE':
+        nbande = len(CALC_FREQ['FREQ'])-1
+    
+    motfilt = {}
+    motfilt['FILTRE_MODE'] = []
+    for i in range(nbande):
+        if CALC_FREQ['OPTION'] == 'PLUS_PETITE':
+            motscfa['NMAX_FREQ'] = CALC_FREQ['NMAX_FREQ']
+
+        if CALC_FREQ['OPTION'] == 'CENTRE':
+            motscfa['FREQ'] = CALC_FREQ['FREQ']
+            if CALC_FREQ['AMOR_REDUIT']:
+                motscfa['AMOR_REDUIT'] = CALC_FREQ['AMOR_REDUIT']
+            motscfa['NMAX_FREQ'] = CALC_FREQ['NMAX_FREQ']
+
+        if CALC_FREQ['OPTION'] == 'BANDE':
+            motscfa['FREQ'] = (CALC_FREQ['FREQ'][i], CALC_FREQ['FREQ'][i+1])
+
+        motscit['CALC_FREQ'] = _F(OPTION =CALC_FREQ['OPTION'],
+                            APPROCHE =CALC_FREQ['APPROCHE'],
+                            **motscfa)
+
+        __modes = MODE_ITER_SIMULT(MATR_A = _matrigi,
+                                   MATR_B = __mmass,
+                                   INFO = args['INFO'],
+                                   **motscit)
+
+        motfilt['FILTRE_MODE'].append(_F(MODE=__modes,
+                                             TOUT_ORDRE='OUI',),)
+
+    _mode_meca = EXTR_MODE(**motfilt)
+
+    if BASE_MODALE[0]['TYPE'] == 'RITZ':
+        mcfactc = []
+        mcfactm = []
+        mcfacti = []
+        arg_no = []
+        arg_grno = []
+        for i in range(len(INTERFACE)):
+            if BASE_MODALE[0]['NMAX_MODE_INTF']:
+              if INTERFACE[i]['TYPE'] == 'CRAIGB':
+                if INTERFACE[i]['NOEUD'] :
+                  if isinstance(INTERFACE[i]['NOEUD'],(list,tuple)):
+                    for noeu in INTERFACE[i]['NOEUD']:
+                      arg_no.append(noeu)
+                  else:
+                    arg_no.append(INTERFACE[i]['NOEUD'])
+                if INTERFACE[i]['GROUP_NO'] :
+                  if isinstance(INTERFACE[i]['GROUP_NO'],(list,tuple)):
+                    for grno in INTERFACE[i]['GROUP_NO']:
+                      arg_grno.append(grno)
+                  else:
+                    arg_grno.append(INTERFACE[i]['GROUP_NO'])
+            else:
+                arg_int = {}
+                if INTERFACE[i]['NOEUD'] :
+                    arg_int['NOEUD'] = INTERFACE[i]['NOEUD']
+                if INTERFACE[i]['GROUP_NO'] :
+                    arg_int['GROUP_NO'] = INTERFACE[i]['GROUP_NO']
+                arg_int['TOUT_CMP'] = 'OUI'
+                if INTERFACE[i]['TYPE'] == 'CRAIGB':
+                    mcfactc.append( _F(**arg_int))
+                elif INTERFACE[i]['TYPE'] == 'MNEAL':
+                    mcfactm.append( _F(**arg_int))
+        modstatc = {}
+        modstatm = {}
+        modstati = {}
+        lmodint = []
+        if mcfactc:
+            modstatc['MODE_STAT'] = mcfactc
+            _mode_intf = MODE_STATIQUE(MATR_RIGI = _matrigi,
+                                           SOLVEUR = mSolveur,
+                                           **modstatc)
+            lmodint.append(_mode_intf)
+        if mcfactm:
+            modstatm['FORCE_NODALE'] = mcfactm
+            _mode_intf = MODE_STATIQUE(MATR_RIGI = _matrigi,
+                                           SOLVEUR = mSolveur,
+                                           **modstatm)
+            lmodint.append(_mode_intf)
+        if BASE_MODALE[0]['NMAX_MODE_INTF']:
+            arg_int = {}
+            if arg_no:
+                arg_int['NOEUD'] = arg_no
+            if arg_grno:
+                arg_int['GROUP_NO'] = arg_grno
+            arg_int['NBMOD'] = BASE_MODALE[0]['NMAX_MODE_INTF']
+            arg_int['TOUT_CMP'] = 'OUI'
+            mcfacti.append( _F(**arg_int))
+            modstati['MODE_INTERF'] = mcfacti
+            _mode_intf = MODE_STATIQUE(MATR_RIGI = _matrigi,
+                                           MATR_MASS = __mmass,
+                                           SOLVEUR = mSolveur,
+                                           **modstati)
+            lmodint.append(_mode_intf)
+
+    interface = {}
+    mcfact = []
+    freqnew = None
+    ifreq = INTERFACE[0]['FREQ']
+    for i in range(len(INTERFACE)):
+        arg_int = {}
+        if INTERFACE[i]['NOEUD'] :
+            arg_int['NOEUD'] = INTERFACE[i]['NOEUD']
+        if INTERFACE[i]['GROUP_NO'] :
+            arg_int['GROUP_NO'] = INTERFACE[i]['GROUP_NO']
+        mcfact.append( _F(NOM = INTERFACE[i]['NOM'],
+                          TYPE = INTERFACE[i]['TYPE'],
+                           **arg_int))
+        ifreq_i = INTERFACE[i]['FREQ']
+        if ifreq != ifreq_i:
+            freqnew = ifreq_i
+    if freqnew:
+        UTMESS('A','SOUSTRUC2_12',valr=freqnew)
+        ifreq = freqnew
+    interface['INTERFACE'] = mcfact
+
+    if args['INFO']:
+        interface['INFO'] = args['INFO']
+    if ifreq:
+        interface['FREQ'] = ifreq
+
+    _interf = DEFI_INTERF_DYNA(NUME_DDL = _nume_ddl,
+                               **interface)
+
+    base = {}
+    if args['INFO']:
+        base['INFO'] = args['INFO']
+    mcfact = []
+
+    if BASE_MODALE[0]['TYPE'] == 'CLASSIQUE':
+        arg_base = {}
+        type_base = 'CLASSIQUE'
+        arg_base['NMAX_MODE'] = CALC_FREQ[0]['NMAX_FREQ']
+        mcfact.append(_F(INTERF_DYNA = _interf,
+                         MODE_MECA = _mode_meca,
+                         **arg_base))
+
+    if BASE_MODALE[0]['TYPE'] == 'RITZ':
+        type_base = 'RITZ'
+        # il faut deux occurrences du mot cle facteur RITZ
+        arg_base = {}
+        if CALC_FREQ[0]['OPTION'] == 'PLUS_PETITE' or \
+           CALC_FREQ[0]['OPTION'] == 'CENTRE':
+            arg_base['NMAX_MODE'] = CALC_FREQ[0]['NMAX_FREQ']
+        
+        mcfact.append(_F(MODE_MECA = _mode_meca,
+                             **arg_base))
+
+        arg_base = {}
+        if len(lmodint) > 0: # MODE_INTF ou MODE_STATIQUE doit etre a la 2 occ
+            if BASE_MODALE[0]['NMAX_MODE_INTF']:
+                arg_base['NMAX_MODE'] = BASE_MODALE[0]['NMAX_MODE_INTF']
+            mcfact.append(_F(MODE_INTF = _mode_intf,
+                             **arg_base))
+
+    if type_base == 'CLASSIQUE':
+        base['CLASSIQUE'] = mcfact
+    elif type_base == 'RITZ':
+        base['RITZ'] = mcfact
+        base['INTERF_DYNA'] = _interf
+        base['NUME_REF'] = _nume_ddl
+
+    _base_modale = DEFI_BASE_MODALE( **base)
+
+    elem = {}
+    elem['MATR_RIGI'] = _matrigi
+    elem['MATR_MASS'] = __mmass
+  
+    self.DeclareOut('macr_elem', self.sd)
+    macr_elem = MACR_ELEM_DYNA(BASE_MODALE = _base_modale,
+                               **elem)
+
+    return
+
index ccc45840b97510838d34ccff03d37dad6e3292af..e182159df0ce69c934dbe6f0cb73edc26137ab9e 100644 (file)
@@ -1,30 +1,30 @@
-#@ MODIF creation_donnees_homard Macro  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF creation_donnees_homard Macro  DATE 11/05/2011   AUTEUR SELLENET N.SELLENET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                   
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 """
 Cette classe crée le fichier de configuration permettant de lancer HOMARD
 depuis Code_Aster.
 """
-__revision__ = "V1.5"
+__revision__ = "V1.10"
 __all__ = [ ]
+
 import os
 import os.path
 from types import ListType, TupleType
@@ -34,7 +34,7 @@ try:
   from Utilitai.Utmess import   UTMESS
 except ImportError:
   def UTMESS(code, idmess, valk=(), vali=(), valr=()):
-    """Clone de utmess si on ne reussit pas é le charger
+    """Clone de utmess si on ne reussit pas e le charger
     """
     fmt = '\n <%s> <%s> %s %s %s\n\n'
     print fmt % (code, idmess, valk, vali, valr)
@@ -45,12 +45,12 @@ class creation_donnees_homard:
       Ce sont :
       . le fichier de configuration
       . le fichier des données dans le cas d'information
-   
-   Arguments (stockés en tant qu'attribut) :
+
+   Arguments (stockes en tant qu'attribut) :
       . nom_macro : nom de la macro-commande qui appelle :
                       'MACR_ADAP_MAIL' pour une adaptation
                       'MACR_INFO_MAIL' pour une information sur un maillage
-      . mots_cles : mots-clés de la macro-commande
+      . mots_cles : mots-cles de la macro-commande
       . dico_configuration : dictionnaire des options
 
    Attributs :
@@ -62,10 +62,10 @@ class creation_donnees_homard:
    """
 # ------------------------------------------------------------------------------
   def __init__(self, nom_macro, mots_cles, dico_configuration ) :
-    """Construction + valeurs par défaut des attributs
+    """Construction + valeurs par defaut des attributs
     """
 #
-# 1. Vérification de la macro qui appelle
+# 1. Verification de la macro qui appelle
 #
     d_aux = {}
     d_aux["MACR_ADAP_MAIL"] = ( "ADAP", "ADAPTATION" )
@@ -76,7 +76,7 @@ class creation_donnees_homard:
     else :
       UTMESS("F", 'HOMARD0_1')
 #
-# 2. Données générales de cette initialisation
+# 2. Données generales de cette initialisation
 #
 #gn    for mot_cle in mots_cles.keys() :
 #gn      print "mots_cles[", mot_cle, "] = ", mots_cles[mot_cle]
@@ -105,13 +105,13 @@ class creation_donnees_homard:
 # ------------------------------------------------------------------------------
   def int_to_str2 (self, entier) :
     """
-    Transforme un entier compris entre 0 et 99 en une chaine sur deux caractéres
+    Transforme un entier positif en une chaine d'au moins deux caracteres
     """
-#    print "\nArguments a l'entree de", __name__, ":", entier
+#    print "\nArguments à l'entree de", __name__, ":", entier
 #
-    try:
+    if type(entier) == type(0) :
       la_chaine = '%02d' % entier
-    except TypeError:
+    else :
       la_chaine = None
 #
     return la_chaine
@@ -124,14 +124,14 @@ class creation_donnees_homard:
     return
 # ------------------------------------------------------------------------------
   def creation_configuration (self) :
-    """Crée les données nécessaires é la configuration
+    """Cree les données necessaires à la configuration
     """
 #
     message_erreur = None
 #
     while message_erreur is None :
 #
-#     1. Les chaines liées aux numéros d'itération
+#     1. Les chaines liées aux numeros d'iteration
 #
       if self.mode_homard == "ADAP" :
         niter = self.dico_configuration["niter"]
@@ -169,7 +169,7 @@ class creation_donnees_homard:
 #
 #     4. Le type de bilan : il faut convertir la donnée textuelle en un entier,
 #        produit de nombres premiers.
-#        Si rien n'est demandé, on met 1.
+#        Si rien n'est demande, on met 1.
 #
       aux = 1
       dico_aux = {}
@@ -248,7 +248,7 @@ class creation_donnees_homard:
               self.critere_raffinement = (d_aux[mot_cle][0], aux)
 #gn          print "... self.critere_raffinement = ", self.critere_raffinement
 #
-#     7.3. L'éventuel seuil de déraffinement
+#     7.3. L'éventuel seuil de deraffinement
 #
         if self.TypeDera == "libre" :
           d_aux = {}
@@ -262,17 +262,29 @@ class creation_donnees_homard:
               self.critere_deraffinement = (d_aux[mot_cle][0], aux)
 #gn          print "... self.critere_deraffinement = ", self.critere_deraffinement
 #
-#     7.4. Les niveaux extremes
+#     7.4. Les profondeurs extremes de raffinement/deraffinement
 #
-        for mot_cle in [ "NIVE_MIN", "NIVE_MAX" ] :
+        saux = " "
+        for mot_cle in [ "NIVE_MIN", "NIVE_MAX", "DIAM_MIN" ] :
           if self.mots_cles.has_key(mot_cle) :
             if self.mots_cles[mot_cle] is not None :
               if mot_cle == "NIVE_MIN" :
                 aux = "NiveauMi"
-              else :
+              elif mot_cle == "NIVE_MAX" :
                 aux = "NiveauMa"
+              else :
+                aux = "DiametMi"
               self.niveau.append((aux, self.mots_cles[mot_cle]))
-        if len(self.niveau) == 2 :
+              saux += aux
+#
+        if ( "DiametMi" in saux ) :
+#gn          print self.mots_cles["DIAM_MIN"]
+          if self.mots_cles["DIAM_MIN"] < 0 :
+            message_erreur = "Le diametre mini doit etre strictement positif. "+\
+                             "La valeur "+str(self.mots_cles["DIAM_MIN"])+" est incorrecte."
+            break
+#
+        if ( ( "NiveauMi" in saux ) and ( "NiveauMa" in saux ) ) :
 #gn          print self.mots_cles["NIVE_MIN"]
 #gn          print self.mots_cles["NIVE_MAX"]
           if self.mots_cles["NIVE_MIN"] >= self.mots_cles["NIVE_MAX"] :
@@ -330,7 +342,7 @@ class creation_donnees_homard:
     return self.fic_homard_niter, self.fic_homard_niterp1
 # ------------------------------------------------------------------------------
   def ouvre_fichier (self, nomfic_local) :
-    """Ouvre en écriture un fichier aprés l'avoir éventuellement détruit
+    """Ouvre en ecriture un fichier apres l'avoir eventuellement detruit
     """
     codret_partiel = [0]
 ###    print nomfic_local
@@ -352,7 +364,7 @@ class creation_donnees_homard:
   def ecrire_ligne_configuration_0 (self, commentaire) :
     """Ecrit une ligne de commentaires du fichier de configuration
    Arguments :
-      . commentaire : le commentaire é écrire
+      . commentaire : le commentaire e ecrire
     """
 #
     ligne = "#\n"
@@ -380,7 +392,7 @@ class creation_donnees_homard:
     """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur
    Arguments :
       . motcle : le mot-cle HOMARD a ecrire
-      . valeur : la valeur associee
+      . valeur : la valeur associée
     """
 #
     ligne = motcle + " " + str(valeur) + "\n"
@@ -392,7 +404,7 @@ class creation_donnees_homard:
     """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur1 + valeur2
    Arguments :
       . motcle : le mot-cle HOMARD a ecrire
-      . valeur : la valeur associee
+      . valeur : la valeur associée
     """
 #
     ligne = motcle + " " + str(valeur1) + " " + str(valeur2) + "\n"
@@ -411,7 +423,7 @@ class creation_donnees_homard:
 #
       fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Configuration)
 #
-#     2. Généralités
+#     2. Generalites
 #
       self.ecrire_ligne_configuration_0("Generalites")
       self.ecrire_ligne_configuration_2("ModeHOMA", self.ModeHOMA)
@@ -430,7 +442,7 @@ class creation_donnees_homard:
         self.ecrire_ligne_configuration_2("CCNoMNP1", self.CCNoMNP1)
         self.ecrire_ligne_configuration_2("CCMaiNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
 #
-      self.ecrire_ligne_configuration_0("Le répertoire des fichiers de bilan")
+      self.ecrire_ligne_configuration_0("Le repertoire des fichiers de bilan")
       self.ecrire_ligne_configuration_2("RepeInfo", self.dico_configuration["Rep_Calc_HOMARD_global"])
 #
 #     4. Les fichiers HOMARD
@@ -439,10 +451,11 @@ class creation_donnees_homard:
       if self.mode_homard == "ADAP" :
         self.ecrire_ligne_configuration_3("HOMaiN__", "M_"+self.str_niter  , self.fic_homard_niter )
         self.ecrire_ligne_configuration_3("HOMaiNP1", "M_"+self.str_niterp1, self.fic_homard_niterp1)
-        aux = "oui"
-      else :
-        aux = "non"
-      self.ecrire_ligne_configuration_2("EcriFiHO", aux)
+        if ( self.dico_configuration["niter"] == 0 ) :
+          aux = "TOUT"
+        else :
+          aux = "NP1"
+        self.ecrire_ligne_configuration_2("EcriFiHO", aux)
 #
 #     5. Le pilotage de l'adaptation
 #
@@ -465,16 +478,17 @@ class creation_donnees_homard:
 #
           self.ecrire_ligne_configuration_0("L'indicateur d'erreur")
           self.ecrire_ligne_configuration_2("CCIndica", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
-          self.ecrire_ligne_configuration_2("CCNoChaI", self.dico_configuration["Indicateur"]["NOM_MED"])
-          for saux in self.dico_configuration["Indicateur"]["COMPOSANTE"] :
-            self.ecrire_ligne_configuration_2("CCCoChaI", saux)
+          self.ecrire_ligne_configuration_2("CCNoChaI", self.dico_configuration["Indicateur"]["NOM_CHAM_MED"])
+          if self.dico_configuration["Indicateur"].has_key("COMPOSANTE") :
+            for saux in self.dico_configuration["Indicateur"]["COMPOSANTE"] :
+              self.ecrire_ligne_configuration_2("CCCoChaI", saux)
           if self.dico_configuration["Indicateur"].has_key("NUME_ORDRE") :
             self.ecrire_ligne_configuration_2("CCNumOrI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
             self.ecrire_ligne_configuration_2("CCNumPTI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
-          if self.mots_cles.has_key("TYPE_VALEUR_INDICA") :
-            self.ecrire_ligne_configuration_2("CCUsCmpI", self.mots_cles["TYPE_VALEUR_INDICA"])
+          if self.mots_cles.has_key("USAGE_CMP") :
+            self.ecrire_ligne_configuration_2("CCUsCmpI", self.mots_cles["USAGE_CMP"])
 #
-#     5.3. Les éventuelles zones de raffinement
+#     5.3. Les eventuelles zones de raffinement
 #
         if self.dico_configuration.has_key("Zones_raffinement") :
           dico_zone = {}
@@ -509,25 +523,25 @@ class creation_donnees_homard:
           iaux = 0
           for zone in self.dico_configuration["Zones_raffinement"] :
             iaux = iaux + 1
-            self.ecrire_ligne_configuration_0("Zone de raffinement numéro "+str(iaux))
+            self.ecrire_ligne_configuration_0("Zone de raffinement numero "+str(iaux))
             jaux = dico_zone[zone["TYPE"]]
             self.ecrire_ligne_configuration_3(dico_zone["TYPE"], iaux, jaux)
             for aux in l_aux :
               if zone.has_key(aux) :
                 self.ecrire_ligne_configuration_3(dico_zone[aux], iaux, zone[aux])
 #
-#     5.4. Les niveaux extremes
+#     5.4. Les profondeurs extremes de raffinement/deraffinement
 #
         for aux in self.niveau :
           self.ecrire_ligne_configuration_2(aux[0], aux[1])
 #
 #     5.5. L'usage de l'indicateur
 #
-        if self.mots_cles.has_key("TYPE_OPER_INDICA") :
-          if self.mots_cles["TYPE_OPER_INDICA"] is not None :
-            self.ecrire_ligne_configuration_2("CCModeFI", self.mots_cles["TYPE_OPER_INDICA"])
+        if self.mots_cles.has_key("USAGE_CHAMP") :
+          if self.mots_cles["USAGE_CHAMP"] is not None :
+            self.ecrire_ligne_configuration_2("CCModeFI", self.mots_cles["USAGE_CHAMP"])
 #
-#     5.6. Les éventuels groupes de filtrage du raffinement/deraffinement
+#     5.6. Les eventuels groupes de filtrage du raffinement/deraffinement
 #
         for cle in ( "GROUP_MA", "GROUP_NO" ) :
           if self.mots_cles.has_key(cle) :
@@ -544,40 +558,41 @@ class creation_donnees_homard:
           self.ecrire_ligne_configuration_2("ModDegre", self.ModDegre)
           self.ecrire_ligne_configuration_2("CreJoint", self.CreJoint)
 #
-#     5.8. L'éventuel maillage annexe
+#     5.8. L'eventuel maillage annexe
 #
         if self.CCMaiAnn is not None :
-          self.ecrire_ligne_configuration_0("Maillage d'autre degré")
+          self.ecrire_ligne_configuration_0("Maillage d'autre degre")
           self.ecrire_ligne_configuration_2("ModDegre", "oui")
           self.ecrire_ligne_configuration_2("CCNoMAnn", self.CCMaiAnn)
           self.ecrire_ligne_configuration_2("CCMaiAnn", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
 #
-#     6. Les éventuels champs à mettre à jour
+#     6. Les eventuels champs a mettre a jour
 #
       if self.dico_configuration.has_key("Champs") :
-        self.ecrire_ligne_configuration_0("Champs à mettre à jour")
+        self.ecrire_ligne_configuration_0("Champs a mettre e jour")
         self.ecrire_ligne_configuration_2("CCSolN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
         self.ecrire_ligne_configuration_2("CCSolNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
         iaux = 0
         for maj_champ in self.dico_configuration["Champs"] :
           iaux = iaux + 1
-          self.ecrire_ligne_configuration_0("Mise à jour du champ numéro "+str(iaux))
-          self.ecrire_ligne_configuration_3("CCChaNom", iaux, maj_champ["NOM_MED"])
+          self.ecrire_ligne_configuration_0("Mise a jour du champ numero "+str(iaux))
+          self.ecrire_ligne_configuration_3("CCChaNom", iaux, maj_champ["NOM_CHAM_MED"])
+          self.ecrire_ligne_configuration_3("CCChaTIn", iaux, maj_champ["TYPE_MAJ"])
           if maj_champ.has_key("NUME_ORDRE") :
             self.ecrire_ligne_configuration_3("CCChaNuO", iaux, maj_champ["NUME_ORDRE"])
             self.ecrire_ligne_configuration_3("CCChaPdT", iaux, maj_champ["NUME_ORDRE"])
           elif maj_champ.has_key("INST") :
             self.ecrire_ligne_configuration_3("CCChaIns", iaux, maj_champ["INST"])
 #
-#     7. L'éventuel suivi de frontière
+#     7. L'eventuel suivi de frontiere
 #
       SuivFron = 1
 #
-#     7.1. A partir d'un maillage de la frontière
+#     7.1. A partir d'un maillage de la frontiere
 #
       if self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") :
         SuivFron = SuivFron * 2
-        self.ecrire_ligne_configuration_0("Maillage de frontière")
+        self.ecrire_ligne_configuration_0("Maillage de frontiere")
         self.ecrire_ligne_configuration_2("CCFronti", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
         self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"])
         if self.mots_cles.has_key("GROUP_MA_FRONT") :
@@ -593,6 +608,7 @@ class creation_donnees_homard:
       if self.dico_configuration.has_key("Frontiere_analytique") :
         SuivFron = SuivFron * 3
         dico_frontiere = {}
+        dico_frontiere["NOM"] = "FANom"
         dico_frontiere["RAYON"] = "FARayon"
         dico_frontiere["X_CENTRE"] = "FAXCen"
         dico_frontiere["Y_CENTRE"] = "FAYCen"
@@ -601,32 +617,37 @@ class creation_donnees_homard:
         dico_frontiere["Y_AXE"] = "FAYAxe"
         dico_frontiere["Z_AXE"] = "FAZAxe"
         l_aux = dico_frontiere.keys()
-        dico_frontiere["GROUP_MA"] = "FAGroupe"
+        dico_frontiere["FGNomGro"] = "FGNomGro"
+        dico_frontiere["FGNomFro"] = "FGNomFro"
         dico_frontiere["TYPE"] = "FAType"
         dico_frontiere["CYLINDRE"] = 1
         dico_frontiere["SPHERE"] = 2
         iaux = 0
+        kaux = 0
         for frontiere in self.dico_configuration["Frontiere_analytique"] :
+          iaux += 1
+          self.ecrire_ligne_configuration_0("Description de la frontiere analytique numero "+str(iaux))
+          jaux = dico_frontiere[frontiere["TYPE"]]
+          self.ecrire_ligne_configuration_3(dico_frontiere["TYPE"], iaux, jaux)
+          for aux in l_aux :
+            if frontiere.has_key(aux) :
+              self.ecrire_ligne_configuration_3(dico_frontiere[aux], iaux, frontiere[aux])
+          self.ecrire_ligne_configuration_0("Lien de la frontiere analytique numero "+str(iaux)+" avec les groupes")
           if not type(frontiere["GROUP_MA"]) in EnumTypes :
             lt_aux = [ frontiere["GROUP_MA"] ]
           else :
             lt_aux = frontiere["GROUP_MA"]
           for group_ma in lt_aux :
-            iaux = iaux + 1
-            self.ecrire_ligne_configuration_0("Description de la frontiere analytique numero "+str(iaux))
-            jaux = dico_frontiere[frontiere["TYPE"]]
-            self.ecrire_ligne_configuration_3(dico_frontiere["TYPE"], iaux, jaux)
-            self.ecrire_ligne_configuration_3(dico_frontiere["GROUP_MA"], iaux, group_ma)
-            for aux in l_aux :
-              if frontiere.has_key(aux) :
-                self.ecrire_ligne_configuration_3(dico_frontiere[aux], iaux, frontiere[aux])
+            kaux += 1
+            self.ecrire_ligne_configuration_3(dico_frontiere["FGNomGro"], kaux, group_ma)
+            self.ecrire_ligne_configuration_3(dico_frontiere["FGNomFro"], kaux, frontiere["NOM"])
 #
 #     7.3. Activation de la fonction
 #
       if ( self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") or self.dico_configuration.has_key("Frontiere_analytique") ) :
         self.ecrire_ligne_configuration_2("SuivFron", SuivFron)
 #
-#     8. Options particuliéres
+#     8. Options particulieres
 #
       self.ecrire_ligne_configuration_0("Autres options")
       if self.mots_cles.has_key("LANGUE") :
@@ -635,7 +656,7 @@ class creation_donnees_homard:
         self.ecrire_ligne_configuration_2("MessInfo", self.MessInfo)
       if self.dico_configuration["version_perso"] :
         VERSION_HOMARD = self.dico_configuration["VERSION_HOMARD"]
-        self.ecrire_ligne_configuration_2("DicoOSGM", "$HOMARD_USER/"+VERSION_HOMARD+"/CONFIG/typobj.stu")
+        self.ecrire_ligne_configuration_2("DicoOSGM", "$HOMARD_USER/"+VERSION_HOMARD+"/src/CONFIG/typobj.stu")
 #
 #     9. L'usage des mailles incompatibles avec HOMARD
 #
@@ -643,7 +664,7 @@ class creation_donnees_homard:
         self.ecrire_ligne_configuration_0("Les mailles incompatibles avec HOMARD")
         self.ecrire_ligne_configuration_2("TypeElem", self.mailles_incompatibles)
 #
-#     10. L'éventuel complement
+#     10. L'eventuel complement
 #
       if self.dico_configuration.has_key("fichier_conf_suppl") :
         nomfic = self.dico_configuration["fichier_conf_suppl"]
@@ -668,7 +689,7 @@ class creation_donnees_homard:
     return
 # ------------------------------------------------------------------------------
   def ecrire_fichier_donnees (self) :
-    """Ecrit le fichier des donnees dans le cas d'une demande d'information
+    """Ecrit le fichier des données dans le cas d'une demande d'information
     """
     message_erreur = None
 #
index 3a5b8c7f74ebd2f646ea93d8569f44f74dbfb4ca..235a92a26c2e46082a620e6fafdf2d76a3c0f644 100644 (file)
@@ -1,5 +1,22 @@
-#@ AJOUT defi_sol_miss_ops Macro
+#@ MODIF defi_sol_miss_ops Macro  DATE 14/06/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 
 import os
index c85a589ee29d7a98fe6599c8a876cd830032127c..57edffc761f8860a4fcc43ec94db3e7a4d69dd51 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF dyna_iss_vari_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF dyna_iss_vari_ops Macro  DATE 08/12/2010   AUTEUR ZENTNER I.ZENTNER 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+
+# RESPONSABLE ZENTNER I.ZENTNER
 import os
 
 
-def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNITE_RESU_FORC,
-                       NB_FREQ, PAS, UNITE_RESU_IMPE, TYPE, MATR_GENE , OPTION,INFO,
+def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, UNITE_RESU_FORC, 
+                                 UNITE_RESU_IMPE, TYPE, MATR_GENE ,INFO, 
+#                      NB_FREQ, FREQ_INIT, FREQ_PAS,  FREQ_MAX, OPTION,
                          **args):
    """
       Macro DYNA_ISS_VARI
@@ -29,37 +32,97 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
    ier=0
    import numpy as NP
    from numpy import linalg
-   import aster
+   from math import pi, ceil, sqrt, floor, log, tanh
+   import aster   
    from Accas import _F
    from Utilitai.Table import Table
    from Utilitai.Utmess import  UTMESS
-
+   
+  #--------------------------------------------------------------------------------  
    def get_group_coord(group):
       """Retourne les coordonnees des noeuds du groupe 'group'
       """
       l_ind = NP.array(coll_grno.get('%-8s' % group, [])) - 1
       return NP.take(t_coordo, l_ind, axis=0)
 
-
  # On importe les definitions des commandes a utiliser dans la macro
-
+ #-------------------------------------------------------------------------------- 
+ # On importe les definitions des commandes a utiliser dans la macro
+ # 
    COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')
    LIRE_IMPE_MISS = self.get_cmd('LIRE_IMPE_MISS')
    LIRE_FORC_MISS = self.get_cmd('LIRE_FORC_MISS')
    COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')   
-
    CREA_CHAMP = self.get_cmd('CREA_CHAMP')   
    DYNA_LINE_HARM = self.get_cmd('DYNA_LINE_HARM')   
    DETRUIRE= self.get_cmd('DETRUIRE')   
-
+   
    DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   CALC_FONCTION  = self.get_cmd('CALC_FONCTION')      
    CREA_TABLE     = self.get_cmd('CREA_TABLE')
-
+   REST_SPEC_TEMP     = self.get_cmd('REST_SPEC_TEMP')
+   DEFI_LIST_REEL=self.get_cmd('DEFI_LIST_REEL')
+  
    # Comptage commandes + declaration concept sortant
    self.set_icmd(1)
-   self.DeclareOut('tab_out', self.sd)
-   macro='DYNA_ISS_VARI'
-#--------------------------------------------------------
+   macro='DYNA_ISS_VARI'   
+   # Type de résultat
+   fonc_acce  =  args['FONC_SIGNAL'] 
+   if fonc_acce !=None:
+      TYPE_RESU='TRANS'
+      self.DeclareOut('dyha', self.sd)
+   else:
+      TYPE_RESU='SPEC'   
+      self.DeclareOut('tab_out', self.sd)
+   
+#--------------------------------------------------------------------------------
+ # -------- DISCRETISATION frequentielle ou temporelle -------- 
+
+   if TYPE_RESU=='SPEC':
+         FREQ_INIT=  args['FREQ_INIT']
+         NB_FREQ =  args['NB_FREQ'] 
+         PAS=  args['FREQ_PAS']  
+         OPTION=args['OPTION']  
+     
+   if TYPE_RESU=='TRANS':         
+         tt, vale_s=fonc_acce.Valeurs()  
+         DT=tt[1]-tt[0]            
+
+         __foint=CALC_FONCTION(                            
+#          __foncaf=CALC_FONCTION(
+                             FFT=_F( FONCTION =fonc_acce , 
+#                             METHODE='COMPLET',
+                               METHODE='PROL_ZERO', 
+                     ),  );    
+                            
+         vale_fre, vale_re, vale_im =__foint.Valeurs()            
+         NB_FREQ2= len(vale_fre)
+         PAS=1./(NB_FREQ2*DT)
+         NB_FREQ= int(floor(len(vale_fre)/2)) #signal nombre impair (floor(N/2)) ou signal nombre pair avec REST_SPEC_TEMP (prend N/2 pour N pair)
+#         NB_FREQ= int(floor(len(vale_fre)/2)+1)  # signal nombre pair: N/2+1
+         OMF =1./(2.*DT)            
+         FREQ_INIT=0.0
+                  
+        # liste des frequences complete 
+         l_freq_sig=[]   
+         for k in range(NB_FREQ):
+            freqk=FREQ_INIT+PAS*k
+            l_freq_sig.append(freqk)
+            
+
+         FREQ_FIN  =  args['FREQ_MAX']                
+         if  FREQ_FIN  !=None :  
+            assert (FREQ_FIN > (NB_FREQ-1)*PAS),  'FREQ_FIN = ' + str(FREQ_FIN)  +'  < frequence de coupure: augmenter FREQ_FIN'
+            PAS  =  args['FREQ_PAS'] 
+            NB_FREQ = int(ceil(FREQ_FIN/ PAS))+1
+            FREQ_INIT =0.0
+            
+#          NB_FREQ=NB_FREQ2
+         print '', NB_FREQ, PAS, FREQ_INIT,  (NB_FREQ-1)*PAS        
+ #        if INFO==2:
+ #            aster.affiche('MESSAGE','DISCRETISATION UTILISATEUR :  NB_FREQ, PAS, FREQ_FIN'+str(NB_FREQ)+' ,'+str(PAS)+' ,'+ str(NB_FREQ-1)*PAS))
+#---------------------------------------------------------------------------------------           
+# --------------------------------------------------------------------------------------
    dgene = MATR_GENE[0].cree_dict_valeurs(MATR_GENE[0].mc_liste)
    if dgene['MATR_AMOR'] != None:
      aster.affiche('MESSAGE',' MATR_AMOR existe')
@@ -71,9 +134,7 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
                                          ),                               
                                   );
      aster.affiche('MESSAGE',' MATR_AMOR pas donnee, on prend AMOR_REDUIT=0.0,')
-#   dint = INTERF[0].cree_dict_valeurs(INTERF[0].mc_liste)
-#   dcoh = MATR_COHE[0].cree_dict_valeurs(MATR_COHE[0].mc_liste)
-   
+  
    from SD.sd_maillage      import sd_maillage
    from SD.sd_nume_ddl_gd   import sd_nume_ddl_gd    
    from SD.sd_nume_ddl_gene import sd_nume_ddl_gene    
@@ -86,11 +147,11 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
    # MAILLAGE
    nom_bamo = v_refa_rigi[0]
    nume_ddl = aster.getvectjev(nom_bamo[0:8] + '           .REFD        ' )[3]
-   nom_mail = aster.getvectjev( nume_ddl[0:19] + '.REFN        ' )[0] 
+   nom_mail = aster.getvectjev( nume_ddl[0:14] + '.NUME.REFN        ' )[0] 
    maillage = sd_maillage(nom_mail)
    # MODELE, DDLGENE
    nom_ddlgene = v_refa_rigi[1]  
-   nom_modele = aster.getvectjev( nume_ddl[0:19] + '.LILI        ' )[1]   
+   nom_modele = aster.getvectjev( nume_ddl[0:14] + '.NUME.LILI        ' )[1]   
    resultat = self.get_concept(nom_bamo)
    nume_ddlgene = self.get_concept(nom_ddlgene)
    modele = self.get_concept(nom_modele[0:8])
@@ -111,14 +172,16 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
    GROUP_NO_INTER=INTERF['GROUP_NO_INTERF']
    noe_interf = get_group_coord(GROUP_NO_INTER)
    nbno, nbval = noe_interf.shape
+   
+   del nume_ddl, nom_mail, nom_modele
    if INFO==2:
       aster.affiche('MESSAGE','NBNO INTERFACE : '+str(nbno))
-  # MODES
-   iret,nbmodt,kbid=aster.dismoi('F','NB_MODES_TOT',nom_bamo,'RESULTAT')
-   iret,nbmodd,kbid=aster.dismoi('F','NB_MODES_DYN',nom_bamo,'RESULTAT')
-   iret,nbmods,kbid=aster.dismoi('F','NB_MODES_STA',nom_bamo,'RESULTAT')
 
+  # MODES
    nbmodt2 = MATR_GENE['MATR_RIGI'].DESC.get()[1]
+   iret,nbmodd,kbid=aster.dismoi('F','NB_MODES_DYN', nom_bamo,'RESULTAT')
+   iret,nbmods,kbid=aster.dismoi('F','NB_MODES_STA', nom_bamo,'RESULTAT')
+   iret,nbmodt,kbid=aster.dismoi('F','NB_MODES_TOT',nom_bamo,'RESULTAT')  
    if nbmodt2 != nbmodt:
        UTMESS('F','ALGORITH5_42')
 
@@ -126,22 +189,47 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
       texte = 'NOMBRE DE MODES: '+str(nbmodt)+'   MODES DYNAMIQUES: '+str(nbmodd)+'   MODES STATIQUES: '+str(nbmods)
       aster.affiche('MESSAGE',texte)
       aster.affiche('MESSAGE','COMPOSANTE '+NOM_CMP)
-   SPEC = NP.zeros((NB_FREQ,nbmodt,nbmodt)) + 1j
-#
-#---------------------------------------------------------------------
-  # BOUCLE SUR LES FREQUENCES
+
+
+   if TYPE_RESU=="SPEC":
+      SPEC = NP.zeros((NB_FREQ,nbmodt,nbmodt))+1j
+   if TYPE_RESU=="TRANS":      
+      VEC = NP.zeros((NB_FREQ,nbmodt))+1j 
+   abscisse = [None]*NB_FREQ     
+   
+  # PARAMETRES fonction de cohérence
    VITE_ONDE = MATR_COHE['VITE_ONDE']
    alpha = MATR_COHE['PARA_ALPHA']
-   abscisse = [None]*NB_FREQ
+   
+#   # PARAMETRE nom_champ   
+#    cham_calc=NOM_CHAM
+#    print 'NOM_CHAMP   ',cham_calc 
+#    if cham_calc=='DEPL':
+#       ii_cham=1
+#    elif   cham_calc=='VITE': 
+#       ii_cham=2     
+#    elif   cham_calc=='ACCE': 
+#       ii_cham=3   
+
+ #   POUR TRANS, on sort le champ en dépalcement: c'est équivalen du champ en deplacement si on applique un signal en ACCE
+   cham_calc='DEPL'     
+   ii_cham=1      
 
-   for k in range(0,NB_FREQ):
-      freqk=FREQ_INIT+PAS*k
-      aster.affiche('MESSAGE','FREQUENCE DE CALCUL: '+str(freqk))
 
-      # Matrice de coherence                  
+#---------------------------------------------------------------------
+#---------------------------------------------------------------------
+  # BOUCLE SUR LES FREQUENCES
+   for k in range(NB_FREQ):
+      freqk=FREQ_INIT+PAS*k   
+      if INFO==2:
+         aster.affiche('MESSAGE','FREQUENCE DE CALCUL: '+str(freqk))      
+      
+# #---------------------------------------------------------           
+#       # Matrice de coherence                  
       XX=noe_interf[:,0]
       YY=noe_interf[:,1]
-
+#       
+# # ----MITA & LUCO
       XN=NP.repeat(XX,nbno)
       YN=NP.repeat(YY,nbno)
       XR=NP.reshape(XN,(nbno,nbno))
@@ -151,8 +239,26 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
       DX=XR-XRT
       DY=YR-YRT
       DIST=DX**2+DY**2
-      COHE=NP.exp(-(DIST*(alpha*freqk/VITE_ONDE)**2.))
       
+      COHE=NP.exp(-(DIST*(alpha*freqk/VITE_ONDE)**2.))
+
+# #----ABRAHAMSON (EPRI)
+#       p_a1=1.647
+#       p_a2=1.01
+#       p_a3=0.4
+#       p_n1=7.02
+#    #    p_n2=1.685
+#       COHE=NP.zeros((nbno,nbno))
+#       for no1 in range(nbno):
+#          for no2 in range(nbno):
+#             dist_xi=sqrt((XX[no1]-XX[no2])**2+(YY[no1]-YY[no2])**2)
+#             p_n2=5.1-0.51*log(dist_xi+10.)
+#             pfc=-1.886+2.221*log(4000./(dist_xi+1.)+1.5)
+#             term1=1.+(freqk*tanh(p_a3*dist_xi)/(p_a1*pfc))**p_n1
+#             term2=1.+(freqk*tanh(p_a3*dist_xi)/(p_a2*pfc))**p_n2
+#             COHE[no1,no2]=1./sqrt(term1* term2)
+#             
+  #---------------------------------------------------------          
       # On desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas
       aster.matfpe(-1)
       eig, vec =linalg.eig(COHE)
@@ -165,17 +271,15 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
       order = (NP.argsort(eig)[::-1])
       eig = NP.take(eig, order)
       vec = NP.take(vec, order, 0)
-
+      
       #-----------------------
       # Nombre de modes POD a retenir
-      etot=NP.sum(NP.diag(COHE))
+      
+      etot=NP.sum(eig**2)
       ener=0.0
       nbme=0
-      if INFO==2:
-         aster.affiche('MESSAGE','ETOT :'+str(etot))
       while nbme < nbno:
-         ener= eig[nbme]+ener
+         ener= eig[nbme]**2+ener
          prec=ener/etot
          nbme=nbme+1
          if INFO==2:
@@ -183,12 +287,13 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
          if prec > PRECISION :
             break
 
-      aster.affiche('MESSAGE','NOMBRE DE MODES POD RETENUS : '+str(nbme))
-      aster.affiche('MESSAGE','PRECISION (ENERGIE RETENUE) : '+str(prec))      
+      if INFO==2:      
+         aster.affiche('MESSAGE','NOMBRE DE MODES POD RETENUS : '+str(nbme))
+         aster.affiche('MESSAGE','PRECISION (ENERGIE RETENUE) : '+str(prec))      
 
       PVEC=NP.zeros((nbme,nbno))
       for k1 in range(0,nbme):
-         PVEC[k1, 0:nbno]=NP.sqrt(eig[k1])*vec[k1]
+         PVEC[k1, 0:nbno]=NP.sqrt(eig[k1])*vec[k1] 
       # CALCUL DE FS variable-------------------------------
       XO=NP.zeros((nbme,nbmods))
       if NOM_CMP=='DX':
@@ -197,7 +302,6 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
          COMP = 2
       elif NOM_CMP=='DZ': 
          COMP = 3  
-
    #---------MODES interface
       # ----- boucle sur les modes statiques
       for mods in range(0,nbmods):
@@ -216,19 +320,20 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
          som=NP.sum(MCMP)
          max1=NP.max(MCMP)
          min1=NP.min(MCMP)
-         maxm=NP.max([NP.abs(max1), NP.abs(min1)])
-      #CALCUL DE XO
+         maxm=NP.max([abs(max1),abs(min1)])
+
+      #-------------CALCUL DE XO -------------
 #  on recupere la composante COMP (dx,dy,dz) des modes et on projete
          #  CAS 1: MODES DE CORPS RIGIDE
          if INTERF['MODE_INTERF'] =='CORP_RIGI':
             for modp in range(0,nbme):
                #modes de translation
                if mods+1 <=3:
-                  if NP.abs(som)<10.E-6:
+                  if abs(som)<10.E-6:
                      XO[modp,mods]=0.0
                   else :
                      fact=1./som               
-                     XO[modp,mods]=fact*NP.inner(MCMP,PVEC[modp])
+                     XO[modp,mods]=fact*abs(NP.inner(MCMP,PVEC[modp]))
                #modes de rotation
                else:
                   if maxm<10.E-6:
@@ -243,19 +348,18 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
          # CAS 2: MODES EF
          if INTERF['MODE_INTERF'] =='TOUT':
             for modp in range(0,nbme):
-               if NP.abs(som)<10.E-6:
+               if abs(som)<10.E-6:
                   if maxm<10.E-6:
                      XO[modp,mods]=0.0 
                   else:
                      UTMESS('F','UTILITAI5_89')                     
                else:
                   fact=1./som                  
-                  XO[modp,mods]=fact*NP.inner(MCMP,PVEC[modp])
+                  XO[modp,mods]=fact*abs(NP.inner(MCMP,PVEC[modp]))
 
          DETRUIRE(CONCEPT=_F(NOM=(__CHAM)),INFO=1)
 
-   #----Impedances etc.----------------------------------------------------------------- 
-
+   #----Impedances + force sismique.----------------------------------------------------------------- 
       if k>0:
          DETRUIRE(CONCEPT=_F(NOM=(__impe,__fosi,__rito)),INFO=1) 
 
@@ -272,30 +376,35 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
                                  COEF_C=1.0+0.j,),
                                  ),
                                  SANS_CMP='LAGR',
-                                 );                                                                            
+                                 );        
+
+      #    on cree __fosi  pour  RECU_VECT_GENE_C   plus loin                                                                                                             
+
       __fosi = LIRE_FORC_MISS(BASE=resultat,  
                            NUME_DDL_GENE=nume_ddlgene,
                            NOM_CMP=NOM_CMP,
-                           NOM_CHAM='DEPL',               
+                            NOM_CHAM='DEPL',                                       
                            UNITE_RESU_FORC = UNITE_RESU_FORC, 
                            FREQ_EXTR=freqk,); 
+
+
       # impedance
       MIMPE=__impe.EXTR_MATR_GENE() 
       #  extraction de la partie modes interface 
       KRS = MIMPE[nbmodd:nbmodt,nbmodd:nbmodt]
-
-      # force sismique pour verif
-#      FS0=__fosi.EXTR_VECT_GENE_C()
-#      FSE=FS0[nbmodd:nbmodt][:]
-      SP=NP.zeros((nbmodt,nbmodt))
-      for k1 in range(0,nbme):
-         #  calcul de la force sismique mode POD par mode POD
-         FS = NP.dot(KRS,XO[k1]) 
+      
+      if TYPE_RESU=="TRANS":        
+           #   force sismique resultante: somme des mode POD 
+         XO_s=NP.sum(XO,0)          
+         FS = NP.dot(KRS,XO_s) 
          Fzero=NP.zeros((1,nbmodd)) 
          FS2=NP.concatenate((Fzero,NP.reshape(FS,(1,nbmods))),1)
-      #  Calcul harmonique
-         __fosi.RECU_VECT_GENE_C(FS2[0]) 
-         __dyge = DYNA_LINE_HARM(MODELE=modele,
+       
+        #  Calcul harmonique
+         __fosi.RECU_VECT_GENE_C(FS2[0])       
+         __dyge = DYNA_LINE_HARM(
+                          MODELE=modele,
                           MATR_MASS = MATR_GENE['MATR_MASS'],
                           MATR_RIGI = __rito, 
                           FREQ = freqk,
@@ -303,53 +412,177 @@ def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNIT
                           EXCIT =_F ( VECT_ASSE = __fosi,
                                       COEF_MULT= 1.0,
                                   ),
-                        );                              
-         #  recuperer le vecteur modal depl calcule par dyge                                                     
+                        );                                        
+         #  recuperer le vecteur modal depl calcule par dyge                                                      
          desc = __dyge.DESC.get()
-         assert desc[0].strip() == 'DEPL', 'Champ DEPL non trouvé'
-         nomcham = __dyge.TACH.get()[1][0].strip()
+         assert desc[ii_cham-1].strip() ==cham_calc , 'Champ'+cham_calc+ 'non trouvé'
+            
+         nomcham = __dyge.TACH.get()[ii_cham][0].strip()
          cham = sd_cham_gene(nomcham)
-         RS = NP.array(cham.VALE.get())
-         SP=SP+RS*NP.conj(RS[:,NP.newaxis])   
+         RS = NP.array(cham.VALE.get())                
          DETRUIRE(CONCEPT=_F(NOM=(__dyge)),INFO=1) 
+         
+         
+      if  TYPE_RESU=="SPEC":               
+         SP=NP.zeros((nbmodt,nbmodt))
+         for k1 in range(0,nbme):
+         #  calcul de la force sismique mode POD par mode POD
+            FS = NP.dot(KRS,XO[k1]) 
+            Fzero=NP.zeros((1,nbmodd)) 
+            FS2=NP.concatenate((Fzero,NP.reshape(FS,(1,nbmods))),1)       
+        #  Calcul harmonique
+            __fosi.RECU_VECT_GENE_C(FS2[0])       
+            __dyge = DYNA_LINE_HARM(
+                          MODELE=modele,
+                          MATR_MASS = MATR_GENE['MATR_MASS'],
+                          MATR_RIGI = __rito, 
+                          FREQ = freqk,
+                          MATR_AMOR = __ma_amort,                          
+                          EXCIT =_F ( VECT_ASSE = __fosi,
+                                      COEF_MULT= 1.0,
+                                  ),
+                        );                                        
+         #  recuperer le vecteur modal depl calcule par dyge                                                      
+            desc = __dyge.DESC.get()
+            assert desc[ii_cham-1].strip() ==cham_calc , 'Champ'+cham_calc+ 'non trouvé'
+            
+            nomcham = __dyge.TACH.get()[ii_cham][0].strip()
+            cham = sd_cham_gene(nomcham)
+            RS = NP.array(cham.VALE.get())                
+            DETRUIRE(CONCEPT=_F(NOM=(__dyge)),INFO=1) 
+             # stockage des matrices résultats: sum(s_q s_q* ) 
+            SP=SP+RS*NP.conj(RS[:,NP.newaxis])   
+
+          
+            
+#--------------------------------------------
+# stockage de résultats pour toutes les fréquences calculées
+
+      if  TYPE_RESU=="SPEC":      #SPEC = (NB_FREQ,nbmodt,nbmodt)
+         SPEC[k]=SP
+      if TYPE_RESU=="TRANS":      #VEC (NB_FREQ,nbmodt) 
+         VEC[k]=RS
+      abscisse[k]= freqk
 
-      SPEC[k]=SP
+#   DETRUIRE(CONCEPT=_F(NOM=(__impe,__fosi,__rito)),INFO=1) 
 
-      abscisse[k]= freqk
+##-------------------------------------------------------------------------------------------------------------------------       
+##--------------------------------------------------------------------------------------------------------------------------
+#  Creation des sorties : table_fonction pour SPEC ou dyna_trans pour TRANS
+#-------------------------------------------------------------------------------------------------------------------------- 
+#-
+   aster.affiche('MESSAGE','TYPE_RESU : '+TYPE_RESU) 
 ##---------------------------------------------------------------------
-#  Ecriture des tables
+#  Si SPEC: Ecriture des tables
 #--------------------------------------------------------------------- 
+   if TYPE_RESU=='SPEC':
+       
 #   ------ CREATION DE L OBJET TABLE 
-   tab = Table()
-   tab.append({'NOM_CHAM' : 'DSP', 'OPTION' : 'TOUT',  'DIMENSION' : nbmodt})
-   for k2 in range(nbmodt):
-      if OPTION =='DIAG' : # on ecrit uniquement les termes diagonaux (autospectres) de la matrice
-         foncc=[]
-         for k in range(NB_FREQ) :
-                foncc.append(abscisse[k])
-                foncc.append(SPEC[k][k2,k2].real)
-                foncc.append(SPEC[k][k2,k2].imag)      
-         _f = DEFI_FONCTION(NOM_PARA='FREQ',
-                      NOM_RESU='SPEC',
-                      VALE_C  = foncc )      
-         # Ajout d'une ligne dans la Table
-         tab.append({'NUME_ORDRE_I' : k2+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
-
-      else: # on ecrit tout
-         for k1 in range(k2+1):
+      tab = Table()
+      tab.append({'NOM_CHAM' : 'DSP', 'OPTION' : 'TOUT',  'DIMENSION' : nbmodt})
+      for k2 in range(nbmodt):
+         if OPTION =='DIAG' : # on ecrit uniquement les termes diagonaux (autospectres) de la matrice
             foncc=[]
             for k in range(NB_FREQ) :
-               foncc.append(abscisse[k])
-               foncc.append(SPEC[k][k1,k2].real)
-               foncc.append(SPEC[k][k1,k2].imag)      
+                 foncc.append(abscisse[k])
+                 foncc.append(SPEC[k][k2,k2].real)
+                 foncc.append(SPEC[k][k2,k2].imag)      
             _f = DEFI_FONCTION(NOM_PARA='FREQ',
+                      NOM_RESU='SPEC',
+                      VALE_C  = foncc )      
+         # Ajout d'une ligne dans la Table
+            tab.append({'NUME_ORDRE_I' : k2+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+
+         else: # on ecrit tout
+            for k1 in range(k2+1):
+               foncc=[]
+               for k in range(NB_FREQ) :
+                  foncc.append(abscisse[k])
+                  foncc.append(SPEC[k][k1,k2].real)
+                  foncc.append(SPEC[k][k1,k2].imag)      
+               _f = DEFI_FONCTION(NOM_PARA='FREQ',
                       NOM_RESU='SPEC',
                       VALE_C  = foncc )
             # Ajout d'une ligne dans la Table
-            tab.append({'NUME_ORDRE_I' : k1+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+               tab.append({'NUME_ORDRE_I' : k1+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
 
    # Creation du concept en sortie
-   dict_keywords = tab.dict_CREA_TABLE()
-   tab_out = CREA_TABLE(TYPE_TABLE='TABLE_FONCTION',
+      dict_keywords = tab.dict_CREA_TABLE()
+      tab_out = CREA_TABLE(TYPE_TABLE='TABLE_FONCTION',
                         **dict_keywords)                       
+
+#-
+##---------------------------------------------------------------------
+#  Si TRANS: Ecriture de  tran_gene
+#--------------------------------------------------------------------- 
+# 1) on cree un concept harm_gene (factice) et le remplit a l'aide de putvectjev avec les bonnes valeurs, 
+# 2) On interpole les valeurs non calculés (l_freq_sig)
+# 3) puis on fait la FFT pour obtenir le signal temporel
+         
+   elif TYPE_RESU=='TRANS':  
+               
+      __lfre = DEFI_LIST_REEL(  VALE = list(l_freq_sig), ) ;
+#      print ' creation SD DYNA_LINE_HARM'
+        # on cree la SD resultat - factice (le champ ACCE sera remplace dans la suit par celui calcule)
+      __dyge0 = DYNA_LINE_HARM(
+                          MODELE=modele,
+                          MATR_MASS = MATR_GENE['MATR_MASS'],
+                          MATR_RIGI = __rito,                
+                          LIST_FREQ= __lfre,              #tuple(l_freq_sig),
+                          MATR_AMOR = __ma_amort,                          
+                          EXCIT =_F ( VECT_ASSE = __fosi,
+                                      COEF_MULT_C=1.,
+                                  ),
+                        );               
+
+#   ATTENTION:  on sort le champ en dépalcement: c'est équivalent au champ en acceleration car on a applique un signal en ACCE pour fosi en acce    
+      #   #         cela evite de diviser pr w2 pour intégrer l'acceleration (erreurs numeriques au point 0)
+      #   #         on remplace donc le champ en acceleration      
+      cham_calc='ACCE'     
+      ii_cham=3      
+
+#       print ' putvectjev'                          
+#      si tous les point on été calculés: pas d'interpolation
+      if  FREQ_FIN ==None :  
+         for  k,freqk in enumerate(l_freq_sig):       
+            coef_a=(vale_re[k]+vale_im[k]*1.j)                   
+            VEC_comp=VEC[k]*coef_a            
+            nomcham = __dyge0.TACH.get()[ii_cham][k].strip()
+            tup_re=tuple(VEC_comp.real)
+            tup_im=tuple(VEC_comp.imag)
+            aster.putvectjev( nomcham + '.VALE        ', nbmodt,tuple(range(1,nbmodt+1)),tup_re,tup_im,1 ) 
+
+      else:
+
+         for  k,freqk in enumerate(l_freq_sig):
+            coef_a=(vale_re[k]+vale_im[k]*1.j)                              
+  #  ------------ interpolation du vecteur POD  VEC (NB_FREQ, nbmodt)       
+            vale_i=NP.searchsorted(abscisse, freqk)
+#         print  freqk, vale_i,  abscisse[vale_i-1], abscisse[vale_i]
+            if vale_i ==0:
+               VEC_comp=VEC[0]*coef_a
+               VEC_real=VEC_comp.real
+               VEC_imag=VEC_comp.imag
+            else:
+               dfp=(freqk-abscisse[vale_i-1])/(abscisse[vale_i]-abscisse[vale_i-1])
+               VEC_comp=(VEC[vale_i-1]+dfp*(VEC[vale_i]-VEC[vale_i-1]))*coef_a
+               VEC_real=VEC_comp.real
+               VEC_imag=VEC_comp.imag                               
+            nomcham = __dyge0.TACH.get()[ii_cham][k].strip()
+            tup_re=tuple(VEC_real)
+            tup_im=tuple(VEC_imag)
+            aster.putvectjev( nomcham + '.VALE        ', nbmodt,tuple(range(1,nbmodt+1)),tup_re,tup_im,1 ) 
+      
+
+      print 'REST_SPEC_TEMP'         
+      
+      dyha= REST_SPEC_TEMP( RESU_GENE = __dyge0 , 
+#                        METHODE = 'PROL_ZERO' ,
+                          SYMETRIE = 'NON' ,        # signal non symmétrique: a completer
+#                        SYMETRIE = 'OUI' ,           # pas de prolongation                    
+                          NOM_CHAM = 'ACCE' );
+     
+      
+                    
    return ier
index f22b7551864f016b2bb13c4967e9a9d32bf5c460..1f81cdbe938ac7f64321e832568d13790256e419 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF exec_logiciel_ops Macro  DATE 15/03/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF exec_logiciel_ops Macro  DATE 15/03/2011   AUTEUR ASSIRE A.ASSIRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -24,11 +24,71 @@ import os
 import os.path as osp
 import traceback
 import shutil
+import tempfile
 from types import ListType, TupleType
 EnumTypes = (ListType, TupleType)
 
+cmd_ssh = "%(ssh)s -p %(port)s -o BatchMode=yes -o ConnectTimeout=2 -o ChallengeResponseAuthentication=yes -o PasswordAuthentication=no -o StrictHostKeyChecking=no %(user_machine)s '%(cmd)s'"
+cmd_scp = "%(scp)s -P %(port)s -o BatchMode=yes -o ConnectTimeout=2 -o ChallengeResponseAuthentication=yes -o PasswordAuthentication=no -o StrictHostKeyChecking=no %(src)s %(dst)s"
+
+#cmd_ssh = "%(ssh)s -p %(port)s %(user_machine)s '%(cmd)s'"
+#cmd_scp = "%(scp)s -P %(port)s %(src)s %(dst)s"
+
+exe_ssh = 'ssh'
+exe_scp = 'scp'
+
+tmpdir = '/tmp'
+
+debug = False
+
+# ------------------------------------------------------------------------------
+def ExecCommand_SSH(scmd, alt_comment='', verbose=False, separated_stderr=True):
+   """ Lance une commande distante via SSH
+       Recupere les differents problemes liés à SSH
+   """   
+   import aster
+   from Utilitai.Utmess     import  UTMESS
+   from Utilitai.System     import ExecCommand
+
+   iret, output, error = ExecCommand(scmd, alt_comment, verbose=False, separated_stderr=True)
+
+   if debug:
+     print 'scmd=', scmd
+     print 'iret=', iret
+     print 'output=', output
+     print 'error=', error
+
+   if iret != 0:
+      # on dump l'output et l'error
+      UTMESS('I', 'EXECLOGICIEL0_8',  valk=scmd,   print_as='E')
+      UTMESS('I', 'EXECLOGICIEL0_9',  valk=output, print_as='E')
+      UTMESS('I', 'EXECLOGICIEL0_10', valk=error,  print_as='E')
+
+      # Probleme de cle SSH
+      if error.find("Permission denied")!=-1:
+         UTMESS('F', 'EXECLOGICIEL0_14',  valk=scmd)
+
+      # Probleme d'adresse IP ou de hostname
+      elif error.find("Name or service not known")!=-1:
+         UTMESS('F', 'EXECLOGICIEL0_15',  valk=scmd)
+
+      # Probleme de port SSH
+      elif error.find("Connection refused")!=-1:
+         UTMESS('F', 'EXECLOGICIEL0_16',  valk=scmd)
+
+      # Probleme d'acces au logiciel/script distant
+      elif error.find("Aucun fichier ou dossier de ce type")!=-1:
+         UTMESS('F', 'EXECLOGICIEL0_17',  valk=scmd)
+
+      # Autre probleme non determinable
+      else:
+         UTMESS('F', 'EXECLOGICIEL0_18',  valk=scmd)
+
+   return iret, output, error
+
+
 # ------------------------------------------------------------------------------
-def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO, **args):
+def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MACHINE_DISTANTE, MAILLAGE, SALOME, CODE_RETOUR_MAXI, INFO, **args):
    """
    Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
    colonnes de table...
@@ -39,11 +99,13 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
    from Utilitai.Utmess     import  UTMESS
    from Utilitai.System     import ExecCommand
    from Utilitai.UniteAster import UniteAster
-   
+   from Stanley.salomeRunScript import MakeTempScript, DelTempScript, RunScript
+   from Noyau.N_types import is_enum
+
    PRE_GMSH      = self.get_cmd("PRE_GMSH")
    PRE_GIBI      = self.get_cmd("PRE_GIBI")
    LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
-   
+
    ier=0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
@@ -57,51 +119,247 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
    # paramètres nécessaires pour écrire la ligne de commande
    # !! d_para['options'] est une liste !!
    d_para = {'prog' : '', 'options' : ''}
-   
+
    l_args = []
    if ARGUMENT != None:
       l_args = ARGUMENT[:]
       if type(l_args) not in EnumTypes:
          l_args = [l_args,]
-   
+
+
+   #----------------------------------------------
+   # 0. Prepare les parametres dans le cas d'une execution sur une machine distante
+
+   if MACHINE_DISTANTE != None:
+      mcf = MACHINE_DISTANTE[0]
+      dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
+   else:
+      dMCF = {'SSH_ADRESSE': 'localhost', 'SSH_PORT': 22}
+
+
+   #----------------------------------------------
+   # 0. Prepare les parametres dans le cas d'une execution SALOME
+   if SALOME != None:
+      mcf = SALOME[0]
+      dMCFS = mcf.cree_dict_valeurs(mcf.mc_liste)
+
+      # Cas ou SALOME_HOST est different de SSH_ADRESSE ou que MACHINE_DISTANTE / SSH_ADRESSE n'est pas defini
+      if not dMCFS['SALOME_HOST'] in [ 'localhost', dMCF['SSH_ADRESSE'] ]:
+          MACHINE_DISTANTE = True
+          dMCF['SSH_ADRESSE'] = dMCFS['SALOME_HOST']
+          if dMCFS['SALOME_HOST'] != dMCF['SSH_ADRESSE']:
+              UTMESS('A','EXECLOGICIEL0_22')
+
+
+   #----------------------------------------------
+   # 0. Prepare les parametres dans le cas d'une execution sur une machine distante
+   if MACHINE_DISTANTE != None:
+
+      if dMCF.has_key('SSH_LOGIN') and dMCF['SSH_LOGIN'] != None: user_machine = '%s@%s' % (dMCF['SSH_LOGIN'], dMCF['SSH_ADRESSE'])
+      else:                                                       user_machine = '%s'    %  dMCF['SSH_ADRESSE']
+
+      if dMCF.has_key('SSH_PORT') and dMCF['SSH_PORT'] != None:   port = dMCF['SSH_PORT']
+      else:                                                       port = None
+
+
    #----------------------------------------------
    # 1. Préparation des données
    # 1.1. EXEC_LOGICIEL standard
-   if MAILLAGE == None:
+   if MAILLAGE == None and SALOME == None:
       mode_lancement = CMD_EXTERNE
       cmd = '%(prog)s %(options)s'
-   
+
    # 1.2. Cas "lancement d'un mailleur"
-   else:
+   elif MAILLAGE != None:
       mcf = MAILLAGE[0]
       dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
       d_para['fichIN']  = 'fort.%d' % dMCF['UNITE_GEOM']
       d_para['fichOUT'] = 'fort.%d' % dMCF['UNITE']
       if osp.exists(d_para['fichOUT']):
          os.remove(d_para['fichOUT'])
-      
+
       if dMCF['FORMAT'] == 'GMSH':
          mode_lancement = CMD_EXTERNE
          cmd = '%(prog)s %(options)s -o %(fichOUT)s %(fichIN)s'
          d_para['prog'] = osp.join(aster.repout(), 'gmsh')
          d_para['options'] = ('-3',)
-      
+
       elif dMCF['FORMAT'] == 'GIBI':
          mode_lancement = CMD_EXTERNE
          cmd = '%(prog)s %(options)s %(fichIN)s %(fichOUT)s'
          d_para['prog'] = osp.join(aster.repout(), 'gibi')
-      
+
       elif dMCF['FORMAT'] == 'SALOME':
          mode_lancement = EXECFILE
          if len(l_args) < 1:
             UTMESS('F','EXECLOGICIEL0_1')
          else:
             d_para['fichMED'] = l_args[0]
-      
+
+
+   # Cas "lancement d'un script salome"
+   elif SALOME != None:
+      mode_lancement = CMD_EXTERNE
+      cmd = '%(prog)s %(options)s'
+
+      mcf = SALOME[0]
+      dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
+      #print dMCF
+
+      # Mot-cles
+      if dMCF.has_key('FICHIERS_ENTREE') and dMCF['FICHIERS_ENTREE'] != None: FICHIERS_ENTREE = dMCF['FICHIERS_ENTREE']
+      else:                                                                   FICHIERS_ENTREE = []
+
+      if dMCF.has_key('FICHIERS_SORTIE') and dMCF['FICHIERS_SORTIE'] != None: FICHIERS_SORTIE = dMCF['FICHIERS_SORTIE']
+      else:                                                                   FICHIERS_SORTIE = []
+
+      if dMCF.has_key('SALOME_RUNAPPLI') and dMCF['SALOME_RUNAPPLI'] != None: RUNAPPLI = dMCF['SALOME_RUNAPPLI']
+      else:                                                                   RUNAPPLI = os.path.join( aster.repout(), 'runSalomeScript' )
+
+      if MACHINE_DISTANTE is None:
+          if dMCF['SALOME_HOST']: RUNAPPLI += ' -m %s ' % dMCF['SALOME_HOST']
+
+      if dMCF['SALOME_PORT']: RUNAPPLI += ' -p %s ' % dMCF['SALOME_PORT']
+
+      # Chemin du script
+      if   dMCF.has_key('CHEMIN_SCRIPT') and dMCF['CHEMIN_SCRIPT'] != None: CHEMIN_SCRIPT = dMCF['CHEMIN_SCRIPT']
+      elif dMCF.has_key('UNITE_SCRIPT')  and dMCF['UNITE_SCRIPT']  != None: CHEMIN_SCRIPT = 'fort.%s' % dMCF['UNITE_SCRIPT']
+      else:                                                                 CHEMIN_SCRIPT = ''
+
+
+      # dic = Dictionnaire a passer pour la creation du script temporaire
+      dic = { 'SALOMESCRIPT': CHEMIN_SCRIPT }
+
+
+      # Parametres a remplacer dans le script
+      if dMCF.has_key('NOM_PARA') and dMCF['NOM_PARA'] != None: NOM_PARA = dMCF['NOM_PARA']
+      else:                                                     NOM_PARA = []
+      if dMCF.has_key('VALE')     and dMCF['VALE']     != None: VALE     = dMCF['VALE']
+      else:                                                     VALE     = []
+      if len(NOM_PARA) != len(VALE): UTMESS('F', 'EXECLOGICIEL0_23')
+
+      for i in range(len(NOM_PARA)):
+         dic[ NOM_PARA[i] ] = VALE[i]
+
+
+      # Changement en liste s'il n'y a qu'un seul element
+      if (not is_enum(FICHIERS_ENTREE)):
+          FICHIERS_ENTREE = [FICHIERS_ENTREE,]
+      if (not is_enum(FICHIERS_SORTIE)):
+          FICHIERS_SORTIE = [FICHIERS_SORTIE,]
+
+
+      # On regenere des noms temporaires dans le repertoire temporaire distant
+      if MACHINE_DISTANTE != None:
+          FICHIERS_ENTREE_DIST = []
+          FICHIERS_SORTIE_DIST = []
+
+      for i in range(len(FICHIERS_ENTREE)):
+          if MACHINE_DISTANTE != None:
+              fw = tempfile.NamedTemporaryFile(mode='w', suffix='.salome_input')
+              fname =  os.path.join(tmpdir, os.path.basename(fw.name))
+              fw.close()
+              FICHIERS_ENTREE_DIST.append( fname )
+          else:
+              fname = FICHIERS_ENTREE[i]
+          #dic['INPUTFILE%s' % str(i+1)] = os.path.normpath(os.path.abspath(os.path.realpath(fname)))
+          dic['INPUTFILE%s' % str(i+1)] = fname
+
+      for i in range(len(FICHIERS_SORTIE)):
+          if MACHINE_DISTANTE != None:
+              fw = tempfile.NamedTemporaryFile(mode='w', suffix='.salome_output')
+              fname =  os.path.join(tmpdir, os.path.basename(fw.name))
+              fw.close()
+              FICHIERS_SORTIE_DIST.append( fname )
+          else:
+              fname = FICHIERS_SORTIE[i]
+          #dic['OUTPUTFILE%s' % str(i+1)] = os.path.normpath(os.path.abspath(os.path.realpath(fname)))
+          dic['OUTPUTFILE%s' % str(i+1)] = fname
+
+
+      # Creation du script de de la commande a executer
+      CHEMIN_SCRIPT = MakeTempScript( **dic )
+
+      # Ligne de commande
+      cmd_salome = []
+
+      if MACHINE_DISTANTE != None:
+
+         # on recopie le script sur le serveur distant
+         d_scp = { 'scp':    exe_scp,
+                   'port':   port,
+                   'src':    CHEMIN_SCRIPT,
+                   'dst':    '%s:%s/' % (user_machine, tmpdir),
+                  }
+         cmd_salome.append( cmd_scp % d_scp )
+
+         # Recopie les fichiers d'entrée sur le serveur distant
+         for i in range(len(FICHIERS_ENTREE)):
+             fsrc = FICHIERS_ENTREE[i]
+             fdst = FICHIERS_ENTREE_DIST[i]
+             d_scp = { 'scp':    exe_scp,
+                       'port':   port,
+                       'src':    fsrc,
+                       'dst':    '%s:%s' % (user_machine, fdst),
+                     }
+             cmd_salome.append( cmd_scp % d_scp )
+
+
+         # Execution du script
+         d_ssh = { 'ssh':          exe_ssh,
+                   'user_machine': user_machine,
+                   'port':         port,
+                   'cmd':          '%s %s' % (RUNAPPLI, os.path.join(tmpdir, os.path.basename(CHEMIN_SCRIPT)) ),
+                 }
+         cmd_salome.append( cmd_ssh % d_ssh )
+
+
+         # Recopie des fichiers de sortie depuis le serveur distant
+         for i in range(len(FICHIERS_SORTIE)):
+             fsrc = FICHIERS_SORTIE_DIST[i]
+             fdst = FICHIERS_SORTIE[i]
+             d_scp = { 'scp':    exe_scp,
+                       'port':   port,
+                       'src':    '%s:%s' % (user_machine, fsrc),
+                       'dst':    fdst,
+                     }
+             cmd_salome.append( cmd_scp % d_scp )
+
+
+         # Effacement des fichiers distants
+         lst_src = [ os.path.join( tmpdir, os.path.basename(CHEMIN_SCRIPT) ) ]
+         if FICHIERS_ENTREE_DIST: lst_src.extend( FICHIERS_ENTREE_DIST )
+         if FICHIERS_SORTIE_DIST: lst_src.extend( FICHIERS_SORTIE_DIST )
+
+         #print lst_src
+         d_ssh['cmd'] = ' '.join([ 'if [ -f "%s" ]; then \\rm %s; fi ; ' % (f,f) for f in lst_src ])
+         cmd_salome.append( cmd_ssh % d_ssh )
+
+
       else:
-         UTMESS('F', 'EXECLOGICIEL0_2', valk=dMCF['FORMAT'])
+         if not debug: cmd_salome.append( '%s %s ; if [ -f "%s" ]; then \\rm %s; fi ; ' % (RUNAPPLI, CHEMIN_SCRIPT, CHEMIN_SCRIPT, CHEMIN_SCRIPT) )
+         else:         cmd_salome.append( '%s %s ' % (RUNAPPLI, CHEMIN_SCRIPT) )
+
+
+      if INFO>=2: 
+         UTMESS('I', 'EXECLOGICIEL0_21',  valk='\n\n'.join(cmd_salome))
+
+         f=open(CHEMIN_SCRIPT, 'r')
+         txt=f.read()
+         f.close()
+         UTMESS('I', 'EXECLOGICIEL0_20', valk=txt)
+
+
+      d_para['prog'] = ' ; ' .join(cmd_salome)
+
+
+
+   #----------------------------------------------
+   # Pas prevu..
+   else:
+      UTMESS('F', 'EXECLOGICIEL0_2', valk=dMCF['FORMAT'])
+
 
-   
    #----------------------------------------------
    # 2. lecture des mots-clés
    if LOGICIEL != None:
@@ -110,14 +368,48 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
    if len(l_args) > 0:
       d_para['options'] = l_args
    d_para['options'] = ' '.join(d_para['options'])
-   
+
+
    #----------------------------------------------
    # 3. Exécution
    # 3a. Lancement d'une commande externe
    if mode_lancement == CMD_EXTERNE:
-      scmd = cmd % d_para
+
+      # Traite le cas d'une execution sur une machine distante
+      if MACHINE_DISTANTE != None:
+
+         # Construit le dictionnaire des parametres de la ligne de commande SSH
+         d_ssh = { 'ssh':          exe_ssh,
+                   'user_machine': user_machine,
+                   'port':         port,
+                 }
+
+         # Teste la connection via SSH (remplace la commande par un pwd)
+         d_ssh['cmd'] = 'pwd'
+         scmd = cmd_ssh % d_ssh
+         ExecCommand_SSH(scmd)
+
+         # Construit la commande SSH a partir de la commande initiale
+         if SALOME:
+            scmd = cmd % d_para             # La commande Salome integre deja le SSH
+         else:
+            d_ssh['cmd'] = cmd % d_para
+            scmd = cmd_ssh % d_ssh          # On encapsule la commande dans un SSH
+
+      else:
+         scmd = cmd % d_para
+
+
+      # Lancement de la commande
       comment = "Lancement de la commande :\n%s" % scmd
-      iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False, separated_stderr=True)
+      if debug: print comment
+
+      if MACHINE_DISTANTE != None:
+#         iret, output, error = ExecCommand_SSH(scmd, alt_comment=comment, verbose=False, separated_stderr=True)  # bizarrement les output/error ne suivent pas!
+         iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False, separated_stderr=True)
+      else:
+         iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False, separated_stderr=True)
+
       erreur = iret > CODE_RETOUR_MAXI
       if CODE_RETOUR_MAXI == -1: erreur = False
 
@@ -125,15 +417,16 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
       if INFO > 0 or erreur:
          UTMESS('I', 'EXECLOGICIEL0_11', vali=(iret, CODE_RETOUR_MAXI))
          UTMESS('I', 'EXECLOGICIEL0_9',  valk=output)
-      
+
       # en cas d'erreur, on dump tout dans le .resu + .erre
       if INFO == 2 or erreur:
          UTMESS('I', 'EXECLOGICIEL0_8',  valk=scmd, print_as='E')
          UTMESS('I', 'EXECLOGICIEL0_10', valk=error, print_as='E')
-      
+
       if erreur:
          UTMESS('F', 'EXECLOGICIEL0_3', vali=[CODE_RETOUR_MAXI, iret])
-   
+
+
    #----------------------------------------------
    # 3b. Exécution d'un fichier Python
    elif mode_lancement == EXECFILE:
index 4767042380f2f0d4482632627db3b0acaf70be36..b0591b7961f8ab1a318edbe4f6314d9ef8a8ae3f 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_diag_campbell_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF impr_diag_campbell_ops Macro  DATE 09/11/2010   AUTEUR TORKHANI M.TORKHANI 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -21,7 +21,7 @@
 
 
 
-def impr_diag_campbell_ops(self, MAILLAGE, MODES, NFREQ_camp, TYP_PREC, TYP_TRI,
+def impr_diag_campbell_ops(self, MAILLAGE, MODES, NFREQ_CAMP, TYP_PREC, TYP_TRI,
                            UNIT_FLE, UNIT_TOR, UNIT_LON, UNIT_TOT, UNIT_INT,L_S, **args) :
 # Macro permettant de tracer le diagramme de Campbell suivant 
 # le type de suivi des modes et le type de calcul de la precession
@@ -137,21 +137,21 @@ def impr_diag_campbell_ops(self, MAILLAGE, MODES, NFREQ_camp, TYP_PREC, TYP_TRI,
         aster.affiche('RESULTAT', chaine)
         chaine='Nombre de valeurs propres detectees est %d' %NFREQ
         aster.affiche('RESULTAT', chaine)
-    if NFREQ_camp > NFREQ:
-            chaine='Nombre de frequences demandees pour le trace  %d' %NFREQ_camp
+    if NFREQ_CAMP > NFREQ:
+            chaine='Nombre de frequences demandees pour le trace  %d' %NFREQ_CAMP
             aster.affiche('RESULTAT', chaine)
-            NFREQ_camp = NFREQ-4;
-            chaine='Nombre de frequences pour le trace  %d' %NFREQ_camp
+            NFREQ_CAMP = NFREQ-4;
+            chaine='Nombre de frequences pour le trace  %d' %NFREQ_CAMP
             aster.affiche('RESULTAT', chaine)
     else: 
-           chaine='Nombre de frequences demandees pour le trace  %d' %NFREQ_camp
+           chaine='Nombre de frequences demandees pour le trace  %d' %NFREQ_CAMP
            aster.affiche('RESULTAT', chaine)
-    if NFREQ_camp <=0 :      
+    if NFREQ_CAMP <=0 :      
         chaine='Le trace du diagramme de Campbell s''arrete !.'
         aster.affiche('RESULTAT', chaine)
        
   
-    if NFREQ_camp>0:
+    if NFREQ_CAMP>0:
     
 # ------------------------------------------------------------------
 # Classe les modes en flexion, en torsion , en traction/ compression
@@ -171,7 +171,7 @@ def impr_diag_campbell_ops(self, MAILLAGE, MODES, NFREQ_camp, TYP_PREC, TYP_TRI,
     
     
         NOEU=len(L_GR_NOEUD);
-        C_MODES=CLASS_MODES(self,lmo,NFREQ,NFREQ_camp,L_GR_NOEUD,L_VIT1);
+        C_MODES=CLASS_MODES(self,lmo,NFREQ,NFREQ_CAMP,L_GR_NOEUD,L_VIT1);
 
         NFREQ_f=C_MODES[0];
         NFREQ_t=C_MODES[1];
index 49087aba033b97dfa2e13d9164e37c03c74cc9aa..3bff5ed0b8893f3949e919742f546a1ee408390e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_diag_campbell_utils Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF impr_diag_campbell_utils Macro  DATE 09/11/2010   AUTEUR TORKHANI M.TORKHANI 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -27,7 +27,7 @@ from Accas import _F
 # "self" est l'objet MACRO
 
 
-def CLASS_MODES(self,L_MODES, NFREQ, NFREQ_camp, L_GR_NOEUD, VITE_ROTA) :
+def CLASS_MODES(self,L_MODES, NFREQ, NFREQ_CAMP, L_GR_NOEUD, VITE_ROTA) :
     """Classification des modes en flexion, en torsion et en traction/compression"""
     
     POST_RELEVE_T     =self.get_cmd('POST_RELEVE_T') 
@@ -212,17 +212,17 @@ def CLASS_MODES(self,L_MODES, NFREQ, NFREQ_camp, L_GR_NOEUD, VITE_ROTA) :
     # -----------------------------------------------------------
     NFREQ_fc=0;
     for jj in range(NFREQ_f): 
-        if NVT_f[jj][NBV-1]<= NFREQ_camp
+        if NVT_f[jj][NBV-1]<= NFREQ_CAMP
             NFREQ_fc=NFREQ_fc+1;
    
     NFREQ_tc=0;
     for jj in range(NFREQ_t): 
-        if NVT_t[jj][NBV-1]<= NFREQ_camp
+        if NVT_t[jj][NBV-1]<= NFREQ_CAMP
             NFREQ_tc=NFREQ_tc+1;
  
     NFREQ_lc=0;
     for jj in range(NFREQ_l): 
-        if NVT_l[jj][NBV-1]<= NFREQ_camp
+        if NVT_l[jj][NBV-1]<= NFREQ_CAMP
             NFREQ_lc=NFREQ_lc+1;
       
     RESULT =[NFREQ_f,NFREQ_t,NFREQ_l,Mf,Mt,Ml,NVT,NVT_f,NVT_t,NVT_l,NFREQ_fc,NFREQ_tc,NFREQ_lc]
index 1d7a334ba14c79a425b6a2a4bc8559a754d2313e..a94956a126ab201f0f6bf3cfa66c1db02520af48 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF impr_fonction_ops Macro  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF impr_fonction_ops Macro  DATE 12/07/2010   AUTEUR PROIX J-M.PROIX 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -62,7 +62,7 @@ def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
          aster.affiche('MESSAGE', ' Nom du fichier :'+nomfich)
    if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size!=0:
       if FORMAT=='XMGRACE':
-         niv='A'
+         niv='I'
       else:
          niv='I'
       UTMESS(niv, 'FONCT0_1', valk=nomfich)
index 19d0b349c715fddf8edaafb0449691d2d82ab830..50a98bc1ee48a1b78e2351ddc0189c8f73eb7a6e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF info_fonction_ops Macro  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF info_fonction_ops Macro  DATE 30/08/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,14 +22,12 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
      Ecriture de la macro INFO_FONCTION
   """
   ier=0
-  import string
   from Cata_Utils.t_fonction import t_fonction,t_fonction_c,t_nappe
   import math
   from Accas import _F
   from Utilitai.Utmess import  UTMESS
-  import types
-  from types import ListType, TupleType
-  EnumTypes = (ListType, TupleType)
+  import numpy as NP
+  from Utilitai.Table import Table
 
   ### On importe les definitions des commandes a utiliser dans la macro
   CREA_TABLE     = self.get_cmd('CREA_TABLE')
@@ -44,70 +42,107 @@ def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
   ### type de traitement
   
   ###
-  if (MAX != None): 
-     if type(MAX['FONCTION']) not in EnumTypes : l_fonc=[MAX['FONCTION'],]
-     else                                       : l_fonc=MAX['FONCTION']
-     __tmfonc=[None]*3
-     k=0
-     mfact=[]
-     ltyfo=[]
-     lpara=[]
-     lresu=[]
-     lfnom=[]
-     for fonc in l_fonc :
-        __ff=fonc.convert()
-        __ex=__ff.extreme()
-        ltyfo.append(__ff.__class__)
-        lpara.append(__ff.para['NOM_PARA'])
-        lresu.append(__ff.para['NOM_RESU'])
-        lfnom.append(fonc.nom)
-        n_mini=len(__ex['min'])
-        n_maxi=len(__ex['max'])
-        listeMCF=[_F(LISTE_K=[fonc.nom]*(n_mini+n_maxi),PARA='FONCTION'), 
-                  _F(LISTE_K=['MINI',]*n_mini+['MAXI',]*n_maxi,PARA='TYPE'),]
-        n_resu=__ff.para['NOM_RESU']
-        if isinstance(__ff,t_nappe) :
-           listeMCF=listeMCF+[\
-              _F(LISTE_R=[i[0] for i in __ex['min']]+[i[0] for i in __ex['max']],PARA=__ff.para['NOM_PARA']),\
-              _F(LISTE_R=[i[1] for i in __ex['min']]+[i[1] for i in __ex['max']],PARA=__ff.para['NOM_PARA_FONC']),\
-              _F(LISTE_R=[i[2] for i in __ex['min']]+[i[2] for i in __ex['max']],PARA=__ff.para['NOM_RESU'])]
-        else :
-           listeMCF=listeMCF+[\
-                  _F(LISTE_R=[i[0] for i in __ex['min']]+[i[0] for i in __ex['max']],PARA=__ff.para['NOM_PARA']),\
-                  _F(LISTE_R=[i[1] for i in __ex['min']]+[i[1] for i in __ex['max']],PARA=__ff.para['NOM_RESU'])]
-        __tmfonc[k]=CREA_TABLE(LISTE=listeMCF)
-        if k!=0 :
-           mfact.append(_F(OPERATION = 'COMB',TABLE=__tmfonc[k]))
-        k=k+1
-     ltyfo=dict([(i,0) for i in ltyfo]).keys()
-     lpara=dict([(i,0) for i in lpara]).keys()
-     lresu=dict([(i,0) for i in lresu]).keys()
-     if len(ltyfo)>1 : 
-# n'est pas homogène en type (fonctions et nappes) ''')
-        UTMESS('F','FONCT0_37')
-     if len(lpara)>1 : 
-# n'est pas homogène en label NOM_PARA :'''+' '.join(lpara))
-        UTMESS('F','FONCT0_38',valk=' '.join(lpara))
-     if len(lresu)>1 : 
-# n'est pas homogène en label NOM_RESU : '''+' '.join(lresu))
-        UTMESS('F','FONCT0_39',valk=' '.join(lresu))
-     __tab=CALC_TABLE(TABLE  = __tmfonc[0],
-                      ACTION = mfact        )
-     __min=CALC_TABLE(TABLE  = __tab,
-                      ACTION = _F(OPERATION = 'FILTRE',
-                                  CRIT_COMP = 'MINI',
-                                  NOM_PARA  = lresu[0]  ), )
-     __max=CALC_TABLE(TABLE  = __tab,
-                      ACTION = _F(OPERATION = 'FILTRE',
-                                  CRIT_COMP = 'MAXI',
-                                  NOM_PARA  = lresu[0]  ), )
-     print __min.EXTR_TABLE()
-     print __max.EXTR_TABLE()
-     C_out=CALC_TABLE(TABLE  = __min,
-                      TITRE  = 'Calcul des extrema sur fonction '+' '.join(lfnom),
-                      ACTION = _F(OPERATION = 'COMB',
-                                  TABLE=__max  ), )
-     print C_out.EXTR_TABLE()
+  if (MAX != None):
+      # liste des t_fonction
+      l_cofonc = MAX['FONCTION']
+      if type(l_cofonc) not in (list, tuple):
+          l_cofonc = [l_cofonc,]
+      l_fonc = [concept.convert() for concept in l_cofonc]
+      
+      # intervalles
+      mc_interv = MAX['INTERVALLE']
+      with_intervalle = mc_interv is not None
+      interv = []
+      if with_intervalle:
+          nbv = len(mc_interv)
+          if nbv % 2 != 0:
+              UTMESS('F', 'FONCT0_55')
+          tint = NP.array(mc_interv)
+          tint.shape = (nbv / 2, 2)
+          dx = tint[:,1] - tint[:,0]
+          if min(dx) < 0.:
+              UTMESS('F', 'FONCT0_56')
+          interv = tint.tolist()
+
+      # vérifications de cohérence
+      typobj = set()
+      npara = set()
+      nparf = set()
+      nresu = set()
+      l_nom = []
+      for tf in l_fonc:
+          typobj.add(tf.__class__)
+          npara.add(tf.para['NOM_PARA'])
+          nparf.add(tf.para.get('NOM_PARA_FONC'))
+          nresu.add(tf.para['NOM_RESU'])
+          l_nom.append(tf.nom)
+      if len(typobj) > 1:
+          # types (fonction, fonction_c, nappe) non homogènes
+          UTMESS('F', 'FONCT0_37')
+      is_nappe = typobj.pop() is t_nappe
+      if len(npara) > 1:
+          # NOM_PARA non homogènes
+          UTMESS('F', 'FONCT0_38', valk=' '.join(npara))
+      if len(nparf) > 1:
+          # NOM_PARA_FONC non homogènes
+          UTMESS('F', 'FONCT0_38', valk=' '.join(nparf))
+      if len(nresu) > 1:
+          # NOM_RESU non homogènes
+          UTMESS('F', 'FONCT0_39', valk=' '.join(nresu))
+      
+      # nom des paramètres et leurs types
+      k_para = npara.pop()
+      k_parf = nparf.pop()
+      k_ordo = nresu.pop()
+      k_min = k_para + "_MIN"
+      k_max = k_para + "_MAX"
+      ordered_params = ['FONCTION', 'TYPE']
+      ordered_type = ['K8', 'K8']
+      if with_intervalle:
+          ordered_params.extend(['INTERVALLE', k_min, k_max])
+          ordered_type.extend(['I', 'R', 'R'])
+      ordered_params.append(k_para)
+      ordered_type.append('R')
+      if is_nappe:
+          ordered_params.append(k_parf)
+          ordered_type.append('R')
+      ordered_params.append(k_ordo)
+      ordered_type.append('R')
+
+      # boucle sur les fonctions, intervalles, min/max, extrema
+      _type = { 'min' : 'MINI', 'max' : 'MAXI' }
+      _PREC = 1.e-6
+      tab = Table(para=ordered_params, typ=ordered_type)
+      for tf in l_fonc:
+          if not with_intervalle:
+              if not is_nappe:
+                  interv = [[float(min(tf.vale_x)), float(max(tf.vale_x))],]
+              else:
+                  interv = [[-1.e-300, 1.e300],]
+          for num_int, bornes in enumerate(interv):
+              x1, x2 = bornes
+              if not is_nappe:
+                  stf = tf.cut(x1, x2, _PREC, nom=tf.nom)
+              else:
+                  stf = tf
+              extrema = stf.extreme()
+              for key in ('min', 'max'):
+                  nb = len(extrema[key])
+                  for i in range(nb):
+                      line = { 'FONCTION' : tf.nom, 'TYPE' : _type[key],
+                          k_para : extrema[key][i][0] }
+                      if is_nappe:
+                          line.update({ k_parf : extrema[key][i][1], k_ordo :  extrema[key][i][2]})
+                      else:
+                          line.update({ k_ordo :  extrema[key][i][1]})
+                      if with_intervalle:
+                          line.update({ 'INTERVALLE' : num_int + 1,
+                                        k_min : x1, k_max : x2})
+                      tab.append(line)
+      tab.titr = "Extrema de " + ', '.join(l_nom)
+      # table résultat
+      dprod = tab.dict_CREA_TABLE()
+      C_out = CREA_TABLE(**dprod)
 
   ###
   if (ECART_TYPE  != None): 
index 99000615cbbb5ec7f147987887425d05aa46d99a..0bb940e11a075690a3d623e51d1f415dddef5029 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF lire_fonction_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF lire_fonction_ops Macro  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -17,6 +17,7 @@
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
 
 import os.path as osp
 import numpy
index 708dfef42492ba6fb74d1311ad073e1cd4283be9..64d3f4da73fd99d7d04da7690a7f60160992f240 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF lire_inte_spec_ops Macro  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
+#@ MODIF lire_inte_spec_ops Macro  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -145,7 +145,7 @@ def lire_inte_spec_ops(self,
         # Verification a posteriori de la dimension de l'inter-spectre
         tmp = 0.5*(-1+sqrt(1+8*len(l_fonc)))
         dim = int(tmp)
-        nb_fonc = 0.5*dim*(dim+1) 
+        nb_fonc = dim*(dim+1)/2
 
         if dim != tmp :
             UTMESS('F', 'SPECTRAL0_6')
index 5b016ad356aae99cbb90dbb54e6e829a6f767f94..7578438b72b6a66f202ae7dbe8586ef4be694ffd 100644 (file)
@@ -1,28 +1,28 @@
-#@ MODIF macr_adap_mail_ops Macro  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+#@ MODIF macr_adap_mail_ops Macro  DATE 11/05/2011   AUTEUR SELLENET N.SELLENET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                   
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 #
 """
 Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
 """
-__revision__ = "V1.3"
+__revision__ = "V1.6"
 #
 def macr_adap_mail_ops ( self,
                          INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE,
@@ -46,14 +46,14 @@ def macr_adap_mail_ops ( self,
 #  2. Les caracteristiques d'un passage sont conservees dans un dictionnaire. Il y a autant de
 #     dictionnaires que de sollicitations pour une serie d'adaptation. L'ensemble de ces dictionnaires
 #     est conserve dans la liste Liste_Passages. Cette liste est necessairement globale pour pouvoir
-#     la retrouver e chaque nouveau passage.
+#     la retrouver a chaque nouveau passage.
 #     Description du dictionnaire de passages :
 #        dico["Maillage_0"]             = o ; string ; nom du concept du maillage initial de la serie d'adaptation
 #        dico["Maillage_NP1"]           = o ; string ; nom du concept du dernier maillage adapte
 #        dico["Rep_Calc_HOMARD_global"] = o ; string ; Nom global du repertoire de calcul pour HOMARD
 #        dico["Rep_Calc_HOMARD_local"]  = o ; string ; Nom local du repertoire de calcul pour HOMARD
 #                                                      depuis le repertoire de calcul pour ASTER
-#        dico["niter"]                  = o ; entier ; numero d'iteration
+#        dico["niter"]                  = o ; entier ; numero d'iteration de depart
 #
 #  3. Les caracteristiques d'un maillage sont conservees dans un dictionnaire. Il y a autant de
 #     dictionnaires que de maillages manipules. L'ensemble de ces dictionnaires est conserve
@@ -72,13 +72,13 @@ def macr_adap_mail_ops ( self,
 #        dico["RESULTAT"]     = f ; concept ASTER du resutat associe
 #        dico["NOM_CHAM"]     = f ; string ; Nom ASTER du champ
 #        dico["CHAM_GD"]      = f ; concept ASTER du champ de grandeur associee
-#        dico["COMPOSANTE"]   = f ; liste ; Liste des noms ASTER des composante de l'indicateur
+#        dico["COMPOSANTE"]   = f ; liste ; Liste des noms ASTER des composantes du champ
 #        dico["NUME_ORDRE"]   = f ; entier ; Numero d'ordre du champ
 #        dico["INST"]         = f ; entier ; Instant du champ
 #        dico["PRECISION"]    = f ; entier ; Precision sur l'instant du champ
 #        dico["CRITERE"]      = f ; entier ; Critere de precision sur l'instant du champ
 #        dico["CHAM_MAJ"]     = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
-#        dico["NOM_MED"]      = o ; string ; Nom MED du champ
+#        dico["NOM_CHAM_MED"] = o ; string ; Nom MED du champ
 #        dico["SENSIBILITE"]  = f ; string ; Nom du parametre sensible associe
 #
 #  5. Signification de INFO
@@ -90,16 +90,20 @@ def macr_adap_mail_ops ( self,
 #                2nd niveau de message pour l'execution de HOMARD
 #
   from Accas import _F
-  from Macro import creation_donnees_homard 
+  from Macro import creation_donnees_homard
   from Utilitai.Utmess     import UTMESS, MasquerAlarme, RetablirAlarme
-  import aster 
+  import aster
   import string
   import os
+  import cPickle
+  from glob import glob
+  import tarfile
   from types import ListType, TupleType
   EnumTypes = (ListType, TupleType)
 #gn  import shutil
 #
   global Liste_Passages
+  global numero_passage_fonction
 #
 #====================================================================
 # 1. Prealables
@@ -109,15 +113,64 @@ def macr_adap_mail_ops ( self,
 #
   self.set_icmd(1)
 #
-# 1.2. ==> Numero du passage dans cette macro
+# 1.2. ==> Initialisations de parametres Aster
+#
+  repertoire_outils = aster.repout()
+  Rep_Calc_ASTER = os.getcwd()
+  if ( INFO >= 3 ) : print os.listdir(Rep_Calc_ASTER)
+#
+# Remarque : le nom pick.homard.tar est obligatoire car ASTK rapatrie dans la base tous les fichiers en pick.*
+  fichier_archive = os.path.join(Rep_Calc_ASTER, "pick.homard.tar")
+#gn  print "fichier_archive = ",fichier_archive
+#
+# 1.3. ==> Numero du passage dans cette macro
 #
   try :
-    self.jdc.indice_macro_homard = self.jdc.indice_macro_homard + 1
+    numero_passage_fonction = numero_passage_fonction + 1
   except :
-    self.jdc.indice_macro_homard = 1
+    numero_passage_fonction = 1
+#gn  print "numero_passage_fonction = ",numero_passage_fonction
+#
+# 1.4. ==> Au tout premier passage
+#
+  if numero_passage_fonction == 1 :
+#
     Liste_Passages = []
-  numero_passage_fonction = self.jdc.indice_macro_homard
-###  print "numero_passage_fonction = ",numero_passage_fonction
+#
+# 1.4.2. ==> Avec un fichier de reprise : on recupere les repertoires archives
+#
+    if os.path.isfile(fichier_archive) :
+#
+#     Extraction de l'archive
+#     Remarque : a partir de python 2.5 on pourra utiliser extractall
+      if ( INFO >= 3 ) : print "Extraction de l'archive", fichier_archive
+      file = tarfile.open(fichier_archive, "r")
+      for tarinfo in file :
+        if ( INFO >= 3 ) : print tarinfo.name, "is", tarinfo.size, "bytes in size and is",
+        if tarinfo.isreg():
+          if ( INFO >= 3 ) : print "a regular file."
+          file.extract(tarinfo.name)
+        elif tarinfo.isdir():
+          if ( INFO >= 3 ) : print "a directory."
+          file.extract(tarinfo.name)
+        else:
+          if ( INFO >= 3 ) : print "something else."
+      if ( INFO >= 3 ) : print os.listdir(Rep_Calc_ASTER)
+#     Liste de tous les repertoires d'adaptation qui ont ete recuperes
+      laux = glob("*_ADAP_*")
+#     On prend le fichier pickle du 1er repertoire (ce sont tous les memes),
+#     puis on recupere la liste des passages
+      fic = os.path.join(Rep_Calc_ASTER, laux[0], "pick.1")
+      file = open(fic, "r")
+      laux = cPickle.load(file)
+      file.close()
+#     Pour chaque cas, mise a jour du repertoire global
+      for dico in laux :
+        Rep_Calc_HOMARD_local  = dico["Rep_Calc_HOMARD_local"]
+        dico["Rep_Calc_HOMARD_global"] = os.path.join(Rep_Calc_ASTER, Rep_Calc_HOMARD_local)
+        Liste_Passages.append(dico)
+#
+  if ( INFO >= 3 ) : print "Liste_Passages = ", Liste_Passages
 #
 # 1.3. ==> On importe les definitions des commandes a utiliser dans la macro
 #
@@ -127,15 +180,11 @@ def macr_adap_mail_ops ( self,
   LIRE_MAILLAGE   = self.get_cmd("LIRE_MAILLAGE")
   LIRE_CHAMP      = self.get_cmd("LIRE_CHAMP")
 #
-# 1.4. ==> Le nom du programme HOMARD a lancer
-#
-  repertoire_outils = aster.repout()
-  homard            = repertoire_outils + "homard"
-#
 # 1.5. ==> Initialisations
 #
   codret_partiel = [0]
-  Rep_Calc_ASTER = os.getcwd()
+#
+  homard          = repertoire_outils + "homard"
 #
   liste_maillages = []
   liste_champs    = []
@@ -167,7 +216,6 @@ def macr_adap_mail_ops ( self,
 # 2.1.1. ==> Les concepts "maillage"
 #
 #gn    print "\n.. Debut de 2.1.1"
-#    for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1"] :
     for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1" , "MAILLAGE_NP1_ANNEXE"] :
 #gn      print "\nmot_cle = ",mot_cle
       dico = {}
@@ -184,7 +232,7 @@ def macr_adap_mail_ops ( self,
 #gn      print "dico = ",dico
       liste_maillages.append(dico)
 #
-# 2.1.2. ==> L'eventuel indicateur d'erreur
+# 2.1.2. ==> L'eventuel pilotage de l'adaptation
 #
 #gn    print "\n.. Debut de 2.1.2"
 #gn    print "args = ", args
@@ -192,11 +240,8 @@ def macr_adap_mail_ops ( self,
       dico = {}
       dico["Type_Champ"] = "INDICATEUR"
       if ( args["RESULTAT_N"] != None ) :
-        lresu = 1
         dico["RESULTAT"]   = args["RESULTAT_N"]
-        noresu = dico["RESULTAT"].nom
-        dico["NOM_CHAM"]   = args["INDICATEUR"]
-        nomsym = dico["NOM_CHAM"]
+        dico["NOM_CHAM"]   = args["NOM_CHAM"]
         if ( args["NUME_ORDRE"] != None ) :
           dico["NUME_ORDRE"] = args["NUME_ORDRE"]
         if ( args["INST"] != None ) :
@@ -207,27 +252,21 @@ def macr_adap_mail_ops ( self,
         if ( args["SENSIBILITE"] != None ) :
           dico["SENSIBILITE"] = args["SENSIBILITE"]
       else :
-        lresu = 0
         dico["CHAM_GD"] = args["CHAM_GD"]
-        noresu = dico["CHAM_GD"].nom
-        nomsym = " "
 #gn      print "dico = ", dico
 #
-      if dico.has_key("SENSIBILITE") :
-        nopase = dico["SENSIBILITE"].nom
-      else :
-        nopase = " "
-#gn      print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
-      dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
-#gn      print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
-#
-      if args.has_key("NOM_CMP_INDICA") :
-        if args["NOM_CMP_INDICA"] is not None :
-          if not type(args["NOM_CMP_INDICA"]) in EnumTypes :
-            l_aux = [args["NOM_CMP_INDICA"]]
+      nom_cham_med_fichier = "champ_de_pilotage"
+#                             12345678901234567890123456789012
+      dico["NOM_CHAM_MED"] = nom_cham_med_fichier
+#gn      print "==> dico[\"NOM_CHAM_MED\"] = ", dico["NOM_CHAM_MED"]
+#
+      if args.has_key("NOM_CMP") :
+        if args["NOM_CMP"] is not None :
+          if not type(args["NOM_CMP"]) in EnumTypes :
+            l_aux = [args["NOM_CMP"]]
           else :
             l_aux = []
-            les_composantes = args["NOM_CMP_INDICA"]
+            les_composantes = args["NOM_CMP"]
             for composante in les_composantes :
               l_aux.append(composante)
           dico["COMPOSANTE"] = l_aux
@@ -237,7 +276,6 @@ def macr_adap_mail_ops ( self,
 ###      print dico
 #
 # 2.1.3. ==> Les champs a mettre a jour
-#
 #gn     print "\n.. Debut de 2.1.3."
 #
     if args.has_key("MAJ_CHAM") :
@@ -247,15 +285,19 @@ def macr_adap_mail_ops ( self,
       else :
         les_champs = args["MAJ_CHAM"]
 #
+      dico_interp = {}
+      dico_interp["AUTO"] = 0
+      dico_interp["ISOP2"] = 3
+#
+      iaux = 0
       for maj_cham in les_champs :
-#gn        print maj_cham
+#gn        print "maj_cham :", maj_cham
 #gn        print type(maj_cham)
 #
         dico = {}
         dico["Type_Champ"] = "CHAMP_MAJ"
         l_aux = [ "CHAM_MAJ", "TYPE_CHAM" ]
         if ( maj_cham["RESULTAT"] != None ) :
-          lresu = 1
           l_aux.append("RESULTAT")
           l_aux.append("NOM_CHAM")
           if ( maj_cham["NUME_ORDRE"] != None ) :
@@ -265,28 +307,37 @@ def macr_adap_mail_ops ( self,
             for cle in [ "PRECISION", "CRITERE" ] :
               if ( maj_cham[cle] != None ) :
                 dico[cle] = maj_cham[cle]
-          noresu = maj_cham["RESULTAT"].nom
-          nomsym = maj_cham["NOM_CHAM"]
           if ( maj_cham["SENSIBILITE"] != None ) :
             dico["SENSIBILITE"] = maj_cham["SENSIBILITE"]
         else :
-          lresu = 0
           l_aux.append("CHAM_GD")
-          noresu = maj_cham["CHAM_GD"].nom
-          nomsym = " "
         for cle in l_aux :
           dico[cle] = maj_cham[cle]
 #gn        print "dico = ", dico
 #
-        if dico.has_key("SENSIBILITE") :
-          nopase = dico["SENSIBILITE"].nom
-        else :
-          nopase = " "
-#gn        print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
-        dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
-#gn        print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
+        if maj_cham["NOM_CMP"] is not None :
+          if not type(maj_cham["NOM_CMP"]) in EnumTypes :
+            l_aux = [maj_cham["NOM_CMP"]]
+          else :
+            l_aux = []
+            les_composantes = maj_cham["NOM_CMP"]
+            for composante in les_composantes :
+              l_aux.append(composante)
+          dico["COMPOSANTE"] = l_aux
+#gn          print "COMPOSANTEmaj_cham", dico["COMPOSANTE"]
 #
-###        print dico
+#gn        print "dico = ", dico
+        iaux += 1
+        la_chaine = '%08d' % iaux
+        nom_cham_med_fichier = "champ_" + la_chaine
+#                               123456789012345678901234    56789012
+        dico["NOM_CHAM_MED"] = nom_cham_med_fichier
+#gn        print "==> dico[\"NOM_CHAM_MED\"] = ", dico["NOM_CHAM_MED"]
+#
+        dico["TYPE_MAJ"] = dico_interp[maj_cham["TYPE_MAJ"]]
+#gn        print "==> dico[\"TYPE_MAJ\"] = ", dico["TYPE_MAJ"]
+#
+#gn        print "dico :", dico
         liste_champs.append(dico)
 #
 # 2.1.4. ==> Les zones de raffinement
@@ -300,8 +351,7 @@ def macr_adap_mail_ops ( self,
         les_zones = args["ZONE"]
 #
         for zone in les_zones :
-###          print zone
-###          print type(zone)
+###          print zone, "de type", type(zone)
           dico = {}
           for aux in l_aux :
             if ( zone[aux] != None ) :
@@ -348,7 +398,7 @@ def macr_adap_mail_ops ( self,
       les_front_analytiques = args["FRONTIERE_ANALYTIQUE"]
 #
     for frontiere in les_front_analytiques :
-      l_aux = [ "TYPE", "GROUP_MA", "RAYON", "X_CENTRE", "Y_CENTRE", "Z_CENTRE"]
+      l_aux = [ "NOM", "TYPE", "GROUP_MA", "RAYON", "X_CENTRE", "Y_CENTRE", "Z_CENTRE"]
       if ( frontiere["TYPE"] == "CYLINDRE" ) :
         l_aux.append("X_AXE")
         l_aux.append("Y_AXE")
@@ -389,7 +439,6 @@ def macr_adap_mail_ops ( self,
       UTMESS('I','HOMARD0_6')
     else :
       UTMESS('A','HOMARD0_7')
-#    UTMESS('I','HOMARD0_6',valk='glop')
 #
 #====================================================================
 # 3. Preparation du lancement des commandes
@@ -399,7 +448,7 @@ def macr_adap_mail_ops ( self,
 #          . Memorisation des noms ASTER du maillage en entree et en sortie (sous forme string)
 #
 #          On cree une nouvelle liste des dictionnaires decrivant les maillages
-#          et e la fin on ecrase l'ancienne liste par cette nouvelle.
+#          et a la fin on ecrase l'ancienne liste par cette nouvelle.
 #
 #gn  print "\n.. Debut de 3.1."
 #
@@ -446,6 +495,7 @@ def macr_adap_mail_ops ( self,
 #              le cas, cela veut dire que l'adaptation en cours est la suite d'une
 #              precedente. On doit donc utiliser le meme repertoire. Le numero
 #              d'iteration est celui de l'adaptation precedente augmente de 1.
+#              Si on n'a rien trouve, c'est que l'on demarre un nouveau cas.
 #
 #gn    print "\.. Debut de 3.2.2.1."
 #
@@ -459,16 +509,20 @@ def macr_adap_mail_ops ( self,
 #
 #gn    print "\.. Debut de 3.2.2.2."
 #
-# 3.2.2.2.1. ==> Enregistrement d'un nouveau cas de figure
+# 3.2.2.2.1. ==> Enregistrement d'un nouveau cas
+#                On emet une alarme si il existe deja un cas pour etre certain
+#                que l'utilisateur ne s'est pas trompe dans l'enchainement
 #
     if ( niter == 0 ) :
+      for dico in Liste_Passages :
+        UTMESS("A", 'HOMARD0_9', valk=(Nom_Concept_Maillage_N, Nom_Concept_Maillage_NP1, dico["Maillage_NP1"], dico["Maillage_0"]), vali=dico["niter"]+1 )
       dico = {}
-      dico["Maillage_0"]   = Nom_Concept_Maillage_N
-      dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
-      dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
+      dico["Maillage_0"]             = Nom_Concept_Maillage_N
+      dico["Maillage_NP1"]           = Nom_Concept_Maillage_NP1
+      dico["Maillage_NP1_ANNEXE"]    = Nom_Concept_Maillage_NP1_ANNEXE
       dico["Rep_Calc_HOMARD_local"]  = Rep_Calc_HOMARD_local
       dico["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
-      dico["niter"]        = niter
+      dico["niter"]                  = niter
       Liste_Passages.append(dico)
 #
 # 3.2.2.2.2. ==> Modification du cas en cours
@@ -477,16 +531,20 @@ def macr_adap_mail_ops ( self,
       l_aux = []
       for dico in Liste_Passages :
         if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
-          dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
+          dico["Maillage_NP1"]        = Nom_Concept_Maillage_NP1
           dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
-          dico["niter"]        = niter
+          dico["niter"]               = niter
         l_aux.append(dico)
-      Liste_Passages = l_aux
+      Liste_Passages = []
+      for dico in l_aux :
+        Liste_Passages.append(dico)
+#
+#gn    print "Apres 3.2.2.2. Liste_Passages = ", Liste_Passages
 #
 ###  print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
 #
-# 3.2.3. Creation du repertoire pour homard
-#        attention : on ne fait cette creation qu'une seule fois par cas
+# 3.2.3. Le repertoire pour homard
+#        Attention : on ne fait cette creation qu'une seule fois par cas
 #                    d'adaptation ou d'information
 #
 #gn  print "\.. Debut de 3.2.3."
@@ -498,6 +556,11 @@ def macr_adap_mail_ops ( self,
     except os.error,codret_partiel :
       self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
       UTMESS("F", 'HOMARD0_4', valk=Rep_Calc_HOMARD_global)
+#
+  else :
+#
+    if not os.path.isdir(Rep_Calc_HOMARD_global) :
+      UTMESS("F", 'HOMARD0_8', valk=Rep_Calc_HOMARD_global)
 #
 #====================================================================
 # 4. Ecriture des commandes de creation des donnees MED
@@ -506,20 +569,20 @@ def macr_adap_mail_ops ( self,
 #gn  print "\.. Debut de 4."
 #
 #  On doit ecrire : le maillage,
-#                   le champ d'indicateur d'erreur
-#                   les champs e convertir
+#                   le champ de pilotage de l'adaptation
+#                   les champs a convertir
 #  Remarque : on met tout dans le meme fichier
 #
 #  Chacune de ces ecritures est optionnelle selon le contexte.
 #
 # 4.1. ==> Noms des fichiers d'ASTER vers HOMARD et eventuellement de HOMARD vers ASTER
-#          Remarque : aujourd'hui, les ecritures ou les lectures au format MED se font obligatoirement sur
-#                     un fichier de nom fort.n, place dans le repertoire de calcul
+#          Remarque : aujourd'hui, les ecritures ou les lectures au format MED se font obligatoirement
+#                     dans un fichier de nom fort.n, place dans le repertoire de calcul
 ##
 # 4.1.1. ==> D'ASTER vers HOMARD
 #
   unite_fichier_aster_vers_homard = 1787 + 2*numero_passage_fonction
-  fichier_aster_vers_homard = os.path.join(Rep_Calc_ASTER,"fort." + str(unite_fichier_aster_vers_homard))
+  fichier_aster_vers_homard = os.path.join(Rep_Calc_ASTER, "fort." + str(unite_fichier_aster_vers_homard))
 ###  print "fichier_aster_vers_homard = ",fichier_aster_vers_homard
 #
 # 4.1.2. ==> De HOMARD vers ASTER
@@ -552,33 +615,31 @@ def macr_adap_mail_ops ( self,
       motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
                           **motscsi )
 #
-      IMPR_RESU ( INFO = infocomm, 
+      IMPR_RESU ( INFO = infocomm,
                   FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
                   **motscfa )
 #
 # 4.4. Le(s) champ(s)
 #        Attention : il se peut que l'on demande la mise à jour du champ qui a servi comme
-#                    indicateur d'erreur. Si c'est le cas, il ne faut pas demander son
+#                    pilotage de l'adaptation. Si c'est le cas, il ne faut pas demander son
 #                    impression sinon il y a plantage d'IMPR_RESU qui ne sait pas substituer
 #                    deux champs. D'ailleurs, c'est plus economique ainsi !
-#        Remarque : pour l'adaptation, on peut ne demander qu'un nombre reduit de composante du
-#                   champ d'indicateur.
-#                   s'il y a demande de mise a jour, toutes les composantes sont concernees. Il faut
-#                   donc dans ce cas imprimer le champ total.
+#        Remarque : pour l'adaptation ou les champs a mettre a jour, on peut ne demander
+#                   qu'un nombre reduit de composantes.
 #        dico["Type_Champ"]   = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
 #        dico["RESULTAT"]     = f ; concept ASTER du resutat associe
 #        dico["NOM_CHAM"]     = f ; string ; Nom ASTER du champ
 #        dico["CHAM_GD"]      = f ; concept ASTER du champ de grandeur associee
-#        dico["COMPOSANTE"]   = f ; liste ; Liste des noms ASTER des composante de l'indicateur
+#        dico["COMPOSANTE"]   = f ; liste ; Liste des noms ASTER des composante du champ
 #        dico["NUME_ORDRE"]   = f ; entier ; Numero d'ordre du champ
 #        dico["INST"]         = f ; entier ; Instant du champ
 #        dico["PRECISION"]    = f ; entier ; Precision sur l'instant du champ
 #        dico["CRITERE"]      = f ; entier ; Critere de precision sur l'instant du champ
 #        dico["CHAM_MAJ"]     = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
-#        dico["NOM_MED"]      = o ; string ; Nom MED du champ
+#        dico["NOM_CHAM_MED"] = o ; string ; Nom MED du champ
 #        dico["SENSIBILITE"]  = f ; string ; Nom du parametre sensible associe
 #
-# 4.4.1. Recherche d'un doublon eventuel sur le champ d'indicateur d'erreur
+# 4.4.1. Recherche d'un doublon eventuel sur le champ de pilotage de l'adaptation
 #
 #gn  print "dico_indi = ",dico_indi
   if len(dico_indi) > 0 :
@@ -595,11 +656,11 @@ def macr_adap_mail_ops ( self,
 #
   liste_champs_imprime = []
   for dico in liste_champs :
-###    print "\n.... dico = ",dico
-#   Pour un champ e mettre e jour, on a toujours impression
+#gn    print "\n.... dico = ",dico
+#   Pour un champ a mettre a jour, on a toujours impression
     if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
       liste_champs_imprime.append(dico)
-#     Si le champ d'indicateur n'a toujours pas ete repere comme champ e mettre e jour :
+#     Si le champ de pilotage de l'adaptation n'a toujours pas ete repere comme champ a mettre a jour :
       if not indic_est_deja_imprime :
 #       Est-ce le meme champ ?
         on_a_le_champ = 1
@@ -636,11 +697,14 @@ def macr_adap_mail_ops ( self,
                   if ( dico_indi[cle] != dico[cle] ) :
                     on_a_le_champ = 0
                     break
+#       Le champ de pilotage fait partie des champs mis a jour : on le note
+#       et on utilise le meme nom de champ MED
         if on_a_le_champ :
+          dico_indi["NOM_CHAM_MED"] = dico["NOM_CHAM_MED"]
           indic_est_deja_imprime = 1
-###  print "\n\nFin de la boucle .. indic_est_deja_imprime = ",indic_est_deja_imprime
-#   Si le champ d'indicateur n'a pas ete repere comme champ e mettre e jour, il faut
-#   l'inclure dans les champs e imprimer
+#gn  print "\n\nFin de la boucle .. indic_est_deja_imprime = ",indic_est_deja_imprime
+#   Si le champ de pilotage de l'adaptation n'a pas ete repere comme champ a mettre a jour,
+#   il faut l'inclure dans les champs e imprimer
   if not indic_est_deja_imprime :
     liste_champs_imprime.append(dico_indi)
 #
@@ -649,7 +713,7 @@ def macr_adap_mail_ops ( self,
 #
   for dico in liste_champs_imprime :
     motscsi = {}
-    for cle in [ "RESULTAT", "NOM_CHAM", "CHAM_GD", "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
+    for cle in [ "RESULTAT", "NOM_CHAM", "CHAM_GD", "NUME_ORDRE", "INST", "PRECISION", "CRITERE", "NOM_CHAM_MED" ] :
       if dico.has_key(cle) :
         if ( dico[cle] != None ) :
           motscsi[cle] = dico[cle]
@@ -666,7 +730,7 @@ def macr_adap_mail_ops ( self,
                       )
 #gn    print ".. motscfa = ",motscfa
 #
-    IMPR_RESU ( INFO = infocomm, 
+    IMPR_RESU ( INFO = infocomm,
                 FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
                 **motscfa )
 #
@@ -702,12 +766,14 @@ def macr_adap_mail_ops ( self,
     dico_configuration[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
 #gn  print dico_configuration
 #
-# 5.3. ==> Les caracteristiques de l'eventuel indicateur d'erreur
+# 5.3. ==> Les caracteristiques de l'eventuel pilotage de l'adaptation
 #
   for dico in liste_champs :
     dico_aux = {}
     if ( dico["Type_Champ"] == "INDICATEUR" ) :
-      l_aux = [ "NOM_MED", "COMPOSANTE" ]
+      l_aux = [ "NOM_CHAM_MED" ]
+      if dico.has_key("COMPOSANTE") :
+        l_aux.append("COMPOSANTE")
       if dico.has_key("NUME_ORDRE") :
         l_aux.append("NUME_ORDRE")
       for cle in l_aux :
@@ -731,13 +797,13 @@ def macr_adap_mail_ops ( self,
 ###  if dico_configuration.has_key("Zones_raffinement") :
 ###    print "dico_configuration[Zones_raffinement] = ", dico_configuration["Zones_raffinement"]
 #
-# 5.5. ==> La mise a jour de champs
+# 5.5. ==> Les eventuelles mises a jour de champs
 #
   prem = 1
   for dico in liste_champs :
     dico_aux = {}
     if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
-      l_aux = [ "NOM_MED", "COMPOSANTE" ]
+      l_aux = [ "NOM_CHAM_MED", "COMPOSANTE", "TYPE_MAJ" ]
       if dico.has_key("NUME_ORDRE") :
         l_aux.append("NUME_ORDRE")
       else :
@@ -787,7 +853,6 @@ def macr_adap_mail_ops ( self,
 # 5.8. ==> Impression eventuelle des fichiers crees
 #
 #gn  print "Repertoire ",Rep_Calc_HOMARD_global
-#gn  os.system("ls -la "+Rep_Calc_HOMARD_global)
   if ( INFO >= 4 ) :
     l_aux = ["HOMARD.Donnees" , "HOMARD.Configuration"]
   else :
@@ -812,13 +877,7 @@ def macr_adap_mail_ops ( self,
 #====================================================================
 # 6. Ecriture de la commande d'execution de homard
 #====================================================================
-#
-#
 #gn  print "\.. Debut de 6."
-#gn  os.system("cp " + Rep_Calc_HOMARD_global + "/../fort.17* $HOME/aster")
-#gn  os.system("cp " + Rep_Calc_HOMARD_global + "/HOMARD.Configuration $HOME/aster/HOMARD.Configuration"+str(niter))
-#gn  fichier_aster_vers_homard_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_aster_vers_homard))
-#gn  shutil.copyfile(fichier_aster_vers_homard, fichier_aster_vers_homard_2)
 #
   if ( INFO == 1 ) :
     iaux = INFO
@@ -836,25 +895,18 @@ def macr_adap_mail_ops ( self,
 #gn  import time
 #gn  time.sleep(3600)
 #
-#gn  if ( mode_homard == "ADAP" ) :
-#gn    fichier_homard_vers_aster_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster))
-#gn    shutil.copyfile(fichier_homard_vers_aster, fichier_homard_vers_aster_2)
-#gn    fichier_homard_vers_aster_2_1 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".1")
-#gn    os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_1+"</tmp/donn1")
-#gn    fichier_homard_vers_aster_2_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".2")
-#gn    os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_2+"</tmp/donn2")
-#
 #====================================================================
 # 7. ==> Ecriture de la commande de lecture des resultats med
 #        Remarque :
 #        La fonction self.DeclareOut(a,b) fonctionne ainsi :
 #        a est une chaine de caracteres
 #        b est la variable declaree dans la commande
-#        le but est de associer le contenu de b e la variable locale qui sera designee par a
+#        le but est de associer le contenu de b a la variable locale qui sera designee par a
 #        Exemple :
-#        self.DeclareOut("maillage_a_lire",args["MAILLAGE_NP1"])
-#        ==> la variable maillage_a_lire est identifiee e l'argument "MAILLAGE_NP1"
+#        self.DeclareOut("maillage_a_lire", args["MAILLAGE_NP1"])
+#        ==> la variable maillage_a_lire est identifiee a l'argument "MAILLAGE_NP1"
 #====================================================================
+#gn  print "\.. Debut de 7."
 #
   if ( mode_homard in [ "ADAP", "MODI" ] ) :
 #
@@ -889,7 +941,6 @@ def macr_adap_mail_ops ( self,
     for dico in liste_champs :
       if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
 #gn        print dico
-        self.DeclareOut("champ_maj", dico["CHAM_MAJ"])
         motscsi = {}
         for cle in [ "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
           if dico.has_key(cle) :
@@ -899,11 +950,12 @@ def macr_adap_mail_ops ( self,
           motscsi["NUME_PT"] = dico["NUME_ORDRE"]
 #gn        print "MAILLAGE = ",maillage_np1
 #gn        print "NOM_MAIL_MED = ",maillage_np1_nom_med
-#gn        print "NOM_MED = ",dico["NOM_MED"]
+#gn        print "NOM_CHAM_MED = ",dico["NOM_CHAM_MED"]
 #gn        print "TYPE_CHAM =", dico["TYPE_CHAM"]
+        self.DeclareOut("champ_maj", dico["CHAM_MAJ"])
         champ_maj = LIRE_CHAMP ( UNITE = unite_fichier_homard_vers_aster, FORMAT = "MED",
                                  MAILLAGE = maillage_np1, NOM_MAIL_MED=maillage_np1_nom_med,
-                                 NOM_MED = dico["NOM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
+                                 NOM_MED = dico["NOM_CHAM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
                                  INFO = infocomm, **motscsi )
 #
 #====================================================================
@@ -913,6 +965,7 @@ def macr_adap_mail_ops ( self,
 #    On doit imperativement garder le dernier fichier homard produit
 #    En mode d'information, on garde egalement les fichiers textes
 #====================================================================
+#gn  print "\.. Debut de 8."
 #
   l_aux = [fichier_aster_vers_homard]
   if ( mode_homard in [ "ADAP", "MODI" ] ) :
@@ -927,7 +980,6 @@ def macr_adap_mail_ops ( self,
   if ( mode_homard == "ADAP" ) :
     fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niterp1)
     l_aux_bis.append(fic)
-#gn  os.system("cp " + Rep_Calc_HOMARD_global + "/* $HOME/aster")
 #
   for fic in l_aux :
     if ( INFO >= 3 ) :
@@ -942,12 +994,46 @@ def macr_adap_mail_ops ( self,
           self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
           UTMESS("F", 'HOMARD0_5', valk=fic)
 #
+# Liberation du fichier de ASTER vers HOMARD
+#
+  DEFI_FICHIER ( ACTION= "LIBERER",
+                 UNITE = unite_fichier_aster_vers_homard,
+                 INFO = infocomm )
 #gn  print "Repertoire ",Rep_Calc_HOMARD_global
 #gn  print os.listdir(Rep_Calc_HOMARD_global)
 #gn  print "Repertoire ",Rep_Calc_ASTER
 #gn  print os.listdir(Rep_Calc_ASTER)
 #
 #====================================================================
+# 9. Archivage des repertoires d'adaptation en vue de poursuite
+#====================================================================
+#gn  print "\.. Debut de 9."
+#
+#
+  if ( INFO >= 3 ) : print os.listdir(Rep_Calc_ASTER)
+  if ( INFO >= 3 ) : print "Archivage dans", fichier_archive
+  laux = []
+  for dico in Liste_Passages :
+#   Memorisation du nom du repertoire local pour ce cas d'adaptation
+    Rep_Calc_HOMARD_local  = dico["Rep_Calc_HOMARD_local"]
+    laux.append(Rep_Calc_HOMARD_local)
+#   Memorisation de la liste des passages
+#   Remarque : c'est fait a chaque repertoire pour faciliter le decodage ensuite
+    Rep_Calc_HOMARD_global = dico["Rep_Calc_HOMARD_global"]
+    fic = os.path.join(Rep_Calc_HOMARD_global, "pick.1")
+    file = open(fic, "w")
+    cPickle.dump(Liste_Passages, file)
+    file.close()
+# Si on a au moins un cas d'adaptation, archivage
+  if len(laux) > 0 :
+    file = tarfile.open(fichier_archive, "w")
+    for rep in laux :
+      if ( INFO >= 3 ) : print ".. Insertion de", rep
+      file.add(rep)
+    file.close()
+  if ( INFO >= 3 ) : print os.listdir(Rep_Calc_ASTER)
+#
+#====================================================================
 #  C'est fini !
 #====================================================================
 #
@@ -957,3 +1043,6 @@ def macr_adap_mail_ops ( self,
 #gn  time.sleep(3600)
 #
   return
+
+
+
index 5464de33ca8868b9f8f18d55d1af870f8cdaa17b..d9677c140ac2a80baf8bb541c6635f9f3d1ca3ea 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_ascouf_calc_ops Macro  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+#@ MODIF macr_ascouf_calc_ops Macro  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -21,7 +21,7 @@
 
 def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
                               FOND_FISS,RESU_THER,AFFE_MATERIAU,
-                              PRES_REP,ECHANGE,TORS_P1,COMP_INCR,COMP_ELAS,
+                              PRES_REP,ECHANGE,TORS_P1,COMP_ELAS,
                               SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
                               INCREMENT,THETA_3D,IMPR_TABLE,IMPRESSION,INFO,TITRE ,**args):
   """
@@ -316,11 +316,11 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
   if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
     _chcont = DEFI_CONTACT( MODELE      = modele ,
                             FORMULATION = 'DISCRETE',
-                            TOLE_INTERP = -1.E-6,
                             ZONE =_F(GROUP_MA_MAIT = 'FACE1',
                                      GROUP_MA_ESCL = 'FACE2',
-                                     ALGO_CONT     = 'VERIF',
-                                     GROUP_MA_FOND = 'FONDFISS'),)
+                                     RESOLUTION    = 'NON',
+                                     TOLE_INTERP   = -1.E-6,
+                                     SANS_GROUP_MA = 'FONDFISS'),)
 #
 #     --- commande STAT_NON_LINE ---
 #
@@ -347,10 +347,8 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
     contact = _chcont  
   motscles['EXCIT'] =mcfex
 #
-  mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
-  if COMP_INCR!=None :
-    mcfci.append(_F(TOUT='OUI' ,RELATION=COMP_INCR['RELATION']))
-  elif COMP_ELAS!=None :
+  mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets dans STAT_NON_LINE
+  if COMP_ELAS!=None :
     motscles['COMP_ELAS'] =_F(GROUP_MA='COUDE',RELATION=COMP_ELAS['RELATION'])
     if TORS_P1!=None     : mcfci.append(  _F(GROUP_MA='P1',RELATION='ELAS'))
     if CL_BOL_P2_GV==None: mcfci.append(  _F(GROUP_MA='P2',RELATION='ELAS'))
@@ -403,9 +401,8 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
 #
   nomres = CALC_ELEM( reuse      = nomres,
                       RESULTAT   = nomres ,
-                      MODELE     = modele ,
                       TOUT_ORDRE = 'OUI'  ,
-                      OPTION     = ('SIEF_ELNO_ELGA','EQUI_ELNO_SIGM') ,
+                      OPTION     = ('SIEF_ELNO','SIEQ_ELNO') ,
                       INFO       = INFO   ,)
 #
 #     --- post-traitements ---
@@ -443,7 +440,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
       motscles['ACTION']=[]
       for grno in lgrno :
          motscles['ACTION'].append(_F(RESULTAT=nomres,
-                                      NOM_CHAM='SIEF_ELNO_ELGA',
+                                      NOM_CHAM='SIEF_ELNO',
                                       TOUT_CMP='OUI',
                                       INTITULE=grno,
                                       GROUP_NO=grno,
@@ -459,7 +456,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
       motscles['ACTION']=[]
       for tgrno in lgrno :
          motscles['ACTION'].append(_F(RESULTAT=nomres,
-                                      NOM_CHAM='SIEF_ELNO_ELGA',
+                                      NOM_CHAM='SIEF_ELNO',
                                       INTITULE=tgrno,
                                       GROUP_NO=tgrno,
                                       INVARIANT='OUI',
@@ -497,7 +494,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
                       ANGSEC = atan2(VSIN,VCOS)
                  vecty=(sin(ANGSEC),0.,cos(ANGSEC))
          motscles['ACTION'].append(_F(RESULTAT=nomres,
-                                      NOM_CHAM='SIEF_ELNO_ELGA',
+                                      NOM_CHAM='SIEF_ELNO',
                                       INTITULE=tgrno,
                                       GROUP_NO=tgrno,
                                       NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
@@ -530,7 +527,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
          motscles['ACTION']=[]
          for j in range(8) :
             motscles['ACTION'].append(_F(RESULTAT=nomres,
-                                         NOM_CHAM='SIEF_ELNO_ELGA',
+                                         NOM_CHAM='SIEF_ELNO',
                                          TOUT_CMP='OUI',
                                          INTITULE=LIG[j]+SECT[i],
                                          GROUP_NO=LIG[j]+SECT[i],
@@ -550,7 +547,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
          for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
                                                           GROUP_NO =LIG[j]+SECT[i],
                                                           RESULTAT =nomres,
-                                                          NOM_CHAM ='SIEF_ELNO_ELGA',
+                                                          NOM_CHAM ='SIEF_ELNO',
                                                           INVARIANT='OUI',
                                                           OPERATION='EXTRACTION'))
          secinv[i] = POST_RELEVE_T(**motscles)
@@ -565,7 +562,7 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
                                                           VECT_Y   =vecty,
                                                           GROUP_NO =LIG[j]+SECT[i],
                                                           RESULTAT =nomres,
-                                                          NOM_CHAM ='SIEF_ELNO_ELGA',
+                                                          NOM_CHAM ='SIEF_ELNO',
                                                           NOM_CMP  =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
                                                           OPERATION='MOYENNE'))
          secmoy[i] = POST_RELEVE_T(**motscles)
@@ -722,7 +719,6 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
                                        R_SUP  = thet['R_SUP'],),
                            );
         motscles = {}
-        if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
         _nogthe=CALC_G( RESULTAT   =nomres,
                         OPTION='CALC_G_GLOB',
@@ -733,7 +729,6 @@ def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MA
 #
       for thet in THETA_3D:
         motscles = {}
-        if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
         if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
         if   TYPE_MAILLAGE =='FISS_COUDE' :
                              motscles['LISSAGE']=_F(LISSAGE_THETA='LEGENDRE',
index 86eb0430633bf050128d5f46cb7d6dfa042a440c..d56cc8d63a9b837c910e2f24b923be18a5b60047 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_aspic_calc_ops Macro  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+#@ MODIF macr_aspic_calc_ops Macro  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -21,7 +21,7 @@
 
 def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
                              FOND_FISS_1,FOND_FISS_2,RESU_THER,AFFE_MATERIAU,EQUILIBRE,
-                             PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_INCR,COMP_ELAS,
+                             PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_ELAS,
                              THETA_3D,OPTION,SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
                              INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE,BORNES ,**args):
   """
@@ -303,11 +303,12 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
        mcfond = ('FONDFISS')
        _chcont = DEFI_CONTACT( MODELE      = modele ,
                             FORMULATION = 'DISCRETE',
-                            TOLE_INTERP = -1.E-6,
+                            
                             ZONE =_F(GROUP_MA_MAIT = 'LEVRCORP',
                                      GROUP_MA_ESCL = 'LEVRTUBU',
-                                     ALGO_CONT     = 'VERIF',
-                                     GROUP_MA_FOND = mcfond,),)
+                                     TOLE_INTERP   = -1.E-6,
+                                     RESOLUTION    = 'NON',
+                                     SANS_GROUP_MA = mcfond,),)
 
 #
 #     --- commande STAT_NON_LINE ---
@@ -345,9 +346,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
      
   motscles['EXCIT'] =mcfex
 #
-  mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
-  if COMP_INCR!=None :
-    mcfci.append(_F(TOUT    ='OUI' ,RELATION=COMP_INCR['RELATION']))
+  mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets dans STAT_NON_LINE
   mcfci.append(  _F(GROUP_MA=NOMNOE,RELATION='ELAS'))
   motscles['COMP_INCR'] =mcfci
 #
@@ -404,7 +403,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
   nomres = CALC_ELEM( reuse      = nomres,
                       RESULTAT   = nomres ,
                       TOUT_ORDRE = 'OUI'  ,
-                      OPTION     = ('SIEF_ELNO_ELGA','VARI_ELNO_ELGA','EQUI_ELNO_SIGM') ,
+                      OPTION     = ('SIEF_ELNO','VARI_ELNO','SIEQ_ELNO') ,
                       INFO       = INFO ,)
 #
 #-----------------------------------------------------------------------
@@ -437,7 +436,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
       mcsimp['GROUP_NO' ]='LD'+str(i)
       mcfact.append( _F( RESULTAT   = nomres,
                          TOUT_ORDRE ='OUI',
-                         NOM_CHAM   ='SIEF_ELNO_ELGA',
+                         NOM_CHAM   ='SIEF_ELNO',
                          PRECISION  =55.E-1,
                          TOUT_CMP   ='OUI',
                          OPERATION  ='EXTRACTION',**mcsimp))
@@ -464,7 +463,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
         mcsimp['GROUP_NO'   ]='LD'+str(i)
         mcsimp['RESULTAT'   ]=nomres
         mcsimp['TOUT_ORDRE' ]='OUI'
-        mcsimp['NOM_CHAM'   ]='SIEF_ELNO_ELGA'
+        mcsimp['NOM_CHAM'   ]='SIEF_ELNO'
         mcsimp['PRECISION'  ]=55.E-1
         mcsimp['TOUT_CMP'   ]='OUI'
         mcsimp['OPERATION'  ]='EXTRACTION'
@@ -531,7 +530,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
       mcsimp['GROUP_NO'   ]='LI'+str(i)
       mcsimp['RESULTAT'   ]=nomres
       mcsimp['TOUT_ORDRE' ]='OUI'
-      mcsimp['NOM_CHAM'   ]='SIEF_ELNO_ELGA'
+      mcsimp['NOM_CHAM'   ]='SIEF_ELNO'
       mcsimp['PRECISION'  ]=55.E-1
       mcsimp['TOUT_CMP'   ]='OUI'
       mcsimp['REPERE'     ]='LOCAL'
@@ -554,7 +553,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
         mcsimp['GROUP_NO'   ]='LI'+str(i)
         mcsimp['RESULTAT'   ]=nomres
         mcsimp['TOUT_ORDRE' ]='OUI'
-        mcsimp['NOM_CHAM'   ]='SIEF_ELNO_ELGA'
+        mcsimp['NOM_CHAM'   ]='SIEF_ELNO'
         mcsimp['PRECISION'  ]=55.E-1
         mcsimp['TOUT_CMP'   ]='OUI'
         mcsimp['OPERATION'  ]='EXTRACTION'
@@ -753,7 +752,6 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
           motscles={}
           if COMP_ELAS!=None:  motscles['COMP_ELAS']=  _F(TOUT     = 'OUI',
                                                           RELATION = COMP_ELAS['RELATION'],)
-          if COMP_INCR!=None:  motscles['COMP_INCR']=  _F(RELATION = COMP_INCR['RELATION'],)
           __gtheta = CALC_G ( THETA      = _F(THETA=__theta),
                               OPTION     = 'CALC_G_GLOB',
                               RESULTAT   = nomres,
@@ -782,7 +780,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
 #
 #          --- commande CALC_G (3D LOCAL) ---
 #
-          montit = 'G_LOCAL AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
+          montit = 'G AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
           motscles={}
           if COMP_ELAS!=None:  motscles['COMP_ELAS'    ]=  _F(TOUT     = 'OUI',
                                                               RELATION = COMP_ELAS['RELATION'],)
@@ -833,7 +831,7 @@ def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,C
       if IMPRESSION['NOM_CHAM']!=None :
          if type(IMPRESSION['NOM_CHAM']) in (types.TupleType,types.ListType) : ncham= IMPRESSION['NOM_CHAM']
          else                                                                : ncham=[IMPRESSION['NOM_CHAM'],]
-      if    len(ncham)==3       : motscles['NOM_CHAM'  ]=('DEPL','EQUI_ELNO_SIGM')
+      if    len(ncham)==3       : motscles['NOM_CHAM'  ]=('DEPL','SIEQ_ELNO')
       elif (len(ncham)==1) and (ncham[0][:4]!='TEMP')  :
                                   motscles['NOM_CHAM'  ]= ncham[0]
       elif (len(ncham)==2) and (ncham[0][:4]!='TEMP') and (ncham[1][:4]!='TEMP')  :
index 30fc9ad8273eedd8299247692a5819935f930b13..053d4d0a1f8d653614684fadcb9905a66447f6b5 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_cara_poutre_ops Macro  DATE 30/06/2008   AUTEUR FLEJOU J-L.FLEJOU 
+#@ MODIF macr_cara_poutre_ops Macro  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -316,10 +316,8 @@ def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
 
      __tempe1=CALC_ELEM(reuse=__tempe1,
                        RESULTAT=__tempe1,
-                       MODELE=__nomoth,
-                       CHAM_MATER=__chmath,
                        TOUT_ORDRE='OUI',
-                       OPTION='FLUX_ELNO_TEMP',
+                       OPTION='FLUX_ELNO',
                       )
 
      __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
@@ -329,7 +327,7 @@ def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
      __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
                              CHEMIN=__chem,
                              RESULTAT=__tempe1,
-                             NOM_CHAM='FLUX_ELNO_TEMP',
+                             NOM_CHAM='FLUX_ELNO',
                              TRAC_NOR='OUI',
                              NOM_CMP=('FLUX','FLUY'),
                              OPERATION='MOYENNE'))
@@ -354,7 +352,7 @@ def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
            __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
                                           CHEMIN=__chem,
                                           RESULTAT=__tempe1,
-                                          NOM_CHAM='FLUX_ELNO_TEMP',
+                                          NOM_CHAM='FLUX_ELNO',
                                           TRAC_NOR='OUI',
                                           NOM_CMP=('FLUX','FLUY'),
                                           OPERATION='MOYENNE'))
@@ -763,10 +761,8 @@ def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
 
         __tempe1=CALC_ELEM(reuse=__tempe1,
                             RESULTAT=__tempe1,
-                            MODELE=__nomoth,
-                            CHAM_MATER=__chmath,
                             TOUT_ORDRE='OUI',
-                            OPTION='FLUX_ELNO_TEMP',
+                            OPTION='FLUX_ELNO',
                            )
 
         __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
@@ -776,7 +772,7 @@ def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
         __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
                                        CHEMIN=__chem,
                                        RESULTAT=__tempe1,
-                                       NOM_CHAM='FLUX_ELNO_TEMP',
+                                       NOM_CHAM='FLUX_ELNO',
                                        TRAC_NOR='OUI',
                                        NOM_CMP=('FLUX','FLUY'),
                                        OPERATION='MOYENNE'))
@@ -801,7 +797,7 @@ def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
               __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
                                              CHEMIN=__chem,
                                              RESULTAT=__tempe1,
-                                             NOM_CHAM='FLUX_ELNO_TEMP',
+                                             NOM_CHAM='FLUX_ELNO',
                                              TRAC_NOR='OUI',
                                              NOM_CMP=('FLUX','FLUY'),
                                              OPERATION='MOYENNE'))
index 3f81fc7964206c9e668753d6becc204690c4a59c..581e3dee8f3dad1c8e4767a064d43802bea60ec8 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_ecre_calc_ops Macro  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#@ MODIF macr_ecre_calc_ops Macro  DATE 28/02/2011   AUTEUR BOTTONI M.BOTTONI 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -52,7 +52,8 @@ def macr_ecre_calc_ops(
 
 
   # PARAMETRES DEBUG
-  debug = True
+  debug = False
+  
 
 
 
@@ -554,6 +555,7 @@ Choix des correlations de frottement et de transfert de chaleur
 $V[70]       ifrot : frottement (avec : ifrot=1 ou -1 ; sans :  ifrot=0 )
 $V[71]       cas ifrot=-1 : relim = Re limite
 $V[72]       cas ifrot=-1 : frtlim = coeff frottement si Re > relim
+
 $V[73]       ichal : transfert de chaleur (-2 <= ichal <= 2  ichal=0 ==> Pas d'echange de chaleur)
 $V[74]       cas ichal < 0 : xminch = titre m. gaz avec corr. Chen ou liq pour x<xminch
 $V[75]       cas ichal < 0 : xmaxch = titre m. gaz avec corr. melange pour x>xmaxch
index def648cbbd247e9c8f547d297a8c29ce8f8ff40c..14a6f80bf07709388924088bad64cdbb5d7a7d7b 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_ecrevisse_ops Macro  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#@ MODIF macr_ecrevisse_ops Macro  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -300,11 +300,12 @@ def macr_ecrevisse_ops(self,reuse,
                 CHAM_MATER = CHAM_MATER,
                 EXCIT      = _dEXCIT_THER,
                 INCREMENT  = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
-                ARCHIVAGE  = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+                ARCHIVAGE  = _F(DETR_NUME_SUIV='OUI'),
                 INFO       = InfoAster,
                 **motclefs )
 
               RTHERMPJ=PROJ_CHAMP(RESULTAT=__THINIT, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+                     METHODE='COLLOCATION',
                      VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
                      INFO=2,
                       )
@@ -315,13 +316,14 @@ def macr_ecrevisse_ops(self,reuse,
                CHAM_MATER = CHAM_MATER,
                EXCIT      = _dEXCIT_THER,
                INCREMENT  = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
-               ARCHIVAGE  = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+               ARCHIVAGE  = _F(DETR_NUME_SUIV='OUI'),
                INFO       = InfoAster,
                **motclefs
                )
 
            # Projection du champ thermique, a tous les instants sinon pas de deformations thermiques
               RTHERMPJ=PROJ_CHAMP(RESULTAT=RTHERM, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+                METHODE='COLLOCATION',
                 VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
                 INFO=2,
                  )
@@ -406,7 +408,7 @@ def macr_ecrevisse_ops(self,reuse,
               NEWTON      = _F(**dNEWTON),
               CONVERGENCE = _F(**dCONVERGENCE),
               SOLVEUR     = _F(SYME='OUI'),
-              ARCHIVAGE   = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+              ARCHIVAGE   = _F(DETR_NUME_SUIV='OUI'),
               INFO        = InfoAster,
               **motclefs
            )
index d7e18ab3460bbddaaefa0191c7bffcbc39a3518a..ff38e2dd99baaaea367ab2d28fbacbe55491f6a4 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_lign_coupe_ops Macro  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+#@ MODIF macr_lign_coupe_ops Macro  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -133,7 +133,7 @@ def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma):
        elif dime ==3 :
           LCMP=['DX','DY','DZ']
           TYPE_CHAM='VECT_3D'
-  elif NOM_CHAM in ('SIGM_NOEU_DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):
+  elif NOM_CHAM in ('SIGM_NOEU','SIEF_ELNO','SIGM_NOEU_ELGA','SICO_NOEU','SIGM_ELNO'):
        if dime == 2:
           LCMP=['SIXX','SIYY','SIZZ','SIXY']
           TYPE_CHAM='TENS_2D'
@@ -790,7 +790,9 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
     __mocou=AFFE_MODELE(MAILLAGE=__macou,
                         AFFE=_F(TOUT='OUI',
                                 PHENOMENE='MECANIQUE',
-                                MODELISATION='BARRE',),);
+                                MODELISATION='BARRE',),
+                                PARTITION=_F(PARALLELISME='CENTRALISE'),
+                                );
   elif AsType(RESULTAT).__name__ in ('evol_ther',) :
     __mocou=AFFE_MODELE(MAILLAGE=__macou,
                         AFFE=_F(TOUT='OUI',
@@ -813,7 +815,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
 
   if NOM_CHAM[5:9]=='ELGA' : UTMESS('F','POST0_18',valk=[NOM_CHAM,])
 
-  __recou=PROJ_CHAMP(METHODE='ELEM',
+  __recou=PROJ_CHAMP(METHODE='COLLOCATION',
                      RESULTAT=RESULTAT,
                      MODELE_1=MODELE_1,
                      DISTANCE_MAX=m['DISTANCE_MAX'],
@@ -829,7 +831,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
 
   if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
 
-   if  NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1
+   if  NOM_CHAM in ('DEPL','SIEF_ELNO','SIGM_NOEU','SIGM_NOEU_ELGA','SICO_NOEU','SIGM_ELNO'):icham=1
    iocc=0
    for m in LIGN_COUPE :
 
index 8c9b7d66905fc81de423fc53668edc7f3ce1c449..7c5850d9cb8112fc55d74ab361d53c93c3bdf456 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macr_recal_ops Macro  DATE 26/05/2010   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF macr_recal_ops Macro  DATE 28/03/2011   AUTEUR ASSIRE A.ASSIRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -179,21 +179,17 @@ def macr_recal(self, UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC,
    TOLE_FONC       = args['TOLE_FONC']
 
    # Pour les calculs esclaves
-   CALCUL_ESCLAVE  = {}.fromkeys( ['LANCEMENT', 'MODE', 'MEMOIRE', 'TEMPS', 'CLASSE', 'ACTUALISATION', 'memjeveux_esclave', 'mem_aster', 'NMAX_SIMULT', ] )
+   CALCUL_ESCLAVE  = {}.fromkeys( ['LANCEMENT', 'MODE', 'UNITE_SUIVI', 'CLASSE', 'ACTUALISATION', 'memjeveux', 'memjob', 'mem_aster', 'tpmax', 'tpsjob', 'NMAX_SIMULT', ] )
 
    dESCLAVE=args['CALCUL_ESCLAVE'][0].cree_dict_valeurs(args['CALCUL_ESCLAVE'][0].mc_liste)
    for i in dESCLAVE.keys():
        if dESCLAVE[i]==None : del dESCLAVE[i]
 
    CALCUL_ESCLAVE['LANCEMENT']                                            = dESCLAVE['LANCEMENT']
+   if dESCLAVE.has_key('UNITE_SUIVI'):   CALCUL_ESCLAVE['UNITE_SUIVI']    = dESCLAVE['UNITE_SUIVI']
+   else:                                 CALCUL_ESCLAVE['UNITE_SUIVI']    = None
    if dESCLAVE.has_key('MODE'):          CALCUL_ESCLAVE['MODE']           = dESCLAVE['MODE']
    else:                                 CALCUL_ESCLAVE['MODE']           = prof['mode'][0].upper()
-   if dESCLAVE.has_key('MEMOIRE'):       CALCUL_ESCLAVE['MEMOIRE']        = dESCLAVE['MEMOIRE']
-   else:                                 CALCUL_ESCLAVE['MEMOIRE']        = prof['memjob'][0]
-   if dESCLAVE.has_key('TEMPS'):         CALCUL_ESCLAVE['TEMPS']          = dESCLAVE['TEMPS']
-   else:                                 CALCUL_ESCLAVE['TEMPS']          = prof['tps_job'][0]
-   if dESCLAVE.has_key('CLASSE'):        CALCUL_ESCLAVE['CLASSE']         = dESCLAVE['CLASSE']
-   if dESCLAVE.has_key('ACTUALISATION'): CALCUL_ESCLAVE['ACTUALISATION']  = dESCLAVE['ACTUALISATION']
 
    LANCEMENT = CALCUL_ESCLAVE['LANCEMENT']
 
@@ -214,7 +210,6 @@ def macr_recal(self, UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC,
    if args.has_key('DYNAMIQUE'):         DYNAMIQUE = args['DYNAMIQUE']
    else:                                 DYNAMIQUE = None
 
-
    #_____________________________________________
    #
    # VERIFICATION PREALABLE SUR GNUPLOT
@@ -233,41 +228,72 @@ def macr_recal(self, UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC,
 
    #_____________________________________________
    #
-   # VERIFICATION PREALABLE SUR MEM_ASTER
+   # PARAMETRES DU MODE DISTRIBUTION
    #_____________________________________________
 
    if LANCEMENT == 'DISTRIBUTION':
 
-       # Recuperation des parametres mem_aster et memjeveux
-       try:
-           mem_aster = float(prof['mem_aster'][0])
-       except ValueError:
-           mem_aster = 100.0
-       memjeveux = prof.args.get('memjeveux')
-
-       if mem_aster in (0., 100.):
+       if debug:
+           print prof.param['tpsjob'][0]
+           print prof.args['tpmax']
+           print prof.param['mem_aster'][0]
+           print prof.args['memjeveux']
+           print prof.param['memjob'][0]
+
+       # Pour la conversion mega-mots / mega-octets
+       from asrun.common.sysutils import on_64bits
+       if on_64bits(): facw = 8
+       else:           facw = 4
+
+       # Recuperation du parametre mem_aster
+       try:               mem_aster = int(prof['mem_aster'][0])
+       except ValueError: mem_aster = 100
+       if mem_aster in (0, 100):
            if CALCUL_ESCLAVE['MODE']=='INTERACTIF': UTMESS('A','RECAL0_6')
-           mem_aster = 0.
-       if not memjeveux:
-           UTMESS('F','RECAL0_7')
-    
-       try:
-           if mem_aster == 0.:
-               memjeveux_esclave = float(memjeveux)
-           else:
-               memjeveux_esclave = float(memjeveux) / float(mem_aster) * 100. - float(memjeveux)
-       except:
-           UTMESS('F','RECAL0_8')
-    
-       CALCUL_ESCLAVE['memjeveux_esclave'] = memjeveux_esclave
-       #CALCUL_ESCLAVE['mem_aster'] = mem_aster
-       UTMESS('I','RECAL0_9', valr=memjeveux_esclave)
-
-
+           mem_aster = 100
+       CALCUL_ESCLAVE['mem_aster'] = mem_aster
+
+       # Utilisation du mot-cle TEMPS
+       if dESCLAVE.has_key('TEMPS'):    
+          CALCUL_ESCLAVE['tpsjob'] = int(dESCLAVE['TEMPS']/60)
+          CALCUL_ESCLAVE['tpmax']  = int(dESCLAVE['TEMPS'])
+       else:
+          # Recuperation depuis le calcul maitre
+          CALCUL_ESCLAVE['tpsjob'] = prof.param['tpsjob'][0]
+          CALCUL_ESCLAVE['tpmax']  = prof.args['tpmax']
+
+       # Utilisation du mot-cle MEMOIRE
+       if dESCLAVE.has_key('MEMOIRE'):    
+          CALCUL_ESCLAVE['memjob']    = int(dESCLAVE['MEMOIRE']*1024)
+          # Calcul du parametre memjeveux esclave
+          memjeveux                   = int(dESCLAVE['MEMOIRE']/facw)
+          try:
+             if mem_aster == 100: CALCUL_ESCLAVE['memjeveux'] = memjeveux
+             else:                CALCUL_ESCLAVE['memjeveux'] = float(int( (float(mem_aster) / 100.) * float(memjeveux)))
+          except:
+             UTMESS('F','RECAL0_8')
+       else:
+          # Recuperation depuis le calcul maitre
+          CALCUL_ESCLAVE['memjob']    = int(prof.param['memjob'][0])
+          CALCUL_ESCLAVE['memjeveux'] = prof.args['memjeveux']
+
+       # Parametres batch
        if CALCUL_ESCLAVE['MODE']=='BATCH':
+           if dESCLAVE.has_key('CLASSE'):        CALCUL_ESCLAVE['CLASSE']         = dESCLAVE['CLASSE']
+           if dESCLAVE.has_key('ACTUALISATION'): CALCUL_ESCLAVE['ACTUALISATION']  = dESCLAVE['ACTUALISATION']
+
+           # Affichage parametres batch
            if CALCUL_ESCLAVE['CLASSE']: classe = CALCUL_ESCLAVE['CLASSE']
            else:                        classe = ' -auto- '
-           UTMESS('I','RECAL0_69', valk=( str(CALCUL_ESCLAVE['TEMPS']), str(CALCUL_ESCLAVE['MEMOIRE']), classe ) )
+           UTMESS('I','RECAL0_69', valk=( str(CALCUL_ESCLAVE['tpmax']), str(int(CALCUL_ESCLAVE['memjob'])/1024), str(int(float(CALCUL_ESCLAVE['memjeveux'])*facw)), classe ) )
+
+   #_____________________________________________
+   #
+   # VERIFICATIONS
+   #_____________________________________________
+
+   if float(PARA_DIFF_FINI) > 0.1:
+      UTMESS('A','RECAL0_76', valk=( str(PARA_DIFF_FINI) ) )
 
 
    #_____________________________________________
@@ -343,6 +369,8 @@ def macr_recal(self, UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC,
    CALCUL_ASTER.RESU_CALC = RESU_CALC
    CALCUL_ASTER.LIST_PARA = LIST_PARA
 
+   if CALCUL_ESCLAVE['UNITE_SUIVI']: CALCUL_ASTER.unity_follow = CALCUL_ESCLAVE['UNITE_SUIVI']
+
 
    # Instances des classes pour le calcul de l'erreur et le dimensionnemnt/adim
    Dim                    = reca_algo.Dimension(copy.copy(val_init))
index 44fb67d6094e35d827db551a630889c391c0eda6..aec953a2ae73080b5bf4de73ac4d07426e96a751 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_spectre_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macr_spectre_ops Macro  DATE 22/11/2010   AUTEUR GREFFET N.GREFFET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -109,8 +109,8 @@ def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None
                   ### Récupération des fonctions
                   motscles={}
                   if resu['RESU_GENE']!=None :
-                     if CALCUL=='ABSOLU' :
-                        UTMESS('F','SPECTRAL0_8')
+                     #if CALCUL=='ABSOLU' :
+                     #   UTMESS('F','SPECTRAL0_8')
                      motscles['RESU_GENE'] = resu['RESU_GENE']
 
                   if resu['RESULTAT' ]!=None :
index 6e05cae277be284087db4646e353c10960b5ad34..719b42d848cd9fbe0b9f64db8785736d747c78ab 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macro_elas_mult_ops Macro  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macro_elas_mult_ops Macro  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -219,8 +219,8 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
            liste_option=m['OPTION']
         for option in liste_option :
            if option in (     'FORC_NODA','REAC_NODA',
-                              'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
-                              'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI',):
+                              'EPSI_NOEU','SIGM_NOEU','EFGE_NOEU',
+                              'SIEQ_NOEU','EPEQ_NOEU',):
               nbno=nbno+1
               liste_no.append(option)
            else:
index 44f99c68a2c86d78974dcc610583e5b36d892c92..63b4dd73edf9b8121f18ac95215c4c3096a107e2 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macro_expans_ops Macro  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+#@ MODIF macro_expans_ops Macro  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -30,7 +30,7 @@ def macro_expans_ops( self,
                       MODES_NUM=None,
                       MODES_EXP=None,
                       RESOLUTION=None,
-                      *args
+                      **args
                      ):
     """!macro MACRO_EXPANS """
     from Accas import _F
@@ -47,6 +47,13 @@ def macro_expans_ops( self,
     NORM_MODE = self.get_cmd('NORM_MODE')
 
 
+    RESU_NUM = MODELE_CALCUL['BASE']
+    RESU_EXP = MODELE_MESURE['MESURE']
+    MOD_CALCUL = MODELE_CALCUL['MODELE']
+    MOD_MESURE = MODELE_MESURE['MODELE']
+    NOM_CHAM = MODELE_MESURE['NOM_CHAM']
+
+
     # La macro compte pour 1 dans la numerotation des commandes
     self.set_icmd(1)
 
@@ -56,20 +63,18 @@ def macro_expans_ops( self,
         is_nume_num = 1
     else:
         if RESU_NX:
-            UTMESS('A','MEIDEE0_6',valk=['MODELE_MESURE','RESU_EX'])
+            UTMESS('A','CALCESSAI0_6',valk=['MODELE_MESURE','RESU_EX'])
+
     if MODELE_MESURE['NUME_MODE'] or  MODELE_MESURE['NUME_ORDRE']:
         # On cree un RESU_EX par extraction de NUME_ORDREs
         is_nume_exp = 1
+        if isinstance(RESU_NUM,dyna_harmo):
+            # on ne peut pas faire de EXTR_MODE  sur un DYNA_HARMO
+            is_nume_exp = 0
+            UTMESS('A','CALCESSAI0_13')
     else:
-        if RESU_EX: UTMESS('A','MEIDEE0_6',valk=['MODELE_CALCUL','RESU_NX'])
+        if RESU_EX: UTMESS('A','CALCESSAI0_6',valk=['MODELE_CALCUL','RESU_NX'])
 
-    RESU_NUM = MODELE_CALCUL['BASE']
-    RESU_EXP = MODELE_MESURE['MESURE']
-
-    MOD_CALCUL = MODELE_CALCUL['MODELE']
-    MOD_MESURE = MODELE_MESURE['MODELE']
-
-    NOM_CHAM = MODELE_MESURE['NOM_CHAM']
 
     # Extraction des modes numériques
     # -------------------------------
@@ -133,7 +138,7 @@ def macro_expans_ops( self,
     else:
         paras = None
         #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
-        UTMESS('A','MEIDEE0_1')
+        UTMESS('A','CALCESSAI0_1')
 
 
     try:
@@ -167,15 +172,16 @@ def macro_expans_ops( self,
         self.DeclareOut( "RESU_RD", RESU_RD )
 
     nume=None
-    if resu_ex.REFD.get():
-        tmp = resu_ex.REFD.get()[3]
-        if tmp.strip() :
-            nume = self.get_concept(tmp)
-    elif NUME_DDL:
+    if NUME_DDL:
         nume = NUME_DDL
     if not nume :
-        UTMESS('A','MEIDEE0_5')
-    RESU_RD = PROJ_CHAMP( METHODE    = 'ELEM',
+        if resu_ex.REFD.get():
+            tmp = resu_ex.REFD.get()[3]
+            if tmp.strip() :
+                nume = self.get_concept(tmp)
+        else:
+            UTMESS('A','CALCESSAI0_5')
+    RESU_RD = PROJ_CHAMP( METHODE    = 'COLLOCATION',
                           RESULTAT   = RESU_ET,
                           MODELE_1   = MOD_CALCUL,
                           MODELE_2   = MOD_MESURE,
index c86c277515be8e50db310bdeb7d396fc7bf0e8a9..91da1619f625a47bf05290f1576bad8e74383a60 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF macro_miss_3d_ops Macro  DATE 16/02/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macro_miss_3d_ops Macro  DATE 14/03/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -28,8 +28,9 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
      Ecriture de la macro MACRO_MISS_3D
   """
   import types
+  import aster
   from Accas import _F
-  from Utilitai.Utmess        import UTMESS, MessageError
+  from Utilitai.Utmess        import UTMESS
   from Utilitai.Table         import Table
   from Miss.miss_fichier_sol  import fichier_sol
 
@@ -73,7 +74,17 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
       MODUL2='MISS_PTAS'
   elif OPTION['MODULE']=='PRE_MISS':
       MODUL2='GTASTER'
-      
+
+  alarm16 = False
+  typ15 = 'A'
+  if OPTION['MODULE'] == 'MISS_IMPE' \
+     and PARAMETRE != None and PARAMETRE['ISSF'] == 'NON':
+         alarm16 = True
+         typ15 = 'A+'
+
+  UTMESS(typ15, 'MISS0_15')
+  if alarm16:
+     UTMESS('A', 'MISS0_16')
 
   ETUDE = PROJET
   BASE  = REPERTOIRE
@@ -88,7 +99,7 @@ def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
     tabsol = TABLE_SOL.EXTR_TABLE()
     try:
         texte = fichier_sol(tabsol)
-    except MessageError, err:
+    except aster.error, err:
         UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
     fdsol=open(pdsol,'w')
     fdsol.write(texte)
index 6da742fbf39519d067d1cafb1f1da216ac08c9ce..4d4ae7cbbdf0267ce71854b864280a942adefac4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_mode_meca_ops Macro  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF macro_mode_meca_ops Macro  DATE 13/10/2010   AUTEUR BOITEAU O.BOITEAU 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -65,7 +65,6 @@ def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
         motscfa['FREQ']=(lborne[i],lborne[i+1])
      motscit['CALC_FREQ']=_F(OPTION          ='BANDE',
                              SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
-                             NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
                              NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
                              PREC_SHIFT      =CALC_FREQ['PREC_SHIFT'],
                              **motscfa)
index 06c667451ae1298999602edb2fd4117b470711fd..cc924ff9f2e344687c85332d89c31222283781d5 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF observation_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF observation_ops Macro  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
 # ======================================================================
 
 
-
-
+# RESPONSABLE BODEL C.BODEL
 
 def observation_ops(self,
                     PROJECTION   = None,
                     MODELE_1     = None,
                     MODELE_2     = None,
                     RESULTAT     = None,
-                    NUME_DDL     = None,
+                    MATR_A       = None,
+                    MATR_B       = None,
                     MODI_REPERE  = None,
                     NOM_CHAM     = None,
                     FILTRE       = None,
@@ -50,9 +50,7 @@ def observation_ops(self,
     # importation de commandes
     import aster
     from Accas import _F
-    from Utilitai.UniteAster import UniteAster
     from Utilitai.Utmess     import UTMESS
-    from Utilitai.Table      import Table
     from Cata.cata import mode_meca, dyna_harmo, evol_elas,dyna_trans
     MODI_REPERE = self.get_cmd('MODI_REPERE')
     PROJ_CHAMP  = self.get_cmd('PROJ_CHAMP')
@@ -65,18 +63,11 @@ def observation_ops(self,
     # ne sert pas par la suite
     mcfact = args
 
-    if NOM_CHAM == 'DEPL':
-      if isinstance( RESULTAT, dyna_harmo):
-        TYPE_CHAM = 'NOEU_DEPL_C'
-      else:
-        TYPE_CHAM = 'NOEU_DEPL_R'
-    elif NOM_CHAM == 'EPSI_NOEU_DEPL':
-      if isinstance( RESULTAT, dyna_harmo):
-        TYPE_CHAM  = 'NOEU_EPSI_C'
-      else:
-        TYPE_CHAM  = 'NOEU_EPSI_R'
-    else:
-        UTMESS('F','ELEMENTS4_48',valk=[NOM_CHAM])
+    if not isinstance(NOM_CHAM,tuple):
+        NOM_CHAM = [NOM_CHAM]
+
+    TYPE_CHAM = None
+    RESU = None
 
     if isinstance( RESULTAT, evol_elas): TYPE_RESU='EVOL_ELAS'
     if isinstance( RESULTAT, dyna_trans): TYPE_RESU='DYNA_TRANS'
@@ -84,7 +75,6 @@ def observation_ops(self,
     if isinstance( RESULTAT, mode_meca): TYPE_RESU='MODE_MECA'
 
     self.DeclareOut( 'RESU', self.sd)
-    jdc = CONTEXT.get_current_step().jdc
 
     # recuperation du maillage associe au modele numerique
     _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE    .LGRF' )
@@ -123,34 +113,48 @@ def observation_ops(self,
 
     # afreq pour les frequences propres
     if isinstance( RESULTAT, mode_meca):
+        # frequences propres
         from Cata.cata import RECU_TABLE
         __freq  = RECU_TABLE(CO=RESULTAT,
                              NOM_PARA='FREQ',);
         afreq  = __freq.EXTR_TABLE().Array('NUME_ORDRE','FREQ')
+        # noms des matrices
+        if MATR_A !=None or MATR_B !=None:
+            # recherche du nume_ddl associe
+            iret,ibid,nom_nume_ddl = aster.dismoi('F','NOM_NUME_DDL',MATR_A.nom,'MATR_ASSE')
+            NUME_DDL = self.get_concept(nom_nume_ddl)
+            # coherence avec le nom associe a MODELE_2 :
+            iret,ibid,nom_modele = aster.dismoi('F','NOM_MODELE',nom_nume_ddl,'NUME_DDL')
+            if nom_modele.strip() != MODELE_2.nom.strip():
+                UTMESS('F','CALCESSAI0_10')
+        else:
+            UTMESS('A','CALCESSAI0_9')
+            NUME_DDL = None
+
     else:
         afreq = None
+        NUME_DDL = None
 
-    nume_ordr_demande = mcfact['NUME_ORDRE']
-    if type(nume_ordr_demande) != tuple :
-        nume_ordr_demande = [nume_ordr_demande]
-
-    num_max = len(RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE'])
+    indice = range(len(RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE']))
 
 #***********************************************
 #  PHASE DE CALCUL DE LA DEFORMATION MOYENNE AUX NOEUDS
 #  CHAMP CALCULE SUR LE MODELE NUMERIQUE
 #***********************************************
 
+    resu_epsi = None
     if EPSI_MOYENNE != None :
+      for nomcham in NOM_CHAM:
+        if nomcham == 'EPSI_NOEU':
+          if isinstance( RESULTAT, dyna_harmo):
+            TYPE_CHAM  = 'NOEU_EPSI_C'
+          else:
+            TYPE_CHAM  = 'NOEU_EPSI_R'
 
-      if NOM_CHAM != 'EPSI_NOEU_DEPL':
-            __proj= RESULTAT
-            UTMESS('F','UTILITAI8_24',valk=['NOEU_EPSI',NOM_CHAM])
+      if TYPE_CHAM == None:
+            UTMESS('F', 'UTILITAI8_24', valk = ['NOEU_EPSI', nomcham])
       else:
-        if nume_ordr_demande[0]:
-            num_ordr = nume_ordr_demande
-        else:
-            num_ordr = RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE']
+        num_ordr = RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE']
 
         if isinstance( RESULTAT, evol_elas):
             list_inst = RESULTAT.LIST_VARI_ACCES()['INST']
@@ -202,34 +206,34 @@ def observation_ops(self,
 
             if TYPE_CHAM[-1:] == 'C':
               mcfactr = { 'NOM_CMP'   : nom_cmps,
-                         'OPERATION' : 'EXTRACTION',
-                         'INTITULE' : str('R'+str(nb_mcfact)),
-                         'FORMAT_C' : 'REEL',
-                         'NOEUD' : l_noeud,
-                        'NOM_CHAM'  : 'EPSI_NOEU_DEPL',
-                        'RESULTAT'  : RESULTAT,
-                        'NUME_ORDRE'  : num_ordr,
-                       }
+                          'OPERATION' : 'EXTRACTION',
+                          'INTITULE' : str('R'+str(nb_mcfact)),
+                          'FORMAT_C' : 'REEL',
+                          'NOEUD' : l_noeud,
+                          'NOM_CHAM'  : 'EPSI_NOEU',
+                          'RESULTAT'  : RESULTAT,
+                          'NUME_ORDRE'  : num_ordr,
+                        }
               argsi['ACTION'].append(mcfactr)
               mcfacti = { 'NOM_CMP'   : nom_cmps,
-                         'OPERATION' : 'EXTRACTION',
-                         'INTITULE' : str('I'+str(nb_mcfact)),
-                         'FORMAT_C' : 'IMAG',
-                         'NOEUD' : l_noeud,
-                        'NOM_CHAM'  : 'EPSI_NOEU_DEPL',
-                        'RESULTAT'  : RESULTAT,
-                        'NUME_ORDRE'  : num_ordr,
-                       }
+                          'OPERATION' : 'EXTRACTION',
+                          'INTITULE' : str('I'+str(nb_mcfact)),
+                          'FORMAT_C' : 'IMAG',
+                          'NOEUD' : l_noeud,
+                          'NOM_CHAM'  : 'EPSI_NOEU',
+                          'RESULTAT'  : RESULTAT,
+                          'NUME_ORDRE'  : num_ordr,
+                         }
               argsi['ACTION'].append(mcfacti)
             else:
               mcfactr = { 'NOM_CMP'   : nom_cmps,
-                         'OPERATION' : 'EXTRACTION',
-                         'INTITULE' : str(nb_mcfact),
-                         'NOEUD' : l_noeud,
-                        'NOM_CHAM'  : 'EPSI_NOEU_DEPL',
-                        'RESULTAT'  : RESULTAT,
-                        'NUME_ORDRE'  : num_ordr,
-                       }
+                          'OPERATION' : 'EXTRACTION',
+                          'INTITULE' : str(nb_mcfact),
+                          'NOEUD' : l_noeud,
+                          'NOM_CHAM'  : 'EPSI_NOEU',
+                          'RESULTAT'  : RESULTAT,
+                          'NUME_ORDRE'  : num_ordr,
+                         }
               argsi['ACTION'].append(mcfactr)
 
         _tepsi=POST_RELEVE_T(
@@ -240,8 +244,8 @@ def observation_ops(self,
         DETRUIRE( CONCEPT= _F( NOM = _tepsi ), INFO=1)
 
         mcfact2 = { }
-        __chame = [None]*num_max
-        for ind in num_ordr:
+        __chame = [None]*len(indice)
+        for ind in indice:
          argsa = {'AFFE' : [], }
          for mcfacta in range(nb_mcfact):
           l_noeud_mcfact = lnoeuds[str(mcfacta+1)]
@@ -259,17 +263,17 @@ def observation_ops(self,
            for row in table.rows:
             if TYPE_CHAM[-1:] == 'C':
              if row['INTITULE'].strip() == str('R'+str(mcfacta+1))   \
-                      and row['NUME_ORDRE'] == ind :
+                      and row['NUME_ORDRE'] == num_ordr[ind] :
                 l_valr.append(row[cmp])
                 lur = 1
              elif row['INTITULE'].strip() == str('I'+str(mcfacta+1))   \
-                      and row['NUME_ORDRE'] == ind :
+                      and row['NUME_ORDRE'] == num_ordr[ind] :
                 l_vali.append(row[cmp])
                 lui = 1
-                  
+
             else:
              if row['INTITULE'].strip() == str(mcfacta+1)   \
-                      and row['NUME_ORDRE'] == ind: 
+                      and row['NUME_ORDRE'] == num_ordr[ind]:
                   l_val.append(row[cmp])
 
            if TYPE_CHAM[-1:] == 'C':
@@ -288,8 +292,8 @@ def observation_ops(self,
              vmoyer = sum(l_valr)/len(l_valr)
              vmoyei = sum(l_vali)/len(l_vali)
              vmoye = sum(l_valc)/len(l_valc)
-             vminr = min(l_valr)  
-             vmini = min(l_vali)  
+             vminr = min(l_valr)
+             vmini = min(l_vali)
              vmaxr = max(l_valr)
              vmaxi = max(l_vali)
              if vmoyer > 0:
@@ -324,10 +328,10 @@ def observation_ops(self,
              if cmp_vari not in masque_mc:
               if cmp == cmp_vari and not vu:
                 if EPSI_MOYENNE[mcfacta]['MAILLE'] != None:
-                  entite = str('MAILLE : '+str(PSI_MOYENNE[mcfacta]['MAILLE']))
+                  entite = str('MAILLE : '+str(EPSI_MOYENNE[mcfacta]['MAILLE']))
                 if EPSI_MOYENNE[mcfacta]['GROUP_MA'] != None:
                   entite = str('GROUP_MA : '+str(EPSI_MOYENNE[mcfacta]['GROUP_MA']))
-                UTMESS('A','OBSERVATION_8',vali=[ind],valr=[seuil_mc],valk=[entite,cmp])
+                UTMESS('A','OBSERVATION_8',vali=[num_ordr[ind]],valr=[seuil_mc],valk=[entite,cmp])
                 vu = 1
 
 
@@ -344,38 +348,38 @@ def observation_ops(self,
 
           argsa['AFFE'].append(mcfactc)
 
-         __chame[ind-1] = CREA_CHAMP( OPERATION  = 'AFFE',
+         __chame[ind] = CREA_CHAMP( OPERATION  = 'AFFE',
                           MODELE = MODELE_1,
                           PROL_ZERO = 'OUI',
-                          TYPE_CHAM  = TYPE_CHAM, 
-                          OPTION   = NOM_CHAM,
+                          TYPE_CHAM  = TYPE_CHAM,
+                          OPTION   = 'EPSI_NOEU',
                           **argsa
                           );
 
          if isinstance( RESULTAT, mode_meca):
-                  mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                  mcfact2 = {'CHAM_GD'    : __chame[ind],
                        'MODELE'     : MODELE_1,
-                       'NUME_MODE'    : int(afreq[ind-1,0]),
-                       'FREQ'    : afreq[ind-1,1],
+                       'NUME_MODE'    : int(afreq[ind,0]),
+                       'FREQ'    : afreq[ind,1],
                        }
 
          if isinstance( RESULTAT, evol_elas):
-                    mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                    mcfact2 = {'CHAM_GD'    : __chame[ind],
                        'MODELE'     : MODELE_1,
-                       'INST'    : list_inst[ind-1],
+                       'INST'    : list_inst[ind],
                        }
 
          if isinstance( RESULTAT, dyna_trans):
-                    mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                    mcfact2 = {'CHAM_GD'    : __chame[ind],
                        'MODELE'     : MODELE_1,
                        'INST'    : list_inst[ind],
                        }
 
          if isinstance( RESULTAT, dyna_harmo):
-                mcfact2 = {'CHAM_GD'    : __chame[ind-1],
-                       'MODELE'     : MODELE_1,
-                       'FREQ'    : list_freq[ind-1],
-                       }
+                mcfact2 = {'CHAM_GD'    : __chame[ind],
+                           'MODELE'     : MODELE_1,
+                           'FREQ'    : list_freq[ind],
+                          }
 
          if cham_mater is not None:
                     mcfact2['CHAM_MATER'] = cham_mater
@@ -384,32 +388,62 @@ def observation_ops(self,
 
          liste.append(mcfact2)
 
-        __proj = CREA_RESU(
+        resu_epsi = 'EPSI_NOEU'
+        RESU = CREA_RESU(
                               OPERATION = 'AFFE',
                               TYPE_RESU = TYPE_RESU,
-                              NOM_CHAM  = NOM_CHAM,
+                              NOM_CHAM  = 'EPSI_NOEU',
                               AFFE      = liste,
                              );
-    else:
-        __proj= RESULTAT
 
 
+#***********************************************
+#  BOUCLE SUR LES NOM_CHAM
+#***********************************************
+
+    for nomcham in NOM_CHAM:
+
+     if nomcham == 'DEPL' or nomcham == 'VITE' or nomcham == 'ACCE':
+             if isinstance( RESULTAT, dyna_harmo):
+                  TYPE_CHAM = 'NOEU_DEPL_C'
+             else:
+                  TYPE_CHAM = 'NOEU_DEPL_R'
+     elif nomcham == 'EPSI_NOEU':
+             if isinstance( RESULTAT, dyna_harmo):
+               TYPE_CHAM  = 'NOEU_EPSI_C'
+             else:
+               TYPE_CHAM  = 'NOEU_EPSI_R'
+     else:
+               UTMESS('F', 'ELEMENTS4_48', valk = [nomcham])
+
 #***********************************************
 #  PHASE DE PROJECTION
 #***********************************************
 
-    if PROJECTION == 'OUI':
-        __proj=PROJ_CHAMP(RESULTAT = __proj,
+     if PROJECTION == 'OUI':
+      if resu_epsi and nomcham == 'EPSI_NOEU':
+        __proj = PROJ_CHAMP(METHODE='COLLOCATION',
+                          RESULTAT = RESU,
                           MODELE_1 = MODELE_1,
                           MODELE_2 = MODELE_2,
-                          NUME_DDL = NUME_DDL,
-                          NOM_CHAM = NOM_CHAM,
+                          NOM_CHAM = nomcham,
                           **mcfact
-                         );
-
-        modele = MODELE_2
-    else:
-        modele = MODELE_1
+                         )
+      else:
+        __proj = PROJ_CHAMP(METHODE = 'COLLOCATION',
+                          RESULTAT = RESULTAT,
+                          MODELE_1 = MODELE_1,
+                          MODELE_2 = MODELE_2,
+                          NOM_CHAM = nomcham,
+                          **mcfact
+                         )
+      modele = MODELE_2
+     else:
+      if resu_epsi and nomcham == 'EPSI_NOEU':
+        __proj = RESU
+      else:
+        __proj = RESULTAT
+      modele = MODELE_1
 
 
 #***********************************************
@@ -432,26 +466,27 @@ def observation_ops(self,
 #                    )
 
 
-    if MODIF_REPERE != None :
-        if nume_ordr_demande[0]:
-            num_ordr = nume_ordr_demande
-        else:
-            num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+     if MODIF_REPERE != None :
+        num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
 
         for modif_rep in MODIF_REPERE :
-            type_cham = modif_rep['TYPE_CHAM']
-            if type_cham == 'TENS_2D':
-                nom_cmp = ['EPXX','EPYY','EPZZ','EPXY',]
-            elif type_cham == 'TENS_3D':
-                nom_cmp = ['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',]
-            else:
-                nom_cmp = modif_rep['NOM_CMP']
+          modi_rep = modif_rep.val
+          type_cham = modif_rep['TYPE_CHAM']
+          nom_cmp = modif_rep['NOM_CMP']
+
+          if type_cham == 'TENS_2D':
+                nomchamx = 'EPSI_NOEU'
+          elif type_cham == 'TENS_3D':
+                nomchamx = 'EPSI_NOEU'
+          else:
+                nomchamx = 'DEPL'
+
+          if nomcham == nomchamx:
             mcfact1 = { 'NOM_CMP'   : nom_cmp,
                         'TYPE_CHAM' : type_cham,
-                        'NOM_CHAM'  : NOM_CHAM }
+                        'NOM_CHAM'  : nomcham }
 
             mcfact2 = { }
-            modi_rep = modif_rep.val
 
             if modi_rep['REPERE'] == 'DIR_JAUGE' :
                 vect_x = None
@@ -462,7 +497,6 @@ def observation_ops(self,
                     vect_y = modi_rep['VECT_Y']
 
                 # il faut des mailles pour les tenseurs d'ordre 2
-                taille = 0
                 for typ in ['MAILLE','GROUP_MA',]:
                   if modi_rep.has_key(typ) :
                     if PROJECTION == 'OUI':
@@ -470,7 +504,6 @@ def observation_ops(self,
                     else:
                       maya = mayanum
                     list_ma = find_ma(maya, {typ : modi_rep[typ]})
-                taille = len(list_ma)
 
                 mcfact1.update({ 'MAILLE'    : list_ma })
                 angl_naut = crea_repere_xy(vect_x, vect_y)
@@ -478,12 +511,14 @@ def observation_ops(self,
                 mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
                                  'ANGL_NAUT' : angl_naut })
 
-                args = {'MODI_CHAM'   : mcfact1,
+                argsm = {'MODI_CHAM'   : mcfact1,
                         'DEFI_REPERE' : mcfact2 }
 
-                __proj = MODI_REPERE( RESULTAT    = __proj,
-                                      NUME_ORDRE  = num_ordr, 
-                                      **args)
+                __bidon = MODI_REPERE( RESULTAT    = __proj,
+                                      NUME_ORDRE  = num_ordr,
+                                      **argsm)
+                DETRUIRE( CONCEPT= _F( NOM = __proj ), INFO=1)
+                __proj = __bidon
 
             if modi_rep['REPERE'] == 'NORMALE' :
                 # Cas ou l'utilisateur choisit de creer les reperes locaux
@@ -496,7 +531,7 @@ def observation_ops(self,
                     UTMESS('E','UTILITAI7_9')
 
                 chnorm = crea_normale(self, MODELE_1, MODELE_2, NUME_DDL,
-                                                      cham_mater, cara_elem)
+                                      cham_mater, cara_elem)
                 modele = MODELE_2
                 chnormx = chnorm.EXTR_COMP('DX',[],1)
                 ind_noeuds = chnormx.noeud
@@ -519,12 +554,12 @@ def observation_ops(self,
                     mcfact1.update({ 'NOEUD'     : nomnoe })
                     mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
                                      'ANGL_NAUT' : angl_naut})
-                    args = {'MODI_CHAM'   : mcfact1,
+                    argsm = {'MODI_CHAM'   : mcfact1,
                             'DEFI_REPERE' : mcfact2 }
                     __bid[k+1] = MODI_REPERE( RESULTAT    = __bid[k],
                                               TOUT_ORDRE  = 'OUI',
                                               CRITERE     = 'RELATIF',
-                                              **args)
+                                              **argsm)
                     k = k + 1
 
                 __proj = __bid[-1:][0]
@@ -553,12 +588,12 @@ def observation_ops(self,
                     mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
                                      'ANGL_NAUT' : angl_naut })
 
-              args = {'MODI_CHAM'   : mcfact1,
-                        'DEFI_REPERE' : mcfact2 }
+              argsm = {'MODI_CHAM'   : mcfact1,
+                      'DEFI_REPERE' : mcfact2 }
 
               __bidon = MODI_REPERE( RESULTAT    = __proj,
                                      CRITERE     = 'RELATIF',
-                                     **args)
+                                     **argsm)
               DETRUIRE( CONCEPT= _F( NOM = __proj ), INFO=1)
               __proj = __bidon
 
@@ -567,199 +602,157 @@ def observation_ops(self,
 # Phase de selection des DDL de mesure
 #*************************************************
 
-    if FILTRE != None:
-        if nume_ordr_demande[0]:
-            num_ordr = nume_ordr_demande
-        else:
-            num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+     resu_filtre = None
+     if FILTRE != None:
+         num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
 
-        __chamf = [None]*num_max
-        if isinstance( RESULTAT, evol_elas):
-            list_inst_ini = RESULTAT.LIST_VARI_ACCES()['INST']
-        if isinstance( RESULTAT, dyna_trans):
-            list_inst_ini = RESULTAT.LIST_VARI_ACCES()['INST']
-        if isinstance( RESULTAT, dyna_harmo):
-            list_freq_ini = RESULTAT.LIST_VARI_ACCES()['FREQ']
+         __chamf = [None]*len(indice)
+         if isinstance( RESULTAT, evol_elas):
+            list_inst = __proj.LIST_VARI_ACCES()['INST']
+         if isinstance( RESULTAT, dyna_trans):
+            list_inst = __proj.LIST_VARI_ACCES()['INST']
+         if isinstance( RESULTAT, dyna_harmo):
+            list_freq = __proj.LIST_VARI_ACCES()['FREQ']
 
-        liste = []
 
-        for ind in num_ordr:
-            mcfact2 = { }
-            filtres = []
-            __chamex = CREA_CHAMP(TYPE_CHAM  = TYPE_CHAM,
+         liste = []
+
+         for ind in indice:
+             mcfact2 = { }
+             filtres = []
+             __chamex = CREA_CHAMP(TYPE_CHAM  = TYPE_CHAM,
                                   OPERATION  = 'EXTR',
                                   RESULTAT   = __proj,
-                                  NOM_CHAM   = NOM_CHAM,
-                                  NUME_ORDRE = ind,);
+                                  NOM_CHAM   = nomcham,
+                                  NUME_ORDRE = num_ordr[ind],);
+
+             for mcfiltre in FILTRE :
+              filtre = mcfiltre.val
+              try:
+                nomchamx = filtre['NOM_CHAM']
+              except KeyError:
+                nomchamx = None
+
+              if nomchamx == None or nomchamx == nomcham:
 
-            for mcfiltre in FILTRE :
                 mcfact1 = {}
-                filtre = mcfiltre.val
-                for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+
+                atraiter = None
+                if filtre['DDL_ACTIF'][0][0] == 'E' and nomcham == 'EPSI_NOEU':
+                   atraiter = nomcham
+                elif filtre['DDL_ACTIF'][0][0] == 'D' and nomcham == 'DEPL':
+                   atraiter = nomcham
+                elif filtre['DDL_ACTIF'][0][0] == 'D' and nomcham == 'VITE':
+                   atraiter = nomcham
+                elif filtre['DDL_ACTIF'][0][0] == 'D' and nomcham == 'ACCE':
+                   atraiter = nomcham
+
+                if atraiter:
+                 for typ in ['NOEUD', 'GROUP_NO', 'MAILLE', 'GROUP_MA']:
                     if filtre.has_key(typ) :
                         mcfact1.update({typ : filtre[typ]})
-                mcfact1.update({'NOM_CMP' : filtre['DDL_ACTIF'],
+                 mcfact1.update({'NOM_CMP' : filtre['DDL_ACTIF'],
                                 'CHAM_GD' : __chamex })
-                filtres.append(mcfact1)
+                 filtres.append(mcfact1)
 
-            if NOM_CHAM == 'DEPL':
-                __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+             if len(filtres) > 0:
+              if nomcham == 'DEPL' or nomcham == 'VITE' or nomcham == 'ACCE':
+                __chamf[ind] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
                                        OPERATION = 'ASSE',
                                        MODELE    = modele,
                                        ASSE      = filtres
                                        );
 
-            elif NOM_CHAM == 'EPSI_NOEU_DEPL':
-                __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+              elif nomcham == 'EPSI_NOEU':
+                __chamf[ind] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
                                        OPERATION = 'ASSE',
                                        PROL_ZERO = 'OUI',
                                        MODELE    = modele,
                                        ASSE      = filtres,
                                        );
-
-            else:
+              else:
                 valk = []
-                valk.append(NOM_CHAM)
-                valk.append('DEPL')
-                valk.append('EPSI_NOEU_DEPL')
-                UTMESS('F','OBSERVATION_6',valk) 
-
-            if isinstance( RESULTAT, mode_meca):
-                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
-                       'MODELE'     : modele,
-                       'NUME_MODE'    : int(afreq[ind-1,0]),
-                       'FREQ'    : afreq[ind-1,1],
+                valk.append(nomcham)
+                valk.append('DEPL VITE ACCE')
+                valk.append('EPSI_NOEU')
+                UTMESS('F','OBSERVATION_6',valk)
+
+              argsr = {}
+              if isinstance( RESULTAT, mode_meca):
+                mcfact2 = {'CHAM_GD' : __chamf[ind],
+                       'MODELE'      : modele,
+                       'NUME_MODE'   : int(afreq[ind,0]),
+                       'FREQ'        : afreq[ind,1],
                        }
-
-            if isinstance( RESULTAT, evol_elas):
-                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+            ## on recopie les matrices associees au MODELE_2 dans le resultat final
+            ## NB : ce n'est peut-etre pas propre, car ces matrices ne
+            ## veulent plus rien dire si on a filtre des DDL !!!!!
+                argsr = { 'MATR_A' : MATR_A,
+                         'MATR_B' : MATR_B
+                        }
+
+              if isinstance( RESULTAT, evol_elas):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind],
                        'MODELE'     : modele,
-                       'INST'    : list_inst_ini[ind-1],
+                       'INST'    : list_inst[ind],
                        }
 
-            if isinstance( RESULTAT, dyna_trans):
-                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+              if isinstance( RESULTAT, dyna_trans):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind],
                        'MODELE'     : modele,
-                       'INST'    : list_inst_ini[ind-1],
+                       'INST'    : list_inst[ind],
                        }
 
-            if isinstance( RESULTAT, dyna_harmo):
-                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+              if isinstance( RESULTAT, dyna_harmo):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind],
                        'MODELE'     : MODELE_2,
-                       'FREQ'    : list_freq_ini[ind-1],
+                       'FREQ'    : list_freq[ind],
                        }
 
-
-            if cham_mater is not None:
+              if cham_mater is not None:
                 mcfact2['CHAM_MATER'] = cham_mater
-            if cara_elem is not None:
+              if cara_elem is not None:
                 mcfact2['CARA_ELEM'] = cara_elem
 
-            liste.append(mcfact2)
-            DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
+              liste.append(mcfact2)
+
+             DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
 
-        __proj = CREA_RESU(
+         if len(filtres) > 0 and len(liste) > 0:
+            resu_filtre = nomcham
+            if RESU:
+             RESU = CREA_RESU( reuse = RESU,
                               OPERATION = 'AFFE',
                               TYPE_RESU = TYPE_RESU,
-                              NOM_CHAM  = NOM_CHAM,
+                              NOM_CHAM  = nomcham,
                               AFFE      = liste,
+                              **argsr
                              );
+            else:
+             RESU = CREA_RESU(
+                              OPERATION = 'AFFE',
+                              TYPE_RESU = TYPE_RESU,
+                              NOM_CHAM  = nomcham,
+                              AFFE      = liste,
+                              **argsr
+                             )
+
 
 #*************************************************
-# Recopie des resultats (__proj) dans RESU
+# Recopie de __proj dans RESU si celle-ci
+# n'a pas encore ete faite via FILTRE
 #*************************************************
 
-    if nume_ordr_demande[0]:
-        num_ordr = nume_ordr_demande
-    else:
-        num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
-
-    __chamf = [None]*num_max
-    if isinstance( RESULTAT, evol_elas):
-        list_inst = __proj.LIST_VARI_ACCES()['INST']
-    if isinstance( RESULTAT, dyna_trans):
-        list_inst = __proj.LIST_VARI_ACCES()['INST']
-    if isinstance( RESULTAT, dyna_harmo):
-        list_freq = __proj.LIST_VARI_ACCES()['FREQ']
-
-    liste = []
-
-    for ind in num_ordr:
-        mcfact2 = { }
-        filtres = []
-        __chamex = CREA_CHAMP(TYPE_CHAM  = TYPE_CHAM,
-                              OPERATION  = 'EXTR',
-                              RESULTAT   = __proj,
-                              NOM_CHAM   = NOM_CHAM,
-                              NUME_ORDRE = ind,);
-
-        mcfact1 = {}
-        mcfact1.update({'TOUT' : 'OUI',
-                        'CHAM_GD' : __chamex })
-        filtres.append(mcfact1)
-
-        if NOM_CHAM == 'DEPL':
-            __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
-                                       OPERATION = 'ASSE',
-                                       MODELE    = modele,
-                                       ASSE      = filtres
-                                       );
-
-        elif NOM_CHAM == 'EPSI_NOEU_DEPL':
-            __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
-                                       OPERATION = 'ASSE',
-                                       PROL_ZERO = 'OUI',
-                                       MODELE    = modele,
-                                       ASSE      = filtres,
-                                       );
-
-        else:
-            valk = []
-            valk.append(NOM_CHAM)
-            valk.append('DEPL')
-            valk.append('EPSI_NOEU_DEPL')
-            UTMESS('F','OBSERVATION_6',valk) 
-
-        if isinstance( RESULTAT, mode_meca):
-            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
-                       'MODELE'     : modele,
-                       'NUME_MODE'    : int(afreq[ind-1,0]),
-                       'FREQ'    : afreq[ind-1,1],
-                       }
-
-        if isinstance( RESULTAT, evol_elas):
-            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
-                       'MODELE'     : modele,
-                       'INST'    : list_inst[ind-1],
-                       }
-
-        if isinstance( RESULTAT, dyna_trans):
-            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
-                       'MODELE'     : modele,
-                       'INST'    : list_inst[ind-1],
-                       }
-
-        if isinstance( RESULTAT, dyna_harmo):
-            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
-                       'MODELE'     : MODELE_2,
-                       'FREQ'    : list_freq[ind-1],
-                       }
-
-
-        if cham_mater is not None:
-            mcfact2['CHAM_MATER'] = cham_mater
-        if cara_elem is not None:
-            mcfact2['CARA_ELEM'] = cara_elem
-
-        liste.append(mcfact2)
-        DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
+     if resu_filtre == None:
+        RESU = PROJ_CHAMP(METHODE = 'COLLOCATION',
+                          RESULTAT = __proj,
+                          MODELE_1 = modele,
+                          MODELE_2 = modele,
+                          NUME_DDL = NUME_DDL,
+                          NOM_CHAM = nomcham,
+                          **mcfact
+                         )
 
-    RESU = CREA_RESU(
-                      OPERATION = 'AFFE',
-                      TYPE_RESU = TYPE_RESU,
-                      NOM_CHAM  = NOM_CHAM,
-                      AFFE      = liste,
-                     );
 
     return ier
 
@@ -786,7 +779,6 @@ def crea_normale(self, modele_1, modele_2,
     nom_modele_num = modele_1.nom
     _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE    .LGRF' )
     maillage = _maillag[0].strip()
-    jdc = CONTEXT.get_current_step().jdc
     mayanum = self.get_concept(maillage)
 
 
@@ -833,7 +825,8 @@ def crea_normale(self, modele_1, modele_2,
                        );
 
 
-    __norm4 = PROJ_CHAMP( RESULTAT   = __norm3,
+    __norm4 = PROJ_CHAMP( METHODE='COLLOCATION',
+                          RESULTAT   = __norm3,
                           MODELE_1   = modele_1,
                           MODELE_2   = modele_2,
                           NOM_CHAM   = 'DEPL',
@@ -866,7 +859,6 @@ def crea_repere(chnorm, ind_no, vect):
     import numpy
 
     nom_para = vect.keys()[0] # nom_para = 'VECT_X' ou 'VECT_Y'
-    condition = list(vect[nom_para])
 
     # 1) pour tous les noeuds du maillage experimental, recuperer la normale
     #    calculee a partir du maillage numerique
@@ -874,9 +866,6 @@ def crea_repere(chnorm, ind_no, vect):
     chnormy = chnorm.EXTR_COMP('DY',[],1)
     chnormz = chnorm.EXTR_COMP('DZ',[],1)
 
-    noeuds = chnormx.noeud
-    nbno = len(noeuds)
-
     normale = [chnormx.valeurs[ind_no],
                chnormy.valeurs[ind_no],
                chnormz.valeurs[ind_no]]
@@ -911,7 +900,6 @@ def crea_repere(chnorm, ind_no, vect):
 
     return angl_naut
 
-
 #**********************************************************************
 # Calcul des angles nautiques pour le repere associe a VECT_X et VECT_Y
 #**********************************************************************
@@ -983,7 +971,7 @@ def crea_repere_xy(vect_x, vect_y):
         vect2 = vy
         vect1 = numpy.cross(vect2, vect3)
 
-      
+
       norm12=numpy.dot(vect1,vect1)
       norm22=numpy.dot(vect2,vect2)
       norm32=numpy.dot(vect3,vect3)
@@ -1091,7 +1079,6 @@ def norm(x):
     tmp = numpy.sqrt(numpy.dot(x,x))
     return tmp
 
-
 def anglnaut(P):
 
 
@@ -1103,9 +1090,7 @@ def anglnaut(P):
     import copy
     import numpy
     # expression des coordonnees globales des 3 vecteurs de base locale
-    x = numpy.array([1.,0.,0.])
     y = numpy.array([0.,1.,0.])
-    z = numpy.array([0.,0.,1.])
 
     xg = P[:,0]
     yg = P[:,1]
diff --git a/Aster/Cata/cataSTA10/Macro/post_bordet_ops.py b/Aster/Cata/cataSTA10/Macro/post_bordet_ops.py
new file mode 100644 (file)
index 0000000..6773ec4
--- /dev/null
@@ -0,0 +1,337 @@
+#@ MODIF post_bordet_ops Macro  DATE 23/02/2011   AUTEUR BARGELLI R.BARGELLINI 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+#definition des fonctions python pour les passer en formule plus tard
+def nap_for_py(x,y,F):
+   return F(x,y)
+
+def maxi(x,y):
+   if x>=y :
+      return x
+   elif y>x:
+      return y
+    
+#corps de la macro
+def post_bordet_ops(self,
+TOUT,
+GROUP_MA,
+INST,
+PRECISION,
+CRITERE,
+NUME_ORDRE,
+PROBA_NUCL,
+RESULTAT,
+PARAM,
+TEMP,
+COEF_MULT,**args):
+   import numpy as NP
+   import aster
+   from Accas import _F
+   from SD.co_fonction import fonction_sdaster, fonction_c, nappe_sdaster
+   from Utilitai.Utmess     import  UTMESS
+
+   ier=0
+ #
+ # La macro compte pour 1 dans la numerotation des commandes
+ #
+   self.set_icmd(1)
+ #
+ # On importe les definitions des commandes a utiliser dans la macro
+ #
+   CREA_CHAMP = self.get_cmd('CREA_CHAMP')
+   CALC_CHAM_ELEM  = self.get_cmd('CALC_CHAM_ELEM')
+   CALC_ELEM  = self.get_cmd('CALC_ELEM')
+   CREA_TABLE  = self.get_cmd('CREA_TABLE')
+   FORMULE     =self.get_cmd('FORMULE')
+   CALC_TABLE  =self.get_cmd('CALC_TABLE')
+ # 
+ # Definition du concept sortant dans le contexte de la macro
+ #
+   self.DeclareOut('tabout', self.sd)
+
+ #
+ #Recuperation du champ materiau compris dans le resultat
+ #
+   iret,ibid,__nom_cham_mater = aster.dismoi('F','CHAM_MATER',RESULTAT.nom,'RESULTAT')
+#   if (len(__nom_cham_mater) == 0) or (len(__nom_cham_mater) > 1)  :
+   if (__nom_cham_mater.strip() == "#PLUSIEURS") or (__nom_cham_mater.strip() == "#AUCUN") :
+        print 'ON EST LA'
+        UTMESS('F','RUPTURE1_58')
+   else :
+        __cham_mater = self.get_concept(__nom_cham_mater.strip())
+#
+#Recuperation du modele a partir du resultat
+   iret,ibid,__n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+   __n_modele=__n_modele.rstrip()
+   if len(__n_modele)==0 or __n_modele=="#PLUSIEURS":
+      UTMESS('F','RUPTURE1_58')
+   __model = self.get_concept(__n_modele)
+# 
+# 
+ # Creation du dictionnaire des parametres materiau de l'utilisateur
+ #
+   __DPARAM=PARAM[0].cree_dict_valeurs(PARAM[0].mc_liste)
+
+ # on l'ajoute dans l'environnement pour pouvoir s'en servir dans les commandes
+   self.update_const_context({"""__DPARAM""" : __DPARAM})
+ #
+ #Dimension du modele
+ #
+   iret,ndim,rbid = aster.dismoi('F','DIM_GEOM',__model.nom,'MODELE')
+   
+   if (iret==1) or (ndim==23): UTMESS('F','RUPTURE1_57')
+   
+ #
+ #Definition des formules pour le calcul de sigy plus tard
+ #
+
+   __NPY=FORMULE(NOM_PARA=('EPSI'),VALE="""nap_for_py(EPSI,__TEMPE,__DPARAM['SEUIL_CALC'])""")
+
+   __MAXI=FORMULE(NOM_PARA=('T1'),VALE="""maxi(T1,0.)""")
+
+ # on l'ajoute dans l'environnement pour pouvoir s'en servir dans les commandes
+   self.update_const_context({'nap_for_py' : nap_for_py})
+   self.update_const_context({'maxi' : maxi})
+ #
+ #Calcul des grandeurs dont on a besoin : contrainte principale, def plastique et volume du pt de gauss
+ #
+
+ #Volume point de gauss
+   __VOL_PG=CALC_CHAM_ELEM(MODELE=__model,
+                      CHAM_MATER=__cham_mater,
+                      TOUT='OUI',
+                      OPTION='COOR_ELGA',);
+   if GROUP_MA:
+      __VOL=__VOL_PG.EXTR_COMP('W',[GROUP_MA])
+   elif TOUT :
+      __VOL=__VOL_PG.EXTR_COMP('W',[])
+
+#contrainte principale max
+   __RESU=CALC_ELEM(
+            RESULTAT=self['RESULTAT'],
+            OPTION='SIEQ_ELGA');
+#            NOM_CMP='PRIN3',);
+#deformation plastique
+   __RESU=CALC_ELEM(
+            reuse=__RESU,
+            RESULTAT=self['RESULTAT'],
+            OPTION='EPSP_ELGA',
+            );
+#            
+#Recuperation de la liste des instants et des ordres de calcul
+   __list_ordre=__RESU.LIST_VARI_ACCES()['NUME_ORDRE']
+   __list_inst=__RESU.LIST_VARI_ACCES()['INST']
+
+#
+#On va travailler en ordre ; si l'utilisateur entre un instant, on va le transformer en ordre
+   __entree_instant=None
+   if INST :
+      if CRITERE=='ABSOLU':
+         __prec=PRECISION
+      elif CRITERE=='RELATIF':
+         __prec=PRECISION*INST
+      __entree_instant=True
+      __n=0
+      __trouv=None
+      while (__n<len(__list_inst) and not __trouv):
+       if (__list_inst[__n]+__prec>=INST) and (__list_inst[__n]-__prec<=INST):
+           __instant=__list_inst[__n]
+           __trouv=True
+       __n=__n+1
+      if not __trouv:
+       UTMESS('F','RUPTURE1_53',valr=INST,valk='utilise pour le calcul de Bordet')
+   if __entree_instant==True:
+          index_ordre=__list_inst.index(__instant)
+          nume_ordre=__list_ordre[index_ordre]
+   elif NUME_ORDRE:
+      nume_ordre=NUME_ORDRE
+      if nume_ordre not in __list_ordre :
+         UTMESS('F','RUPTURE0_51',vali=int(nume_ordre),valk='utilise pour le calcul de Bordet')
+#
+#Pour Bordet, il nous faut les champs a tous les instants jusqu'a l'instant considere
+#
+   __S_TOT=[None for i in range(nume_ordre+1)]  #contrainte principale maximale
+   __EPSP=[None for i in range(nume_ordre+1)]   #champ de deformation plastique
+   __EP=[[None  for j in range(6)] for i in range(nume_ordre+1)]     #tenseur des deformations plastiques
+   __EPEQ=[[None for j in range(0)] for i in range(nume_ordre+1)]   #deformation plastique equivalente
+   __EPEQM=[[0.] for i in range(nume_ordre+1)]  #deformation plastique equivalente a l'instant precedent 
+   __S_BAR=[None for i in range(nume_ordre+1)]
+   __PRIN=[[None]for i in range(nume_ordre+1)]
+   __EQ_BAR=[[None] for i in range(nume_ordre+1)]
+   __EQ_PT=[[None] for i in range(nume_ordre+1)]
+   __EQ_PT2=[[None] for i in range(nume_ordre+1)]
+   __PR_BAR=[[None]for i in range(nume_ordre+1)]
+   __DEP=[[None] for i in range(nume_ordre+1)]
+   __BORDTO=0.#valeur sans l'exposant final, que l'on va sommer sur les instants
+   __BORDTI=0.#valeur sans l'exposant final, sommee sur les instants
+   __BORDTT=[0. for i in range(nume_ordre+1)]#valeur avec l'exposant, que l'on stocke dans la table a chaque instant
+   __PROBA=[0. for i in range(nume_ordre+1)]#Probabilite de rupture par clivage
+#LISTE DES PARAMETRES
+   __sig0=__DPARAM['SEUIL_REFE']
+   __sigth=__DPARAM['SIG_CRIT']
+   __sigref=__DPARAM['SIGM_REFE']
+   __m=__DPARAM['M']
+   __V0=__DPARAM['VOLU_REFE']
+   if PROBA_NUCL=='OUI':
+      __ep0=__DPARAM['DEF_PLAS_REFE']
+   elif PROBA_NUCL=='NON':
+      __ep0=0
+   __c_mult=COEF_MULT
+#
+#On va constuire des champs a chaque instant
+#
+   if __list_ordre[0]==0:
+      __fin_ordre=nume_ordre+1
+   elif __list_ordre[0]!=0:
+      __fin_ordre=nume_ordre
+   for ordre in range(__list_ordre[0],__fin_ordre):
+# 
+#Temperature a extraire : soit une fonction du temps, soit un reel
+#
+      if type(TEMP)==fonction_sdaster:
+         __TEMPE=TEMP(__list_inst[ordre])
+      elif type(TEMP)!=fonction_sdaster:
+         __TEMPE=TEMP
+         
+         
+      self.update_const_context({'__TEMPE' : __TEMPE})
+#
+#On met ces grandeurs dans des champs specifiques
+#
+      __S_TOT[ordre]=CREA_CHAMP(TYPE_CHAM='ELGA_SIEF_R',
+                RESULTAT=__RESU,
+                OPERATION='EXTR',
+                NUME_ORDRE=ordre,
+                NOM_CHAM='SIEQ_ELGA',);
+
+      __EPSP[ordre]=CREA_CHAMP(TYPE_CHAM='ELGA_EPSI_R',
+                RESULTAT=__RESU,
+                OPERATION='EXTR',
+                NUME_ORDRE=ordre,
+                NOM_CHAM='EPSP_ELGA',);
+#
+#On recupere la valeur des champs au niveau des groupes qui nous interessent
+#
+              
+      if GROUP_MA:
+         __PRIN[ordre]=__S_TOT[ordre].EXTR_COMP('PRIN_3',[GROUP_MA],0).valeurs;
+         
+#Pour la deformation plastique, on construit de quoi calculer sa norme de VMises
+         __EP[ordre][0]=__EPSP[ordre].EXTR_COMP('EPXX',[GROUP_MA],0).valeurs;
+         __EP[ordre][1]=__EPSP[ordre].EXTR_COMP('EPYY',[GROUP_MA],0).valeurs;
+         __EP[ordre][2]=__EPSP[ordre].EXTR_COMP('EPZZ',[GROUP_MA],0).valeurs;
+         __EP[ordre][3]=__EPSP[ordre].EXTR_COMP('EPXY',[GROUP_MA],0).valeurs;
+         if ndim==3:
+            __EP[ordre][4]=EPSP[ordre].EXTR_COMP('EPXZ',[GROUP_MA],0).valeurs;
+            __EP[ordre][5]=EPSP[ordre].EXTR_COMP('EPYZ',[GROUP_MA],0).valeurs;
+            
+      elif TOUT:
+         __PRIN[ordre]=__S_TOT[ordre].EXTR_COMP('PRIN_3',[],0).valeurs;
+         __EP[ordre][0]=__EPSP[ordre].EXTR_COMP('EPXX',[],0).valeurs;
+         __EP[ordre][1]=__EPSP[ordre].EXTR_COMP('EPYY',[],0).valeurs;
+         __EP[ordre][2]=__EPSP[ordre].EXTR_COMP('EPZZ',[],0).valeurs;
+         __EP[ordre][3]=__EPSP[ordre].EXTR_COMP('EPXY',[],0).valeurs;
+         if ndim==3:
+            __EP[ordre][4]=__EPSP[ordre].EXTR_COMP('EPXZ',[],0).valeurs;
+            __EP[ordre][5]=__EPSP[ordre].EXTR_COMP('EPYZ',[],0).valeurs;
+    
+      nval=len(__PRIN[ordre])
+      nval2=len(__EP[ordre][0])
+      if nval2!=nval: UTMESS('F','RUPTURE1_54')
+   
+
+      if ndim==3:
+         __EPEQ[ordre]=NP.sqrt(2./3.*(__EP[ordre][0]**2+__EP[ordre][1]**2+__EP[ordre][2]**2+2.*__EP[ordre][3]**2+2.*__EP[ordre][3]**2+2.*__EP[ordre][4]**2+2.*__EP[ordre][5]**2))
+      elif ndim==2:
+         __EPEQ[ordre]=NP.sqrt(2./3.*(__EP[ordre][0]**2+__EP[ordre][1]**2+__EP[ordre][2]**2+2.*__EP[ordre][3]**2))
+
+           
+#
+#Construction des champs barre et des champs de vitesse
+#
+      __EQ_PT2[__list_ordre[0]]=NP.zeros([nval])
+      __EPEQ[ordre]=NP.array(__EPEQ[ordre])
+      
+      if ordre != __list_ordre[0]:
+         dt=__list_inst[ordre]-__list_inst[ordre-1]
+         if dt==0 : UTMESS('F','RUPTURE1_55')
+         __EPEQM[ordre]=__EPEQ[ordre-1]
+         __EQ_BAR[ordre]=(__EPEQ[ordre] +__EPEQ[ordre-1])/2.
+         __EQ_PT2[ordre]=(__EPEQ[ordre]-__EPEQ[ordre-1])/(2*dt)
+         __EQ_PT[ordre]=__EQ_PT2[ordre-1]+__EQ_PT2[ordre]
+         __DEP[ordre]=__EPEQ[ordre]-__EPEQ[ordre-1]
+         __PR_BAR[ordre]=(__PRIN[ordre]+__PRIN[ordre-1])/2.
+
+         if type(__DPARAM['SEUIL_CALC'])==fonction_sdaster:
+            __sigy=__DPARAM['SEUIL_CALC'](__TEMPE)
+         elif type(__DPARAM['SEUIL_CALC'])==nappe_sdaster:
+            __EQ_PT[ordre]=list(__EQ_PT[ordre])
+            __TAB=CREA_TABLE(LISTE=(
+                                   _F(PARA='EPSI',LISTE_R=__EQ_PT[ordre],),
+                                   ),
+                            )
+            __TAB=CALC_TABLE(TABLE = __TAB,
+                             reuse =__TAB,
+                             ACTION=_F(OPERATION='OPER',
+                                       FORMULE=__NPY,
+                                       NOM_PARA='TSIGY'),)
+            __sigy=__TAB.EXTR_TABLE().values()['TSIGY']
+            __sigy=NP.array(__sigy)
+            
+         T1=__sigy/__sig0*(__PR_BAR[ordre]**__m-__sigth**__m)
+         T1=list(T1)
+         __TABT1=CREA_TABLE(LISTE=(
+                                   _F(PARA='T1',LISTE_R=T1,),
+                                   )
+                           )
+         __TABT1=CALC_TABLE(TABLE = __TABT1,
+                             reuse =__TABT1,
+                             ACTION=_F(OPERATION='OPER',
+                                       FORMULE=__MAXI,
+                                       NOM_PARA='T1BIS'),)
+
+         __T1=__TABT1.EXTR_TABLE().values()['T1BIS']
+         __T1=NP.array(__T1)
+         if PROBA_NUCL=='OUI':
+            __T2=NP.exp(-__sigy/__sig0*__EQ_BAR[ordre]/__ep0)
+         elif PROBA_NUCL=='NON':
+            __T2=1.
+         __T3=__DEP[ordre]
+         __T4=__VOL.valeurs/__V0
+         __BORDTO=NP.cumsum(__T1*__T2*__T3*__T4)[-1]
+         __BORDTI=__BORDTI+__BORDTO
+    
+      __BORDTT[ordre]=(__c_mult*__BORDTI)**(1/__m)
+      
+      if __sigref(__TEMPE)!=0.:
+         __PROBA[ordre]=1-NP.exp(-(__BORDTT[ordre]/__sigref(__TEMPE))**__m)
+      elif __sigref(__TEMPE)==0.:
+         UTMESS('F','RUPTURE1_56',valr=__list_inst[ordre])
+         
+   tabout=CREA_TABLE(LISTE=(
+                  _F(PARA='INST',LISTE_R=__list_inst[0:nume_ordre+1]),
+                  _F(PARA='SIG_BORDET',LISTE_R=__BORDTT,),
+                  _F(PARA='PROBA_BORDET',LISTE_R=__PROBA,),
+                  ),)
+   return ier    
index 40f7400436ddee623db1b32622251fc397aacf3a..7392f73c3b803e8d7c557e22747bb576cea040eb 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF post_coque_ops Macro  DATE 08/02/2010   AUTEUR DESROCHES X.DESROCHES 
+#@ MODIF post_coque_ops Macro  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -50,15 +50,19 @@ def post_coque_ops(self,RESULTAT,COOR_POINT,CHAM,NUME_ORDRE,INST,
     assert AsType(RESULTAT).__name__ in ('evol_elas','evol_noli',)
     dico = RESULTAT.LIST_CHAMPS()
     dico2 = RESULTAT.LIST_VARI_ACCES()
+  # si ni INST ni NUME_ORDRE ne sont presents, on prend le premier 
+  # instant calcule 
+    if not INST and not NUME_ORDRE :
+       INST = dico2['INST'][0]
     iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
     MODEL = self.get_concept(n_modele)
     if INST != 0.0 :
       if not INST in dico2['INST'] :
           UTMESS('F','POST0_20',valr=INST)
     else :
-      if not NUME_ORDRE in dico['SIEF_ELNO_ELGA'] :
+      if not NUME_ORDRE in dico['SIEF_ELNO'] :
         if NUME_ORDRE in dico['DEPL'] :        
-          CALC_ELEM(RESULTAT=RESULTAT,reuse=RESULTAT,OPTION='SIEF_ELNO_ELGA',
+          CALC_ELEM(RESULTAT=RESULTAT,reuse=RESULTAT,OPTION='SIEF_ELNO',
                     NUME_ORDRE=NUME_ORDRE)
         else :
           UTMESS('F','POST0_19',vali=NUME_ORDRE)
@@ -68,36 +72,36 @@ def post_coque_ops(self,RESULTAT,COOR_POINT,CHAM,NUME_ORDRE,INST,
     if CHAM=='DEFORMATION':
       if NUME_ORDRE:
         __ressup=CALC_ELEM(RESULTAT=RESULTAT,
-                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
+                  OPTION='EPSI_ELNO',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
                   NUME_ORDRE=NUME_ORDRE)
         __resinf=CALC_ELEM(RESULTAT=RESULTAT,
-                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='INF'),
+                  OPTION='EPSI_ELNO',REPE_COQUE=_F(NIVE_COUCHE='INF'),
                   NUME_ORDRE=NUME_ORDRE)
         __epssup=CREA_CHAMP(RESULTAT=__ressup,TYPE_CHAM='ELNO_EPSI_R',
-                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO',
                   NUME_ORDRE=NUME_ORDRE)
         __epsinf=CREA_CHAMP(RESULTAT=__resinf,TYPE_CHAM='ELNO_EPSI_R',
-                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO',
                   NUME_ORDRE=NUME_ORDRE)
       else :
         __ressup=CALC_ELEM(RESULTAT=RESULTAT,
-                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
+                  OPTION='EPSI_ELNO',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
                   INST=INST)
         __resinf=CALC_ELEM(RESULTAT=RESULTAT,
-                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='INF'),
+                  OPTION='EPSI_ELNO',REPE_COQUE=_F(NIVE_COUCHE='INF'),
                   INST=INST)
         __epssup=CREA_CHAMP(RESULTAT=__ressup,TYPE_CHAM='ELNO_EPSI_R',
-                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO',
                   INST=INST)
         __epsinf=CREA_CHAMP(RESULTAT=__resinf,TYPE_CHAM='ELNO_EPSI_R',
-                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO',
                   INST=INST)
 
                                                                      
     # Appel MACR_LIGN_COUPE :
     motscles={}
-    if   CHAM=='EFFORT'      : motscles['NOM_CHAM']   ='SIEF_ELNO_ELGA'
-    if   CHAM=='DEFORMATION' : motscles['NOM_CHAM']   ='EPSI_ELNO_DEPL'
+    if   CHAM=='EFFORT'      : motscles['NOM_CHAM']   ='SIEF_ELNO'
+    if   CHAM=='DEFORMATION' : motscles['NOM_CHAM']   ='EPSI_ELNO'
 
     if CHAM=='EFFORT' :
       motscles['LIGN_COUPE']=[]
diff --git a/Aster/Cata/cataSTA10/Macro/post_decollement_ops.py b/Aster/Cata/cataSTA10/Macro/post_decollement_ops.py
new file mode 100644 (file)
index 0000000..20867c6
--- /dev/null
@@ -0,0 +1,141 @@
+#@ MODIF post_decollement_ops Macro  DATE 14/03/2011   AUTEUR TARDIEU N.TARDIEU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+########################
+
+# fonction qui renvoie une liste de 0/1 en fonction du signe des éléments de la liste listIN:
+def fctZeroUn(listIN):
+   listOUT=[]
+   for n in listIN:
+      if n>0: listOUT.append(1);
+      else: listOUT.append(0);
+   return listOUT;
+
+def post_decollement_ops(self,RESULTAT,NOM_CHAM,NOM_CMP,GROUP_MA,INFO,**args):
+  """
+     Corps de la macro POST_DECOLLEMENT
+  """
+  ier=0
+  import aster
+  import os,string,types
+  from Accas import _F
+  from Utilitai.Utmess import  UTMESS, MasquerAlarme, RetablirAlarme
+
+
+  ### On importe les definitions des commandes a utiliser dans la macro
+  CREA_CHAMP     = self.get_cmd('CREA_CHAMP')
+  POST_ELEM      = self.get_cmd('POST_ELEM')
+  CREA_TABLE     = self.get_cmd('CREA_TABLE')
+  POST_RELEVE_T  = self.get_cmd('POST_RELEVE_T')
+  DEFI_GROUP     = self.get_cmd('DEFI_GROUP')
+  DEFI_MATERIAU  = self.get_cmd('DEFI_MATERIAU')
+  CREA_RESU      = self.get_cmd('CREA_RESU')
+  AFFE_MODELE    = self.get_cmd('AFFE_MODELE')
+  AFFE_MATERIAU  = self.get_cmd('AFFE_MATERIAU')
+  IMPR_TABLE     = self.get_cmd('IMPR_TABLE')
+
+  ### Comptage commandes + déclaration concept sortant
+  self.set_icmd(1)
+  self.DeclareOut('C_out',self.sd)
+  
+  ### on recupere le concept maillage 
+  iret,ibid,nom_mo = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+  iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',nom_mo.strip(),'MODELE')
+  MAILLAGE = self.get_concept(nom_ma.strip())
+  ### Creation du groupe de noeuds 'PDECOL'
+  DEFI_GROUP(reuse=MAILLAGE,MAILLAGE=MAILLAGE,
+             DETR_GROUP_NO= _F(NOM='PDECOL',),
+             CREA_GROUP_NO=_F(GROUP_MA=GROUP_MA,NOM='PDECOL'),
+             ALARME='NON',)
+
+  
+  ### le modele 3D ne va contenir que des mailles de peau : on masque les alarmes
+  MasquerAlarme('CALCULEL2_63')
+  MasquerAlarme('CALCULEL2_64')
+  
+  ### model restreint au GROUP_MA
+  __model=AFFE_MODELE(MAILLAGE=MAILLAGE,
+                  AFFE=_F(  GROUP_MA = GROUP_MA,PHENOMENE = 'MECANIQUE',
+                            MODELISATION = '3D'),)
+                            
+  ### le modele 3D ne va contenir que des mailles de peau : on retablit les alarmes
+  RetablirAlarme('CALCULEL2_63')
+  RetablirAlarme('CALCULEL2_64')
+  
+  ### Calcul de la surface du GROUP_MA : __surf
+  __unit = CREA_CHAMP(OPERATION='AFFE',TYPE_CHAM='NOEU_NEUT_R',MODELE=__model,
+                      AFFE=_F(GROUP_NO='PDECOL',NOM_CMP='X1',VALE=1.0),)
+
+  __chpg0 = CREA_CHAMP(PROL_ZERO='OUI',MODELE=__model,OPERATION='DISC',TYPE_CHAM='ELGA_NEUT_R',
+                      CHAM_GD=__unit)
+
+  __mater0 = DEFI_MATERIAU(ELAS=_F(E=210000000.0,NU=0.3),)
+
+  __chmat0 = AFFE_MATERIAU(MODELE=__model,MAILLAGE=MAILLAGE,AFFE=_F(TOUT='OUI',MATER=__mater0),)
+
+  __resu0 = CREA_RESU(OPERATION='AFFE',TYPE_RESU='EVOL_ELAS',NOM_CHAM='VARI_ELGA',
+                      AFFE=_F(CHAM_MATER=__chmat0,MODELE=__model,CHAM_GD=__chpg0,INST=0.0),)
+
+  __tbSurf0 = POST_ELEM(RESULTAT=__resu0,INST=0.0,MODELE=__model,
+                       INTEGRALE=_F(NOM_CHAM='VARI_ELGA',NOM_CMP='X1',GROUP_MA=GROUP_MA),)
+
+  __surf=__tbSurf0.EXTR_TABLE().values()['INTE_X1'][0]
+
+  __linst=RESULTAT.LIST_VARI_ACCES()['INST']
+
+  ### Calcul de la surface des noeuds décollés
+  __pct=[]
+  
+  for  inst in __linst:
+
+     __dep = CREA_CHAMP(OPERATION='EXTR',RESULTAT=RESULTAT,TYPE_CHAM='NOEU_'+NOM_CHAM[:4]+'_R',
+                         INST=inst,NOM_CHAM=NOM_CHAM)
+
+     __tb1  = POST_RELEVE_T(ACTION=_F(OPERATION='EXTRACTION',GROUP_NO='PDECOL', INTITULE=GROUP_MA,
+                                      CHAM_GD=__dep,NOM_CMP=NOM_CMP),) 
+
+     __col = fctZeroUn(__tb1.EXTR_TABLE().values()[NOM_CMP])
+
+     __tb2 = CREA_TABLE(LISTE=(_F(LISTE_K=__tb1.EXTR_TABLE().values()['NOEUD'],PARA='NOEUD'),
+                               _F(LISTE_R=__col,PARA='X1'),),)
+
+     __ch = CREA_CHAMP(OPERATION='EXTR',TYPE_CHAM='NOEU_NEUT_R',TABLE=__tb2,MAILLAGE=MAILLAGE)
+     __chg = CREA_CHAMP(MODELE=__model,OPERATION='DISC',TYPE_CHAM='ELGA_NEUT_R',
+                         PROL_ZERO='OUI',CHAM_GD=__ch)
+  
+     __resu = CREA_RESU(OPERATION='AFFE',TYPE_RESU='EVOL_ELAS',NOM_CHAM='VARI_ELGA',
+                      AFFE=_F(CHAM_MATER=__chmat0,MODELE=__model,CHAM_GD=__chg,INST=0.0),)
+
+     __tb3 = POST_ELEM(RESULTAT=__resu,INST=0.0,MODELE=__model,
+                          INTEGRALE=_F(NOM_CHAM='VARI_ELGA',NOM_CMP='X1',GROUP_MA=GROUP_MA),)
+
+     __su2=__tb3.EXTR_TABLE().values()['INTE_X1'][0]
+
+     __pct.append(100.0*__su2/__surf);
+
+
+  C_out=CREA_TABLE(LISTE=(_F(LISTE_R=__linst,PARA='INST'),
+                          _F(LISTE_R=__pct,PARA='%DECOL'),),)
+  if INFO > 1:
+     IMPR_TABLE(UNITE=6,
+                TABLE=C_out)
+  return ier
index e5a282e004a666d0ef227d662de5b06d001ba767..6004fa977bf35fb1cce6149deb8db2b79cc401c4 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF post_endo_fiss_ops Macro  DATE 31/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF post_endo_fiss_ops Macro  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -236,7 +236,7 @@ def post_endo_fiss_ops(self,
   # TEST SUR LE TYPE DE CHAMP
   #
   ltyP_cham = ['NOEU_DEPL_R','ELGA_EPSI_R','ELNO_EPSI_R','NOEU_SIEF_R','ELGA_VARI_R','ELNO_VARI_R','ELNO_VARI_R','NOEU_VAR2_R']
-  lnoM_cham = ['DEPL','EPSI_ELGA_DEPL','EPSI_ELNO_DEPL','EPSI_NOEU_DEPL','VARI_ELGA','VARI_ELNO','VARI_ELNO_ELGA','VARI_NOEU_ELGA']
+  lnoM_cham = ['DEPL','EPSI_ELGA','EPSI_ELNO','EPSI_NOEU','VARI_ELGA','VARI_ELNO','VARI_ELNO','VARI_NOEU']
 
   if NOM_CHAM in lnoM_cham :
     Xtype_cham = ltyP_cham[lnoM_cham.index(NOM_CHAM)]
@@ -423,7 +423,7 @@ def post_endo_fiss_ops(self,
                                       PHENOMENE    = 'MECANIQUE',
                                       MODELISATION = 'BARRE'),)
 
-    __YBARPR = PROJ_CHAMP(METHODE        = 'ELEM',
+    __YBARPR = PROJ_CHAMP(METHODE        = 'COLLOCATION',
                             RESULTAT     = __resu,
                             MODELE_1     = __modtot,
                             MODELE_2     = __MO,
@@ -537,7 +537,7 @@ def post_endo_fiss_ops(self,
                                      PHENOMENE    = 'MECANIQUE',
                                      MODELISATION = 'BARRE'),)
 
-    __YBARPR = PROJ_CHAMP(METHODE      = 'ELEM',
+    __YBARPR = PROJ_CHAMP(METHODE      = 'COLLOCATION',
                           RESULTAT     = __resu,
                           MODELE_1     = __modtot,
                           MODELE_2     = __MO,
@@ -683,7 +683,7 @@ def post_endo_fiss_ops(self,
 
       try:
         # on essaie de projeter, exception: il n'y a pas des points "dans la matiere"
-        __YBARPR = PROJ_CHAMP(METHODE      = 'ELEM',
+        __YBARPR = PROJ_CHAMP(METHODE      = 'COLLOCATION',
                               RESULTAT     = __resu,
                               MODELE_1     = __modtot,
                               MODELE_2     = __MO,
index 875a37ff227bb2854754cb469739fa13965367b4..7cf700e8b9d3886fffac074cc9eb4ad99ed746e3 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF post_gp_ops Macro  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF post_gp_ops Macro  DATE 29/03/2011   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -34,7 +34,10 @@ def post_gp_ops(self, **args):
    from Cata_Utils.t_fonction import t_fonction
    from Cata.cata             import evol_noli
    import aster
-   
+   import string
+   import numpy as NP
+   from sets import Set 
+   global DEFI_GROUP, POST_RELEVE_T, DETRUIRE
    # ----- On importe les definitions des commandes a utiliser dans la macro
    CALC_THETA    = self.get_cmd('CALC_THETA')
    CALC_G        = self.get_cmd('CALC_G')
@@ -45,15 +48,54 @@ def post_gp_ops(self, **args):
    CALC_ELEM     = self.get_cmd('CALC_ELEM')
    RECU_FONCTION = self.get_cmd('RECU_FONCTION')
    DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
+   EXTR_RESU      = self.get_cmd('EXTR_RESU')
+   DETRUIRE      = self.get_cmd('DETRUIRE')
    FIN           = self.get_cmd('FIN')
    
+   tmp_liste_inst_postgp = []
+   
+   #----------------------------------------------------------
    # ----- Comptage, commandes + déclaration concept sortant
+   #----------------------------------------------------------
    self.set_icmd(1)
    self.DeclareOut('result', self.sd)
-   self.DeclareOut('tabresult', self['TABL_RESU'])
+   self.DeclareOut('tabresult', self['TABL_GPMAX'])
+   if (self['TABL_GP']!= None ):   
+       self.DeclareOut('tabgp', self['TABL_GP'])
+
+   liste_inst_post = self['LIST_INST']
+   Resultat = EXTR_RESU(RESULTAT=self['RESULTAT'],ARCHIVAGE=_F(LIST_INST=liste_inst_post))
+   liste_inst_postgp = aster.getvectjev(string.ljust(liste_inst_post.nom,19)+'.VALE')
+   
+
+   #----------------------------------------------------------
+   # ---- Recuperation du nombre d'instants deja calculés 
+   #----------------------------------------------------------
+   if aster.getvectjev(string.ljust(Resultat.nom,19)+'.ORDR        ').__contains__(0):UTMESS('F','POST0_37')
+   num_ord = len(aster.getvectjev(string.ljust(Resultat.nom,19)+'.ORDR        '))
+   liste_ord = aster.getvectjev(string.ljust(Resultat.nom,19)+'.ORDR        ')
+
+           
+   # Cas 2D
+   if self['THETA_2D'] is not None:
+      is_2D = True
+   else:
+      is_2D = False
+      UTMESS('A','POST0_38')
+      # TABLE GP à remplier pour 3D
+      liste_3d_inst =  []  
+      liste_3d_lieu =  []  
+      liste_3d_icop =  []
+      liste_3d_deltal =  [] 
+      liste_3d_gp =  []
+
    info = self['INFO']
+   type_def = self['TYPE_DEF']
+   
    
+   #----------------------------------------------------------
    # 0. ----- Type de calcul
+   #----------------------------------------------------------
    identification = self['IDENTIFICATION'] != None
    if identification:
       # 0.1. --- identification : on boucle sur les valeurs de TEMP.
@@ -80,28 +122,28 @@ def post_gp_ops(self, **args):
       l_crit = [l_crit,]
    
 
+   #----------------------------------------------------------
    # Maillage associe au modele
+   #----------------------------------------------------------
    __MAIL = aster.getvectjev( self['MODELE'].nom.ljust(8) + '.MODELE    .LGRF        ' )
    nom_maillage = __MAIL[0].strip()
    
    maya = self.get_concept(nom_maillage)
+   ltyma =aster.getvectjev("&CATA.TM.NOMTM")
    
+   #----------------------------------------------------------
    # Excitation 
-   args={}                    
+   #----------------------------------------------------------
+   args={}      
    if self['EXCIT']:args={'EXCIT'   : self['EXCIT'].List_F()}
 
-   # 1. ----- calcul de G-theta
-   
-   # Cas 2D
-   if self['THETA_2D'] is not None:
-      is_2D = True
-   else:
-      is_2D = False
    
+   #----------------------------------------------------------
+   # 1. ----- calcul de G-theta
+   #----------------------------------------------------------
+
    if is_2D:
       nbcour = len(self['THETA_2D'])
-      nb_tranches = 1
-      ep_z = 1
       l_tab = []
       for occ in self['THETA_2D']:
          dMC = occ.cree_dict_valeurs(occ.mc_liste)
@@ -114,7 +156,7 @@ def post_gp_ops(self, **args):
                                           R_SUP=dMC['R_SUP']),)
    
          __gtheta = CALC_G(THETA=_F(THETA=__theta),
-                           RESULTAT=self['RESULTAT'],
+                           RESULTAT=Resultat,
                            TOUT_ORDRE='OUI',
                            SYME_CHAR=self['SYME_CHAR'],
                            COMP_ELAS=self['COMP_ELAS'].List_F(),
@@ -123,23 +165,23 @@ def post_gp_ops(self, **args):
          tab = __gtheta.EXTR_TABLE()
          
          # une Table par couronne
-         l_tab.append(tab)
+         l_tab.append(tab)      
          
    else:
       #Cas 3D
       nbcour = len(self['THETA_3D'])
-      nb_tranches = self['NB_TRANCHES']
       l_tab = []
       l_noeuds_fissure, pas = getFondFissInfo(self['FOND_FISS'])
       nb_noeuds_fissure = len(l_noeuds_fissure)
+      FOND_FISS =  self['FOND_FISS']
+      lnormale = aster.getvectjev(FOND_FISS.nom.ljust(8)+'.NORMALE              ')
+      if (lnormale==None):UTMESS('F','POST0_39')
       
       for occ in self['THETA_3D']:
          dMC = occ.cree_dict_valeurs(occ.mc_liste)
          
          # on met les mots-clés facultatifs dans des dictionnaires
          dpar_theta = {}
-         if self['DIRECTION'] is not None:
-            dpar_theta['DIRECTION'] = self['DIRECTION']
          
          __gtheta = CALC_G(
                            THETA=_F(R_INF=dMC['R_INF'],
@@ -147,7 +189,7 @@ def post_gp_ops(self, **args):
                                     MODULE=1.0,
                                     FOND_FISS=self['FOND_FISS'],
                                     **dpar_theta),
-                           RESULTAT=self['RESULTAT'],
+                           RESULTAT=Resultat,
                            TOUT_ORDRE='OUI',
                            SYME_CHAR=self['SYME_CHAR'],
                            COMP_ELAS=self['COMP_ELAS'].List_F(),
@@ -156,29 +198,58 @@ def post_gp_ops(self, **args):
 
  
          tab = __gtheta.EXTR_TABLE()
-         
+
          # une Table par couronne
          l_tab.append(tab)
 
-   
+   #----------------------------------------------------------
+   # 1.1.----- calcul de la mesure des mailles 
+   #           appartenant à l'axe de symétrie 
+   #           ou au plan de symétrie
+   #----------------------------------------------------------
+   l_copo_tot = []
+   l_ep_copeaux_tot_3D = []
+   for tmpocc in self['TRANCHE']:
+     dMCT = tmpocc.cree_dict_valeurs(tmpocc.mc_liste)
+     for grma in dMCT['GROUP_MA'] :
+       l_copo_tot.append(grma)
+   nb_tranches = len(self['TRANCHE'])
+   #  En supposant que le nombre de copeaux est identique par tranche
+   nbcop_tot = len(l_copo_tot)
+   nbcop = nbcop_tot/nb_tranches
+     
 
+   if is_2D:
+      # Récupération des noeuds appartenant à la droite de symétrie
+      # le vecteur normal est construit comme étant perpendiculaire au vecteur direction
+      # La commande CALC_THETA/THETA_2D suppose que la composante suivant z est nulle
+       lnormale = (self['DIRECTION'][1],self['DIRECTION'][0])
+       Nds_fdfiss = dMC['GROUP_NO']
+       Recup_Noeuds_Surf(is_2D,maya,Nds_fdfiss,lnormale)
+       mesure = Calcul_mesure_2D(is_2D,maya,nbcop,num_ord,l_copo_tot,ltyma,Resultat,type_def)
+
+   else:
+      # Récupération des noeuds appartenant à la surface de symétrie
+      # le vecteur normal est récuperé dans FOND_FISS
+       FOND_FISS =  self['FOND_FISS']
+       Recup_Noeuds_Surf(is_2D,maya,l_noeuds_fissure[0],lnormale,l_noeuds_fissure)
+       mesure, l_ep_copeaux_tot_3D = Calcul_mesure_3D(is_2D,maya,nbcop,num_ord,l_copo_tot,ltyma,Resultat,type_def)
+       l_ep_copeaux_tot_3D = l_ep_copeaux_tot_3D*num_ord 
+
+   #----------------------------------------------------------
    # 2. ----- Calcul de l'energie élastique en exploitant les groupes de
    #          mailles fournis par la procedure de maillage
-
-   l_copo_tot = [grma.strip() for grma in self['GROUP_MA']]
-   nbcop_tot = len(l_copo_tot)
-   nbcop = nbcop_tot/nb_tranches
-   
-   if self['LIST_EP_COPEAUX'] is not None:
-      l_ep_copeaux_tot = self['LIST_EP_COPEAUX']
-   
+   #----------------------------------------------------------
+   l_ep_copeaux_tot = []
+   for it in range(len(liste_ord)):
+     for Copeau_k in l_copo_tot :
+       l_ep_copeaux_tot.append(mesure[Copeau_k][it])
    l_t_enel = []
    
    if self['TRAC_COMP']=='OUI':
       # prise en compte de la traction-compression dans le calcul de l'energie
-      resu2=CALC_ELEM(OPTION=('EQUI_ELNO_SIGM'),
-                     RESULTAT=self['RESULTAT'],
+      resu2=CALC_ELEM(OPTION=('SIEQ_ELNO'),
+                     RESULTAT=Resultat,
                      )
                      
       # indices des mailles du dernier group_ma
@@ -207,7 +278,7 @@ def post_gp_ops(self, **args):
    args={}
    if self['EXCIT']:args={'CHARGE': [charg['CHARGE'] for charg in self['EXCIT']]}
    for i in range(0,nb_tranches):
-      l_copo = l_copo_tot[i*nbcop:(i+1)*nbcop]   
+      l_copo = l_copo_tot[i*nbcop:(i+1)*nbcop]  
       
       if info >= 2 and not is_2D:
          print "<I> Calcul de la tranche %i"%(i+1)
@@ -244,7 +315,7 @@ def post_gp_ops(self, **args):
             d_nomma[id_elem]=elem
             
             E_el[kk] = POST_ELEM(MODELE=self['MODELE'],
-                                 RESULTAT=self['RESULTAT'],
+                                 RESULTAT=Resultat,
                                  TOUT_ORDRE='OUI',
                                  ENER_ELAS=_F(MAILLE=elem),
                                  TITRE='Energie élastique',
@@ -254,7 +325,7 @@ def post_gp_ops(self, **args):
             
             l_enel = T_el[kk].TOTALE.values()
             
-            # signe de la trace <=> signe de la composante VMIS_SG du tenseur EQUI_ELNO_SIGM,
+            # signe de la trace <=> signe de la composante VMIS_SG du tenseur SIEQ_ELNO,
             # mais E_enel est par element => on fait une moyenne sur les noeuds de l'element
             
             list_no = []
@@ -263,8 +334,6 @@ def post_gp_ops(self, **args):
                if nomnoe not in list_no :
                   list_no.append(nomnoe)
             
-            # print "liste des noeuds de la maille ", id_elem, ": ", list_no
-            
             l_inst = T_el[kk].INST.values()
             nb_inst = len(l_inst)
             
@@ -276,7 +345,7 @@ def post_gp_ops(self, **args):
                
                __VM=RECU_FONCTION(RESULTAT=resu2,
                                     TOUT_INST='OUI',
-                                    NOM_CHAM='EQUI_ELNO_SIGM',
+                                    NOM_CHAM='SIEQ_ELNO',
                                     NOM_CMP='VMIS_SG',
                                     MAILLE=elem,
                                     NOEUD=noeud);
@@ -361,7 +430,7 @@ def post_gp_ops(self, **args):
          # calcul classique de l'energie elastique
       
          __ener = POST_ELEM(MODELE=self['MODELE'],
-                                 RESULTAT=self['RESULTAT'],
+                                 RESULTAT=Resultat,
                                  TOUT_ORDRE='OUI',
                                  ENER_ELAS=_F(GROUP_MA=l_copo),
                                  TITRE='Energie élastique',
@@ -381,21 +450,22 @@ def post_gp_ops(self, **args):
       l_numord = list(set(t_enel.NUME_ORDRE.values()))
       l_numord.sort()
 
-      if self['PAS_ENTAILLE'] is not None:
-         t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] })
-      else:
-         l_ep_copeaux_tranche = l_ep_copeaux_tot[i*nbcop:(i+1)*nbcop]
-         t_enel['DELTAL'] = l_ep_copeaux_tranche*len(l_numord)
-
+      l_ep_copeaux_tranche=[]
+      for it in range(num_ord):
+        l_ep_copeaux_tranche = l_ep_copeaux_tranche + l_ep_copeaux_tot[i*nbcop+it*nbcop*nb_tranches:(i+1)*nbcop+it*nbcop*nb_tranches]
+      l_ep_copeaux_tranche_3D = l_ep_copeaux_tot_3D[i*nbcop:(i+1)*nbcop]
+      
       # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL
-      if is_2D:
+      if is_2D: 
+         t_enel['DELTAL'] = l_ep_copeaux_tranche
          t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
             {'syme'   : self['SYME_CHAR'] != 'SANS',
              'R'      : self['RAYON_AXIS'],})
       else:
-         ep_tranche = largeur_tranche(nom_maillage, l_noeuds_fissure, pas, i)
-         #print "ep_tranche %i: "%i, ep_tranche
-         t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+         ep_tranche=1
+         t_enel['MESURE'] = l_ep_copeaux_tranche
+         t_enel['DELTAL'] = l_ep_copeaux_tranche_3D*len(l_numord)
+         t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'MESURE'),
                {'syme'   : self['SYME_CHAR'] != 'SANS',
                 'R'      : ep_tranche })
       
@@ -403,13 +473,15 @@ def post_gp_ops(self, **args):
       #   print "Table de l'énergie élastique: ", t_enel
       
       l_t_enel.append(t_enel)
-      # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant
+      
+      # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant    
+      
       if info >= 2:
          tGp_t_icop = t_enel['INST', 'DELTAL', 'GP']
          tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \
                            "fond d'entaille"
          tGp_t_icop.ImprTabCroise()
-   
       # 2.4. ----- Table Gpmax
       ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP']
 
@@ -431,12 +503,11 @@ def post_gp_ops(self, **args):
          if len(t.GP.values())>1:
             t = t.DELTAL.MINI()
          
-         if j == 1:
+         if l_numord.index(j) == 0:
             tb_Gpmax_i = t
          else:
             tb_Gpmax_i = tb_Gpmax_i | t
       
-      
       tb_Gpmax_i.Renomme('GP', 'GPMAX')
       tb_Gpmax_i.Renomme('ICOP', 'ICOPMAX')
       tb_Gpmax_i.Renomme('DELTAL', 'DELTALMAX')
@@ -473,6 +544,17 @@ def post_gp_ops(self, **args):
       else:
          tb_Gpmax = merge(tb_Gpmax, tb_Gpmax_i)
    
+      # 2.5. ----- POUR LE CAS DE 3D
+      # RECUPERE LES INFOS NECESSAIRE POUR LA CREATION DU TABLEAU GP (ie TABL_GP)Tableau de Gp = f(icop) pour chaque instant      
+      if not is_2D:       
+       
+        for kocc in range(len(t_enel['INST'].values()['INST'])) :
+          liste_3d_inst.append(t_enel['INST'].values()['INST'][kocc])
+          liste_3d_lieu.append(t_enel['LIEU'].values()['LIEU'][kocc])
+          liste_3d_icop.append(t_enel['ICOP'].values()['ICOP'][kocc])
+          liste_3d_deltal.append(t_enel['DELTAL'].values()['DELTAL'][kocc])
+          liste_3d_gp.append(t_enel['GP'].values()['GP'][kocc])
+
    # FIN BOUCLE SUR LES TRANCHES
    
    if not is_2D:
@@ -496,9 +578,10 @@ def post_gp_ops(self, **args):
          grno_fond = "GRNOFOND"
          DEFI_GROUP(reuse =maya,
                     MAILLAGE=maya,
+                    DETR_GROUP_NO= _F(NOM=grno_fond,),
                     CREA_GROUP_NO=_F(GROUP_MA=grma_fond,
                                      NOM=grno_fond,),);
-      
+       
       l_ordres = DEFI_LIST_ENTI(VALE=l_numord)
       __relev = POST_RELEVE_T(ACTION=_F(RESULTAT=self['RESU_THER'],
                                         OPERATION='EXTRACTION',
@@ -507,7 +590,7 @@ def post_gp_ops(self, **args):
                                         LIST_ORDRE=l_ordres,
                                         NOM_CMP='TEMP',
                                         GROUP_NO=grno_fond,),)
-
       t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'NOEUD', 'TEMP']
    
    # 3. ----- boucle sur les mots-clés facteurs
@@ -557,8 +640,8 @@ def post_gp_ops(self, **args):
                tab=mergeLineInTable(tab, t_relev, nb_noeuds_fissure)
 
             # en 3D, le paramètre R n'intervient pas
-            tab.fromfunction(new_para, fKj, ('G_LOCAL', 'YOUNG', 'NU'))
-            tab.Renomme('G_LOCAL', 'G_%d' % (k + 1))
+            tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'))
+            tab.Renomme('G', 'G_%d' % (k + 1))
 
          l_tabi.append(tab)
       
@@ -585,7 +668,7 @@ def post_gp_ops(self, **args):
          # on l'ajoute dans la table aux noeuds tabres avec la convention:
          # au 1er noeud et noeud milieu de la tranche on affecte la valeur de la tranche
          # sauf pour la derniere tranche où on affecte la valeur sur les 3 noeuds de la tranche
-         tabres = tabK_G         
+         tabres = tabK_G
          tabres = merge(tabK_G, tb_Gpmax_noeuds, ['NUME_ORDRE', 'NOEUD'])
          tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) * nb_noeuds_fissure
       #if info >= 2:
@@ -611,10 +694,11 @@ def post_gp_ops(self, **args):
       if identification:
          KJ_CRIT = l_crit[iocc]
          # on verifie que KJ_CRIT soit compris dans l'intervalle [KMOY_min, KMOY_max]
-         valkmoy = tabres.KMOY.values()            
+         valkmoy = tabres.KMOY.values()
+         message_kjcritique_non_atteint = 0
          if not (min(valkmoy) <= KJ_CRIT <= max(valkmoy)):
-#                               'constant utilisé).')
             UTMESS('A','RUPTURE0_1')
+            message_kjcritique_non_atteint = 1
          if is_2D:
             # définition des fonctions pour faire les interpolations
             d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
@@ -623,68 +707,107 @@ def post_gp_ops(self, **args):
             # Gpmax fonction du temps
             d_para.update({ 'NOM_RESU' : 'GPMAX' })
             fGp = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.GPMAX.values(), d_para)
-            
+
             d_para.update({ 'NOM_PARA' : 'KMOY',
                            'NOM_RESU' : 'INST', })
             valkmoy = tabres.KMOY.values()
-            # temps en fonction de Kmoy
-            finv = t_fonction(valkmoy, tabres.INST.values(), d_para)
+            if len(liste_inst_postgp) == 1 :
+                # si un seul instant alors
+                ti = liste_inst_postgp[0]
+            else:
+
+                # temps en fonction de Kmoy
+                finv = t_fonction(valkmoy, tabres.INST.values(), d_para)
 
-            # valeurs à mettre dans la table
-            # temps correspondant à KJ_CRIT
-            ti   = finv(KJ_CRIT)
+                # valeurs à mettre dans la table
+                # temps correspondant à KJ_CRIT
+                ti   = finv(KJ_CRIT)
+                ind_instant_plus = [x > ti for x in liste_inst_postgp].index(True)
+                if (abs(liste_inst_postgp[ind_instant_plus-1]-ti)/ti) <= 1e-4:
+                   ti = liste_inst_postgp[ind_instant_plus-1]
+                elif (abs(liste_inst_postgp[ind_instant_plus]-ti)/ti) <= 1e-4:
+                   ti = liste_inst_postgp[ind_instant_plus]
+                else:
+                   UTMESS('A','POST0_36',valr =tuple(liste_inst_postgp[ind_instant_plus-1:ind_instant_plus+1]))
+            
             # GP correspondant au temps critique
-            Gpi  = fGp(ti)
+            if (message_kjcritique_non_atteint == 1) :
+              Gpi     = '-'
+              kgpcrit = '-'
+              dLcrit  = '-'
+              message = 'KJ CRITIQUE NON ATTEINT'
+              type_tab_ident=('R', 'R', 'K8', 'K8', 'K8', 'K24' )
+      
+            else :
+              Gpi  = fGp(ti)
+              kgpcrit = fKj(Gpi, **dict_constantes)
+              dLcrit  = fdL(ti)
+              message = 'KJ CRITIQUE ATTEINT'    
+              type_tab_ident=('R', 'R', 'R', 'R', 'R', 'K24' )
+
+      
             d_ident = {
-               'KJ_CRIT'   : KJ_CRIT,
-               'INST'      : ti,
-               'GPMAX'     : Gpi,
-               'KGPMAX'    : fKj(Gpi, **dict_constantes),
-               'DELTALMAX' : fdL(ti),
-            }
+               'KJ_CRIT'     : KJ_CRIT,
+               'INST'        : ti,
+               'GP_CRIT'     : Gpi,
+               'KGP_CRIT'    : kgpcrit,
+               'DELTALCRIT'  : dLcrit,
+               'MESSAGE'     : message
+             }
             lv_ident.append(d_ident)
+
+
          else:
             
-            l_i_noeuds_sommets = range(0,len(l_noeuds_fissure),pas)
-            t_noeud_Kcrit = Table(para=tabres.para)
-            
-            # On determine quel noeud sommet maximise KMOY au cours du temps:
-            
             row_KMOY_max = tabres.KMOY.MAXI()
             noeud_KMOY_max = row_KMOY_max.NOEUD.values()[0]
-            
-            # avec le noeud ou KJ_CRIT est atteint, on regarde GP a gauche et a droite. 
-            # le GP le plus grand correspond au GPmax
-            # on garde la tranche ou GP est le plus grand            
-            
-            id_noeud_KMOY_max = list(l_noeuds_fissure).index(noeud_KMOY_max)
-            if id_noeud_KMOY_max==0:
-               # "Gpmax sur la 1ere tranche"
-               nume_tranche_Gpmax = 1
-            elif id_noeud_KMOY_max==(len(l_noeuds_fissure)-1):
-               # "Gpmax sur la derniere tranche"
-               nume_tranche_Gpmax = nb_tranches
-            else:
-               # "Gpmax sur une tranche intermediaire"
-               Gpi_tot = Table(para=tb_Gpmax.para)
-               Gpi_gauche = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas)
-               Gpi_tot.append(Gpi_gauche.rows[0])
-               Gpi_droite = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas+1)
-               Gpi_tot.append(Gpi_droite.rows[0])
-               Gpi_tab = Gpi_tot.GPMAX.MAXI()
-               nume_tranche_Gpmax = Gpi_tab.NUME_TRANCHE.values()[0]
-            
-            # tb_Gpmax_TrancheCrit est une table de la meme nature que la table 2D tb_Gpmax
-            # i.e. valeurs sur la seule tranche qui nous interesse (ou on sait
-            # que KJ_CRIT sera atteint)
-            
-            tb_Gpmax_TrancheCrit = tb_Gpmax.NUME_TRANCHE==nume_tranche_Gpmax
-            
-            # avec le noeud ou KJ_CRIT est atteint, on determine le temps
-            # critique par interpolation            
+            Gpi = 0.0
+            nume_tranche_kjcrit = 0
+            # On determine par interpolation le temps critique ou KJ_CRIT est atteint
             tabres_NoeudCrit = tabres.NOEUD==noeud_KMOY_max
-            
-            # la suite est idem 2D, seuls les noms des tables changent
+            d_para.update({ 'NOM_PARA' : 'KMOY',
+                           'NOM_RESU' : 'INST', })
+            valkmoy = tabres_NoeudCrit.KMOY.values()
+            if len(liste_inst_postgp) == 1 :
+                # si un seul instant alors
+                ti = liste_inst_postgp[0]
+            else:
+
+                # temps en fonction de Kmoy
+                finv = t_fonction(valkmoy, tabres_NoeudCrit.INST.values(), d_para)
+   
+                # valeurs à mettre dans la table
+                # temps correspondant a KJ_CRIT
+                ti   = finv(KJ_CRIT)
+                ind_instant_plus = [x > ti for x in liste_inst_postgp].index(True)
+                if abs(liste_inst_postgp[ind_instant_plus-1]-ti)/ti < 1e-4:
+                   ti = liste_inst_postgp[ind_instant_plus-1]
+                elif abs(liste_inst_postgp[ind_instant_plus]-ti)/ti < 1e-4:
+                   ti = liste_inst_postgp[ind_instant_plus]
+                else:
+                   UTMESS('A','POST0_36',valr =tuple(liste_inst_postgp[ind_instant_plus-1:ind_instant_plus+1]))
+
+            # Gpmax fonction du temps
+            d_para.update({  'NOM_PARA' : 'INST','NOM_RESU' : 'GPMAX' })
+            for id_noeud_KMOY_max in range(len( tb_Gpmax.NUME_TRANCHE)):
+                if id_noeud_KMOY_max==0:
+                  # "Gpmax sur la 1ere tranche"
+                  nume_tranche_Gpmax = 1
+                elif id_noeud_KMOY_max==(len(l_noeuds_fissure)-1):
+                  # "Gpmax sur la derniere tranche"
+                  nume_tranche_Gpmax = nb_tranches
+                else:
+                  # "Gpmax sur une tranche intermediaire"
+                  Gpi_tot = Table(para=tb_Gpmax.para)
+                  nume_tranche_Gpmax = tb_Gpmax.NUME_TRANCHE[id_noeud_KMOY_max]
+
+                tb_Gpmax_TrancheCrit = tb_Gpmax.NUME_TRANCHE==nume_tranche_Gpmax
+                fGp = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+                                 tb_Gpmax_TrancheCrit.GPMAX.values(),
+                                 d_para)
+                if (Gpi<fGp(ti)):
+                  Gpi = max(Gpi,fGp(ti))
+                  nume_tranche_kjcrit = nume_tranche_Gpmax
     
             # définition des fonctions pour faire les interpolations
             d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
@@ -693,35 +816,31 @@ def post_gp_ops(self, **args):
                               tb_Gpmax_TrancheCrit.DELTALMAX.values(),
                               d_para)
             
-            # Gpmax fonction du temps
-            d_para.update({ 'NOM_RESU' : 'GPMAX' })
-            fGp = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
-                              tb_Gpmax_TrancheCrit.GPMAX.values(),
-                              d_para)
-            
-    
-            d_para.update({ 'NOM_PARA' : 'KMOY',
-                           'NOM_RESU' : 'INST', })
-            valkmoy = tabres_NoeudCrit.KMOY.values()
-            # temps en fonction de Kmoy
-            finv = t_fonction(valkmoy, tabres_NoeudCrit.INST.values(), d_para)
-   
-            # valeurs à mettre dans la table
-            # temps correspondant a KJ_CRIT
-            ti   = finv(KJ_CRIT)
+            if (message_kjcritique_non_atteint == 1) :
+               Gpi     = '-'
+               kgpcrit = '-'
+               dLcrit  = '-'
+               message = 'KJ CRITIQUE NON ATTEINT'
+               type_tab_ident=('R', 'R', 'I', 'K8', 'K8', 'K8', 'K24' ) 
+            else :
             # GP correspondant au temps critique
-            Gpi  = fGp(ti)
-            # par rapport a 2D, on ajoute 'NUME_TRANCHE'
+               kgpcrit = fKj(Gpi, **dict_constantes)
+               dLcrit  = fdL(ti)
+               message = 'KJ CRITIQUE ATTEINT'
+               type_tab_ident=('R', 'R', 'I', 'R', 'R', 'R', 'K24' )
+
+             # par rapport a 2D, on ajoute 'NUME_TRANCHE'
             d_ident = {
-               'KJ_CRIT'      : KJ_CRIT,
-               'INST'         : ti,
-               'NUME_TRANCHE' : int(nume_tranche_Gpmax),
-               'GPMAX'        : Gpi,
-               'KGPMAX'       : fKj(Gpi, **dict_constantes),
-               'DELTALMAX'    : fdL(ti),
-            }
+               'KJ_CRIT'     : KJ_CRIT,
+               'INST'        : ti,
+               'NUME_TRANCHE': nume_tranche_kjcrit,
+               'GP_CRIT'     : Gpi,
+               'KGP_CRIT'    : kgpcrit,
+               'DELTALCRIT'  : dLcrit,
+               'MESSAGE'     : message
+              }
             lv_ident.append(d_ident)
-            
+
       # 3.6.2. --- prédiction
       else:
          pass
@@ -730,12 +849,12 @@ def post_gp_ops(self, **args):
    # 4.1. --- identification
    if identification:
       if is_2D:
-         para_tab_ident=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+          para_tab_ident=('KJ_CRIT', 'INST', 'GP_CRIT', 'KGP_CRIT', 'DELTALCRIT', 'MESSAGE' )
       else:
-         para_tab_ident=('KJ_CRIT', 'INST', 'NUME_TRANCHE', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+         para_tab_ident=('KJ_CRIT', 'INST', 'NUME_TRANCHE', 'GP_CRIT', 'KGP_CRIT', 'DELTALCRIT','MESSAGE')
       tab_ident = Table(rows=lv_ident,
                         para=para_tab_ident,
-                        typ = ('R')*len(para_tab_ident),
+                        typ = type_tab_ident,
                         titr='Identification aux valeurs de tenacités critiques')
       dprod_result = tab_ident.dict_CREA_TABLE()
       if info >= 2:
@@ -777,7 +896,57 @@ def post_gp_ops(self, **args):
    result = CREA_TABLE(**dprod)
    tabresult = CREA_TABLE(**dprod_result)
 
+   # 9. ----- création de la table_sdaster tabgp   
+   if (self['TABL_GP']!= None ):
+     
+     temps_agarde_gp = []
+     lv_tabgp = []
+     
+     # CAS 2D
+     if is_2D : 
+       
+         for i in range(num_ord) : 
+           d_tabgp = {
+               'INST'         : t_enel['INST'].values()['INST'][i],
+               'GROUP_MA'     : t_enel['LIEU'].values()['LIEU'][i],
+               'NUMERO_COP'   : t_enel['ICOP'].values()['ICOP'][i],
+               'DELTAL'       : t_enel['DELTAL'].values()['DELTAL'][i],
+               'GP'           : t_enel['GP'].values()['GP'][i],
+                }
+           lv_tabgp.append(d_tabgp)
 
+           texte = 'GP 2D pour chaque instant'
+       
+     # CAS 3D
+     else :
+
+         for i in range(len(liste_3d_inst)) : 
+           d_tabgp = {
+               'INST'         : liste_3d_inst[i],
+               'GROUP_MA'     : liste_3d_lieu[i],
+               'NUMERO_COP'   : liste_3d_icop[i],
+               'DELTAL'       : liste_3d_deltal[i],
+               'GP'           : liste_3d_gp[i],
+              }    
+           lv_tabgp.append(d_tabgp)
+         texte = 'GP 3D pour chaque instant'
+     
+     
+#    Creation du tableau Gp 2D ou 3D     
+     para_tab_tabgp=('INST', 'GROUP_MA', 'NUMERO_COP', 'DELTAL', 'GP')
+     liste_tab_tabgp = ('R','K8','I','R','R')
+
+     tab_tabgp = Table(rows=lv_tabgp,
+                       para=para_tab_tabgp,
+                       typ = liste_tab_tabgp,
+                       titr= texte)
+
+
+     dprod_tabgp = tab_tabgp.dict_CREA_TABLE()
+     tabgp = CREA_TABLE(**dprod_tabgp)
+   DETRUIRE(CONCEPT=_F(NOM=Resultat),INFO=1);
 
 # -----------------------------------------------------------------------------
 def CallRCVALE(TEMP, para, MATER):
@@ -907,7 +1076,7 @@ def largeur_tranche(nom_maillage, l_noms_noeuds_fissure, pas, i_tranche):
    
    d=sqrt( (coor1[0]-coor2[0])**2+(coor1[1]-coor2[1])**2+(coor1[2]-coor2[2])**2)
    return d
-   
+
 def mergeLineInTable(multiTable, lineTable, nb_noeuds):
    # on ajoute a la table multiTable les colonnes de lineTable
    # pour chaque nume_ordre autant de fois qu'il y a de nb_noeuds
@@ -928,3 +1097,366 @@ def mergeLineInTable(multiTable, lineTable, nb_noeuds):
          newTable = merge(newTable, multiTable_i)
          
    return newTable
+
+def CalDist(coor_nd,deform,coor_nds,deforms):
+   # on calcule la distance du noeud 1 aux autres noeuds
+   
+   import numpy as NP
+   
+   nbr_noeuds = len(coor_nds)
+   if nbr_noeuds == 1:
+      dist_min = NP.sqrt((coor_nds[0][0]+deforms[0][0]-coor_nd[0]-deform[0])**2 + 
+                      (coor_nds[0][1]+deforms[0][1]-coor_nd[1]-deform[1])**2 +
+                      (coor_nds[0][2]+deforms[0][2]-coor_nd[2]-deform[2])**2)
+   else:
+     dist_min = NP.sqrt((coor_nds[0][0]+deforms[0][0]-coor_nd[0]-deform[0])**2 + 
+                        (coor_nds[0][1]+deforms[0][1]-coor_nd[1]-deform[1])**2 +
+                        (coor_nds[0][2]+deforms[0][2]-coor_nd[2]-deform[2])**2)
+     for inds in range(1,nbr_noeuds):
+       dist = NP.sqrt((coor_nds[inds][0]+deforms[inds][0]-coor_nd[0]-deform[0])**2 + 
+                      (coor_nds[inds][1]+deforms[inds][1]-coor_nd[1]-deform[1])**2 +
+                      (coor_nds[inds][2]+deforms[inds][2]-coor_nd[2]-deform[2])**2)
+       if dist < dist_min : dist_min = dist
+   return dist_min
+   
+def CalSurf(coord_noeuds,deformation):
+   # on calcule la surface deformee
+   
+   dAB = CalDist(coord_noeuds[1],deformation[1],[coord_noeuds[0]],[deformation[0]])
+   dBC = CalDist(coord_noeuds[2],deformation[2],[coord_noeuds[1]],[deformation[1]])
+   dCD = CalDist(coord_noeuds[3],deformation[3],[coord_noeuds[2]],[deformation[2]])                 
+   dDA = CalDist(coord_noeuds[0],deformation[0],[coord_noeuds[3]],[deformation[3]])
+
+   mesure = (dAB+dCD)/2.*(dBC+dDA)/2.
+         
+   return mesure
+
+#-------------------------------------------------------------
+def Recup_Noeuds_Surf(is_2D,maya,var1,var2,var3=None):
+   
+      # Récupération des noeuds appartenant à la surface de symétrie
+      from Accas import _F
+      dicma=[]
+      dicma.append({'NOM' : 'Nds_Plan'})
+      DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_NO=dicma);
+      dicma=[]
+      dicma.append({'NOM' : 'Nds_Plan', 'OPTION' : 'PLAN', 'VECT_NORMALE' : var2, 'PRECISION' : 1e-6})
+      if is_2D:
+        dicma[0].__setitem__('GROUP_NO_CENTRE' , var1)
+        DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_NO=dicma);
+      else:
+        dicma[0].__setitem__('NOEUD_CENTRE' , var1)
+        DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_NO=dicma);
+        dicma=[]
+        dicma.append({'NOM' : 'Nds_Fond', 'NOEUD' : var3 })
+        DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_NO=dicma);
+
+def Recup_Noeuds_Copeaux(is_2D,maya,Copeau_k):
+   
+      # Récupération des noeuds appartenant à la surface de symétrie
+      # et aux copeaux
+      from Accas import _F
+      dicma=[];
+      dicma.append(_F(NOM = Copeau_k))
+      dicma.append(_F(NOM = 'Cop_Pl'))
+      DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_NO=dicma);
+
+      dicma=[];
+      dicma.append(_F(NOM = Copeau_k , GROUP_MA = Copeau_k));
+      dicma.append(_F(NOM = 'Cop_Pl' , INTERSEC = (Copeau_k,'Nds_Plan',)));
+      DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_NO=dicma);
+
+
+def Recup_2D(maya,C_k,mon_nom):
+
+   from Accas import _F
+   if C_k==0:
+       dicma=[]
+       dicma.append({'NOM' : mon_nom })
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : mon_nom, 'OPTION' : 'APPUI', 'GROUP_NO' : 'Cop_Pl', 'TYPE_APPUI' : 'TOUT'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma)
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma)
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2', 'GROUP_MA' : ('Mai_Plan')})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma)
+   else:
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla1' })
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla1', 'OPTION' : 'APPUI', 'GROUP_NO' : 'Cop_Pl', 'TYPE_APPUI' : 'TOUT'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : mon_nom})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : mon_nom, 'DIFFE' : ('Mai_Pla1','Mai_Pla2')})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma),       
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2', 'UNION' : ('Mai_Pla1','Mai_Plan')})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma)
+      
+def Recup_3D(maya,C_k,mon_nom):
+
+   from Accas import _F
+   if C_k==0:
+       dicma=[]
+       dicma.append({'NOM' : mon_nom })
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : mon_nom, 'OPTION' : 'APPUI', 'GROUP_NO' : 'Cop_Pl', 'TYPE_APPUI' : 'TOUT', 'TYPE_MAILLE' : '2D'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2', 'GROUP_MA' : (mon_nom)})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma),       
+
+
+       dicma=[]
+       dicma.append(_F(NOM = 'Nds_Delt'))
+       dicma.append(_F(NOM = 'Nds_Floc'))
+       dicma.append(_F(NOM = mon_nom))
+       DEFI_GROUP(reuse =maya,MAILLAGE=maya,DETR_GROUP_NO=dicma,);
+
+       dicma=[]
+       dicma.append(_F(NOM = mon_nom,GROUP_MA=mon_nom))
+       dicma.append(_F(NOM = 'Nds_Delt',INTERSEC=('Nds_Fond',mon_nom)))
+       dicma.append(_F(NOM = 'Nds_Floc',GROUP_NO='Nds_Delt'))
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_NO=dicma);
+
+   else :
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla1' })
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla1', 'OPTION' : 'APPUI', 'GROUP_NO' : 'Cop_Pl', 'TYPE_APPUI' : 'TOUT'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : mon_nom})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : mon_nom, 'DIFFE' : ('Mai_Pla1','Mai_Pla2'), 'TYPE_MAILLE' : '2D'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma),       
+       dicma=[]
+       dicma.append(_F(NOM = 'Nds_Delt'))
+       dicma.append(_F(NOM = mon_nom))
+       dicma.append(_F(NOM = 'Mai_Pla2'))
+       DEFI_GROUP(reuse =maya,MAILLAGE=maya,DETR_GROUP_NO=dicma,);
+       dicma=[]
+       dicma.append(_F(NOM = mon_nom, GROUP_MA =mon_nom))
+       dicma.append(_F(NOM = 'Mai_Pla2', GROUP_MA ='Mai_Pla2'))
+       dicma.append(_F(NOM = 'Nds_Delt', INTERSEC = ('Mai_Pla2',mon_nom)))
+       DEFI_GROUP(reuse =maya,MAILLAGE=maya,CREA_GROUP_NO=dicma);
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_MA=dicma),
+       dicma=[]
+       dicma.append({'NOM' : 'Mai_Pla2', 'GROUP_MA' : 'Mai_Pla1'})
+       DEFI_GROUP(reuse =maya, MAILLAGE=maya, CREA_GROUP_MA=dicma);
+
+
+def Calcul_mesure_2D(is_2D,maya,nbcop,num_ord,l_copo_tot,ltyma,resu,type_def):
+   # Calcul de la mesure des mailles déformées ou non 
+   # appartenant à l'axe de symétrie
+      
+   import numpy as NP
+
+   mesure = {}     
+   mon_nom = 'Mai_Plan'
+   for C_k in range(nbcop) :
+        Copeau_k = l_copo_tot[C_k]
+        Recup_Noeuds_Copeaux(True,maya,Copeau_k)
+        Recup_2D(maya,C_k,mon_nom)
+        if C_k==0:
+          mesure[Copeau_k] = NP.zeros(num_ord)
+        else:
+          mesure[Copeau_k] = mesure[l_copo_tot[C_k-1]]
+          
+        # Calcul de la surface des mailles du copeau courant pour chaque instant
+        tmp_mesure = NP.zeros(num_ord)
+        tab_noeud=[]
+        tab_maille=[]
+        for maille_courante in maya.GROUPEMA.get()[mon_nom.ljust(8)]:
+          if ltyma[maya.TYPMAIL.get()[maille_courante]][0:3]=='SEG':
+            connexe = maya.CONNEX.get()[maille_courante]
+            tab_noeud = tab_noeud + [maya.NOMNOE.get()[connexe[i]-1] for i in range(2)]
+            tab_maille.append(maya.NOMMAI.get()[maille_courante])
+        tab_DEP_el = Coord_Recup(tab_noeud,tab_maille,resu)
+        num_ord_init  = tab_DEP_el.NUME_ORDRE[0]
+        # Calcul de la surface des mailles du copeau courant pour chaque instant
+        Coord_int = []
+        tab_DEP_el_ord = tab_DEP_el.NUME_ORDRE.values()
+        indices = [tab_DEP_el_ord.index(num_ord_init,x) for x in range(tab_DEP_el_ord.index(num_ord_init),tab_DEP_el_ord.index(num_ord_init)+tab_DEP_el_ord.count(num_ord_init))]
+        tab_noeud = [tab_DEP_el.NOEUD[x] for x in indices]
+        tab_coordX = [tab_DEP_el.COOR_X[x] for x in indices]
+        tab_coordY = [tab_DEP_el.COOR_Y[x] for x in indices]
+        tab_coordZ = [tab_DEP_el.COOR_Z[x] for x in indices]
+        for i_maille_courante in range(len(tab_maille)):
+           indic = [tab_noeud.index(tab_noeud[i_maille_courante*2+x]) for x in range(2)]
+           Coord_int = Coord_int + [(tab_coordX[indic[x]],tab_coordY[indic[x]],tab_coordZ[indic[x]]) for x in indic]
+                 
+        # Si le type est grandes déformations alors il faut tenir compte de la déformée lors du calcul de la surface
+        if type_def=='GRAND':
+          l_ord = list(set(tab_DEP_el_ord))
+          for it in range(num_ord):
+               Def_int   = []
+               indices = [tab_DEP_el_ord.index(l_ord[it],x) for x in range(tab_DEP_el_ord.index(l_ord[it]),tab_DEP_el_ord.index(l_ord[it])+tab_DEP_el_ord.count(l_ord[it]))]
+               tab_defoX = [tab_DEP_el.DX[x] for x in indices]
+               tab_defoY = [tab_DEP_el.DY[x] for x in indices]
+               tab_defoZ = [tab_DEP_el.DZ[x] for x in indices]
+               for i_maille_courante in range(len(tab_maille)):
+                   indic = [tab_noeud.index(tab_noeud[i_maille_courante*2+x]) for x in range(2)]
+                   Def_int   = Def_int   + [(tab_defoX[indic[x]], tab_defoY[indic[x]], tab_defoZ[indic[x]])  for x in indic]
+                   tmp_mesure[it] = mesure[Copeau_k][it] + NP.sqrt((Coord_int[0][0]+Def_int[0][0]-Coord_int[1][0]-Def_int[1][0])**2 + 
+                                 (Coord_int[0][1]+Def_int[0][1]-Coord_int[1][1]-Def_int[1][1])**2 + (Coord_int[0][2]+Def_int[0][2]-Coord_int[1][2]-Def_int[1][2])**2)
+          mesure[Copeau_k] = tmp_mesure
+        else:
+          mesure[Copeau_k] = mesure[Copeau_k] + NP.sqrt((Coord_int[0][0]-Coord_int[1][0])**2 + 
+                                 (Coord_int[0][1]-Coord_int[1][1])**2 + (Coord_int[0][2]-Coord_int[1][2])**2)
+
+   Supr_mano(maya,mon_nom)
+
+   return mesure
+       
+def Calcul_mesure_3D(is_2D,maya,nbcop,num_ord,l_copo_tot,ltyma,resu,type_def):
+   # Calcul de la mesure des mailles déformées ou non 
+   # appartenant à l'axe de symétrie
+
+   import numpy as NP
+   import aster
+   from Accas import _F
+   from Utilitai.Table        import Table
+   
+   # Initialisation
+   coord_fond = []
+   mesure={}
+   l_ep_copeaux_tot_3D = []   
+   
+   mon_nom = 'Mai_Plan'
+   COOR = maya.COORDO.VALE.get()
+
+   # Recupération des noeuds de fond de fissure appartenant à la tranche courante
+   Recup_Noeuds_Copeaux(False,maya,l_copo_tot[0])
+   Recup_3D(maya,0,mon_nom)
+   l_noeud_fond = [noeud_courant for noeud_courant in maya.GROUPENO.get()['Nds_Floc'.ljust(8)]]
+   tab_DEP_el   = Coord_Recup([maya.NOMNOE.get()[x-1] for x in maya.GROUPENO.get()['Nds_Floc'.ljust(8)]] ,None,resu)
+   coord_fond   = [(tab_DEP_el.COOR_X[x],tab_DEP_el.COOR_Y[x], tab_DEP_el.COOR_Z[x]) for x in range(len(l_noeud_fond))]
+   
+   for C_k in range(len(l_copo_tot)) :
+
+       Copeau_k = l_copo_tot[C_k]
+       
+       # Recupération des groupes de noeuds appartenant au copeau courant
+       Recup_Noeuds_Copeaux(False,maya,Copeau_k)
+       Recup_3D(maya,C_k%nbcop,mon_nom)
+
+       # La mesure de la surface est cumulée
+       if C_k%nbcop==0:
+          mesure[Copeau_k] = NP.zeros(num_ord)
+       else :
+          mesure[Copeau_k] = mesure[l_copo_tot[C_k-1]]
+          
+          
+       # Recupération des coordonnées des noeuds appartenant au copeau courant
+       tmp_mesure = NP.zeros(num_ord)
+       tab_noeud  = []
+       tab_maille = []
+       for maille_courante in maya.GROUPEMA.get()[mon_nom.ljust(8)]:
+           if ltyma[maya.TYPMAIL.get()[maille_courante]][0:4]=='QUAD':
+               connexe   = maya.CONNEX.get()[maille_courante]
+               tab_noeud = tab_noeud + [maya.NOMNOE.get()[connexe[i]-1] for i in range(4)]
+               tab_maille.append(maya.NOMMAI.get()[maille_courante])
+       tab_DEP_el    = Coord_Recup(tab_noeud,tab_maille,resu)
+       num_ord_init  = tab_DEP_el.NUME_ORDRE[0]
+       
+       # Calcul de la surface des mailles du copeau courant pour chaque instant
+       Coord_int      = []
+       tab_DEP_el_ord = tab_DEP_el.NUME_ORDRE.values()
+       indices        = [tab_DEP_el_ord.index(num_ord_init,x) for x in range(tab_DEP_el_ord.index(num_ord_init),tab_DEP_el_ord.index(num_ord_init)+tab_DEP_el_ord.count(num_ord_init))]
+       tab_noeud      = [tab_DEP_el.NOEUD[x] for x in indices]
+       tab_coordX     = [tab_DEP_el.COOR_X[x] for x in indices]
+       tab_coordY     = [tab_DEP_el.COOR_Y[x] for x in indices]
+       tab_coordZ     = [tab_DEP_el.COOR_Z[x] for x in indices]
+       for i_maille_courante in range(len(tab_maille)):
+           indic = [tab_noeud.index(tab_noeud[i_maille_courante*4+x]) for x in range(4)]
+           Coord_int = Coord_int + [(tab_coordX[indic[x]],tab_coordY[indic[x]],tab_coordZ[indic[x]]) for x in indic]
+
+       # Si le type est grandes déformations alors il faut tenir compte de la déformée lors du calcul de la surface
+       if type_def=='GRAND':
+         l_ord = list(set(tab_DEP_el_ord))
+         for it in range(num_ord):
+               Def_int   = []
+               indices = [tab_DEP_el_ord.index(l_ord[it],x) for x in range(tab_DEP_el_ord.index(l_ord[it]),tab_DEP_el_ord.index(l_ord[it])+tab_DEP_el_ord.count(l_ord[it]))]
+               tab_defoX = [tab_DEP_el.DX[x] for x in indices]
+               tab_defoY = [tab_DEP_el.DY[x] for x in indices]
+               tab_defoZ = [tab_DEP_el.DZ[x] for x in indices]
+               surface_maille = 0.0
+               for i_maille_courante in range(len(tab_maille)):
+                   indic = [tab_noeud.index(tab_noeud[i_maille_courante*4+x]) for x in range(4)]
+                   Def_int   = Def_int   + [(tab_defoX[indic[x]], tab_defoY[indic[x]], tab_defoZ[indic[x]])  for x in indic]
+                   surface_maille = surface_maille + CalSurf(Coord_int,Def_int)
+               tmp_mesure[it] = mesure[Copeau_k][it] + surface_maille
+         mesure[Copeau_k] = tmp_mesure
+       else:
+         mesure[Copeau_k] = mesure[Copeau_k] + CalSurf(Coord_int,[tuple(NP.zeros(3))]*len(tab_noeud)) 
+            
+       # Calcul de la distance du copeau au fond d'entaille
+       coord_nds = [] 
+       dist_moy=0. 
+       for noeud_courant in maya.GROUPENO.get()['Nds_Delt'.ljust(8)]:
+            coord_nds = (COOR[(noeud_courant-1)*3],COOR[(noeud_courant-1)*3+1],COOR[(noeud_courant-1)*3+2])
+            dist_moy  = dist_moy + CalDist(coord_nds,NP.zeros(3),coord_fond,[tuple(NP.zeros(3))]*len(coord_fond))
+
+       l_ep_copeaux_tot_3D.append(dist_moy/len(maya.GROUPENO.get()['Nds_Delt'.ljust(8)]))
+       
+   Supr_mano(maya,mon_nom)
+   
+   return mesure, l_ep_copeaux_tot_3D
+
+def Coord_Recup(noeud_courant,maille_courante,resu):
+   # Utilisation de POST_RELEVE_T pour extraire des nouvelles coordonnées des
+   # noeuds des copeaux appartenant à la surface de symétrie
+
+   from Accas import _F
+   from Utilitai.Table        import Table
+   dicarg =[]
+   if maille_courante :
+       dicarg.append(_F(OPERATION='EXTRACTION',RESULTAT=resu, INTITULE='DEP_el',
+                    TOUT_CMP='OUI',NOM_CHAM='DEPL', TOUT_ORDRE='OUI', 
+                    NOEUD=noeud_courant,MAILLE=maille_courante))
+   else:
+       dicarg.append(_F(OPERATION='EXTRACTION',RESULTAT=resu, INTITULE='DEP_el',
+                    TOUT_CMP='OUI',NOM_CHAM='DEPL',  TOUT_ORDRE='OUI', 
+                    NOEUD=noeud_courant))
+
+   DEP_el_i = POST_RELEVE_T(ACTION=dicarg)
+   tab_DEP_el = DEP_el_i.EXTR_TABLE()
+   DETRUIRE(CONCEPT=_F(NOM=DEP_el_i),INFO=1);  
+   return tab_DEP_el
+
+def Supr_mano(maya,mon_nom):
+
+      from Accas import _F
+      dicno=[];
+      dicno.append(_F(NOM = 'Cop_Pl'));
+      dicno.append(_F(NOM = mon_nom));
+      dicno.append(_F(NOM = 'Mai_Pla1'));
+      dicno.append(_F(NOM = 'Mai_Pla2'));
+      dicno.append(_F(NOM = 'Nds_Plan'));
+      dicno.append(_F(NOM = 'Nds_Fond'));
+      dicno.append(_F(NOM = 'Nds_Floc'));
+      dicno.append(_F(NOM = 'Nds_Delt'));
+      dicma=[];
+      dicma.append(_F(NOM = mon_nom));
+      dicma.append(_F(NOM = 'Mai_Pla1'));
+      dicma.append(_F(NOM = 'Mai_Pla2'));
+      DEFI_GROUP(reuse =maya, MAILLAGE=maya, DETR_GROUP_NO=dicno, DETR_GROUP_MA=dicma);
index 2cf042f8872b82f5151a1713ab62a249f01af71a..a90171ab6cebf5be23d92b694e461b4e31d8d162 100644 (file)
@@ -1,23 +1,29 @@
-#@ MODIF post_k1_k2_k3_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF post_k1_k2_k3_ops Macro  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
+
+
+#---------------------------------------------------------------------------------------------------------------
+#                 FONCTIONS UTILITAIRES
+#---------------------------------------------------------------------------------------------------------------
+
 def veri_tab(tab,nom,ndim) :
    from Utilitai.Utmess     import  UTMESS
    macro = 'POST_K1_K2_K3'
@@ -32,26 +38,41 @@ def veri_tab(tab,nom,ndim) :
           label='COOR_Z'
           UTMESS('F','RUPTURE0_2',valk=[label,nom])
 
-#TODO prefer use numpy.cross
-def cross_product(a,b):
-    cross = [0]*3
-    cross[0] = a[1]*b[2]-a[2]*b[1]
-    cross[1] = a[2]*b[0]-a[0]*b[2]
-    cross[2] = a[0]*b[1]-a[1]*b[0]
-    return cross
+
+#---------------------------------------------------------------------------------------------------------------
+
+# def cross_product(a,b):
+#     cross = [0]*3
+#     cross[0] = a[1]*b[2]-a[2]*b[1]
+#     cross[1] = a[2]*b[0]-a[0]*b[2]
+#     cross[2] = a[0]*b[1]-a[1]*b[0]
+#     return cross
+#---------------------------------------------------------------------------------------------------------------
+
+def normalize(v):
+    import numpy as NP
+    norm = NP.sqrt(v[0]**2+v[1]**2+v[2]**2)
+    return v/norm
+
+#---------------------------------------------------------------------------------------------------------------
 
 def complete(Tab):
     n = len(Tab)
     for i in range(n) :
       if Tab[i]==None : Tab[i] = 0.
     return Tab
+
  
+#---------------------------------------------------------------------------------------------------------------
+# sam : la methode average(t) ne repond-elle pas au besoin ?
 def moy(t):
     m = 0
     for value in t :
       m += value
     return (m/len(t))
 
+#---------------------------------------------------------------------------------------------------------------
+
 def InterpolFondFiss(s0, Coorfo) :
 # Interpolation des points du fond de fissure (xfem)
 # s0     = abscisse curviligne du point considere 
@@ -74,28 +95,1541 @@ def InterpolFondFiss(s0, Coorfo) :
    xyz[3] = s0
    return xyz
 
-def InterpolBaseFiss(s0, Basefo, Coorfo) :
-# Interpolation de la base locale en fond de fissure
-# s0     = abscisse curviligne du point considere     
-# Basefo = base locale du fond (VNx,VNy,VNz,VPx,VPy,VPz)
-# Coorfo = Coordonnees et abscisses du fond (extrait de la sd fiss_xfem)
-# en sortie : VPVNi = base locale au point considere (6 coordonnes)
-   n = len(Coorfo) / 4
-   if ( s0 < Coorfo[3] )  :
-     VPVNi =  Basefo[0:6]
-     return VPVNi
-   if ( s0 > Coorfo[-1]  ) :
-     VPVNi = [Basefo[i] for i in range(-6,0)] 
-     return VPVNi
-   i = 1
-   while s0 > Coorfo[4*i+3]:
-      i = i+1
-   VPVNi = [0.]*6
-   for k in range(6) :
-      VPVNi[k] = (s0-Coorfo[4*(i-1)+3]) * (Basefo[6*i+k]-Basefo[6*(i-1)+k]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Basefo[6*(i-1)+k]
-   return VPVNi
-    
-     
+#---------------------------------------------------------------------------------------------------------------
+
+def InterpolBaseFiss(s0, Basefo, Coorfo) :
+# Interpolation de la base locale en fond de fissure
+# s0     = abscisse curviligne du point considere     
+# Basefo = base locale du fond (VNx,VNy,VNz,VPx,VPy,VPz)
+# Coorfo = Coordonnees et abscisses du fond (extrait de la sd fiss_xfem)
+# en sortie : VPVNi = base locale au point considere (6 coordonnes)
+   n = len(Coorfo) / 4
+   if ( s0 < Coorfo[3] )  :
+     VPVNi =  Basefo[0:6]
+     return VPVNi
+   if ( s0 > Coorfo[-1]  ) :
+     VPVNi = [Basefo[i] for i in range(-6,0)] 
+     return VPVNi
+   i = 1
+   while s0 > Coorfo[4*i+3]:
+      i = i+1
+   VPVNi = [0.]*6
+   for k in range(6) :
+      VPVNi[k] = (s0-Coorfo[4*(i-1)+3]) * (Basefo[6*i+k]-Basefo[6*(i-1)+k]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Basefo[6*(i-1)+k]
+   return VPVNi
+
+#---------------------------------------------------------------------------------------------------------------
+
+def verif_type_fond_fiss(ndim,FOND_FISS) :
+   from Utilitai.Utmess     import  UTMESS
+   if ndim == 3 :
+      Typ = FOND_FISS.FOND_______TYPE.get()
+#     attention : Typ est un tuple contenant une seule valeur
+      if Typ[0].rstrip() != 'SEG2' and Typ[0].rstrip() != 'SEG3' :
+         UTMESS('F','RUPTURE0_12')
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_noeud_fond_fiss(FOND_FISS) :
+   """ retourne la liste des noeuds de FOND_FISS"""
+   import string as S
+   from Utilitai.Utmess     import  UTMESS
+   Lnoff = FOND_FISS.FOND_______NOEU.get()
+   if Lnoff == None :
+#     Cas double fond de fissure : par convention les noeuds sont ceux de fond_inf
+      Lnoff = FOND_FISS.FONDINF____NOEU.get()
+      if Lnoff == None : UTMESS('F','RUPTURE0_11')
+   Lnoff = map(S.rstrip,Lnoff)
+   return Lnoff
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_noeud_a_calculer(Lnoff,ndim,FOND_FISS,MAILLAGE,EnumTypes,args) :
+      """ retourne la liste des noeuds de FOND_FISS a calculer"""
+      import string as S
+      from Utilitai.Utmess     import  UTMESS
+      NOEUD          = args['NOEUD']
+      SANS_NOEUD     = args['SANS_NOEUD']
+      GROUP_NO       = args['GROUP_NO']
+      SANS_GROUP_NO  = args['SANS_GROUP_NO']
+      TOUT           = args['TOUT']
+
+      if ndim == 2 :
+
+        Lnocal = Lnoff
+        assert (len(Lnocal) == 1)
+
+      elif ndim == 3 :
+
+#        determination du pas de parcours des noeuds : 1 (tous les noeuds) ou 2 (un noeud sur 2)
+         Typ = FOND_FISS.FOND_______TYPE.get()
+         Typ = Typ[0].rstrip()
+         if (Typ == 'SEG2') or (Typ =='SEG3' and TOUT == 'OUI') :
+            pas = 1
+         elif (Typ =='SEG3') : 
+            pas = 2
+
+#        construction de la liste des noeuds "AVEC" et des noeuds "SANS"
+         NO_SANS = []
+         NO_AVEC = []
+         if GROUP_NO!=None :
+            collgrno = MAILLAGE.GROUPENO.get()
+            cnom     = MAILLAGE.NOMNOE.get()
+            if type(GROUP_NO) not in EnumTypes :
+               GROUP_NO = (GROUP_NO,)
+            for m in xrange(len(GROUP_NO)) :
+               ngrno=GROUP_NO[m].ljust(8).upper()
+               if ngrno not in collgrno.keys() :
+                  UTMESS('F','RUPTURE0_13',valk=ngrno)
+               for i in xrange(len(collgrno[ngrno])) :
+                  NO_AVEC.append(cnom[collgrno[ngrno][i]-1])
+            NO_AVEC = map(S.rstrip,NO_AVEC)
+         if NOEUD!=None : 
+            if type(NOEUD) not in EnumTypes :
+               NO_AVEC = (NOEUD,)
+            else :
+               NO_AVEC = NOEUD
+         if SANS_GROUP_NO!=None :
+            collgrno = MAILLAGE.GROUPENO.get()
+            cnom     = MAILLAGE.NOMNOE.get()
+            if type(SANS_GROUP_NO) not in EnumTypes :
+               SANS_GROUP_NO = (SANS_GROUP_NO,)
+            for m in xrange(len(SANS_GROUP_NO)) :
+               ngrno=SANS_GROUP_NO[m].ljust(8).upper()
+               if ngrno not in collgrno.keys() :
+                  UTMESS('F','RUPTURE0_13',valk=ngrno)
+               for i in xrange(len(collgrno[ngrno])) :
+                  NO_SANS.append(cnom[collgrno[ngrno][i]-1])
+            NO_SANS= map(S.rstrip,NO_SANS)
+         if SANS_NOEUD!=None : 
+            if type(SANS_NOEUD) not in EnumTypes :
+               NO_SANS = (SANS_NOEUD,)
+            else :
+               NO_SANS = SANS_NOEUD
+
+#        verification que les noeuds "AVEC" et "SANS" appartiennent au fond de fissure
+         set_tmp = set(NO_AVEC) - set(Lnoff)
+         if set_tmp :
+            UTMESS('F','RUPTURE0_15',valk=list(set_tmp)[0])
+         set_tmp = set(NO_SANS) - set(Lnoff)
+         if set_tmp :
+            UTMESS('F','RUPTURE0_15',valk=list(set_tmp)[0])
+         
+#        creation de Lnocal 
+         if NO_AVEC :
+            Lnocal = tuple( NO_AVEC )
+         elif NO_SANS :
+            Lnocal = tuple( set(Lnoff) - set(NO_SANS) )
+         else :
+            Lnocal = tuple(Lnoff)
+      
+      return Lnocal
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_coor_libre(self,Lnoff,RESULTAT,ndim):
+         """ retourne les coordonnes des noeuds de FOND_FISS en dictionnaire"""
+
+         import numpy as NP
+         from Accas import _F
+         import string as S
+
+         POST_RELEVE_T    = self.get_cmd('POST_RELEVE_T')
+         DETRUIRE         = self.get_cmd('DETRUIRE')
+
+         __NCOFON=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds du fond',
+                                          NOEUD=Lnoff,
+                                          RESULTAT=RESULTAT,
+                                          NOM_CHAM='DEPL',
+                                          NUME_ORDRE=1,
+                                          NOM_CMP=('DX',),
+                                          OPERATION='EXTRACTION',),);
+
+         tcoorf=__NCOFON.EXTR_TABLE()
+         DETRUIRE(CONCEPT=_F(NOM=__NCOFON),INFO=1) 
+         nbt = len(tcoorf['NOEUD'].values()['NOEUD'])
+         xs=NP.array(tcoorf['COOR_X'].values()['COOR_X'][:nbt])
+         ys=NP.array(tcoorf['COOR_Y'].values()['COOR_Y'][:nbt])
+         if ndim==2 :
+            zs=NP.zeros(nbt,)
+         elif ndim==3 :
+            zs=NP.array(tcoorf['COOR_Z'].values()['COOR_Z'][:nbt])
+         ns = tcoorf['NOEUD'].values()['NOEUD'][:nbt]
+         ns = map(S.rstrip,ns)
+         l_coorf =  [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
+         l_coorf = [(i[0],i[1:]) for i in l_coorf]
+         return dict(l_coorf) 
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_Plev(self,ListmaS,RESULTAT):
+         """ retourne les coordonnes d'un point quelconque des levres pr determination sens de propagation"""
+         import numpy as NP
+         from Accas import _F
+         import aster
+         POST_RELEVE_T    = self.get_cmd('POST_RELEVE_T')
+         DETRUIRE         = self.get_cmd('DETRUIRE')
+
+         iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',RESULTAT.nom,'RESULTAT')
+         MAILLAGE = self.get_concept(nom_ma.strip())
+
+         cmail=MAILLAGE.NOMMAI.get()
+         for i in range(len(cmail)) :
+             if cmail[i] == ListmaS[0] :
+                break
+         colcnx=MAILLAGE.CONNEX.get()
+         cnom = MAILLAGE.NOMNOE.get()
+         NO_TMP = []
+         for k in range(len(colcnx[i+1])) :
+            NO_TMP.append(cnom[colcnx[i+1][k]-1])
+
+         __NCOLEV=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees pt levre',
+                                          NOEUD = NO_TMP,
+                                          RESULTAT=RESULTAT,
+                                          NOM_CHAM='DEPL',
+                                          NUME_ORDRE=1,
+                                          NOM_CMP=('DX',),
+                                          OPERATION='EXTRACTION',),);
+                                          
+         tcoorl=__NCOLEV.EXTR_TABLE()
+         DETRUIRE(CONCEPT=_F(NOM=__NCOLEV),INFO=1) 
+         nbt = len(tcoorl['NOEUD'].values()['NOEUD'])
+         xl=moy(tcoorl['COOR_X'].values()['COOR_X'][:nbt])
+         yl=moy(tcoorl['COOR_Y'].values()['COOR_Y'][:nbt])
+         zl=moy(tcoorl['COOR_Z'].values()['COOR_Z'][:nbt])
+         return NP.array([xl, yl, zl])
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_normale(VECT_K1,Nnoff,ndim,DTANOR,DTANEX,d_coorf,Lnoff,Plev) :
+      """ retourne les normales (direct de propa) en chaque point du fond,
+          les abscisses curvilignes et le sens de la tangete (a eclaircir)"""
+
+      import numpy as NP
+
+      v1 =  NP.array(VECT_K1)
+      VN = [None]*Nnoff
+      absfon = [0,]
+      if ndim == 3 :
+         Pfon2 = NP.array([d_coorf[Lnoff[0]][0],d_coorf[Lnoff[0]][1],d_coorf[Lnoff[0]][2]])
+         VLori = Pfon2 - Plev
+         if DTANOR != None :
+            VN[0] = NP.array(DTANOR)
+         else :
+            Pfon3 = NP.array([d_coorf[Lnoff[1]][0],d_coorf[Lnoff[1]][1],d_coorf[Lnoff[1]][2]])
+            VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+            VN[0] = NP.array(NP.cross(VT,v1))
+         for i in range(1,Nnoff-1):
+            Pfon1 = NP.array([d_coorf[Lnoff[i-1]][0],d_coorf[Lnoff[i-1]][1],d_coorf[Lnoff[i-1]][2]])
+            Pfon2 = NP.array([d_coorf[Lnoff[i]][0],d_coorf[Lnoff[i]][1],d_coorf[Lnoff[i]][2]])
+            Pfon3 = NP.array([d_coorf[Lnoff[i+1]][0],d_coorf[Lnoff[i+1]][1],d_coorf[Lnoff[i+1]][2]])
+            absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+            absfon.append(absf)
+            VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+            VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+            VN[i] = NP.array(NP.cross(VT,v1)) 
+            VN[i] = VN[i]/NP.sqrt(NP.dot(NP.transpose(VN[i]),VN[i]))
+         i = Nnoff-1
+         Pfon1 = NP.array([d_coorf[Lnoff[i-1]][0],d_coorf[Lnoff[i-1]][1],d_coorf[Lnoff[i-1]][2]])
+         Pfon2 = NP.array([d_coorf[Lnoff[i]][0],d_coorf[Lnoff[i]][1],d_coorf[Lnoff[i]][2]])
+         VLextr = Pfon2 - Plev
+         absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+         absfon.append(absf)
+         if DTANEX != None :
+            VN[i] = NP.array(DTANEX)
+         else :
+            VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+            VN[i] = NP.array(NP.cross(VT,v1))
+         dicoF = dict([(Lnoff[i],absfon[i]) for i in range(Nnoff)])  
+         dicVN = dict([(Lnoff[i],VN[i]) for i in range(Nnoff)])
+#        Sens de la tangente       
+         v = NP.cross(VLori,VLextr)
+         sens = NP.sign(NP.dot(NP.transpose(v),v1))
+      elif ndim ==2 :
+         VT = NP.array([0.,0.,1.])
+         VN = NP.array(NP.cross(v1,VT))
+         dicVN = dict([(Lnoff[0],VN)])
+         Pfon = NP.array([d_coorf[Lnoff[0]][0],d_coorf[Lnoff[0]][1],d_coorf[Lnoff[0]][2]])
+         VLori = Pfon - Plev
+         sens = NP.sign(NP.dot(NP.transpose(VN),VLori))
+      return (dicVN, dicoF, sens)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_tab_dep(self,Lnocal,Nnocal,Nnoff,d_coorf,Lnoff,DTANOR,DTANEX,ABSC_CURV_MAXI,dicVN,sens,RESULTAT,MODEL,
+                ListmaS,ListmaI,NB_NOEUD_COUPE,dmax,SYME_CHAR) :
+      """ retourne les tables des deplacements sup et inf pour les noeuds perpendiculaires pour
+      tous les points du fond de fissure"""
+
+      from Accas import _F
+      import numpy as NP
+
+      MACR_LIGN_COUPE  = self.get_cmd('MACR_LIGN_COUPE')
+      
+      mcfact=[]
+      for i in xrange(Nnocal):
+         Porig = NP.array(d_coorf[Lnocal[i]] )
+         if Lnocal[i]==Lnoff[0] and DTANOR : 
+            Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnocal[i]]               
+         elif Lnocal[i]==Lnoff[Nnoff-1] and DTANEX :
+            Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnocal[i]]               
+         else :
+            Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnocal[i]]*sens
+
+         mcfact.append(_F(NB_POINTS=NB_NOEUD_COUPE,
+                          COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                          TYPE='SEGMENT',
+                          COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                          DISTANCE_MAX=dmax),)
+
+      __TlibS = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
+                              NOM_CHAM='DEPL',
+                              MODELE=MODEL, 
+                              VIS_A_VIS=_F(MAILLE_1 = ListmaS),
+                              LIGN_COUPE=mcfact)
+
+      if SYME_CHAR=='SANS':
+         __TlibI = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
+                                 NOM_CHAM='DEPL',
+                                 MODELE=MODEL,
+                                 VIS_A_VIS=_F(MAILLE_1 = ListmaI),
+                                 LIGN_COUPE=mcfact)
+
+      return (__TlibS.EXTR_TABLE(),__TlibI.EXTR_TABLE())
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_dico_levres(lev,FOND_FISS,ndim,Lnoff,Nnoff):
+      "retourne ???"""
+      import string as S
+      from Utilitai.Utmess     import  UTMESS
+      if lev == 'sup' :
+         Nnorm = FOND_FISS.SUPNORM____NOEU.get()
+         if not Nnorm : 
+            UTMESS('F','RUPTURE0_19')
+      elif lev == 'inf' :
+         Nnorm = FOND_FISS.INFNORM____NOEU.get()
+         if not Nnorm : 
+            UTMESS('F','RUPTURE0_20')
+      Nnorm = map(S.rstrip,Nnorm)
+#     pourquoi modifie t-on Nnoff dans ce cas, alors que rien n'est fait pour les maillages libres ?
+      if Lnoff[0]==Lnoff[-1] and ndim == 3 :
+         Nnoff=Nnoff-1  # Cas fond de fissure ferme
+      Nnorm = [[Lnoff[i],Nnorm[i*20:(i+1)*20]] for i in range(0,Nnoff)]
+      Nnorm = [(i[0],i[1][0:]) for i in Nnorm]
+      return dict(Nnorm)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_coor_regle(self,RESULTAT,ndim,Lnoff,Lnocal,dicoS,SYME_CHAR,dicoI,TABL_DEPL_SUP,TABL_DEPL_INF):
+      """retourne le dictionnaires des coordonnees des noeuds des lèvres pour les maillages regles"""
+      import numpy as NP
+      import string as S
+      import copy
+      from Accas import _F
+
+      POST_RELEVE_T    = self.get_cmd('POST_RELEVE_T')
+      DETRUIRE         = self.get_cmd('DETRUIRE')
+      CALC_TABLE       = self.get_cmd('CALC_TABLE')
+
+      if RESULTAT :
+#        a eclaircir
+         Ltot = copy.copy(Lnoff)
+         for ino in Lnocal :
+            for k in xrange(0,20) :
+               if dicoS[ino][k] !='':
+                  Ltot.append(dicoS[ino][k])
+         if SYME_CHAR=='SANS':
+            for ino in Lnocal :
+               for k in xrange(0,20) :
+                  if dicoI[ino][k] !='':
+                     Ltot.append(dicoI[ino][k])
+         Ltot=dict([(i,0) for i in Ltot]).keys()
+
+         __NCOOR=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds des levres',
+                                         NOEUD=Ltot,
+                                         RESULTAT=RESULTAT,
+                                         NOM_CHAM='DEPL',
+                                         NUME_ORDRE=1,
+                                         NOM_CMP=('DX',),
+                                         OPERATION='EXTRACTION',),);
+
+         tcoor=__NCOOR.EXTR_TABLE()
+         DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)  
+      else :  
+         if SYME_CHAR=='SANS':
+            __NCOOR=CALC_TABLE(TABLE=TABL_DEPL_SUP,
+                               ACTION=_F(OPERATION = 'COMB',
+                                         NOM_PARA='NOEUD',
+                                         TABLE=TABL_DEPL_INF,))
+            tcoor=__NCOOR.EXTR_TABLE()
+            DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)  
+         else :
+            tcoor=TABL_DEPL_SUP.EXTR_TABLE()
+      nbt = len(tcoor['NOEUD'].values()['NOEUD'])
+      xs=NP.array(tcoor['COOR_X'].values()['COOR_X'][:nbt])
+      ys=NP.array(tcoor['COOR_Y'].values()['COOR_Y'][:nbt])
+      if ndim==2 :
+         zs=NP.zeros(nbt)
+      elif ndim==3 :
+         zs=NP.array(tcoor['COOR_Z'].values()['COOR_Z'][:nbt])
+      ns = tcoor['NOEUD'].values()['NOEUD'][:nbt]
+      ns = map(S.rstrip,ns)
+      l_coor =  [[ns[i],xs[i],ys[i],zs[i]] for i in xrange(nbt)]
+      l_coor = [(i[0],i[1:]) for i in l_coor]     
+      return dict(l_coor)
+#---------------------------------------------------------------------------------------------------------------
+
+def get_absfon(Lnoff,Nnoff,d_coor):
+      """ retourne le dictionnaire des Abscisses curvilignes du fond"""
+      import numpy as NP
+      absfon = [0,]
+      for i in xrange(Nnoff-1) :
+         Pfon1 = NP.array([d_coor[Lnoff[i]][0],d_coor[Lnoff[i]][1],d_coor[Lnoff[i]][2]])
+         Pfon2 = NP.array([d_coor[Lnoff[i+1]][0],d_coor[Lnoff[i+1]][1],d_coor[Lnoff[i+1]][2]])
+         absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i]
+         absfon.append(absf)
+      return dict([(Lnoff[i],absfon[i]) for i in xrange(Nnoff)])
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_noeuds_perp_regle(Lnocal,d_coor,dicoS,dicoI,Lnoff,PREC_VIS_A_VIS,ABSC_CURV_MAXI,SYME_CHAR,rmprec,precn):
+      """retourne la liste des noeuds du fond (encore ?), la liste des listes des noeuds perpendiculaires"""
+      import numpy as NP
+      from Utilitai.Utmess     import  UTMESS
+
+      NBTRLS = 0
+      NBTRLI = 0
+      Lnosup = [None]*len(Lnocal)
+      Lnoinf = [None]*len(Lnocal)
+      Nbnofo = 0
+      Lnofon = []
+      for ino in Lnocal :
+         Pfon = NP.array([d_coor[ino][0],d_coor[ino][1],d_coor[ino][2]])
+         Tmpsup = []
+         Tmpinf = []
+         itots = 0
+         itoti = 0
+         NBTRLS = 0
+         NBTRLI = 0
+         for k in xrange(20) :
+            if dicoS[ino][k] !='':
+               itots = itots +1
+               Nsup =  dicoS[ino][k]
+               Psup = NP.array([d_coor[Nsup][0],d_coor[Nsup][1],d_coor[Nsup][2]])
+               abss = NP.sqrt(NP.dot(NP.transpose(Pfon-Psup),Pfon-Psup))
+               if abss<rmprec :
+                  NBTRLS = NBTRLS +1
+                  Tmpsup.append(dicoS[ino][k])
+            if SYME_CHAR=='SANS':
+               if dicoI[ino][k] !='':
+                  itoti = itoti +1
+                  Ninf =  dicoI[ino][k]
+                  Pinf = NP.array([d_coor[Ninf][0],d_coor[Ninf][1],d_coor[Ninf][2]])
+                  absi = NP.sqrt(NP.dot(NP.transpose(Pfon-Pinf),Pfon-Pinf))
+#                 On verifie que les noeuds sont en vis a vis
+                  if abss<rmprec :
+                     dist = NP.sqrt(NP.dot(NP.transpose(Psup-Pinf),Psup-Pinf))
+                     if dist>precn : 
+                        UTMESS('A','RUPTURE0_21',valk=ino)
+                     else :
+                        NBTRLI = NBTRLI +1
+                        Tmpinf.append(dicoI[ino][k])
+#        On verifie qu il y a assez de noeuds
+         if NBTRLS < 3 : 
+            UTMESS('A+','RUPTURE0_22',valk=ino)
+            if ino==Lnoff[0] or ino==Lnoff[-1]:
+               UTMESS('A+','RUPTURE0_23')
+            if itots<3 :
+               UTMESS('A','RUPTURE0_24')
+            else :
+               UTMESS('A','RUPTURE0_25')
+         elif (SYME_CHAR=='SANS') and (NBTRLI < 3) :
+            UTMESS('A+','RUPTURE0_26',valk=ino)
+            if ino==Lnoff[0] or ino==Lnoff[-1]:
+               UTMESS('A+','RUPTURE0_23')
+            if itoti<3 :
+               UTMESS('A','RUPTURE0_24')
+            else :
+               UTMESS('A','RUPTURE0_25')
+         else :
+            Lnosup[Nbnofo] = Tmpsup
+            if SYME_CHAR=='SANS' :
+               Lnoinf[Nbnofo] = Tmpinf
+            Lnofon.append(ino)
+            Nbnofo = Nbnofo+1
+      if Nbnofo == 0 :
+         UTMESS('F','RUPTURE0_30')
+
+      return (Lnofon, Lnosup, Lnoinf) 
+
+#---------------------------------------------------------------------------------------------------------------
+
+def verif_resxfem(self,RESULTAT) :
+      """ verifie que le resultat est bien compatible avec X-FEM et renvoie xcont et MODEL"""
+
+      import aster
+      from Utilitai.Utmess     import  UTMESS
+
+      iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+      n_modele=n_modele.rstrip()
+      if len(n_modele)==0 :
+         UTMESS('F','RUPTURE0_18')
+      MODEL = self.get_concept(n_modele)
+      xcont = MODEL.xfem.XFEM_CONT.get()
+      return (xcont,MODEL)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_resxfem(self,xcont,RESULTAT,MODELISATION,MODEL) :
+      """ retourne le resultat """
+      from Accas import _F
+      import aster
+
+      AFFE_MODELE      = self.get_cmd('AFFE_MODELE')
+      PROJ_CHAMP       = self.get_cmd('PROJ_CHAMP')
+      DETRUIRE         = self.get_cmd('DETRUIRE')
+      CREA_MAILLAGE    = self.get_cmd('CREA_MAILLAGE')
+
+      iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',RESULTAT.nom,'RESULTAT')
+      if xcont[0] == 0 :
+         __RESX = RESULTAT
+
+#     XFEM + contact : il faut reprojeter sur le maillage lineaire
+      elif xcont[0] != 0 :
+         MAILL1 = self.get_concept(nom_ma.strip())
+         MAILL2 = CREA_MAILLAGE(MAILLAGE = MAILL1,
+                               QUAD_LINE =_F(TOUT = 'OUI',),);
+
+         __MODLINE=AFFE_MODELE(MAILLAGE=MAILL2,
+                               AFFE=(_F(TOUT='OUI',
+                                        PHENOMENE='MECANIQUE',
+                                        MODELISATION=MODELISATION,),),); 
+
+         __RESX=PROJ_CHAMP(METHODE='COLLOCATION',
+                           TYPE_CHAM='NOEU',
+                           NOM_CHAM='DEPL',
+                           RESULTAT=RESULTAT,
+                           MODELE_1=MODEL,
+                           MODELE_2=__MODLINE, );   
+
+
+#        Rq : on ne peut pas détruire __MODLINE ici car on en a besoin lors du MACR_LIGN_COUP qui suivra
+      
+      return __RESX
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_coor_xfem(args,FISSURE,ndim):
+      """retourne la liste des coordonnees des points du fond, la base locale en fond et le nombre de points"""
+
+      from Utilitai.Utmess     import  UTMESS
+   
+      Listfo = FISSURE.FONDFISS.get()
+      Basefo = FISSURE.BASEFOND.get()
+      NB_POINT_FOND = args['NB_POINT_FOND']
+
+#     Traitement du cas fond multiple
+      Fissmult = FISSURE.FONDMULT.get()
+      Nbfiss = len(Fissmult)/2
+      Numfiss = args['NUME_FOND']
+      if  Numfiss <= Nbfiss and Nbfiss > 1 :
+         Ptinit = Fissmult[2*(Numfiss-1)]
+         Ptfin = Fissmult[2*(Numfiss-1)+1]
+         Listfo2 = Listfo[((Ptinit-1)*4):(Ptfin*4)]
+         Listfo = Listfo2
+         Basefo2 = Basefo[((Ptinit-1)*(2*ndim)):(Ptfin*(2*ndim))]
+         Basefo = Basefo2
+      elif  Numfiss > Nbfiss :
+         UTMESS('F','RUPTURE1_38',vali=[Nbfiss,Numfiss])
+     
+      if NB_POINT_FOND != None and ndim == 3 :
+         Nnoff = NB_POINT_FOND
+         absmax = Listfo[-1]
+         Coorfo = [None]*4*Nnoff
+         Vpropa = [None]*3*Nnoff
+         for i in xrange(Nnoff) :
+            absci = i*absmax/(Nnoff-1)
+            Coorfo[(4*i):(4*(i+1))] = InterpolFondFiss(absci, Listfo)
+            Vpropa[(6*i):(6*(i+1))] = InterpolBaseFiss(absci,Basefo, Listfo)
+      else :
+         Coorfo = Listfo
+         Vpropa = Basefo
+         Nnoff = len(Coorfo)/4
+
+      return (Coorfo, Vpropa, Nnoff)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_direction_xfem(Nnoff,Vpropa,Coorfo,VECT_K1,DTAN_ORIG,DTAN_EXTR,ndim) :
+      """retourne la dirction de propagation, la normale a la surface de la fissure,
+      et l'abscisse curviligne en chaque point du fond"""
+      import numpy as NP
+      from Utilitai.Utmess     import  UTMESS
+
+      VP = [None]*Nnoff
+      VN = [None]*Nnoff
+      absfon = [0,]
+
+#     Cas fissure non necessairement plane     
+      if VECT_K1 == None :
+        i = 0
+        if ndim == 3 :
+           if DTAN_ORIG != None :
+              VP[0] = NP.array(DTAN_ORIG)
+              VP[0] = VP[0]/NP.sqrt(VP[0][0]**2+VP[0][1]**2+VP[0][2]**2)
+              VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+              verif = NP.dot(NP.transpose(VP[0]),VN[0]) 
+              if abs(verif) > 0.01:
+                 UTMESS('A','RUPTURE1_33',valr=[VN[0][0],VN[0][1],VN[0][2]])
+           else :
+              VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+              VP[0] = NP.array([Vpropa[3+0],Vpropa[3+1],Vpropa[3+2]])
+           for i in xrange(1,Nnoff-1):
+              absf = Coorfo[4*i+3]
+              absfon.append(absf)
+              VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+              VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+              verif = NP.dot(NP.transpose(VN[i]),VN[i-1]) 
+              if abs(verif) < 0.98:
+                UTMESS('A','RUPTURE1_35',vali=[i-1,i])
+           i = Nnoff-1
+           absf =  Coorfo[4*i+3]
+           absfon.append(absf)
+           if DTAN_EXTR != None :
+              VP[i] = NP.array(DTAN_EXTR)
+              VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+              verif = NP.dot(NP.transpose(VP[i]),VN[0]) 
+              if abs(verif) > 0.01:
+                 UTMESS('A','RUPTURE1_34',valr=[VN[i][0],VN[i][1],VN[i][2]])
+           else :
+              VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+              VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+        elif ndim == 2 : 
+           for i in range(0,Nnoff):
+              VP[i] = NP.array([Vpropa[2+4*i],Vpropa[3+4*i],0.])
+              VN[i] = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+
+#     Cas fissure plane (VECT_K1 donne)
+      if VECT_K1 != None :
+         v1 =  NP.array(VECT_K1)
+         v1  = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
+         v1 =  NP.array(VECT_K1)
+         i = 0
+         if ndim == 3 :
+#           Sens du vecteur VECT_K1       
+            v1x =NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+            verif = NP.dot(NP.transpose(v1),v1x) 
+            if verif < 0 :
+               v1 = -v1
+            VN = [v1]*Nnoff
+            if DTAN_ORIG != None :
+               VP[i] = NP.array(DTAN_ORIG)
+               VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+               verif = NP.dot(NP.transpose(VP[i]),VN[0]) 
+               if abs(verif) > 0.01:
+                  UTMESS('A','RUPTURE1_36')
+            else :
+               Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+               Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
+               VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+               VP[0] = NP.array(NP.cross(VT,v1))
+               VNi = NP.array([Vpropa[3],Vpropa[4],Vpropa[5]])
+               verif = NP.dot(NP.transpose(VP[i]),VNi) 
+               if abs(verif) < 0.99:
+                  vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+                  UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+            for i in range(1,Nnoff-1):
+               Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
+               Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+               Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
+               absf =  Coorfo[4*i+3]
+               absfon.append(absf)
+               VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+               VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+               VP[i] = NP.array(NP.cross(VT,v1)) 
+               VP[i] = VP[i]/NP.sqrt(NP.dot(NP.transpose(VP[i]),VP[i]))
+               VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+               verif = NP.dot(NP.transpose(VN[i]),VNi) 
+               if abs(verif) < 0.99:
+                  vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+                  UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+            i = Nnoff-1
+            Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
+            Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+            absf =  Coorfo[4*i+3]
+            absfon.append(absf)
+            if DTAN_EXTR != None :
+               VP[i] = NP.array(DTAN_EXTR)
+               VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+               verif = NP.dot(NP.transpose(VP[i]),VN[i]) 
+               if abs(verif) > 0.01:
+                  UTMESS('A','RUPTURE1_37')
+            else :
+               VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+               VP[i] = NP.array(NP.cross(VT,v1))
+               VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+               verif = NP.dot(NP.transpose(VN[i]),VNi) 
+               if abs(verif) < 0.99 :
+                  vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+                  UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+
+         elif ndim == 2 :  
+
+           VT = NP.array([0.,0.,1.])
+           for i in range(0,Nnoff):
+              VP[i] = NP.array(NP.cross(v1,VT))  
+              VN[i] = v1
+              VNi = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+              verif = NP.dot(NP.transpose(VN[i]),VNi) 
+              if abs(verif) < 0.99 :
+                 vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+                 UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+      
+      return (VP,VN,absfon)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_sens_tangente_xfem(self,ndim,Nnoff,Coorfo,VP,ABSC_CURV_MAXI,__RESX,dmax) :
+      """retourne le sens de la tangente   ???"""
+      from Accas import _F
+      import numpy as NP
+      from Utilitai.Utmess     import  UTMESS
+
+      MACR_LIGN_COUPE  = self.get_cmd('MACR_LIGN_COUPE')
+      DETRUIRE         = self.get_cmd('DETRUIRE')
+
+      if ndim == 3 :
+         i = Nnoff/2
+      elif ndim == 2 :
+         i = 0
+      Po =  NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+      Porig = Po + ABSC_CURV_MAXI*VP[i]
+      Pextr = Po - ABSC_CURV_MAXI*VP[i]
+      __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESX,
+                               NOM_CHAM='DEPL',
+                               LIGN_COUPE=_F(NB_POINTS=3,
+                                             COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                                             TYPE='SEGMENT',
+                                             COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                                             DISTANCE_MAX=dmax),);
+      tmp=__Tabg.EXTR_TABLE()
+      test = getattr(tmp,'H1X').values()
+      if test==[None]*3 : 
+         UTMESS('F','RUPTURE0_33')
+      if test[0]!=None :
+         sens = 1
+      else :
+         sens = -1
+      DETRUIRE(CONCEPT=_F(NOM=__Tabg),INFO=1)  
+      
+      return sens
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_sauts_xfem(self,Nnoff,Coorfo,VP,sens,DTAN_ORIG,DTAN_EXTR,ABSC_CURV_MAXI,NB_NOEUD_COUPE,dmax,__RESX) :
+      """retourne la table des sauts"""
+      from Accas import _F
+      import numpy as NP
+
+      MACR_LIGN_COUPE  = self.get_cmd('MACR_LIGN_COUPE')
+
+      mcfact=[]
+      for i in xrange(Nnoff):
+         Porig = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+         if i==0 and DTAN_ORIG!=None :
+            Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+         elif i==(Nnoff-1) and DTAN_EXTR!=None :
+            Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+         else :
+            Pextr = Porig + ABSC_CURV_MAXI*VP[i]*sens
+
+         mcfact.append(_F(NB_POINTS=NB_NOEUD_COUPE,
+                          COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                          TYPE='SEGMENT',
+                          COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                          DISTANCE_MAX=dmax),)
+
+      __TSo = MACR_LIGN_COUPE(RESULTAT=__RESX,
+                            NOM_CHAM='DEPL',
+                            LIGN_COUPE=mcfact);
+
+      return __TSo.EXTR_TABLE()
+
+#---------------------------------------------------------------------------------------------------------------
+
+def affiche_xfem(self,INFO,Nnoff,VN,VP) :
+      """affiche des infos"""
+      from Accas import _F
+      import aster
+
+      CREA_TABLE       = self.get_cmd('CREA_TABLE')
+      DETRUIRE         = self.get_cmd('DETRUIRE')
+
+      if INFO==2 :
+         mcfact=[]
+         mcfact.append(_F(PARA='PT_FOND',LISTE_I=range(Nnoff)))
+         mcfact.append(_F(PARA='VN_X'   ,LISTE_R=[VN[i][0] for i in xrange(Nnoff)]))
+         mcfact.append(_F(PARA='VN_Y'   ,LISTE_R=[VN[i][1] for i in xrange(Nnoff)]))
+         mcfact.append(_F(PARA='VN_Z'   ,LISTE_R=[VN[i][2] for i in xrange(Nnoff)]))
+         mcfact.append(_F(PARA='VP_X'   ,LISTE_R=[VP[i][0] for i in xrange(Nnoff)]))
+         mcfact.append(_F(PARA='VP_Y'   ,LISTE_R=[VP[i][1] for i in xrange(Nnoff)]))
+         mcfact.append(_F(PARA='VP_Z'   ,LISTE_R=[VP[i][2] for i in xrange(Nnoff)]))
+         __resu2=CREA_TABLE(LISTE=mcfact,
+                            TITRE= ' '*13 + 'VECTEUR NORMAL A LA FISSURE    -   DIRECTION DE PROPAGATION')
+         aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+         DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+      
+#---------------------------------------------------------------------------------------------------------------
+
+def affiche_traitement(FOND_FISS,INFO,FISSURE,Lnofon,ino):
+      import aster
+      if FOND_FISS and INFO==2 :
+            texte="\n\n--> TRAITEMENT DU NOEUD DU FOND DE FISSURE: %s"%Lnofon[ino]
+            aster.affiche('MESSAGE',texte)
+      if FISSURE and INFO==2 :
+            texte="\n\n--> TRAITEMENT DU POINT DU FOND DE FISSURE NUMERO %s"%(ino+1)
+            aster.affiche('MESSAGE',texte)
+   
+#---------------------------------------------------------------------------------------------------------------
+
+def get_tab(self,lev,ino,Tlib,Lno,TTSo,FOND_FISS,FISSURE,TYPE_MAILLAGE,RESULTAT,SYME_CHAR,TABL_DEPL,ndim) :
+      """retourne la table des deplacements des noeuds perpendiculaires"""
+      from Accas import _F
+      import string as S
+
+      DETRUIRE         = self.get_cmd('DETRUIRE')
+      POST_RELEVE_T    = self.get_cmd('POST_RELEVE_T')
+
+      if lev == 'sup' or (lev == 'inf' and SYME_CHAR=='SANS' and not FISSURE) :
+
+         if FOND_FISS : 
+            if TYPE_MAILLAGE =='LIBRE':
+               tab = Tlib.INTITULE=='l.coupe%i'%(ino+1)
+            elif RESULTAT :
+               if ndim == 2:
+                  nomcmp= ('DX','DY')
+               elif ndim == 3:
+                  nomcmp= ('DX','DY','DZ')
+                  
+               __T=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement '+lev.upper(),
+                                             NOEUD=Lno[ino],
+                                             RESULTAT=RESULTAT,
+                                             NOM_CHAM='DEPL',
+                                             TOUT_ORDRE='OUI',
+                                             NOM_CMP=nomcmp,
+                                             OPERATION='EXTRACTION',),);
+               tab=__T.EXTR_TABLE()
+               DETRUIRE(CONCEPT=_F(NOM=__T),INFO=1)      
+            else :
+               tab=TABL_DEPL.EXTR_TABLE()
+               veri_tab(tab,TABL_DEPL.nom,ndim)
+               Ls = [S.ljust(Lno[ino][i],8) for i in range(len(Lno[ino]))]
+               tab=tab.NOEUD==Ls
+         elif FISSURE :
+            tab = TTSo.INTITULE=='l.coupe%i'%(ino+1)
+         else :
+            tab=TABL_DEPL.EXTR_TABLE()
+            veri_tab(tab,TABL_DEPL.nom,ndim)
+
+      else :
+
+         tab = None
+
+      return tab
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_liste_inst(tabsup,args,LIST_ORDRE,NUME_ORDRE,INST,LIST_INST,EnumTypes) :
+      """retourne la liste d'instants"""
+      from Utilitai.Utmess     import  UTMESS
+      if 'INST' in tabsup.para : 
+         l_inst=None
+         l_inst_tab=tabsup['INST'].values()['INST']
+         l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys() #elimine les doublons
+         l_inst_tab.sort()
+         if LIST_ORDRE !=None or NUME_ORDRE !=None :
+            l_ord_tab = tabsup['NUME_ORDRE'].values()['NUME_ORDRE']
+            l_ord_tab.sort()
+            l_ord_tab=dict([(i,0) for i in l_ord_tab]).keys() 
+            d_ord_tab= [[l_ord_tab[i],l_inst_tab[i]] for i in range(0,len(l_ord_tab))]
+            d_ord_tab= [(i[0],i[1]) for i in d_ord_tab]
+            d_ord_tab = dict(d_ord_tab)
+            if NUME_ORDRE !=None : 
+               if type(NUME_ORDRE) not in EnumTypes :
+                  NUME_ORDRE=(NUME_ORDRE,)
+               l_ord=list(NUME_ORDRE)
+            elif LIST_ORDRE !=None : 
+               l_ord = LIST_ORDRE.VALE.get() 
+            l_inst = []
+            for ord in l_ord :
+              if ord in l_ord_tab :
+                 l_inst.append(d_ord_tab[ord])
+              else :  
+                 UTMESS('F','RUPTURE0_37',vali=ord)
+            PRECISION = 1.E-6
+            CRITERE='ABSOLU'
+         elif INST !=None or LIST_INST !=None :
+            CRITERE = args['CRITERE']
+            PRECISION = args['PRECISION']
+            if  INST !=None : 
+               if type(INST) not in EnumTypes : INST=(INST,)
+               l_inst=list(INST)
+            elif LIST_INST !=None :
+               l_inst=LIST_INST.Valeurs()
+            for inst in l_inst  :
+               if CRITERE=='RELATIF' and inst!=0.:
+                  match=[x for x in l_inst_tab if abs((inst-x)/inst)<PRECISION]
+               else :
+                  match=[x for x in l_inst_tab if abs(inst-x)<PRECISION]
+               if len(match)==0 : 
+                  UTMESS('F','RUPTURE0_38',valr=inst)
+               if len(match)>=2 :
+                  UTMESS('F','RUPTURE0_39',valr=inst)
+         else :
+            l_inst=l_inst_tab
+            PRECISION = 1.E-6
+            CRITERE='ABSOLU'
+      else :
+         l_inst    = [None,]
+         PRECISION = None
+         CRITERE   = None
+         
+      return (l_inst,PRECISION,CRITERE)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def affiche_instant(INFO,inst):
+      import aster
+      if INFO==2 and inst!=None:
+         texte= "#" + "="*80 + "\n" + "==> INSTANT: %f"%inst
+         aster.affiche('MESSAGE',texte)
+   
+#---------------------------------------------------------------------------------------------------------------
+
+def get_tab_inst(lev,inst,FISSURE,SYME_CHAR,PRECISION,CRITERE,tabsup,tabinf) :
+      """retourne la table des deplacements des noeuds à l'instant courant"""
+
+      tab = None
+      assert( lev == 'sup' or lev == 'inf') 
+
+      # identification du cas (le cas sans instant sera à supprimer
+      # il doit normalement coincider avec le cas TAB_DEPL...
+      if inst==None:
+         cas = 'a_suppr'
+      else :     
+         cas = 'normal'
+      
+      if lev == 'sup' :
+         tabres = tabsup
+      elif lev == 'inf' :
+         if SYME_CHAR=='SANS' and not FISSURE :
+            tabres = tabinf
+         else :
+            return tab
+
+      if cas == 'normal' :
+
+         if inst ==0. :
+            crit = 'ABSOLU'
+         else : 
+            crit = CRITERE
+
+         tab=tabres.INST.__eq__(VALE=inst,
+                                CRITERE=crit,
+                                PRECISION=PRECISION)
+      elif cas == 'a_suppr':
+
+         tab=tabres
+
+      return tab
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_propmat_tempe(MATER,tabtemp,Lnofon,ino,inst,PRECISION) :
+      """retourne les proprietes materiaux en fonction de la temperature à l'instant demandé"""
+      import numpy as NP
+      from math import pi
+
+      tempeno=tabtemp.NOEUD==Lnofon[ino]
+      tempeno=tempeno.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+      nompar = ('TEMP',)
+      valpar = (tempeno.TEMP.values()[0],)
+      nomres=['E','NU']
+      valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+      e = valres[0]
+      nu = valres[1] 
+      coefd  = e * NP.sqrt(2.*pi)      / ( 8.0 * (1. - nu**2))
+      coefd3 = e*NP.sqrt(2*pi) / ( 8.0 * (1. + nu))
+      coefg  = (1. - nu**2) / e
+      coefg3 = (1. + nu)  / e
+
+      return (e,nu,coefd,coefd3,coefg,coefg3)
+#---------------------------------------------------------------------------------------------------------------
+
+def get_depl_sup(FISSURE,FOND_FISS,rmprec,RESULTAT,tabsupi,ndim,d_coor,Lnofon,ino) :
+      """retourne les déplacements sup"""
+
+      import numpy as NP
+      import copy
+      from Utilitai.Utmess     import  UTMESS
+      
+      abscs = getattr(tabsupi,'ABSC_CURV').values()
+
+      if not FISSURE :
+         if not FOND_FISS :
+#           cas  a supprimer
+
+#           on vérifie que les abscisses sont bien croissantes
+            refs=copy.copy(abscs)
+            refs.sort()
+            if refs!=abscs :
+               mctabl='TABL_DEPL_INF' 
+               UTMESS('F','RUPTURE0_40',valk=mctabl)
+
+            refsc=[x for x in refs if x<rmprec]
+            nbval = len(refsc)
+         else :
+            nbval=len(abscs)
+
+         abscs=NP.array(abscs[:nbval])
+         coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+         coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+         if ndim==2 : 
+            cozs=NP.zeros(nbval)
+         elif ndim==3 : 
+            cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+        
+         if FOND_FISS and not RESULTAT : 
+#              assert (0 == 1)
+#            tri des noeuds avec abscisse : a faire bien en amont !!!
+             Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
+             abscs = NP.sqrt((coxs-Pfon[0])**2+(coys-Pfon[1])**2+(cozs-Pfon[2])**2)
+             tabsupi['Abs_fo'] = abscs
+             tabsupi.sort('Abs_fo')
+             abscs = getattr(tabsupi,'Abs_fo').values()
+             abscs=NP.array(abscs[:nbval])
+             coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+             coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+             if ndim==2 :
+                cozs=NP.zeros(nbval)
+             elif ndim==3 :
+                cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+           
+         dxs=NP.array(tabsupi['DX'].values()['DX'][:nbval])
+         dys=NP.array(tabsupi['DY'].values()['DY'][:nbval])
+         if ndim==2 :
+            dzs=NP.zeros(nbval)
+         elif ndim==3 :
+            dzs=NP.array(tabsupi['DZ'].values()['DZ'][:nbval])
+
+#     ---  CAS FISSURE X-FEM ---
+      elif  FISSURE : 
+         H1 = getattr(tabsupi,'H1X').values()
+         nbval = len(H1)
+         H1 = complete(H1)
+         E1 = getattr(tabsupi,'E1X').values()
+         E1 = complete(E1)
+         dxs = 2*(H1 + NP.sqrt(abscs)*E1)
+         H1 = getattr(tabsupi,'H1Y').values()
+         E1 = getattr(tabsupi,'E1Y').values()
+         H1 = complete(H1)
+         E1 = complete(E1)
+         dys = 2*(H1 + NP.sqrt(abscs)*E1)
+         H1 = getattr(tabsupi,'H1Z').values()
+         E1 = getattr(tabsupi,'E1Z').values()
+         H1 = complete(H1)
+         E1 = complete(E1)
+         dzs = 2*(H1 + NP.sqrt(abscs)*E1)
+         abscs=NP.array(abscs[:nbval])
+
+      ds = NP.asarray([dxs,dys,dzs])
+
+      return (abscs,ds)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_depl_inf(FISSURE,FOND_FISS,rmprec,RESULTAT,tabinfi,ndim,d_coor,Lnofon,ino,SYME_CHAR) :
+      """retourne les déplacements inf"""
+      import numpy as NP
+      import copy
+      from Utilitai.Utmess     import  UTMESS
+
+      if SYME_CHAR=='SANS' and not FISSURE : 
+         absci = getattr(tabinfi,'ABSC_CURV').values()
+         if not FOND_FISS :
+            refi=copy.copy(absci)
+            refi.sort()
+            if refi!=absci :
+               mctabl='TABL_DEPL_SUP' 
+               UTMESS('F','RUPTURE0_40',valk=mctabl)
+            refic=[x for x in refi if x<rmprec]
+            nbval=len(refic)
+         else :
+            nbval=len(absci)
+            
+         absci=NP.array(absci[:nbval])
+         coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+         coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+         if ndim==2 :
+            cozi=NP.zeros(nbval)
+         elif ndim==3 :
+            cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+
+# #        ---  ON VERIFIE QUE LES NOEUDS SONT EN VIS_A_VIS  (SYME=SANS)   ---
+# #           verification a faire bien en amont !!!
+#          if not FOND_FISS :
+#             dist=(coxs-coxi)**2+(coys-coyi)**2+(cozs-cozi)**2
+#             dist=NP.sqrt(dist)
+#             for d in dist :
+#                 if d>precn : UTMESS('F','RUPTURE0_44')
+        
+         if FOND_FISS and not RESULTAT :#tri des noeuds avec abscisse
+
+            Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
+            absci = NP.sqrt((coxi-Pfon[0])**2+(coyi-Pfon[1])**2+(cozi-Pfon[2])**2)
+            tabinfi['Abs_fo'] = absci
+            tabinfi.sort('Abs_fo')
+            absci = getattr(tabinfi,'Abs_fo').values()
+            absci=NP.array(absci[:nbval])
+            coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+            coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+            if ndim==2 : 
+               cozi=NP.zeros(nbval)
+            elif ndim==3 :
+               cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval],)
+
+         dxi=NP.array(tabinfi['DX'].values()['DX'][:nbval])
+         dyi=NP.array(tabinfi['DY'].values()['DY'][:nbval])
+         if ndim==2 :
+            dzi=NP.zeros(nbval)
+         elif ndim==3 :
+            dzi=NP.array(tabinfi['DZ'].values()['DZ'][:nbval])
+
+         di = NP.asarray([dxi,dyi,dzi])
+      else :
+
+         absci = []
+         di = []
+      
+      return (absci,di)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_pgl(SYME_CHAR,FISSURE,VECT_K1,ino,VP,VN,tabsupi,tabinfi,nbval,ndim) :
+
+      """retourne la matrice du changement de repère"""
+      import numpy as NP
+#
+#     1 : VECTEUR NORMAL AU PLAN DE LA FISSURE
+#         ORIENTE LEVRE INFERIEURE VERS LEVRE SUPERIEURE
+#     2 : VECTEUR NORMAL AU FOND DE FISSURE EN M
+#     3 : VECTEUR TANGENT AU FOND DE FISSURE EN M
+#
+      if FISSURE :
+         v1 = VN[ino]
+         v2 = VP[ino]
+
+      elif not FISSURE :
+
+#        cette partie est a modifier car on devrait pas calculer la base tout le temps
+         coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+         coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+         if ndim==2 : 
+            cozs=NP.zeros(nbval)
+         elif ndim==3 : 
+            cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+
+         v1 =  NP.array(VECT_K1)
+         if SYME_CHAR=='SANS' :
+
+            coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+            coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+            if ndim==2 :
+               cozi=NP.zeros(nbval)
+            elif ndim==3 :
+               cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+               
+            vo =  NP.array([( coxs[-1]+coxi[-1] )/2.,( coys[-1]+coyi[-1] )/2.,( cozs[-1]+cozi[-1] )/2.])
+            ve =  NP.array([( coxs[0 ]+coxi[0 ] )/2.,( coys[0 ]+coyi[0 ] )/2.,( cozs[0 ]+cozi[0 ] )/2.])
+            v2 =  ve-vo
+         else :
+            vo = NP.array([ coxs[-1], coys[-1], cozs[-1]])
+            ve = NP.array([ coxs[0], coys[0], cozs[0]])
+            v2 =  ve-vo
+
+      v2 =  normalize(v2)
+
+      v1p = sum(v2*v1)
+
+      if SYME_CHAR=='SANS' :
+         v1  = v1-v1p*v2
+      else :
+         v2  = v2-v1p*v1 
+
+      v1  = normalize(v1)
+      v2 =  normalize(v2)
+      v3  = NP.cross(v1,v2)
+
+      pgl  = NP.asarray([v1,v2,v3])
+
+      return pgl
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_saut(self,pgl,ds,di,INFO,FISSURE,SYME_CHAR,abscs,ndim) :
+
+      """retourne le saut de déplacements dans le nouveau repère"""
+
+      from Accas import _F
+      import aster
+      import numpy as NP
+      from Utilitai.Utmess     import  UTMESS
+   
+      CREA_TABLE    = self.get_cmd('CREA_TABLE')
+      DETRUIRE      = self.get_cmd('DETRUIRE')
+
+
+      dpls = NP.dot(pgl,ds)
+
+      if SYME_CHAR!='SANS' and abs(dpls[0][0]) > 1.e-10 :
+         UTMESS('A','RUPTURE0_49',valk=[Lnofon[ino],SYME_CHAR])
+
+      if FISSURE :
+         saut=dpls
+      elif SYME_CHAR=='SANS' :
+         dpli = NP.dot(pgl,di)
+         saut=(dpls-dpli)
+      else :
+         dpli = [NP.multiply(dpls[0],-1.),dpls[1],dpls[2]]
+         saut=(dpls-dpli)
+
+      if INFO==2 :
+         mcfact=[]
+         mcfact.append(_F(PARA='ABSC_CURV'  ,LISTE_R=abscs.tolist() ))
+         if not FISSURE :
+            mcfact.append(_F(PARA='DEPL_SUP_1',LISTE_R=dpls[0].tolist() ))
+            mcfact.append(_F(PARA='DEPL_INF_1',LISTE_R=dpli[0].tolist() ))
+         mcfact.append(_F(PARA='SAUT_1'    ,LISTE_R=saut[0].tolist() ))
+         if not FISSURE :
+            mcfact.append(_F(PARA='DEPL_SUP_2',LISTE_R=dpls[1].tolist() ))
+            mcfact.append(_F(PARA='DEPL_INF_2',LISTE_R=dpli[1].tolist() ))
+         mcfact.append(_F(PARA='SAUT_2'    ,LISTE_R=saut[1].tolist() ))
+         if ndim==3 :
+            if not FISSURE :
+               mcfact.append(_F(PARA='DEPL_SUP_3',LISTE_R=dpls[2].tolist() ))
+               mcfact.append(_F(PARA='DEPL_INF_3',LISTE_R=dpli[2].tolist() ))
+            mcfact.append(_F(PARA='SAUT_3'    ,LISTE_R=saut[2].tolist() ))
+         __resu0=CREA_TABLE(LISTE=mcfact,TITRE='--> SAUTS')
+         aster.affiche('MESSAGE',__resu0.EXTR_TABLE().__repr__())
+         DETRUIRE(CONCEPT=_F(NOM=__resu0),INFO=1)
+
+      return saut
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_kgsig(saut,nbval,coefd,coefd3) :
+
+      """retourne des trucs...."""
+      import numpy as NP
+
+      isig=NP.sign(NP.transpose(NP.resize(saut[:,-1],(nbval-1,3))))
+      isig=NP.sign(isig+0.001)
+      saut2=saut*NP.array([[coefd]*nbval,[coefd]*nbval,[coefd3]*nbval])
+      saut2=saut2**2
+      ksig = isig[:,1]
+      ksig = NP.array([ksig,ksig])
+      ksig = NP.transpose(ksig)
+      kgsig= NP.resize(ksig,(1,6))[0]
+
+      return (isig,kgsig,saut2)
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_meth1(self,abscs,coefg,coefg3,kgsig,isig,saut2,INFO,ndim) :
+
+      """retourne kg1"""
+      from Accas import _F
+      import aster
+      import numpy as NP
+
+      CREA_TABLE    = self.get_cmd('CREA_TABLE')
+      DETRUIRE      = self.get_cmd('DETRUIRE')
+
+      nabs = len(abscs)
+      x1 = abscs[1:-1]
+      x2 = abscs[2:nabs]
+      y1 = saut2[:,1:-1]/x1
+      y2 = saut2[:,2:nabs]/x2
+      k  = abs(y1-x1*(y2-y1)/(x2-x1))
+      g  = coefg*(k[0]+k[1])+coefg3*k[2]
+      kg1 = [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
+      kg1 = NP.sqrt(kg1)*kgsig
+      kg1 = NP.concatenate([kg1,[max(g),min(g)]])
+      vk  = NP.sqrt(k)*isig[:,:-1]
+      if INFO==2 :
+         mcfact=[]
+         mcfact.append(_F(PARA='ABSC_CURV_1' ,LISTE_R=x1.tolist() ))
+         mcfact.append(_F(PARA='ABSC_CURV_2' ,LISTE_R=x2.tolist() ))
+         mcfact.append(_F(PARA='K1'          ,LISTE_R=vk[0].tolist() ))
+         mcfact.append(_F(PARA='K2'          ,LISTE_R=vk[1].tolist() ))
+         if ndim==3 :
+            mcfact.append(_F(PARA='K3'        ,LISTE_R=vk[2].tolist() ))
+         mcfact.append(_F(PARA='G'           ,LISTE_R=g.tolist() ))
+         __resu1=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 1')
+         aster.affiche('MESSAGE',__resu1.EXTR_TABLE().__repr__())
+         DETRUIRE(CONCEPT=_F(NOM=__resu1),INFO=1)
+
+      return kg1
+#---------------------------------------------------------------------------------------------------------------
+
+def get_meth2(self,abscs,coefg,coefg3,kgsig,isig,saut2,INFO,ndim) :
+
+      """retourne kg2"""
+      from Accas import _F
+      import aster
+      import numpy as NP
+
+      CREA_TABLE    = self.get_cmd('CREA_TABLE')
+      DETRUIRE      = self.get_cmd('DETRUIRE')
+
+      nabs = len(abscs)
+      x1 = abscs[1:nabs]
+      y1 = saut2[:,1:nabs]
+      k  = abs(y1/x1)
+      g  = coefg*(k[0]+k[1])+coefg3*k[2]
+      kg2= [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
+      kg2 = NP.sqrt(kg2)*kgsig
+      kg2= NP.concatenate([kg2,[max(g),min(g)]])
+      vk = NP.sqrt(k)*isig
+      if INFO==2 :
+         mcfact=[]
+         mcfact.append(_F(PARA='ABSC_CURV' ,LISTE_R=x1.tolist() ))
+         mcfact.append(_F(PARA='K1'        ,LISTE_R=vk[0].tolist() ))
+         mcfact.append(_F(PARA='K2'        ,LISTE_R=vk[1].tolist() ))
+         if ndim==3 :
+            mcfact.append(_F(PARA='K3'      ,LISTE_R=vk[2].tolist() ))
+         mcfact.append(_F(PARA='G'         ,LISTE_R=g.tolist() ))
+         __resu2=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 2')
+         aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+         DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+
+      return kg2
+#---------------------------------------------------------------------------------------------------------------
+
+def get_meth3(self,abscs,coefg,coefg3,kgsig,isig,saut2,INFO,ndim) :
+
+      """retourne kg3"""
+      from Accas import _F
+      import aster
+      import numpy as NP
+
+      CREA_TABLE    = self.get_cmd('CREA_TABLE')
+      DETRUIRE      = self.get_cmd('DETRUIRE')
+
+      nabs = len(abscs)
+      x1 = abscs[:-1]
+      x2 = abscs[1:nabs]
+      y1 = saut2[:,:-1]
+      y2 = saut2[:,1:nabs]
+      k  = (NP.sqrt(y2)*NP.sqrt(x2)+NP.sqrt(y1)*NP.sqrt(x1))*(x2-x1)
+#     attention, ici, il faut NP.sum et pas sum tout court
+      k  = NP.sum(NP.transpose(k), axis=0)
+      de = abscs[-1]
+      vk = (k/de**2)*isig[:,0]
+      g  = coefg*(vk[0]**2+vk[1]**2)+coefg3*vk[2]**2
+      kg3=NP.concatenate([[vk[0]]*2,[vk[1]]*2,[vk[2]]*2,[g]*2])
+      if INFO==2 :
+        mcfact=[]
+        mcfact.append(_F(PARA='K1'        ,LISTE_R=vk[0] ))
+        mcfact.append(_F(PARA='K2'        ,LISTE_R=vk[1] ))
+        if ndim==3 :
+          mcfact.append(_F(PARA='K3'      ,LISTE_R=vk[2] ))
+        mcfact.append(_F(PARA='G'         ,LISTE_R=g ))
+        __resu3=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 3')
+        aster.affiche('MESSAGE',__resu3.EXTR_TABLE().__repr__())
+        DETRUIRE(CONCEPT=_F(NOM=__resu3),INFO=1)
+
+
+      return kg3
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_erreur(self,ndim,__tabi) :
+
+      """retourne l'erreur selon les méthodes. 
+      En FEM/X-FEM, on ne retient que le K_MAX de la méthode 1."""
+      from Accas import _F
+      import aster
+      import string
+      import numpy as NP
+
+      CREA_TABLE    = self.get_cmd('CREA_TABLE')
+      CALC_TABLE    = self.get_cmd('CALC_TABLE')
+      DETRUIRE      = self.get_cmd('DETRUIRE')
+      FORMULE       = self.get_cmd('FORMULE')
+
+      labels = ['K1_MAX', 'K1_MIN', 'K2_MAX', 'K2_MIN', 'K3_MAX', 'K3_MIN']
+      index = 2
+      if ndim == 3:
+         index = 3
+      py_tab = __tabi.EXTR_TABLE()
+
+      nlines = len(py_tab.values()[py_tab.values().keys()[0]])
+      err = NP.zeros((index, nlines/3))
+      kmax = [0.] * index
+      kmin = [0.] * index
+      for i in range(nlines/3):
+         for j in range(index):
+            kmax[j] = max(__tabi[labels[  2*j], 3*i+1], __tabi[labels[  2*j], 3*i+2], __tabi[labels[  2*j], 3*i+3])
+            kmin[j] = min(__tabi[labels[2*j+1], 3*i+1], __tabi[labels[2*j+1], 3*i+2], __tabi[labels[2*j+1], 3*i+3])
+         kmaxmax = max(kmax)
+         if NP.fabs(kmaxmax) > 1e-15:
+            for j in range(index):
+               err[j,i] = (kmax[j] - kmin[j]) / kmaxmax
+
+      # filter method 1 line
+      imeth = 1
+      __tabi = CALC_TABLE(TABLE=__tabi,
+                          reuse=__tabi,
+                          ACTION=_F(OPERATION='FILTRE',
+                                    CRIT_COMP='EQ',
+                                    VALE = imeth,
+                                    NOM_PARA='METHODE')
+                          )
+
+      # rename k parameters
+      __tabi = CALC_TABLE(TABLE=__tabi,
+                          reuse=__tabi,
+                          ACTION=(_F(OPERATION='RENOMME',NOM_PARA=('K1_MAX','K1')),
+                                  _F(OPERATION='RENOMME',NOM_PARA=('K2_MAX','K2')),
+                                  _F(OPERATION='RENOMME',NOM_PARA=('G_MAX','G')))
+                        )
+      if ndim == 3:
+        __tabi = CALC_TABLE(TABLE=__tabi,
+                            reuse=__tabi,
+                            ACTION=_F(OPERATION='RENOMME',NOM_PARA=('K3_MAX','K3'))
+                            )
+
+      # create error
+      if ndim != 3:
+         tab_int = CREA_TABLE(LISTE=(_F(LISTE_R=(tuple(__tabi.EXTR_TABLE().values()['G_MIN'])), PARA='G_MIN'),
+                                     _F(LISTE_R=(tuple(err[0].tolist())), PARA='ERR_K1'),
+                                     _F(LISTE_R=(tuple(err[1].tolist())), PARA='ERR_K2')))
+      else:
+         tab_int = CREA_TABLE(LISTE=(_F(LISTE_R=(tuple(__tabi.EXTR_TABLE().values()['G_MIN'])), PARA='G_MIN'),
+                                     _F(LISTE_R=(tuple(err[0].tolist())), PARA='ERR_K1'),
+                                     _F(LISTE_R=(tuple(err[1].tolist())), PARA='ERR_K2'),
+                                     _F(LISTE_R=(tuple(err[2].tolist())), PARA='ERR_K3')))
+
+      # add error
+      __tabi = CALC_TABLE(TABLE=__tabi,reuse=__tabi,ACTION=(_F(OPERATION='COMB',NOM_PARA='G_MIN',TABLE=tab_int)),INFO=1)
+      DETRUIRE(CONCEPT=(_F(NOM=tab_int)),INFO=1)
+
+      # remove kj_min + sort data
+      params = ()
+      if ('INST' in __tabi.EXTR_TABLE().para) : params = ('INST',)
+      if ('NOEUD_FOND' in __tabi.EXTR_TABLE().para) :
+          params =  params + ('NOEUD_FOND',)
+      elif ('PT_FOND' in __tabi.EXTR_TABLE().para) :
+          params =  params + ('PT_FOND',)
+
+      if ('ABSC_CURV' in __tabi.EXTR_TABLE().para) :
+          params = params + ('ABSC_CURV',)
+
+      params = params + ('K1', 'ERR_K1', 'K2', 'ERR_K2',)
+      if ndim == 3: params = params + ('K3', 'ERR_K3', 'G',)
+      else: params = params + ('G',)
+
+      __tabi = CALC_TABLE(TABLE=__tabi,
+                          reuse=__tabi,ACTION=(_F(OPERATION='EXTR',NOM_PARA=tuple(params))),
+                          TITRE="CALCUL DES FACTEURS D'INTENSITE DES CONTRAINTES PAR LA METHODE POST_K1_K2_K3")
+
+      return __tabi
+
+#---------------------------------------------------------------------------------------------------------------
+
+def get_tabout(self,kg,TITRE,FOND_FISS,MODELISATION,FISSURE,ndim,ino,inst,iord,
+               Lnofon,dicoF,absfon,Nnoff,tabout) :
+
+      """retourne la table de sortie"""
+      from Accas import _F
+      import aster
+      import numpy as NP
+
+      CREA_TABLE    = self.get_cmd('CREA_TABLE')
+      DETRUIRE      = self.get_cmd('DETRUIRE')
+      CALC_TABLE    = self.get_cmd('CALC_TABLE')
+      
+
+      mcfact=[]
+
+      if TITRE != None :
+         titre = TITRE
+      else :
+         v = aster.__version__
+         titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K1_K2_K3 LE &DATE A &HEURE \n'%v
+
+      if FOND_FISS and MODELISATION=='3D': 
+         mcfact.append(_F(PARA='NOEUD_FOND',LISTE_K=[Lnofon[ino],]*3))
+         mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[dicoF[Lnofon[ino]]]*3))
+
+      if FISSURE and MODELISATION=='3D': 
+         mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
+         mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[absfon[ino],]*3))
+
+      if FISSURE  and MODELISATION!='3D' and Nnoff!=1 :
+         mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
+
+      mcfact.append(_F(PARA='METHODE',LISTE_I=(1,2,3)))
+      mcfact.append(_F(PARA='K1_MAX' ,LISTE_R=kg[0].tolist() ))
+      mcfact.append(_F(PARA='K1_MIN' ,LISTE_R=kg[1].tolist() ))
+      mcfact.append(_F(PARA='K2_MAX' ,LISTE_R=kg[2].tolist() ))
+      mcfact.append(_F(PARA='K2_MIN' ,LISTE_R=kg[3].tolist() ))
+
+      if ndim==3 :
+         mcfact.append(_F(PARA='K3_MAX' ,LISTE_R=kg[4].tolist() ))
+         mcfact.append(_F(PARA='K3_MIN' ,LISTE_R=kg[5].tolist() ))
+
+      mcfact.append(_F(PARA='G_MAX'  ,LISTE_R=kg[6].tolist() ))
+      mcfact.append(_F(PARA='G_MIN'  ,LISTE_R=kg[7].tolist() ))
+
+      if  (ino==0 and iord==0) and inst==None :
+         tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
+         get_erreur(self,ndim,tabout)
+      elif iord==0 and ino==0 and inst!=None :
+         mcfact=[_F(PARA='INST'  ,LISTE_R=[inst,]*3      )]+mcfact
+         tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
+         get_erreur(self,ndim,tabout)
+      else :
+         if inst!=None :
+            mcfact=[_F(PARA='INST'  ,LISTE_R=[inst,]*3     )]+mcfact
+         __tabi=CREA_TABLE(LISTE=mcfact,)
+         npara = ['K1']
+         if inst!=None :
+            npara.append('INST')
+         if FOND_FISS and MODELISATION=='3D' :
+            npara.append('NOEUD_FOND')
+
+         get_erreur(self,ndim,__tabi)
+         tabout=CALC_TABLE(reuse = tabout,
+                           TABLE = tabout,
+                           TITRE = titre,
+                           ACTION=_F(OPERATION = 'COMB',
+                                     NOM_PARA  = npara,
+                                     TABLE     = __tabi,))
+
+      return tabout
+
+
+
+#---------------------------------------------------------------------------------------------------------------
+#                 CORPS DE LA MACRO POST_K1_K2_K3
+#---------------------------------------------------------------------------------------------------------------
+
 def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
                    TABL_DEPL_SUP,TABL_DEPL_INF,ABSC_CURV_MAXI,PREC_VIS_A_VIS,
                    TOUT_ORDRE,NUME_ORDRE,LIST_ORDRE,INST,LIST_INST,SYME_CHAR,
@@ -107,22 +1641,19 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
    la fissure. Produit une table.
    """
    import aster
-   import string
-   import copy
-   import math
+   import string as S
    import numpy as NP
    from math import pi
    from types import ListType, TupleType
    from Accas import _F
    from Utilitai.Table      import Table, merge
-   from SD.sd_l_charges import sd_l_charges
    from SD.sd_mater     import sd_compor1
    EnumTypes = (ListType, TupleType)
 
    macro = 'POST_K1_K2_K3'
-   from Accas               import _F
    from Utilitai.Utmess     import  UTMESS
 
+
    ier = 0
    # La macro compte pour 1 dans la numerotation des commandes
    self.set_icmd(1)
@@ -130,18 +1661,18 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
    # Le concept sortant (de type table_sdaster ou dérivé) est tab
    self.DeclareOut('tabout', self.sd)
    
+   tabout=[]
+   
    # On importe les definitions des commandes a utiliser dans la macro
    # Le nom de la variable doit etre obligatoirement le nom de la commande
-   CREA_TABLE    = self.get_cmd('CREA_TABLE')
-   CALC_TABLE    = self.get_cmd('CALC_TABLE')
+   CREA_TABLE       = self.get_cmd('CREA_TABLE')
+   CALC_TABLE       = self.get_cmd('CALC_TABLE')
    POST_RELEVE_T    = self.get_cmd('POST_RELEVE_T')
-   DETRUIRE      = self.get_cmd('DETRUIRE')
-   DEFI_GROUP      = self.get_cmd('DEFI_GROUP')
-   MACR_LIGN_COUPE      = self.get_cmd('MACR_LIGN_COUPE')
-
+   DETRUIRE         = self.get_cmd('DETRUIRE')
+   DEFI_GROUP       = self.get_cmd('DEFI_GROUP')
+   MACR_LIGN_COUPE  = self.get_cmd('MACR_LIGN_COUPE')
    AFFE_MODELE      = self.get_cmd('AFFE_MODELE')
-   PROJ_CHAMP      = self.get_cmd('PROJ_CHAMP')
-      
+   PROJ_CHAMP       = self.get_cmd('PROJ_CHAMP')
 #   ------------------------------------------------------------------
 #                         CARACTERISTIQUES MATERIAUX
 #   ------------------------------------------------------------------
@@ -152,18 +1683,21 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
           phenom=cmpt
           break
    if phenom==None : UTMESS('F','RUPTURE0_5')
-#   --- RECHERCHE SI LE MATERIAU DEPEND DE LA TEMPERATURE:
+
+#  RECHERCHE SI LE MATERIAU DEPEND DE LA TEMPERATURE:
    compor = sd_compor1('%-8s.%s' % (MATER.nom, phenom))
    valk = [s.strip() for s in compor.VALK.get()]
    valr = compor.VALR.get()
    dicmat=dict(zip(valk,valr))
-#   --- PROPRIETES MATERIAUX DEPENDANTES DE LA TEMPERATURE
+
+#  PROPRIETES MATERIAUX DEPENDANTES DE LA TEMPERATURE
    Tempe3D = False
    if FOND_FISS and args['EVOL_THER'] : 
-# on recupere juste le nom du resultat thermique (la température est variable de commande)
+#     on recupere juste le nom du resultat thermique (la température est variable de commande)
       ndim   = 3
       Tempe3D=True
-      resuth=string.ljust(args['EVOL_THER'].nom,8).rstrip()
+      resuth=S.ljust(args['EVOL_THER'].nom,8).rstrip()
+
    if dicmat.has_key('TEMP_DEF') and not args['EVOL_THER'] :
       nompar = ('TEMP',)
       valpar = (dicmat['TEMP_DEF'],)
@@ -211,1084 +1745,303 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
       else :
          UTMESS('F','RUPTURE0_10')
 
+   assert (ndim == 2 or ndim == 3)     
+
+   try :
+      TYPE_MAILLAGE  = args['TYPE_MAILLAGE']
+   except KeyError :
+      TYPE_MAILLAGE = []
+
+
+   rmprec = ABSC_CURV_MAXI*(1.+PREC_VIS_A_VIS/10.)
+   precn = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+
+      
+#  ------------------------------------------------------------------
+#  I. CAS FOND_FISS
+#  ------------------------------------------------------------------
 
-#   ------------------------------------------------------------------
-#                        CAS FOND_FISS
-#   ------------------------------------------------------------------
    if FOND_FISS : 
-      MAILLAGE = args['MAILLAGE']
-      NOEUD = args['NOEUD']
-      SANS_NOEUD = args['SANS_NOEUD']
-      GROUP_NO = args['GROUP_NO']
-      SANS_GROUP_NO = args['SANS_GROUP_NO']
-      TOUT = args['TOUT']
-      TYPE_MAILLAGE = args['TYPE_MAILLAGE']
+
+      if RESULTAT :
+        iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',RESULTAT.nom,'RESULTAT')
+        MAILLAGE = self.get_concept(nom_ma.strip())
+      else:
+        MAILLAGE = args['MAILLAGE']
+
       NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
-      if NB_NOEUD_COUPE ==None : NB_NOEUD_COUPE = 5
-      LNOFO = FOND_FISS.FOND_______NOEU.get()
-      RECOL = False
-# Cas double fond de fissure : par convention les noeuds sont ceux de fond_inf
-      if LNOFO==None :
-         RECOL = True
-         LNOFO = FOND_FISS.FONDINF____NOEU.get()
-         if LNOFO==None : UTMESS('F','RUPTURE0_11')
-      LNOFO = map(string.rstrip,LNOFO)
-      Nbfond = len(LNOFO)
 
-      if MODELISATION=='3D' :
-#   ----------Mots cles TOUT, NOEUD, SANS_NOEUD -------------
-        Typ = FOND_FISS.FOND_______TYPE.get()
-        if (Typ[0]=='SEG2    ') or (Typ[0]=='SEG3    ' and TOUT=='OUI') :
-           pas = 1
-        elif (Typ[0]=='SEG3    ') : 
-           pas = 2
-        else :
-           UTMESS('F','RUPTURE0_12')
-####
-        NO_SANS = []
-        NO_AVEC = []
-        if GROUP_NO!=None :
-          collgrno = MAILLAGE.GROUPENO.get()
-          cnom = MAILLAGE.NOMNOE.get()
-          if type(GROUP_NO) not in EnumTypes : GROUP_NO = (GROUP_NO,)
-          for m in range(len(GROUP_NO)) :
-            ngrno=GROUP_NO[m].ljust(8).upper()
-            if ngrno not in collgrno.keys() :
-              UTMESS('F','RUPTURE0_13',valk=ngrno)
-            for i in range(len(collgrno[ngrno])) : NO_AVEC.append(cnom[collgrno[ngrno][i]-1])
-          NO_AVEC= map(string.rstrip,NO_AVEC)
-        if NOEUD!=None : 
-          if type(NOEUD) not in EnumTypes : NO_AVEC = (NOEUD,)
-          else : NO_AVEC = NOEUD
-        if SANS_GROUP_NO!=None :
-          collgrno = MAILLAGE.GROUPENO.get()
-          cnom = MAILLAGE.NOMNOE.get()
-          if type(SANS_GROUP_NO) not in EnumTypes : SANS_GROUP_NO = (SANS_GROUP_NO,)
-          for m in range(len(SANS_GROUP_NO)) :
-            ngrno=SANS_GROUP_NO[m].ljust(8).upper()
-            if ngrno not in collgrno.keys() :
-              UTMESS('F','RUPTURE0_13',valk=ngrno)
-            for i in range(len(collgrno[ngrno])) : NO_SANS.append(cnom[collgrno[ngrno][i]-1])
-          NO_SANS= map(string.rstrip,NO_SANS)
-        if SANS_NOEUD!=None : 
-          if type(SANS_NOEUD) not in EnumTypes : NO_SANS = (SANS_NOEUD,)
-          else : NO_SANS = SANS_NOEUD
-# Creation de la liste des noeuds du fond a traiter : Lnf1
-        Lnf1 = []
-        Nbf1 = 0
-        if len(NO_AVEC)!=0 :
-          for i in range(len(NO_AVEC)) :
-            if NO_AVEC[i] in LNOFO : 
-              Lnf1.append(NO_AVEC[i])
-              Nbf1 = Nbf1 +1
-            else : 
-              UTMESS('F','RUPTURE0_15',valk=NO_AVEC[i])
-        else :
-           for i in range(0,Nbfond,pas) :
-              if not (LNOFO[i] in NO_SANS) :
-                 Lnf1.append(LNOFO[i])
-                 Nbf1 = Nbf1 +1
-      else :
-        Lnf1 = LNOFO
-        Nbf1 = 1
+#     Verification du type des mailles de FOND_FISS
+#     ---------------------------------------------
+
+      verif_type_fond_fiss(ndim,FOND_FISS)
+
+#     Recuperation de la liste des noeuds du fond issus de la sd_fond_fiss : Lnoff, de longueur Nnoff
+#     ------------------------------------------------------------------------------------------------
+
+      Lnoff = get_noeud_fond_fiss(FOND_FISS)
+      Nnoff = len(Lnoff)
+
+#     Creation de la liste des noeuds du fond a calculer : Lnocal, de longueur Nnocal
+#     (obtenue par restriction de Lnoff avec TOUT, NOEUD, SANS_NOEUD)
+#     ----------------------------------------------------------------------------
+
+      Lnocal = get_noeud_a_calculer(Lnoff,ndim,FOND_FISS,MAILLAGE,EnumTypes,args)
+      Nnocal = len(Lnocal)
         
-##### Cas maillage libre###########
-# creation des directions normales et macr_lign_coup
+#     ------------------------------------------------------------------
+#     I.1 SOUS-CAS MAILLAGE LIBRE
+#     ------------------------------------------------------------------
+
+#     creation des directions normales et macr_lign_coup
       if TYPE_MAILLAGE =='LIBRE':
-        if not RESULTAT : UTMESS('F','RUPTURE0_16')
-        Lnofon = Lnf1
-        Nbnofo = Nbf1
-        ListmaS = FOND_FISS.LEVRESUP___MAIL.get()
-        if ListmaS==None :  UTMESS('F','RUPTURE0_19')
-        if SYME_CHAR=='SANS':
-          ListmaI = FOND_FISS.LEVREINF___MAIL.get()
-        __NCOFON=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds du fond',
-                                            NOEUD=LNOFO,
-                                            RESULTAT=RESULTAT,
-                                            NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
-                                            OPERATION='EXTRACTION',),);
-        tcoorf=__NCOFON.EXTR_TABLE()
-        DETRUIRE(CONCEPT=_F(NOM=__NCOFON),INFO=1) 
-        nbt = len(tcoorf['NOEUD'].values()['NOEUD'])
-        xs=NP.array(tcoorf['COOR_X'].values()['COOR_X'][:nbt])
-        ys=NP.array(tcoorf['COOR_Y'].values()['COOR_Y'][:nbt])
-        if ndim==2 : zs=NP.zeros(nbt)
-        elif ndim==3 : zs=NP.array(tcoorf['COOR_Z'].values()['COOR_Z'][:nbt])
-        ns = tcoorf['NOEUD'].values()['NOEUD'][:nbt]
-        ns = map(string.rstrip,ns)
-        l_coorf =  [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
-        l_coorf = [(i[0],i[1:]) for i in l_coorf]
-        d_coorf = dict(l_coorf) 
-# Coordonnee d un pt quelconque des levres pr determination sens de propagation
-        cmail=MAILLAGE.NOMMAI.get()
-        for i in range(len(cmail)) :
-            if cmail[i] == ListmaS[0] : break
-        colcnx=MAILLAGE.CONNEX.get()
-        cnom = MAILLAGE.NOMNOE.get()
-        NO_TMP = []
-        for k in range(len(colcnx[i+1])) : NO_TMP.append(cnom[colcnx[i+1][k]-1])
-        __NCOLEV=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees pt levre',
-                                          NOEUD = NO_TMP,
-                                           RESULTAT=RESULTAT,
-                                           NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
-                                           OPERATION='EXTRACTION',),);
-        tcoorl=__NCOLEV.EXTR_TABLE()
-        DETRUIRE(CONCEPT=_F(NOM=__NCOLEV),INFO=1) 
-        nbt = len(tcoorl['NOEUD'].values()['NOEUD'])
-        xl=moy(tcoorl['COOR_X'].values()['COOR_X'][:nbt])
-        yl=moy(tcoorl['COOR_Y'].values()['COOR_Y'][:nbt])
-        zl=moy(tcoorl['COOR_Z'].values()['COOR_Z'][:nbt])
-        Plev = NP.array([xl, yl, zl])
-# Calcul des normales a chaque noeud du fond
-        v1 =  NP.array(VECT_K1)
-        VN = [None]*Nbfond
-        absfon = [0,]
-        if MODELISATION=='3D' :
-          DTANOR = FOND_FISS.DTAN_ORIGINE.get()
-          Pfon2 = NP.array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
-          VLori = Pfon2 - Plev
-          if DTANOR != None :
-            VN[0] = NP.array(DTANOR)
-          else :
-            Pfon3 = NP.array([d_coorf[LNOFO[1]][0],d_coorf[LNOFO[1]][1],d_coorf[LNOFO[1]][2]])
-            VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
-            VN[0] = NP.array(cross_product(VT,v1))
-          for i in range(1,Nbfond-1):
-            Pfon1 = NP.array([d_coorf[LNOFO[i-1]][0],d_coorf[LNOFO[i-1]][1],d_coorf[LNOFO[i-1]][2]])
-            Pfon2 = NP.array([d_coorf[LNOFO[i]][0],d_coorf[LNOFO[i]][1],d_coorf[LNOFO[i]][2]])
-            Pfon3 = NP.array([d_coorf[LNOFO[i+1]][0],d_coorf[LNOFO[i+1]][1],d_coorf[LNOFO[i+1]][2]])
-            absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
-            absfon.append(absf)
-            VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
-            VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
-            VN[i] = NP.array(cross_product(VT,v1)) 
-            VN[i] = VN[i]/NP.sqrt(NP.dot(NP.transpose(VN[i]),VN[i]))
-          i = Nbfond-1
-          Pfon1 = NP.array([d_coorf[LNOFO[i-1]][0],d_coorf[LNOFO[i-1]][1],d_coorf[LNOFO[i-1]][2]])
-          Pfon2 = NP.array([d_coorf[LNOFO[i]][0],d_coorf[LNOFO[i]][1],d_coorf[LNOFO[i]][2]])
-          VLextr = Pfon2 - Plev
-          absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
-          absfon.append(absf)
-          DTANEX = FOND_FISS.DTAN_EXTREMITE.get()
-          if DTANEX != None :
-            VN[i] = NP.array(DTANEX)
-          else :
-            VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
-            VN[i] = NP.array(cross_product(VT,v1))
-          dicoF = dict([(LNOFO[i],absfon[i]) for i in range(Nbfond)])  
-          dicVN = dict([(LNOFO[i],VN[i]) for i in range(Nbfond)])
-#Sens de la tangente       
-          v = cross_product(VLori,VLextr)
-          sens = NP.sign(NP.dot(NP.transpose(v),v1))
-#Cas 2D              
-        if MODELISATION!='3D' :
-          DTANOR = False
-          DTANEX = False
-          VT = NP.array([0.,0.,1.])
-          VN = NP.array(cross_product(v1,VT))
-          dicVN = dict([(LNOFO[0],VN)])
-          Pfon = NP.array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
-          VLori = Pfon - Plev
-          sens = NP.sign(NP.dot(NP.transpose(VN),VLori))
-#Extraction dep sup/inf sur les normales          
-        TlibS = [None]*Nbf1
-        TlibI = [None]*Nbf1
-        if NB_NOEUD_COUPE < 3 : 
-          UTMESS('A','RUPTURE0_17')
-          NB_NOEUD_COUPE = 5
-        iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
-        n_modele=n_modele.rstrip()
-        if len(n_modele)==0 : UTMESS('F','RUPTURE0_18')
-        MODEL = self.get_concept(n_modele)
-        dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
-        for i in range(Nbf1):
-          Porig = NP.array(d_coorf[Lnf1[i]] )
-          if Lnf1[i]==LNOFO[0] and DTANOR : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
-          elif Lnf1[i]==LNOFO[Nbfond-1] and DTANEX : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
-          else : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]*sens
-          TlibS[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
-                NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaS),
-                LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                               TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
-                               DISTANCE_MAX=dmax),);
-          if SYME_CHAR=='SANS':
-            TlibI[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
-                  NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaI),
-                LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                               TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
-                               DISTANCE_MAX=dmax),);
-
-
-##### Cas maillage regle###########
+    
+         if not RESULTAT :
+            UTMESS('F','RUPTURE0_16')
+
+         ListmaS = FOND_FISS.LEVRESUP___MAIL.get()
+
+         if not ListmaS :
+            UTMESS('F','RUPTURE0_19')
+
+         if SYME_CHAR == 'SANS':
+            ListmaI = FOND_FISS.LEVREINF___MAIL.get()
+
+#        Dictionnaire des coordonnees des noeuds du fond 
+         d_coorf = get_coor_libre(self,Lnoff,RESULTAT,ndim)
+
+#        Coordonnee d un pt quelconque des levres pour determination sens de propagation
+         Plev = get_Plev(self,ListmaS,RESULTAT)
+
+#        Calcul des normales a chaque noeud du fond
+         if ndim == 3 :
+            DTANOR = FOND_FISS.DTAN_ORIGINE.get()
+            DTANEX = FOND_FISS.DTAN_EXTREMITE.get()
+         elif ndim ==2 :
+            DTANOR = False
+            DTANEX = False
+         (dicVN, dicoF, sens) = get_normale(VECT_K1,Nnoff,ndim,DTANOR,DTANEX,d_coorf,Lnoff,Plev)
+
+#        Extraction dep sup/inf sur les normales          
+         iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+         n_modele=n_modele.rstrip()
+         if len(n_modele)==0 :
+            UTMESS('F','RUPTURE0_18')
+         MODEL = self.get_concept(n_modele)
+         dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+
+         (__TlibS,__TlibI) = get_tab_dep(self,Lnocal,Nnocal,Nnoff,d_coorf,Lnoff,DTANOR,DTANEX,ABSC_CURV_MAXI,dicVN,sens,RESULTAT,MODEL,
+                                     ListmaS,ListmaI,NB_NOEUD_COUPE,dmax,SYME_CHAR)
+
+
+
+#        A eclaircir
+         Lnofon = Lnocal
+         Nbnofo = Nnocal
+
+#     ------------------------------------------------------------------
+#     I.2 SOUS-CAS MAILLAGE REGLE
+#     ------------------------------------------------------------------
+
       else:
-#   ---------- Dictionnaires des levres  -------------  
-        NnormS = FOND_FISS.SUPNORM____NOEU.get()
-        if NnormS==None : 
-          UTMESS('F','RUPTURE0_19')
-        NnormS = map(string.rstrip,NnormS)
-        if LNOFO[0]==LNOFO[-1] and MODELISATION=='3D' : Nbfond=Nbfond-1  # Cas fond de fissure ferme
-        NnormS = [[LNOFO[i],NnormS[i*20:(i+1)*20]] for i in range(0,Nbfond)]
-        NnormS = [(i[0],i[1][0:]) for i in NnormS]
-        dicoS = dict(NnormS)
-        if SYME_CHAR=='SANS':
-           NnormI = FOND_FISS.INFNORM____NOEU.get()
-           if NnormI==None : 
-             UTMESS('F','RUPTURE0_20')
-           NnormI = map(string.rstrip,NnormI)
-           NnormI = [[LNOFO[i],NnormI[i*20:(i+1)*20]] for i in range(0,Nbfond)]
-           NnormI = [(i[0],i[1][0:]) for i in NnormI]
-           dicoI = dict(NnormI)
-
-#   ---------- Dictionnaire des coordonnees  -------------  
-        if RESULTAT :
-          Ltot = LNOFO
-          for i in range(Nbf1) :
-            for k in range(0,20) :
-              if dicoS[Lnf1[i]][k] !='': Ltot.append(dicoS[Lnf1[i]][k])
-          if SYME_CHAR=='SANS':
-            for i in range(Nbf1) :
-              for k in range(0,20) :
-                if dicoI[Lnf1[i]][k] !='': Ltot.append(dicoI[Lnf1[i]][k])
-          Ltot=dict([(i,0) for i in Ltot]).keys()
-          __NCOOR=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds des levres',
-                                            NOEUD=Ltot,
-                                            RESULTAT=RESULTAT,
-                                            NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
-                                            OPERATION='EXTRACTION',),);
-          tcoor=__NCOOR.EXTR_TABLE()
-          DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)  
-        else :  
-          if SYME_CHAR=='SANS':
-            __NCOOR=CALC_TABLE(TABLE=TABL_DEPL_SUP,
-                        ACTION=_F(OPERATION = 'COMB',NOM_PARA='NOEUD',TABLE=TABL_DEPL_INF,))
-            tcoor=__NCOOR.EXTR_TABLE()
-            DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)  
-          else :
-            tcoor=TABL_DEPL_SUP.EXTR_TABLE()
-        nbt = len(tcoor['NOEUD'].values()['NOEUD'])
-        xs=NP.array(tcoor['COOR_X'].values()['COOR_X'][:nbt])
-        ys=NP.array(tcoor['COOR_Y'].values()['COOR_Y'][:nbt])
-        if ndim==2 : zs=NP.zeros(nbt)
-        elif ndim==3 : zs=NP.array(tcoor['COOR_Z'].values()['COOR_Z'][:nbt])
-        ns = tcoor['NOEUD'].values()['NOEUD'][:nbt]
-        ns = map(string.rstrip,ns)
-        l_coor =  [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
-        l_coor = [(i[0],i[1:]) for i in l_coor]
-        d_coor = dict(l_coor)
-
-#   ---------- Abscisse curviligne du fond  -------------  
-        absfon = [0,]
-        for i in range(Nbfond-1) :
-          Pfon1 = NP.array([d_coor[LNOFO[i]][0],d_coor[LNOFO[i]][1],d_coor[LNOFO[i]][2]])
-          Pfon2 = NP.array([d_coor[LNOFO[i+1]][0],d_coor[LNOFO[i+1]][1],d_coor[LNOFO[i+1]][2]])
-          absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i]
-          absfon.append(absf)
-        dicoF = dict([(LNOFO[i],absfon[i]) for i in range(Nbfond)])
+#        Dictionnaires des levres 
+         dicoS = get_dico_levres('sup',FOND_FISS,ndim,Lnoff,Nnoff)
+         dicoI= {}
+         if SYME_CHAR=='SANS':
+            dicoI = get_dico_levres('inf',FOND_FISS,ndim,Lnoff,Nnoff)
+
+#        Dictionnaire des coordonnees  
+         d_coor = get_coor_regle(self,RESULTAT,ndim,Lnoff,Lnocal,dicoS,SYME_CHAR,dicoI,TABL_DEPL_SUP,TABL_DEPL_INF)
+
+#        Abscisse curviligne du fond
+         dicoF = get_absfon(Lnoff,Nnoff,d_coor)
+          
+#        Noeuds LEVRE_SUP et LEVRE_INF
+         (Lnofon, Lnosup, Lnoinf) = get_noeuds_perp_regle(Lnocal,d_coor,dicoS,dicoI,Lnoff,
+                                                          PREC_VIS_A_VIS,ABSC_CURV_MAXI,SYME_CHAR,rmprec,precn)
+         Nbnofo = len(Lnofon)
+
+#  ------------------------------------------------------------------
+#  II. CAS X-FEM
+#  ------------------------------------------------------------------
 
-     
-# ---Noeuds LEVRE_SUP et LEVRE_INF: ABSC_CURV_MAXI et PREC_VIS_A_VIS-----
-   
-        NBTRLS = 0
-        NBTRLI = 0
-        Lnosup = [None]*Nbf1
-        Lnoinf = [None]*Nbf1
-        Nbnofo = 0
-        Lnofon = []
-        precv = PREC_VIS_A_VIS
-        if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
-        else                   : rmax = 100
-        precn = precv * rmax
-        rmprec= rmax*(1.+precv/10.)
-        for i in range(0,Nbf1) :
-           Pfon = NP.array([d_coor[Lnf1[i]][0],d_coor[Lnf1[i]][1],d_coor[Lnf1[i]][2]])
-           Tmpsup = []
-           Tmpinf = []
-           itots = 0
-           itoti = 0
-           NBTRLS = 0
-           NBTRLI = 0
-           for k in range(0,20) :
-              if dicoS[Lnf1[i]][k] !='':
-                 itots = itots +1
-                 Nsup =  dicoS[Lnf1[i]][k]
-                 Psup = NP.array([d_coor[Nsup][0],d_coor[Nsup][1],d_coor[Nsup][2]])
-                 abss = NP.sqrt(NP.dot(NP.transpose(Pfon-Psup),Pfon-Psup))
-                 if abss<rmprec :
-                    NBTRLS = NBTRLS +1
-                    Tmpsup.append(dicoS[Lnf1[i]][k])
-              if SYME_CHAR=='SANS':
-                 if dicoI[Lnf1[i]][k] !='':
-                    itoti = itoti +1
-                    Ninf =  dicoI[Lnf1[i]][k]
-                    Pinf = NP.array([d_coor[Ninf][0],d_coor[Ninf][1],d_coor[Ninf][2]])
-                    absi = NP.sqrt(NP.dot(NP.transpose(Pfon-Pinf),Pfon-Pinf))
-# On verifie que les noeuds sont en vis a vis
-                    if abss<rmprec :
-                      dist = NP.sqrt(NP.dot(NP.transpose(Psup-Pinf),Psup-Pinf))
-                      if dist>precn : 
-                        UTMESS('A','RUPTURE0_21',valk=Lnf1[i])
-                      else :
-                        NBTRLI = NBTRLI +1
-                        Tmpinf.append(dicoI[Lnf1[i]][k])
-# On verifie qu il y a assez de noeuds
-           if NBTRLS < 3 : 
-              UTMESS('A+','RUPTURE0_22',valk=Lnf1[i])
-              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
-              if itots<3 : UTMESS('A','RUPTURE0_24')
-              else : UTMESS('A','RUPTURE0_25')
-           elif (SYME_CHAR=='SANS') and (NBTRLI < 3) :
-              UTMESS('A+','RUPTURE0_26',valk=Lnf1[i])
-              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
-              if itoti<3 : UTMESS('A','RUPTURE0_24')
-              else :UTMESS('A','RUPTURE0_25')
-#              UTMESS('A','RUPTURE0_23')
-           else :
-              Lnosup[Nbnofo] = Tmpsup
-              if SYME_CHAR=='SANS' : Lnoinf[Nbnofo] = Tmpinf
-              Lnofon.append(Lnf1[i])
-              Nbnofo = Nbnofo+1
-        if Nbnofo == 0 :
-          UTMESS('F','RUPTURE0_30')
-
-#------------- Cas X-FEM ---------------------------------
    elif FISSURE :
-     MAILLAGE = args['MAILLAGE']
-     DTAN_ORIG = args['DTAN_ORIG']
-     DTAN_EXTR = args['DTAN_EXTR']
-     dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
-#Projection du resultat sur le maillage lineaire initial     
-     iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
-     n_modele=n_modele.rstrip()
-     if len(n_modele)==0 : UTMESS('F','RUPTURE0_18')
-     MODEL = self.get_concept(n_modele)
-     xcont = MODEL.xfem.XFEM_CONT.get()
-     if xcont[0] == 0 :
-       __RESX = RESULTAT
-# Si XFEM + contact : il faut reprojeter sur le maillage lineaire
-     if xcont[0] != 0 :
-       __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE,
-                           AFFE=(_F(TOUT='OUI',
-                            PHENOMENE='MECANIQUE',
-                            MODELISATION=MODELISATION,),),);        
-       __RESX=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL',
-                     RESULTAT=RESULTAT,
-                     MODELE_1=MODEL,
-                     MODELE_2=__MODLINE, );   
-#Recuperation des coordonnees des points du fond de fissure (x,y,z,absc_curv)
-     Listfo = FISSURE.FONDFISS.get()
-     Basefo = FISSURE.BASEFOND.get()
-     NB_POINT_FOND = args['NB_POINT_FOND']
-#Traitement du cas fond multiple
-     Fissmult = FISSURE.FONDMULT.get()
-     Nbfiss = len(Fissmult)/2
-     Numfiss = args['NUME_FOND']
-     if  Numfiss <= Nbfiss and Nbfiss > 1 :
-       Ptinit = Fissmult[2*(Numfiss-1)]
-       Ptfin = Fissmult[2*(Numfiss-1)+1]
-       Listfo2 = Listfo[((Ptinit-1)*4):(Ptfin*4)]
-       Listfo = Listfo2
-       Basefo2 = Basefo[((Ptinit-1)*(2*ndim)):(Ptfin*(2*ndim))]
-       Basefo = Basefo2
-     elif  Numfiss > Nbfiss :
-       UTMESS('F','RUPTURE1_38',vali=[Nbfiss,Numfiss])
-####     
-     
-     if NB_POINT_FOND != None and MODELISATION=='3D' :
-       Nbfond = NB_POINT_FOND
-       absmax = Listfo[-1]
-       Coorfo = [None]*4*Nbfond
-       Vpropa = [None]*3*Nbfond
-       for i in range(0,Nbfond) :
-         absci = i*absmax/(Nbfond-1)
-         Coorfo[(4*i):(4*(i+1))] = InterpolFondFiss(absci, Listfo)
-         Vpropa[(6*i):(6*(i+1))] = InterpolBaseFiss(absci,Basefo, Listfo)
-     else :
-       Coorfo = Listfo
-       Vpropa = Basefo
-       Nbfond = len(Coorfo)/4
-# Calcul de la direction de propagation en chaque point du fond
-     VP = [None]*Nbfond
-     VN = [None]*Nbfond
-     absfon = [0,]
-# Cas fissure non necessairement plane     
-     if VECT_K1 == None :
-       i = 0
-       if MODELISATION=='3D' :
-         if DTAN_ORIG != None :
-           VP[0] = NP.array(DTAN_ORIG)
-           VP[0] = VP[0]/NP.sqrt(VP[0][0]**2+VP[0][1]**2+VP[0][2]**2)
-           VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
-           verif = NP.dot(NP.transpose(VP[0]),VN[0]) 
-           if abs(verif) > 0.01:
-             UTMESS('A','RUPTURE1_33',valr=[VN[0][0],VN[0][1],VN[0][2]])
-         else :
-           VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
-           VP[0] = NP.array([Vpropa[3+0],Vpropa[3+1],Vpropa[3+2]])
-         for i in range(1,Nbfond-1):
-           absf = Coorfo[4*i+3]
-           absfon.append(absf)
-           VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
-           VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
-           verif = NP.dot(NP.transpose(VN[i]),VN[i-1]) 
-           if abs(verif) < 0.98:
-             UTMESS('A','RUPTURE1_35',vali=[i-1,i])
-         i = Nbfond-1
-         absf =  Coorfo[4*i+3]
-         absfon.append(absf)
-         if DTAN_EXTR != None :
-           VP[i] = NP.array(DTAN_EXTR)
-           VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
-           verif = NP.dot(NP.transpose(VP[i]),VN[0]) 
-           if abs(verif) > 0.01:
-             UTMESS('A','RUPTURE1_34',valr=[VN[i][0],VN[i][1],VN[i][2]])
-         else :
-           VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
-           VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
-       else : 
-         for i in range(0,Nbfond):
-           VP[i] = NP.array([Vpropa[2+4*i],Vpropa[3+4*i],0.])
-           VN[i] = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
-# Cas fissure plane (VECT_K1 donne)
-     if VECT_K1 != None :
-       v1 =  NP.array(VECT_K1)
-       v1  = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
-       v1 =  NP.array(VECT_K1)
-       i = 0
-       if MODELISATION=='3D' :
-# Sens du vecteur VECT_K1       
-         v1x =NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
-         verif = NP.dot(NP.transpose(v1),v1x) 
-         if verif < 0 : v1 = -v1
-         VN = [v1]*Nbfond
-         if DTAN_ORIG != None :
-           VP[i] = NP.array(DTAN_ORIG)
-           VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
-           verif = NP.dot(NP.transpose(VP[i]),VN[0]) 
-           if abs(verif) > 0.01:
-             UTMESS('A','RUPTURE1_36')
-         else :
-           Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
-           Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
-           VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
-           VP[0] = NP.array(cross_product(VT,v1))
-           VNi = NP.array([Vpropa[3],Vpropa[4],Vpropa[5]])
-           verif = NP.dot(NP.transpose(VP[i]),VNi) 
-           if abs(verif) < 0.99:
-             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
-             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
-         for i in range(1,Nbfond-1):
-           Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
-           Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
-           Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
-           absf =  Coorfo[4*i+3]
-           absfon.append(absf)
-           VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
-           VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
-           VP[i] = NP.array(cross_product(VT,v1)) 
-           VP[i] = VP[i]/NP.sqrt(NP.dot(NP.transpose(VP[i]),VP[i]))
-           VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
-           verif = NP.dot(NP.transpose(VN[i]),VNi) 
-           if abs(verif) < 0.99:
-             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
-             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
-         i = Nbfond-1
-         Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
-         Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
-         absf =  Coorfo[4*i+3]
-         absfon.append(absf)
-         if DTAN_EXTR != None :
-           VP[i] = NP.array(DTAN_EXTR)
-           VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
-           verif = NP.dot(NP.transpose(VP[i]),VN[i]) 
-           if abs(verif) > 0.01:
-             UTMESS('A','RUPTURE1_37')
-         else :
-           VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
-           VP[i] = NP.array(cross_product(VT,v1))
-           VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
-           verif = NP.dot(NP.transpose(VN[i]),VNi) 
-           if abs(verif) < 0.99 :
-             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
-             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
-       else :  
-         VT = NP.array([0.,0.,1.])
-         for i in range(0,Nbfond):
-           VP[i] = NP.array(cross_product(v1,VT))  
-           VN[i] = v1
-           VNi = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
-           verif = NP.dot(NP.transpose(VN[i]),VNi) 
-           if abs(verif) < 0.99 :
-             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
-             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
-#Sens de la tangente   
-     if MODELISATION=='3D' : i = Nbfond/2
-     else : i = 0
-     Po =  NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
-     Porig = Po + ABSC_CURV_MAXI*VP[i]
-     Pextr = Po - ABSC_CURV_MAXI*VP[i]
-     __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
-                   LIGN_COUPE=_F(NB_POINTS=3,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                                  TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
-                                  DISTANCE_MAX=dmax),);
-     tmp=__Tabg.EXTR_TABLE()
-#     a sam
-     test = getattr(tmp,'H1X').values()
-#     test = getattr(tmp,'E1X').values()
-     if test==[None]*3 : 
-        UTMESS('F','RUPTURE0_33')
-     if test[0]!=None :
-       sens = 1
-     else :
-       sens = -1
-     DETRUIRE(CONCEPT=_F(NOM=__Tabg),INFO=1) 
-# Extraction des sauts sur la fissure          
-     NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
-     if NB_NOEUD_COUPE < 3 : 
-       UTMESS('A','RUPTURE0_34')
-       NB_NOEUD_COUPE = 5
-     mcfact=[]
-     for i in range(Nbfond):
-        Porig = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
-        if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
-        elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
-        else : Pextr = Porig + ABSC_CURV_MAXI*VP[i]*sens
-        mcfact.append(_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
-                          TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
-                          DISTANCE_MAX=dmax),)
-     TSo = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
-                         LIGN_COUPE=mcfact);
-
-     TTSo = TSo.EXTR_TABLE()
-     DETRUIRE(CONCEPT=_F(NOM=TSo),INFO=1) 
-     Nbnofo = Nbfond
-     if xcont[0] != 0 :  
-       DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1) 
-       DETRUIRE(CONCEPT=_F(NOM=__RESX),INFO=1) 
+
+      if RESULTAT :
+        iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',RESULTAT.nom,'RESULTAT')
+        MAILLAGE = self.get_concept(nom_ma.strip())
+      else:
+        MAILLAGE = args['MAILLAGE']
+
+      DTAN_ORIG = args['DTAN_ORIG']
+      DTAN_EXTR = args['DTAN_EXTR']
+      dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+
+      (xcont,MODEL) = verif_resxfem(self,RESULTAT)
+      # incohérence entre le modèle et X-FEM
+      if not xcont :
+         UTMESS('F','RUPTURE0_4')
+
+#     Recuperation du resultat
+      __RESX = get_resxfem(self,xcont,RESULTAT,MODELISATION,MODEL)
+
+#     Recuperation des coordonnees des points du fond de fissure (x,y,z,absc_curv)
+      (Coorfo, Vpropa, Nnoff) = get_coor_xfem(args,FISSURE,ndim)
+
+#     Calcul de la direction de propagation en chaque point du fond
+      (VP,VN,absfon) = get_direction_xfem(Nnoff,Vpropa,Coorfo,VECT_K1,DTAN_ORIG,DTAN_EXTR,ndim)
+
+#     Sens de la tangente   
+      sens = get_sens_tangente_xfem(self,ndim,Nnoff,Coorfo,VP,ABSC_CURV_MAXI,__RESX,dmax)
+
+#     Extraction des sauts sur la fissure          
+      NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
+      TTSo = get_sauts_xfem(self,Nnoff,Coorfo,VP,sens,
+                            DTAN_ORIG,DTAN_EXTR,ABSC_CURV_MAXI,NB_NOEUD_COUPE,dmax,__RESX)
+
+      Lnofon = []
+      Nbnofo = Nnoff
+
+#     menage du resultat projete si contact
+      if xcont[0] != 0 :  
+         DETRUIRE(CONCEPT=_F(NOM=__RESX),INFO=1) 
    
-     if INFO==2 :
-        mcfact=[]
-        mcfact.append(_F(PARA='PT_FOND',LISTE_I=range(Nbfond)))
-        mcfact.append(_F(PARA='VN_X'        ,LISTE_R=[VN[i][0] for i in range(Nbfond)]))
-        mcfact.append(_F(PARA='VN_Y'        ,LISTE_R=[VN[i][1] for i in range(Nbfond)]))
-        mcfact.append(_F(PARA='VN_Z'        ,LISTE_R=[VN[i][2] for i in range(Nbfond)]))
-        mcfact.append(_F(PARA='VP_X'        ,LISTE_R=[VP[i][0] for i in range(Nbfond)]))
-        mcfact.append(_F(PARA='VP_Y'        ,LISTE_R=[VP[i][1] for i in range(Nbfond)]))
-        mcfact.append(_F(PARA='VP_Z'        ,LISTE_R=[VP[i][2] for i in range(Nbfond)]))
-        __resu2=CREA_TABLE(LISTE=mcfact,TITRE='             VECTEUR NORMAL A LA FISSURE    -    DIRECTION DE PROPAGATION')
-        aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
-        DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+      affiche_xfem(self,INFO,Nnoff,VN,VP)
+
+#  ------------------------------------------------------------------
+#  III. CAS BATARD
+#  ------------------------------------------------------------------
    
    else :
-     Nbnofo = 1 
-     
-#   ----------Recuperation de la temperature au fond -------------  
+
+      Nbnofo = 1
+      Lnofon=[] 
+      
+      # a suprrimer qd menage 
+      Nnoff = 1 
+
+   #  creation des objets vides s'ils n'existent pas
+   #  de maniere a pouvoir les passer en argument des fonctions
+   #  c'est pas terrible : il faudrait harmoniser les noms entre les différents cas
+   if '__TlibS'  not in locals() : __TlibS  = []
+   if '__TlibI'  not in locals() : __TlibI  = []
+   if 'Lnosup' not in locals() : Lnosup = []
+   if 'Lnoinf' not in locals() : Lnoinf = []
+   if 'TTSo'   not in locals() : TTSo   = []
+   if 'VP'     not in locals() : VP     = []
+   if 'VN'     not in locals() : VN     = []
+   if 'dicoF'  not in locals() : dicoF  = []
+   if 'absfon' not in locals() : absfon = []
+   if 'd_coor' not in locals() : d_coor = []
+   
+   
+#  ------------------------------------------------------------------
+#  IV. RECUPERATION DE LA TEMPERATURE AU FOND
+#  ------------------------------------------------------------------
+
    if Tempe3D :
       Rth = self.get_concept(resuth)
+
       __TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='Temperature fond de fissure',
-                                       NOEUD=Lnofon,TOUT_CMP='OUI',
-                                       RESULTAT=Rth,NOM_CHAM='TEMP',TOUT_ORDRE='OUI',
-                                       OPERATION='EXTRACTION',),);
+                                     NOEUD=Lnofon,
+                                     TOUT_CMP='OUI',
+                                     RESULTAT=Rth,
+                                     NOM_CHAM='TEMP',
+                                     TOUT_ORDRE='OUI',
+                                     OPERATION='EXTRACTION',),);
+
       tabtemp=__TEMP.EXTR_TABLE()
       DETRUIRE(CONCEPT=_F(NOM=__TEMP),INFO=1) 
    
+#  ------------------------------------------------------------------
+#  V. BOUCLE SUR NOEUDS DU FOND
+#  ------------------------------------------------------------------
 
-#   ------------------------------------------------------------------
-#                         BOUCLE SUR NOEUDS DU FOND
-#   ------------------------------------------------------------------
    for ino in range(0,Nbnofo) :
-      if FOND_FISS and INFO==2 :
-            texte="\n\n--> TRAITEMENT DU NOEUD DU FOND DE FISSURE: %s"%Lnofon[ino]
-            aster.affiche('MESSAGE',texte)
-      if FISSURE and INFO==2 :
-            texte="\n\n--> TRAITEMENT DU POINT DU FOND DE FISSURE NUMERO %s"%(ino+1)
-            aster.affiche('MESSAGE',texte)
-#   ------------------------------------------------------------------
-#                         TABLE 'DEPSUP'
-#   ------------------------------------------------------------------
-      if FOND_FISS : 
-         if TYPE_MAILLAGE =='LIBRE':
-            tabsup=TlibS[ino].EXTR_TABLE()
-            DETRUIRE(CONCEPT=_F(NOM=TlibS[ino]),INFO=1)
-         elif RESULTAT :
-            if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
-                __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
-                                              NOEUD=Lnosup[ino],
-                                              RESULTAT=RESULTAT,
-                                              NOM_CHAM='DEPL',
-                                              TOUT_ORDRE='OUI',
-                                              NOM_CMP=('DX','DY',),
-                                              OPERATION='EXTRACTION',),);
-            else :
-                __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
-                                              NOEUD=Lnosup[ino],
-                                              RESULTAT=RESULTAT,
-                                              NOM_CHAM='DEPL',
-                                              TOUT_ORDRE='OUI',
-                                              NOM_CMP=('DX','DY','DZ',),
-                                              OPERATION='EXTRACTION',),);
-            tabsup=__TSUP.EXTR_TABLE()
-            DETRUIRE(CONCEPT=_F(NOM=__TSUP),INFO=1)      
-         else :
-            tabsup=TABL_DEPL_SUP.EXTR_TABLE()
-            veri_tab(tabsup,TABL_DEPL_SUP.nom,ndim)
-            Ls = [string.ljust(Lnosup[ino][i],8) for i in range(len(Lnosup[ino]))]
-            tabsup=tabsup.NOEUD==Ls
-      elif FISSURE :
-         tabsup = TTSo.INTITULE=='l.coupe%i'%(ino+1)
-      else :
-         tabsup=TABL_DEPL_SUP.EXTR_TABLE()
-         veri_tab(tabsup,TABL_DEPL_SUP.nom,ndim)
+      
+      affiche_traitement(FOND_FISS,INFO,FISSURE,Lnofon,ino)
 
-#   ------------------------------------------------------------------
-#                          TABLE 'DEPINF'
-#   ------------------------------------------------------------------
-      if SYME_CHAR=='SANS' and not FISSURE : 
-         if FOND_FISS : 
-            if TYPE_MAILLAGE =='LIBRE':
-               tabinf=TlibI[ino].EXTR_TABLE()
-               DETRUIRE(CONCEPT=_F(NOM=TlibI[ino]),INFO=1)
-            elif RESULTAT :
-               if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
-                  __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
-                                             NOEUD=Lnoinf[ino],
-                                             RESULTAT=RESULTAT,
-                                             NOM_CHAM='DEPL',
-                                             TOUT_ORDRE='OUI',
-                                             NOM_CMP=('DX','DY'),
-                                             OPERATION='EXTRACTION',),);
-               else :
-                  __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
-                                             NOEUD=Lnoinf[ino],
-                                             RESULTAT=RESULTAT,
-                                             NOM_CHAM='DEPL',
-                                             TOUT_ORDRE='OUI',
-                                             NOM_CMP=('DX','DY','DZ',),
-                                             OPERATION='EXTRACTION',),);
-               tabinf=__TINF.EXTR_TABLE()   
-               DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1)                 
-            else :
-               tabinf=TABL_DEPL_INF.EXTR_TABLE()
-               if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
-               veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
-               Li = [string.ljust(Lnoinf[ino][i],8) for i in range(len(Lnoinf[ino]))]
-               tabinf=tabinf.NOEUD==Li
-         else :
-            if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
-            tabinf=TABL_DEPL_INF.EXTR_TABLE()
-            veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
+#     table 'depsup' et 'depinf'
+      tabsup = get_tab(self,'sup',ino,__TlibS,Lnosup,TTSo,
+                       FOND_FISS,FISSURE,TYPE_MAILLAGE,RESULTAT,SYME_CHAR,TABL_DEPL_SUP,ndim)
+      tabinf = get_tab(self,'inf',ino,__TlibI,Lnoinf,TTSo,
+                       FOND_FISS,FISSURE,TYPE_MAILLAGE,RESULTAT,SYME_CHAR,TABL_DEPL_INF,ndim)
 
+#     les instants de post-traitement : creation de l_inst
+      (l_inst,PRECISION,CRITERE) = get_liste_inst(tabsup,args,LIST_ORDRE,NUME_ORDRE,INST,LIST_INST,EnumTypes)
 
-#   ------------------------------------------------------------------
-#               LES INSTANTS DE POST-TRAITEMENT
-#   ------------------------------------------------------------------
-      if 'INST' in tabsup.para : 
-         l_inst=None
-         l_inst_tab=tabsup['INST'].values()['INST']
-         l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys() #elimine les doublons
-         l_inst_tab.sort()
-         if LIST_ORDRE !=None or NUME_ORDRE !=None :
-           l_ord_tab = tabsup['NUME_ORDRE'].values()['NUME_ORDRE']
-           l_ord_tab.sort()
-           l_ord_tab=dict([(i,0) for i in l_ord_tab]).keys() 
-           d_ord_tab= [[l_ord_tab[i],l_inst_tab[i]] for i in range(0,len(l_ord_tab))]
-           d_ord_tab= [(i[0],i[1]) for i in d_ord_tab]
-           d_ord_tab = dict(d_ord_tab)
-           if NUME_ORDRE !=None : 
-             if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
-             l_ord=list(NUME_ORDRE)
-           elif LIST_ORDRE !=None : 
-              l_ord = LIST_ORDRE.VALE.get() 
-           l_inst = []
-           for ord in l_ord :
-             if ord in l_ord_tab : l_inst.append(d_ord_tab[ord])
-             else :  
-               UTMESS('F','RUPTURE0_37',vali=ord)
-           PRECISION = 1.E-6
-           CRITERE='ABSOLU'
-         elif INST !=None or LIST_INST !=None :
-            CRITERE = args['CRITERE']
-            PRECISION = args['PRECISION']
-            if  INST !=None : 
-              if type(INST) not in EnumTypes : INST=(INST,)
-              l_inst=list(INST)
-            elif LIST_INST !=None : l_inst=LIST_INST.Valeurs()
-            for inst in l_inst  :
-               if CRITERE=='RELATIF' and inst!=0.: match=[x for x in l_inst_tab if abs((inst-x)/inst)<PRECISION]
-               else                              : match=[x for x in l_inst_tab if abs(inst-x)<PRECISION]
-               if len(match)==0 : 
-                 UTMESS('F','RUPTURE0_38',valr=inst)
-               if len(match)>=2 :
-                 UTMESS('F','RUPTURE0_39',valr=inst)
-         else :
-            l_inst=l_inst_tab
-            PRECISION = 1.E-6
-            CRITERE='ABSOLU'
-      else :
-         l_inst  = [None,]
-   
-#   ------------------------------------------------------------------
+#     ------------------------------------------------------------------
 #                         BOUCLE SUR LES INSTANTS
-#   ------------------------------------------------------------------
-      for iord in range(len(l_inst)) :
-        inst=l_inst[iord]
-        if INFO==2 and inst!=None:
-            texte="#=================================================================================\n"
-            texte=texte+"==> INSTANT: %f"%inst
-            aster.affiche('MESSAGE',texte)
-        if inst!=None:
-           if PRECISION == None : PRECISION = 1.E-6
-           if CRITERE == None : CRITERE='ABSOLU'
-           if inst==0. :
-             tabsupi=tabsup.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
-             if SYME_CHAR=='SANS'and not FISSURE: tabinfi=tabinf.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
-           else :
-             tabsupi=tabsup.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
-             if SYME_CHAR=='SANS' and not FISSURE: tabinfi=tabinf.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
-        else :
-           tabsupi=tabsup
-           if SYME_CHAR=='SANS' and not FISSURE : tabinfi=tabinf
-
-#     --- LEVRE SUP :  "ABSC_CURV" CROISSANTES, < RMAX ET DEP ---
-        abscs = getattr(tabsupi,'ABSC_CURV').values()
-        if not FISSURE :
-          if not FOND_FISS :
-            refs=copy.copy(abscs)
-            refs.sort()
-            if refs!=abscs :
-               mctabl='TABL_DEPL_INF' 
-               UTMESS('F','RUPTURE0_40',valk=mctabl)
-            if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
-            else                    : rmax = abscs[-1]
-            precv = PREC_VIS_A_VIS
-            rmprec= rmax*(1.+precv/10.)
-            refsc=[x for x in refs if x<rmprec]
-            nbval = len(refsc)
-          else :
-            nbval=len(abscs)
-          abscs=NP.array(abscs[:nbval])
-          coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
-          coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
-          if ndim==2 :  cozs=NP.zeros(nbval)
-          elif ndim==3 :  cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+#     ------------------------------------------------------------------
+      for iord,inst in enumerate(l_inst) :
+
+#        impression de l'instant de calcul
+         affiche_instant(INFO,inst)
+
+#        recuperation de la table au bon instant : tabsupi (et tabinfi)
+         tabsupi = get_tab_inst('sup',inst,FISSURE,SYME_CHAR,PRECISION,CRITERE,tabsup,tabinf)
+         tabinfi = get_tab_inst('inf',inst,FISSURE,SYME_CHAR,PRECISION,CRITERE,tabsup,tabinf)
+
+#        recupération des déplacements sup et inf : ds et di
+         (abscs,ds) = get_depl_sup(FISSURE,FOND_FISS,rmprec,RESULTAT,tabsupi,ndim,d_coor,Lnofon,ino)
+         (absci,di) = get_depl_inf(FISSURE,FOND_FISS,rmprec,RESULTAT,tabinfi,ndim,d_coor,Lnofon,ino,SYME_CHAR)
+
+#        récupération des propriétés materiau avec temperature 
+         if Tempe3D :
+            (e,nu,coefd,coefd3,coefg,coefg3) = get_propmat_tempe(MATER,tabtemp,Lnofon,ino,inst,PRECISION)
+
+#        TESTS NOMBRE DE NOEUDS
+         nbval = len(abscs)
+
+         if nbval<3 :
+
+            UTMESS('A+','RUPTURE0_46')
+            if FOND_FISS :
+                UTMESS('A+','RUPTURE0_47',valk=Lnofon[ino])
+            if FISSURE :
+                UTMESS('A+','RUPTURE0_99',vali=ino)
+            UTMESS('A','RUPTURE0_25')
+            kg1 = [0.]*8
+            kg2 = [0.]*8
+            kg3 = [0.]*8
           
-          if FOND_FISS and not RESULTAT : #tri des noeuds avec abscisse
-            Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
-            abscs = NP.sqrt((coxs-Pfon[0])**2+(coys-Pfon[1])**2+(cozs-Pfon[2])**2)
-            tabsupi['Abs_fo'] = abscs
-            tabsupi.sort('Abs_fo')
-            abscs = getattr(tabsupi,'Abs_fo').values()
-            abscs=NP.array(abscs[:nbval])
-            coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
-            coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
-            if ndim==2 :  cozs=NP.zeros(nbval)
-            elif ndim==3 :  cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+         else :  
+
+#           SI NBVAL >= 3 : 
+#            
+#           récupération de la matrice de changement de repère 
+#          (je ne comprends pas pourquoi elle dépend de l'instant)
+            pgl = get_pgl(SYME_CHAR,FISSURE,VECT_K1,ino,VP,VN,tabsupi,tabinfi,nbval,ndim)
+
+#           calcul du saut de déplacements dans le nouveau repère
+            saut = get_saut(self,pgl,ds,di,INFO,FISSURE,SYME_CHAR,abscs,ndim)
+
+#           CALCUL DES K1, K2, K3
+            (isig,kgsig,saut2) = get_kgsig(saut,nbval,coefd,coefd3)
             
-          if FOND_FISS and INFO==2 and iord==0 and not TYPE_MAILLAGE =='LIBRE':
-            for ks in range(0,nbval) :
-              texte="NOEUD RETENU POUR LA LEVRE SUP: %s  %f"%(Lnosup[ino][ks],abscs[ks])
-              aster.affiche('MESSAGE',texte)
-          dxs=NP.array(tabsupi['DX'].values()['DX'][:nbval])
-          dys=NP.array(tabsupi['DY'].values()['DY'][:nbval])
-          if ndim==2 : dzs=NP.zeros(nbval)
-          elif ndim==3 : dzs=NP.array(tabsupi['DZ'].values()['DZ'][:nbval])
-          
-#     --- LEVRE INF :  "ABSC_CURV" CROISSANTES et < RMAX ---
-        if SYME_CHAR=='SANS' and not FISSURE : 
-          absci = getattr(tabinfi,'ABSC_CURV').values()
-          if not FOND_FISS :
-            refi=copy.copy(absci)
-            refi.sort()
-            if refi!=absci :
-                mctabl='TABL_DEPL_SUP' 
-                UTMESS('F','RUPTURE0_40',valk=mctabl)
-            refic=[x for x in refi if x<rmprec]
-            nbvali=len(refic)
-          else :
-            nbvali=len(absci)
-          if nbvali!=nbval :
-             if FOND_FISS : 
-                UTMESS('A+','RUPTURE0_42')
-                UTMESS('A','RUPTURE0_43',valk=Lnofon[i],vali=[len(refsc),len(refic)])
-             else:
-                UTMESS('A','RUPTURE0_42')
-          nbval=min(nbval,nbvali)
-          absci=NP.array(absci[:nbval])
-          coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
-          coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
-          if ndim==2 : cozi=NP.zeros(nbval)
-          elif ndim==3 : cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
-#     --- ON VERIFIE QUE LES NOEUDS SONT EN VIS_A_VIS  (SYME=SANS)   ---
-          if not FOND_FISS :
-            precn = precv * rmax
-            dist=(coxs-coxi)**2+(coys-coyi)**2+(cozs-cozi)**2
-            dist=NP.sqrt(dist)
-            for d in dist :
-               if d>precn : UTMESS('F','RUPTURE0_44')
-          
-          if FOND_FISS and not RESULTAT :#tri des noeuds avec abscisse
-            Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
-            absci = NP.sqrt((coxi-Pfon[0])**2+(coyi-Pfon[1])**2+(cozi-Pfon[2])**2)
-            tabinfi['Abs_fo'] = absci
-            tabinfi.sort('Abs_fo')
-            absci = getattr(tabinfi,'Abs_fo').values()
-            absci=NP.array(abscs[:nbval])
-            coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
-            coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
-            if ndim==2 :  cozi=NP.zeros(nbval)
-            elif ndim==3 :  cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+#           calcul des K et de G par les methodes 1, 2 et 3
+            kg1 = get_meth1(self,abscs,coefg,coefg3,kgsig,isig,saut2,INFO,ndim)
+            kg2 = get_meth2(self,abscs,coefg,coefg3,kgsig,isig,saut2,INFO,ndim)
+            kg3 = get_meth3(self,abscs,coefg,coefg3,kgsig,isig,saut2,INFO,ndim)
 
-          dxi=NP.array(tabinfi['DX'].values()['DX'][:nbval])
-          dyi=NP.array(tabinfi['DY'].values()['DY'][:nbval])
-          if ndim==2 : dzi=NP.zeros(nbval)
-          elif ndim==3 : dzi=NP.array(tabinfi['DZ'].values()['DZ'][:nbval])
-          
-          if FOND_FISS and INFO==2 and iord==0 and not TYPE_MAILLAGE =='LIBRE':
-            for ki in range(0,nbval) :
-               texte="NOEUD RETENU POUR LA LEVRE INF: %s  %f"%(Lnoinf[ino][ki],absci[ki])
-               aster.affiche('MESSAGE',texte)
-
-#     --- CAS FISSURE X-FEM ---
-        if  FISSURE : 
-           H1 = getattr(tabsupi,'H1X').values()
-           nbval = len(H1)
-           H1 = complete(H1)
-           E1 = getattr(tabsupi,'E1X').values()
-           E1 = complete(E1)
-           dxs = 2*(H1 + NP.sqrt(abscs)*E1)
-           H1 = getattr(tabsupi,'H1Y').values()
-           E1 = getattr(tabsupi,'E1Y').values()
-           H1 = complete(H1)
-           E1 = complete(E1)
-           dys = 2*(H1 + NP.sqrt(abscs)*E1)
-           H1 = getattr(tabsupi,'H1Z').values()
-           E1 = getattr(tabsupi,'E1Z').values()
-           H1 = complete(H1)
-           E1 = complete(E1)
-           dzs = 2*(H1 + NP.sqrt(abscs)*E1)
-           abscs=NP.array(abscs[:nbval])
-
-#   ---------- CALCUL PROP. MATERIAU AVEC TEMPERATURE -----------  
-        if Tempe3D :
-           tempeno=tabtemp.NOEUD==Lnofon[ino]
-           tempeno=tempeno.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
-           nompar = ('TEMP',)
-           valpar = (tempeno.TEMP.values()[0],)
-           nomres=['E','NU']
-           valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
-           e = valres[0]
-           nu = valres[1] 
-           coefd  = e * NP.sqrt(2.*pi)      / ( 8.0 * (1. - nu**2))
-           coefd3 = e*NP.sqrt(2*pi) / ( 8.0 * (1. + nu))
-           coefg  = (1. - nu**2) / e
-           coefg3 = (1. + nu)  / e
-
-#     --- TESTS NOMBRE DE NOEUDS---
-        if nbval<3 :
-           UTMESS('A+','RUPTURE0_46')
-           if FOND_FISS :
-               UTMESS('A+','RUPTURE0_47',valk=Lnofon[ino])
-           if FISSURE :
-               UTMESS('A+','RUPTURE0_99',vali=ino)
-           UTMESS('A','RUPTURE0_25')
-           kg1 = [0.]*8
-           kg2 =[0.]*8
-           kg3 =[0.]*8
-         
-        else :  
-#     SI NBVAL >= 3 : 
+#        creation de la table 
+         kg=NP.array([kg1,kg2,kg3])
+         kg=NP.transpose(kg)
 
-#     ------------------------------------------------------------------
-#                    CHANGEMENT DE REPERE
-#     ------------------------------------------------------------------
-#
-#       1 : VECTEUR NORMAL AU PLAN DE LA FISSURE
-#           ORIENTE LEVRE INFERIEURE VERS LEVRE SUPERIEURE
-#       2 : VECTEUR NORMAL AU FOND DE FISSURE EN M
-#       3 : VECTEUR TANGENT AU FOND DE FISSURE EN M
-#
-         if FISSURE :
-            v2 = VP[ino]
-            v1 = VN[ino]
-         elif SYME_CHAR=='SANS' :
-            vo =  NP.array([( coxs[-1]+coxi[-1] )/2.,( coys[-1]+coyi[-1] )/2.,( cozs[-1]+cozi[-1] )/2.])
-            ve =  NP.array([( coxs[0 ]+coxi[0 ] )/2.,( coys[0 ]+coyi[0 ] )/2.,( cozs[0 ]+cozi[0 ] )/2.])
-            v2 =  ve-vo
-         else :
-            vo = NP.array([ coxs[-1], coys[-1], cozs[-1]])
-            ve = NP.array([ coxs[0], coys[0], cozs[0]])
-            v2 =  ve-vo
-         if not FISSURE :  v1 =  NP.array(VECT_K1)
-         v2 =  v2/NP.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)
-         v1p = sum(v2*v1)
-         if SYME_CHAR=='SANS' : v1  = v1-v1p*v2
-         else : v2  = v2-v1p*v1 
-         v1  = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
-         v2 =  v2/NP.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)
-         v3  = NP.array([v1[1]*v2[2]-v2[1]*v1[2],v1[2]*v2[0]-v2[2]*v1[0],v1[0]*v2[1]-v2[0]*v1[1]])
-         pgl  = NP.asarray([v1,v2,v3])
-         dpls = NP.asarray([dxs,dys,dzs])
-         dpls = NP.dot(pgl,dpls)
-         if SYME_CHAR!='SANS' and abs(dpls[0][0]) > 1.e-10 :
-           UTMESS('A','RUPTURE0_49',valk=[Lnofon[ino],SYME_CHAR])
-         if FISSURE :
-            saut=dpls
-         elif SYME_CHAR=='SANS' :
-            dpli = NP.asarray([dxi,dyi,dzi])
-            dpli = NP.dot(pgl,dpli)
-            saut=(dpls-dpli)
-         else :
-            dpli = [NP.multiply(dpls[0],-1.),dpls[1],dpls[2]]
-            saut=(dpls-dpli)
-         if INFO==2 :
-           mcfact=[]
-           mcfact.append(_F(PARA='ABSC_CURV'  ,LISTE_R=abscs.tolist() ))
-           if not FISSURE :
-             mcfact.append(_F(PARA='DEPL_SUP_1',LISTE_R=dpls[0].tolist() ))
-             mcfact.append(_F(PARA='DEPL_INF_1',LISTE_R=dpli[0].tolist() ))
-           mcfact.append(_F(PARA='SAUT_1'    ,LISTE_R=saut[0].tolist() ))
-           if not FISSURE :
-             mcfact.append(_F(PARA='DEPL_SUP_2',LISTE_R=dpls[1].tolist() ))
-             mcfact.append(_F(PARA='DEPL_INF_2',LISTE_R=dpli[1].tolist() ))
-           mcfact.append(_F(PARA='SAUT_2'    ,LISTE_R=saut[1].tolist() ))
-           if ndim==3 :
-             if not FISSURE :
-               mcfact.append(_F(PARA='DEPL_SUP_3',LISTE_R=dpls[2].tolist() ))
-               mcfact.append(_F(PARA='DEPL_INF_3',LISTE_R=dpli[2].tolist() ))
-             mcfact.append(_F(PARA='SAUT_3'    ,LISTE_R=saut[2].tolist() ))
-           __resu0=CREA_TABLE(LISTE=mcfact,TITRE='--> SAUTS')
-           aster.affiche('MESSAGE',__resu0.EXTR_TABLE().__repr__())
-           DETRUIRE(CONCEPT=_F(NOM=__resu0),INFO=1)
-#     ------------------------------------------------------------------
-#                           CALCUL DES K1, K2, K3
-#     ------------------------------------------------------------------
-         isig=NP.sign(NP.transpose(NP.resize(saut[:,-1],(nbval-1,3))))
-         isig=NP.sign(isig+0.001)
-         saut=saut*NP.array([[coefd]*nbval,[coefd]*nbval,[coefd3]*nbval])
-         saut=saut**2
-         ksig = isig[:,1]
-         ksig = NP.array([ksig,ksig])
-         ksig = NP.transpose(ksig)
-         kgsig=NP.resize(ksig,(1,6))[0]
-#     ------------------------------------------------------------------
-#                           --- METHODE 1 ---
-#     ------------------------------------------------------------------
-         nabs = len(abscs)
-         x1 = abscs[1:-1]
-         x2 = abscs[2:nabs]
-         y1 = saut[:,1:-1]/x1
-         y2 = saut[:,2:nabs]/x2
-         k  = abs(y1-x1*(y2-y1)/(x2-x1))
-         g  = coefg*(k[0]+k[1])+coefg3*k[2]
-         kg1 = [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
-         kg1 = NP.sqrt(kg1)*kgsig
-         kg1=NP.concatenate([kg1,[max(g),min(g)]])
-         vk  = NP.sqrt(k)*isig[:,:-1]
-         if INFO==2 :
-           mcfact=[]
-           mcfact.append(_F(PARA='ABSC_CURV_1' ,LISTE_R=x1.tolist() ))
-           mcfact.append(_F(PARA='ABSC_CURV_2' ,LISTE_R=x2.tolist() ))
-           mcfact.append(_F(PARA='K1'          ,LISTE_R=vk[0].tolist() ))
-           mcfact.append(_F(PARA='K2'          ,LISTE_R=vk[1].tolist() ))
-           if ndim==3 :
-             mcfact.append(_F(PARA='K3'        ,LISTE_R=vk[2].tolist() ))
-           mcfact.append(_F(PARA='G'           ,LISTE_R=g.tolist() ))
-           __resu1=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 1')
-           aster.affiche('MESSAGE',__resu1.EXTR_TABLE().__repr__())
-           DETRUIRE(CONCEPT=_F(NOM=__resu1),INFO=1)
-#     ------------------------------------------------------------------
-#                           --- METHODE 2 ---
-#     ------------------------------------------------------------------
-         nabs = len(abscs)
-         x1 = abscs[1:nabs]
-         y1 = saut[:,1:nabs]
-         k  = abs(y1/x1)
-         g  = coefg*(k[0]+k[1])+coefg3*k[2]
-         kg2= [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
-         kg2 = NP.sqrt(kg2)*kgsig
-         kg2=NP.concatenate([kg2,[max(g),min(g)]])
-         vk = NP.sqrt(k)*isig
-         if INFO==2 :
-           mcfact=[]
-           mcfact.append(_F(PARA='ABSC_CURV' ,LISTE_R=x1.tolist() ))
-           mcfact.append(_F(PARA='K1'        ,LISTE_R=vk[0].tolist() ))
-           mcfact.append(_F(PARA='K2'        ,LISTE_R=vk[1].tolist() ))
-           if ndim==3 :
-             mcfact.append(_F(PARA='K3'      ,LISTE_R=vk[2].tolist() ))
-           mcfact.append(_F(PARA='G'         ,LISTE_R=g.tolist() ))
-           __resu2=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 2')
-           aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
-           DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
-#     ------------------------------------------------------------------
-#                           --- METHODE 3 ---
-#     ------------------------------------------------------------------
-         nabs = len(abscs)
-         x1 = abscs[:-1]
-         x2 = abscs[1:nabs]
-         y1 = saut[:,:-1]
-         y2 = saut[:,1:nabs]
-         k  = (NP.sqrt(y2)*NP.sqrt(x2)+NP.sqrt(y1)*NP.sqrt(x1))*(x2-x1)
-         k  = NP.sum(NP.transpose(k), axis=0)
-         de = abscs[-1]
-         vk = (k/de**2)*isig[:,0]
-         g  = coefg*(vk[0]**2+vk[1]**2)+coefg3*vk[2]**2
-         kg3=NP.concatenate([[vk[0]]*2,[vk[1]]*2,[vk[2]]*2,[g]*2])
-         if INFO==2 :
-           mcfact=[]
-           mcfact.append(_F(PARA='K1'        ,LISTE_R=vk[0] ))
-           mcfact.append(_F(PARA='K2'        ,LISTE_R=vk[1] ))
-           if ndim==3 :
-             mcfact.append(_F(PARA='K3'      ,LISTE_R=vk[2] ))
-           mcfact.append(_F(PARA='G'         ,LISTE_R=g ))
-           __resu3=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 3')
-           aster.affiche('MESSAGE',__resu3.EXTR_TABLE().__repr__())
-           DETRUIRE(CONCEPT=_F(NOM=__resu3),INFO=1)
-#     ------------------------------------------------------------------
-#                           CREATION DE LA TABLE 
-#     ------------------------------------------------------------------
-        kg=NP.array([kg1,kg2,kg3])
-        kg=NP.transpose(kg)
-        mcfact=[]
-        if TITRE != None :
-          titre = TITRE
-        else :
-          v = aster.__version__
-          titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K1_K2_K3 LE &DATE A &HEURE \n'%v
-        if FOND_FISS and MODELISATION=='3D': 
-          mcfact.append(_F(PARA='NOEUD_FOND',LISTE_K=[Lnofon[ino],]*3))
-          mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[dicoF[Lnofon[ino]]]*3))
-        if FISSURE and MODELISATION=='3D': 
-          mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
-          mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[absfon[ino],]*3))
-        if FISSURE  and MODELISATION!='3D' and Nbfond!=1 :
-          mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
-        mcfact.append(_F(PARA='METHODE',LISTE_I=(1,2,3)))
-        mcfact.append(_F(PARA='K1_MAX' ,LISTE_R=kg[0].tolist() ))
-        mcfact.append(_F(PARA='K1_MIN' ,LISTE_R=kg[1].tolist() ))
-        mcfact.append(_F(PARA='K2_MAX' ,LISTE_R=kg[2].tolist() ))
-        mcfact.append(_F(PARA='K2_MIN' ,LISTE_R=kg[3].tolist() ))
-        if ndim==3 :
-          mcfact.append(_F(PARA='K3_MAX' ,LISTE_R=kg[4].tolist() ))
-          mcfact.append(_F(PARA='K3_MIN' ,LISTE_R=kg[5].tolist() ))
-        mcfact.append(_F(PARA='G_MAX'  ,LISTE_R=kg[6].tolist() ))
-        mcfact.append(_F(PARA='G_MIN'  ,LISTE_R=kg[7].tolist() ))
-        if  (ino==0 and iord==0) and inst==None :
-           tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
-        elif iord==0 and ino==0 and inst!=None :
-           mcfact=[_F(PARA='INST'  ,LISTE_R=[inst,]*3      )]+mcfact
-           tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
-        else :
-           if inst!=None : mcfact=[_F(PARA='INST'  ,LISTE_R=[inst,]*3     )]+mcfact
-           __tabi=CREA_TABLE(LISTE=mcfact,)
-           npara = ['K1_MAX','METHODE']
-           if inst!=None : npara.append('INST')
-           if FOND_FISS and MODELISATION=='3D' : npara.append('NOEUD_FOND')
-           tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,TITRE = titre,
-                              ACTION=_F(OPERATION = 'COMB',NOM_PARA=npara,TABLE=__tabi,))
-
-# Tri de la table
-   if len(l_inst)!=1 and MODELISATION=='3D':
-      tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,
-                      ACTION=_F(OPERATION = 'TRI',NOM_PARA=('INST','ABSC_CURV','METHODE'),ORDRE='CROISSANT'))
+         tabout = get_tabout(self,kg,TITRE,FOND_FISS,MODELISATION,FISSURE,ndim,ino,inst,iord,
+                             Lnofon,dicoF,absfon,Nnoff,tabout)
+
+#     Fin de la boucle sur les instants
+
+#  Fin de la boucle sur les noeuds du fond de fissure
+
+#  Tri de la table si nécessaire
+   if len(l_inst)!=1 and ndim == 3 :
+      tabout=CALC_TABLE(reuse=tabout,
+                        TABLE=tabout,
+                        ACTION=_F(OPERATION = 'TRI',
+                                  NOM_PARA=('INST','ABSC_CURV'),
+                                  ORDRE='CROISSANT'))
 
    return ier
  
index d0a3b8908b9722cd9022a995d3520597309fc477..3fbdf9893e385cc819787c41b3466df1c29dbbcc 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF post_k_trans_ops Macro  DATE 07/10/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF post_k_trans_ops Macro  DATE 25/01/2011   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -186,9 +186,9 @@ def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE,
   if F3D : 
     K3mod = [None]*n_mode*nbno
     K3t = [None]*nbarch*nbno
-    k1 = 'K1_LOCAL'
-    k2 = 'K2_LOCAL'
-    k3 = 'K3_LOCAL'
+    k1 = 'K1'
+    k2 = 'K2'
+    k3 = 'K3'
   else :
     k1 = 'K1'
     k2 = 'K2'
diff --git a/Aster/Cata/cataSTA10/Macro/post_miss_ops.py b/Aster/Cata/cataSTA10/Macro/post_miss_ops.py
new file mode 100644 (file)
index 0000000..ee4aac3
--- /dev/null
@@ -0,0 +1,52 @@
+#@ MODIF post_miss_ops Macro  DATE 01/03/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import sys
+import os
+import traceback
+
+
+def post_miss_ops(self, **kwargs):
+    """Macro POST_MISS :
+    Post-traitement d'un calcul MISS3D
+    """
+    import aster
+    from Utilitai.Utmess  import UTMESS
+    from Miss.miss_post import PostMissFactory
+    
+    ier = 0
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    # création de l'objet POST_MISS_xxx
+    post = PostMissFactory(kwargs['OPTION'], self, kwargs)
+
+    try:
+        post.argument()
+        post.execute()
+        post.sortie()
+    except aster.error, err:
+        UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
+    except Exception, err:
+        trace = ''.join(traceback.format_tb(sys.exc_traceback))
+        UTMESS('F', 'SUPERVIS2_5', valk=('POST_MISS', trace, str(err)))
+
+
index 6dbe737b05b553b499d4da2c073b9251cfcd56a0..34943b921f301b5a6f0e5e3d964715b35c62ac01 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF propa_fiss_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF propa_fiss_ops Macro  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 
-from math import atan, atan2, cos, sin, sqrt
+from math import atan, atan2, cos, sin, log
 
 import numpy as NP
+from Accas import _F
+from types import ListType, TupleType
 
 
 def InterpolationLineaire(x0, points) :
@@ -100,16 +102,61 @@ def betaf(k1,k2) :
   if k2 == 0:
      beta = 0.
   else :
-     beta = 2*atan(0.25*(k1/k2-abs(k2)/k2*sqrt((k1/k2)**2+8)))
+     beta = 2*atan(0.25*(k1/k2-abs(k2)/k2*NP.sqrt((k1/k2)**2+8)))
   return beta
 
-#TODO prefer use numpy.cross
-def cross_product(a,b):
-    cross = [0]*3
-    cross[0] = a[1]*b[2]-a[2]*b[1]
-    cross[1] = a[2]*b[0]-a[0]*b[2]
-    cross[2] = a[0]*b[1]-a[1]*b[0]
-    return cross
+def recup_Elas(LOI):
+      from SD.sd_mater     import sd_compor1
+      if LOI == None :
+         UTMESS('F','RUPTURE1_50') 
+      dLoi=LOI[0].cree_dict_valeurs(LOI[0].mc_liste)
+      mat = dLoi['MATER']
+      matph = mat.NOMRC.get()  
+      phenom=None
+      for cmpt in matph :
+         if cmpt[:4]=='ELAS' :
+            phenom=cmpt
+            break
+      if phenom==None : UTMESS('F','RUPTURE0_5')
+      compor = sd_compor1('%-8s.%s' % (mat.nom, phenom))
+      valk = [s.strip() for s in compor.VALK.get()]
+      valr = compor.VALR.get()
+      dicmat=dict(zip(valk,valr))
+      if dicmat.has_key('TEMP_DEF')  :
+        nompar = ('TEMP',)
+        valpar = (dicmat['TEMP_DEF'],)
+        UTMESS('A','XFEM2_85',valr=valpar)
+        nomres=['E','NU']
+        valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+        e = valres[0]
+        nu = valres[1]
+      else :
+        e  = dicmat['E']
+        nu = dicmat['NU'] 
+      return e,nu,dLoi
+
+def nom_points_fonds(n_taille):
+   """
+   Construction des noms des points en fond de fissure
+   """
+   alphabet            = ['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'];
+   if n_taille <= 26:
+       return alphabet[:n_taille]
+   else:
+       tab_alphabet        = alphabet  
+       taille_tab_alphabet = int(log(n_taille,26))
+       for l_let1 in range(1,taille_tab_alphabet):
+               for l_let2 in range(26):
+                   for l_let3 in range(26):
+                       tab_alphabet =  tab_alphabet + [tab_alphabet[(l_let1-1)*26+l_let2]+alphabet[l_let3]]       
+       reste1 = int(n_taille-len(tab_alphabet))/26
+       for l_let2 in range(reste1):
+                  for l_let3 in range(26):
+                      tab_alphabet =  tab_alphabet + [tab_alphabet[(taille_tab_alphabet-1)*26+l_let2]+alphabet[l_let3]]
+       reste2 = int(n_taille-len(tab_alphabet))
+       for l_let3 in range(reste2):
+                   tab_alphabet =  tab_alphabet + [tab_alphabet[(taille_tab_alphabet-1)*26+reste1]+alphabet[l_let3]]
+       return tab_alphabet  
     
 #def propa_fiss_ops(self,METHODE_PROPA,TEST_MAIL,INFO,**args):
 def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
@@ -118,17 +165,12 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
   Propagation de fissure pour les modeles X-FEM : propagation par la methode de HAMILTON 
   ou par projection sur un maillage
   """
+
   import aster
   import string
-  import copy
   from Accas import _F
   from Utilitai.Utmess     import  UTMESS
-  from types import ListType, TupleType
-  from Utilitai.Table      import Table, merge
   from Utilitai.partition import MAIL_PY
-  from SD.sd_mater     import sd_compor1
-  from Cata.cata import table_sdaster,fiss_xfem,modele_sdaster
-
 
   EnumTypes = (ListType, TupleType)
   
@@ -139,6 +181,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
   ASSE_MAILLAGE         =self.get_cmd('ASSE_MAILLAGE'  )
   LIRE_MAILLAGE    =self.get_cmd('LIRE_MAILLAGE'  )
   DEFI_FICHIER = self.get_cmd('DEFI_FICHIER'  )
+  DEFI_GROUP = self.get_cmd('DEFI_GROUP'  )
   CREA_TABLE    =self.get_cmd('CREA_TABLE'  )
   CALC_TABLE    =self.get_cmd('CALC_TABLE'  )
   PROPA_XFEM = self.get_cmd('PROPA_XFEM'  )
@@ -157,32 +200,8 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
     
     if (TEST_MAIL == 'NON' ) :
       LOI= args['LOI_PROPA']
-      if LOI == None :
-         UTMESS('F','RUPTURE1_50') 
-      dLoi=LOI[0].cree_dict_valeurs(LOI[0].mc_liste)
-      mat = dLoi['MATER']
-      matph = mat.NOMRC.get()  
-      phenom=None
-      for cmpt in matph :
-         if cmpt[:4]=='ELAS' :
-            phenom=cmpt
-            break
-      if phenom==None : UTMESS('F','RUPTURE0_5')
-      compor = sd_compor1('%-8s.%s' % (mat.nom, phenom))
-      valk = [s.strip() for s in compor.VALK.get()]
-      valr = compor.VALR.get()
-      dicmat=dict(zip(valk,valr))
-      if dicmat.has_key('TEMP_DEF')  :
-        nompar = ('TEMP',)
-        valpar = (dicmat['TEMP_DEF'],)
-        UTMESS('A','XFEM2_85',valr=valpar)
-        nomres=['E','NU']
-        valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
-        e = valres[0]
-        nu = valres[1]
-      else :
-        e  = dicmat['E']
-        nu = dicmat['NU']  
+      e,nu,dLoi = recup_Elas(LOI)
+      
 # Construction catalogue PROPA_XFEM
       dLoix = {}
       dLoix['LOI'] = 'PARIS'
@@ -212,10 +231,6 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
     NbPointFond = []
     
     for Fiss in Fissures :
-        if Fiss['GRILLE_AUX']!=None :
-           GrilleAux.append(Fiss['GRILLE_AUX'])
-        else :
-           GrilleAux.append(args['MODELE'])
         FissAct.append(Fiss['FISS_ACTUELLE'])
         FissNou.append(Fiss['FISS_PROPAGEE'])
         if TEST_MAIL == 'NON':
@@ -246,11 +261,6 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
 #      propagating crack.
        for NumFiss in range(0,len(FissAct)) :
            mcsimp['FISS_PROP'] = FissAct[NumFiss]
-           mcsimp['GRILLE_AUX'] = 123
-           if GrilleAux[NumFiss]!=args['MODELE'] : 
-               mcsimp['GRILLE_AUX'] = GrilleAux[NumFiss]
-           else :
-               del mcsimp['GRILLE_AUX']
            self.DeclareOut('nomfiss',FissNou[NumFiss])
            nomfiss = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
            
@@ -263,6 +273,12 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
        __Fis = [None]*(StepTot*len(FissAct))
        __Mod = [None]*StepTot
        mcsimp['TOLERANCE'] = args['TOLERANCE']
+       fiss = FissAct[0]
+       import aster
+       iret,ibid,mod_fiss = aster.dismoi('F','NOM_MODELE',fiss.nom,'FISS_XFEM')
+       mod_fiss=mod_fiss.strip()
+       MOD_FISS = self.get_concept(mod_fiss)
+
        for NumStep in range(0,StepTot) :
          
            aster.affiche('MESSAGE',' ------------------------')
@@ -280,11 +296,6 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
                  mcsimp['MODELE'] = __Mod[NumStep-1]
                  mcsimp['FISS_PROP'] = __Fis[(NumStep-1)*len(FissAct)+NumFiss]
               mcsimp['FISS_INITIALE'] = FissAct[NumFiss]
-              mcsimp['GRILLE_AUX'] = 123
-              if GrilleAux[NumFiss]!=args['MODELE'] : 
-                 mcsimp['GRILLE_AUX'] = GrilleAux[NumFiss]
-              else :
-                  del mcsimp['GRILLE_AUX']
               if NumStep==StepTot-1 :
                  self.DeclareOut('nomfiss',FissNou[NumFiss])
                  nomfiss = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
@@ -296,7 +307,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
               aster.affiche('MESSAGE',' ------------------------')
               aster.affiche('MESSAGE',' CREATION DU MODELE FISSURE TEMPORAIRE')
               aster.affiche('MESSAGE',' ')
-              __Mod[NumStep] = MODI_MODELE_XFEM(MODELE_IN=args['MODELE'],FISSURE=(ListeFiss))
+              __Mod[NumStep] = MODI_MODELE_XFEM(MODELE_IN=MOD_FISS,FISSURE=(ListeFiss))
               mcsimp['LISTE_FISS'] = ListeFiss
               aster.affiche('MESSAGE',' ')
               aster.affiche('MESSAGE',' ------------------------')
@@ -306,9 +317,6 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
 #------------------------------------------------------------------
 # CAS 2 : METHODE_PROPA = 'MAILLAGE'
 #
-# il faudrait rendre cela plus automatique pour lever la limite a 52 points
-  ALPHABET=['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'];
-#            'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'];
   
   if METHODE_PROPA == 'MAILLAGE' :
     Fissures =  args['FISSURE']
@@ -319,7 +327,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
       coef_M =  LOI_PROPA['M']
       coef_C =  LOI_PROPA['C']
       coef_N =  LOI_PROPA['N']
-      YOUNG = 2.E11
+      YOUNG,NU,dLoi=recup_Elas(LOI_PROPA)
     it = args['ITERATION']
     Damax =  args['DA_MAX']
     COMP_LINE = args['COMP_LINE']
@@ -357,146 +365,98 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
          UTMESS('F','RUPTURE1_48',vali=Nbfiss)
 
 # Recuperation des K et calcul de DeltaK
-      Nmeth = Fiss['METHODE_POSTK']
       SIF = Fiss['TABLE']
       nbinst = 1
-# A- TABLEAU ISSSU DE POST_K1_K2_K3    
-      if  (Nmeth != None) :
-         __TABN = CALC_TABLE(TABLE=SIF,ACTION=_F(OPERATION='FILTRE',
-                                           NOM_PARA='METHODE',VALE_I=Nmeth),);
-         __tabp = __TABN.EXTR_TABLE()
-         if ('K1_MAX' not in __tabp.para) or ('G_MAX' not in __tabp.para):
-            UTMESS('F','RUPTURE1_44')
-         __tab1 = __tabp.values()
-         nbinst = 1
-         if 'INST' in __tabp.para : 
-           l_inst_tab=__tabp['INST'].values()['INST']
-           l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
-           nbinst = len(l_inst_tab)
-         nbptfon = len(__tab1['K1_MAX']) / nbinst
-         R[numfis] = [None]*nbptfon
-         RmM[numfis] = [None]*nbptfon
-         DKeq[numfis] = [None]*nbptfon
-         BETA[numfis] = [None]*nbptfon
-         absc = [0.]*nbptfon
-         if nbinst > 1 :
-           for k in range(nbptfon) :
-             if (dime == 2) : __tmp = __tabp
-             if (dime == 3) : __tmp = __tabp.PT_FOND==(k+1)
-             if (dime == 3) : absc[k]=__tmp['ABSC_CURV'][k]
-             ddkeq = sqrt(YOUNG)*(sqrt(max(__tmp.values()['G_MAX'])) 
-                          - sqrt(min(__tmp.values()['G_MAX']))) 
-             rminmax = sqrt(min(__tmp.values()['G_MAX'])) / sqrt(max(__tmp.values()['G_MAX']))
-             DKeq[numfis][k] = [absc[k], ddkeq ]
-             RmM[numfis][k]  =   [absc[k], rminmax ]
-             k1 = __tmp.values()['K1_MAX']
-             k2 = __tmp.values()['K2_MAX']
-             betat = [0.]*nbinst
-             for jt in range(nbinst) :
-               betat[jt] = betaf(k1[jt],k2[jt])
+      __tabp = SIF.EXTR_TABLE()
+      if ('K1' not in __tabp.para) or ('G' not in __tabp.para):
+         UTMESS('F','RUPTURE1_44')
+
+      __tab1 = __tabp.values()
+      
+      if 'INST' in __tabp.para : 
+        l_inst_tab=__tabp['INST'].values()['INST']
+        l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
+        nbinst = len(l_inst_tab)
+      nbptfon = len(__tab1['K1']) / nbinst
+      RmM[numfis] = [None]*nbptfon
+      DKeq[numfis] = [None]*nbptfon
+      BETA[numfis] = [None]*nbptfon
+      
+# Lorsque le calcul porte sur plusieurs instants 
+      if nbinst > 1 :
+        for k in range(nbptfon) :
+          if (dime == 2) : __tmp = __tabp
+          if (dime == 3) :
+              if __tabp.PT_FOND :
+                  __tmp = __tabp.PT_FOND==(k+1)
+                  indice_k = k
+              else:
+                  __tmp = __tabp.NUM_PT==(k+1)
+                  indice_k = 0
+          if ('ABSC_CURV' in __tmp.values()):
+              abscisse_curv_courante = __tmp.values()['ABSC_CURV'][indice_k]
+          else:
+              abscisse_curv_courante = 0.
+          ddkeq = NP.sqrt(YOUNG)*(NP.sqrt(max(__tmp.values()['G'])) 
+                       - NP.sqrt(min(__tmp.values()['G']))) 
+          rminmax = NP.sqrt(min(__tmp.values()['G'])) / NP.sqrt(max(__tmp.values()['G']))
+          DKeq[numfis][k] = [abscisse_curv_courante, ddkeq ]
+          RmM[numfis][k]  =   [abscisse_curv_courante, rminmax ]
+          if ('BETA' in __tmp.values()):
+               dbeta = max(__tmp.values()['BETA'])-min(__tmp.values()['BETA'])
+               if dbeta > (5./180.*3.1415) :
+                   UTMESS('F','XFEM2_72')
+               BETA[numfis][k] = [abscisse_curv_courante, __tmp.values()['BETA'][0] ]
+          else:
+               if (dime == 2) :
+                  k1 = __tmp.values()['K1'][k]
+                  k2 = __tmp.values()['K2'][k]
+                  BETA[numfis][k]=[0., betaf(k1,k2)]
+               else:
+                  k1 = __tmp.values()['K1']
+                  k2 = __tmp.values()['K2']
+                  betat = [0.]*nbinst
+                  for jt in range(nbinst) :
+                      betat[jt] = betaf(k1[jt],k2[jt])
 # ANGLE BETA NE DOIT PAS TROP VARIER ENTRE LES PAS DE TEMPS
-             dbeta = max(betat) - min(betat) 
-             if dbeta > (5./180.*3.1415) :
-                  UTMESS('F','XFEM2_72')
-             BETA[numfis][k] = [absc[k], betat[0] ]
-             VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1]) 
-             VMAX = max(VMAX,VMAX0 )
-         else :
-            if COMP_LINE == None :
-              UTMESS('A','XFEM2_76')
-              CMIN = 0.
-              CMAX = 1.
-            else :
-              CMIN = COMP_LINE['COEF_MULT_MINI']
-              CMAX = COMP_LINE['COEF_MULT_MAXI']
-            if (min(__tab1['G_MAX']) < 0.) :
-              UTMESS('F','RUPTURE1_46')
-            DKmax0 = max(NP.sqrt(__tab1['G_MAX']))
-            DKmax = max(DKmax,DKmax0)
-            for k in range(nbptfon) :
-              k1 = __tab1['K1_MAX'][k]
-              k2 = __tab1['K2_MAX'][k]
-              if (dime == 3) : absc[k]=__tab1['ABSC_CURV'][k]
-              BETA[numfis][k] = [absc[k] , betaf(k1,k2)] 
-              DKeq[numfis][k] = [absc[k],sqrt(YOUNG)*NP.sqrt(__tab1['G_MAX'][k])]
-              RmM[numfis][k] = [absc[k], CMIN/CMAX]
-              VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1]) 
-              VMAX = max(VMAX,VMAX0 )
-# B- TABLEAU ISSSU DE CALC_G (option CALC_K_G)
+                  dbeta = max(betat) - min(betat) 
+                  if dbeta > (5./180.*3.1415) :
+                     UTMESS('F','XFEM2_72')
+          VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1]) 
+          VMAX = max(VMAX,VMAX0 )
+# Lorsque le calcul porte un seul instant 
       else :
-         __tabp = SIF.EXTR_TABLE()
-         if (dime == 3) and (('K1_LOCAL' not in __tabp.para) or ('G_LOCAL' not in __tabp.para) or ('BETA_LOCAL' not in __tabp.para)):
-            UTMESS('F','RUPTURE1_45')
-         if (dime == 2) and (('K1' not in __tabp.para) or ('G' not in __tabp.para)) :
-            UTMESS('F','RUPTURE1_45')
-         __tab1= __tabp.values()
-         if 'INST' in __tabp.para : 
-           l_inst_tab=__tabp['INST'].values()['INST']
-           l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
-           nbinst = len(l_inst_tab)
-         if (dime == 2) : nbptfon = 1
-         if (dime == 3) : nbptfon = len(__tab1['G_LOCAL']) / nbinst
-         RmM[numfis] = [None]*nbptfon
-         DKeq[numfis] = [None]*nbptfon
-         BETA[numfis] = [None]*nbptfon
-         if nbinst > 1 :
-           for k in range(nbptfon) :
-              if (dime == 3) : 
-                __tmp = __tabp.NUM_PT==(k+1)
-                if (min(__tmp['G_LOCAL']) < 0.) :
-                  UTMESS('F','RUPTURE1_46')
-                absc = __tmp.values()['ABSC_CURV'][0]
-                DKeq[numfis][k]=[absc, sqrt(YOUNG)*(sqrt(max(__tmp.values()['G_LOCAL']))-sqrt(min(__tmp.values()['G_LOCAL'])))]
-                RmM[numfis][k] = [absc, sqrt(min(__tmp.values()['G_LOCAL'])) / sqrt(max(__tmp.values()['G_LOCAL']))]
-                dbeta = max(__tmp.values()['BETA_LOCAL'])-min(__tmp.values()['BETA_LOCAL'])
-                if dbeta > (5./180.*3.1415) :
-                  UTMESS('F','XFEM2_72')
-                BETA[numfis][k] = [absc, __tmp.values()['BETA_LOCAL'][0] ]
-              else :
-                if (min(__tabp.values()['G']) < 0.) :
-                  UTMESS('F','RUPTURE1_46')
-                DKeq[numfis][k]=[0.,sqrt(YOUNG)*(sqrt(max(__tabp.values()['G']))-sqrt(min(__tabp.values()['G'])))]
-                RmM[numfis][k] = [0., sqrt(min(__tabp.values()['G'])) / sqrt(max(__tabp.values()['G'])) ]
-                k1 = __tabp.values()['K1'][0]
-                k2 = __tabp.values()['K2'][0]
-                BETA[numfis][k]=[0., betaf(k1,k2)]
-              VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1])
-              VMAX = max(VMAX,VMAX0 )
-         elif dime == 3 :
-            nbptfon = len(__tab1['G_LOCAL'])
-            if COMP_LINE == None :
-              UTMESS('A','XFEM2_76')
-              CMIN = 0.
-              CMAX = 1.
-            else :
-              CMIN = COMP_LINE['COEF_MULT_MINI']
-              CMAX = COMP_LINE['COEF_MULT_MAXI']
-            if (min(__tab1['G_LOCAL']) < 0.) :
-              UTMESS('F','RUPTURE1_46')
-            DKeq[numfis] = [[__tab1['ABSC_CURV'][i],NP.sqrt(__tab1['G_LOCAL'][i])*sqrt(YOUNG) ] for i in range(nbptfon)]
-            RmM[numfis] = [[__tab1['ABSC_CURV'][i], CMIN/CMAX] for i in range(nbptfon)]
-            BETA[numfis] = [[__tab1['ABSC_CURV'][i],__tab1['BETA_LOCAL'][i]] for i in range(nbptfon)]
-            for i in range(nbptfon) :
-              VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][i][1],RmM[numfis][i][1])
-              VMAX = max(VMAX,VMAX0 )
-         else :
-            nbptfon = 1
-            if COMP_LINE == None :
-              UTMESS('A','XFEM2_76')
-              CMIN = 0.
-              CMAX = 1.
-            else :
-              CMIN = COMP_LINE['COEF_MULT_MINI']
-              CMAX = COMP_LINE['COEF_MULT_MAXI']
-            if (min(__tab1['G']) < 0.) :
-              UTMESS('F','RUPTURE1_46')
-            DKeq[numfis][0] = [0.,sqrt(YOUNG)*max(NP.sqrt(__tab1['G']))]
-            k1 = __tab1['K1'][0]
-            k2 = __tab1['K2'][0]
-            BETA[numfis][0] = [0.,betaf(k1,k2)] 
-            RmM[numfis][0] = [0.,CMIN/CMAX] 
-            VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][0][1],RmM[numfis][0][1])
-            VMAX = max(VMAX,VMAX0 )
+        if COMP_LINE == None :
+             UTMESS('A','XFEM2_76')
+             CMIN = 0.
+             CMAX = 1.
+        else :
+           CMIN = COMP_LINE['COEF_MULT_MINI']
+           CMAX = COMP_LINE['COEF_MULT_MAXI']
+        if (min(__tab1['G']) < 0.) :
+           UTMESS('F','RUPTURE1_46')
+
+        for k in range(nbptfon) :
+          if (dime == 3) :
+              if __tabp.PT_FOND :
+                  indice_k = k
+          else:
+                  indice_k = 0
+          if ('ABSC_CURV' in __tabp.para) :
+              abscisse_curv_courante = __tab1['ABSC_CURV'][k]
+          else:
+              abscisse_curv_courante = 0.
+          DKeq[numfis][k] =   [abscisse_curv_courante, NP.sqrt(YOUNG)*NP.sqrt(__tab1['G'][k]) ]
+          RmM[numfis][k]  =   [abscisse_curv_courante, CMIN/CMAX ]
+          if ('BETA' in __tab1.values()):
+               BETA[numfis][k] = [abscisse_curv_courante, __tab1['BETA'][0] ]
+          else:
+              k1 = __tab1['K1'][indice_k]
+              k2 = __tab1['K2'][indice_k]
+              BETA[numfis][indice_k]=[abscisse_curv_courante, betaf(k1,k2)]
+          VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1]) 
+          VMAX = max(VMAX,VMAX0 )
+
 
       numfis = numfis + 1
       
@@ -515,7 +475,6 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
       MAIL_FISS1 =  Fiss['MAIL_ACTUEL']
       MFOND = Fiss['GROUP_MA_FOND']
       MFISS = Fiss['GROUP_MA_FISS']
-  
 #------------------------------------------------------------------
 # CAS 2a : MODELE 3D
 #
@@ -575,6 +534,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
            DKmax = 1
         if (coef_C ==None) :
            coef_C = Damax
+        ALPHABET = nom_points_fonds(nbnofo)
         for ifond in range(nbnofo) :
            Xf =  d_coorf['NX%s%i' %(ALPHABET[ifond],it)][0]   
            Yf =  d_coorf['NX%s%i' %(ALPHABET[ifond],it)][1]     
@@ -660,6 +620,23 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
 #
       if dime == 2 :
         mm[numfis] = MAIL_PY()
+        FISS_A = '%s_%i' %(MFISS,(it-1))
+        DEFI_GROUP(reuse =MAIL_FISS1,
+                 MAILLAGE=MAIL_FISS1,
+                 CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO',
+                                  NOM='Nds_Plan',
+                                  GROUP_MA=FISS_A,),INFO=2);
+        DEFI_GROUP(reuse =MAIL_FISS1,
+                 MAILLAGE=MAIL_FISS1,
+                 DETR_GROUP_MA=_F(NOM='A',),
+                 CREA_GROUP_MA=_F(OPTION='APPUI',
+                                  NOM='A',
+                                  TYPE_APPUI='TOUT',
+                                  GROUP_NO='Nds_Plan',),INFO=2);
+        DEFI_GROUP(reuse =MAIL_FISS1,
+                 MAILLAGE=MAIL_FISS1,
+                 DETR_GROUP_NO=_F(NOM='Nds_Plan',),);
+
         mm[numfis].FromAster(MAIL_FISS1)
         
         (nno,ndim) = mm[numfis].cn.shape
@@ -687,6 +664,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
         NomNoeudsEnPlus =     ['NXA%i' %(it+1)]
         mm[numfis].cn = NP.concatenate((mm[numfis].cn,LesNoeudsEnPlus))
         mm[numfis].correspondance_noeuds = tuple(linomno + NomNoeudsEnPlus )
+        ALPHABET = nom_points_fonds(1)
         
   # Ajout Maille levre (SEG2)
         NomMaillesEnPlus =     ['MX%s%i' %(ALPHABET[0], it+1)]
@@ -701,7 +679,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
         fsi = mm[numfis].gma['%s_%i' %(MFISS,it-1)]
         fsi = NP.concatenate((fsi,NP.array([nbma])))
         mm[numfis].gma['%s_%i' %(MFISS,it)] = fsi.astype(int)
-  
 # Ajout Maille fond (POI1)
         NomMaillesEnPlus =     ['MF%s%i' %(ALPHABET[0], it+1)]
         num_maille = [ nbma + 2 ]
@@ -742,7 +720,6 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
     ma_tot = ASSE_MAILLAGE(MAILLAGE_1 = MAIL_STRUC,
                       MAILLAGE_2 = __MMX[Nbfissure-1],
                       OPERATION='SUPERPOSE',)
 #------------------------------------------------------------------
 # CAS 3 : METHODE_PROPA = 'INITIALISATION'
 #
@@ -766,6 +743,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
       NomNoeudsEnPlus =     ['NXA0','NXA1']
       mm.cn = LesNoeudsEnPlus
       mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+      ALPHABET = nom_points_fonds(1)
 
 # Ajout Maille levre (SEG2)
       it = 1
@@ -799,6 +777,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
       P1 = args['POINT_EXTR']
       dpropa = args['DTAN']
       nbpt = args['NB_POINT_FOND']
+      ALPHABET = nom_points_fonds(nbpt)
       Q0 = NP.array([[P0[0]-dpropa[0],P0[1]-dpropa[1],P0[2]-dpropa[2]]])
       
       mm = MAIL_PY()
@@ -884,11 +863,12 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
       vect_y = args['VECT_Y']
       gdax = args['DEMI_GRAND_AXE']
       ptax = args['DEMI_PETIT_AXE']
-      normale = cross_product(vect_x,vect_y)
+      normale = NP.cross(vect_x,vect_y)
       verif = NP.dot(vect_x,vect_y)
       if abs(verif) > 0.01:
           UTMESS('F','RUPTURE1_52')
       nbpt = args['NB_POINT_FOND']
+      ALPHABET = nom_points_fonds(nbpt)
 
       mm = MAIL_PY()
       mm.__init__()      
index c427fa6b40c87dda7b9446d7b1aaec858bee9fe5..eebe3f0c5b4c9406255392e61e45a80cbdde4c15 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF raff_xfem_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF raff_xfem_ops Macro  DATE 03/01/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -32,7 +32,6 @@ def raff_xfem_ops(self,FISSURE,INFO,**args):
    from types import ListType, TupleType
    from Accas import _F
    from SD.sd_xfem import sd_fiss_xfem
-   from Execution.E_JDC import JDC
    EnumTypes = (ListType, TupleType)
 
    macro = 'RAFF_XFEM'
@@ -57,10 +56,10 @@ def raff_xfem_ops(self,FISSURE,INFO,**args):
    else :
       nbfiss = 1
 
-#  formule distance pour une fissure: 1/exp(r)
-   __MDISTF=FORMULE(NOM_PARA=('X1','X2'),VALE= '1./exp(sqrt(X1**2+X2**2))');
-#  formule distance pour une interface: 1/exp(lsn)
-   __MDISTI=FORMULE(NOM_PARA=('X1'),VALE= '1./exp(sqrt(X1**2))');
+#  formule distance pour une fissure: -r
+   __MDISTF=FORMULE(NOM_PARA=('X1','X2'),VALE= '-1.*sqrt(X1**2+X2**2)');
+#  formule distance pour une interface: -r = -|lsn|
+   __MDISTI=FORMULE(NOM_PARA=('X1'),VALE= '-1.*sqrt(X1**2)');
 
    __CERR= [None]*nbfiss
    list_err=[]
index aeb7f070b59974c20e094c1fdb13acaadf431607..e0dd202e470c92a268aaa30526b24ff4fa0063d8 100644 (file)
@@ -1,9 +1,9 @@
-#@ MODIF reca_calcul_aster Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF reca_calcul_aster Macro  DATE 28/03/2011   AUTEUR ASSIRE A.ASSIRE 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE ASSIRE A.ASSIRE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -31,6 +31,7 @@ import math
 import glob
 import socket
 import shutil
+import tempfile
 
 import numpy as NP
 
@@ -58,6 +59,7 @@ class CALCUL_ASTER:
                           INFO=0,
                ):
   
+  
       self.METHODE               = METHODE
       self.UNITE_ESCL            = UNITE_ESCL
       self.UNITE_RESU            = UNITE_RESU
@@ -66,28 +68,39 @@ class CALCUL_ASTER:
       self.PARA_DIFF_FINI        = PARA_DIFF_FINI
       self.vector_output         = vector_output
 
-      self.memjeveux_esclave     = CALCUL_ESCLAVE['memjeveux_esclave']
-      self.mem_aster             = CALCUL_ESCLAVE['mem_aster']
       self.MODE                  = CALCUL_ESCLAVE['MODE']
-      self.MEMOIRE               = CALCUL_ESCLAVE['MEMOIRE']
-      self.TEMPS                 = CALCUL_ESCLAVE['TEMPS']
+#       self.MEMOIRE               = CALCUL_ESCLAVE['MEMOIRE']
+#       self.TEMPS                 = CALCUL_ESCLAVE['TEMPS']
+
+      # Parametres batch
       self.CLASSE                = CALCUL_ESCLAVE['CLASSE']
       self.ACTUALISATION         = CALCUL_ESCLAVE['ACTUALISATION']
       self.NMAX_SIMULT           = CALCUL_ESCLAVE['NMAX_SIMULT']
       self.LANCEMENT             = CALCUL_ESCLAVE['LANCEMENT']
 
+      # Parametres des job esclaves
+      self.tpsjob                = CALCUL_ESCLAVE['tpsjob']
+      self.tpmax                 = CALCUL_ESCLAVE['tpmax']
+      self.mem_aster             = CALCUL_ESCLAVE['mem_aster']
+      self.memjob                = CALCUL_ESCLAVE['memjob']
+      self.memjeveux             = CALCUL_ESCLAVE['memjeveux']
+
       self.INFO                  = INFO
  
       # Optionnels
       self.UNITE_GRAPHIQUE       = None
       self.export                = None
       self.follow_output         = None
+      self.unity_follow          = None
+
       self.GRADIENT              = GRADIENT
       self.DYNAMIQUE             = DYNAMIQUE
       #self.LANCEMENT             = LANCEMENT
 
       # Variables locales
-      self.new_export            = os.path.join(os.getcwd(), 'tmp_export')
+      tmpfile = tempfile.NamedTemporaryFile(prefix= os.path.join(os.getcwd(), 'tmp_export_') )
+      self.new_export            = str(tmpfile.name)
+      tmpfile.close()
 
       # Variables calculees
       self.evaluation_fonction   = 0
@@ -183,6 +196,8 @@ class CALCUL_ASTER:
             export           = self.new_export
 
             C.follow_output = self.follow_output
+            C.unity_follow  = self.unity_follow
+
 
             # Lancement des calculs
             fonctionnelle, gradient = C.run(
@@ -300,6 +315,19 @@ class CALCUL_ASTER:
       else:                  return self.norme
 
 
+  # ------------------------------------------------------------------------------
+  def verif_borne_gradient(self, val, dX):
+      """
+         Verification que les parametres perturbes sont bien dans l'intervalle defini par l'utilisateur
+         Sinon, on colle le parametre a la borne
+      """
+      print self.para
+      print self.LIST_PARA
+      for i in range(len(val)):
+         print i, val[i], dX[i]
+         # min
+      sys.exit()
+
   # ------------------------------------------------------------------------------
   def calcul_FG(self, val):
       """
@@ -391,6 +419,7 @@ class CALCUL_ASTER:
      """
 
      from asrun.profil import ASTER_PROFIL
+     from asrun.common.sysutils import on_64bits
 
      # Recuperation du fichier .export
      if self.export:  export = self.export
@@ -415,7 +444,6 @@ class CALCUL_ASTER:
                   username = getpass.getuser()
      user_mach_dist = "%s@%s:" % ( username, socket.gethostname() )
 
-
      # On cherche s'il y a un fichier hostfile pour rajouter user@hostname
      l_fr = getattr(prof, 'data')
      l_tmp = l_fr[:]
@@ -424,26 +452,26 @@ class CALCUL_ASTER:
            user_mach = user_mach_dist
            break
 
-     # En distribue
-     if self.TEMPS:    prof.param['tpsjob']    = str(self.TEMPS)
-     if self.MEMOIRE:  prof.param['memjob']    = str(self.MEMOIRE)
+     # Parametres ajoutes par le mot-cle CALCUL_ESCLAVE
+     if self.tpsjob:    prof.param['tpsjob']    = str(self.tpsjob)
+     if self.tpmax:     prof.args['tpmax']      = str(self.tpmax)
+     if self.mem_aster: prof.param['mem_aster'] = str(self.mem_aster)
+     if self.memjob:    prof.param['memjob']    = str(self.memjob)
+     if self.memjeveux: prof.args['memjeveux']  = str(self.memjeveux)
 
      # En batch et distribue
      if self.MODE == 'BATCH':
-#        user_mach = "%s@%s:" % ( prof.param['username'][0], socket.gethostname() )
         user_mach = user_mach_dist
         prof.param['mode']      = 'batch'
-        if self.mem_aster: prof.param['mem_aster'] = str(self.mem_aster)
+        #if self.mem_aster: prof.param['mem_aster'] = str(self.mem_aster)
 
-        # classe reservee sur la machine Aster
+        # Choix d'une classe reservee
         if self.CLASSE:
            prof.param['classe'] = self.CLASSE
 
      # xterm
      if prof.param.has_key('xterm'):
         del prof.param['xterm']
-     # memjeveux
-     prof.args['memjeveux'] = self.memjeveux_esclave
 
      # fichier/répertoire
      for lab in ('data', 'resu'):
@@ -487,9 +515,6 @@ class CALCUL_ASTER:
 
            # Tous les autres fichiers en Resultat
            elif lab == 'resu':
-#               if self.UNITE_GRAPHIQUE and dico['ul'] == str(self.UNITE_GRAPHIQUE): l_fr.remove(dico)
-#               else:
-#                  dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
               l_fr.remove(dico)
 
            # Tous les autres fichiers en Donnees
@@ -504,7 +529,7 @@ class CALCUL_ASTER:
                             shutil.copyfile(src, dst)
                             dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
                         except Exception, e:
-                            print e
+                            if debug: print e
                      else:
                         dico['path'] = user_mach + os.path.join(os.getcwd(), 'fort.%s' % dico['ul'])
 
@@ -515,7 +540,5 @@ class CALCUL_ASTER:
      prof.WriteExportTo(self.new_export)
 
      if debug: os.system('cp ' + self.new_export + ' /tmp')
-     os.system('cp ' + self.new_export + ' /tmp')
-     #os.system('sleep 500')
 
-  # --FIN CLASSE  ----------------------------------------------------------------------------
+     # --FIN CLASSE  ----------------------------------------------------------------------------
index f7bf786fc1a8b1a0661a21424aa269d7005137a0..69853c792a7a50f2a8cea9b7bab99d211977760f 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF reca_mac Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF reca_mac Macro  DATE 03/01/2011   AUTEUR BODEL C.BODEL 
 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -24,9 +24,6 @@ recalage en dynamique
 '''
 import numpy as NP
 
-from Tkinter import Tk, Frame, StringVar, Entry, Label, Button
-from Meidee.modes import MacWindowFrame
-
 def extract_mac_array( mac_mode ):
 
     data1 = mac_mode.EXTR_TABLE().Array('NUME_MODE_1','MAC')
@@ -52,6 +49,9 @@ def get_modes(resu):
 class fenetre_mac:
 
     def __init__(self,resu1,resu2,mac):
+        from Calc_essai.outils_ihm import MacWindowFrame
+        from Tkinter import Tk, Frame, StringVar, Entry, Label, Button
+
         self.resu1 = resu1
         self.resu2 = resu2
         self.mac = mac
index a9d9fd5462740a270fcb29f6bab116969d960e1c..9a878761eae8c26c13e8b37185209397d97aeb42 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF recal Macro  DATE 26/05/2010   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF recal Macro  DATE 28/03/2011   AUTEUR ASSIRE A.ASSIRE 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -76,6 +76,40 @@ except:
        if code=='F': sys.exit()
 
 
+# -------------------------------------------------------------------------------
+def affiche(unity, filename, label='', filetype='stderr'):
+   """ Affiche un fichier dans l'output courant (methode utilisee pour l'affichage
+       du stdout et/ou du stderr
+   """
+   try:
+       f=open(filename, 'r')
+       txt = f.read()
+       txt = """
+
+============================ %s (%s) =============================
+
+
+%s
+
+
+======================================================================
+======================================================================
+
+""" % (label, filetype, txt)   
+
+       f.close()
+
+       if unity:
+           fw=open('fort.%s' % str(unity), 'a')
+           fw.write( txt )
+           fw.close()
+       else:
+           print txt
+   except Exception, e: 
+       print e
+   return
+
+
 # # -------------------------------------------------------------------------------
 # def find_parameter(content, param):
 #    """
@@ -135,7 +169,7 @@ def make_include_files(UNITE_INCLUDE, calcul, parametres):
        sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
    except: pass
    try:
-       from asrun.utils import find_command, search_enclosed
+       from asrun.common.utils import find_command, search_enclosed
    except Exception, e:
        print e
        UTMESS('F','RECAL0_99')
@@ -365,6 +399,10 @@ class CALCULS_ASTER:
 
        self.jdc                = jdc
 
+       self.follow_output      = False
+       self.unity_follow       = None
+
+
        self.list_params        = [x[0] for x in parametres]
        self.list_params.sort()
 
@@ -466,11 +504,18 @@ class CALCULS_ASTER:
             for n in range(1,len(dX)+1):
                l = [0] * len(dX)
                l[n-1] = dX[n-1]
-               X = [ X0[i] * (1+l[i]) for i in range(len(dX)) ]
+#               X = [ X0[i] * (1+l[i]) for i in range(len(dX)) ]
+               X = []
+               for i in range(len(dX)):
+                  new_Xi = X0[i] * (1+l[i])
+                  if new_Xi > self.parametres[i][3]:
+                     UTMESS('I', 'RECAL0_75', valk=( str(self.parametres[i][0]), str(new_Xi), str(self.parametres[i][2]), str(self.parametres[i][3]), str(l[i]) ) )
+#                     new_Xi = X0[i] * (1-l[i])  # diff finie a gauche marche pas fort
+                  X.append( new_Xi )
+               #print 'X=', X
                dic = dict( zip( list_params, X ) )
                list_val.append( dic )
 
-
         # ----------------------------------------------------------------------------
         # Aiguillage vers INCLUDE
         # ----------------------------------------------------------------------------
@@ -508,16 +553,6 @@ class CALCULS_ASTER:
      """  Module permettant de lancer N+1 calculs via un mecanisme d'include
      """
 
-#      # Importation de commandes Aster
-#      try:
-#         import aster
-#         import Macro
-#         from Accas import _F
-#         from Cata import cata
-#         from Cata.cata import *
-#      except ImportError:
-#         raise "Simu_point_mat doit etre lance depuis Aster"
-
      try:
          import aster
          import Macro
@@ -527,13 +562,7 @@ class CALCULS_ASTER:
     
          # Declaration de toutes les commandes Aster
          import cata
-         for k,v in cata.__dict__.items() :
-           #print k,v
-           if isinstance(v, (OPER, MACRO)):
-             #print k,v
-             #self.jdc.current_context[k]= v
-             exec("from Cata.cata import %s" % k)
-         #self.jdc.current_context['_F']=cata.__dict__['_F']
+         from Cata.cata import *
      except Exception, e:
          raise "Le mode INCLUDE doit etre lance depuis Aster : \nErreur : " % e
 
@@ -578,7 +607,10 @@ class CALCULS_ASTER:
          # Lancement du calcul (par un include)
          # ----------------------------------------------------------------------------
          new = "fort.%s.new" % self.UNITE_INCLUDE
-         execfile(new)
+         try:
+            execfile(new)
+         except Exception, e:
+            UTMESS('F', 'RECAL0_85', valk=str(e))
 
 
          # ----------------------------------------------------------------------------
@@ -682,8 +714,7 @@ class CALCULS_ASTER:
         try:
             from asrun.run          import AsRunFactory
             from asrun.profil       import ASTER_PROFIL
-            from asrun.common_func  import get_hostrc
-            from asrun.utils        import get_timeout
+            from asrun.repart       import get_hostrc
             from asrun.parametric   import is_list_of_dict
             from asrun.thread       import Dispatcher
             from asrun.distrib      import DistribParametricTask
@@ -700,7 +731,9 @@ class CALCULS_ASTER:
         # ----------------------------------------------------------------------------
         sys.argv = ['']
         run = AsRunFactory()
-        run.options['debug_stderr'] = True  # pas d'output d'executions des esclaves dans k'output maitre
+        #if info<=2: run.options['debug_stderr'] = False  # pas d'output d'executions des esclaves dans l'output maitre
+        if self.unity_follow and info==2: run.options['debug_stderr'] = True
+        else:                             run.options['debug_stderr'] = False  # pas d'output d'executions des esclaves dans l'output maitre
 
         # Master profile
         prof = ASTER_PROFIL(filename=export)
@@ -727,16 +760,29 @@ class CALCULS_ASTER:
                     resudir = None
         if not resudir:
             # Par defaut, dans un sous-repertoire du repertoire d'execution
+            shared_tmp=None
             pref = 'tmp_macr_recal_'
             # On cherche s'il y a un fichier hostfile pour placer les fichiers dans un repertoire partage
             l_fr = getattr(prof, 'data')
             l_tmp = l_fr[:]
             for dico in l_tmp:
                if dico['type']=='hostfile':
-                  pref = os.environ['HOME'] + os.sep + 'tmp_macr_recal_'
+                  shared_tmp = run.get('shared_tmp')
+                  if not shared_tmp: shared_tmp = os.path.join( os.environ['HOME'], 'tmp_macr_recal')
+                  pref = shared_tmp + os.sep + 'tmp_macr_recal_'
                   break
             # Si batch alors on place les fichiers dans un repertoire partage
-            if prof['mode'][0]=='batch': pref = os.environ['HOME'] + os.sep + 'tmp_macr_recal_'
+            if prof['mode'][0]=='batch': 
+                  shared_tmp = run.get('shared_tmp')
+                  if not shared_tmp: shared_tmp = os.path.join( os.environ['HOME'], 'tmp_macr_recal')
+                  pref = shared_tmp + os.sep + 'tmp_macr_recal1_'
+
+            # Creation du repertoire temporaire racine de macr_recal
+            if shared_tmp:
+               if not os.path.isdir(shared_tmp):
+                   try:    os.mkdir(shared_tmp)
+                   except: 
+                      if info>=1: UTMESS('F','RECAL0_82',valk=shared_tmp)
 
             resudir = tempfile.mkdtemp(prefix=pref)
         flashdir = os.path.join(resudir,'flash')
@@ -748,7 +794,7 @@ class CALCULS_ASTER:
         hostrc = get_hostrc(run, prof)
 
         # timeout before rejected a job
-        timeout = get_timeout(prof)
+        timeout = prof.get_timeout()
 
 
         # Ajout des impressions de tables a la fin du .comm
@@ -787,7 +833,7 @@ class CALCULS_ASTER:
                                      resudir=resudir, flashdir=flashdir,
                                      keywords={'POST_CALCUL': '\n'.join(t)},
                                      info=info,
-                                     nbnook=0, exec_result=[])            # OUT
+                                     nbnook=[0,]*numthread, exec_result=[])            # OUT
         # ... and dispatch task on 'list_tests'
         etiq = 'calc_%%0%dd' % (int(log10(nbval)) + 1)
         labels = [etiq % (i+1) for i in range(nbval)]
@@ -800,38 +846,45 @@ class CALCULS_ASTER:
         # Liste des diagnostics
         # ----------------------------------------------------------------------------
         d_diag = {}
+
+
         for result in task.exec_result:
-            #print result
             label = result[0]
             diag  = result[2]
             if len(result) >= 8: output_filename = os.path.join('~', 'flasheur', str(result[7]))
             else:                output_filename = ''
             d_diag[label] = diag
+
+            # Affichage de l'output de l'esclave dans l'output du maitre
+            if self.unity_follow:
+                affiche(unity=self.unity_follow, filename=output_filename, label=label, filetype='stdout')
+
+            # Calcul esclave NOOK
             if not diag[0:2] in ['OK', '<A']:
-              if not diag in ['<F>_COPY_ERROR']:
-                  UTMESS('A', 'RECAL0_70', valk=(label, output_filename))
-  
-                  # Affichage de l'output
-                  try:
-                     f=open(output_filename, 'r')
-                     print f.read()
-                     f.close()
-                  except: pass
+
+              # Affichage de l'output et/ou de l'error de l'esclave dans l'output du maitre
+              try:
+                  affiche(unity=None, filename=output_filename, label=label, filetype='stdout')
+                  error_filename = '.'.join(output_filename.split('.')[0:-1]) + '.e' + output_filename.split('.')[-1][1:]
+                  affiche(unity=None, filename=error_filename, label=label, filetype='stderr')
+              except Exception, e: 
+                  print e
+
+              if diag in ['<F>_NOT_RUN', '<A>_NOT_SUBMITTED']:
+                  UTMESS('F', 'RECAL0_86', valk=(label, diag))
+              else:
+                  UTMESS('A', 'RECAL0_83', valk=(label, output_filename))
 
 
         if not d_diag: 
-                UTMESS('F', 'RECAL0_71', valk=resudir)
+            UTMESS('F', 'RECAL0_84', valk=resudir)
         self.list_diag = [ d_diag[label] for label in labels ]
 
         # ----------------------------------------------------------------------------
         # Arret si tous les jobs ne se sont pas deroules correctement
         # ----------------------------------------------------------------------------
-        iret = 0
-        if task.nbnook > 0:
-           iret = 4
-        if iret:
-           UTMESS('A', 'RECAL0_71', valk=resudir)
-           run.Sortie(iret)
+        if sum(task.nbnook) > 0:
+           UTMESS('F', 'RECAL0_84', valk=resudir)
 
 
 
@@ -1043,8 +1096,7 @@ class CALC_ERROR:
 
        if info>=3: self.debug = True
        else:       self.debug = False
-       #if debug: self.debug = True
-       self.debug = True
+       if debug: self.debug = True
 
 
    # ---------------------------------------------------------------------------
index 72f95a6b412d161c30080d1a8049f3637a505d9c..4f6f9cbc30bcad049f18403622129ac55216b418 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF simu_point_mat_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF simu_point_mat_ops Macro  DATE 28/02/2011   AUTEUR PROIX J-M.PROIX 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -50,6 +50,7 @@ def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,
   from Accas import _F
   from Utilitai.UniteAster import UniteAster
   from Utilitai.Utmess import  UTMESS
+  from Noyau.N_types import is_enum
   
 # -- Tests de cohérence
   __fonczero = DEFI_FONCTION(NOM_PARA = 'INST',
@@ -60,12 +61,16 @@ def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,
   CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
   CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
   
+  if COMP_INCR  :
+     lcomp = COMP_INCR.List_F()[0]
+  if COMP_ELAS   :
+     lcomp = COMP_ELAS.List_F()[0]
+
   if SUPPORT != None :
      if SUPPORT=='ELEMENT': 
         itetra=1
   if itetra==0 :
      if COMP_INCR != None : 
-        lcomp = COMP_INCR.List_F()[0]
         if lcomp['DEFORMATION'] != 'PETIT' :
            itetra=1
            UTMESS('A','COMPOR2_1',valk=lcomp['DEFORMATION'] )
@@ -138,6 +143,22 @@ def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,
           if args['NB_VARI_TABLE'] != None:  
              motscles['NB_VARI_TABLE']  = args['NB_VARI_TABLE']
  
+       if args.has_key('MATR_C1'):
+          if args['MATR_C1'] != None:  
+          #   motscles['MATR_C1']  = MATR_C1.List_F()
+             motscles['MATR_C1']  = args['MATR_C1'].List_F()
+       if args.has_key('MATR_C2'):
+          if args['MATR_C2'] != None:  
+             motscles['MATR_C2']  = args['MATR_C2'].List_F()
+       if args.has_key('VECT_IMPO'):
+          if args['VECT_IMPO'] != None:  
+             motscles['VECT_IMPO']  = args['VECT_IMPO'].List_F()
+       if   ARCHIVAGE   :
+         motscles['ARCHIVAGE']   = ARCHIVAGE.List_F()
+
        self.DeclareOut('REPONSE',self.sd)
        __REP1 = CALC_POINT_MAT(INFO=INFO,MATER=MATER,ANGLE=ANGLE,**motscles)
  
@@ -420,26 +441,33 @@ def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,
              lvarc  = args['AFFE_VARC'].List_F()
              nbvarc=len(lvarc)
              for ivarc in range(nbvarc) :
-                  typech = 'NOEU_' + str(lvarc[ivarc]['NOM_VARC']) + '_F'
                   dico={}
-                  __CHVARC=CREA_CHAMP(TYPE_CHAM=typech,
-                                     OPERATION='AFFE', 
-                                     MAILLAGE=__MA, 
-                                     AFFE=_F(MAILLE='VOLUME', 
+                  typech = 'NOEU_' + str(lvarc[ivarc]['NOM_VARC']) + '_R'
+                  labsc=lvarc[ivarc]['VALE_FONC'].Absc()
+                  lordo=lvarc[ivarc]['VALE_FONC'].Ordo()
+                  l_affe_cham=[]
+                  __CHV=[None]*len(labsc)
+                  for it,time in enumerate(labsc):
+                      __CHV[it]=CREA_CHAMP(TYPE_CHAM=typech,
+                                     OPERATION='AFFE',
+                                     MAILLAGE=__MA,
+                                     AFFE=_F(MAILLE='VOLUME',
                                              NOM_CMP=lvarc[ivarc]['NOM_VARC'],
-                                             VALE_F=lvarc[ivarc]['VALE_FONC'],
+                                             VALE=lordo[it],
                                             ),
-                                     ), 
-                  __LIST2  = INCREMENT.List_F()[0]['LIST_INST']
-                  __TEMP=CREA_RESU(OPERATION='AFFE',TYPE_RESU='EVOL_THER',NOM_CHAM='TEMP',
-                                   AFFE = _F(CHAM_GD = __CHVARC,LIST_INST = __LIST2,),
-                                   )
+                                     ),
+                      dicoch={}
+                      dicoch["CHAM_GD"]=__CHV[it]
+                      dicoch["INST"]=time
+                      l_affe_cham.append(dicoch)
+                  __EVOV=CREA_RESU(OPERATION='AFFE',TYPE_RESU='EVOL_VARC',NOM_CHAM=str(lvarc[ivarc]['NOM_VARC']),
+                               AFFE = l_affe_cham)  
                   dico["MAILLE"]='VOLUME'
-                  dico["EVOL"]=__TEMP
+                  dico["EVOL"]=__EVOV
                   dico["NOM_VARC"]=lvarc[ivarc]['NOM_VARC']
                   if lvarc[ivarc]['VALE_REF'] != None:
                      dico["VALE_REF"]=lvarc[ivarc]['VALE_REF']
-             mcvarc.append(dico)
+                  mcvarc.append(dico)
 #      -- Materiau et modele
       if len(mcvarc) > 0 :
          __CHMAT=AFFE_MATERIAU(MAILLAGE=__MA,AFFE = _F(MAILLE='VOLUME',MATER=MATER),
@@ -475,6 +503,8 @@ def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,
           lnomneu=[]
           lnomvar=[]
           VARINI=VARI_INIT[0].cree_dict_valeurs(VARI_INIT[0].mc_liste)
+          if (not is_enum(VARINI['VALE'])) :
+              VARINI['VALE'] = [VARINI['VALE'],]
           nbvari=len(VARINI['VALE'])
           for i in range(nbvari):
               lnomneu.append('X'+str(i+1))
@@ -601,43 +631,48 @@ def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,
                                  EXCIT = l_char,**motscles)
 
 
+      if lcomp['DEFORMATION'] != 'PETIT' :
+         nomepsi='EPSG_ELNO'
+      else :
+         nomepsi='EPSI_ELNO'
+         
       __EVOL1 = CALC_ELEM(reuse = __EVOL1,RESULTAT = __EVOL1,
-        OPTION = ('SIEF_ELNO_ELGA','EPSI_ELNO_DEPL','VARI_ELNO_ELGA'))
+        OPTION = ('SIEF_ELNO',nomepsi,'VARI_ELNO'))
  
       if MODELISATION=="3D":
           angles=(ANGLE,0,0)
           __EVOL=MODI_REPERE(RESULTAT=__EVOL1, MODI_CHAM=(
               _F(NOM_CHAM='DEPL',NOM_CMP=('DX','DY','DZ'),TYPE_CHAM='VECT_3D',),
-              _F(NOM_CHAM='SIEF_ELNO_ELGA',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),TYPE_CHAM='TENS_3D',),
-              _F(NOM_CHAM='EPSI_ELNO_DEPL',NOM_CMP=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),TYPE_CHAM='TENS_3D',),
+              _F(NOM_CHAM='SIEF_ELNO',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),TYPE_CHAM='TENS_3D',),
+              _F(NOM_CHAM=nomepsi,NOM_CMP=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),TYPE_CHAM='TENS_3D',),
                                   ),
                      DEFI_REPERE=_F(REPERE='UTILISATEUR',ANGL_NAUT=angles),);
       else :
           angles=ANGLE
           __EVOL=MODI_REPERE(RESULTAT=__EVOL1,MODI_CHAM=(
                      _F(NOM_CHAM='DEPL',NOM_CMP=('DX','DY'),TYPE_CHAM='VECT_2D',),
-                     _F(NOM_CHAM='SIEF_ELNO_ELGA',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY'),TYPE_CHAM='TENS_2D',),
-                     _F(NOM_CHAM='EPSI_ELNO_DEPL',NOM_CMP=('EPXX','EPYY','EPZZ','EPXY'),TYPE_CHAM='TENS_2D',),
+                     _F(NOM_CHAM='SIEF_ELNO',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY'),TYPE_CHAM='TENS_2D',),
+                     _F(NOM_CHAM=nomepsi,NOM_CMP=('EPXX','EPYY','EPZZ','EPXY'),TYPE_CHAM='TENS_2D',),
                                   ),
                      DEFI_REPERE=_F(REPERE='UTILISATEUR',ANGL_NAUT=angles),);
  
 #     -- Recuperation des courbes
 
       __REP_VARI = POST_RELEVE_T(ACTION = (
-          _F(INTITULE='VARI_INT',RESULTAT=__EVOL1,NOM_CHAM='VARI_ELNO_ELGA',
+          _F(INTITULE='VARI_INT',RESULTAT=__EVOL1,NOM_CHAM='VARI_ELNO',
             TOUT_CMP='OUI',OPERATION='EXTRACTION',NOEUD='P0'),))
 
  
       __REP_EPSI = POST_RELEVE_T(ACTION = (
-          _F(INTITULE='EPSILON',RESULTAT=__EVOL,NOM_CHAM='EPSI_ELNO_DEPL',
+          _F(INTITULE='EPSILON',RESULTAT=__EVOL,NOM_CHAM=nomepsi,
             TOUT_CMP='OUI',OPERATION='EXTRACTION',NOEUD     = 'P0'),))
 
       __REP_SIGM = POST_RELEVE_T(ACTION = (
-          _F(INTITULE  = 'SIGMA',RESULTAT  =  __EVOL,NOM_CHAM  = 'SIEF_ELNO_ELGA',
+          _F(INTITULE  = 'SIGMA',RESULTAT  =  __EVOL,NOM_CHAM  = 'SIEF_ELNO',
             TOUT_CMP  = 'OUI',OPERATION = 'EXTRACTION',NOEUD     = 'P0'),))
  
       __REP_INV = POST_RELEVE_T(ACTION = (
-          _F(INTITULE  = 'INV',RESULTAT  =  __EVOL,NOM_CHAM  = 'SIEF_ELNO_ELGA',
+          _F(INTITULE  = 'INV',RESULTAT  =  __EVOL,NOM_CHAM  = 'SIEF_ELNO',
             INVARIANT  = 'OUI',OPERATION = 'EXTRACTION',NOEUD     = 'P0'),))
  
       __REP_INV=CALC_TABLE( TABLE=__REP_INV,reuse=__REP_INV,
index e8c0eab51fb8f8e0b1260dd9e6968dc7e17c6021..ac98a47e745af40a3e6d932d551c8672c61a1081 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF stanley_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+#@ MODIF stanley_ops Macro  DATE 24/08/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -58,18 +58,18 @@ def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args):
   if os.environ.has_key('DISPLAY'):
 
     import Stanley
-    from Stanley import stanley
+    from Stanley import stanley_engine
 
     if (RESULTAT and MODELE and CHAM_MATER):
       _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .LGRF        ' )
       _MAIL = string.strip(_MAIL[0])
       MAILLAGE = self.jdc.g_context[_MAIL]
       if CARA_ELEM:
-        stanley.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM)
+        stanley_engine.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM)
       else:
-        stanley.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,None)
+        stanley_engine.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,None)
     else:
-      stanley.PRE_STANLEY(FICHIER_VALID)
+      stanley_engine.PRE_STANLEY(FICHIER_VALID)
 
   else:
       UTMESS('A','STANLEY_3',valk=['STANLEY'])
diff --git a/Aster/Cata/cataSTA10/Macro/test_compor_ops.py b/Aster/Cata/cataSTA10/Macro/test_compor_ops.py
new file mode 100644 (file)
index 0000000..62b22ff
--- /dev/null
@@ -0,0 +1,783 @@
+#@ MODIF test_compor_ops Macro  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+#              MACRO "TEST_COMPOR"
+#           ----------------------------
+
+#######################################################################
+# utilitaires
+#######################################################################
+def PROD_ROT(X1,X2):
+    # calcul Produit de 2 vecteurs pour les coef de rotations
+    # dimension de X1 et X2 liste de 3 scalaire resultat liste de 6 scalaires
+    if (len(X1)==len(X2)==3) : 
+            Y=[None]*6
+            V_ind=[[0,0,0.5],[1,1,0.5],[2,2,0.5],[0,1,1.0],[0,2,1.0],[1,2,1.0]]
+            for ind in V_ind:
+                    i=V_ind.index(ind)
+                    ind1,ind2,coef=ind[0],ind[1],ind[2]
+                    Y[i]=coef*(X1[ind1]*X2[ind2]+X1[ind2]*X2[ind1])
+            return Y
+    else :
+            print "CALCUL PROD_ROT IMPOSSIBLE, dimensions innatendues"
+            return None
+#######################################################################
+def RENOMME(self,i,N_pas,label_cal,ch_param,_RES,_RSI):
+# On renomme les composantes en fonction de  l'ordre de discrétisation
+   from Accas import _F
+   DETRUIRE       = self.get_cmd('DETRUIRE')
+   CALC_TABLE     = self.get_cmd('CALC_TABLE')
+   N = N_pas[i]
+   chN=label_cal[i]+str(N)
+   for ch in ch_param:
+           j=ch_param.index(ch)
+           chnew=ch+chN
+            ##Extraction par type de variable 
+           if _RSI[j] == None:
+                   _RSI[j]=CALC_TABLE( TABLE=_RES[i],
+                                TITRE = ' ',
+                                ACTION=( _F(OPERATION='EXTR',
+                                       NOM_PARA=('INST',ch,),),
+                                         _F(OPERATION='RENOMME',
+                                           NOM_PARA=(ch,chnew,),),
+                                                           ),);
+           else:
+                   TMP_S=CALC_TABLE( TABLE=_RES[i],
+                                TITRE = ' ',
+                                ACTION=( _F(OPERATION='EXTR',
+                                       NOM_PARA=('INST',ch,),),
+                                           _F(OPERATION='RENOMME',
+                                           NOM_PARA=(ch,chnew,),),
+                                                           ),);
+                   _RSI[j]=CALC_TABLE( reuse=_RSI[j], TABLE=_RSI[j],
+                                TITRE = ' ',
+                                   ACTION=( _F(OPERATION='COMB',
+                                   TABLE=TMP_S,NOM_PARA='INST',),
+                                           ),);
+                   DETRUIRE ( CONCEPT = _F (NOM = TMP_S,),INFO=1)
+   
+   return _RSI
+#######################################################################
+
+def ERREUR(X,Xref,prec_zero,coef):
+    "calcul erreur relative entre deux nombres"
+    if (abs(Xref)<prec_zero) : 
+       err=0.
+    else :
+       err= abs((X*coef-Xref)/Xref)
+    return err
+#######################################################################
+
+def TEST_ECART(self,ch_param2,label_cal,N_pas,Ncal,ch_param,_RSI,prec_ecart,prec_zero):
+   from Accas import _F
+   DETRUIRE       = self.get_cmd('DETRUIRE')
+   FORMULE        = self.get_cmd('FORMULE')
+   CALC_TABLE     = self.get_cmd('CALC_TABLE')
+
+   #Exploitations
+   CH_V1 = ['INST']
+   C_Pa=1.e6
+   _ERSI=[None]*len(ch_param2)
+
+   for ch in ch_param2 :
+   #CALCUL des ecarts relatifs
+        i=ch_param2.index(ch)
+        chref1 =ch + label_cal[4] + str(N_pas[4]) 
+        chref2 = ch + label_cal[Ncal-1] + str(N_pas[Ncal-1])
+        chref = [chref1, chref2]        
+        preczero=prec_zero[i]   
+
+        for j in range(Ncal) :
+                coef = 1.
+                ch_cal = ch + label_cal[j] + str(N_pas[j]) 
+                ch_err = 'ER_' + ch_cal
+                if j < 4 :
+                        if (j==0 and i>0 and i<9) : coef = 1/C_Pa
+                        iref = 0
+                else :
+                        iref =1
+                        if (i==0) : CH_V1.append(ch_cal)
+#               calcul de l'erreur (ecart relatif)
+                valfor='ERREUR(%s,%s,%e,%f)' % (ch_cal,chref[iref],preczero,coef)
+                nompar1='%s' % (ch_cal )
+                nompar2='%s' % (chref[iref] )                
+                ERR_REL = FORMULE(NOM_PARA=(nompar1,nompar2),VALE=valfor)
+                if _ERSI[i] == None :
+                   _ERSI[i] = CALC_TABLE(TABLE =_RSI[i], 
+                                     TITRE = '_RSI'+str(j),
+                             ACTION = (_F(OPERATION='OPER',NOM_PARA=ch_err,
+                                          FORMULE=ERR_REL),
+                                      ),);
+                else :
+                   _ERSI[i] = CALC_TABLE(TABLE =_ERSI[i], reuse=_ERSI[i],
+                                     TITRE = '_RSI'+str(j),
+                             ACTION = (_F(OPERATION='OPER',NOM_PARA=ch_err,
+                                          FORMULE=ERR_REL),
+                                      ),);
+                DETRUIRE ( CONCEPT = _F (NOM = ERR_REL,),INFO=1)                
+   return _ERSI
+        
+#######################################################################
+
+def CHAR3D(self,POISSON,YOUNG,_tempsar,INFO):
+   CALC_FONCTION       = self.get_cmd('CALC_FONCTION')
+   DEFI_FONCTION       = self.get_cmd('DEFI_FONCTION')
+   DEFI_LIST_REEL      = self.get_cmd('DEFI_LIST_REEL')
+   IMPR_FONCTION       = self.get_cmd('IMPR_FONCTION')
+   from Accas import _F
+   import numpy as NP
+   
+   ##################################################################################
+   # definition du trajet de chargement 3D
+   #######################################################################
+   #fonctions chargement
+   calibrage = 3.5;
+   Ctau = ((2 * calibrage) * ((1 + POISSON) / (2 * YOUNG)));
+   Ctrac = (calibrage * (1 / YOUNG));
+   _Ytrace=DEFI_LIST_REEL( VALE = (0., 150., 150., -50, 0., 50., -150., -150., 0.),)
+   _Trace=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= _Ytrace,
+                       PROL_DROITE='EXCLU',
+                       PROL_GAUCHE='EXCLU',);
+
+   _YDevi_1=DEFI_LIST_REEL( VALE = (0., 75., 150., 150, 0., -150., -150., -75., 0.),)
+   _Devi_1=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= _YDevi_1,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   _YDevi_2=DEFI_LIST_REEL( VALE = (0., 75., -50., 100, 0., -100., 50., -75., 0.),)
+   _Devi_2=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= _YDevi_2,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   _Ytauxy=DEFI_LIST_REEL( VALE = (0., 200., 100., 300, 0., -300., -100., -200., 0.),)
+   _TAU_xy=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= _Ytauxy,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   _Ytauxz=DEFI_LIST_REEL( VALE = (0., -100., 100., 200, 0., -200., -100., 100., 0.),)
+   _TAU_xz=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= _Ytauxz,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   _Ytauyz=DEFI_LIST_REEL( VALE = (0., 0., 200., -100, 0., 100., -200., 0., 0.),)
+   _TAU_yz=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= _Ytauyz,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   _eps_xy=CALC_FONCTION(COMB=_F(FONCTION=_TAU_xy,
+                                COEF=Ctau,),);
+
+   _eps_xz=CALC_FONCTION(COMB=_F(FONCTION=_TAU_xz,
+                                COEF=Ctau,),);
+
+   _eps_yz=CALC_FONCTION(COMB=_F(FONCTION=_TAU_yz,
+                                COEF=Ctau,),);
+
+   _eps_xx=CALC_FONCTION(COMB=(_F(FONCTION=_Trace,
+                                 COEF=Ctrac,),
+                              _F(FONCTION=_Devi_1,
+                                 COEF=Ctrac,),),);
+
+   _eps_yy=CALC_FONCTION(COMB=(_F(FONCTION=_Trace,
+                                 COEF=Ctrac,),
+                              _F(FONCTION=_Devi_1,
+                                 COEF=-(Ctrac),),
+                              _F(FONCTION=_Devi_2,
+                                 COEF=Ctrac,),),);
+
+   _eps_zz=CALC_FONCTION(COMB=(_F(FONCTION=_Trace,
+                                 COEF=Ctrac,),
+                              _F(FONCTION=_Devi_2,
+                                 COEF=-(Ctrac),),),);
+   eps_imp = [_eps_xx, _eps_yy, _eps_zz, _eps_xy, _eps_xz, _eps_yz]
+   #rotation tenseur des def
+   #angle de precession, nutation, rotation propre
+   psi,teta,phi=0.9,0.7,0.4
+   cps,cte,cph=NP.cos(psi),NP.cos(teta),NP.cos(phi)
+   sps,ste,sph=NP.sin(psi),NP.sin(teta),NP.sin(phi)
+   #matrice de passage
+   p11,p21,p31 = cph*cps-sph*cte*sps,cph*sps+sph*cte*cps,sph*ste
+   p12,p22,p32 = -sph*cps-cph*cte*sps,-sph*sps+cph*cte*cps,cph*ste
+   p13,p23,p33 = ste*sps,-ste*cps,cte
+   V1= [p11, p21, p31]
+   V2= [p12, p22, p32]
+   V3= [p13, p23, p33]
+   #eps apres rotation
+   VI = [[V1,V1],[V2,V2],[V3,V3],[V1,V2],[V1,V3],[V2,V3]]
+   _eps_rot = [None]*6
+   for vect_i in VI:
+           i = VI.index(vect_i)
+           V_COEF = PROD_ROT(vect_i[0],vect_i[1])
+           _eps_rot[i] =CALC_FONCTION(COMB=(
+                           _F(FONCTION=_eps_xx,COEF=V_COEF[0],),
+                           _F(FONCTION=_eps_yy,COEF=V_COEF[1],),
+                           _F(FONCTION=_eps_zz,COEF=V_COEF[2],),
+                           _F(FONCTION=_eps_xy,COEF=V_COEF[3],),
+                           _F(FONCTION=_eps_xz,COEF=V_COEF[4],),
+                           _F(FONCTION=_eps_yz,COEF=V_COEF[5],),
+                                   ),);
+   #eps apres symetrie
+   eps_sym = [_eps_zz,_eps_xx,_eps_yy,_eps_xz,_eps_yz,_eps_xy]
+
+   V_EPS = [eps_imp,eps_sym,_eps_rot]
+   #trace chargement
+   if INFO == 2 :
+      IMPR_FONCTION(#FORMAT='XMGRACE',PILOTE='INTERACTIF',
+                 COURBE=(_F(FONCTION=eps_imp[0],),
+                         _F(FONCTION=eps_imp[1],),
+                         _F(FONCTION=eps_imp[2],),
+                         _F(FONCTION=eps_imp[3],),
+                         _F(FONCTION=eps_imp[4],),
+                         _F(FONCTION=eps_imp[5],),
+                         ),
+                 UNITE=29,);
+   return eps_imp
+        
+#######################################################################
+def CHAR2D(self,POISSON,YOUNG,_tempsar,INFO):
+   CALC_FONCTION       = self.get_cmd('CALC_FONCTION')
+   DEFI_FONCTION       = self.get_cmd('DEFI_FONCTION')
+   DEFI_LIST_REEL      = self.get_cmd('DEFI_LIST_REEL')
+   IMPR_FONCTION       = self.get_cmd('IMPR_FONCTION')
+   #######################################################################
+   # definition du trajet de chargement 2D
+   #######################################################################
+   from Accas import _F
+   import numpy as NP
+
+   #fonctions chargement
+   calibrage = 4.5;
+   Ctau = ((2 * calibrage) * ((1 + POISSON) / (2 * YOUNG)));
+   Ctrac = (calibrage * (1 / YOUNG));
+   YTrace2d=DEFI_LIST_REEL( VALE = (0., 150., 200., 300., 0., -300., -200., -150., 0.),)
+   Trace2d=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= YTrace2d,
+                       PROL_DROITE='EXCLU',
+                       PROL_GAUCHE='EXCLU',);
+
+   Y_Devi2=DEFI_LIST_REEL( VALE = (0., 0., 100., 0., 0., 0., -100., 0., 0.),)
+   Devi1_2d=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= Y_Devi2,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   Y_tauxy2=DEFI_LIST_REEL( VALE = (0., 100., 40., 0., 0., 0., -40., -100., 0.0),)
+   TAU_xy2=DEFI_FONCTION(NOM_PARA='INST',
+                       VALE_PARA= _tempsar,
+                       VALE_FONC= Y_tauxy2,
+                        PROL_DROITE='EXCLU',
+                        PROL_GAUCHE='EXCLU',);
+
+   eps_xy2=CALC_FONCTION(COMB=_F(FONCTION=TAU_xy2,
+                                COEF=Ctau,),);
+
+   eps_xx2=CALC_FONCTION(COMB=(_F(FONCTION=Trace2d,
+                                 COEF=Ctrac,),
+                              _F(FONCTION=Devi1_2d,
+                                 COEF=Ctrac,),),);
+
+   eps_yy2=CALC_FONCTION(COMB=(_F(FONCTION=Trace2d,
+                                 COEF=Ctrac,),
+                              _F(FONCTION=Devi1_2d,
+                                 COEF=-(Ctrac),),),);
+   #rotation tenseur des def
+   angle = 0.9
+   c,s = NP.cos(0.9) , NP.sin(0.9)
+   c2,s2,cs = c*c, s*s, c*s
+   eps_rr2=CALC_FONCTION(COMB=(_F(FONCTION=eps_xx2,
+                                   COEF=c2,),
+                             _F(FONCTION=eps_yy2,
+                                   COEF=s2,),
+                             _F(FONCTION=eps_xy2,
+                                   COEF=2*cs,),),);
+
+   eps_tt2=CALC_FONCTION(COMB=(_F(FONCTION=eps_xx2,
+                                   COEF=s2,),
+                             _F(FONCTION=eps_yy2,
+                                   COEF=c2,),
+                             _F(FONCTION=eps_xy2,
+                                   COEF=-2*cs,),),);
+
+   eps_rt2=CALC_FONCTION(COMB=(_F(FONCTION=eps_xx2,
+                                   COEF=-cs,),
+                             _F(FONCTION=eps_yy2,
+                                   COEF=cs,),
+                             _F(FONCTION=eps_xy2,
+                                   COEF=c2-s2,),),);
+   eps_imp = [eps_xx2 , eps_yy2, eps_xy2, eps_rr2,eps_tt2, eps_rt2]
+
+   #Trace2d chargement
+   if INFO==2 :
+      IMPR_FONCTION(#FORMAT='XMGRACE',PILOTE='INTERACTIF',
+                 COURBE=(_F(FONCTION=eps_imp[0],),
+                         _F(FONCTION=eps_imp[1],),
+                         _F(FONCTION=eps_imp[2],),
+                         _F(FONCTION=eps_imp[3],),
+                         _F(FONCTION=eps_imp[4],),
+                         _F(FONCTION=eps_imp[5],),
+                         ),
+                 UNITE=29,);
+   return eps_imp
+        
+
+#######################################################################
+
+
+
+def test_compor_ops(self,OPTION,NEWTON,CONVERGENCE,COMP_INCR,COMP_ELAS,LIST_MATER,VARI_TEST,INFO,
+                             **args):
+ # seule l'option "THER", c'est à dire le test thermomecanique est programme a ce jour
+ # ajouter l'option MECA (tests comp001,002), l'option HYDR, etc..
+  from Accas import _F
+  import numpy as NP
+  from Utilitai.veri_matr_tang import VERI_MATR_TANG
+  self.update_const_context({'ERREUR' : ERREUR})
+  
+  ier=0
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+  
+  # Le concept sortant (de type fonction) est nomme U dans 
+  # le contexte de la macro
+
+  self.DeclareOut('U',self.sd)
+  
+  # On importe les definitions des commandes a utiliser dans la macro
+  CALC_FONCTION  = self.get_cmd('CALC_FONCTION')
+  CALC_TABLE     = self.get_cmd('CALC_TABLE')
+  DEFI_CONSTANTE = self.get_cmd('DEFI_CONSTANTE')
+  DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+  DEFI_LIST_INST = self.get_cmd('DEFI_LIST_INST')
+  DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+  DEFI_MATERIAU  = self.get_cmd('DEFI_MATERIAU')
+  DETRUIRE       = self.get_cmd('DETRUIRE')
+  FORMULE        = self.get_cmd('FORMULE')
+  IMPR_FONCTION  = self.get_cmd('IMPR_FONCTION')
+  SIMU_POINT_MAT = self.get_cmd('SIMU_POINT_MAT')
+  TEST_TABLE     = self.get_cmd('TEST_TABLE')
+  IMPR_TABLE     = self.get_cmd('IMPR_TABLE')
+  CALC_TABLE     = self.get_cmd('CALC_TABLE')
+
+  motscles={}
+  if   COMP_INCR  :
+      motscles['COMP_INCR']   = COMP_INCR.List_F()
+  if   COMP_ELAS   :
+      motscles['COMP_ELAS']   = COMP_ELAS.List_F()
+  motscles['CONVERGENCE'] = CONVERGENCE.List_F()  
+  motscles['NEWTON']      = NEWTON.List_F()
+  
+  if OPTION=="THER" :
+      epsi = 1.E-10
+      MATER=args['MATER']
+      ALPHA=args['ALPHA']
+      YOUNG=args['YOUNG']
+      TEMP_INIT=args['TEMP_INIT']
+      TEMP_FIN=args['TEMP_FIN']
+      NB_VARI=args['NB_VARI']
+
+      if args['INST_FIN'] != None : INST_FIN=args['INST_FIN']
+      NCAL=len(LIST_MATER)
+      _LINST0=DEFI_LIST_REEL(DEBUT=0.,
+                          INTERVALLE=(_F(JUSQU_A=INST_FIN,
+                                         NOMBRE=NCAL,),
+                                         ),
+                          );
+
+      _LINST=DEFI_LIST_INST(DEFI_LIST=_F(LIST_INST=_LINST0,
+                                         METHODE='MANUEL',
+                                        # PAS_MINI=1.0E-12
+                                         ),
+                             ECHEC=_F(SUBD_PAS=10),
+                           # ADAPTATION=_F(EVENEMENT='SEUIL'),
+                            );
+      _TIMP=DEFI_FONCTION(NOM_PARA='INST',  NOM_RESU='TEMP',
+                         VALE=(  0. , TEMP_INIT, INST_FIN , TEMP_FIN)
+                         )
+
+      _zero=DEFI_CONSTANTE(VALE=0.)
+
+      _U=SIMU_POINT_MAT(MATER=MATER,INFO=INFO,
+                       SUPPORT='ELEMENT',
+                         AFFE_VARC=(
+                         _F(  NOM_VARC='TEMP',
+                              VALE_FONC=_TIMP,
+                              VALE_REF=TEMP_INIT),
+                              ),
+                       INCREMENT=_F(LIST_INST=_LINST,),
+                       EPSI_IMPOSE=_F(EPXX=_zero,),
+                       **motscles);
+
+      # On ne garde pas les valeurs initiales (NUME_ORDRE = 0 exclu)
+
+      _U = CALC_TABLE(reuse =_U,
+                    TABLE=_U,
+                    ACTION=(_F(
+                          OPERATION = 'FILTRE',
+                          NOM_PARA  = 'NUME_ORDRE',
+                          CRIT_COMP = 'GT',
+                          VALE    = 0,
+                         ),),);
+
+      SXM = 0.
+      EXM = 0.
+      time = 0.
+
+      _RES   = [None]*(NCAL)
+      if (NB_VARI > 0):
+         Vim    = NP.zeros(NB_VARI)
+
+      for i in range(NCAL):
+          timem = time
+          time = timem + INST_FIN/NCAL
+          Ti = TEMP_INIT + time/INST_FIN * (TEMP_FIN - TEMP_INIT)
+          Tm = TEMP_INIT + timem/INST_FIN * (TEMP_FIN - TEMP_INIT)
+          # deformation mecanique imposee correspondant a la deformation thermique du premier calcul
+          _epsimp =DEFI_CONSTANTE(VALE=-ALPHA(Ti)*(Ti - TEMP_INIT));
+
+          # variation des coef du COMPORtement avec la temperature
+          # correction eventuelle des valeurs initiales du temps ti
+          if i > 0 :
+             SXM = SXM *(YOUNG(Ti)/YOUNG(Tm))
+             # cas particuliers
+             if COMP_INCR.List_F()[0]['RELATION'] == 'VMIS_CINE_LINE' :
+                 
+                 if args['D_SIGM_EPSI'] != None : 
+                    D_SIGM_EPSI=args['D_SIGM_EPSI']
+                 else :
+                    raise 'erreur'
+                    
+                 Vim[0:5] = Vim[0:5]*D_SIGM_EPSI(Ti)/D_SIGM_EPSI(Tm)
+                 
+             if COMP_INCR.List_F()[0]['RELATION']== 'VMIS_ECMI_LINE' :
+                 if args['C_PRAG'] != None : 
+                    C_PRAG=args['C_PRAG']
+                 else :
+                    raise 'erreur'
+                 Vim[2:7] = Vim[2:7]*C_PRAG(Ti)/C_PRAG(Tm)
+                 
+             if COMP_INCR.List_F()[0]['RELATION']== 'VMIS_ECMI_TRAC' :
+                 if args['C_PRAG'] != None : 
+                    C_PRAG=args['C_PRAG']
+                 else :
+                    raise 'erreur'
+                 Vim[2:7] = Vim[2:7]*C_PRAG(Ti)/C_PRAG(Tm)
+
+          _list0 = DEFI_LIST_REEL(DEBUT=timem,
+                      INTERVALLE=(_F(JUSQU_A=time,NOMBRE=1,),),);
+          _list=DEFI_LIST_INST(DEFI_LIST=_F(LIST_INST=_list0,
+                                         METHODE='MANUEL',
+                                        # PAS_MINI=1.0E-12
+                                         ),
+                             ECHEC=_F(SUBD_PAS=10),
+                           # ADAPTATION=_F(EVENEMENT='SEUIL'),
+                            );
+          if (NB_VARI > 0):
+              _RES[i]=SIMU_POINT_MAT(INFO=INFO,
+                                 MATER=LIST_MATER[i],
+                                 SUPPORT='ELEMENT',
+                                 INCREMENT=_F(LIST_INST = _list, ),
+                                 EPSI_IMPOSE=_F(EPXX=_epsimp),
+                                 SIGM_INIT=_F(SIXX=SXM),
+                                 VARI_INIT=_F(VALE=[Vim[j] for j in range(NB_VARI)]),
+                                 EPSI_INIT=_F(EPXX=EXM, EPYY=0.,EPZZ=0.,EPXY=0.,EPXZ=0.,EPYZ=0.),
+                                 **motscles);
+          else :
+              _RES[i]=SIMU_POINT_MAT(INFO=INFO,
+                                 MATER=LIST_MATER[i],
+                                 SUPPORT='ELEMENT',
+                                 INCREMENT=_F(LIST_INST = _list, ),
+                                 EPSI_IMPOSE=_F(EPXX=_epsimp),
+                                 SIGM_INIT=_F(SIXX=SXM),
+                                 EPSI_INIT=_F(EPXX=EXM, EPYY=0.,EPZZ=0.,EPXY=0.,EPXZ=0.,EPYZ=0.),
+                                 **motscles);
+          # On ne teste pas les valeurs initiales (NUME_ORDRE = 0 exclu)
+
+          _RES[i] = CALC_TABLE(reuse =_RES[i],
+                    TABLE=_RES[i],
+                    ACTION=(_F(
+                          OPERATION = 'FILTRE',
+                          NOM_PARA  = 'NUME_ORDRE',
+                          CRIT_COMP = 'GT',
+                          VALE    = 0,
+                         ),),);
+          # recuperation des valeurs initiales du futur pas de temps dans la table resultat
+          EXM = _RES[i]['EPXX',1]
+          SXM = _RES[i]['SIXX',1]
+
+          if (NB_VARI > 0):
+             for j in range(NB_VARI):
+                Vim[j] = _RES[i]['V'+str(j+1),1]
+          DETRUIRE ( CONCEPT =  _F (NOM =_epsimp),INFO=1);
+          DETRUIRE ( CONCEPT =  _F (NOM =_list),INFO=1);
+          
+
+          TEST_TABLE(TABLE=_RES[i],
+                     NOM_PARA='VMIS',VALE=_U['VMIS',i+1],
+                     FILTRE=_F(NOM_PARA='INST',VALE=time),
+                     REFERENCE='AUTRE_ASTER',);
+
+          TEST_TABLE(TABLE=_RES[i],
+                     NOM_PARA='TRACE',VALE=_U['TRACE',i+1],
+                     FILTRE=_F(NOM_PARA='INST',VALE=time),
+                     REFERENCE='AUTRE_ASTER',);
+          if (NB_VARI > 0):
+             if VARI_TEST <> None  :
+                for j in range(len(VARI_TEST)):
+                   nomvari=VARI_TEST[j]
+                   if abs(_U[nomvari,i+1]) > epsi :
+                      TEST_TABLE(TABLE=_RES[i],
+                         NOM_PARA=nomvari,VALE=_U[nomvari,i+1],
+                         FILTRE=_F(NOM_PARA='INST',VALE=time),
+                         REFERENCE='AUTRE_ASTER',);
+             else  :
+                for j in range(NB_VARI):
+                   nomvari='V'+str(j+1)
+                   if abs(_U[nomvari,i+1]) > epsi :
+                      TEST_TABLE(TABLE=_RES[i],
+                         NOM_PARA=nomvari,VALE=_U[nomvari,i+1],
+                         FILTRE=_F(NOM_PARA='INST',VALE=time),
+                         REFERENCE='AUTRE_ASTER',);
+      for i in range(NCAL):
+          DETRUIRE ( CONCEPT =  _F (NOM =_RES[i]),INFO=1)
+      
+  elif OPTION=="MECA" :
+
+      LIST_NPAS=args['LIST_NPAS']
+      YOUNG=args['YOUNG']
+      POISSON=args['POISSON']
+
+      #Discretisation du calcul
+      if args['LIST_NPAS'] != None : 
+         LIST_NPAS=args['LIST_NPAS']
+      else :
+         LIST_NPAS=4*[1] + [1, 5, 25]             
+      Ncal = len(LIST_NPAS)
+
+      # les differents calculs effectues et les precisions sur chaque TEST_RESU
+      label_cal=['_Pa_','_Th_','_sym_','_rot_'] + 6* ['_N']
+      if args['LIST_TOLE'] != None : 
+         LIST_TOLE=args['LIST_TOLE']
+      else :
+         LIST_TOLE=4*[1.E-10] + [1.E-1] + (Ncal-5)*[1.E-2] + [1.E-8]  
+                  
+      if args['PREC_ZERO'] != None : 
+         PREC_ZERO=args['PREC_ZERO']
+      else :
+         PREC_ZERO=len(VARI_TEST)*[1.E-10]
+
+      prec_tgt=LIST_TOLE[-1]
+
+      #parametres vitesse de sollicitation
+      t_0 = 1.0
+      if   COMP_INCR  :
+         if COMP_INCR.List_F()[0]['RELATION'][0:4]== 'VISC' :
+            vitesse = 1.e-5
+            t_0 = 5.e-2/(8.0*vitesse)
+      # liste d'archivage
+      _tempsar=DEFI_LIST_REEL( VALE =[t_0*i for i in range(9)],)
+      
+      if args['MODELISATION'] != None :
+         modelisation=args['MODELISATION']
+      else :
+         modelisation= "3D"
+      if modelisation == "3D" : 
+
+          ##################################################################################
+          #  TEST 3D
+          ##################################################################################
+          
+          eps_imp = CHAR3D(self,POISSON,YOUNG,_tempsar,INFO)
+
+          ch_param2 = list(VARI_TEST)
+          ch_param=ch_param2+['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+
+      elif modelisation == "C_PLAN"  : 
+      
+          ##################################################################################
+          #  TEST 2D C_PLAN
+          ##################################################################################
+          
+          eps_imp = CHAR2D(self,POISSON,YOUNG,_tempsar,INFO)
+
+          # les quantites (invariants...) sur lequels portent les calculs d'erreur et les test_resu
+          ch_param2 = list(VARI_TEST)
+          ch_param=ch_param2+['SIXX','SIYY','SIZZ','SIXY']
+
+
+      ###############################################################################
+      #Discretisation et calcul
+      ###############################################################################
+
+      _RES=[None]*Ncal
+      _RSI=[None]*len(ch_param)
+      TMP_S=[None]
+
+      #pointeur materiau
+      P_imat = [0] + [1] + (Ncal-2)*[1]
+      #pointeur deformation
+      nomdef, symdef, rotdef = [0, 1, 2], [1, 0, 2], [3, 4, 5]
+      P_idef = [nomdef, nomdef,symdef, rotdef]
+      for i in range(6): P_idef.append(nomdef)
+
+      ldicoeps=[]
+      dicoeps={}
+      dicoeps['EPXX']=eps_imp[0]
+      dicoeps['EPYY']=eps_imp[1]
+      dicoeps['EPZZ']=eps_imp[2]
+      dicoeps['EPXY']=eps_imp[3]
+      if modelisation == "3D" :
+         dicoeps['EPXZ']=eps_imp[4]
+         dicoeps['EPYZ']=eps_imp[5]
+      ldicoeps.append(dicoeps)               
+      motscles['EPSI_IMPOSE']=ldicoeps
+
+      if args['SUPPORT'] != None :
+         if modelisation == "C_PLAN" : 
+            motscles['MODELISATION']='C_PLAN'
+            motscles['SUPPORT']='ELEMENT'            
+         else :   
+            motscles['SUPPORT']=args['SUPPORT']     
+         
+      #Boucle sur l'ensemble des calculs
+      for i in range(Ncal):
+              N = LIST_NPAS[i]
+              imat = P_imat[i]
+              idef = P_idef[i]
+              temps=DEFI_LIST_REEL(DEBUT=0.0,
+                           INTERVALLE=(_F(JUSQU_A=t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=2.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=3.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=4.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=5.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=6.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=7.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=8.0*t_0,NOMBRE=N,),),);
+
+              _DEFLIST =DEFI_LIST_INST(DEFI_LIST=_F(LIST_INST = temps,),
+                            ECHEC=_F(SUBD_METHODE='EXTRAPOLE',
+                                     SUBD_PAS=10,
+                                     SUBD_NIVEAU=10,),)
+      #       Resout le pb a deformation imposee
+              _RES[i]=SIMU_POINT_MAT(INFO=INFO,
+                         MATER      = LIST_MATER[imat],
+                         ARCHIVAGE = _F(LIST_INST = _tempsar),
+                         INCREMENT=_F(LIST_INST=_DEFLIST,),
+                         **motscles
+                              );
+      
+      #       On renomme les composantes en fonction de  l'ordre de discretisation
+              _RSI=RENOMME(self,i,LIST_NPAS,label_cal,ch_param,_RES,_RSI)
+              
+              DETRUIRE ( CONCEPT = _F (NOM = temps,),INFO=1)
+      # TEST_RESU sur les erreurs relatives
+      # les quantites (invariants...) sur lequels portent les calculs d'erreur et les test_resu
+      _RSI=TEST_ECART(self,ch_param2,label_cal,LIST_NPAS,Ncal,ch_param,_RSI,LIST_TOLE,PREC_ZERO)
+      
+      for ch in ch_param2 :
+        i=ch_param2.index(ch)
+        if INFO==2 : IMPR_TABLE(TABLE=_RSI[i]);
+        for j in range(Ncal) :
+          ch_cal = ch + label_cal[j] + str(LIST_NPAS[j])
+          ch_err = 'ER_' + ch_cal
+          TEST_TABLE(TABLE=_RSI[i],NOM_PARA=ch_err,
+            TYPE_TEST='MAX',VALE=0.,CRITERE='ABSOLU',PRECISION=LIST_TOLE[j],REFERENCE='ANALYTIQUE',);
+
+      ###############################################################################
+      # Test de la matrice tangente sur le calcul le plus fin
+      ###############################################################################
+
+      N = LIST_NPAS[Ncal-1]
+      _Linst=DEFI_LIST_REEL(DEBUT=0.0,
+                           INTERVALLE=(_F(JUSQU_A=t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=2.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=3.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=4.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=5.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=6.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=7.0*t_0,NOMBRE=N,),
+                                       _F(JUSQU_A=8.0*t_0,NOMBRE=N,),),);
+
+      if   COMP_INCR  :
+          motscles['COMP_INCR'][0]['TYPE_MATR_TANG'] = 'VERIFICATION' 
+      
+          _DEFLIS2 =DEFI_LIST_INST(DEFI_LIST=_F(LIST_INST = _Linst,),
+                            ECHEC=_F(SUBD_METHODE='EXTRAPOLE',
+                                     SUBD_PAS=10,
+                                     SUBD_NIVEAU=10,),)
+      #       Resout le pb a deformation imposee
+          U=SIMU_POINT_MAT(INFO=INFO,
+                         MATER      = LIST_MATER[imat],
+                         ARCHIVAGE = _F(LIST_INST = _tempsar),
+                         INCREMENT=_F(LIST_INST=_DEFLIS2,),
+                         **motscles
+                              );
+
+          _DIFFMAT=VERI_MATR_TANG()
+
+          TEST_TABLE(TABLE=_DIFFMAT,
+                     NOM_PARA='MAT_DIFF',
+                     TYPE_TEST='MAX',
+                     VALE=0.,
+                     CRITERE='ABSOLU',
+                     PRECISION=prec_tgt,
+                     REFERENCE='ANALYTIQUE',);
+
+          if INFO==2 : IMPR_TABLE(TABLE=_DIFFMAT)
+  
+  return ier
+
index 764968155504f61b1f86a479dd85aed0f08bc180..59e4c63601758ca3320061d6e47f6fabf976f581 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF co_cham_no SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_cham_no SD  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -28,13 +28,14 @@ import numpy
 # -----------------------------------------------------------------------------
 # post-traitement :
 class post_comp_cham_no :
-  def __init__(self,valeurs,noeud=None) :
+  def __init__(self,valeurs,noeud=None,comp=None) :
     self.valeurs=valeurs
     self.noeud=noeud
+    self.comp=comp
 
 # -----------------------------------------------------------------------------
 class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
-   def EXTR_COMP(self,comp,lgno,topo=0) :
+   def EXTR_COMP(self,comp=' ',lgno=[],topo=0) :
       """ retourne les valeurs de la composante comp du champ sur la liste
         de groupes de noeuds lgno avec eventuellement l'info de la
         topologie si topo>0. Si lgno est une liste vide, c'est equivalent
@@ -42,7 +43,10 @@ class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
         Attributs retourne
           - self.valeurs : numpy.array contenant les valeurs
         Si on a demande la topo (i.e. self.topo = 1) :
-          - self.noeud  : numero de noeud """
+          - self.noeud  : numero de noeud 
+        Si on demande toutes les composantes (comp = ' ') :
+          - self.comp : les composantes associees a chaque grandeur pour chaque noeud
+      """
       if not self.accessible() :
          raise Accas.AsException("Erreur dans cham_no.EXTR_COMP en PAR_LOT='OUI'")
 
@@ -50,7 +54,7 @@ class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
       ncham=ncham+(8-len(ncham))*' '
       nchams=ncham[0:7]+'S'
       ncmp=comp+(8-len(comp))*' '
-
+      
       aster.prepcompcham(ncham,nchams,ncmp,"NO      ",topo,lgno)
 
       valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
@@ -60,9 +64,13 @@ class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
       else :
          noeud=None
 
-      aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
-
-      return post_comp_cham_no(valeurs,noeud)
+      if comp[:1] == ' ':
+         comp=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.C'))
+         aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
+         return post_comp_cham_no(valeurs,noeud,comp)
+      else:
+         aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
+         return post_comp_cham_no(valeurs,noeud)
       
    def __add__(self, other):
       from SD.sd_nume_equa import sd_nume_equa
diff --git a/Aster/Cata/cataSTA10/SD/co_corresp_2_mailla.py b/Aster/Cata/cataSTA10/SD/co_corresp_2_mailla.py
new file mode 100644 (file)
index 0000000..2758688
--- /dev/null
@@ -0,0 +1,25 @@
+#@ MODIF co_corresp_2_mailla SD  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from SD.sd_corresp_2_mailla import sd_corresp_2_mailla
+
+class corresp_2_mailla(ASSD, sd_corresp_2_mailla):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_grille.py b/Aster/Cata/cataSTA10/SD/co_grille.py
new file mode 100644 (file)
index 0000000..724b7b0
--- /dev/null
@@ -0,0 +1,29 @@
+#@ MODIF co_grille SD  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+#  RESPONSABLE GENIAUT S.GENIAUT
+
+from SD import *
+from co_maillage import maillage_sdaster
+from sd_grille   import sd_grille
+
+# -----------------------------------------------------------------------------
+class grille_sdaster(maillage_sdaster,sd_grille):
+   pass
+      
index b57e3846f9e5df4a078817b7249b2cf0b06d8144..46858f223a278a17ab2d04e75c9017b192412ba0 100644 (file)
@@ -1,27 +1,75 @@
-#@ MODIF co_matr_asse SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF co_matr_asse SD  DATE 07/12/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 from SD import *
 from sd_matr_asse import sd_matr_asse
+from sd_nume_ddl  import sd_nume_ddl
+from SD.sd_stoc_morse import sd_stoc_morse
+import numpy
 
 # -----------------------------------------------------------------------------
 class matr_asse(ASSD, sd_matr_asse):
-   pass
-      
+
+
+  def EXTR_MATR(self) :
+    """ retourne les valeurs de la matrice  dans un format numpy
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs """
+
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse.EXTR_MATR en PAR_LOT='OUI'")
+
+    refa = numpy.array(self.REFA.get())
+    ma=refa[0]
+    nu=refa[1]
+    smos = sd_stoc_morse(nu[:14]+'.SMOS')
+
+    valm=self.VALM.get()
+    smhc=smos.SMHC.get()
+    smdi=smos.SMDI.get()
+
+    sym=len(valm)==1
+    dim=len(smdi)
+    nnz=smdi[dim-1]
+
+    triang_sup = numpy.array(valm[1])
+    print "AJACOT triang_sup=",triang_sup
+    if sym:
+      triang_inf = triang_sup
+    else:
+      triang_inf = numpy.array(valm[2])
+
+    if type(valm[1][0]) == type(1.j) :
+       dtype=complex
+    else :
+       dtype=float
+    valeur=numpy.zeros([dim, dim], dtype=dtype)
+
+    jcol=1
+    for kterm in range(1,nnz+1):
+      ilig=smhc[kterm-1]
+      if (smdi[jcol-1] < kterm) : jcol=jcol+1
+
+      valeur[jcol-1,ilig-1]=triang_inf[kterm-1]
+      valeur[ilig-1,jcol-1]=triang_sup[kterm-1]
+
+
+
+    return valeur
index 66e7c4e6b2e39d3fdf4ac4c301eb5701ebc7a23d..7f6c5d76865b26a99ba8a61de8088f8201189889 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_cham_no SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_cham_no SD  DATE 07/09/2010   AUTEUR DESOZA T.DESOZA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -19,8 +19,8 @@
 # ======================================================================
 
 from SD import *
+from SD.sd_util import *
 from SD.sd_titre import sd_titre
-
 from SD.sd_prof_chno import sd_prof_chno
 
 
@@ -28,7 +28,7 @@ class sd_cham_no(sd_titre):
 #------------------------------------
     nomj = SDNom(fin=19)
     VALE = AsVect(ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), docu=Parmi('', '2', '3'), )
-    REFE = AsVK24()
+    REFE = AsVK24(lonmax=4)
     DESC = AsVI(docu='CHNO', )
 
 
@@ -36,19 +36,45 @@ class sd_cham_no(sd_titre):
         # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
         return self.REFE.exists
 
+    def u_desc(self):
+        desc=self.DESC.get()
+        gd  = desc[0]
+        num = desc[1]
+        return gd,num
+
+    def u_refe(self):
+        refe=self.REFE.get()
+        mail      = refe[0]
+        prof_chno = refe[1]
+        return mail,prof_chno
+
     def check_cham_no_i_REFE(self, checker):
         if not self.exists() : return
-        lnom = self.REFE.get()
+        if checker.names.has_key(self.REFE): return
+        
+        mail, prof_chno = self.u_refe()
 
         # faut-il vérifier le sd_maillage de chaque sd_cham_no ?   AJACOT_PB
         #  - cela risque de couter cher
         #  - cela pose un problème "import circulaire" avec sd_maillage -> sd_cham_no => import ici
         from SD.sd_maillage import sd_maillage
-        sd2 = sd_maillage(lnom[0])
+        sd2 = sd_maillage(mail)
         sd2.check(checker)
 
-        if lnom[1].strip() :
-            if checker.names.has_key(lnom[1][:14]+'.NUME.PRNO'):  return
-            sd2 = sd_prof_chno(lnom[1]) ; sd2.check(checker)
-
+        if prof_chno.strip() :
+            if checker.names.has_key(prof_chno[:14]+'.NUME.PRNO'):  return
+            sd2 = sd_prof_chno(prof_chno)
+            sd2.check(checker)
 
+    def check_cham_no_DESC(self, checker):
+        if not self.exists(): return
+        if checker.names.has_key(self.DESC): return
+        
+        gd, num = self.u_desc()
+        if (num < 0):
+           nb_ec = sdu_nb_ec(gd)
+           assert self.DESC.lonmax == 2 + nb_ec
+        else:
+           assert self.DESC.lonmax == 2
+           
+        
index df8475890ee6b13ea6138a4f098032477be0b50d..892d47dd3d34052058a6de5b6a6424f6e02c0d47 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF sd_compor SD  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#@ MODIF sd_compor SD  DATE 14/12/2010   AUTEUR PROIX J-M.PROIX 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -82,15 +82,14 @@ class sd_compor(AsBase):
             famil     =cprk[5*k+0]
             mater     =cprk[5*k+1]
             ecoul     =cprk[5*k+2]
-            ecro_isot =cprk[5*k+3]
-            ecro_cine =cprk[5*k+4]
+            MONO_isot =cprk[5*k+3]
+            MONO_cine =cprk[5*k+4]
             sd2=sd_mater(mater) ; sd2.check(checker)
             assert famil in ('BASAL','BCC24','PRISMATIQUE','OCTAEDRIQUE','PYRAMIDAL1',
-                            'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','JOINT_GRAIN',
-                            'RL','UNIAXIAL')
-            assert ecoul in ('ECOU_VISC1','ECOU_VISC2','ECOU_VISC3')
-            assert ecro_isot in ('ECRO_ISOT1','ECRO_ISOT2')
-            assert ecro_cine in ('ECRO_CINE1','ECRO_CINE2')
+                            'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','UNIAXIAL')
+            assert ecoul in ('MONO_VISC1','MONO_VISC2','MONO_VISC3')
+            assert MONO_isot in ('MONO_ISOT1','MONO_ISOT2')
+            assert MONO_cine in ('MONO_CINE1','MONO_CINE2')
 
 
 
index ae9c94a925ae1e0754a2488199d4aa08690ef8a3..809a87171e2130b9dde0234a860e22ca0da9d3df 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_contact SD  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#@ MODIF sd_contact SD  DATE 19/10/2010   AUTEUR DESOZA T.DESOZA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -32,18 +32,20 @@ class sd_contact(AsBase):
     
 
     # Recap longueurs vecteurs (voir CFMMVD.F)    
-    zdime = 12
-    zpari = 25
+    zdime = 18
+    zpari = 27
     zparr = 5
     zdirn = 6
     zcmdf = 6
-    zcmcf = 27
-    zcmxf = 16
-    zexcl = 6
-    ztypn = 1
+    zcmcf = 29
+    zcmxf = 18
+    zexcl = 3
+    ztypn = 2
     ztypm = 2 
     zmaes = 6 
-    zmesx = 5        
+    zmesx = 5  
+    zmeth = 23   
+    ztole = 3   
 
     MODELE = AsVK8(SDNom(nomj='.CHME.MODEL.NOMO'),lonmax=1, )
     PARACI = AsVI (SDNom(nomj='.CONTACT.PARACI') ,lonmax=zpari,)
@@ -76,24 +78,22 @@ class sd_contact(AsBase):
         nsuco  = para[2]
         nmaco  = para[3]
         nnoco  = para[4]
-        nmano  = para[5]
-        nnoma  = para[6]
-        ntnoe  = para[8]
-        ntmae  = para[9]
-        ntpc   = para[10] 
-        ntelno = para[11]
-      return nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno
+        ntnoe  = para[7]
+        ntmae  = para[8]
+        ntpt   = para[15] 
+        ntelno = para[17]
+      return nzoco,nsuco,nmaco,nnoco,ntnoe,ntmae,ntpt,ntelno
 
     
     def check_para(self,checker):
       iform = self.type_form()
       if (iform==1) or (iform==2) or (iform==3) :
-        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno  = self.dimeC()
+        nzoco,nsuco,nmaco,nnoco,ntnoe,ntmae,ntpt,ntelno  = self.dimeC()
         lldime = self.NDIMCO.lonmax 
         llmeth = self.METHCO.lonmax
         lltole = self.TOLECO.lonmax
-        assert llmeth == nzoco*10 
-        assert lltole == nzoco*2
+        assert llmeth == nzoco*self.zmeth 
+        assert lltole == nzoco*self.ztole
         assert lldime == self.zdime
       if (iform==4) :
         lldime = self.NDIMCU.lonmax 
@@ -114,7 +114,6 @@ class sd_contact(AsBase):
     CONTMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAILCO') ))
     CONTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOEUCO') ))
     
-    NOZOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOZOCO') ))  
     MANOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.MANOCO') ))
     NOMACO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOMACO') ))
     
@@ -135,7 +134,7 @@ class sd_contact(AsBase):
     def check_mail(self,checker):    
       iform = self.type_form()
       if (iform==2) or (iform==1) :
-        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        nzoco,nsuco,nmaco,nnoco,ntnoe,ntmae,ntpt,ntelno = self.dimeC()
         assert self.JEUFO1.lonmax == nzoco
         assert self.JEUFO2.lonmax == nzoco
         assert self.DIRAPP.lonmax == 3*nzoco
@@ -148,10 +147,6 @@ class sd_contact(AsBase):
         assert self.PSURNO.lonmax == nsuco+1        
         assert self.CONTMA.lonuti == nmaco
         assert self.CONTNO.lonuti == nnoco
-        
-        assert self.NOZOCO.lonmax == nnoco
-        assert self.MANOCO.lonuti == nmano
-        assert self.NOMACO.lonuti == nnoma
 
         assert self.MANOCO.lonmax == 20*max(nnoco,nmaco)
         assert self.NOMACO.lonmax == 20*max(nnoco,nmaco) 
@@ -173,9 +168,9 @@ class sd_contact(AsBase):
     def check_form_disc(self,checker):    
       iform = self.type_form()
       if (iform==1) :
-        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        nzoco,nsuco,nmaco,nnoco,ntnoe,ntmae,ntpt,ntelno = self.dimeC()
         assert self.CARADF.lonmax == self.zcmdf*nzoco
-        assert ntnoe == ntpc
+        assert ntnoe == ntpt
       return      
     
     CARACF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARACF') ))  
@@ -196,7 +191,7 @@ class sd_contact(AsBase):
     def check_form_cont(self,checker):
       iform = self.type_form()
       if (iform==2) :
-        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        nzoco,nsuco,nmaco,nnoco,ntnoe,ntmae,ntpt,ntelno = self.dimeC()
         assert self.CARACF.lonmax == self.zcmcf*nzoco
         assert self.EXCLFR.lonmax == self.zexcl*nzoco       
         
@@ -235,7 +230,7 @@ class sd_contact(AsBase):
     def check_form_xfem(self,checker):
       iform = self.type_form()
       if (iform==3) :
-        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        nzoco,nsuco,nmaco,nnoco,ntnoe,ntmae,ntpt,ntelno = self.dimeC()
         paraci = self.PARACI.get()
         if (paraci[0]!=0) :
           assert self.MAESCX.lonuti == self.zmesx*ntmae      
index 340ca74f21201c1d8a6a28dd4d17195ea7a2e04f..400182eda9f465d376a4426f737406a735842328 100644 (file)
@@ -1,26 +1,28 @@
-#@ MODIF sd_corresp_2_mailla SD  DATE 02/02/2010   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_corresp_2_mailla SD  DATE 08/03/2011   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 from SD import *
+from SD.sd_titre import sd_titre
 
-class sd_corresp_2_mailla(AsBase):
+
+class sd_corresp_2_mailla(sd_titre):
     nomj = SDNom(fin=16)
     PJXX_K1 = AsVK24(lonmax=5)
 
@@ -34,7 +36,6 @@ class sd_corresp_2_mailla(AsBase):
     PJEF_M1 = Facultatif(AsVI())
     PJEF_CF = Facultatif(AsVR())
     PJEF_TR = Facultatif(AsVI())
-    PJEF_AM = Facultatif(AsVI())
     PJEF_CO = Facultatif(AsVR())
 
     PJNG_I1 = Facultatif(AsVI())
diff --git a/Aster/Cata/cataSTA10/SD/sd_grille.py b/Aster/Cata/cataSTA10/SD/sd_grille.py
new file mode 100644 (file)
index 0000000..82f2fa7
--- /dev/null
@@ -0,0 +1,29 @@
+#@ MODIF sd_grille SD  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+#  RESPONSABLE GENIAUT S.GENIAUT
+
+from SD import *
+from SD.sd_maillage import sd_maillage
+
+class sd_grille(sd_maillage):
+     nomj = SDNom(fin=8)
+     
+     GRLR = AsVR()
+     GRLI = AsVI()
index 2ac6be121fe4fc264e8072a5a7abf1e6e5dfad8a..b1fd54a181fbe335be15ee9dbaaf266e4abceac7 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF sd_maillage SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_maillage SD  DATE 11/05/2011   AUTEUR SELLENET N.SELLENET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -68,7 +68,6 @@ class sd_maillage(sd_titre):
     VGE  = Facultatif(sd_voisinage())
 
     ADAPTATION = Facultatif(AsVI(lonmax=1, ))
-    FORM = Facultatif(AsVK32(SDNom(debut=19), lonmax=2, ))
 
 
     def u_dime(self):
index 88ed5120f844e2621b6e0a7afccfd9a00d16986d..363ae9aaad5aa745a475c0fd909d7d9b9bc48934 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_nume_ddl_gene SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_nume_ddl_gene SD  DATE 21/06/2010   AUTEUR CORUS M.CORUS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -22,12 +22,13 @@ from SD import *
 
 from SD.sd_nume_ddl_com import sd_nume_ddl_com
 from SD.sd_nume_eqge import sd_nume_eqge
-
+from SD.sd_nume_elim import sd_nume_elim
 
 class sd_nume_ddl_gene(sd_nume_ddl_com):
 #---------------------------------------
     nomj = SDNom(fin=14)
     nume = Facultatif(sd_nume_eqge(SDNom(nomj='.NUME'))) # n'existe pas toujours : CALC_MATR_AJOU/fdlv106a
+    ELIM = Facultatif(sd_nume_elim(SDNom(nomj='.ELIM'))) # n'existe pas toujours : ELIMINATION
 
 
 
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_elim.py b/Aster/Cata/cataSTA10/SD/sd_nume_elim.py
new file mode 100644 (file)
index 0000000..98bf5bc
--- /dev/null
@@ -0,0 +1,30 @@
+#@ MODIF sd_nume_elim SD  DATE 21/06/2010   AUTEUR CORUS M.CORUS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_prof_vgen import sd_prof_vgen
+class sd_nume_elim(sd_prof_vgen):
+    nomj = SDNom(fin=19)
+    BASE = AsVR(SDNom(debut=19),)
+    TAIL = AsVI(SDNom(debut=19),)
+    NOMS = AsVK8(SDNom(debut=19),)
+
+
index 2bccd8d98eeb0cf7619f38fcc5fa593372329aba..ac23f4a66c5998c8bc99c06fe6eb7edf274da9c9 100644 (file)
@@ -1,21 +1,21 @@
-#@ MODIF sd_partition SD  DATE 16/06/2009   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_partition SD  DATE 28/06/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 from SD import *
@@ -23,4 +23,7 @@ from SD import *
 class sd_partition(AsBase):
     nomj = SDNom(fin=8)
     NUPROC_MAILLE = AsVI(SDNom(nomj='.NUPROC.MAILLE'))
+    # si partition 'GROUP_ELEM' :
+    NUPROC_GREL   = Facultatif(AsVI(SDNom(nomj='.NUPROC.GREL')))
+    NUPROC_LIGREL = Facultatif(AsVK24(SDNom(nomj='.NUPROC.LIGREL'),LONMAX=1))
 
index eb8e74432b397bf7ccae2eb068396397e88e32cd..62a7126d708225359b8ebf55b1d622353e4a0275 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF sd_proj_mesu SD  DATE 15/01/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF sd_proj_mesu SD  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -53,7 +53,7 @@ class sd_proj_mesu(AsBase):
 
         # vérifications communes :
         assert self.PJMRG.lonmax >= nbutil
-        n1=self.PJMBP.lonmax
+        n1=self.PJMBP.lonuti
         nbmode=n1/nbutil
         assert n1==nbutil*nbmode , (nbmode,nbutil,n1)
         assert self.PJMRF.exists
index 922c9a585be8aadb7c4a57652ae3acc305d7623e..1b47ddd5fc28154dac0e677b01484876447949e2 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_resultat SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF sd_resultat SD  DATE 20/07/2010   AUTEUR MAHFOUZ D.MAHFOUZ 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -94,6 +94,10 @@ class sd_resultat(sd_titre):
         # les numeros d'ordre doivent etre tous différents :
         sdu_tous_differents(V,checker,V.get()[:nuti],'1:NUTI')
 
+        # les numeros d'ordre doivent etre croissants
+        if nuti > 1:
+            assert sdu_monotone(V.get()[:nuti]) in (1,)
+
 
     # vérification des longueurs des différents objets :
     def check_LONGUEURS(self, checker):
index 3d73281077d8fd030decd2255b646ffc902e1853..d3837f9e0d220d6fec63f3b787995d34de76bddc 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF sd_solveur SD  DATE 05/10/2009   AUTEUR BOITEAU O.BOITEAU 
+#@ MODIF sd_solveur SD  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -22,7 +22,7 @@ from SD import *
 
 class sd_solveur(AsBase):
     nomj = SDNom(fin=19)
-    SLVK = AsVK24(SDNom(debut=19), lonmax=11, )
+    SLVK = AsVK24(SDNom(debut=19), lonmax=12, )
     SLVR = AsVR(SDNom(debut=19), lonmax=4, )
     SLVI = AsVI(SDNom(debut=19), lonmax=7, )
 
@@ -34,7 +34,7 @@ class sd_solveur(AsBase):
         if method == 'MUMPS' :
             assert slvk[1] in ('AUTO', 'SANS'), slvk
             assert slvk[2] in ('NONSYM', 'SYMGEN', 'SYMDEF', 'AUTO'), slvk
-            assert slvk[3] in ('AMD','AMF','PORD','METIS','QAMD','AUTO'), slvk
+            assert slvk[3] in ('AMD','AMF','PORD','METIS','QAMD','AUTO','SCOTCH'), slvk
             assert slvk[4] in ('OUI', 'NON'), slvk
             assert slvk[5] in ('OUI', 'NON'), slvk
         else :
index a4f290bead492df05e87e9363317a89aaead452f..1f1c5d8cfb881be8fb396bb371556512e6db6509 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF sd_util SD  DATE 19/04/2010   AUTEUR GREFFET N.GREFFET 
+#@ MODIF sd_util SD  DATE 07/09/2010   AUTEUR DESOZA T.DESOZA 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -176,7 +176,11 @@ def sdu_licmp_gd(numgd) :
     nocmp=aster.getcolljev('&CATA.GD.NOMCMP')
     return nocmp[nomgd.ljust(8)]
 
-
+def sdu_nb_ec(numgd) :
+    # retourne le nombre d'entiers codés pour décrire les composantes de la grandeur (numgd)
+    assert numgd > 0 and numgd <1000 , numgd
+    descrigd=aster.getcolljev('&CATA.GD.DESCRIGD')
+    return descrigd[numgd-1][-1+3]
 
 #  3) Utilitaires pour la vérification de l'existence des objets :
 #  -----------------------------------------------------------------------------------------
index a4af5cdd7b0f9b5720a1d105270b496060d2a8f5..092eb78234c8831c740601b75fa5a794758739dd 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF sd_xfem SD  DATE 11/01/2010   AUTEUR COLOMBO D.COLOMBO 
+#@ MODIF sd_xfem SD  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -24,6 +24,7 @@ from SD.sd_cham_no   import sd_cham_no
 from SD.sd_cham_elem import sd_cham_elem
 from SD.sd_carte     import sd_carte
 from SD.sd_util      import *
+from SD.sd_l_table import sd_l_table
 
 
 
@@ -35,6 +36,7 @@ class sd_fiss_xfem(AsBase):
     nomj = SDNom(fin=8)
 
     INFO   = AsVK16(lonmax=2,)   # info discontinuite
+    MODELE = AsVK8(lonmax=1,)
 
 # I.1) objets relatifs aux level sets
 
@@ -47,6 +49,14 @@ class sd_fiss_xfem(AsBase):
     BASEFOND        = Facultatif(AsVR())
     FONDMULT        = Facultatif(AsVI())
     CARAFOND        = Facultatif(AsVR(lonmax=12,))
+    JONFISS = Facultatif(AsVK8())
+    JONCOEF = Facultatif(AsVI())
+#   objets relatifs a la grille auxiliaire
+    GRILLE_MODELE  = Facultatif(AsVK8(SDNom(nomj='.GRI.MODELE'),lonmax=1,))
+    GRILLE_LNNO    = Facultatif(sd_cham_no(SDNom(nomj='.GRI.LNNO')))
+    GRILLE_LTNO    = Facultatif(sd_cham_no(SDNom(nomj='.GRI.LTNO')))
+    GRILLE_GRLNNO  = Facultatif(sd_cham_no(SDNom(nomj='.GRI.GRLNNO')))
+    GRILLE_GRLTNO  = Facultatif(sd_cham_no(SDNom(nomj='.GRI.GRLTNO')))
 
 # I.2) objets relatifs a l'enrichissement
 
@@ -59,15 +69,14 @@ class sd_fiss_xfem(AsBase):
     MAILFISS_HEAV  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .HEAV')))
     MAILFISS_HECT  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .HECT')))
     MAILFISS_INDIC = AsVI(SDNom(nomj='.MAILFISS .INDIC'), lonmax=6, )
-    LISNOH         = Facultatif(AsVI())
 
 # I.3) objets relatifs a la propagation
 
     PRO_MES_EL  = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.MES_EL')))
     PRO_NORMAL  = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.NORMAL')))
+#   objets relatifs a la localisation du domaine de calcul
     PRO_RAYON_TORE  = Facultatif(AsVR(SDNom(nomj='.PRO.RAYON_TORE'),lonmax=1,))
     PRO_NOEUD_TORE  = Facultatif(AsVL(SDNom(nomj='.PRO.NOEUD_TORE')))
-    PRO_MOD_GRILLE  = Facultatif(AsVK8(SDNom(nomj='.PRO.MOD_GRILLE'),lonmax=1,))
 
 # I.4) objets relatifs au contact
 
@@ -75,8 +84,10 @@ class sd_fiss_xfem(AsBase):
     LISCO  = Facultatif(AsVR(SDNom(nomj='.LISCO')))
     LISEQ  = Facultatif(AsVI(SDNom(nomj='.LISEQ')))
     LISRL  = Facultatif(AsVI(SDNom(nomj='.LISRL')))
-    LISUP  = Facultatif(AsVI(SDNom(nomj='.LISUP')))    
 
+# I.4) objets relatifs au contact
+    # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs caractéristiques de l'étude :
+    lt = Facultatif(sd_l_table(SDNom(nomj='')))
 
 # 1.5) verifications d'existence :
 
@@ -85,7 +96,8 @@ class sd_fiss_xfem(AsBase):
         sdu_ensemble((self.LISRL, self.LISCO))
         sdu_ensemble((self.PRO_MES_EL.CELD, self.PRO_NORMAL.CELD))
         sdu_ensemble((self.PRO_RAYON_TORE, self.PRO_NOEUD_TORE))
-
+        sdu_ensemble((self.GRILLE_MODELE, self.GRILLE_LNNO.DESC, self.GRILLE_GRLNNO.DESC))
+        sdu_ensemble((self.GRILLE_LTNO.DESC, self.GRILLE_GRLTNO.DESC))
 
 #-------------------------------
 #       II. sd modele
@@ -101,7 +113,9 @@ class sd_modele_xfem(AsBase):
     TOPOSE_HEA  = sd_cham_elem(SDNom(nomj='.TOPOSE.HEA'))
     TOPOSE_LON  = sd_cham_elem(SDNom(nomj='.TOPOSE.LON'))
     TOPOSE_AIN  = sd_cham_elem(SDNom(nomj='.TOPOSE.AIN'))
+    TOPOSE_PMI  = sd_cham_elem(SDNom(nomj='.TOPOSE.PMI'))
     TOPOSE_CRI  = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.CRI')))
+    
 
 # II.2) objets relatifs aux facettes de contact
 
@@ -118,10 +132,13 @@ class sd_modele_xfem(AsBase):
 
 # II.3) objets concatenes relatifs aux level sets
 
-    LNNO   = sd_cham_no()
-    LTNO   = sd_cham_no()
-    BASLOC = sd_cham_no()
-    STNO   = sd_cham_no()
+    LNNO   = sd_cham_elem(SDNom(nomj='.LNNO'))
+    LTNO   = sd_cham_elem(SDNom(nomj='.LTNO'))
+    BASLOC = sd_cham_elem(SDNom(nomj='.BASLOC'))
+    STNO   = sd_cham_elem(SDNom(nomj='.STNO'))
+    FISSNO = sd_cham_elem(SDNom(nomj='.FISSNO'))
+    NOXFEM = sd_cham_no()
+    LISNOH = Facultatif(AsVI())
 
 # II.4) autres objets
 
index 5c9668fff0473c267d5ee317da8f5399b4b790ce..7271c21eb66691c5a34ce3e0847467aaf46445c3 100644 (file)
@@ -23,7 +23,7 @@
    Utilitaire sur le catalogue des structures de données.
 """
 
-__revision__ = "$Id: utilsd.py,v 1.1.2.2 2010-06-03 09:16:27 pnoyret Exp $"
+__revision__ = "$Id: utilsd.py,v 1.2.4.2.2.1 2011-05-13 14:43:07 barate Exp $"
 
 import sys
 import os
diff --git a/Aster/Cata/cataSTA10/Utilitai/Graph.py b/Aster/Cata/cataSTA10/Utilitai/Graph.py
new file mode 100644 (file)
index 0000000..23127b1
--- /dev/null
@@ -0,0 +1,1200 @@
+#@ MODIF Graph Utilitai  DATE 26/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE COURTOIS M.COURTOIS
+__all__ = ['Graph', 'AjoutParaCourbe']
+
+import sys
+import os
+import os.path
+import string
+import re
+import types
+import time
+import numpy
+
+from Utilitai.Utmess import UTMESS
+
+# try/except pour utiliser hors aster
+try:
+   import aster
+except ImportError:
+   class fake_aster:
+      def repout(self): return '/opt/aster/outils'
+   aster=fake_aster()
+
+
+if not sys.modules.has_key('Table'):
+   try:
+      from Utilitai import Table
+   except ImportError:
+      import Table
+   
+
+# ------------------------------------------------------------------------------
+class Graph:
+   """Cette classe définit l'objet Graph pour Code_Aster.
+   
+   Important :  Utiliser les méthodes dédiées à la manipulation des données
+      (AjoutCourbe, ...) car elles tiennent à jour les attributs "privés"
+      relatifs aux données : NbCourbe, les extrema...
+   
+   Attributs :
+   - Données de chaque courbe :
+      .Valeurs   : liste des valeurs de chaque courbe, pour chaque courbe :
+         (paramètres, parties réelles [, parties imaginaires])
+      .Legendes  : liste des noms de chaque courbe
+      .Labels    : liste des noms des colonnes de chaque courbe
+      .Styles    : liste des infices de styles de ligne
+      .Couleurs  : liste des indices de couleurs
+      .Marqueurs : liste des indices de symboles/marqueurs
+      .FreqMarq  : liste des fréquences des marqueurs
+      .Tri       : liste du tri à effectuer sur les données ('N', 'X', 'Y',
+         'XY' ou 'YX')
+     Pour Lignes, Couleurs, Marqueurs, FreqMarq, -1 signifie valeur par défaut
+     du traceur.
+
+   - Propriétés :
+      .Titre : titre du graphique
+      .SousTitre : sous-titre (appelé commentaire dans agraf)
+   - Axes :
+      .Min_X, .Max_X, .Min_Y, .Max_Y : bornes du tracé (une méthode permet de
+         renseigner automatiquement ces valeurs avec les extréma globaux)
+      .Legende_X, .Legende_Y : légende des axes
+      .Echelle_X, .Echelle_Y : type d'échelle (LIN, LOG)
+      .Grille_X, .Grille_Y : paramètre de la grille (pas ou fréquence au choix
+         de l'utilisateur en fonction du traceur qu'il veut utiliser)
+
+   Attributs privés (modifiés uniquement par les méthodes de la classe) :
+      .NbCourbe : nombre de courbes
+      .BBXmin, BBXmax, BBYmin, BBYmax : extrema globaux (bounding box)
+      .LastTraceArgs, LastTraceFormat : données utilisées lors du dernier tracé
+   """
+# ------------------------------------------------------------------------------
+   def __init__(self):
+      """Construction + valeurs par défaut des attributs
+      """
+      self.Valeurs   = []
+      self.Legendes  = []
+      self.Labels    = []
+      self.Styles    = []
+      self.Couleurs  = []
+      self.Marqueurs = []
+      self.FreqMarq  = []
+      self.Tri       = []
+      self.Titre     = ''
+      self.SousTitre = ''
+      self.Min_X     = None
+      self.Max_X     = None
+      self.Min_Y     = None
+      self.Max_Y     = None
+      self.MinP_X    =  1.e+99   # minimum > 0 pour les échelles LOG
+      self.MinP_Y    =  1.e+99
+      self.Legende_X = ''
+      self.Legende_Y = ''
+      self.Echelle_X = 'LIN'
+      self.Echelle_Y = 'LIN'
+      self.Grille_X  = -1
+      self.Grille_Y  = -1
+      # attributs que l'utilisateur ne doit pas modifier
+      self.NbCourbe  = len(self.Valeurs)
+      self.BBXmin    =  1.e+99
+      self.BBXmax    = -1.e+99
+      self.BBYmin    =  1.e+99
+      self.BBYmax    = -1.e+99
+      # pour conserver les paramètres du dernier tracé
+      self.LastTraceArgs = {}
+      self.LastTraceFormat = ''
+
+# ------------------------------------------------------------------------------
+   def SetExtremaX(self,marge=0., x0=None, x1=None, force=True):
+      """Remplit les limites du tracé (Min/Max_X) avec les valeurs de la
+      bounding box +/- avec une 'marge'*(Max-Min)/2.
+      x0,x1 permettent de modifier la bb.
+      """
+      if x0<>None:   self.BBXmin=min([self.BBXmin, x0])
+      if x1<>None:   self.BBXmax=max([self.BBXmax, x1])
+
+      dx=max(self.BBXmax-self.BBXmin,0.01*self.BBXmax)
+      if dx == 0.:
+         dx = 1.e-6
+      if force or self.Min_X==None:
+         self.Min_X = self.BBXmin - marge*dx/2.
+      if force or self.Max_X==None:
+         self.Max_X = self.BBXmax + marge*dx/2.
+      return
+
+   def SetExtremaY(self,marge=0., y0=None, y1=None, force=True):
+      """Remplit les limites du tracé (Min/Max_Y) avec les valeurs de la
+      bounding box +/- avec une 'marge'*(Max-Min)/2.
+      y0,y1 permettent de modifier la bb.
+      """
+      if y0<>None:   self.BBYmin=min([self.BBYmin, y0])
+      if y1<>None:   self.BBYmax=max([self.BBYmax, y1])
+
+      dy=max(self.BBYmax-self.BBYmin,0.01*self.BBYmax)
+      if dy == 0.:
+         dy = 1.e-6
+      if force or self.Min_Y==None:
+         self.Min_Y = self.BBYmin - marge*dy/2.
+      if force or self.Max_Y==None:
+         self.Max_Y = self.BBYmax + marge*dy/2.
+      return
+
+   def SetExtrema(self,marge=0., x0=None, x1=None, y0=None, y1=None, force=True):
+      """Remplit les limites du tracé (Min/Max_X/Y) avec les valeurs de la
+      bounding box +/- avec une 'marge'*(Max-Min)/2.
+      x0,x1,y0,y1 permettent de modifier la bb.
+      """
+      self.SetExtremaX(marge, x0, x1, force=force)
+      self.SetExtremaY(marge, y0, y1, force=force)
+      return
+# ------------------------------------------------------------------------------
+   def AutoBB(self,debut=-1):
+      """Met à jour automatiquement la "bounding box"
+      (extrema toutes courbes confondues)
+      Appelé par les méthodes de manipulation des données
+      """
+      if debut == -1:
+         debut=self.NbCourbe-1
+      if debut == 0:
+         X0 =  1.e+99
+         X1 = -1.e+99
+         Y0 =  1.e+99
+         Y1 = -1.e+99
+      else:
+         X0 = self.BBXmin
+         X1 = self.BBXmax
+         Y0 = self.BBYmin
+         Y1 = self.BBYmax
+      
+      for i in range(debut,self.NbCourbe):
+         X0 = min([X0,]+list(self.Valeurs[i][0]))
+         X1 = max([X1,]+list(self.Valeurs[i][0]))
+         self.MinP_X = min([self.MinP_X,]+[x for x \
+                  in list(self.Valeurs[i][0]) if x>0])
+         for ny in range(1,len(self.Valeurs[i])):
+            Y0 = min([Y0,]+list(self.Valeurs[i][ny]))
+            Y1 = max([Y1,]+list(self.Valeurs[i][ny]))
+            self.MinP_Y = min([self.MinP_Y,]+[y for y \
+                  in list(self.Valeurs[i][ny]) if y>0])
+      self.BBXmin = X0
+      self.BBXmax = X1
+      self.BBYmin = Y0
+      self.BBYmax = Y1
+      return
+# ------------------------------------------------------------------------------
+   def AjoutCourbe(self,Val,Lab,Leg='',Sty=-1,Coul=-1,Marq=-1,FreqM=-1,Tri='N'):
+      """Ajoute une courbe dans les données
+         Val   : liste de 2 listes (ou 3 si complexe) : abs, ord[, imag]
+         Leg   : une chaine
+         Lab   : liste de 2 chaines (ou 3 si complexe)
+         Sty   : un entier
+         Coul  : un entier
+         Marq  : un entier
+         FreqM : un entier
+         Tri   : chaine de caractères : N, X, Y, XY ou YX
+      Met à jour les attributs : NbCourbe, BBXmin/Xmax/Ymin/Ymax
+      """
+      nbc = len(Val)   # nombre de colonnes : 2 ou 3
+      
+      # verifications : "if not (conditions requises)"
+      if not ( 2 <= nbc <= 3 and \
+         type(Val[0]) in (types.ListType, types.TupleType) and \
+         type(Val[1]) in (types.ListType, types.TupleType) and \
+         (nbc==2 or type(Val[2]) in (types.ListType, types.TupleType)) and \
+         len(Val[0]) == len(Val[1]) and (nbc==2 or len(Val[0]) == len(Val[2])) ):
+            UTMESS('F','GRAPH0_1')
+      
+      if len(Lab) <> nbc:
+            UTMESS('S','GRAPH0_2')
+            
+      # ajout dans les données
+      self.Legendes.append(str(Leg))
+      self.Labels.append([str(L) for L in Lab])
+      self.Valeurs.append(Val)
+      self.Styles.append(Sty)
+      self.Couleurs.append(Coul)
+      self.Marqueurs.append(Marq)
+      self.FreqMarq.append(FreqM)
+      self.Tri.append(Tri)
+
+      self.NbCourbe = self.NbCourbe + 1
+      self.AutoBB()
+      return
+# ------------------------------------------------------------------------------
+   def Courbe(self,n):
+      """Permet de récupérer les données de la courbe d'indice n sous forme
+      d'un dictionnaire.
+      """
+      dico={
+         'Leg'    : self.Legendes[n],           # légende de la courbe
+         'LabAbs' : self.Labels[n][0],          # labels des abscisses
+         'LabOrd' : [self.Labels[n][1],],       # labels des ordonnées
+         'NbCol'  : len(self.Valeurs[n]),       # nombre de colonnes
+         'NbPts'  : len(self.Valeurs[n][0]),    # nombre de points
+         'Abs'    : self.Valeurs[n][0],         # liste des abscisses
+         'Ord'    : [self.Valeurs[n][1],],      # liste des ordonnées
+         'Sty'    : self.Styles[n],             # style de la ligne
+         'Coul'   : self.Couleurs[n],           # couleur
+         'Marq'   : self.Marqueurs[n],          # marqueur
+         'FreqM'  : self.FreqMarq[n],           # fréquence du marqueur
+         'Tri'    : self.Tri[n],                # ordre de tri des données
+      }
+      if(dico['NbCol'] == 3):
+         dico['LabOrd'].append(self.Labels[n][2]) # labels de la partie imaginaire
+         dico['Ord'].append(self.Valeurs[n][2])   # liste des ordonnées partie imaginaire
+      return dico
+# ------------------------------------------------------------------------------
+   def Trace(self,FICHIER=None,FORMAT=None,dform=None,**opts):
+      """Tracé du Graph selon le format spécifié.
+         FICHIER : nom du(des) fichier(s). Si None, on dirige vers stdout
+         dform : dictionnaire de formats d'impression (format des réels,
+            commentaires, saut de ligne...)
+         opts  : voir TraceGraph.
+      """
+      para={
+         'TABLEAU' : { 'mode' : 'a', 'driver' : TraceTableau, },
+         'XMGRACE' : { 'mode' : 'a', 'driver' : TraceXmgrace, },
+         'AGRAF'   : { 'mode' : 'a', 'driver' : TraceAgraf,   },
+      }
+      kargs={}
+      if self.LastTraceArgs=={}:
+         kargs['FICHIER']=FICHIER
+         kargs['dform']=dform
+         kargs['opts']=opts
+      else:
+         kargs=self.LastTraceArgs.copy()
+         if FORMAT==None:
+            FORMAT=self.LastTraceFormat
+         if FICHIER<>None:
+            kargs['FICHIER']=FICHIER
+         if dform<>None:
+            kargs['dform']=dform
+         if opts<>{}:
+            kargs['opts']=opts
+      if not FORMAT in para.keys():
+         UTMESS('A', 'GRAPH0_3', valk=FORMAT)
+      else:
+         kargs['fmod']=para[FORMAT]['mode']
+         self.LastTraceArgs   = kargs.copy()
+         self.LastTraceFormat = FORMAT
+         # call the associated driver
+         para[FORMAT]['driver'](self,**kargs)
+# ------------------------------------------------------------------------------
+   def __repr__(self):
+      """Affichage du contenu d'un Graph"""
+      srep=''
+      for attr in ['NbCourbe','Legendes','Labels','Valeurs','Min_X','Max_X','Min_Y','Max_Y','BBXmax','BBXmin','BBYmax','BBYmin','Legende_X','Legende_Y','Echelle_X','Echelle_Y','Grille_X','Grille_Y','Tri']:
+         srep=srep + '%-10s : %s\n' % (attr,str(getattr(self,attr)))
+      return srep
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class TraceGraph:
+   """
+   Cette classe définit le tracé d'un objet Graph dans un fichier.
+   
+   Attributs :
+      .NomFich : liste de noms de fichier de sortie
+
+   Attributs privés (modifiés uniquement par les méthodes de la classe) :
+      .Fich    : liste des objets 'fichier'
+      .Graph   : objet Graph que l'on veut tracer
+      .DicForm : dictionnaire des formats de base (séparateur, format des réels...)
+   
+   Les méthodes Entete, DescrCourbe, Trace (définition de l'entete, partie descriptive
+   d'une courbe, méthode de tracé/impression) sont définies dans une classe dérivée.
+   """
+# ------------------------------------------------------------------------------
+   def __init__(self,graph,FICHIER,fmod='w',dform=None,opts={}):
+      """Construction, ouverture du fichier, surcharge éventuelle du formatage
+      (dform), mode d'ouverture du fichier (fmod).
+      opts  : dictionnaire dont les valeurs seront affectées comme attributs
+         de l'objet (A utiliser pour les propriétés spécifiques
+         à un format, exemple 'PILOTE' pour Xmgrace).
+      """
+      # attributs optionnels (au début pour éviter un écrasement maladroit !)
+      for k,v in opts.items():
+         setattr(self,k,v)
+
+      # Ouverture du(des) fichier(s)
+      self.NomFich=[]
+      if type(FICHIER) is types.StringType:
+         self.NomFich.append(FICHIER)
+      elif type(FICHIER) in (types.ListType, types.TupleType):
+         self.NomFich=FICHIER[:]
+      else:
+         # dans ce cas, on écrira sur stdout (augmenter le 2 éventuellement)
+         self.NomFich=[None]*2
+      self.Fich=[]
+      for ff in self.NomFich:
+         if ff<>None:
+            self.Fich.append(open(ff,fmod))
+         else:
+            self.Fich.append(sys.stdout)
+      
+      # objet Graph sous-jacent
+      self.Graph=graph
+      # si Min/Max incohérents
+      if graph.Min_X==None or graph.Max_X==None or graph.Min_X > graph.Max_X:
+         graph.SetExtremaX(marge=0.05, force=True)
+      if graph.Min_Y==None or graph.Max_Y==None or graph.Min_Y > graph.Max_Y:
+         graph.SetExtremaY(marge=0.05, force=True)
+
+      if graph.Echelle_X=='LOG':
+         graph.Grille_X=10
+         # verif si Min<0 à cause de la marge
+         if graph.Min_X < 0.:
+            if graph.BBXmin < 0.:
+               UTMESS('A', 'GRAPH0_4')
+            graph.Min_X=graph.MinP_X
+      if graph.Echelle_Y=='LOG':
+         graph.Grille_Y=10
+         if graph.Min_Y < 0.:
+            if graph.BBYmin < 0.:
+               UTMESS('A', 'GRAPH0_5')
+            graph.Min_Y=graph.MinP_Y
+      
+      # formats de base (identiques à ceux du module Table)
+      self.DicForm={
+         'csep'   : ' ',       # séparateur
+         'ccom'   : '#',       # commentaire
+         'ccpara' : '',        # commentaire des labels
+         'cdeb'   : '',        # début de ligne
+         'cfin'   : '\n',      # fin de ligne
+         'sepch'  : ';',       # remplace les sauts de ligne à l'intérieur d'une cellule
+         'formK'  : '%-12s',   # chaines
+         'formR'  : '%12.5E',  # réels
+         'formI'  : '%12d'     # entiers
+      }
+      if dform<>None and type(dform)==types.DictType:
+         self.DicForm.update(dform)
+      
+      # let's go
+      self.Trace()
+
+# ------------------------------------------------------------------------------
+   def __del__(self):
+      """Fermeture du(des) fichier(s) à la destruction"""
+      if hasattr(self,'Fich'):
+         self._FermFich()
+# ------------------------------------------------------------------------------
+   def _FermFich(self):
+      """Fermeture du(des) fichier(s)"""
+      for fp in self.Fich:
+         if fp<>sys.stdout:
+            fp.close()
+# ------------------------------------------------------------------------------
+   def _OuvrFich(self):
+      """Les fichiers sont ouverts par le constructeur. S'ils ont été fermés,
+      par un appel au Tracé, _OuvrFich ouvre de nouveau les fichiers dans le
+      meme mode"""
+      n=len(self.NomFich)
+      for i in range(n):
+         if self.Fich[i].closed:
+            self.Fich[i]=open(self.NomFich[i],self.Fich[i].mode)
+
+# ------------------------------------------------------------------------------
+   def Entete(self):
+      """Retourne l'entete"""
+      raise NotImplementedError, "Cette méthode doit etre définie par la classe fille."
+# ------------------------------------------------------------------------------
+   def DescrCourbe(self,**args):
+      """Retourne la chaine de caractères décrivant les paramètres de la courbe.
+      """
+      raise NotImplementedError, "Cette méthode doit etre définie par la classe fille."
+# ------------------------------------------------------------------------------
+   def Trace(self):
+      """Méthode pour 'tracer' l'objet Graph dans un fichier.
+      Met en page l'entete, la description des courbes et les valeurs selon
+      le format et ferme le fichier.
+      """
+      raise NotImplementedError, "Cette méthode doit etre définie par la classe fille."
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class TraceTableau(TraceGraph):
+   """
+   Impression d'un objet Graph sous forme d'un tableau de colonnes,
+   on suppose que les courbes partagent la meme liste d'abscisse à 'EPSILON'
+   près, sinon on alarme.
+   """
+   EPSILON=1.e-4
+# ------------------------------------------------------------------------------
+   def Trace(self):
+      """Méthode pour 'tracer' l'objet Graph dans un fichier.
+      Met en page l'entete, la description des courbes et les valeurs selon
+      le format et ferme le fichier.
+      L'ouverture et la fermeture du fichier sont gérées par l'objet Table.
+      """
+      g=self.Graph
+      msg=[]
+      if g.NbCourbe > 0:
+         # validité des données (abscisses identiques)
+         t0=numpy.array(g.Courbe(0)['Abs'])
+         max0=max(abs(t0))
+         for i in range(1,g.NbCourbe):
+            if g.Courbe(i)['NbPts']<>g.Courbe(0)['NbPts']:
+               msg.append("La courbe %d n'a pas le meme " \
+                     "nombre de points que la 1ère." % i)
+            else:
+               ti=numpy.array(g.Courbe(i)['Abs'])
+               if max(abs((ti-t0).ravel())) > self.EPSILON*max0:
+                  msg.append("Courbe %d : écart entre les "\
+                        "abscisses supérieur à %9.2E" % (i+1,self.EPSILON))
+                  msg.append("     Utilisez IMPR_FONCTION pour interpoler " \
+                        "les valeurs sur la première liste d'abscisses.")
+         # objet Table
+         Tab=Table.Table()
+         # titre / sous-titre
+         tit=[]
+         tit.append(self.DicForm['ccom']+' '+g.Titre)
+         tit.append(self.DicForm['ccom']+' '+g.SousTitre)
+         # legendes
+         for i in range(g.NbCourbe):
+            tit.append(self.DicForm['ccom']+' Courbe '+str(i))
+            tit.extend([self.DicForm['ccom']+' '+leg for leg in g.Legendes[i].split(os.linesep)])
+         Tab.titr=self.DicForm['cfin'].join(tit)
+         # noms des paramètres/colonnes
+         Tab.para.append(g.Labels[0][0])
+         for i in range(g.NbCourbe):
+            for lab in g.Labels[i][1:]:
+               Tab.para.append(lab)
+         # types
+         Tab.type=['R']*len(Tab.para)
+         # lignes de la Table
+         dC0=g.Courbe(0)
+         for j in range(dC0['NbPts']):
+            row={}
+            row[dC0['LabAbs']]=dC0['Abs'][j]
+            for i in range(g.NbCourbe):
+               dCi=g.Courbe(i)
+               for k in range(dCi['NbCol']-1):
+                  try:
+                     row[dCi['LabOrd'][k]]=dCi['Ord'][k][j]
+                  except IndexError:
+                     row[dCi['LabOrd'][k]]=None
+            Tab.append(row)
+         Tab.Impr(FICHIER=self.NomFich[0], FORMAT='TABLEAU', dform=self.DicForm)
+         # erreurs ?
+         if msg:
+            UTMESS('A', 'GRAPH0_6', valk='\n'.join(msg))
+      return
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class TraceXmgrace(TraceGraph):
+   """
+   Impression d'un objet Graph au format XMGRACE.
+   Attribut supplémentaire : .PILOTE
+   """
+   PILOTE=''
+# ------------------------------------------------------------------------------
+   def Entete(self):
+      """Retourne l'entete du fichier .agr correspondant à la mise en forme
+      """
+      dic_ech={ 'LIN' : 'Normal', 'LOG' : 'Logarithmic' }
+      g=self.Graph
+      entete=[]
+      entete.append("""
+# Grace project file
+#
+@version 50100
+@page size 842, 595
+@page scroll 5%
+@page inout 5%
+@link page off
+@map font 0 to "Times-Roman", "Times-Roman"
+@map font 1 to "Times-Italic", "Times-Italic"
+@map font 2 to "Times-Bold", "Times-Bold"
+@map font 3 to "Times-BoldItalic", "Times-BoldItalic"
+@map font 4 to "Helvetica", "Helvetica"
+@map font 5 to "Helvetica-Oblique", "Helvetica-Oblique"
+@map font 6 to "Helvetica-Bold", "Helvetica-Bold"
+@map font 7 to "Helvetica-BoldOblique", "Helvetica-BoldOblique"
+@map font 8 to "Courier", "Courier"
+@map font 9 to "Courier-Oblique", "Courier-Oblique"
+@map font 10 to "Courier-Bold", "Courier-Bold"
+@map font 11 to "Courier-BoldOblique", "Courier-BoldOblique"
+@map font 12 to "Symbol", "Symbol"
+@map font 13 to "ZapfDingbats", "ZapfDingbats"
+@map color 0 to (255, 255, 255), "white"
+@map color 1 to (0, 0, 0), "black"
+@map color 2 to (255, 0, 0), "red"
+@map color 3 to (0, 255, 0), "green"
+@map color 4 to (0, 0, 255), "blue"
+@map color 5 to (255, 255, 0), "yellow"
+@map color 6 to (188, 143, 143), "brown"
+@map color 7 to (220, 220, 220), "grey"
+@map color 8 to (148, 0, 211), "violet"
+@map color 9 to (0, 255, 255), "cyan"
+@map color 10 to (255, 0, 255), "magenta"
+@map color 11 to (255, 165, 0), "orange"
+@map color 12 to (114, 33, 188), "indigo"
+@map color 13 to (103, 7, 72), "maroon"
+@map color 14 to (64, 224, 208), "turquoise"
+@map color 15 to (0, 139, 0), "green4"
+@reference date 0
+@date wrap off
+@date wrap year 1950
+@timestamp off
+@default linewidth 1.0
+@default linestyle 1
+@default color 1
+@default pattern 1
+@default font 0
+@default char size 1.000000
+@default symbol size 1.000000
+@default sformat "%.8g"
+@background color 0
+@page background fill on
+@r0 off
+@link r0 to g0
+@r0 type above
+@r0 linestyle 1
+@r0 linewidth 1.0
+@r0 color 1
+@r0 line 0, 0, 0, 0
+@r1 off
+@link r1 to g0
+@r1 type above
+@r1 linestyle 1
+@r1 linewidth 1.0
+@r1 color 1
+@r1 line 0, 0, 0, 0
+@r2 off
+@link r2 to g0
+@r2 type above
+@r2 linestyle 1
+@r2 linewidth 1.0
+@r2 color 1
+@r2 line 0, 0, 0, 0
+@r3 off
+@link r3 to g0
+@r3 type above
+@r3 linestyle 1
+@r3 linewidth 1.0
+@r3 color 1
+@r3 line 0, 0, 0, 0
+@r4 off
+@link r4 to g0
+@r4 type above
+@r4 linestyle 1
+@r4 linewidth 1.0
+@r4 color 1
+@r4 line 0, 0, 0, 0
+@g0 on
+@g0 hidden false
+@g0 type XY
+@g0 stacked false
+@g0 bar hgap 0.000000
+@with g0
+@    stack world 0, 0, 0, 0
+@    znorm 1
+@    view xmin 0.150000
+@    view xmax 1.150000
+@    view ymin 0.150000
+@    view ymax 0.850000
+@    title font 0
+@    title size 1.500000
+@    title color 1
+@    subtitle font 0
+@    subtitle size 1.000000
+@    subtitle color 1
+@    xaxes invert off
+@    yaxes invert off
+@    xaxis  on
+@    xaxis  type zero false
+@    xaxis  offset 0.000000 , 0.000000
+@    xaxis  bar on
+@    xaxis  bar color 1
+@    xaxis  bar linestyle 1
+@    xaxis  bar linewidth 1.0
+@    xaxis  label layout para
+@    xaxis  label place auto
+@    xaxis  label char size 1.000000
+@    xaxis  label font 0
+@    xaxis  label color 1
+@    xaxis  label place normal
+@    xaxis  tick on
+@    xaxis  tick minor ticks 1
+@    xaxis  tick default 6
+@    xaxis  tick place rounded true
+@    xaxis  tick in
+@    xaxis  tick major size 1.000000
+@    xaxis  tick major color 1
+@    xaxis  tick major linewidth 1.0
+@    xaxis  tick major linestyle 2
+@    xaxis  tick major grid on
+@    xaxis  tick minor color 1
+@    xaxis  tick minor linewidth 1.0
+@    xaxis  tick minor linestyle 2
+@    xaxis  tick minor grid off
+@    xaxis  tick minor size 0.500000
+@    xaxis  ticklabel on
+@    xaxis  ticklabel format general
+@    xaxis  ticklabel prec 5
+@    xaxis  ticklabel angle 0
+@    xaxis  ticklabel skip 0
+@    xaxis  ticklabel stagger 0
+@    xaxis  ticklabel place normal
+@    xaxis  ticklabel offset auto
+@    xaxis  ticklabel offset 0.000000 , 0.010000
+@    xaxis  ticklabel start type auto
+@    xaxis  ticklabel start 0.000000
+@    xaxis  ticklabel stop type auto
+@    xaxis  ticklabel stop 0.000000
+@    xaxis  ticklabel char size 0.800000
+@    xaxis  ticklabel font 0
+@    xaxis  ticklabel color 1
+@    xaxis  ticklabel formula ""
+@    xaxis  ticklabel append ""
+@    xaxis  ticklabel prepend ""
+@    xaxis  tick place both
+@    xaxis  tick spec type none
+@    yaxis  on
+@    yaxis  type zero false
+@    yaxis  offset 0.000000 , 0.000000
+@    yaxis  bar on
+@    yaxis  bar color 1
+@    yaxis  bar linestyle 1
+@    yaxis  bar linewidth 1.0
+@    yaxis  label layout para
+@    yaxis  label place auto
+@    yaxis  label char size 1.000000
+@    yaxis  label font 0
+@    yaxis  label color 1
+@    yaxis  label place normal
+@    yaxis  tick on
+@    yaxis  tick minor ticks 1
+@    yaxis  tick default 6
+@    yaxis  tick place rounded true
+@    yaxis  tick in
+@    yaxis  tick major size 1.000000
+@    yaxis  tick major color 1
+@    yaxis  tick major linewidth 1.0
+@    yaxis  tick major linestyle 2
+@    yaxis  tick major grid on
+@    yaxis  tick minor color 1
+@    yaxis  tick minor linewidth 1.0
+@    yaxis  tick minor linestyle 1
+@    yaxis  tick minor grid off
+@    yaxis  tick minor size 0.500000
+@    yaxis  ticklabel on
+@    yaxis  ticklabel format general
+@    yaxis  ticklabel prec 5
+@    yaxis  ticklabel angle 0
+@    yaxis  ticklabel skip 0
+@    yaxis  ticklabel stagger 0
+@    yaxis  ticklabel place normal
+@    yaxis  ticklabel offset auto
+@    yaxis  ticklabel offset 0.000000 , 0.010000
+@    yaxis  ticklabel start type auto
+@    yaxis  ticklabel start 0.000000
+@    yaxis  ticklabel stop type auto
+@    yaxis  ticklabel stop 0.000000
+@    yaxis  ticklabel char size 0.800000
+@    yaxis  ticklabel font 0
+@    yaxis  ticklabel color 1
+@    yaxis  ticklabel formula ""
+@    yaxis  ticklabel append ""
+@    yaxis  ticklabel prepend ""
+@    yaxis  tick place both
+@    yaxis  tick spec type none
+@    altxaxis  off
+@    altyaxis  off
+@    legend on
+@    legend loctype view
+@    legend 0.85, 0.8
+@    legend box color 1
+@    legend box pattern 1
+@    legend box linewidth 1.0
+@    legend box linestyle 1
+@    legend box fill color 0
+@    legend box fill pattern 1
+@    legend font 0
+@    legend char size 0.750000
+@    legend color 1
+@    legend length 4
+@    legend vgap 1
+@    legend hgap 1
+@    legend invert false
+@    frame type 0
+@    frame linestyle 1
+@    frame linewidth 1.0
+@    frame color 1
+@    frame pattern 1
+@    frame background color 0
+@    frame background pattern 0
+""")
+      entete.append('@    title "'+g.Titre+'"')
+      entete.append('@    subtitle "'+g.SousTitre+'"')
+      entete.append('@    xaxis  label "'+g.Legende_X+'"')
+      entete.append('@    yaxis  label "'+g.Legende_Y+'"')
+      entete.append('@    xaxes scale '+dic_ech[g.Echelle_X])
+      entete.append('@    yaxes scale '+dic_ech[g.Echelle_Y])
+      entete.append('@    xaxis  tick major '+str(g.Grille_X))
+      entete.append('@    yaxis  tick major '+str(g.Grille_Y))
+      entete.append('@    world xmin '+str(g.Min_X))
+      entete.append('@    world xmax '+str(g.Max_X))
+      entete.append('@    world ymin '+str(g.Min_Y))
+      entete.append('@    world ymax '+str(g.Max_Y))
+      return entete
+# ------------------------------------------------------------------------------
+   def DescrCourbe(self,**args):
+      """Retourne la chaine de caractères décrivant les paramètres de la courbe.
+      """
+      # valeurs par défaut
+      sty   = str(ValCycl(args['Sty'],0,8,1))
+      color = str(ValCycl(args['Coul'],1,15,args['NumSet']+1))
+      symbol= str(ValCycl(args['Marq'],0,10,args['NumSet']))
+      freqm = str(ValCycl(args['FreqM'],0,-1,0))
+
+      sn=str(args['NumSet'])
+      descr=[]
+      descr.append(string.replace("""
+@    s0 hidden false
+@    s0 type xy
+@    s0 symbol size 1.000000
+@    s0 symbol pattern 1
+@    s0 symbol linestyle 1
+@    s0 symbol fill pattern 0
+@    s0 symbol linewidth 1.0
+@    s0 symbol char 65
+@    s0 symbol char font 0
+@    s0 line type 1
+@    s0 line linewidth 1.0
+@    s0 line pattern 1
+@    s0 baseline type 0
+@    s0 baseline off
+@    s0 dropline off
+@    s0 fill type 0
+@    s0 fill rule 0
+@    s0 fill pattern 1
+@    s0 avalue off
+@    s0 avalue type 2
+@    s0 avalue char size 1.000000
+@    s0 avalue font 0
+@    s0 avalue rot 0
+@    s0 avalue format general
+@    s0 avalue prec 3
+@    s0 avalue prepend ""
+@    s0 avalue append ""
+@    s0 avalue offset 0.000000 , 0.000000
+@    s0 errorbar on
+@    s0 errorbar place both
+@    s0 errorbar pattern 1
+@    s0 errorbar size 1.000000
+@    s0 errorbar linewidth 1.0
+@    s0 errorbar linestyle 1
+@    s0 errorbar riser linewidth 1.0
+@    s0 errorbar riser linestyle 1
+@    s0 errorbar riser clip off
+@    s0 errorbar riser clip length 0.100000
+
+@    s0 comment ""
+""",' s0 ',' s'+sn+' '))
+      descr.append('@    s'+sn+' symbol '+symbol)
+      descr.append('@    s'+sn+' symbol color '+color)
+      descr.append('@    s'+sn+' symbol skip '+freqm)
+      descr.append('@    s'+sn+' symbol fill color '+color)
+      descr.append('@    s'+sn+' line linestyle '+sty)
+      descr.append('@    s'+sn+' line color '+color)
+      descr.append('@    s'+sn+' fill color '+color)
+      descr.append('@    s'+sn+' avalue color '+color)
+      descr.append('@    s'+sn+' errorbar color '+color)
+      descr.append('@    s'+sn+' legend "'+args['Leg'].replace(os.linesep, ' ; ')+'"')
+      return descr
+# ------------------------------------------------------------------------------
+   def Trace(self):
+      """Méthode pour 'tracer' l'objet Graph dans un fichier.
+      Met en page l'entete, la description des courbes et les valeurs selon
+      le format et ferme le fichier.
+      """
+      g = self.Graph
+      if self.PILOTE == 'INTERACTIF':
+         self.NomFich[0] = 'Trace_%s.dat' % time.strftime('%y%m%d%H%M%S',time.localtime())
+         self.Fich[0] = open(self.NomFich[0],'w')
+      # initialise le graph
+      self._FermFich()
+      nbsets, x0, x1, y0, y1 = IniGrace(self.NomFich[0])
+      NumSetIni = nbsets+1
+      g.SetExtrema(0.05, x0, x1, y0, y1, force=False)
+      # si Min/Max incohérents
+      if g.Echelle_X=='LOG':
+         g.Grille_X=10
+         if g.Min_X < 0.:
+            if g.BBXmin < 0.:
+               UTMESS('A', 'GRAPH0_4')
+            g.Min_X=g.MinP_X
+      if g.Echelle_Y=='LOG':
+         g.Grille_Y=10
+         if g.Min_Y < 0.:
+            if g.BBYmin < 0.:
+               UTMESS('A', 'GRAPH0_5')
+            g.Min_Y=g.MinP_Y
+      
+      if g.NbCourbe < 1:
+         self._FermFich()
+         return
+      # cohérence des valeurs par défaut
+      if g.Grille_X<0 or g.Grille_Y<0:
+         deltaX=g.Max_X-g.Min_X
+         deltaY=g.Max_Y-g.Min_Y
+         g.Grille_X=deltaX/5.
+         g.Grille_Y=deltaY/5.
+         if deltaX>4:
+            g.Grille_X=int(round(g.Grille_X))
+         if deltaY>4:
+            g.Grille_Y=int(round(g.Grille_Y))
+         if g.Grille_X == 0.:
+            g.Grille_X = 1.e-6
+         if g.Grille_Y == 0.:
+            g.Grille_Y = 1.e-6
+      # entete
+      content = self.Entete()
+      content.append('')
+      # valeurs
+      it=-1
+      for i in range(g.NbCourbe):
+         dCi=g.Courbe(i)
+         for k in range(dCi['NbCol']-1):
+            it=it+1
+            dCi['NumSet'] = NumSetIni + it
+            content.extend(self.DescrCourbe(**dCi))
+            content.append('')
+      # partie données (.dat)
+      it=-1
+      for i in range(g.NbCourbe):
+         dCi=g.Courbe(i)
+         for k in range(dCi['NbCol']-1):
+            it=it+1
+            content.append('@target g0.s%d' % (NumSetIni + it))
+            content.append('@type xy')
+            listX, listY = Tri(g.Tri, lx=dCi['Abs'], ly=dCi['Ord'][k])
+            for j in range(dCi['NbPts']):
+               svX = self.DicForm['formR'] % listX[j]
+               svY = self.DicForm['formR'] % listY[j]
+               content.append(self.DicForm['formR'] % listX[j] + \
+                  ' ' + self.DicForm['formR'] % listY[j])
+            content.append('&')
+      content.append('')
+      
+      # Production du fichier postscript, jpeg ou lancement interactif
+      pilo=self.PILOTE
+      if pilo == '':
+         self._OuvrFich()
+         self.Fich[0].write('\n'.join(content))
+         self._FermFich()
+      else:
+         xmgr=os.path.join(aster.repout(),'xmgrace')
+         nfwrk = self.NomFich[0]+'.wrk'
+         open(nfwrk, 'w').write('\n'.join(content))
+         nfhard = self.NomFich[0]+'.hardcopy'
+         # nom exact du pilote
+         if pilo == 'POSTSCRIPT':
+            pilo = 'PostScript'
+         elif pilo == 'INTERACTIF':
+            pilo = 'X11'
+         # ligne de commande
+         if pilo == 'X11':
+            lcmde = '%s %s' % (xmgr, nfwrk)
+            if not os.environ.has_key('DISPLAY') or os.environ['DISPLAY']=='':
+               os.environ['DISPLAY']=':0.0'
+               UTMESS('I','GRAPH0_7')
+            UTMESS('I','GRAPH0_8', valk=os.environ['DISPLAY'])
+         else:
+            if os.path.exists(os.path.join(aster.repout(),'gracebat')):
+               xmgr = os.path.join(aster.repout(),'gracebat')
+            lcmde = '%s -hdevice %s -hardcopy -printfile %s %s' % (xmgr, pilo, nfhard, nfwrk)
+         # appel xmgrace
+         UTMESS('I','EXECLOGICIEL0_8', valk=lcmde)
+         if not os.path.exists(xmgr):
+            UTMESS('S','EXECLOGICIEL0_6', valk=xmgr)
+         iret = os.system(lcmde)
+         if iret == 0 or os.path.exists(nfhard):
+            if pilo not in ('', 'X11'):
+               new = open(nfhard, 'r').read()
+               open(self.NomFich[0], 'a').write(new)
+         else:
+            UTMESS('A','GRAPH0_9', valk=pilo)
+      # menage
+      if self.PILOTE == 'INTERACTIF':
+         os.remove(self.NomFich[0])
+      return
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class TraceAgraf(TraceGraph):
+   """
+   Impression d'un objet Graph au format AGRAF.
+   """
+# ------------------------------------------------------------------------------
+   def Entete(self):
+      """Retourne l'entete des directives Agraf"""
+      dic_ech={ 'LIN' : '0', 'LOG' : '1' }
+      g=self.Graph
+      entete=[]
+      entete.append("""
+ASPECT_GRAPHIQUE:
+  En-tete :Departement Analyses Mecaniques et Acoustique
+  Aspect :0
+  Nombre de vues :1
+  Cesure commentaire :40
+  MinMax :0
+  Fonte Titre :%helvetica-14
+  Fonte Axes :%courier-12
+  Fonte Autre :%times-12
+
+  DEFAUT_COURBE:
+    Couleur (rvb) :     0     0     0
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 65535     0     0
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 11822 35723 22359
+
+  DEFAUT_COURBE:
+    Couleur (rvb) :     0     0 65535
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 65535     0 65535
+
+  DEFAUT_COURBE:
+    Couleur (rvb) :     0 65535 65535
+
+  DEFAUT_COURBE:
+    Couleur (rvb) :     0 65535     0
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 41120 21074 11565
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 65535 42405     0
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 41120  8224 61680
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 65535 65535     0
+
+  DEFAUT_COURBE:
+    Couleur (rvb) : 53970 46260 35980
+
+GRAPHIQUE:
+""")
+      if g.Titre=='':
+         g.Titre='GRAPHIQUE CODE_ASTER'
+      entete.append('Titre :'+g.Titre+'\n')
+      if g.SousTitre<>'':
+         entete.append('Commentaire :'+g.SousTitre+'\n')
+      entete.append('Frequence Grille X :'+str(int(g.Grille_X))+'\n')
+      entete.append('Frequence Grille Y :'+str(int(g.Grille_Y))+'\n')
+      entete.append('Echelle X :'+dic_ech[g.Echelle_X]+'\n')
+      entete.append('Echelle Y :'+dic_ech[g.Echelle_Y]+'\n')
+      if g.Legende_X<>'':
+         entete.append('Legende X :'+g.Legende_X+'\n')
+      if g.Legende_Y<>'':
+         entete.append('Legende Y :'+g.Legende_Y+'\n')
+      entete.append('Min X : '+str(g.Min_X)+'\n')
+      entete.append('Max X : '+str(g.Max_X)+'\n')
+      entete.append('Min Y : '+str(g.Min_Y)+'\n')
+      entete.append('Max Y : '+str(g.Max_Y)+'\n')
+
+      return entete
+# ------------------------------------------------------------------------------
+   def DescrCourbe(self,**args):
+      """Retourne la chaine de caractères décrivant les paramètres de la courbe.
+      """
+      # valeurs par défaut
+      sty   = str(ValCycl(args['Sty'],0,2,0))
+      color = str(ValCycl(args['Coul'],0,12,args['NumSet']))
+      symbol= str(ValCycl(args['Marq'],0,12,args['NumSet']))
+      freqm = str(ValCycl(args['FreqM'],0,-1,0))
+
+      descr=[]
+      descr.append('  COURBE:\n')
+      descr.append('     Trait :'+sty+'\n')
+      descr.append('     Couleur :'+color+'\n')
+      descr.append('     Marqueur :'+symbol+'\n')
+      descr.append('     Frequence Marqueur :'+freqm+'\n')
+      if args['Leg']<>'':
+         descr.append('     Legende :'+args['Leg']+'\n')
+      descr.append('     Tri :'+args['Tri']+'\n')
+      descr.append('     Abscisses : [ '+str(args['Bloc'])+', '+str(args['ColX'])+']\n')
+      descr.append('     Ordonnees : [ '+str(args['Bloc'])+', '+str(args['ColY'])+']\n')
+      return descr
+# ------------------------------------------------------------------------------
+   def Trace(self):
+      """Méthode pour 'tracer' l'objet Graph dans un fichier.
+      Met en page l'entete, la description des courbes et les valeurs selon
+      le format et ferme le fichier.
+      """
+      self._OuvrFich()
+      fdogr=self.Fich[0]
+      fdigr=self.Fich[1]
+      g=self.Graph
+      if g.NbCourbe > 0:
+         # cohérence des valeurs par défaut
+         if g.Grille_X<0 or g.Grille_Y<0:
+            g.Grille_X=0
+            g.Grille_Y=0
+         # entete
+         for lig in self.Entete():
+            fdigr.write(lig)
+         # valeurs
+         for i in range(g.NbCourbe):
+            dCi=g.Courbe(i)
+            dCi['NumSet']=i
+            # partie directives (.digr)
+            for k in range(dCi['NbCol']-1):
+               dCi['Bloc']=i+1
+               dCi['ColX']=1
+               dCi['ColY']=k+2
+               for lig in self.DescrCourbe(**dCi):
+                  fdigr.write(lig)
+            # partie données (.dogr)
+            if dCi['Leg']<>'':
+               leg=dCi['Leg']
+            else:
+               leg='COURBE_'+str(i)
+            fdogr.write('#NOM DE LA FONCTION: '+leg+'\n')
+            for j in range(dCi['NbPts']):
+               for k in range(dCi['NbCol']):
+                  sv=self.DicForm['formR'] % g.Valeurs[i][k][j]
+                  fdogr.write(' '+sv)
+               fdogr.write('\n')
+            fdogr.write('\n')
+      self._FermFich()
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def ValCycl(val,vmin,vmax,vdef):
+   """
+   Retourne une valeur entre vmin et vmax (bornes incluses) :
+      - si val<vmin, on utilise val=vdef,
+      - si val>vmax, on cycle tel que val=vmax+1 retourne vmin, etc.
+      - si vmax<vmin, il n'y a pas de max
+   """
+   v = val
+   if v < vmin:
+      v = vdef
+   if vmax < vmin:
+      return v
+   else:
+      return (((v-vmin) % (vmax+1-vmin))+vmin)
+
+# ------------------------------------------------------------------------------
+def Tri(tri, lx, ly):
+   """Retourne les listes triées selon la valeur de tri ('X','Y','XY','YX').
+   """
+   dNumCol={ 'X' : 0, 'Y' : 1 }
+   tab=numpy.array((lx,ly))
+   tab=numpy.transpose(tab)
+   li=range(len(tri))
+   li.reverse()
+   for i in li:
+      if tri[-i] in dNumCol.keys():
+         icol=dNumCol[tri[-i]]
+         tab = numpy.take(tab, numpy.argsort(tab[:,icol]))
+   return [ tab[:,0].tolist(), tab[:,1].tolist() ]
+
+# ------------------------------------------------------------------------------
+def AjoutParaCourbe(dCourbe, args):
+   """Ajoute les arguments fournis par l'utilisateur (args) dans le dictionnaire
+   décrivant la courbe (dCourbe).
+   """
+   # correspondance : mot-clé Aster / clé du dico de l'objet Graph
+   keys={
+      'LEGENDE'         : 'Leg',
+      'STYLE'           : 'Sty',
+      'COULEUR'         : 'Coul',
+      'MARQUEUR'        : 'Marq',
+      'FREQ_MARQUEUR'   : 'FreqM',
+      'TRI'             : 'Tri',
+   }
+   for mc, key in keys.items():
+      if args.has_key(mc):
+         dCourbe[key]=args[mc]
+
+# ------------------------------------------------------------------------------
+def IniGrace(fich):
+   """Retourne le numéro de la dernière courbe d'un fichier xmgrace (sinon 0).
+   """
+   ns=0
+   x0=None
+   x1=None
+   y0=None
+   y1=None
+   if os.path.exists(fich) and os.stat(fich).st_size<>0:
+      os.rename(fich, fich+'.prev')
+      fpre=open(fich+'.prev', 'r')
+      fnew=open(fich,         'w')
+      for line in fpre:
+         ikeep=True
+         mat=re.search('@target g[0-9]+\.s([0-9]+)', line)
+         if mat<>None and int(mat.group(1))>ns:
+            ns=int(mat.group(1))
+         mat=re.search('@[ ]+world[ ]+xmin[ ]+([\-\+\.0-9eEdD]+)', line)
+         if mat<>None:
+            try:
+               x0=float(mat.group(1))
+               ikeep=False
+            except ValueError:
+               pass
+         mat=re.search('@[ ]+world[ ]+xmax[ ]+([\-\+\.0-9eEdD]+)', line)
+         if mat<>None:
+            try:
+               x1=float(mat.group(1))
+               ikeep=False
+            except ValueError:
+               pass
+         mat=re.search('@[ ]+world[ ]+ymin[ ]+([\-\+\.0-9eEdD]+)', line)
+         if mat<>None:
+            try:
+               y0=float(mat.group(1))
+               ikeep=False
+            except ValueError:
+               pass
+         mat=re.search('@[ ]+world[ ]+ymax[ ]+([\-\+\.0-9eEdD]+)', line)
+         if mat<>None:
+            try:
+               y1=float(mat.group(1))
+               ikeep=False
+            except ValueError:
+               pass
+         if ikeep:
+            fnew.write(line)
+      fpre.close()
+      fnew.close()
+      try:
+         UTMESS('I', 'GRAPH0_10', valk=fich, vali=ns, valr=(x0, x1, y0, y1))
+      except TypeError:
+         # pas un format xmgrace
+         pass
+   return ns, x0, x1, y0, y1
diff --git a/Aster/Cata/cataSTA10/Utilitai/System.py b/Aster/Cata/cataSTA10/Utilitai/System.py
new file mode 100644 (file)
index 0000000..ccc3996
--- /dev/null
@@ -0,0 +1,218 @@
+#@ MODIF System Utilitai  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""Ce module définit la classe `SYSTEM` et la fonction `ExecCommand`
+qui est présente uniquement pour commodité pour les Macros.
+
+La classe SYSTEM est semblable à celle utilisée dans asrun.
+"""
+
+__all__ = ["SYSTEM", "ExecCommand"]
+
+import sys
+import os
+import re
+import tempfile
+
+# ----- differ messages translation
+def _(mesg):
+   return mesg
+
+
+def _exitcode(status, default=0):
+   """
+   Extract the exit code from status. Return 'default' if the process
+   has not been terminated by exit.
+   """
+   if os.WIFEXITED(status):
+      iret = os.WEXITSTATUS(status)
+   elif os.WIFSIGNALED(status):
+      iret = os.WTERMSIG(status)
+   elif os.WIFSTOPPED(status):
+      iret = os.WSTOPSIG(status)
+   else:
+      iret = default
+   return iret
+
+
+
+class SYSTEM:
+   """
+   Class to encapsultate "system" commands (this a simplified version of
+   ASTER_SYSTEM class defined in ASTK_SERV part).
+   """
+   # this value should be set during installation step.
+   MaxCmdLen = 1024
+   # line length -9
+   _LineLen = 80-9
+   
+   def __init__(self, **kargs):
+      """
+      Initialization.
+      Optionnal arguments : silent, verbose, debug, cc_files, maxcmdlen.
+      """
+      self.verbose   = kargs.get('verbose', True)
+      self.debug     = kargs.get('debug', False)
+      self.cc_files  = kargs.get('cc_files', None)
+      if kargs.has_key('maxcmdlen'):
+         self.MaxCmdLen = kargs['maxcmdlen']
+
+   def _mess(self, msg, cod=''):
+      """
+      Just print a message
+      """
+      self._print('%-18s %s' % (cod, msg))
+
+   def _print(self, *args, **kargs):
+      """
+      print replacement.
+      Optionnal argument :
+         term  : line terminator (default to os.linesep).
+      """
+      term = kargs.get('term', os.linesep)
+      files = set([sys.stdout])
+      if self.cc_files:
+         files.add(self.cc_files)
+      for f in files:
+         if type(f) is file:
+            txt = ' '.join(['%s'%a for a in args])
+            f.write(txt.replace(os.linesep+' ', os.linesep)+term)
+            f.flush()
+         else:
+            print _('file object expected : %s / %s') % (type(f), repr(f))
+
+   def VerbStart(self, cmd, verbose=None):
+      """
+      Start message in verbose mode
+      """
+      Lm = self._LineLen
+      if verbose == None:
+         verbose = self.verbose
+      if verbose:
+         pcmd = cmd
+         if len(cmd) > Lm-2 or cmd.count('\n') > 0:
+            pcmd = pcmd+'\n'+' '*Lm
+         self._print(('%-'+str(Lm)+'s') % (pcmd,), term='')
+
+   def VerbEnd(self, iret, output='', verbose=None):
+      """
+      End message in verbose mode
+      """
+      if verbose == None:
+         verbose = self.verbose
+      if verbose:
+         if iret == 0:
+            self._print('[  OK  ]')
+         else:
+            self._print(_('[FAILED]'))
+            self._print(_('Exit code : %d') % iret)
+         if (iret != 0 or self.debug) and output:
+            self._print(output)
+
+   def VerbIgnore(self, verbose=None):
+      """
+      End message in verbose mode
+      """
+      if verbose == None:
+         verbose = self.verbose
+      if verbose:
+         self._print(_('[ SKIP ]'))
+
+   def Shell(self, cmd, bg=False, verbose=False, follow_output=False,
+                   alt_comment=None, interact=False, separated_stderr=False):
+      """
+      Execute a command shell
+         cmd           : command
+         bg            : put command in background if True
+         verbose       : print status messages during execution if True
+         follow_output : follow interactively output of command
+         alt_comment   : print this "alternative comment" instead of "cmd"
+         interact      : allow the user to interact with the process.
+      Return :
+         iret     : exit code if bg = False,
+                    0 if bg = True
+         output   : output lines (as string)
+      """
+      if not alt_comment:
+         alt_comment = cmd
+      if bg:
+         interact = False
+      if len(cmd) > self.MaxCmdLen:
+         self._mess((_('length of command shell greater '\
+               'than %d characters.') % self.MaxCmdLen), '<A>_ALARM')
+      if self.debug:
+         self._print('cmd :', cmd, 'background : %s' % bg, 'follow_output : %s' % follow_output)
+      self.VerbStart(alt_comment, verbose=verbose)
+      if follow_output and verbose:
+         print os.linesep+_('Command output :')
+
+      fout = tempfile.NamedTemporaryFile()
+      ferr = tempfile.NamedTemporaryFile()
+      if bg:
+         new_cmd = cmd + ' &'
+      elif follow_output:
+         new_cmd = '( %s ) | tee %s' % (cmd, fout.name)
+      else:
+         if not separated_stderr:
+            new_cmd = '( %s ) > %s 2>&1' % (cmd, fout.name)
+         else:
+            new_cmd = '( %s ) > %s 2> %s' % (cmd, fout.name, ferr.name)
+      if self.debug:
+         self._print('modified cmd :', new_cmd)
+      # execution
+      iret = os.system(new_cmd)
+      fout.seek(0)
+      output = fout.read()
+      ferr.seek(0)
+      error = ferr.read()
+      fout.close()
+      ferr.close()
+      
+      if follow_output:
+         # repeat header message
+         self.VerbStart(alt_comment, verbose=verbose)
+      mat = re.search('EXIT_CODE=([0-9]+)', output)
+      if mat:
+         iret = int(mat.group(1))
+      self.VerbEnd(iret, output, verbose=verbose)
+      if self.debug and iret != 0:
+         self._print('<debug> ERROR : iret = %s' % iret)
+         self._print('STDOUT', output, all=True)
+         self._print('STDERR', error, all=True)
+      if bg:
+         iret = 0
+      if not separated_stderr:
+         result = iret, output
+      else:
+         result = iret, output, error
+      return result
+
+
+# Juste par commodité.
+system = SYSTEM()
+ExecCommand = system.Shell
+
+
+
+if __name__ == '__main__':
+   iret, output = ExecCommand('ls', alt_comment='Lancement de la commande...')
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/Table.py b/Aster/Cata/cataSTA10/Utilitai/Table.py
new file mode 100644 (file)
index 0000000..8943a58
--- /dev/null
@@ -0,0 +1,1070 @@
+#@ MODIF Table Utilitai  DATE 01/03/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE COURTOIS M.COURTOIS
+__all__ = ['Table', 'merge']
+
+import sys
+import os
+import re
+from copy  import copy
+from types import IntType, FloatType, StringType, UnicodeType, NoneType
+
+from Noyau.N_types import is_int, is_float, is_complex, is_number, is_str, is_enum
+
+import transpose
+from Utilitai.Utmess import UTMESS
+
+if not sys.modules.has_key('Graph'):
+   try:
+      from Utilitai import Graph
+   except ImportError:
+      import Graph
+
+# formats de base (identiques à ceux du module Graph)
+DicForm = {
+   'csep'  : ' ',       # séparateur
+   'ccom'  : '#',       # commentaire
+   'ccpara' : '',       # commentaire des labels
+   'cdeb'  : '',        # début de ligne
+   'cfin'  : '\n',      # fin de ligne
+   'sepch' : ';',       # séparateur entre deux lignes d'une cellule
+   'formK' : '%-12s',   # chaines
+   'formR' : '%12.5E',  # réels
+   'formI' : '%12d'     # entiers
+}
+# type par défaut des chaines de caractères
+Kdef = 'K24'
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class TableBase(object):
+   """Classe pour partager les méthodes d'impression entre Table et Colonne
+   (c'est surtout utile pour vérifier que l'extraction et les filtres sur les
+   colonnes sont corrects).
+   """
+   def __init__(self):
+      """Constructeur.
+      """
+      self.rows=None
+      self.para=None
+      self.type=None
+      self.titr=None
+   
+   def __repr__(self):
+      return self.ReprTable()
+   def Croise(self, **kargs):
+      raise NotImplementedError, 'Must be defined in a derived class'
+
+   def __len__(self):
+      """Retourne le nombre de ligne dans la Table/Colonne.
+      """
+      return len(self.rows)
+
+# ------------------------------------------------------------------------------
+   def Impr(self, FICHIER=None, FORMAT='TABLEAU', dform=None, **opts):
+      """Impresssion de la Table selon le format spécifié.
+         FICHIER : nom du(des) fichier(s). Si None, on dirige vers stdout
+         dform : dictionnaire de formats d'impression (format des réels,
+            commentaires, saut de ligne...)
+         opts  : selon FORMAT.
+      """
+      para={
+         'TABLEAU'         : { 'mode' : 'a', 'driver' : self.ImprTableau,   },
+         'ASTER'           : { 'mode' : 'a', 'driver' : self.ImprTableau,   },
+         'XMGRACE'         : { 'mode' : 'a', 'driver' : self.ImprGraph,     },
+         'AGRAF'           : { 'mode' : 'a', 'driver' : self.ImprTableau,   },
+         'TABLEAU_CROISE'  : { 'mode' : 'a', 'driver' : self.ImprTabCroise, },
+      }
+      kargs={
+         'FICHIER'   : FICHIER,
+         'FORMAT'    : FORMAT,
+         'dform'     : DicForm.copy(),
+         'mode'      : para[FORMAT]['mode'],
+      }
+      if dform != None and type(dform) is dict:
+         kargs['dform'].update(dform)
+      # ajout des options
+      kargs.update(opts)
+      
+      if not kargs.get('PAGINATION'):
+         # call the associated driver
+         para[FORMAT]['driver'](**kargs)
+
+      else:
+         if not is_enum(kargs['PAGINATION']):
+            ppag = [kargs['PAGINATION'],]
+         else:
+            ppag = list(kargs['PAGINATION'])
+         del kargs['PAGINATION']
+         npag = len(ppag)
+         # paramètres hors ceux de la pagination
+         lkeep = [p for p in self.para if ppag.count(p)==0]
+         # création des listes des valeurs distinctes
+         lvd = []
+         for p in ppag:
+            lvp = getattr(self,p).values()
+            lvn = []
+            for it in lvp:
+               if it != None and lvn.count(it) == 0:
+                  lvn.append(it)
+            lvn.sort()
+            lvd.append(lvn)
+         # création des n-uplets
+         s  = '[['+','.join(['x'+str(i) for i in range(npag)])+'] '
+         s += ' '.join(['for x'+str(i)+' in lvd['+str(i)+']' for i in range(npag)])+']'
+         try:
+            lnup = eval(s)
+         except SyntaxError, s:
+            UTMESS('F','TABLE0_20')
+         # pour chaque n-uplet, on imprime la sous-table
+         for nup in lnup:
+            tab = self
+            for i in range(npag):
+               tab = tab & (getattr(tab,ppag[i]) == nup[i])
+               sl = ''
+               if tab.titr: sl='\n'
+               tab.titr += sl+ppag[i]+': '+str(nup[i])
+            tab[lkeep].Impr(**kargs)
+
+# ------------------------------------------------------------------------------
+   def ImprTableau(self,**kargs):
+      """Impression au format TABLEAU ou ASTER
+      """
+      # fichier ou stdout
+      if kargs.get('FICHIER') != None:
+         f=open(kargs['FICHIER'],kargs['mode'])
+      else:
+         f=sys.stdout
+      # ecriture
+      f.write(self.ReprTable(**kargs) + '\n')
+      # fermeture
+      if kargs.get('FICHIER') != None:
+         f.close()
+
+# ------------------------------------------------------------------------------
+   def ReprTable(self,FORMAT='TABLEAU',dform=None,**ignore):
+      """Représentation d'une Table ou d'une Colonne sous forme d'un tableau.
+      """
+      rows=self.rows
+      para=self.para
+      typ =self.type
+      if not is_enum(para):
+         para=[self.para,]
+         typ =[self.type,]
+      if dform==None:
+         dform = DicForm.copy()
+      # est-ce que l'attribut .type est renseigné ?
+      typdef=typ != [None]*len(typ)
+      txt=[]
+      # ['']+ pour ajouter un séparateur en début de ligne
+      lspa=['',]
+      # lmax : largeur max des colonnes = max(form{K,R,I},len(parametre))
+      lmax=[]
+      # formats
+      strfmt, strfmt_none = {}, {}
+      for t, p in zip(typ, para):
+         larg_max=max([len(str(p))] + \
+               [len(FMT(dform,k,t) % 0) for k in ('formK','formR','formI')])
+         lspa.append(FMT(dform,'formK',t,larg_max,str(p)) % p)
+         lmax.append(larg_max)
+         assert t is not None, "Type de la colonne '%s' non défini" % p
+         strfmt[p] = FMT(dform, 'form'+t[0], t, larg_max)
+         strfmt_none[p] = FMT(dform, 'formK', t, larg_max)
+      if typdef:
+         stype=dform['csep'].join([''] + \
+          [FMT(dform,'formK',typ[i],lmax[i]) % typ[i] for i in range(len(para))])
+      txt.append(dform['ccom'])
+      txt.append(dform['ccom']+'-'*80)
+      txt.append(dform['ccom'])
+      ASTER=(FORMAT=='ASTER')
+      if ASTER:
+         txt.append('#DEBUT_TABLE')
+      if self.titr:
+         if ASTER:
+            txt.extend(['#TITRE '+lig for lig in self.titr.split('\n')])
+         else:
+            txt.extend([dform['ccom']+lig for lig in self.titr.split('\n')])
+      txt.append(dform['ccpara'] + dform['csep'].join(lspa))
+      if ASTER and typdef:
+         txt.append(stype)
+      for r in rows:
+         lig=['']
+         empty=True
+         for t, p, lmax_i in zip(typ, para, lmax):
+            val = r.get(p)
+            if val is not None:
+               empty = False
+               lig.append(strfmt[p] % val)
+            else:
+               s = strfmt_none[p] % '-'
+               # format AGRAF = TABLEAU + '\' devant les chaines de caractères !
+               if FORMAT=='AGRAF':
+                  s='\\'+s
+               lig.append(s)
+         if not empty:
+            lig2 = [dform['sepch'].join(ch.splitlines()) for ch in lig]
+            txt.append(dform['csep'].join(lig2))
+      if ASTER:
+         txt.append('#FIN_TABLE')
+      # ajout des debut et fin de ligne
+      txt=[dform['cdeb']+t+dform['cfin'] for t in txt]
+
+      return ''.join(txt)
+# ------------------------------------------------------------------------------
+   def ImprTabCroise(self,**kargs):
+      """Impression au format TABLEAU_CROISE d'une table ayant 3 paramètres.
+      """
+      # création du tableau croisé et impression au format TABLEAU
+      tabc=self.Croise()
+      kargs['FORMAT']='TABLEAU'
+      tabc.Impr(**kargs)
+# ------------------------------------------------------------------------------
+   def ImprGraph(self, **kargs):
+      """Impression au format XMGRACE : via le module Graph
+      """
+      args=kargs.copy()
+      if len(self.para) != 2:
+         UTMESS('A','TABLE0_21')
+         return
+      # suppression des lignes contenant une cellule vide
+      tnv = getattr(self, self.para[0]).NON_VIDE() \
+          & getattr(self, self.para[1]).NON_VIDE()
+      # objet Graph
+      graph=Graph.Graph()
+      dicC={
+         'Val' : [getattr(tnv, tnv.para[0]).values(),
+                  getattr(tnv, tnv.para[1]).values()],
+         'Lab' : tnv.para,
+      }
+      if args['LEGENDE']==None: del args['LEGENDE']
+      Graph.AjoutParaCourbe(dicC, args)
+      graph.AjoutCourbe(**dicC)
+      
+      # Surcharge des propriétés du graphique et des axes
+      # (bloc quasiment identique dans impr_fonction_ops)
+      if args.get('TITRE'):            graph.Titre=args['TITRE']
+      if args.get('BORNE_X'):
+                                       graph.Min_X=args['BORNE_X'][0]
+                                       graph.Max_X=args['BORNE_X'][1]
+      if args.get('BORNE_Y'):
+                                       graph.Min_Y=args['BORNE_Y'][0]
+                                       graph.Max_Y=args['BORNE_Y'][1]
+      if args.get('LEGENDE_X'):        graph.Legende_X=args['LEGENDE_X']
+      if args.get('LEGENDE_Y'):        graph.Legende_Y=args['LEGENDE_Y']
+      if args.get('ECHELLE_X'):        graph.Echelle_X=args['ECHELLE_X']
+      if args.get('ECHELLE_Y'):        graph.Echelle_Y=args['ECHELLE_Y']
+      if args.get('GRILLE_X'):         graph.Grille_X=args['GRILLE_X']
+      if args.get('GRILLE_Y'):         graph.Grille_Y=args['GRILLE_Y']
+      
+      try:
+         graph.Trace(**args)
+      except TypeError:
+         UTMESS('A','TABLE0_22')
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class Table(TableBase):
+   """Une table est construite comme une liste de lignes, chaque ligne est
+   un dictionnaire.
+   On crée puis on ajoute les lignes avec la méthode append :
+      t=Table()
+      t.append(dict(a=1,b=2))
+      t.append(dict(a=3,b=4))
+   La méthode __iter__ définit un itérateur sur les lignes de la table,
+   __repr__ retourne une représentation de la table, utilisée par "print t".
+   Grace à la classe Colonne et à sa méthode _extract, il est possible
+   de construire une sous-table qui satisfait un critère donné.
+   Le critère est donné par une fonction Python qui retourne vrai
+   ou faux si la valeur d'une colonne respecte le critère ou non.
+   Exemple:
+     def critere(valeur):
+         return valeur < 10
+     soustable = t.a._extract(critere)
+   t.a retourne un objet intermédiaire de la classe Colonne qui mémorise
+   le nom de la colonne demandée (a, ici).
+   """
+# ------------------------------------------------------------------------------
+   def __init__(self, rows=[], para=[], typ=[], titr=''):
+      """Constructeur de la Table :
+         rows : liste des lignes (dict)
+         para : liste des paramètres
+         type : liste des types des paramètres
+         titr : titre de la table
+      """
+      self.rows = [r for r in rows if r.values() != [None]*len(r.values())]
+      self.para = list(para)
+      for i in self.para :
+          if self.para.count(i) != 1 :
+             UTMESS('F','TABLE0_23', valk=i)
+      if len(typ) == len(self.para):
+         self.type = list(typ)
+      else:
+         self.type = [None]*len(self.para)
+      self.titr = titr
+   
+# ------------------------------------------------------------------------------
+   def copy(self):
+      """Retourne une copie de la table.
+      """
+      rows = []
+      for r in self.rows:
+         rows.append(copy(r))
+      return Table(rows, self.para[:], self.type[:], self.titr)
+
+# ------------------------------------------------------------------------------
+   def add_para(self, para, typ):
+      """Ajoute un nouveau paramètre."""
+      if not is_enum(para):
+         para=[para,]
+      if not is_enum(typ):
+         typ =[typ,]
+      if len(typ) != len(para):
+         typ = [typ[0],] * len(para)
+      for p, t in zip(para, typ):
+         if not p in self.para:
+            self.para.append(p)
+            self.type.append(t)
+
+# ------------------------------------------------------------------------------
+   def append(self, obj):
+      """Ajoute une ligne (type dict) qui peut éventuellement définir un
+      nouveau paramètre."""
+      para=obj.keys()
+      for p in para:
+         if not p in self.para:
+            self.add_para(p, _typaster(obj[p]))
+         else:
+            ip=self.para.index(p)
+            self.type[ip]=_typaster(obj[p], self.type[ip])
+      self.rows.append(obj)
+
+
+   def extend(self, objs):
+      """Ajoute plusieurs lignes (list of dict)."""
+      for row in objs:
+          self.append(row)
+
+# ------------------------------------------------------------------------------
+   def SansColonneVide(self, l_para=None):
+      """Retourne une copie de la table dans laquelle on a supprimé les colonnes
+      vides (les lignes vides sont automatiquement supprimées).
+      """
+      # ptest : colonnes potentiellement vides
+      pkeep = l_para or self.para
+      ptest = pkeep[:]
+      for row in self:
+         notNone = [p for p in ptest if row.get(p) is not None]
+         ptest = [p for p in ptest if not p in notNone]
+         if len(ptest) == 0:
+            break
+      # pkeep : on conserve les colonnes non vides
+      pkeep = [p for p in pkeep if not p in ptest]
+      return self[pkeep]
+
+# ------------------------------------------------------------------------------
+   def __setitem__(self, k_para, k_value):
+      """Ajoute une colonne k_para dont les valeurs sont dans k_value"""
+      if len(k_value) == 0:
+         return
+      if k_para in self.para :
+         UTMESS('F','TABLE0_24', valk=k_para)
+      self.add_para(k_para, typ=_typaster(k_value[0]))
+      i = 0
+      for row in self:
+         if i < len(k_value):
+            row[k_para]   = k_value[i]
+            self.type[-1] = _typaster(k_value[i], self.type[-1])
+         else:
+            row[k_para] = None
+         i+=1
+      for j in range(i, len(k_value)): 
+         self.append({k_para : k_value[j]})
+
+# ------------------------------------------------------------------------------
+   def fromfunction(self, nom_para, funct, l_para=None, const=None):
+      """Ajoute une colonne `nom_para` en évaluant la fonction `funct` sur
+      la valeur des paramètres `l_para` (qui doivent exister dans la table).
+      Si `l_para` n'est pas fourni, on prend `funct`.nompar (FORMULE Aster).
+      On peut passer un dictionnaire de constantes dans `const`. Quand on
+      utilise une FORMULE Aster, les constantes sont prises dans le contexte
+      global.
+      """
+      # vérif préalables
+      if not hasattr(funct, '__call__'):
+         UTMESS('F', 'TABLE0_25', valk=funct.__name__)
+      if nom_para in self.para :
+         UTMESS('F','TABLE0_24', valk=nom_para)
+      if l_para == None:
+         if not hasattr(funct, 'nompar'):
+            UTMESS('F', 'TABLE0_26', valk=funct.__name__)
+         l_para = funct.nompar
+      if not is_enum(l_para):
+         l_para = [l_para]
+      not_found = ', '.join([p for p in l_para if not p in self.para])
+      if not_found != '':
+         UTMESS('F','TABLE0_27', valk=not_found)
+      if const == None:
+         const = {}
+      if type(const) is not dict:
+         UTMESS('F', 'TABLE0_28')
+      # liste des valeurs des paramètres
+      tabpar = []
+      for para in l_para:
+         vals = getattr(self, para).values()
+         tabpar.append(vals)
+      tabpar = transpose.transpose(tabpar)
+      # évaluation de la fonction sur ces paramètres
+      vectval = []
+      for lpar in tabpar:
+         # si un paramètre est absent, on ne peut pas évaluer la formule
+         if None in lpar:
+            vectval.append(None)
+         else:
+            vectval.append(funct(*lpar, **const))
+      # ajout de la colonne
+      self[nom_para] = vectval
+
+# ------------------------------------------------------------------------------
+   def __iter__(self):
+      """Itère sur les lignes de la Table"""
+      return iter(self.rows)
+
+# ------------------------------------------------------------------------------
+   def __getattr__(self, column):
+      """Construit un objet intermediaire (couple table, colonne)"""
+      typ=None
+      if not column in self.para:
+         column=''
+      else:
+         typ=self.type[self.para.index(column)]
+      return Colonne(self, column, typ)
+
+# ------------------------------------------------------------------------------
+   def sort(self, CLES=None, ORDRE='CROISSANT'):
+      """Tri de la table.
+         CLES  : liste des clés de tri
+         ORDRE : CROISSANT ou DECROISSANT
+      """
+      # par défaut, on prend tous les paramètres
+      if CLES == None:
+         CLES = self.para[:]
+      # vérification des arguments
+      if not is_enum(CLES):
+         CLES = [CLES]
+      else:
+         CLES = list(CLES)
+      not_found = ', '.join([p for p in CLES if not p in self.para])
+      if not_found != '':
+         UTMESS('F', 'TABLE0_27', valk=not_found)
+      if not ORDRE in ('CROISSANT', 'DECROISSANT'):
+         UTMESS('F', 'TABLE0_29', valk=ORDRE)
+      # tri
+      self.rows = sort_table(self.rows, self.para, CLES, (ORDRE=='DECROISSANT'))
+
+# ------------------------------------------------------------------------------
+   def __delitem__(self, args):
+      """Supprime les colonnes correspondantes aux éléments de args """
+      if not is_enum(args):
+         args=[args,]
+      for item in args:
+         try:
+            ind_item = self.para.index(item)
+         except ValueError:
+            UTMESS('F', 'TABLE0_27', valk=item)
+         del self.type[ind_item]
+         self.para.remove(item)
+         for line in self.rows:
+            if line.has_key(item):
+               del line[item]
+
+# ------------------------------------------------------------------------------
+   def __getitem__(self, args):
+      """Extrait la sous table composée des colonnes dont les paramètres sont dans args """
+      if not is_enum(args):
+         args=[args,]
+      else:
+         args=list(args)
+      new_rows=[]
+      new_para=args
+      new_type=[]
+      for item in new_para:
+         if not item in self.para:
+            return Table()
+         new_type.append(self.type[self.para.index(item)])
+      for line in self:
+         new_line={}
+         for item in new_para:
+            v = line.get(item)
+            if v is not None:
+               new_line[item] = v
+         new_rows.append(new_line)
+      return Table(new_rows, new_para, new_type, self.titr)
+
+
+   def OrdreColonne(self, cols):
+      """Réordonne les colonnes en mettant en premier 'cols'.
+      Ignore les colonnes qui ne seraient pas dans 'self.para'."""
+      if type(cols) not in (list, tuple):
+         cols = [cols]
+      new_para = [p for p in cols if p in self.para]
+      others = [p for p in self.para if not p in cols]
+      new_para.extend(others)
+      new_type=[]
+      for item in new_para:
+         new_type.append(self.type[self.para.index(item)])
+      self.para = new_para
+      self.type = new_type
+
+# ------------------------------------------------------------------------------
+   def _tuplevalues(self, dico):
+      """Retourne la liste des valeurs d'une ligne dans l'ordre self.para
+      ("hashable" pour en faire une clé de dict.)
+      """
+      return tuple(map(dico.get, self.para))
+
+   def __and__(self, other):
+      """Intersection de deux tables (opérateur &)"""
+      if other.para != self.para:
+         UTMESS('A','TABLE0_30')
+         return Table()
+      else:
+         dval_other = dict.fromkeys([self._tuplevalues(r) for r in other], 1)
+         tmp = [r for r in self if dval_other.get(self._tuplevalues(r)) is not None]
+         return Table(tmp, self.para, self.type, self.titr)
+
+# ------------------------------------------------------------------------------
+   def __or__(self, other):
+      """Union de deux tables (opérateur |)"""
+      if other.para != self.para:
+         UTMESS('A','TABLE0_30')
+         return Table()
+      else:
+         tmp = self.rows[:]
+         dval_self = dict.fromkeys([self._tuplevalues(r) for r in self], 1)
+         tmp.extend([r for r in other if dval_self.get(self._tuplevalues(r)) is None])
+         return Table(tmp, self.para, self.type[:], self.titr)
+
+# ------------------------------------------------------------------------------
+   def values(self):
+      """Renvoie la table sous la forme d'un dictionnaire de listes dont les
+      clés sont les paramètres.
+      """
+      dico={}
+      for column in self.para:
+         dico[column]=Colonne(self, column).values()
+      return dico
+
+# ------------------------------------------------------------------------------
+   def dict_CREA_TABLE(self):
+      """Renvoie le dictionnaire des mots-clés à fournir à la commande CREA_TABLE
+      pour produire une table_sdaster.
+      """
+      dico={ 'TITRE' : ['%-80s' % lig for lig in self.titr.split('\n')],
+             'LISTE' : [], }
+      # remplissage de chaque occurence (pour chaque paramètre) du mot-clé facteur LISTE
+      for i in range(len(self.para)):
+         # nom du paramètre et type si K*
+         d={ 'PARA' : self.para[i], }
+         typ=self.type[i]
+         if typ[0]=='K':
+            mc='LISTE_K'
+            if not typ in ('K8', 'K16', 'K24'):
+               UTMESS('A','TABLE0_32', valk=(self.para[i],Kdef))
+               typ=Kdef
+            d['TYPE_K']=typ
+         elif typ=='I':
+            mc='LISTE_I'
+         elif typ=='R':
+            mc='LISTE_R'
+         else:
+            UTMESS('F', 'TABLE0_31', valk=self.para[i])
+         # valeurs sans trou / avec trou
+         vals=getattr(self, self.para[i]).values()
+         if typ == 'R':
+            try:
+               check_nan(vals)
+            except ValueError, err:
+               UTMESS('F', 'TABLE0_33', valk=(self.para[i], str(err)))
+         if vals.count(None)==0:
+            d[mc]=vals
+         else:
+            d['NUME_LIGN'] = [j+1 for j in range(len(vals)) if vals[j] != None]
+            d[mc]          = [v   for v in vals             if v       != None]
+         if len(d[mc])==0:
+            UTMESS('I','TABLE0_34', valk=self.para[i])
+         else:
+            dico['LISTE'].append(d)
+      if len(dico['LISTE'])==0:
+         UTMESS('F','TABLE0_35')
+      return dico
+
+# ------------------------------------------------------------------------------
+   def Array(self,Para,Champ):
+      """Renvoie sous forme de NumArray le résultat d'une extraction dans une table
+      méthode utile à macr_recal
+      """
+      import numpy
+      __Rep = self[Para,Champ].values()
+      F = numpy.zeros((len(__Rep[Para]),2))
+      for i in range(len(__Rep[Para])):
+         F[i][0] = __Rep[Para][i]
+         F[i][1] = __Rep[Champ][i]
+      del(__Rep)
+      return F
+
+# ------------------------------------------------------------------------------
+   def Croise(self):
+      """Retourne un tableau croisé P3(P1,P2) à partir d'une table ayant
+      trois paramètres (P1, P2, P3).
+      """
+      if len(self.para) != 3:
+         UTMESS('A', 'TABLE0_36')
+         return Table()
+      py, px, pz = self.para
+      ly, lx, lz = [getattr(self,p).values() for p in self.para]
+      new_rows=[]
+      #lpz='%s=f(%s,%s)' % (pz,px,py)
+      lpz='%s/%s' % (px,py)
+      # attention aux doublons dans lx et ly
+      new_para=set(ly)
+      new_para.discard(None)
+      new_para = list(new_para)
+      new_para.sort()
+      new_para.insert(0, lpz)
+      # attention aux doublons dans lx et ly
+      newx=set(lx)
+      newx.discard(None)
+      newx = list(newx)
+      newx.sort()
+      for x in newx:
+         if x != None:
+            d={ lpz : x, }
+            taux = (getattr(self,px)==x)
+            for dz in taux.rows:
+               d[dz[py]]=dz[pz]
+            new_rows.append(d)
+      new_type=[self.type[0],] + [self.type[2]]*(len(new_para) - 1)
+      new_titr=self.titr
+      if new_titr != '': new_titr+='\n'
+      new_titr+=pz + ' FONCTION DE ' + px + ' ET ' + py
+      return Table(new_rows, new_para, new_type, new_titr)
+
+# ------------------------------------------------------------------------------
+   def Renomme(self, pold, pnew):
+      """Renomme le paramètre `pold` en `pnew`.
+      """
+      if not pold in self.para:
+         raise KeyError, 'Paramètre %s inexistant dans cette table' % pold
+      elif self.para.count(pnew)>0:
+         raise KeyError, 'Le paramètre %s existe déjà dans la table' % pnew
+      else:
+         self.para[self.para.index(pold)] = pnew
+         for lig in self:
+            lig[pnew] = lig[pold]
+            del lig[pold]
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class Colonne(TableBase):
+   """Classe intermédiaire pour mémoriser un couple (table, nom de colonne)
+   et exprimer les critères d'extraction sous une forme naturelle en python
+   en surchargeant les operateurs <, >, != et =.
+   Alors on peut écrire la requete simple :
+     soustable=t.a<10
+   Ainsi que des requetes plus complexes :
+     soustable=t.a<10 and t.b <4
+   ou
+     soustable=t.a<10 or t.b <4
+   Les "alias" EQ, NE, LE, LT, GE, GT permettent à la macro IMPR_TABLE
+   d'utiliser directement le mot-clé utilisateur CRIT_COMP défini dans le
+   catalogue : getattr(Table,CRIT_COMP).
+   """
+# ------------------------------------------------------------------------------
+   def __init__(self, table, column, typ=None):
+      """Constructeur (objet Table associé, paramètre de la colonne, type du
+      paramètre).
+      """
+      self.Table=table
+      self.rows=self.Table.rows
+      self.para=column
+      self.type=typ
+      self.titr=''
+
+# ------------------------------------------------------------------------------
+   def _extract(self, fun):
+      """Construit une table avec les lignes de self.Table 
+         dont l'élément de nom self.para satisfait le critère fun,
+         fun est une fonction qui retourne vrai ou faux
+      """
+      return Table([row for row in self.Table if fun(row.get(self.para))], self.Table.para, self.Table.type, self.Table.titr)
+
+# ------------------------------------------------------------------------------
+   def __le__(self, VALE):
+      if is_enum(VALE) :
+        crit = max(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v != None and v<=crit)
+
+# ------------------------------------------------------------------------------
+   def __lt__(self, VALE):
+      if is_enum(VALE) :
+        crit = max(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v != None and v<crit)
+
+# ------------------------------------------------------------------------------
+   def __ge__(self, VALE):
+      if is_enum(VALE):
+        crit = min(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v != None and v>=crit)
+
+# ------------------------------------------------------------------------------
+   def __gt__(self, VALE):
+      if is_enum(VALE):
+        crit = min(VALE)
+      else:
+        crit = VALE
+      return self._extract(lambda v: v != None and v>crit)
+
+# ------------------------------------------------------------------------------
+   def __eq__(self, VALE, CRITERE='RELATIF', PRECISION=0.):
+      if not is_enum(VALE):
+         VALE = [VALE]
+      if is_str(VALE[0]):
+         stripVALE = [value.strip() for value in VALE]
+         return self._extract(lambda v: str(v).strip() in stripVALE)
+      else:           
+         if PRECISION==0. :
+            return self._extract(lambda v : v in VALE)
+         elif CRITERE=='ABSOLU':
+            return self._extract(lambda v : _func_test_abs(v, VALE, PRECISION))
+         else:
+            return self._extract(lambda v : _func_test_rela(v, VALE, PRECISION))
+      
+# ------------------------------------------------------------------------------
+   def REGEXP(self, regexp):
+      """Retient les lignes dont le paramètre satisfait l'expression
+      régulière `regexp`.
+      """
+      if not is_str(regexp):
+         return self._extract(lambda v : False)
+      return self._extract(lambda v : v != None and re.search(regexp, v) != None)
+
+# ------------------------------------------------------------------------------
+   def __ne__(self, VALE, CRITERE='RELATIF', PRECISION=0.):
+      if not is_enum(VALE):
+         VALE = [VALE]
+      if is_str(VALE[0]):
+         stripVALE = [value.strip() for value in VALE]
+         return self._extract(lambda v: str(v).strip() not in stripVALE)
+      else:           
+         if PRECISION==0. :
+            return self._extract(lambda v : v not in VALE)
+         elif CRITERE=='ABSOLU':
+            return self._extract(lambda v : not (_func_test_abs(v, VALE, PRECISION)))
+         else:
+            return self._extract(lambda v : not (_func_test_rela(v, VALE, PRECISION)))
+
+# ------------------------------------------------------------------------------
+   def MAXI(self):
+      # important pour les performances de récupérer le max une fois pour toutes
+      maxi=max(self)
+      return self._extract(lambda v: v==maxi)
+
+# ------------------------------------------------------------------------------
+   def MINI(self):
+      # important pour les performances de récupérer le min une fois pour toutes
+      mini=min(self)
+      return self._extract(lambda v: v==mini)
+
+# ------------------------------------------------------------------------------
+   def ABS_MAXI(self):
+      # important pour les performances de récupérer le max une fois pour toutes
+      abs_maxi=max([abs(v) for v in self.values() if is_number(v)])
+      return self._extract(lambda v: v==abs_maxi or v==-abs_maxi)
+
+# ------------------------------------------------------------------------------
+   def ABS_MINI(self):
+      # important pour les performances de récupérer le min une fois pour toutes
+      abs_mini=min([abs(v) for v in self.values() if is_number(v)])
+      # tester le type de v est trop long donc pas de abs(v)
+      return self._extract(lambda v: v==abs_mini or v==-abs_mini)
+
+# ------------------------------------------------------------------------------
+   def __iter__(self):
+      """Itère sur les éléments de la colonne"""
+      for row in self.Table:
+         # si l'élément n'est pas présent on retourne None
+         yield row.get(self.para)
+         #yield row[self.para]
+
+# ------------------------------------------------------------------------------
+   def __getitem__(self, i):
+      """Retourne la ième valeur d'une colonne"""
+      return self.values()[i]
+
+# ------------------------------------------------------------------------------
+   def values(self):
+      """Renvoie la liste des valeurs"""
+      return [r.get(self.para,None) for r in self.Table]
+
+   def not_none_values(self):
+      """Renvoie la liste des valeurs non 'None'"""
+      return [val for val in self.values() if val != None]
+
+# ------------------------------------------------------------------------------
+   # équivalences avec les opérateurs dans Aster
+   LE=__le__
+   LT=__lt__
+   GE=__ge__
+   GT=__gt__
+   EQ=__eq__
+   NE=__ne__
+   def VIDE(self):
+      return self.__eq__(None)
+   def NON_VIDE(self):
+      return self.__ne__(None)
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def sort_table(rows, l_para, w_para, reverse=False):
+   """Sort list of dict.
+      rows     : list of dict
+      l_para   : list of the keys of dict
+      w_para   : keys of the sort
+   """
+   c_para=[i for i in l_para if i not in w_para]
+   new_rows=rows
+   # rename sort keys by "__" + number + para
+   # ("__" to avoid conflict with existing parameters)
+   for i, p in enumerate(w_para) :
+      new_key= '__%03d%s' % (i, p)
+      for row in new_rows :
+         v = row.get(p)
+         row[new_key] = v     # must have a value to sort properly
+         try:
+            del row[p]
+         except:
+            pass
+   # rename others parameters by "__999" + para
+   for p in c_para :
+      new_key= '__999'+p
+      for row in new_rows :
+         v = row.get(p)
+         row[new_key] = v     # must have a value to sort properly
+         try:
+            del row[p]
+         except:
+            pass
+   # sort
+   new_rows.sort()
+   # reversed sort
+   if reverse:
+      new_rows.reverse()
+   for i, p in enumerate(w_para) :
+      old_key= '__%03d%s' % (i, p)
+      for row in new_rows:
+         v = row.get(old_key)
+         if v is not None:
+            row[p] = v
+         try:
+            del row[old_key]
+         except:
+            pass
+   for p in c_para :
+      old_key= '__999'+p
+      for row in new_rows :
+         v = row.get(old_key)
+         if v is not None:
+            row[p] = v
+         try:
+            del row[old_key]
+         except:
+            pass
+   return new_rows
+
+# ------------------------------------------------------------------------------
+def FMT(dform, nform, typAster=None, larg=0, val=''):
+   """Retourne un format d'impression Python à partir d'un type Aster ('R','I',
+   'K8', 'K16'...). Si typAster==None, retourne dform[nform].
+      larg : largeur minimale du format (val permet de ne pas ajouter des blancs
+      si la chaine à afficher est plus longue que le format, on prend le partie
+      de ne pas tronquer les chaines)
+   """
+   if typAster==None:
+      fmt=dform[nform]
+   elif typAster in ('I', 'R'):
+      if nform=='formK':
+         # convertit %12.5E en %-12s
+         fmt=re.sub('([0-9]+)[\.0-9]*[diueEfFgG]+','-\g<1>s',dform['form'+typAster])
+      else:
+         fmt=dform[nform]
+   else:
+      # typAster = Kn
+      fmt='%-'+typAster[1:]+'s'
+   # on ajoute éventuellement des blancs pour atteindre la largeur demandée
+   if larg != 0:
+      fmt=' '*max(min(larg-len(val),larg-len(fmt % 0)),0) + fmt
+   return fmt
+
+# ------------------------------------------------------------------------------
+def merge(tab1, tab2, labels=[], restrict=False):
+   """Assemble les deux tables tb1 et tb2 selon une liste de labels communs.
+      Si labels est vide:
+       - les lignes de tb2 sont ajoutés à celles de tb1,
+      sinon :
+       - si on trouve les valeurs de tb2 sur les labels dans tb1 (et une seule fois),
+         on surcharge tb1 avec les lignes de tb2 ;
+       - sinon on ajoute la ligne de tb2 à la fin de tb1.
+   """
+   tb1 = tab1.copy()
+   tb2 = tab2.copy()
+   if not is_enum(labels):
+      labels=(labels,)
+   for key in labels :
+       if key not in tb1.para : UTMESS('F','TABLE0_27', valk=key)
+       if key not in tb2.para : UTMESS('F','TABLE0_27', valk=key)
+   # ensemble des paramètres et des types
+   n_para=tb1.para[:]
+   n_type=tb1.type[:]
+   for i in tb2.para:
+      if i not in tb1.para:
+         n_para.append(i)
+         n_type.append(tb2.type[tb2.para.index(i)])
+   # restriction des lignes aux labels communs (peu cher en cpu)
+   rows1 = tb1.rows
+   dlab1 = {}
+   for i1 in range(len(rows1)):
+      tu1 = tuple(map(rows1[i1].__getitem__, labels))
+      if dlab1.get(tu1, '') == '':
+         dlab1[tu1] = i1
+      else:
+         dlab1[tu1] = None
+   # restriction des lignes aux labels communs (peu cher en cpu)
+   rows2 = tb2.rows
+   dlab2 = {}
+   for i2 in range(len(rows2)):
+      tu2 = tuple(map(rows2[i2].__getitem__, labels))
+      if dlab2.get(tu2, '') == '':
+         dlab2[tu2] = i2
+      else:
+         dlab2[tu2] = None
+   # creation de dic1 : dictionnaire de correspondance entre les 
+   # lignes a merger dans les deux tableaux
+   dic1 = {}
+   for cle in dlab1.keys():
+      if dlab1[cle] == None or cle == ():
+         bid = dlab1.pop(cle)
+   for cle in dlab2.keys():
+      if dlab2[cle] == None or cle == ():
+         bid = dlab2.pop(cle)
+   for cle in dlab2.keys():
+      if dlab1.has_key(cle):
+         dic1[dlab2[cle]] = dlab1[cle]
+   # insertion des valeurs de tb2 dans tb1 quand les labels sont communs
+   # (et uniques dans chaque table)
+   # OU ajout de la ligne de tb2 dans tb1 (si restrict == False)
+   if restrict:
+      def func_append_r2(row):
+         pass
+   else:
+      def func_append_r2(row):
+         rows1.append(row)
+   i2 = -1
+   for r2 in rows2:
+      i2 += 1
+      try:
+         rows1[dic1[i2]].update(r2)
+      except KeyError:
+         func_append_r2(r2)
+   # concaténation des titres + info sur le merge
+   tit = '\n'.join([tb1.titr, tb2.titr, 'MERGE avec labels=%s' % repr(labels)])
+   return Table(rows1, n_para, n_type, tit)
+
+# ------------------------------------------------------------------------------
+def _typaster(obj, prev=None, strict=False):
+   """Retourne le type Aster ('R', 'I', Kdef) correspondant à l'objet obj.
+   Si prev est fourni, on vérifie que obj est du type prev.
+   Si strict=False, on autorise que obj ne soit pas du type prev s'ils sont
+   tous les deux numériques ; dans ce cas, on retourne le "type enveloppe" 'R'.
+   """
+   dtyp={
+      IntType    : 'I',
+      FloatType  : 'R',
+      StringType : Kdef, UnicodeType : Kdef,
+      NoneType   : 'I',
+   }
+   if is_float(obj):
+       obj = float(obj)
+   if type(obj) in dtyp.keys():
+      typobj=dtyp[type(obj)]
+      if prev in [None, typobj]:
+         return typobj
+      elif prev[0] == typobj[0] == 'K':
+         if len(obj) <= int(prev[1:]):
+            return prev
+         else:
+            raise TypeError, "La longueur de la chaine %s est incompatible avec le type %s" \
+               % (repr(obj),repr(prev))
+      elif strict:   # prev != None et typobj != prev et strict
+         raise TypeError, "La valeur %s n'est pas de type %s" % (repr(obj),repr(prev))
+      elif prev in ('I','R') and typobj in ('I','R'):
+         return 'R'
+      else:
+         raise TypeError, "La valeur %s n'est pas compatible avec le type %s" \
+               % (repr(obj),repr(prev))
+   else:
+      raise TypeError, 'Une table ne peut contenir que des entiers, réels ' \
+                       'ou chaines de caractères.'
+                  
+# ------------------------------------------------------------------------------
+# fonctions utilitaires
+def _func_test_abs(v, VALE, PRECISION):
+   """Retourne True si v est parmi VALE à PRECISION près en absolu
+   """
+   for x in VALE:
+      if v != None and (x-PRECISION <= v <= x+PRECISION):
+         return True
+   return False
+
+def _func_test_rela(v, VALE, PRECISION):
+   """Retourne True si v est parmi VALE à PRECISION près en relatif
+   """
+   for x in VALE: 
+      sign = float(x > 0.) or -1.
+      if v != None and (sign*x*(1.-PRECISION) <= sign*v <= sign*x*(1.+PRECISION)):
+         return True
+   return False
+
+def check_nan(values):
+   """Raise ValueError exception if nan is found in values."""
+   for i, v in enumerate(values):
+      if str(v) == 'nan':
+         raise ValueError, 'NaN present at index %d' % i
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/UniteAster.py b/Aster/Cata/cataSTA10/Utilitai/UniteAster.py
new file mode 100644 (file)
index 0000000..23864c1
--- /dev/null
@@ -0,0 +1,210 @@
+#@ MODIF UniteAster Utilitai  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import types
+
+import aster
+from Cata.cata import _F
+from Cata.cata import DEFI_FICHIER
+from Cata.cata import INFO_EXEC_ASTER
+from Cata.cata import DETRUIRE
+
+#-------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+class UniteAster:
+   """Classe pour manipuler les fichiers en Python en accord avec les unités
+   logiques utilisées en Fortran.
+   De manière analogue au Fortran, les états possibles d'une unité sont :
+      'F' : fermé, 'O' : ouvert, 'R' : réservé.
+
+   Méthodes :
+      Nom      : Retourne le nom du fichier associé à une unité,
+      Etat     : Retourne l'état d'une unité,
+      Libre    : Retourne un numéro d'unité libre,
+      EtatInit : Remet une, plusieurs ou toutes les unités dans leur état initial.
+
+   Méthode privée :
+      _setinfo : pour remplir le dictionnaire des 'infos'
+   Attribut privé :
+      infos[numéro unité] = { 'nom' : x, 'etat' : x , 'etat_init' : x }
+   """
+#-------------------------------------------------------------------------------
+   def __init__(self):
+      """Initialise le dictionnaire des unités.
+      """
+      self.infos = {}
+
+#-------------------------------------------------------------------------------
+   def _setinfo(self, ul):
+      """Remplit les infos de l'unité 'ul'.
+      """
+      # ul peut etre un entier Aster
+      try:
+         unit = ul.valeur
+      except:
+         unit = int(ul)
+      # Si la clé n'existe pas
+      ini = False
+      if not self.infos.has_key(unit):
+         self.infos[unit] = {}
+         self.infos[unit]['nom']       = ''
+         self.infos[unit]['etat']      = '?'
+         self.infos[unit]['etat_init'] = '?'
+         ini = True
+
+      __tab=INFO_EXEC_ASTER(UNITE=unit, LISTE_INFO=('ETAT_UNITE'))
+      
+      # O:ouvert, F:fermé, R:réservé
+      self.infos[unit]['etat'] = __tab['ETAT_UNITE',1].strip()[0]
+      if ini:
+         self.infos[unit]['etat_init'] = self.infos[unit]['etat']
+
+      # nom du fichier
+      if self.infos[unit]['etat'] in ['O', 'R']:
+         nomfich=''.join([__tab['NOMFIC%d' % i,1] for i in range(1,5)]).strip()
+      elif self.infos[unit]['etat'] == 'F':
+         nomfich='fort.'+str(unit)
+      else:
+         message = "Etat de l'unité inconnu : %s" % self.infos[unit]['etat']
+         print __tab.EXTR_TABLE()
+         raise aster.error,"<F> <UniteAster._setinfo> %s" % message
+      self.infos[unit]['nom'] = nomfich
+      #print 'DEBUG infos[unit] = ', self.infos[unit]
+      DETRUIRE(CONCEPT=_F(NOM=__tab),INFO=1)
+
+#-------------------------------------------------------------------------------
+   def Libre(self, nom=None, action='RESERVER'):
+      """Réserve/associe et retourne une unité libre en y associant, s'il est
+      fourni, le fichier 'nom'.
+      """
+      __tab=INFO_EXEC_ASTER(LISTE_INFO=('UNITE_LIBRE'))
+      unit = __tab['UNITE_LIBRE',1]
+      DETRUIRE(CONCEPT=_F(NOM=__tab),INFO=1)
+      if nom==None:
+         nom='fort.'+str(unit)
+
+      # Si la clé existe, c'est que le fichier n'était pas libre
+      if self.infos.has_key(unit):
+         message = "Cette unité est déjà affectée au fichier %s" % \
+            self.infos[unit]['nom']
+         raise aster.error,"<F> <UniteAster.Libre> %s" % message
+
+      DEFI_FICHIER(ACTION=action, UNITE=unit , FICHIER=nom.strip())
+      self.infos[unit] = {}
+      self.infos[unit]['nom']       = nom.strip()
+      self.infos[unit]['etat']      = 'R'
+      self.infos[unit]['etat_init'] = 'F'
+      return unit
+
+#-------------------------------------------------------------------------------
+   def Nom(self, ul):
+      """Retourne le nom du fichier associé à l'unité 'ul'.
+      """
+      # ul peut etre un entier Aster
+      try:
+         unit = ul.valeur
+      except:
+         unit = int(ul)
+      # Si la clé n'existe pas
+      if not self.infos.has_key(unit):
+         self._setinfo(unit)
+      return self.infos[unit]['nom']
+
+#-------------------------------------------------------------------------------
+   def Etat(self, ul, **kargs):
+      """Retourne l'état de l'unité si 'etat' n'est pas fourni
+      et/ou change son état :
+         kargs['etat']  : nouvel état,
+         kargs['nom']   : nom du fichier,
+         kargs['TYPE']  : type du fichier à ouvrir ASCII/BINARY/LIBRE,
+         kargs['ACCES'] : type d'accès NEW/APPEND/OLD (APPEND uniquement en ASCII).
+      """
+      # ul peut etre un entier Aster
+      try:
+         unit = ul.valeur
+      except:
+         unit = int(ul)
+      # Si la clé n'existe pas
+      if not self.infos.has_key(unit):
+         self._setinfo(unit)
+      if not kargs.has_key('etat'):
+         return self.infos[unit]['etat']
+
+      # En fonction de la demande, on bascule son état ou pas
+      new = kargs.get('etat')
+      if not new in ['R', 'F', 'O']:
+         message = "Nouvel état de l'unité incorrect : %s" % new
+         raise aster.error,"<F> <UniteAster.Etat> %s" % message
+
+      if self.infos[unit]['etat'] == new:
+         pass
+      elif new == 'R':
+         if self.infos[unit]['etat'] == 'O':
+            DEFI_FICHIER(ACTION='LIBERER',  UNITE=unit)
+         DEFI_FICHIER(ACTION  = 'RESERVER', 
+                      UNITE   = unit,
+                      FICHIER = kargs.get('nom', self.infos[unit]['nom']))
+         self._setinfo(unit)
+      elif new == 'F':
+         DEFI_FICHIER(ACTION='LIBERER', UNITE=unit)
+      elif new == 'O':
+         if self.infos[unit]['etat'] == 'R':
+            DEFI_FICHIER(ACTION='LIBERER', UNITE=unit)
+         # valeurs par défaut
+         typ   = kargs.get('TYPE', 'ASCII')
+         if typ == 'ASCII':
+            acces = 'APPEND'
+         else:
+            acces = 'OLD'
+         acces = kargs.get('ACCES', acces)
+         DEFI_FICHIER(ACTION  ='ASSOCIER',
+                      UNITE   = unit,
+                      FICHIER = kargs.get('nom', self.infos[unit]['nom']),
+                      TYPE    = typ,
+                      ACCES   = acces,)
+         self._setinfo(unit)
+      self.infos[unit]['etat'] = new
+      return self.infos[unit]['etat']
+
+#-------------------------------------------------------------------------------
+   def EtatInit(self, ul=None):
+      """Remet l'unité 'ul' dans son état initial.
+      Si 'ul' est omis, toutes les unités sont remises dans leur état initial.
+      """
+      if ul == None:
+         for uli, vul in self.infos.items():
+            self.Etat(uli, etat=vul['etat_init'])
+      else:
+         if not type(ul) in [types.ListType, types.TupleType]:
+            ul=[ul,]
+         for u in ul:
+            # u peut etre un entier Aster
+            try:
+               unit = u.valeur
+            except:
+               unit = int(u)
+            # Si la clé n'existe pas
+            if not self.infos.has_key(unit):
+               self._setinfo(unit)
+            else:
+               self.Etat(unit, etat=self.infos[unit]['etat_init'])
diff --git a/Aster/Cata/cataSTA10/Utilitai/Utmess.py b/Aster/Cata/cataSTA10/Utilitai/Utmess.py
new file mode 100644 (file)
index 0000000..3aa5242
--- /dev/null
@@ -0,0 +1,711 @@
+#@ MODIF Utmess Utilitai  DATE 14/03/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+import sys
+import traceback
+import imp
+import re
+
+# protection pour eficas
+try:
+    import aster
+    from aster import error
+    aster_exists = True
+    from Messages.context_info import message_context_concept
+except:
+    aster_exists = False
+    class error(Exception):
+        pass
+
+def _(s):
+    return s
+
+from Noyau.N_types import force_list
+
+
+MAXLENGTH = 132
+
+contacter_assistance = """
+Il y a probablement une erreur dans la programmation.
+Veuillez contacter votre assistance technique."""
+
+# voir en fin de fin les faux appels à UTMESS pour la vérification des messages
+
+
+def list_unit(code):
+    """Retourne la liste des noms de fichiers (logiques) sur lesquels doit
+    etre imprimé le message.
+    """
+    #IDF  = INDEX('EFIDASXZ', ...)
+    #'Z' (IDF=8) = LEVEE D'EXCEPTION
+    d = {
+        'E' : ('ERREUR', 'MESSAGE', 'RESULTAT'),
+        'I' : ('MESSAGE',),
+        'A' : ('MESSAGE', 'RESULTAT'),
+    }
+    d['F'] = d['S'] = d['Z'] = d['E']
+    d['X'] = d['A']
+    return d.get(code, d['F'])
+
+
+class MESSAGE_LOGGER:
+    """Classe gérant l'impression de messages.
+    On ne crée qu'une instance de ce type.
+    Cette instance est accessible via le module E_Global pour astermodule.c
+    """
+    def __init__(self):
+        """Initialisation
+        """
+        self.init_buffer()
+        
+        # est-ce qu'une erreur <E> s'est produite
+        self.erreur_E = False
+        
+        # compteur des alarmes émises { 'id_alarm' : count }
+        self.count_alarm = {}         # dans la commande courante (pour arret à 5)
+        self.count_alarm_tot = {}     # au total
+        
+        # alarmes à ignorer, à masquer (on ne les compte pas temporairement)
+        self._ignored_alarm = {}
+        self._hidden_alarm  = {}
+        
+        # on prépare le dictionnaire des valeurs par défaut des arguments (dicarg) :
+        self.default_args = {}
+        # initialisation des 10 premiers
+        for i in range(1,11):
+            self.default_args['i%d' % i] = 99999999
+            self.default_args['r%d' % i] = 9.9999E99
+            self.default_args['k%d' % i] = 'xxxxxx'
+
+
+    def __call__(self, *args, **kwargs):
+        """Raccourci pour simplifier l'appel depuis astermodule.c et UTMESS.
+        """
+        self.print_message(*args, **kwargs)
+
+
+    def print_message(self, code, idmess, valk=(), vali=(), valr=(),
+                            exception=False, print_as=None, cc=None):
+        """Appelé par la routine fortran U2MESG ou à la fonction python UTMESS
+        pour afficher un message.
+        L'impression de ce message est différée si le `code` est suivi d'un "+".
+            code  : 'A', 'E', 'S', 'F', 'I'
+            idmess : identificateur du message
+            valk, vali, valr : liste des chaines, entiers ou réels.
+        Si exception==True, on lève une exception en cas d'erreur, sinon
+        c'est l'appelant qui devra s'en charger (dans le C a priori).
+        'print_as' : cf. print_buffer_content.
+        """
+        # le '+' n'a pas de sens pour les messages 'I'.
+        if code == "I+":
+            code = "I"
+        # récupération du texte du message
+        dictmess = self.get_message(code, idmess, valk, vali, valr)
+        
+        # on le met dans le buffer
+        self.add_to_buffer(dictmess)
+        
+        # si on n'attend pas une suite, ...
+        if len(code) < 2 or code[1] != '+':
+            # mise à jour des compteurs
+            self.update_counter()
+            
+            # on imprime le message en attente
+            self.print_buffer_content(print_as, cc)
+
+            if exception and code[0] in ('S', 'F'):
+                raise error(idmess, valk, vali, valr)
+        
+        return None
+
+
+    def build_dict_args(self, valk, vali, valr):
+        """Construit le dictionnaire de formatage du message.
+        """
+        # homogénéisation : uniquement des tuples + strip des chaines de caractères
+        valk, vali, valr = map(force_list, (valk, vali, valr))
+        valk    = [k.strip() for k in valk]
+        
+        # variables passées au message
+        dicarg = self.default_args.copy()
+        for i in range(1,len(valk)+1):
+            dicarg['k%d' % i] = valk[i-1]
+        for i in range(1,len(vali)+1):
+            dicarg['i%d' % i] = vali[i-1]
+        for i in range(1,len(valr)+1):
+            dicarg['r%d' % i] = valr[i-1]
+        # valeur spéciale : ktout = concaténation de toutes les chaines
+        dicarg['ktout'] = ' '.join(valk)
+    
+        return dicarg
+
+
+    def get_message(self, code, idmess, valk=(), vali=(), valr=()):
+        """Retourne le texte du message dans un dictionnaire dont les clés sont :
+            'code', 'id_message', 'corps_message'
+        """
+        # décodage : idmess => (catamess, numess)
+        idmess  = idmess.strip()
+        x = idmess.split("_")
+        assert len(x) > 1, idmess
+        catamess='_'.join(x[0:-1]).lower()
+        numess = int(x[-1])
+        assert numess > 0 and numess < 100, idmess
+    
+        # import catamess => cata_msg
+        try:
+            mod = __import__('Messages.%s' % catamess, globals(), locals(), [catamess])
+            # si le dictionnaire n'existe pas, on alertera au moment du formatage.
+            cata_msg = getattr(mod, 'cata_msg', {})
+        except Exception, msg:
+            # doit permettre d'éviter la récursivité (catamess réservé à Utmess)
+            if catamess != 'catamess':
+                self.print_message('A', 'CATAMESS_57', valk=(catamess, str(msg)))
+            cata_msg = {}
+        
+        # corps du message
+        try:
+            dicarg = self.build_dict_args(valk, vali, valr)
+
+            # cata_msg[num] = 'format'
+            #              ou {'message' : 'format', 'context' : 'éléments de contexte'}
+            if type(cata_msg[numess]) == dict:
+                fmt_msg  = cata_msg[numess]['message']
+                ctxt_msg = cata_msg[numess]['context']
+            else:
+                fmt_msg  = cata_msg[numess]
+                ctxt_msg = None
+            
+            dictmess = {
+                'code'          : code,
+                'id_message'    : idmess,
+                'corps_message' : fmt_msg % dicarg,
+                'context_info'  : self.get_context(ctxt_msg, idmess, dicarg),
+            }
+        except Exception, msg:
+            dictmess = {
+                'code'          : code,
+                'id_message'    : '',
+                'corps_message' : """Erreur de programmation.
+Le message %s n'a pas pu etre formaté correctement.
+Arguments :
+    entiers : %s
+    réels   : %s
+    chaines : %s
+--------------------------------------------------------------------------
+%s
+Exception : %s
+--------------------------------------------------------------------------
+
+%s""" \
+        % (idmess, vali, valr, valk, ''.join(traceback.format_tb(sys.exc_traceback)), msg, contacter_assistance),
+                'context_info'  : '',
+            }
+        # limite la longueur des ligness
+        dictmess['corps_message'] = cut_long_lines(dictmess['corps_message'], MAXLENGTH)
+        return dictmess
+
+
+    def GetText(self, *args, **kwargs):
+        """Retourne le texte du message pret a etre imprime.
+        """
+        return self.format_message(self.get_message(*args, **kwargs))
+
+
+    def init_buffer(self):
+        """Initialise le buffer.
+        """
+        self._buffer = []
+
+
+    def add_to_buffer(self, dictmess):
+        """Ajoute le message décrit dans le buffer en vue d'une impression
+        ultérieure.
+        """
+        self._buffer.append(dictmess)
+
+
+    def get_current_code(self):
+        """Retourne le code du message du buffer = code du message le plus grave
+        (cf. dgrav)
+        """
+        dgrav = { '?' : -9, 'I' : 0, 'A' : 1, 'S' : 4, 'Z' : 4, 'E' : 6, 'F' : 10 }
+        
+        current = '?'
+        for dictmess in self._buffer:
+            code = dictmess['code'][0]
+            if dgrav.get(code, -9) > dgrav.get(current, -9):
+                current = code
+        
+        return current
+
+
+    def get_current_id(self):
+        """Retourne l'id du message du buffer = id du premier message
+        """
+        return self._buffer[0]['id_message']
+
+
+    def print_buffer_content(self, print_as=None, cc=None):
+        """Extrait l'ensemble des messages du buffer dans un dictionnaire unique,
+        imprime le message, et vide le buffer pour le message suivant.
+            - code : celui du message le plus grave (cf. dgrav)
+            - id   : celui du premier message qui est affiché
+            - corps : concaténation de tous les messages.
+        'print'_as permet d'imprimer un message sur des fichiers autres que les fichiers
+        habituels de 'code'. Par ex, imprimer un message d'info sur 'ERREUR'.
+        'cc' : liste de noms de fichiers ou objets fichier dans lesquels copier le message
+        """
+        if len(self._buffer) < 1:
+            return None
+        
+        # construction du dictionnaire du message global
+        dglob = {
+            'code'          : self.get_current_code(),
+            'id_message'    : self.get_current_id(),
+            'liste_message' : [],
+            'liste_context' : [],
+        }
+        for dictmess in self._buffer:
+            dglob['liste_message'].append(dictmess['corps_message'])
+            dglob['liste_context'].append(dictmess['context_info'])
+        dglob['corps_message'] = ''.join(dglob['liste_message'])
+        dglob['context_info'] = ''.join(dglob['liste_context'])
+        
+        # liste des unités d'impression en fonction du type de message
+        l_unit = list_unit(print_as or dglob['code'])
+        
+        # texte final et impression
+        txt = self.format_message(dglob)
+        for unite in l_unit:
+            self.affiche(unite, txt)
+        # "cc"
+        if cc:
+            copy_text_to(txt, cc)
+        
+        self.init_buffer()
+
+
+    def disable_alarm(self, idmess, hide=False):
+        """Ignore l'alarme "idmess".
+        """
+        if hide:
+            self._hidden_alarm[idmess] = self._hidden_alarm.get(idmess, 0) + 1
+        else:
+            self._ignored_alarm[idmess] = self._ignored_alarm.get(idmess, 0) + 1
+
+    def reset_alarm(self, idmess, hide=False):
+        """Réactive l'alarme "idmess".
+        """
+        if hide:
+            self._hidden_alarm[idmess] = min(self._hidden_alarm.get(idmess, 0) - 1, 0)
+        else:
+            self._ignored_alarm[idmess] = min(self._ignored_alarm.get(idmess, 0) - 1, 0)
+
+    def is_alarm_disabled(self, idmess):
+        """Doit-on ignorer l'alarme "idmess" ?
+        """
+        return self._ignored_alarm.get(idmess, 0) + self._hidden_alarm.get(idmess, 0) > 0
+
+    def info_alarm(self, only_ignored=False):
+        """Fournit les infos sur les alarmes activées.
+        """
+        s_alarm = set(self._ignored_alarm.keys())
+        if not only_ignored:
+            s_alarm.update(self.count_alarm_tot.keys())
+        l_alarm = list(s_alarm)
+        l_alarm.sort()
+        # on sépare des éventuels messages en attente
+        self.print_buffer_content()
+        # entete
+        dictmess = self.get_message('I', 'CATAMESS_89')
+        self.add_to_buffer(dictmess)
+        # occurrences
+        ieff = 0
+        for idmess in l_alarm:
+            mark = ' '
+            ieff += 1
+            if self._ignored_alarm.get(idmess) is not None:
+                mark = '(*)'
+            dictmess = self.get_message('I', 'CATAMESS_90', valk=(mark, idmess),
+                                     vali=self.count_alarm_tot.get(idmess, 0))
+            self.add_to_buffer(dictmess)
+        if ieff == 0:
+            dictmess = self.get_message('I', 'CATAMESS_92')
+            self.add_to_buffer(dictmess)
+        # fermeture
+        dictmess = self.get_message('I', 'CATAMESS_91')
+        self.add_to_buffer(dictmess)
+        self.print_buffer_content(print_as='A')
+
+
+    def update_counter(self):
+        """Mise à jour des compteurs et réaction si besoin.
+        """
+        nmax_alarm = 5
+        code = self.get_current_code()
+        if   code == 'E':
+            self.erreur_E = True
+        elif code == 'F':
+            self.erreur_E = False
+        elif code == 'A':
+            idmess = self.get_current_id()
+            # nombre d'occurrence de cette alarme (sauf si cachee)
+            if self._hidden_alarm.get(idmess, 0) == 0:
+                self.count_alarm[idmess]     = self.count_alarm.get(idmess, 0) + 1
+                self.count_alarm_tot[idmess] = self.count_alarm_tot.get(idmess, 0) + 1
+            
+            if self.is_alarm_disabled(idmess) or self.count_alarm[idmess] > nmax_alarm:
+                # ignorer l'alarme ou count_alarm > max, on vide le buffer
+                self.init_buffer()
+            elif self.count_alarm[idmess] == nmax_alarm:
+                # Pour mettre en relief le message CATAMESS_41, on le sépare
+                # de la dernière alarme
+                self.print_buffer_content()
+                dictmess = self.get_message(code, 'CATAMESS_41',
+                                        valk=idmess, vali=nmax_alarm)
+                self.add_to_buffer(dictmess)
+
+
+    def check_counter(self, info_alarm=0, silent=0):
+        """Méthode "jusqu'ici tout va bien" ! (Interface C : chkmsg)
+        Si des erreurs <E> se sont produites, on arrete le code en <F>.
+        Appelée par FIN ou directement au cours de l'exécution d'une commande.
+        Retourne un entier : 0 si tout est ok.
+        Si silent==1, on n'émet pas de message, on ne s'arrete pas.
+        """
+        iret = 0
+        if self.erreur_E:
+            iret = 4
+            self.erreur_E = False
+            if not silent:
+                self.print_message('F', 'CATAMESS_6', exception=True)
+        if info_alarm:
+            self.info_alarm()
+        return iret
+
+
+    def reset_command(self):
+        """Méthode appelée entre les commandes. (Interface C : resmsg)
+        On remet à zéro le compteur d'alarme,
+        on vérifie les erreurs <E> en attente."""
+        iret = self.check_counter()
+        # reset des alarmes
+        self.count_alarm = {}
+
+
+    def format_message(self, dictmess):
+        """Formate le message décrit dans un dico :
+            'code'          : A, E, S, F, I
+            'id_message'    : identification du message
+            'corps_message' : texte
+        """
+        charh = '-'    # horizontal
+        charv = '!'    # vertical
+        charc = '!'    # coin
+        dcomm = {
+            'A' : _("""Ceci est une alarme. Si vous ne comprenez pas le sens de cette
+alarme, vous pouvez obtenir des résultats inattendus !"""),
+            'E' : _("""Cette erreur sera suivie d'une erreur fatale."""),
+            'S' : _("""Cette erreur est fatale. Le code s'arrete. Toutes les étapes
+du calcul ont été sauvées dans la base jusqu'au moment de l'arret."""),
+            'F' : _("""Cette erreur est fatale. Le code s'arrete."""),
+        }
+        
+        # format complet
+        format_general = {
+            'decal'  : '   ',
+            'header' : """<%(type_message)s> %(str_id_message)s""",
+            'ligne'  : '%(charv)s %%-%(maxlen)ds %(charv)s',
+            'corps'  : """%(header)s
+
+%(corps_message)s
+%(context_info)s
+
+%(commentaire)s
+""",
+            'final'  : """
+%(separateur)s
+%(corps)s
+%(separateur)s
+
+""",
+        }
+        # format light pour les infos
+        format_light = {
+            'decal'  : '',
+            'header' : """<%(type_message)s> """,
+            'ligne'  : '%%s',
+            'corps'  : """%(corps_message)s
+%(context_info)s""",
+            'final'  : """%(corps)s""",
+        }
+        dmsg = dictmess.copy()
+        dmsg['type_message'] = self.get_type_message(dictmess['code'])
+        if dmsg['id_message'] != 'I':
+            dmsg['str_id_message'] = '<%s>' % dmsg['id_message']
+        else:
+            dmsg['str_id_message'] = ''
+        
+        # format utilisé
+        format = format_general
+        if dmsg['type_message'] == 'I':
+            format = format_light
+        if format is format_general:
+            dmsg['corps_message'] = dmsg['corps_message'].strip()
+        
+        dmsg['header']      = format['header'] % dmsg
+        dmsg['commentaire'] = dcomm.get(dmsg['type_message'], '')
+        if re.search('^DVP', dmsg['id_message']) != None:
+            dmsg['commentaire'] += contacter_assistance
+        
+        dmsg['corps']       = format['corps'] % dmsg
+        if format is format_general:
+            dmsg['corps'] = dmsg['corps'].strip()
+        
+        
+        # longueur de la ligne la plus longue
+        l_line = dmsg['corps'].splitlines()
+        maxlen = max([len(line) for line in l_line])
+        
+        # format des lignes sur maxlen caractères
+        dlin = {
+            'charh'  : charh,
+            'charv'  : charv,
+            'charc'  : charc,
+            'maxlen' : maxlen
+        }
+        fmt_line = format['ligne'] % dlin
+        
+        # on formate toutes les lignes
+        txt = [fmt_line % line for line in l_line]
+        dmsg['corps'] = os.linesep.join(txt)
+        dmsg['separateur'] = charc + charh * (maxlen + 2) + charc
+        
+        # ligne haut et bas
+        newtxt = format['final'] % dmsg
+        # on décale
+        l_txt = [format['decal'] + line for line in newtxt.splitlines()]
+        
+        return clean_string(os.linesep.join(l_txt))
+
+
+    def get_type_message(self, code):
+        """Retourne le type du message affiché.
+        En cas d'erreur, si on lève une exception au lieu de s'arreter,
+        on n'affiche pas le type de l'erreur pour ne pas fausser le diagnostic
+        """
+        typmess = code.strip()
+        if self.onFatalError().startswith('EXCEPTION'):
+            if typmess in ('E', 'F'):
+                typmess = 'EXCEPTION'
+        # dans tous les cas, pour S et Z (exception), on affiche EXCEPTION.
+        if typmess in ('Z', 'S'):
+            typmess = 'EXCEPTION'
+        return typmess
+
+
+    def get_context(self, ctxt_msg, idmess, dicarg):
+        """Prise en compte du context du message pour donner d'autres infos
+        à l'utilisateur.
+        ctxt_msg est un dictionnaire. Les clés traitées sont :
+            - CONCEPT
+        """
+        if not ctxt_msg:
+            return ''
+        msg = []
+        # tout dans un try/except car c'est du bonus, il ne faudrait pas planter !
+        try:
+            if ctxt_msg.has_key('CONCEPT'):
+                l_co =  [dicarg[arg] for arg in force_list(ctxt_msg['CONCEPT'])]
+                for co in l_co:
+                    msg.append(message_context_concept(co))
+        except:
+            pass
+        return os.linesep.join(msg)
+
+
+    # définitions pour fonctionner sans le module aster
+    def affiche(self, unite, txt):
+        """Affichage du message"""
+        if aster_exists:
+            aster.affiche(unite, txt)
+        else:
+            print txt
+
+
+    def onFatalError(self):
+        """Récupérer le comportement en cas d'erreur fatale."""
+        if aster_exists:
+            return aster.onFatalError()
+        else:
+            return 'EXCEPTION'
+
+
+def clean_string(chaine):
+    """Supprime tous les caractères non imprimables.
+    """
+    invalid = '?'
+    txt = []
+    for c in chaine:
+        if ord(c) != 0:
+            txt.append(c)
+        else:
+            txt.append(invalid)
+    return ''.join(txt)
+
+
+def maximize_lines(l_fields, maxlen, sep):
+    """Construit des lignes dont la longueur est au plus de `maxlen` caractères.
+    Les champs sont assemblés avec le séparateur `sep`.
+    """
+    newlines = []
+    while len(l_fields) > 0:
+        cur = []
+        while len(l_fields) > 0 and len(sep.join(cur + [l_fields[0],])) <= maxlen:
+            cur.append(l_fields.pop(0))
+        newlines.append(sep.join(cur))
+    newlines = [l for l in newlines if l != '']
+    return newlines
+
+def cut_long_lines(txt, maxlen, sep=os.linesep,
+                   l_separ=(' ', ',', ';', '.', ':')):
+    """Coupe les morceaux de `txt` (isolés avec `sep`) de plus de `maxlen`
+    caractères.
+    On utilise successivement les séparateurs de `l_separ`.
+    """
+    l_lines = txt.split(sep)
+    newlines = []
+    for line in l_lines:
+        if len(line) > maxlen:
+            l_sep = list(l_separ)
+            line = cut_long_lines(line, maxlen, l_sep[0], l_sep[1:])
+            line = maximize_lines(line, maxlen, l_sep[0])
+            newlines.extend(line)
+        else:
+            newlines.append(line)
+    # au plus haut niveau, on assemble le texte
+    if sep == os.linesep:
+        newlines = os.linesep.join(newlines)
+    return newlines
+
+
+def copy_text_to(text, files):
+    """Imprime le texte dans les fichiers.
+    """
+    files = force_list(files)
+    for f in files:
+        assert type(f) in (str, file)
+        if type(f) == file:
+            fobj = file
+        else:
+            fobj = open(f, 'a')
+            # should be closed automatically
+        fobj.write(text)
+        fobj.write(os.linesep)
+        fobj.flush()
+
+
+# unique instance du MESSAGE_LOGGER
+MessageLog = MESSAGE_LOGGER()
+
+
+def UTMESS(code, idmess, valk=(), vali=(), valr=(), print_as=None, cc=None):
+    """Utilitaire analogue à la routine fortran U2MESS/U2MESG avec les arguments
+    optionnels.
+        code   : 'A', 'E', 'S', 'F', 'I'
+        idmess : identificateur du message
+        valk, vali, valr : liste des chaines, entiers ou réels.
+    
+    Appel sans valeurs :                avec valeurs :
+        UTMESS('A', 'SUPERVIS_40')          UTMESS('A', 'SUPERVIS_40', vali=[1, 2])
+    
+    Remarques :
+        - Nommer les arguments permet de ne pas tous les passer.
+        - Meme fonctionnement que U2MESG :
+            + appel à MessageLog
+            + puis exception ou abort en fonction du niveau d'erreur.
+    """
+    MessageLog(code, idmess, valk, vali, valr, exception=True, print_as=print_as, cc=cc)
+
+
+def ASSERT(condition, message=""):
+    """Remonter un assert dans un message.
+    """
+    if condition:
+        return
+    stack = traceback.format_stack(limit=10)
+    UTMESS('F', 'DVP_9', valk=[(''.join(stack[:-1]),), message])
+
+
+def message_exception(code, exc):
+    """Retourne le message associé à une exception aster.error
+    tel qu'il aurait été imprimé par UTMESS selon la valeur de
+    `code` ('I', 'A', 'S', 'F', 'Z'...)."""
+    return MessageLog.GetText(code, exc.id_message,
+                              exc.valk, exc.vali, exc.valr)
+
+
+def MasquerAlarme(idmess):
+    """Masque une alarme : ni affichee, ni comptee.
+    Utilisation dans les macros :
+        MasquerAlarme(XXX)  au debut de la macro
+        RetablirAlarme(XXX) a la fin de la macro
+    Comme il s'agit d'un compteur qui est incremente puis decremente, il est
+    imperatif qu'il y ait autant d'appel a MasquerAlarme qu'a RetablirAlarme.
+    """
+    MessageLog.disable_alarm(idmess, hide=True)
+
+
+def RetablirAlarme(idmess):
+    """Retablit l'etat initial pour l'alarme 'idmess'.
+    """
+    MessageLog.reset_alarm(idmess, hide=True)
+
+
+# faux appels à UTMESS
+def __fake__():
+    UTMESS('I', 'SUPERVIS_40')    # surcharge émis par asrun
+    UTMESS('I', 'SUPERVIS_96')    # émis depuis le C (inisig)
+    UTMESS('I', 'SUPERVIS_97')    # émis depuis le C (inisig)
+    UTMESS('I', 'GENERIC_1')      # dans des tests pour traiter les exceptions
+    UTMESS('I', 'CATAMESS_6')
+    UTMESS('I', 'CATAMESS_41')
+    UTMESS('I', 'CATAMESS_55')    # pour u2mesg.f
+    UTMESS('I', 'CATAMESS_57')
+    UTMESS('I', 'CATAMESS_69')    # pour u2mesg.f
+    UTMESS('I', 'CATAMESS_70')    # pour u2mesg.f
+    UTMESS('I', 'CATAMESS_89')
+    UTMESS('I', 'CATAMESS_90')
+    UTMESS('I', 'CATAMESS_91')
+    UTMESS('I', 'CATAMESS_92')
+    # appelé par levé d'exception
+    UTMESS('I', 'MISS0_3')
+    UTMESS('I', 'MISS0_5')
+    UTMESS('I', 'MISS0_6')
+    UTMESS('I', 'MISS0_7')
+    UTMESS('I', 'MISS0_8')
+    UTMESS('I', 'MISS0_9')
+    UTMESS('I', 'MISS0_11')
+    UTMESS('I', 'MISS0_17')
+
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/__init__.py b/Aster/Cata/cataSTA10/Utilitai/__init__.py
new file mode 100644 (file)
index 0000000..b51eff5
--- /dev/null
@@ -0,0 +1,21 @@
+#@ MODIF __init__ Utilitai  DATE 20/09/2004   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/as_timer.py b/Aster/Cata/cataSTA10/Utilitai/as_timer.py
new file mode 100644 (file)
index 0000000..892cecf
--- /dev/null
@@ -0,0 +1,272 @@
+#@ MODIF as_timer Utilitai  DATE 05/09/2008   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""
+   Definition of ASTER_TIMER class.
+"""
+
+__revision__ = "$Id: as_timer.py,v 1.1.2.1 2011-05-13 14:43:07 barate Exp $"
+
+# ----- differ messages translation
+def _(mesg):
+   return mesg
+
+import os
+import time
+
+#-------------------------------------------------------------------------------
+def _dtimes():
+   """Returns a dict of cpu, system and total times.
+   """
+   l_t = os.times()
+   return { 'cpu'   : (l_t[0], l_t[2]),
+            'sys'   : (l_t[1], l_t[3]),
+            'tot'   : l_t[4], }
+
+#-------------------------------------------------------------------------------
+def _conv_hms(t):
+   """Convert a number of seconds in hours, minutes, seconds.
+   """
+   h = int(t/3600)
+   m = int(t % 3600)/60
+   s = (t % 3600) % 60
+   return h, m, s
+
+#-------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+class ASTER_TIMER:
+   """This class provides methods to easily measure time spent during
+   different steps.
+   Methods :
+      Start : start a timer in mode 'INIT' ([re]start from 0) or 'CONT'
+         (restart from last value).
+      Stop  : stop a timer
+   Attributes :
+      timers : dict {
+         timer_id : {
+            'name'   : timer legend (=timer_id by default),
+            'state'  : state,
+            'cpu_t0' : initial cpu time,
+            'cpu_dt' : spent cpu time,
+            'sys_t0' : initial system time,
+            'sys_dt' : spent system time,
+            'tot_t0' : start time,
+            'tot_dt' : total spent time,
+            'num'    : timer number (to print timers in order of creation),
+            'hide'   : boolean,
+         },
+         ...
+      }
+         state is one of 'start', 'stop'
+   """
+   MaxNumTimer = 9999999
+
+#-------------------------------------------------------------------------------
+   def __init__(self, add_total=True, format='as_run'):
+      """Constructor
+      """
+      # ----- initialisation
+      self.timers = {}
+      self.add_total = add_total
+      
+      if not format in ('as_run', 'aster'):
+         format = 'as_run'
+      
+      if format == 'as_run':
+         self.fmtlig = '   %(name)-33s  %(cpu_dt)9.2f  %(sys_dt)9.2f  %(cpu_sys)9.2f  %(tot_dt)9.2f'
+         self.fmtstr = '   %(title)-33s  %(cpu)9s  %(sys)9s  %(cpu+sys)9s  %(elapsed)9s'
+         self.sepa   = ' ' + '-'*81
+         self.TotalKey = _('Total time')
+         self.d_labels = {
+            'title'   : '',
+            'cpu'     : _('cpu'),
+            'sys'     : _('system'),
+            'cpu+sys' : _('cpu+sys'),
+            'elapsed' : _('elapsed'),
+         }
+      elif format == 'aster':
+         self.fmtlig = ' * %(name)-24s : %(cpu_dt)10.2f : %(sys_dt)10.2f : %(cpu_sys)10.2f : %(tot_dt)10.2f *'
+         self.fmtstr = ' * %(title)-24s : %(cpu)10s : %(sys)10s : %(cpu+sys)10s : %(elapsed)10s *'
+         self.sepa   = ' ' + '*'*80
+         self.TotalKey = 'TOTAL_JOB'
+         self.d_labels = {
+            'title'   : 'COMMAND',
+            'cpu'     : 'USER',
+            'sys'     : 'SYSTEM',
+            'cpu+sys' : 'USER+SYS',
+            'elapsed' : 'ELAPSED',
+         }      
+      
+      self.total_key = id(self)
+      if self.add_total:
+         self.Start(self.total_key, name=self.TotalKey, num=self.MaxNumTimer)
+
+#-------------------------------------------------------------------------------
+   def Start(self, timer, mode='CONT', num=None, hide=None, name=None):
+      """Start a new timer or restart one
+      """
+      name = name or str(timer)
+      isnew = self.timers.get(timer) is None
+      if not num:
+         num = len(self.timers)
+      if mode == 'INIT':
+         num = self.timers[timer]['num']
+      dico = _dtimes()
+      if isnew or mode == 'INIT':
+         self.timers[timer] = {
+            'name'   : name,
+            'state'  : 'start',
+            'cpu_t0' : dico['cpu'],
+            'cpu_dt' : 0.,
+            'sys_t0' : dico['sys'],
+            'sys_dt' : 0.,
+            'tot_t0' : dico['tot'],
+            'tot_dt' : 0.,
+            'num'    : num,
+            'hide'   : hide,
+         }
+      elif mode == 'CONT' and self.timers[timer]['state'] == 'stop':
+         self.timers[timer].update({
+            'state'  : 'start',
+            'cpu_t0' : dico['cpu'],
+            'sys_t0' : dico['sys'],
+            'tot_t0' : dico['tot'],
+         })
+
+#-------------------------------------------------------------------------------
+   def Add(self, timer, cpu_dt=0., sys_dt=0., to_total=False):
+      """Add dt values (hidden to os.times, for example under mpirun) to a timer.
+      """
+      if self.timers.get(timer) is not None:
+         self.timers[timer]['cpu_dt'] += cpu_dt
+         self.timers[timer]['sys_dt'] += sys_dt
+      if to_total and timer != self.total_key:
+         self.Add(self.total_key, cpu_dt, sys_dt)
+      
+#-------------------------------------------------------------------------------
+   def Stop(self, timer, hide=None):
+      """Stop a timer
+      """
+      if self.timers.get(timer) is None:
+         self.timers[timer] = {
+            'name'   : str(timer),
+            'hide'   : hide,
+            'state'  : 'stop',
+            'cpu_t0' : 0.,
+            'cpu_dt' : 0.,
+            'sys_t0' : 0.,
+            'sys_dt' : 0.,
+            'tot_t0' : 0.,
+            'tot_dt' : 0.,
+            'num': len(self.timers),
+         }
+      elif self.timers[timer]['state'] == 'start':
+         dico = _dtimes()
+         self.timers[timer]['state'] = 'stop'
+         for i in range(len(dico['cpu'])):
+            self.timers[timer]['cpu_dt'] += \
+               dico['cpu'][i] - self.timers[timer]['cpu_t0'][i]
+         self.timers[timer]['cpu_t0'] = dico['cpu']
+         for i in range(len(dico['sys'])):
+            self.timers[timer]['sys_dt'] += \
+               dico['sys'][i] - self.timers[timer]['sys_t0'][i]
+         self.timers[timer]['sys_t0'] = dico['sys']
+         self.timers[timer]['tot_dt'] = self.timers[timer]['tot_dt'] + \
+               dico['tot'] - self.timers[timer]['tot_t0']
+         self.timers[timer]['tot_t0'] = dico['tot']
+         if hide is not None:
+            self.timers[timer]['hide'] = hide
+
+#-------------------------------------------------------------------------------
+   def StopAndGet(self, timer, *args, **kwargs):
+      """Stop a timer and return "delta" values.
+      """
+      self.Stop(timer, *args, **kwargs)
+      cpu_dt  = self.timers[timer]['cpu_dt']
+      sys_dt  = self.timers[timer]['sys_dt']
+      tot_dt  = self.timers[timer]['tot_dt']
+      return cpu_dt, sys_dt, tot_dt
+
+#-------------------------------------------------------------------------------
+   def StopAndGetTotal(self):
+      """Stop the timer and return total "delta" values.
+      """
+      return self.StopAndGet(self.total_key)
+
+#-------------------------------------------------------------------------------
+   def getsortedtimers(self):
+      """Return timers list sorted by timer number.
+      """
+      lnum = [[timer['num'], timer] for timer in self.timers.values() if timer['hide'] is not True]
+      lnum.sort()
+      return lnum
+
+#-------------------------------------------------------------------------------
+   def StopAll(self):
+      """Stop all timers
+      """
+      lk = self.timers.keys()
+      if self.add_total:
+         lk.remove(self.total_key)
+      for timer in lk:
+         self.Stop(timer)
+
+#-------------------------------------------------------------------------------
+   def __repr__(self):
+      """Pretty print content of the timer.
+      NB : call automatically StopAll
+      """
+      self.StopAll()
+      if self.add_total:
+         self.Stop(self.total_key)
+      
+      labels = self.fmtstr % self.d_labels
+      out = ['']
+      # get timers list and sort by 'num'
+      lnum = self.getsortedtimers()
+      if lnum:
+         out.append(self.sepa)
+         if self.add_total and labels:
+            out.append(labels)
+            out.append(self.sepa)
+      for num, timer in lnum:
+         d_info = timer.copy()
+         d_info['cpu_sys'] = d_info['cpu_dt'] + d_info['sys_dt']
+         if self.add_total and num == self.MaxNumTimer and len(lnum)>1:
+            out.append(self.sepa)
+         out.append(self.fmtlig % d_info)
+      if lnum:
+         out.append(self.sepa)
+      out.append('')
+      return os.linesep.join(out)
+
+#-------------------------------------------------------------------------------
+if __name__ == '__main__':
+   chrono = ASTER_TIMER(format='aster')
+   chrono.Start('Compilation')
+   chrono.Start('CALC_FONCTION')
+   chrono.Start(23, name='CALC_FONCTION')
+   time.sleep(0.4)
+   chrono.Stop('Compilation')
+   chrono.Stop(23)
+   chrono.Start('Child')
+   print chrono
diff --git a/Aster/Cata/cataSTA10/Utilitai/courbes.py b/Aster/Cata/cataSTA10/Utilitai/courbes.py
new file mode 100644 (file)
index 0000000..5f8f66a
--- /dev/null
@@ -0,0 +1,135 @@
+#@ MODIF courbes Utilitai  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+#==================================================
+# fonction "COURBES"
+# usage : permet de tracer des courbes en interactif
+# avec XMGRACE ou dans un fichier postscript
+#==================================================
+
+import Stanley
+from Stanley import xmgrace
+from Stanley import as_courbes
+
+def COURBES(listcourb,titre=' ',soustitre=' ',legx=' ',legy=' ',bornex=None,borney=None,fichier=None):
+
+# ARGUMENTS 
+
+# listcourb : tuple de courbes, chaque courbe etant definie soit par 
+#             (TABLE1, NOM_PARA_X, TABLE2, NOM_PARA_Y, LEGENDE)
+# soit par :
+#             (FONCTION,LEGENDE)
+# titre et sous_titre : facultatifs, titre et sous-tritre du graphique
+# legx, legy          : facultatifs, legendes des axes
+# bornex, borney      : facultatifs, bornes sur les axes
+# fichier             : facultatif : sortie au format postscript si present
+#
+# exemples  d'appel :
+#--------------------
+# courb1=(SYYPRT,'ABSC_CURV',SYYPRT,'SIYY','PRT')
+# courb2=(SYYMLC10,'ABSC_CURV',SYYMLC10,'SIYY','MLC10')
+# courb3=(SYYML100,'ABSC_CURV',SYYML100,'SIYY','MLC100')
+# listcourb=(courb1,courb2,courb3)
+# COURBES(listcourb,titre='Plaque trouee',legx='Abcisses curvilignes',legy='Contraintes (MPa)',bornex=(0,100),borney=(500,1000))
+# fonc1=(F1,'F_PRT')
+# fonc2=(F2,'F_MLC10')
+# fonc3=(F3,'F_MLC100')
+# listfonc=(fonc1,fonc2,fonc3)
+# COURBES(listfonc,titre='Fonctions')
+# postscript
+# COURBES(listfonc,titre='Plaque trouee',fichier='./fort.24')
+#--------------------------------------------------------------
+
+# initialisation du trace de  courbes
+
+  if (fichier!=None):
+     graphe=xmgrace.Xmgr(10,' -hardcopy -nosafe')
+     print "Nombre de courbes  ",len(listcourb)," sur le fichier :",fichier
+
+  else:
+     graphe=xmgrace.Xmgr(10,' -noask')
+     print "Nombre de courbes  ",len(listcourb)
+
+  graphe.Nouveau_graphe()
+
+# dimensionnement des axes 
+  if bornex != None : 
+     xmin=list(bornex)[0]
+     xmax=list(bornex)[1]
+     ctest1 = as_courbes.Courbe()
+     ctest1.x=[xmin,xmax]
+     ctest1.y=[0.0,0.0]
+     graphe.Courbe(ctest1)
+
+  if borney != None : 
+     ymin=list(borney)[0]
+     ymax=list(borney)[1]
+     ctest2 = as_courbes.Courbe()
+     ctest2.x=[0.0,0.0]
+     ctest2.y=[ymin,ymax]
+     graphe.Courbe(ctest2)
+
+  if titre != None :
+     if soustitre != None :
+        graphe.Titre(titre,soustitre)
+     else :
+        graphe.Titre(titre,' ')
+     
+  if legx != None :
+     graphe.Axe_x(legx)
+     
+  if legy != None :
+     graphe.Axe_y(legy)
+
+  k = 0
+       
+  for courbi in listcourb:
+     sigi = as_courbes.Courbe()
+     
+     try :
+        # cas d une table
+        sigi.Lire_x(courbi[0],courbi[1])
+        sigi.Lire_y(courbi[2],courbi[3])
+        legende=courbi[4]
+     except :
+        # cas d une fonction
+        sigi.x,sigi.y=courbi[0].Valeurs()
+        legende=courbi[1]
+
+     graphe.Courbe(sigi,legende)
+     graphe.Send('WITH G'+repr(graphe.gr_act))
+     graphe.Send('S' + str(k) + ' SYMBOL ' + str(k+2))
+     graphe.Send('S' + str(k) + ' SYMBOL SIZE 0.5')
+     graphe.Send('S' + str(k) + ' SYMBOL COLOR '+str(k+2))
+     graphe.Send('S' + str(k) + ' LINE COLOR '+str(k+2))
+     k = k + 1
+     graphe.Send('REDRAW')
+  
+  if (fichier!=None):
+     graphe.Sortie_EPS(fichier)
+     graphe.Fermer()
+  else:
+     graphe.Attendre()
+
+  k=0
+
+#===========================================
+
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/funct_root.py b/Aster/Cata/cataSTA10/Utilitai/funct_root.py
new file mode 100644 (file)
index 0000000..da488cf
--- /dev/null
@@ -0,0 +1,95 @@
+#@ MODIF funct_root Utilitai  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+################################################################################
+#       Mathematical utility routines
+#       Copyright (C) 1999, Wesley Phoa
+#
+#       Reference: Numerical Recipes in C
+#       [[[[extraits]]]]
+
+class BracketingException(Exception):
+        pass
+
+class RootFindingException(Exception):
+        pass
+
+class MinimizationException(Exception):
+        pass
+
+GOLDEN = (1+5**.5)/2
+
+# 
+# MISCELLANEOUS
+#
+
+def sgn(x):
+        if x==0:
+                return 0
+        else:
+                return x/abs(x)
+
+#
+# UNIVARIATE ROOT FINDING
+#
+
+def bracket_root(f, interval, max_iterations=50):
+        """\
+Given a univariate function f and a tuple interval=(x1,x2),
+return a new tuple (bracket, fnvals) where bracket=(x1,x2)
+brackets a root of f and fnvals=(f(x1),f(x2)).
+        """
+        x1, x2 = interval
+        if x1==x2:
+                 raise BracketingException("initial interval has zero width")
+        elif x2<x1:
+                x1, x2 = x2, x1
+        f1, f2 = f(x1), f(x2)
+        for j in range(max_iterations):
+                while f1*f2 >= 0:  # not currently bracketed
+                        if abs(f1)<abs(f2):
+                                x1 = x1 + GOLDEN*(x1-x2)
+                        else:
+                                x2 = x2 + GOLDEN*(x2-x1)
+                        f1, f2 = f(x1), f(x2)
+                return (x1, x2), (f1, f2)
+        raise BracketingException("too many iterations")
+
+def ridder_root(f, bracket, fnvals=None, accuracy=1e-6, max_iterations=50):
+        """\
+Given a univariate function f and a tuple bracket=(x1,x2) bracketing a root,
+find a root x of f using Ridder s method. Parameter fnvals=(f(x1),f(x2)) is optional.
+        """
+        x1, x2 = bracket
+        if fnvals==None:
+                f1, f2 = f(x1), f(x2)
+        else:
+                f1, f2 = fnvals
+        if f1==0:
+                return x1
+        elif f2==0:
+                return x2
+        elif f1*f2>=0:
+                raise BracketingException("initial interval does not bracket a root")
+        x4 = 123456789.
+        for j in range(max_iterations):
+                x3 = (x1+x2)/2
+                f3 = f(x3)
+                temp = f3*f3 - f1*f2
+                x4, x4old = x3 + (x3-x1)*sgn(f1-f2)*f3/temp**.5, x4
+                f4 = f(x4)
+                if f1*f4<0:  # x1 and x4 bracket root
+                        x2, f2 = x4, f4
+                else:  # x4 and x2 bracket root
+                        x1, f1 = x4, f4
+                if min(abs(x1-x2),abs(x4-x4old))<accuracy or temp==0:
+                        return x4
+        raise RootFindingException("too many iterations")
+
+def root(f, interval=(0.,1.), accuracy=1e-4, max_iterations=50):
+        """\
+Given a univariate function f and an optional interval (x1,x2),
+find a root of f using bracket_root and ridder_root.
+        """
+        bracket, fnvals = bracket_root(f, interval, max_iterations)
+        return ridder_root(f, bracket, fnvals, accuracy, max_iterations)
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/liss_enveloppe.py b/Aster/Cata/cataSTA10/Utilitai/liss_enveloppe.py
new file mode 100644 (file)
index 0000000..0545b1d
--- /dev/null
@@ -0,0 +1,931 @@
+#@ MODIF liss_enveloppe Utilitai  DATE 29/08/2005   AUTEUR THOMASSO D.THOMASSON 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+"""
+    Maquette demande SEPTEN fonction de lissage enveloppe
+    Les données se présentent sous la forme d'un fichier texte comportant
+    un ensemble de groupe de lignes organisé comme suit :
+        - ligne 1 : Informations générales
+        - ligne 2 : une liste de valeur d'amortissement
+        - lignes 3...n : une liste de valeur commencant par une frequence suivit 
+                         des amplitudes du spectre pour chacun des amortissements
+                         liste en ligne 2
+    Points importants :
+        - Le nombre de lignes définissant le spectre peut varier
+        - Le nombre de valeur d'amortissement peut varier ?
+
+    ==> On propose d'opérer ligne par ligne
+    ==> L'absence d'informations sur la variabilité du nombre d'éléments oblige à traiter le cas général
+
+        
+
+    Etapes du développement :
+        24/05/2005 : Test de lecture du fichier, choix d'une stratégie de gestion
+        25/05/2005 : Objet itérable pour la  lecture du fichier
+        29/05/2005 : Créations de filtres pour les spectres
+"""
+
+import math
+
+def nearestKeys(k1, dct) :
+    """
+        retourne les clés (doublet) les plus proches de 'key' dans le dictionnaire dct
+        par valeur inférieure et supérieures
+    """
+    kr = min(dct.keys())
+    for k2 in dct.keys() :
+        if (k2<k1) and (k2>kr) : kr = k2 
+    kinf = kr
+
+    kr = max(dct.keys())
+    for k2 in dct.keys() :
+        if (k2>k1) and (k2<kr) : kr = k2
+    ksup = kr
+
+    return (kinf, ksup)
+
+def interpole(x2, x0, y0, x1, y1) :
+    """
+        renvoie la valeur pour x2 interpolée (linéairement) entre x0 et x1  
+    """
+    try : 
+        a = (y1-y0) / (x1-x0)
+    except ZeroDivisionError :
+        return y0
+
+    return a * (x2-x0) + y0
+
+
+def listToDict(lst) :
+    """
+        Cette fonction recoit une liste et la transforme en un dictionnaire 
+    """
+    dctRes = {}
+    for val in lst :
+        dctRes[val] = True
+    return dctRes
+
+def inclus(l1, l2) :
+    """
+        Teste si une liste (lst1) est incluse dans une autre (lst2)
+        Renvoie le premier élément de l1 qui n'est pas inclus ou None si l1 inclus dans l2)
+    """
+    for v in l1 :
+        try :
+            l2.index(v)
+        except ValueError :
+            return v
+    return None
+
+def exclus(i1, i2) :
+    """
+        Teste si deux listes ne partagent pas d'élément commun
+        Renvoie le premier élément de l1 qui n'est pas exclus ou None si l1 exclus de l2)
+    """
+    for v in i1 :
+        try :
+            i2.index(v)
+            return v
+        except ValueError :
+            continue
+    return None
+        
+class NappeCreationError(Exception) :
+    def __init__(self) :
+        self.mess = "Un problème est survenu lors dla création d'une nappe"
+        self.otherExcept = Exception()
+        
+    def getMess(self) :
+        """ Retourne le message associé à l'erreur """
+        # Analyse les différents cas d'erreurs
+        if self.otherExcept == IOError :
+            self.mess += "\nProblème à l'ouverture du fichier\n"
+
+        return self.mess
+    
+class SpectreError(Exception) :
+    def __init__(self) :
+        self.mess = "Un problème est survenu lors de la construction du spectre"
+        self.otherExcept = Exception()
+        
+    def getMess(self) :
+        """ Retourne le message associé à l'erreur """
+        # Analyse les différents cas d'erreurs
+        if self.otherExcept == IOError :
+            self.mess += "\nProblème à l'ouverture du fichier\n"
+
+        return self.mess
+    
+class filtre :
+    """
+        La classe filtre est la classe de base des filtres applicables au spectre
+        Elle possède une fonction privée filtre qui prend un spectre en entrée et qui
+        retourne un spectre filtré en sortie et qui est appelée par la fonction __call__
+    """
+    def __init__(self): pass
+    def __call__(self, sp) :
+        return self._filtre(sp)
+
+    def _filtre(self, sp) :
+        spr = sp
+        return spr # la fonction filtre de la classe de base retourne le spectre sans le modifier
+
+class filtreExpand(filtre) :
+    """ effectue l'expansion du spectre selon spécif du SEPTEN """
+    def __init__(self, **listOpt) :
+        try :
+            self.expandCoef = listOpt['coef']
+        except KeyError :
+            self.expandCoef = 0.1
+       
+    def _filtre(self, sp) :
+        spLower = spectre()
+        spUpper = spectre()
+        # Etape 1 : Construction du spectre inférieur sans considération des échelons de fréquence
+        for i in range(0, len(sp.listFreq)) :
+            spLower.listFreq = spLower.listFreq + [sp.listFreq[i] - abs(sp.listFreq[i]*self.expandCoef)]
+            spLower.dataVal = spLower.dataVal + [sp.dataVal[i]]
+            spUpper.listFreq = spUpper.listFreq + [sp.listFreq[i] + abs(sp.listFreq[i]*self.expandCoef)]
+            spUpper.dataVal = spUpper.dataVal + [sp.dataVal[i]]
+
+
+        # Etape 2 : Construction du spectre "élargi" sur la base de fréquence du spectre initial
+        #           On tronque en deca de la fréquence minimale du spectre de référence
+        index = 0
+        while spLower.listFreq[index] < sp.listFreq[0] : index+=1
+            
+        # Recopie des valeurs à conserver
+        spLower.dataVal = spLower.dataVal[index:]
+
+        index = 0
+        while spUpper.listFreq[index] < sp.listFreq[len(sp.listFreq)-1] : index+=1
+            
+        # Recopie des valeurs à conserver
+        spUpper.dataVal = spUpper.dataVal[0:index]
+        # calcul du nombre d'éléments à rajouter
+        nb = len(sp.dataVal) - index
+        #Décalage le la liste de nb elements
+        for i in range(0, nb) : spUpper.dataVal.insert(0,-1.0e6)
+
+        #On remplace la base de fréquence 'décalée' de lower et upper par la base de fréquence 'standard'
+        spLower.listFreq = sp.listFreq
+        spUpper.listFreq = sp.listFreq
+
+        return self._selectVal(spLower, sp, spUpper)
+
+    def _selectVal(self,spLower, sp, spUpper) :
+        spr = sp
+        for i in range(0, len(sp.listFreq)) :
+            try :
+                v1 = spLower.dataVal[i]
+            except IndexError :
+                v1 = -200.0
+            try :
+                v2 = sp.dataVal[i]
+            except IndexError :
+                v2 = -200.0
+            try :
+                v3 = spUpper.dataVal[i]
+            except IndexError :
+                v3 = -200.0
+
+            spr.dataVal[i] = max([v1,v2,v3])
+
+        return spr
+    
+class filtreLog(filtre) :
+    """
+        Convertit un spectre en LogLog (log base 10)
+            + Possibilité d'obtenir un linLog (abcsisses linéaires, ordonnées en log)
+            + Possibilité d'obtenir un logLin (abcsisses log, ordonnées en linéaires) 
+    """
+    def __init__(self, **listOpt) :
+        try :
+            self.logAbc = listOpt['logAbc']
+        except KeyError :
+            self.logAbc = True
+        try :
+            self.logOrd = listOpt['logOrd']
+        except KeyError :
+            self.logOrd = True
+
+    def _filtre(self, sp) :
+        spr = spectre()
+        if self.logAbc :
+            spr.listFreq = [math.log10(i) for i in sp.listFreq]
+        else :
+            spr.listFreq = [i for i in sp.listFreq]
+        if self.logOrd :
+            spr.dataVal  = [math.log10(i) for i in sp.dataVal]
+        else :
+            spr.dataVal  = [i for i in sp.dataVal]
+            
+        return spr
+
+class filtreLin(filtre) :
+    """
+        Convertit un spectre en LinLin (10^n) à partir d'un spectre en linLog,LogLin ou logLog
+    """
+    def __init__(self, **listOpt) :
+        try :
+            self.logAbc = listOpt['logAbc']
+        except KeyError :
+            self.logAbc = True
+        try :
+            self.logOrd = listOpt['logOrd']
+        except KeyError :
+            self.logOrd = True
+
+    def _filtre(self, sp) :
+        spr = spectre()
+        if self.logAbc :
+            spr.listFreq = [10**i for i in sp.listFreq]
+        else :
+            spr.listFreq = [i for i in sp.listFreq]
+        if self.logOrd :
+            spr.dataVal  = [10**i for i in sp.dataVal]
+        else :
+            spr.dataVal  = [i for i in sp.dataVal]
+            
+        return spr
+        
+class filtreBandWidth(filtre) :
+    def __init__(self, **listOpt) :
+        try :
+            self.lowerBound = listOpt['lower']
+        except KeyError :
+            self.lowerBound = 0.2
+        try :
+            self.upperBound = listOpt['upper']
+        except KeyError :
+            self.upperBound = 35.5
+
+    def _filtre(self, sp) :
+        spr = sp
+        toDel = []
+        for i in range(0, len(spr.listFreq)) :
+            if spr.listFreq[i] > self.upperBound :
+                toDel = toDel + [i]
+
+        # Nettoyage des fréquences à suppimer (on commence par les plus hautes)
+        for i in toDel[::-1] :
+            del spr.listFreq[i]
+            del spr.dataVal[i]
+
+        toDel = []
+        for i in range(0, len(spr.listFreq)) :
+            if spr.listFreq[i] < self.lowerBound :
+                toDel = toDel + [i]
+            else :
+                break
+
+        # Nettoyage des fréquences à suppimer (on finit par les plus basses)
+        for i in toDel[::-1] :
+            del spr.listFreq[i]
+            del spr.dataVal[i]
+             
+        return spr
+
+class filtreCrible(filtre):
+    """
+        Criblage du spectre selon specif SEPTEN §C-5 (ce que j'en comprend)
+    """
+    def __init__(self, **listOpt):
+        try :
+            self.tolerance = listOpt['tolerance']
+        except KeyError :
+            self.tolerance = 0.25
+
+        self.listEtats = []
+
+    def _filtre(self, sp) :
+            self._initListeEtats(sp) # Création de la table des étsts des valeurs du spectre
+            coef = 1
+
+            # Parcours de la liste des fréquences
+            i1, i2, i3 = 0, 2, 1
+            bTest = True
+            while True :
+                try :
+                    bTest = self._amplitude(sp, i1, i2, i3, coef)
+                    if not(bTest) and ((i2-i1) > 2) :
+                        # Le point a été éliminé, on réexamine le point précédent sauf si c'est le premier examiné
+                        i3 -= 1
+                        if self._amplitude(sp, i1, i2, i3, coef) :
+                            # Le point a été "récupéré", il devient la nouvelle origine
+                            i1 = i3
+                            i2 = i2 # écrit quand meme pour la compréhension
+                            i3 += 1
+                        else :
+                            # Le point reste désactivé, on avance au point suivant, le point d'origine est conservé
+                            i1 = i1
+                            i2 += 1
+                            i3 += 2
+                    elif not(bTest) and not((i2-i1) > 2) :
+                        i1 = i1
+                        i2 += 1
+                        i3 += 1
+                    else : # Le point est conservé, il devient la nouvelle origine
+                        i1 = i3
+                        i2 += 1
+                        i3 += 1
+                except IndexError : 
+                    break
+
+            return self._crible(sp)
+
+    def _initListeEtats(self, sp) :
+        """
+            Crée une liste associant à chaque fréquence du spectre passé en paramètre, un état booléen
+            qui spécifie si ce couple fréquence-valeur est supprimé ou pas
+            NB : au départ toutes les valeur sont "True" car aucune valeur n'a été supprimée
+        """
+        self.listEtats = [True for x in sp.listFreq]
+
+    def _crible(self, sp) :
+        """
+            Supprime les points de fréquence qui sont marqué False dans listEtats
+        """
+        sp2 = spectre([], []) # On force car il y a un problème de persistance su spectre précédent
+        for x,y,z in zip(self.listEtats, sp.listFreq, sp.dataVal) :
+            if x :
+                sp2.listFreq.append(y)
+                sp2.dataVal.append(z)
+                
+        return sp2
+
+    def _amplitude(self, sp, id1, id2, id3, coef=1) :
+        """
+            teste le point d'indice id3 par rapport aux points à sa gauche(p1 d'indice id1) et 
+            à sa droite (p2 d'indice id2).
+            Le point est éliminé si sa valeur est en dessous de la droite reliant les points
+            d'indice id1 et id2 sauf si sa distance à cette droite est supérieure à :
+                tolerance*ordonnée
+            Le critère est purement sur l'amplitude du point indépendemment de l'intervalle
+            sur lequel il s'applique
+        """
+        x0 = sp.listFreq[id1]
+        y0 = sp.dataVal[id1]
+        x1 = sp.listFreq[id2]
+        y1 = sp.dataVal[id2]
+        x2 = sp.listFreq[id3]
+        y2 = sp.dataVal[id3]
+
+        yp2 = interpole(x2, x0, y0, x1, y1)
+        
+        # Le point est il susceptible d'etre supprimé (est il en dessous de la droite p1-p2 ?)
+        # Faut-il le supprimer pour autant (distance y2 à yp2 > tolerance% de y2)
+        bSup = not((y2 < yp2) and (abs(yp2-y2)/y2 < self.tolerance))
+
+        # Changement de l'état du point
+        self.listEtats[id3] = bSup
+
+        return bSup
+
+class filtreChevauchement(filtre):
+    """
+        Compare un spectre à un spectre de référence fréquence par fréquence.
+        Si une fréquence n'existe pas, on cherche la valeur équivalent par interpolation
+        Pour éviter tout recouvrement, il est éventuellement nécessaire de rajouter
+        des informations à certaines fréquences
+    """
+    def __init__(self, **listOpt) :
+        try :
+            self.spRef = listOpt['ref']
+        except KeyError :
+            self.spRef = spectre()
+
+        try :
+            signe = listOpt['ordre']
+            self.ordre = signe/abs(signe) #coefficient +1 ou -1
+        except KeyError :
+            self.ordre = +1
+        except ZeroDivisionError :
+            self.ordre = +1
+
+    def _filtre(self, sp) :
+        spDict = sp.buildMap()
+        spRefDict = self.spRef.buildMap()
+        spTestDict = {}
+
+        # On commence par construire un dictionnaire des valeurs à tester comportant toutes les clés contenues
+        for k in spDict.keys() : spTestDict[k] = True
+        for k in spRefDict.keys() : spTestDict[k] = True
+
+        # On teste ensuite toutes les valeurs du dictionnaire
+        for k in spTestDict.keys() :
+            # Test d'existence dans le dictionnaire du spectre de référence
+            try :
+                vr = spRefDict[k]
+            except KeyError :
+                ki = nearestKeys(k, spRefDict)
+                vr = interpole(k, ki[0], spRefDict[ki[0]], ki[1], spRefDict[ki[1]])
+            # Test d'existence dans le dictionnaire du spectre à tester
+            try :
+                vt = spDict[k]
+            except KeyError :
+                ki = nearestKeys(k, spDict)
+                vt = interpole(k, ki[0], spDict[ki[0]], ki[1], spDict[ki[1]])
+
+            # Comparaison des deux valeurs. La clé est ajoutée si elle n'existe pas
+            if vt*self.ordre < vr*self.ordre : spDict[k] = vr
+
+        return spectre.sortSpectre(spDict)
+
+class spectre :
+    """
+        décrit un spectre composé d'un ensemble de résultat associé à un ensemble de fréquence
+    """
+    def __init__(self, listFreq = [], dataVal = []) :
+        self.listFreq = [v for v in listFreq]
+        self.dataVal  = [v for v in dataVal]
+
+    def filtre(self, fi) :
+        """
+        Applique le filtre passé en paramètre au spectre et retourne un nouveau spectre
+        """
+        return fi(self)
+    
+    def __staticSortSpectre(dict) :
+        """
+            Convertit un spectre présenté sous forme d'un dictionnaire en un spectre normal
+            Fonction créé parceque les clés du dictionnaire ne sont pas ordonnées
+        """
+        lstFrq = dict.keys()
+        lstFrq.sort()
+        lstVal = []
+        for fr in lstFrq :
+            try :
+                lstVal.append(dict[fr])
+            except KeyError : # Ne devrait jamais arriver
+                lstVal.append(-1E15)
+
+        return spectre(lstFrq, lstVal)
+    
+    sortSpectre = staticmethod(__staticSortSpectre) # définition en tant que méthode statique
+
+    def getCoupleVal(self,indice) :
+        return (self.listFreq[indice], self.dataVal[indice])
+    
+    def moyenne(self) :
+        """
+            Calcule la moyenne pondéré : somme(An* dfn) /F
+        """
+        somme = 0.0
+        X0 = self.listFreq[0]
+        X1 = self.listFreq[len(self.listFreq)-1]
+        for i in range(0,len(self.listFreq)-1) :
+            x0 = self.listFreq[i]
+            y0 = self.dataVal[i]
+            x1 = self.listFreq[i+1]
+            y1 = self.dataVal[i+1]
+            
+            somme = somme + (y0+y1) * abs(x1-x0) / 2
+
+        return somme/abs(X1-X0)
+
+    def seuil(self, limit=75) :
+        """
+            retourne un couple d'index délimitant l'ensemble des valeurs du spectre
+            définissant "limit" pourcent du total cumulé des valeurs
+            [borne à gauche inclue, borne à droite exclue[
+            ATTENTION on fait l'hypothèse que le spectre a une forme en cloche.
+        """
+        resu = [0 for v in self.dataVal] # initialisation du tableau resultat
+
+        maxi = max(self.dataVal) # Valeur maxu du spectre
+        iMaxi = self.dataVal.index(maxi) # Index de la valeur max du spectre
+
+        # ETAPE 1 : SOMMATION
+        somme = 0.0
+        for v, i in zip(self.dataVal[0:iMaxi], range(0, iMaxi)) :
+            somme = somme + v
+            resu[i] = somme
+
+        somme = 0.0
+        for v, i in zip(self.dataVal[:iMaxi:-1], range(len(self.dataVal)-1, iMaxi, -1)) :
+            somme = somme + v
+            resu[i] = somme
+            
+        resu[iMaxi] = resu[iMaxi-1] + self.dataVal[iMaxi] + resu[iMaxi+1]
+
+        #ETAPE 2 : POURCENTAGE (PAS NECESSAIRE MAIS PLUS LISIBLE)
+        for v, i in zip(self.dataVal[0:iMaxi], range(0, iMaxi)) :
+            resu[i] = (resu[i] + maxi/2) / resu[iMaxi] * 100
+
+        for v, i in zip(self.dataVal[iMaxi+1:], range(iMaxi+1, len(self.dataVal))) :
+            resu[i] = (resu[i] + maxi/2) / resu[iMaxi] * 100
+
+        resu[iMaxi] =  resu[iMaxi-1] + resu[iMaxi+1]
+
+        # ETAPE 3 : RECHERCHE DES BORNES
+        limit = (100.0 - limit) / 2.0
+        b1 = b2 = True
+        for v1, v2 in zip(resu[:], resu[::-1]): # Parcours simultané dans les deux sens
+            if b1 and v1 >= limit : # Borne à gauche trouvée
+                i1 = resu.index(v1)
+                b1 = False
+            if b2 and v2 >= limit : # Borne à droite trouvée
+                i2 = resu.index(v2) + 1 # Borne à droit exclue de l'intervalle
+                b2 = False
+                
+        return (i1, i2)
+        
+    def cut(self, nuplet) :
+        """
+            Découpe un spectre en sous-spectres qui sont retournés en sortie de la fonction
+            sous la forme d'un tableau de spectres
+        """
+        # transformation du nuplet en tableau (permet de lui ajouter un élément)
+        tabNuplet = [v for v in nuplet]
+        tabNuplet.append(len(self.listFreq))
+
+        # Traitement
+        tableRes = list()
+        bGauche = 0
+        for borne in tabNuplet :
+            bDroite = borne
+            sp = spectre()
+            for i in range(bGauche, bDroite) :
+                sp.listFreq.append(self.listFreq[i])
+                sp.dataVal.append(self.dataVal[i])
+
+            tableRes.append(sp)
+            bGauche = bDroite
+
+        return tableRes
+
+    def __staticMerge(tabSpectre) :
+        """
+            A l'inverse de la fonction cut, construit un seul spectre à partir d'un ensemble de spectres
+        """
+        # On vérifie d'abord que les spectres ne partagent pas la meme bande de fréquence (fut ce partiellement)
+        for i in range(0, len(tabSpectre)-1) :
+            if exclus(tabSpectre[i].listFreq, tabSpectre[i+1].listFreq) : raise SpectreError
+        if exclus(tabSpectre[0].listFreq, tabSpectre[len(tabSpectre)-1].listFreq) : raise SpectreError
+
+        spRes = spectre()
+        #cumul des spectres
+        for sp in tabSpectre :
+            for f, v in zip(sp.listFreq, sp.dataVal) :
+                spRes.listFreq.append(f)
+                spRes.dataVal.append(v)
+
+        return spRes
+
+    merge = staticmethod(__staticMerge) # définition en tant que méthode statique
+    
+    def buildMap(self) :
+        """
+            Construit un dictionnaire à partir d'un spectre
+        """
+        dict = {}
+        for i, j in zip(self.listFreq, self.dataVal) :
+            dict[i] = j
+
+        return dict 
+
+class nappe :
+    """
+        décrit un objet nappe qui associe à un ensemble de fréquence à une enesmble de résultats
+    """
+    def __init__(self, listFreq = [], listeTable = [], listAmor = [], entete = ""):
+        self.listFreq = [v for v in listFreq] # recopie physique !
+        self.listTable = [list() for t in listeTable] 
+        for t, st in zip(listeTable, self.listTable) :
+            for v in t  : st.append(v)
+                
+        self.listAmor = [l for l in listAmor]
+        self.entete = entete
+
+    def __staticBuildFromListSpectre(lsp) :
+        """
+            Construction d'une nappe à partir d'une liste de spectres
+        """
+        # On commence par vérifier que toutes les nappes on la meme base de fréquences
+        # A inclus dans B inclus dans C inclus dans .... et DERNIER inclus dans PREMIER ==> tous égaux 
+        for i in range(0,len(lsp.listSp)-1) :
+            if inclus(lsp.listSp[i].listFreq, lsp.listSp[i+1].listFreq) : raise NappeCreationError
+        if inclus(lsp.listSp[i+1].listFreq, lsp.listSp[0].listFreq) : raise NappeCreationError
+
+        # Construction de la nappe à proprement parler
+        listeFreq = [fr for fr in lsp.listSp[0].listFreq]
+        listeTable = [list() for sp in lsp.listSp]
+        for sp, lv in zip(lsp.listSp, listeTable) :
+            for v in sp.dataVal :
+                lv.append(v)
+        return nappe(listeFreq, listeTable, [], 'toto')
+        
+    buildFromListSpectre = staticmethod(__staticBuildFromListSpectre) # définition en tant que méthode statique
+
+    def getNbSpectres(self) :
+        """ Retourne le nombre d'éléments dans la nappe """
+        return len(self.listAmor)
+
+    def getNbFreq(self) :
+        """ Retourne le nombre d'éléments dans chaque spectre """
+        return len(self.listFreq)
+
+    def getSpectre(self, index) :
+        """
+            Retourne le spectre d'indice 'index' dans la nappe
+        """
+        return spectre(self.listFreq, self.listTable[index])
+
+    def filtreDoublons(self):
+        """
+            Supprime bandes de fréquences constantes 
+        """
+        prevCpl = None
+        bCount = False
+        i=0
+        # Recherche des doublons
+        lstBor = list() # Liste de listes de bornes
+        lst = list()
+        for cpl in self.__getListFreq() :
+            if not(prevCpl) :
+                prevCpl = cpl
+                continue
+            bTest = True
+            for v1, v2 in zip(cpl[1], prevCpl[1]) :
+                bTest &= (v1==v2)
+            if bTest and not bCount : # Début d'une suite de valeurs égales
+                bCount = True
+                lst.append(i)
+            elif not bTest and bCount : # Fin d'une suite de valeurs égales
+                bCount = False
+                lst.append(i)
+                lstBor.append(lst)
+                lst = list() # Nouvelle liste
+
+            prevCpl = cpl
+            i += 1
+
+        # Suppression des doublons si plus de deux valeurs
+        for cpl in lstBor :
+            if (cpl[1]-cpl[0]) < 2 : continue
+            for i in range(cpl[1]-1, cpl[0], -1) :
+                del self.listFreq[i]
+                for j in range(0, len(self.listTable)) :
+                    del self.listTable[j][i]
+
+
+            
+
+    def __getListFreq(self) :
+        """
+            Fonction privé qui parcours la matrice ligne par ligne
+            Retourne à chaque itération un couple frequence, liste de valeurs 
+        """
+        fr = 0.0
+
+        for i in range(0, self.getNbFreq()) :
+            fr = self.listFreq[i]
+            listVal = []
+            for j in range(0, len(self.listTable)):
+                listVal.append(self.listTable[j][i])
+            yield (fr, listVal)
+
+        raise StopIteration    
+
+class listSpectre :
+    """
+        classe container d'une liste de spectre ne partageant pas la meme base de fréquence
+        cas des spectres à l'issue de la première passe de l'opération de filtrage d'enveloppe
+    """
+    def __init__(self, *listSp) :
+        self.listSp = []
+        for sp in listSp :
+            self.listSp = sp
+
+    def append(self, spectre) :
+        """ Ajoute un spectre à la liste """
+        self.listSp.append(spectre)
+        
+    def __staticBuildFromNappe(uneNappe) :
+        """
+            Construit une liste de spectres (indépendants) à partir d'une nappe
+        """
+        res = listSpectre()
+        for i in range(0, len(uneNappe.listAmor)) :
+            res.append(uneNappe.getSpectre(i))
+
+        return res
+    
+    buildFromNappe = staticmethod(__staticBuildFromNappe) #Définition en tant que méthode statique
+    
+    def testChevauchement(self) :
+        """
+            Supprime les effets de chevauchement entre les spectres
+        """
+        for i in range(0, len(self.listSp)-1) :
+            filter = filtreChevauchement(ref=self.listSp[i+1])
+            self.listSp[i] = self.listSp[i].filtre(filter)
+
+    def createBase(self, lspRef = None) :
+        """
+            Crée une base de fréquence commune pour l'ensemble des spectres
+            En s'assurant que le l'on reste enveloppe des spectre de la liste lspRef
+        """
+        lspRes = listSpectre([spectre() for sp in self.listSp]) # Liste résultante
+
+        # Recherche des fréquences attribuées à 5 spectres, 4 spectres, ... classées dans un dictionnaire
+        dctOc = self.__sortByOccurence()
+
+        iOcc = max(dctOc.keys())
+        lst = dctOc[iOcc] # On comence par mettre les frequences communes à tous les spectres
+        lst.sort() 
+        iOcc -= 1
+        test = 0
+        while True : 
+            lspRes.__addFreqFromList(self, lst)
+            # On vérifie si on reste enveloppe du spectre initial
+            spTest = spectre()
+            lstComp = list()
+            for sp0, sp1 in zip(lspRes.listSp, self.listSp) :
+                filter = filtreChevauchement(ref=sp1)
+                spTest = sp0.filtre(filter)
+                # Crée une liste des fréquences ajoutées (s'il y en a...)
+                for fr in spTest.listFreq :
+                    try :
+                        idx = sp0.listFreq.index(fr)
+                    except ValueError : # Valeur non trouvée dans le tableau
+                        lstComp.append(fr)
+
+            if len(lstComp) > 0 : # Il est nécessaire de compléter les spectres
+                # on prend de préférence les fréquences définies sur le plus de spectre possible
+                while True :
+                    lstFreq = dctOc[iOcc]
+                    prevLst = lst # On sauvegarde la liste précédente pour comparaison
+                    lst = self.__buildList(lstComp, lstFreq)
+                    if not(inclus(lst, prevLst)) :
+                        iOcc -= 1
+                    else :
+                        break
+                continue
+            else :
+                break # On peut sortir les spectres sont complets
+
+        self.listSp = lspRes.listSp # Remplacement de la liste des spectres
+
+        # On s'assure que le spectre reste enveloppe du spectre de référence rajoute des fréquences si nécessaire
+        # 1. filtre chevauchement
+        if lspRef : # Si une liste de spectre de référence a été définie, on vérifie le caractère enveloppe du résultat
+            listComp = list()
+
+            for sp1, sp2 in zip(self.listSp, lspRef.listSp) :
+                filter = filtreChevauchement(ref=sp2)
+                spTest = sp1.filtre(filter)
+                test = inclus(spTest.listFreq, sp1.listFreq)
+                if test : listComp.append(test)
+            # 3. Complément éventuel de l'ensemble des spectres
+            if listComp : lspRes.__addFreqFromList(self, listComp)
+
+        self.listSp = lspRes.listSp # Remplacement de la liste des spectres
+
+    def filtre(self, filter):
+        """
+            Applique un filtre à l'ensemble des spectres de la liste
+        """
+        self.listSp = [sp.filtre(filter) for sp in self.listSp]
+
+
+    def __sortByOccurence(self) :
+        """
+            Fonction qui trie les fréquences par leur occurence d'apparition dans la liste de spectre
+        """
+        dct = {}
+        for sp in self.listSp : # Boucle sur tous les spectres
+           for fr in sp.listFreq : # Boucle sur toutes les fréquences de chaque spectre
+                try :
+                    dct[fr] += 1
+                except KeyError :
+                    dct[fr] = 1
+
+        # "Inversion" du dictionnaire
+        dctOc = {} # Dictionnaire des occurences
+        for k in dct.keys() :
+            try :
+                dctOc[dct[k]].append(k)
+            except KeyError :
+                dctOc[dct[k]]=[k]
+
+
+        return dctOc
+    
+    def __addFreqFromList(self, lstSp, lstFreq) :
+        """
+            Rajoute les fréquences contenues dans lstFreq aux spectres d'un listeSpectre
+            à partir des spectres fournis par le listeSpectre (lstSp) passé en paramètre
+            en procédant éventuellement à une interpolation linéaire
+        """
+        # Suppression des doublons de la liste des fréquences
+        lstFreq = listToDict(lstFreq).keys() # lst est la liste des points qu'il faudrait ajouter pour rester enveloppe
+        lstFreq.sort()
+        
+        for i in range(0, len(self.listSp)) :
+            # Conversion des spectres en dictionnaire pour pouvoir les traiter
+            spDctSelf = self.listSp[i].buildMap()
+            spDctRef = lstSp.listSp[i].buildMap() 
+            for fr in lstFreq :
+                # On cherche la valeur dans le spectre de référence
+                try :
+                    vr = spDctRef[fr]
+                except KeyError :
+                    ki = nearestKeys(fr, spDctRef)
+                    vr = interpole(fr, ki[0], spDctRef[ki[0]], ki[1], spDctRef[ki[1]])
+
+                # On rajoute la valeur dans le spectre résultat
+                spDctSelf[fr] = vr
+
+            # Conversion du dictionnaire en spectre réel
+            self.listSp[i] = spectre.sortSpectre(spDctSelf)
+            
+    def __buildList(self, lstComp, lstFreq) :
+        """
+            Construit une liste de fréquences à ajouter à partir d'une liste de fréquences
+            à ajouter (listComp) et d'une liste de référence, (listFreq)
+            retourne une liste
+        """
+        lst = list()
+        for fr in lstComp :
+            try :
+                idx = lstFreq.index(fr)
+                lst.append(fr)
+            except ValueError : # Fréquence non présente, recherche de la plus proche 
+                couple = nearestKeys(fr, listToDict(lstFreq))
+                if abs(couple[0]-fr) > abs(couple[1]-fr) :
+                    lst.append(couple[1])
+                else :
+                    lst.append(couple[0])
+
+        lst = listToDict(lst).keys() # Suppression des doublons
+        lst.sort()
+        return lst
+        
+      
+def lissage(nappe=nappe,fmin=0.2,fmax=35.5,elarg=0.1,tole_liss=0.25) :
+    resultat = listSpectre() # Le résultat sera contenu dans une liste de spectre
+    lspBrut = listSpectre.buildFromNappe(nappe)
+    # Passage en LogLog
+    lspBrut.filtre(filtreLog())
+    for j in range(0,nappe.getNbSpectres()) :
+        # Spectre brut
+        sp = nappe.getSpectre(j)
+        # Limitation de la bande de fréquence
+        filter = filtreBandWidth(lower=fmin, upper=fmax)
+        sp = sp.filtre(filter)
+        # Expansion du spectre
+        filter = filtreExpand(coef=elarg)
+        sp = sp.filtre(filter)
+        # Passage en LogLin
+        filter = filtreLog(logOrd=False)
+        sp = sp.filtre(filter)
+        # éclatement du spectre en 3 sous-parties
+        tabSpectre = sp.cut(sp.seuil())
+        # traitement individuel des sous parties
+        filter = filtreCrible(tolerance=2.*tole_liss)
+        tabSpectre[0] = tabSpectre[0].filtre(filter)
+        tabSpectre[2] = tabSpectre[2].filtre(filter)
+        filter.tolerance = tole_liss
+        tabSpectre[1] = tabSpectre[1].filtre(filter)
+        # Fusion des sous-spectres
+        sp = spectre.merge(tabSpectre)
+
+        # Seconde passe de filtrage
+        sp = sp.filtre(filter)
+
+        # On passe en log-log pour les tests de chevauchement
+        filter = filtreLog(logAbc=False)
+        sp = sp.filtre(filter)
+        # Ecriture dans la liste de spectres résultat
+        resultat.append(sp) # Ajoute la spectre lissé à la liste des spectres
+            
+    resultat.testChevauchement() # Test de chevauchement entre les spectre de la liste
+    resultat.createBase(lspBrut) # construction d'une base commune de fréquence
+
+    # Passage en lin
+    resultat.filtre(filtreLin())
+        
+    # Construction de la nappe résultat
+    nappeRes = nappe.buildFromListSpectre(resultat)
+    nappeRes.listAmor=nappe.listAmor
+    nappeRes.filtreDoublons() # Suppression des valeurs identiques accolées
+    
+    return nappeRes
diff --git a/Aster/Cata/cataSTA10/Utilitai/macro_rota_globale.py b/Aster/Cata/cataSTA10/Utilitai/macro_rota_globale.py
new file mode 100644 (file)
index 0000000..3440f8e
--- /dev/null
@@ -0,0 +1,143 @@
+#@ MODIF macro_rota_globale Utilitai  DATE 18/09/2007   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+from Cata.cata import *
+
+# ===========================================================================
+#           CORPS DE LA MACRO "MACR_ROTA_GLOBALE"
+#           -------------------------------------
+# USAGE :
+#  RESULTAT : resultat
+#  GROUP_NO_ORIG : un groupe d un noeud definissant l entree du coude (A)
+#  GROUP_NO_EXTR : un groupe d un noeud definissant la sortie du coude (B)
+# 
+#              /
+#           A /
+#            (______
+#            B
+#  
+# ===========================================================================
+# script PYTHON : rotation globale sur une tuyauterie
+
+
+def macr_rota_globale_ops(self,RESULTAT,GROUP_NO_ORIG,GROUP_NO_EXTR,**args):
+
+
+  """
+     Ecriture de la macro MACR_ROTA_GLOBALE
+  """
+  import os
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  ier=0
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  POST_RELEVE_T  = self.get_cmd('POST_RELEVE_T')
+  DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+  DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Le concept sortant (de type fonction) est nomme ROTGD dans 
+  # le contexte de la macro
+
+  self.DeclareOut('ROTGD',self.sd)
+
+  # Commandes de la macro
+  
+  __ROTAB=POST_RELEVE_T(ACTION=_F(INTITULE='__ROTAB',
+                                GROUP_NO=GROUP_NO_ORIG,
+                                RESULTAT=RESULTAT,
+                                NOM_CHAM='DEPL',
+                                NOM_CMP=('DRX','DRY','DRZ',),
+                                OPERATION='EXTRACTION',),
+                                )
+
+  __ROTAC=POST_RELEVE_T(ACTION=_F(INTITULE='__ROTAC',
+                                GROUP_NO=GROUP_NO_EXTR,
+                                RESULTAT=RESULTAT,
+                                NOM_CHAM='DEPL',
+                                NOM_CMP=('DRX','DRY','DRZ',),
+                                OPERATION='EXTRACTION',),);
+  
+  __ROTABt=__ROTAB.EXTR_TABLE()
+  __ROTACt=__ROTAC.EXTR_TABLE()
+  __DRXC  = __ROTACt.Array('INST','DRX')
+  __DRYC  = __ROTACt.Array('INST','DRY')
+  __DRZC  = __ROTACt.Array('INST','DRZ')
+  __DRXB  = __ROTABt.Array('INST','DRX')
+  __DRYB  = __ROTABt.Array('INST','DRY')
+  __DRZB  = __ROTABt.Array('INST','DRZ')
+  __DRXBC = __DRXC-__DRXB
+  __DRYBC = __DRYC-__DRYB
+  __DRZBC = __DRZC-__DRZB
+  __ROTG  = __DRXBC*__DRXBC
+  __ROTG  = __ROTG+__DRYBC*__DRYBC
+  __ROTG  = __ROTG+__DRZBC*__DRZBC
+  __ROTG  = __ROTG**(0.5)
+  
+  __livalr = []
+  __livali = []
+  for i in range(len(__ROTG)):
+    __livalr.append(__ROTG[i,1])
+    __livali.append(__DRXC[i,0])
+
+  print __livalr
+  print __livali
+
+  __LROTG = DEFI_LIST_REEL(VALE=__livalr)
+  __LINST = DEFI_LIST_REEL(VALE=__livali)
+
+  ROTGD = DEFI_FONCTION(NOM_PARA='INST',
+                        VALE_PARA=__LINST,
+                        VALE_FONC=__LROTG,
+                       )
+
+  return ier
+
+
+
+# ===========================================================================
+#           CATALOGUE DE LA MACRO "MACR_ROTA_GLOBALE"
+#           -----------------------------------------
+# USAGE :
+#  RESULTAT : resultat
+#  GROUP_NO_ORIG : un groupe d un noeud definissant l entree du coude (A)
+#  GROUP_NO_EXTR : un groupe d un noeud definissant la sortie du coude (B)
+# 
+#              /
+#           A /
+#            (______
+#            B
+#  
+# ===========================================================================
+
+
+
+MACR_ROTA_GLOBALE=MACRO(nom="MACR_ROTA_GLOBALE",op=macr_rota_globale_ops,sd_prod=fonction_sdaster,
+                       docu="",reentrant='n',
+                       fr="calcul de la rotation globale dans un coude.",
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther) ),
+         GROUP_NO_ORIG   =SIMP(statut='o',typ=grno,max=1),
+         GROUP_NO_EXTR   =SIMP(statut='o',typ=grno,max=1),
+)  ;
+
+
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/optimize.py b/Aster/Cata/cataSTA10/Utilitai/optimize.py
new file mode 100644 (file)
index 0000000..e4d3cc2
--- /dev/null
@@ -0,0 +1,591 @@
+#@ MODIF optimize Utilitai  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+#
+
+# ******NOTICE***************
+# optimize.py module by Travis E. Oliphant
+#
+# You may copy and use this module as you see fit with no
+# guarantee implied provided you keep this notice in all copies.
+# *****END NOTICE************
+
+# A collection of optimization algorithms.  Version 0.3.1
+
+# Minimization routines
+"""optimize.py
+
+A collection of general-purpose optimization routines using Numeric
+
+fmin        ---      Nelder-Mead Simplex algorithm (uses only function calls)
+fminBFGS    ---      Quasi-Newton method (uses function and gradient)
+fminNCG     ---      Line-search Newton Conjugate Gradient (uses function, gradient
+                     and hessian (if it's provided))
+
+"""
+import numpy as Num
+max = Num.max
+min = Num.min
+abs = Num.absolute
+__version__="0.3.1"
+
+def rosen(x):  # The Rosenbrock function
+    return Num.sum(100.0*(x[1:len(x)]-x[0:-1]**2.0)**2.0 + (1-x[0:-1])**2.0)
+
+def rosen_der(x):
+    xm = x[1:-1]
+    xm_m1 = x[0:-2]
+    xm_p1 = x[2:len(x)]
+    der = Num.zeros(x.shape,x.dtype.char)
+    der[1:-1] = 200*(xm-xm_m1**2) - 400*(xm_p1 - xm**2)*xm - 2*(1-xm)
+    der[0] = -400*x[0]*(x[1]-x[0]**2) - 2*(1-x[0])
+    der[-1] = 200*(x[-1]-x[-2]**2)
+    return der
+
+def rosen3_hess_p(x,p):
+    assert(len(x)==3)
+    assert(len(p)==3)
+    hessp = Num.zeros((3,),x.dtype.char)
+    hessp[0] = (2 + 800*x[0]**2 - 400*(-x[0]**2 + x[1])) * p[0] \
+               - 400*x[0]*p[1] \
+               + 0
+    hessp[1] = - 400*x[0]*p[0] \
+               + (202 + 800*x[1]**2 - 400*(-x[1]**2 + x[2]))*p[1] \
+               - 400*x[1] * p[2]
+    hessp[2] = 0 \
+               - 400*x[1] * p[1] \
+               + 200 * p[2]
+    
+    return hessp
+
+def rosen3_hess(x):
+    assert(len(x)==3)
+    hessp = Num.zeros((3,3),x.dtype.char)
+    hessp[0,:] = [2 + 800*x[0]**2 -400*(-x[0]**2 + x[1]), -400*x[0], 0]
+    hessp[1,:] = [-400*x[0], 202+800*x[1]**2 -400*(-x[1]**2 + x[2]), -400*x[1]]
+    hessp[2,:] = [0,-400*x[1], 200]
+    return hessp
+    
+        
+def fmin(func, x0, args=(), xtol=1e-4, ftol=1e-4, maxiter=None, maxfun=None, fulloutput=0, printmessg=1):
+    """xopt,{fval,warnflag} = fmin(function, x0, args=(), xtol=1e-4, ftol=1e-4,
+    maxiter=200*len(x0), maxfun=200*len(x0), fulloutput=0, printmessg=0)
+
+    Uses a Nelder-Mead Simplex algorithm to find the minimum of function
+    of one or more variables.
+    """
+    x0 = Num.asarray(x0)
+    assert (len(x0.shape)==1)
+    N = len(x0)
+    if maxiter is None:
+        maxiter = N * 200
+    if maxfun is None:
+        maxfun = N * 200
+
+    rho = 1; chi = 2; psi = 0.5; sigma = 0.5;
+    one2np1 = range(1,N+1)
+
+    sim = Num.zeros((N+1,N),x0.dtype.char)
+    fsim = Num.zeros((N+1,),'d')
+    sim[0] = x0
+    fsim[0] = apply(func,(x0,)+args)
+    nonzdelt = 0.05
+    zdelt = 0.00025
+    for k in range(0,N):
+        y = Num.array(x0,copy=1)
+        if y[k] != 0:
+            y[k] = (1+nonzdelt)*y[k]
+        else:
+            y[k] = zdelt
+
+        sim[k+1] = y
+        f = apply(func,(y,)+args)
+        fsim[k+1] = f
+
+    ind = Num.argsort(fsim)
+    fsim = Num.take(fsim,ind)     # sort so sim[0,:] has the lowest function value
+    sim = Num.take(sim,ind,0)
+    
+    iterations = 1
+    funcalls = N+1
+    
+    while (funcalls < maxfun and iterations < maxiter):
+        if (max(Num.ravel(abs(sim[1:len(sim)]-sim[0]))) <= xtol \
+            and max(abs(fsim[0]-fsim[1:len(fsim)])) <= ftol):
+            break
+
+        xbar = Num.add.reduce(sim[0:-1],0) / N
+        xr = (1+rho)*xbar - rho*sim[-1]
+        fxr = apply(func,(xr,)+args)
+        funcalls = funcalls + 1
+        doshrink = 0
+
+        if fxr < fsim[0]:
+            xe = (1+rho*chi)*xbar - rho*chi*sim[-1]
+            fxe = apply(func,(xe,)+args)
+            funcalls = funcalls + 1
+
+            if fxe < fxr:
+                sim[-1] = xe
+                fsim[-1] = fxe
+            else:
+                sim[-1] = xr
+                fsim[-1] = fxr
+        else: # fsim[0] <= fxr
+            if fxr < fsim[-2]:
+                sim[-1] = xr
+                fsim[-1] = fxr
+            else: # fxr >= fsim[-2]
+                # Perform contraction
+                if fxr < fsim[-1]:
+                    xc = (1+psi*rho)*xbar - psi*rho*sim[-1]
+                    fxc = apply(func,(xc,)+args)
+                    funcalls = funcalls + 1
+
+                    if fxc <= fxr:
+                        sim[-1] = xc
+                        fsim[-1] = fxc
+                    else:
+                        doshrink=1
+                else:
+                    # Perform an inside contraction
+                    xcc = (1-psi)*xbar + psi*sim[-1]
+                    fxcc = apply(func,(xcc,)+args)
+                    funcalls = funcalls + 1
+
+                    if fxcc < fsim[-1]:
+                        sim[-1] = xcc
+                        fsim[-1] = fxcc
+                    else:
+                        doshrink = 1
+
+                if doshrink:
+                    for j in one2np1:
+                        sim[j] = sim[0] + sigma*(sim[j] - sim[0])
+                        fsim[j] = apply(func,(sim[j],)+args)
+                    funcalls = funcalls + N
+
+        ind = Num.argsort(fsim)
+        sim = Num.take(sim,ind,0)
+        fsim = Num.take(fsim,ind)
+        iterations = iterations + 1
+
+    x = sim[0]
+    fval = min(fsim)
+    warnflag = 0
+
+    if funcalls >= maxfun:
+        warnflag = 1
+        if printmessg:
+            print "Warning: Maximum number of function evaluations has been exceeded."
+    elif iterations >= maxiter:
+        warnflag = 2
+        if printmessg:
+            print "Warning: Maximum number of iterations has been exceeded"
+    else:
+        if printmessg:
+            print "Optimization terminated successfully."
+            print "         Current function value: %f" % fval
+            print "         Iterations: %d" % iterations
+            print "         Function evaluations: %d" % funcalls
+
+    if fulloutput:
+        return x, fval, warnflag
+    else:        
+        return x
+
+
+def zoom(a_lo, a_hi):
+    pass
+
+    
+
+def line_search(f, fprime, xk, pk, gfk, args=(), c1=1e-4, c2=0.9, amax=50):
+    """alpha, fc, gc = line_search(f, xk, pk, gfk,
+                                   args=(), c1=1e-4, c2=0.9, amax=1)
+
+    minimize the function f(xk+alpha pk) using the line search algorithm of
+    Wright and Nocedal in 'Numerical Optimization', 1999, pg. 59-60
+    """
+
+    fc = 0
+    gc = 0
+    alpha0 = 1.0
+    phi0  = apply(f,(xk,)+args)
+    phi_a0 = apply(f,(xk+alpha0*pk,)+args)
+    fc = fc + 2
+    derphi0 = Num.dot(gfk,pk)
+    derphi_a0 = Num.dot(apply(fprime,(xk+alpha0*pk,)+args),pk)
+    gc = gc + 1
+
+    # check to see if alpha0 = 1 satisfies Strong Wolfe conditions.
+    if (phi_a0 <= phi0 + c1*alpha0*derphi0) \
+       and (abs(derphi_a0) <= c2*abs(derphi0)):
+        return alpha0, fc, gc
+
+    alpha0 = 0
+    alpha1 = 1
+    phi_a1 = phi_a0
+    phi_a0 = phi0
+
+    i = 1
+    while 1:
+        if (phi_a1 > phi0 + c1*alpha1*derphi0) or \
+           ((phi_a1 >= phi_a0) and (i > 1)):
+            return zoom(alpha0, alpha1)
+
+        derphi_a1 = Num.dot(apply(fprime,(xk+alpha1*pk,)+args),pk)
+        gc = gc + 1
+        if (abs(derphi_a1) <= -c2*derphi0):
+            return alpha1
+
+        if (derphi_a1 >= 0):
+            return zoom(alpha1, alpha0)
+
+        alpha2 = (amax-alpha1)*0.25 + alpha1
+        i = i + 1
+        alpha0 = alpha1
+        alpha1 = alpha2
+        phi_a0 = phi_a1
+        phi_a1 = apply(f,(xk+alpha1*pk,)+args)
+
+    
+
+def line_search_BFGS(f, xk, pk, gfk, args=(), c1=1e-4, alpha0=1):
+    """alpha, fc, gc = line_search(f, xk, pk, gfk,
+                                   args=(), c1=1e-4, alpha0=1)
+
+    minimize over alpha, the function f(xk+alpha pk) using the interpolation
+    algorithm (Armiijo backtracking) as suggested by
+    Wright and Nocedal in 'Numerical Optimization', 1999, pg. 56-57
+    """
+
+    fc = 0
+    phi0 = apply(f,(xk,)+args)               # compute f(xk)
+    phi_a0 = apply(f,(xk+alpha0*pk,)+args)     # compute f
+    fc = fc + 2
+    derphi0 = Num.dot(gfk,pk)
+
+    if (phi_a0 <= phi0 + c1*alpha0*derphi0):
+        return alpha0, fc, 0
+
+    # Otherwise compute the minimizer of a quadratic interpolant:
+
+    alpha1 = -(derphi0) * alpha0**2 / 2.0 / (phi_a0 - phi0 - derphi0 * alpha0)
+    phi_a1 = apply(f,(xk+alpha1*pk,)+args)
+    fc = fc + 1
+
+    if (phi_a1 <= phi0 + c1*alpha1*derphi0):
+        return alpha1, fc, 0
+
+    # Otherwise loop with cubic interpolation until we find an alpha which satifies
+    #  the first Wolfe condition (since we are backtracking, we will assume that
+    #  the value of alpha is not too small and satisfies the second condition.
+
+    while 1:       # we are assuming pk is a descent direction
+        factor = alpha0**2 * alpha1**2 * (alpha1-alpha0)
+        a = alpha0**2 * (phi_a1 - phi0 - derphi0*alpha1) - \
+            alpha1**2 * (phi_a0 - phi0 - derphi0*alpha0)
+        a = a / factor
+        b = -alpha0**3 * (phi_a1 - phi0 - derphi0*alpha1) + \
+            alpha1**3 * (phi_a0 - phi0 - derphi0*alpha0)
+        b = b / factor
+
+        alpha2 = (-b + Num.sqrt(abs(b**2 - 3 * a * derphi0))) / (3.0*a)
+        phi_a2 = apply(f,(xk+alpha2*pk,)+args)
+        fc = fc + 1
+
+        if (phi_a2 <= phi0 + c1*alpha2*derphi0):
+            return alpha2, fc, 0
+
+        if (alpha1 - alpha2) > alpha1 / 2.0 or (1 - alpha2/alpha1) < 0.96:
+            alpha2 = alpha1 / 2.0
+
+        alpha0 = alpha1
+        alpha1 = alpha2
+        phi_a0 = phi_a1
+        phi_a1 = phi_a2
+
+epsilon = 1e-8
+
+def approx_fprime(xk,f,*args):
+    f0 = apply(f,(xk,)+args)
+    grad = Num.zeros((len(xk),),'d')
+    ei = Num.zeros((len(xk),),'d')
+    for k in range(len(xk)):
+        ei[k] = 1.0
+        grad[k] = (apply(f,(xk+epsilon*ei,)+args) - f0)/epsilon
+        ei[k] = 0.0
+    return grad
+
+def approx_fhess_p(x0,p,fprime,*args):
+    f2 = apply(fprime,(x0+epsilon*p,)+args)
+    f1 = apply(fprime,(x0,)+args)
+    return (f2 - f1)/epsilon
+
+
+def fminBFGS(f, x0, fprime=None, args=(), avegtol=1e-5, maxiter=None, fulloutput=0, printmessg=1):
+    """xopt = fminBFGS(f, x0, fprime=None, args=(), avegtol=1e-5,
+                       maxiter=None, fulloutput=0, printmessg=1)
+
+    Optimize the function, f, whose gradient is given by fprime using the
+    quasi-Newton method of Broyden, Fletcher, Goldfarb, and Shanno (BFGS)
+    See Wright, and Nocedal 'Numerical Optimization', 1999, pg. 198.
+    """
+
+    app_fprime = 0
+    if fprime is None:
+        app_fprime = 1
+
+    x0 = Num.asarray(x0)
+    if maxiter is None:
+        maxiter = len(x0)*200
+    func_calls = 0
+    grad_calls = 0
+    k = 0
+    N = len(x0)
+    gtol = N*avegtol
+    I = Num.eye(N)
+    Hk = I
+
+    if app_fprime:
+        gfk = apply(approx_fprime,(x0,f)+args)
+        func_calls = func_calls + len(x0) + 1
+    else:
+        gfk = apply(fprime,(x0,)+args)
+        grad_calls = grad_calls + 1
+    xk = x0
+    sk = [2*gtol]
+    while (Num.add.reduce(abs(gfk)) > gtol) and (k < maxiter):
+        pk = -Num.dot(Hk,gfk)
+        alpha_k, fc, gc = line_search_BFGS(f,xk,pk,gfk,args)
+        func_calls = func_calls + fc
+        xkp1 = xk + alpha_k * pk
+        sk = xkp1 - xk
+        xk = xkp1
+        if app_fprime:
+            gfkp1 = apply(approx_fprime,(xkp1,f)+args)
+            func_calls = func_calls + gc + len(x0) + 1
+        else:
+            gfkp1 = apply(fprime,(xkp1,)+args)
+            grad_calls = grad_calls + gc + 1
+
+        yk = gfkp1 - gfk
+        k = k + 1
+
+        rhok = 1 / Num.dot(yk,sk)
+        A1 = I - sk[:,Num.newaxis] * yk[Num.newaxis,:] * rhok
+        A2 = I - yk[:,Num.newaxis] * sk[Num.newaxis,:] * rhok
+        Hk = Num.dot(A1,Num.dot(Hk,A2)) + rhok * sk[:,Num.newaxis] * sk[Num.newaxis,:]
+        gfk = gfkp1
+
+
+    if printmessg or fulloutput:
+        fval = apply(f,(xk,)+args)
+    if k >= maxiter:
+        warnflag = 1
+        if printmessg:
+            print "Warning: Maximum number of iterations has been exceeded"
+            print "         Current function value: %f" % fval
+            print "         Iterations: %d" % k
+            print "         Function evaluations: %d" % func_calls
+            print "         Gradient evaluations: %d" % grad_calls
+    else:
+        warnflag = 0
+        if printmessg:
+            print "Optimization terminated successfully."
+            print "         Current function value: %f" % fval
+            print "         Iterations: %d" % k
+            print "         Function evaluations: %d" % func_calls
+            print "         Gradient evaluations: %d" % grad_calls
+
+    if fulloutput:
+        return xk, fval, func_calls, grad_calls, warnflag
+    else:        
+        return xk
+
+
+def fminNCG(f, x0, fprime, fhess_p=None, fhess=None, args=(), avextol=1e-5, maxiter=None, fulloutput=0, printmessg=1):
+    """xopt = fminNCG(f, x0, fprime, fhess_p=None, fhess=None, args=(), avextol=1e-5,
+                       maxiter=None, fulloutput=0, printmessg=1)
+
+    Optimize the function, f, whose gradient is given by fprime using the
+    Newton-CG method.  fhess_p must compute the hessian times an arbitrary
+    vector. If it is not given, finite-differences on fprime are used to
+    compute it. See Wright, and Nocedal 'Numerical Optimization', 1999,
+    pg. 140.
+    """
+
+    x0 = Num.asarray(x0)
+    fcalls = 0
+    gcalls = 0
+    hcalls = 0
+    approx_hessp = 0
+    if fhess_p is None and fhess is None:    # Define hessian product
+        approx_hessp = 1
+    
+    xtol = len(x0)*avextol
+    update = [2*xtol]
+    xk = x0
+    k = 0
+    while (Num.add.reduce(abs(update)) > xtol) and (k < maxiter):
+        # Compute a search direction pk by applying the CG method to
+        #  del2 f(xk) p = - grad f(xk) starting from 0.
+        b = -apply(fprime,(xk,)+args)
+        gcalls = gcalls + 1
+        maggrad = Num.add.reduce(abs(b))
+        eta = min([0.5,Num.sqrt(maggrad)])
+        termcond = eta * maggrad
+        xsupi = 0
+        ri = -b
+        psupi = -ri
+        i = 0
+        dri0 = Num.dot(ri,ri)
+
+        if fhess is not None:               # you want to compute hessian once.
+            A = apply(fhess,(xk,)+args)
+            hcalls = hcalls + 1
+
+        while Num.add.reduce(abs(ri)) > termcond:
+            if fhess is None:
+                if approx_hessp:
+                    Ap = apply(approx_fhess_p,(xk,psupi,fprime)+args)
+                    gcalls = gcalls + 2
+                else:
+                    Ap = apply(fhess_p,(xk,psupi)+args)
+                    hcalls = hcalls + 1
+            else:
+                Ap = Num.dot(A,psupi)
+            # check curvature
+            curv = Num.dot(psupi,Ap)
+            if (curv <= 0):
+                if (i > 0):
+                    break
+                else:
+                    xsupi = xsupi + dri0/curv * psupi
+                    break
+            alphai = dri0 / curv
+            xsupi = xsupi + alphai * psupi
+            ri = ri + alphai * Ap
+            dri1 = Num.dot(ri,ri)
+            betai = dri1 / dri0
+            psupi = -ri + betai * psupi
+            i = i + 1
+            dri0 = dri1          # update Num.dot(ri,ri) for next time.
+    
+        pk = xsupi  # search direction is solution to system.
+        gfk = -b    # gradient at xk
+        alphak, fc, gc = line_search_BFGS(f,xk,pk,gfk,args)
+        fcalls = fcalls + fc
+        gcalls = gcalls + gc
+
+        update = alphak * pk
+        xk = xk + update
+        k = k + 1
+
+    if printmessg or fulloutput:
+        fval = apply(f,(xk,)+args)
+    if k >= maxiter:
+        warnflag = 1
+        if printmessg:
+            print "Warning: Maximum number of iterations has been exceeded"
+            print "         Current function value: %f" % fval
+            print "         Iterations: %d" % k
+            print "         Function evaluations: %d" % fcalls
+            print "         Gradient evaluations: %d" % gcalls
+            print "         Hessian evaluations: %d" % hcalls
+    else:
+        warnflag = 0
+        if printmessg:
+            print "Optimization terminated successfully."
+            print "         Current function value: %f" % fval
+            print "         Iterations: %d" % k
+            print "         Function evaluations: %d" % fcalls
+            print "         Gradient evaluations: %d" % gcalls
+            print "         Hessian evaluations: %d" % hcalls
+            
+    if fulloutput:
+        return xk, fval, fcalls, gcalls, hcalls, warnflag
+    else:        
+        return xk
+
+    
+
+if __name__ == "__main__":
+    import string
+    import time
+
+    
+    times = []
+    algor = []
+    x0 = [0.8,1.2,0.7]
+    start = time.time()
+    x = fmin(rosen,x0)
+    print x
+    times.append(time.time() - start)
+    algor.append('Nelder-Mead Simplex\t')
+
+    start = time.time()
+    x = fminBFGS(rosen, x0, fprime=rosen_der, maxiter=80)
+    print x
+    times.append(time.time() - start)
+    algor.append('BFGS Quasi-Newton\t')
+
+    start = time.time()
+    x = fminBFGS(rosen, x0, avegtol=1e-4, maxiter=100)
+    print x
+    times.append(time.time() - start)
+    algor.append('BFGS without gradient\t')
+
+
+    start = time.time()
+    x = fminNCG(rosen, x0, rosen_der, fhess_p=rosen3_hess_p, maxiter=80)
+    print x
+    times.append(time.time() - start)
+    algor.append('Newton-CG with hessian product')
+    
+
+    start = time.time()
+    x = fminNCG(rosen, x0, rosen_der, fhess=rosen3_hess, maxiter=80)
+    print x
+    times.append(time.time() - start)
+    algor.append('Newton-CG with full hessian')
+
+    print "\nMinimizing the Rosenbrock function of order 3\n"
+    print " Algorithm \t\t\t       Seconds"
+    print "===========\t\t\t      ========="
+    for k in range(len(algor)):
+        print algor[k], "\t -- ", times[k]
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/partition.py b/Aster/Cata/cataSTA10/Utilitai/partition.py
new file mode 100644 (file)
index 0000000..f26b15c
--- /dev/null
@@ -0,0 +1,1324 @@
+#@ MODIF partition Utilitai  DATE 26/10/2010   AUTEUR MAHFOUZ D.MAHFOUZ 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+import aster
+import string, os, time, sys, UserList, types
+import numpy as NP
+
+from Accas import _F
+from Noyau.N_utils import AsType
+
+# ============================================================================ #
+def enleve_doublons_liste(liste):
+   """
+      A partir d une liste qui peut contenir des doublons, on renvoie une liste sans
+      doublons (et qui reviendra triée)
+   """
+   #MC pourquoi ne pas faire :
+   # liste2 = NP.array(list(set(liste)))
+   # liste2.sort()
+   # Au cas ou ca ne serait pas deja un vecteur numpy      # Exemple
+   liste=NP.sort(NP.array(liste,copy=0))                   # [1, 2, 2, 3, 3, 4, 5]
+   liste_diff=liste[1:]-liste[:-1]                         # [1, 0, 1, 0, 1, 1]
+   liste_temp=NP.nonzero(liste_diff)[0]                    # [0, 2, 4, 5]
+   liste_indice=NP.zeros(liste_temp.shape[0]+1, dtype=int)
+   liste_indice[0]=0
+   liste_indice[1:]=liste_temp+1                           # [0, 1, 3, 5, 6]
+   liste2=NP.take(liste,liste_indice)                      # [1, 2, 3, 4, 5]
+   return liste2
+
+
+# ============================================================================ #
+class CONNEC(UserList.UserList) :
+   """
+      Connectivite : sequence mutable de sequences de noeuds
+      Pour l'instant, on s'appuie sur une liste de liste.
+   """
+   def __init__(self,nma) :
+      UserList.UserList.__init__(self,[None]*nma)
+
+   def Index(self) :
+      """
+         Retourne la connectivite sous forme de deux vecteurs numpy :
+            ind -> tableau des index (y compris le n+1 eme)
+            noe -> tableau des listes de noeuds
+      """
+      # Dimension des deux vecteurs
+      nma  = len(self)
+      ltot = NP.reduce(lambda x,y : x+len(y), self,0)
+      ind = NP.zeros(nma+1, dtype=int)
+      noe = NP.zeros(ltot, dtype=int)
+
+      # Construction des vecteurs
+      ind[0] = 0
+      for i in range(nma) :
+         m = self[i]
+         ind[i+1] = ind[i] + len(m)
+         noe[ind[i]:ind[i+1]] = NP.array(m)
+
+      return ind,noe
+
+# ============================================================================ #
+class MAIL_PY :
+   """
+      SD PYTHON  MAILLAGE
+      La numeration est 0..N-1 pour les noeuds et 0..M-1 pour les mailles
+
+EXEMPLE D'UTILISATION
+---------------------
+from Utilitai.Partition import *
+import numpy as N
+
+mail=LIRE_MAILLAGE();
+
+mm = MAIL_PY()
+mm.FromAster(mail)
+
+# Nombre de noeuds
+nbno = mm.dime_maillage[0]
+# Nombre de mailles
+nbma = mm.dime_maillage[2]
+
+# Coordonnées des noeuds
+coord    = mm.cn
+# Noms des noeuds
+linomno  = list(mm.correspondance_noeuds)
+# Groupe de Mailles
+collgrma = mm.gma
+# Groupe de Noeuds
+collgrno = mm.gno
+# La table de connextivité
+connex   = mm.co
+
+# Le décalage de -1 est déjà fait sur les numéros des noeuds et des mailles
+# Pour ajouter des Noeuds
+   #  Coordonnées
+         LesNoeudsEnPlus = NP.array([[xx,yy,zz]])
+         LesNoeudsEnPlus = NP.concatenate((LesNoeudsEnPlus,NP.array([[xx,yy,zz]])))
+   #  Noms
+         NomNoeudsEnPlus =     ['X%' % in]
+         NomNoeudsEnPlus.append('X%' % in)
+# Ajout des noeuds au maillage : coordonnées , noms
+   mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+   mm.correspondance_noeuds = tuple(linomno + NomNoeudsEnPlus )
+
+# Pour ajouter des mailles (ici TRIA3)  in [ 1 , NbMailleAjouté ]
+   #  Noms
+         NomMaillesEnPlus =     ['Z%d' % im]
+         NomMaillesEnPlus.append('Z%d' % im)
+   #  Numéro des mailles
+         num_maille = [ nbma + im ]
+         num_maille.append( nbma + im )
+   #  Noeuds des mailles
+         NoeudsMailles = [NP.array([i1,i2,i3])]
+         NoeudsMailles.append(NP.array(NP.array([i1,i2,i3])))
+# Ajout des TRIA3
+   # Type de maille
+         typ_maille = mm.dic['TRIA3']
+         mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjouté)))
+   # Nom des mailles
+         mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+   # connectivite des éléments
+      mm.co += NoeudsMailles
+
+# Ajout d'un groupe de maille contenant les mailles ajoutés
+   maillage_python.gma['XXXAJOUT'] = NP.array(num_maille)
+
+# Ecriture dans un fichier, et transfert dans l'espace Aster
+   unite = mm.ToAster()
+   mail = LIRE_MAILLAGE(UNITE=unite)
+   """
+
+   def __init__(self, nno=0, nma=0, ndim=None) :
+      self.ndim = ndim
+      if ndim is None:
+         # on initialise le tableau au plus grand
+         ndim = 3
+      self.cn  = NP.zeros((nno, ndim), dtype=int)
+      self.tm  = NP.zeros(nma, dtype=int)
+      self.co  = CONNEC(nma)
+      self.gma = {}
+      self.gno = {}
+      self.indice_noeuds = NP.arange(nno)
+
+      self.correspondance_noeuds = []
+      self.correspondance_mailles = []
+
+      try:
+         import aster
+         nom_mailles = (None,) + string.strip(aster.getvectjev('&CATA.TM.NOMTM'))
+      except:
+         nom_mailles = (None,
+         'POI1',   'SEG2',   'SEG22',  'SEG3',   'SEG33',  'SEG4',   'TRIA3',
+         'TRIA33', 'TRIA6',  'TRIA66', 'TRIA7',  'QUAD4',  'QUAD44', 'QUAD8',
+         'QUAD88', 'QUAD9',  'QUAD99', 'TETRA4', 'TETRA10','PENTA6', 'PENTA15',
+         'PYRAM5', 'PYRAM13','HEXA8',  'HEXA20', 'HEXA27', 'TR3QU4', 'QU4TR3',
+         'TR6TR3', 'TR3TR6', 'TR6QU4', 'QU4TR6', 'TR6QU8', 'QU8TR6', 'TR6QU9',
+         'QU9TR6', 'QU8TR3', 'TR3QU8', 'QU8QU4', 'QU4QU8', 'QU8QU9', 'QU9QU8',
+         'QU9QU4', 'QU4QU9', 'QU9TR3', 'TR3QU9', 'SEG32',  'SEG23' )
+
+      dic_mailles = {}
+      for i in range(len(nom_mailles)) :
+         dic_mailles[nom_mailles[i]] = i
+
+      self.nom = nom_mailles
+      self.dic = dic_mailles
+
+      try:
+         psyco.bind(self.FromAster)
+      except: pass
+
+# -------------------------------------------------------------
+   def get_connexite(self, nom, nma):
+      co=CONNEC(nma)
+      dico_connexite = aster.getcolljev(nom)
+      for element in dico_connexite.keys() :
+         co[int(element)-1] = (NP.array(dico_connexite[element])-1)
+      return co
+
+   def get_coordonnees_noeuds(self, nom, nombre_noeuds):
+      assert self.ndim != None, """Dimension réelle du maillage non initialisée."""
+      lcoord = aster.getvectjev(nom)
+      coordonnees_noeuds = NP.array(lcoord)
+      nno = len(coordonnees_noeuds) / 3
+      assert nno == nombre_noeuds, """Données incohérentes."""
+      coordonnees_noeuds.shape = (nno, 3)
+      cn = coordonnees_noeuds[:, :self.ndim]
+      return cn
+
+# -------------------------------------------------------------
+   def init_dimension(self, ndim):
+      """Initialise la dimension du maillage."""
+      if self.ndim is None:
+         self.ndim = ndim
+      assert ndim == self.ndim, """Il est interdit de modifier la dimension du maillage !"""
+
+# -------------------------------------------------------------
+   def FromAster(self,nom) :
+      # On accepte le concept Aster ou bien la chaine texte de son nom
+      if type(nom)!=types.StringType:
+         nom_maillage = nom.nom
+      else:
+         nom_maillage = nom
+      nom_maillage=string.ljust(nom_maillage,8)
+
+      # recuperation de la taille
+      self.dime_maillage = aster.getvectjev(nom_maillage+'.DIME')
+      nombre_noeuds      = self.dime_maillage[0]
+      nombre_mailles     = self.dime_maillage[2]
+      ndim               = self.dime_maillage[5]
+      self.init_dimension(ndim)
+
+      # coordonnees des noeuds
+      self.cn = self.get_coordonnees_noeuds(nom_maillage+'.COORDO    .VALE', nombre_noeuds)
+
+      # type de maille
+      self.tm = NP.array(aster.getvectjev(nom_maillage+'.TYPMAIL'))
+
+      # connexite
+      self.co = self.get_connexite(nom_maillage+'.CONNEX', nombre_mailles)
+
+      self.indice_noeuds=NP.arange(nombre_noeuds)
+
+      # groupe de noeuds
+      Lno_groupno_tot = aster.getcolljev(nom_maillage+'.GROUPENO')
+
+      Lno_groupno={}
+      for key in Lno_groupno_tot :
+         # Tolerance car parfois defi_group crée des groupes nuls à clé entiere
+         try:
+            Lno_groupno[key.strip()]=NP.array(Lno_groupno_tot[key])-1
+         except:
+            pass
+      self.gno=Lno_groupno
+
+      # groupe de mailles
+      Lma_groupma_tot     = aster.getcolljev(nom_maillage+'.GROUPEMA')
+      Lma_groupma={}
+      for key in Lma_groupma_tot :
+         Lma_groupma[key.strip()]=NP.array(Lma_groupma_tot[key])-1
+      self.gma=Lma_groupma
+
+      del(Lma_groupma_tot)
+
+      # listes de correspondance entre Aster et Mail-Py
+      self.correspondance_noeuds  = aster.getvectjev(nom_maillage+'.NOMNOE')
+      self.correspondance_mailles = aster.getvectjev(nom_maillage+'.NOMMAI')
+
+# -------------------------------------------------------------
+   def ToAster(self,unite=None):
+      from Utilitai.UniteAster import UniteAster
+      try:
+         LIRE_MAILLAGE   = self.jdc.get_cmd('LIRE_MAILLAGE')
+      except:
+         try:
+            from Cata.cata import LIRE_MAILLAGE
+         except:
+            print "Il faut lancer ce programme depuis Aster pour pouvoir générer un maillage Aster."
+            sys.exit()
+
+      UL = UniteAster()
+      # Récupération d'une unité logique libre si besoin
+      if ( unite == None ): unite = UL.Libre(action='ASSOCIER')
+      fichier = UL.Nom(unite)
+      # Bascule le fichier en F : ferme
+      UL.Etat(unite,etat='F')
+      # Ouverture du fichier en WRITE
+      f = open(fichier, 'w')
+      # Sauvegarde du maillage dans le fichier
+      f.write( self.Voir_Mail() )
+      f.close()
+      # Remet les unités comme au debut
+      UL.EtatInit()
+
+      return unite
+
+# -------------------------------------------------------------
+   def __str__(self) :
+      return self.Voir_Mail()
+
+# -------------------------------------------------------------
+   def Voir_Mail(self) :
+      """
+         Impression au format ASTER
+      """
+      l = []
+      l.append('TITRE')
+      l.append('%  CLASSE PY_MAIL -> MAIL')
+      l.append('FINSF')
+      l.append('%')
+
+      (nno,ndim) = self.cn.shape
+      self.init_dimension(ndim)
+
+      # Coordonnees des noeuds
+      l.append('COOR_%sD' % ndim)
+
+      #  format des nombres : 21.14E ==> -3.00000000000002D-04
+      #  longueur d'une ligne : 8 + (2 + 21)*3 = 77
+      fmt = '  '.join(["%21.14E"] * ndim)
+      # Si le maillage initial ne provient pas d'Aster
+      if len(self.correspondance_noeuds) == 0:
+         for i in range(nno) :
+            ch = fmt % tuple([self.cn[i, k] for k in range(ndim)])
+            l.append("%-8s  %s" % ('N'+repr(i), ch))
+
+      # Si le maillage initial provient d'Aster
+      else:
+         for i in range(nno) :
+            ch = fmt % tuple([self.cn[i, k] for k in range(ndim)])
+            l.append("%-8s  %s" % (self.correspondance_noeuds[i], ch))
+
+      # Connectivité des mailles
+      ind = range(len(self.tm))
+      ty = 0
+      # Si le maillage initial ne provient pas d'Aster
+      if len(self.correspondance_mailles) == 0:
+         for m in ind :
+            if self.tm[m] <> ty :
+               l.append('FINSF') ; l.append('%')
+               ty = self.tm[m]
+               l.append(self.nom[ty])
+            ch = 'M%d ' % m
+            for n in self.co[m] :
+               zn = ' N%d'% n
+               if ( len(ch)+len(zn) > 80 ):
+                  l.append(ch)
+                  ch = '      ' + zn
+               else:
+                  ch += zn
+            l.append(ch)
+
+      # Si le maillage initial provient d'Aster
+      else:
+         for m in ind :
+            if self.tm[m] <> ty :
+               l.append('FINSF') ; l.append('%')
+               ty = self.tm[m]
+               l.append(self.nom[ty])
+            ch = self.correspondance_mailles[m]+' '
+            for n in self.co[m] :
+               zn = ' ' + self.correspondance_noeuds[n]
+               if ( len(ch)+len(zn) > 80 ):
+                  l.append(ch)
+                  ch = '      ' + zn
+               else:
+                  ch += zn
+            l.append(ch)
+      l.append('FINSF') ; l.append('%')
+
+
+      # Group_ma et Group_no
+      entete = ['GROUP_MA','GROUP_NO']
+      d_gp   = [self.gma,self.gno]
+      pref   = ['M','N']
+
+      # Si le maillage initial ne provient pas d'Aster
+      if len(self.correspondance_mailles) == 0:
+         for (d_gp,entete,prefixe) in [(self.gma,'GROUP_MA','M'),(self.gno,'GROUP_NO','N')] :
+            for gp in d_gp :
+               if len(d_gp[gp])>0:  # On ne prend en compte que les group_* non vides
+                  l.append(entete)
+                  l.append('  ' + gp)
+                  ch = ''
+                  for o in d_gp[gp]:
+                     zm = ' %s%d' % (prefixe , o)
+                     if ( len(ch)+len(zm) > 80 ):
+                        l.append(ch)
+                        ch = zm
+                     else:
+                        ch += zm
+                  l.append(ch)
+                  l.append('FINSF') ; l.append('%')
+
+      # Si le maillage initial provient d'Aster
+      else:
+         for (d_gp,entete,prefixe) in [(self.gma,'GROUP_MA','M'),(self.gno,'GROUP_NO','N')] :
+            for gp in d_gp :
+               if len(d_gp[gp])>0:  # On ne prend en compte que les group_* non vides
+                  l.append(entete)
+                  l.append('  ' + gp)
+                  ch = ''
+                  for o in d_gp[gp]:
+                     if prefixe=='M':
+                        zm = ' ' + self.correspondance_mailles[o]
+                     else:
+                        zm = ' ' + self.correspondance_noeuds[o]
+                     if ( len(ch)+len(zm) > 80 ):
+                        l.append(ch)
+                        ch = zm
+                     else:
+                        ch += zm
+                  l.append(ch)
+                  l.append('FINSF') ; l.append('%')
+
+      # Fin
+      l.extend(['FIN', ''])
+      return os.linesep.join(l)
+
+
+# ============================================================================ #
+class PARTITION:
+
+  def __init__(self, jdc=None ,nb=0):
+
+    self.jdc = jdc
+
+    self.fichier_out        = ''
+    self.liste_mailles      = NP.array( [] )
+    self.liste_sd           = NP.array( [] )
+    self.liste_mailles_bord = []
+    self.liste_sd_bord      = []
+
+    self.MAILLAGE_Python    = None
+
+    self.RELATIONS      = { 'C_plus' : None,
+                            'C_moins': None,
+                            'nr': 0 }
+
+    self.ASTER          = { 'MAILLAGE'        : None,
+                            'MODELE'          : None,
+                            'GROUP_MA'        : None,
+                            'GROUP_MA_BORD'   : None,
+                            'DICO_SD_MAILLES' : None,
+                             }
+
+    self.OPTIONS        = { 'NB_PART'     : '',
+                            'ALGO'        : '',
+                            'INFO'        : '',
+                            'rep_metis'   : aster.repout(),
+                            'exe_metis'   : aster.repout() + 'pmetis',
+                            'fichier_in'  : 'fort.66',
+                            'fichier_out' : 'fort.68',
+                            'elimine_bords': 'OUI',
+                             }
+
+    self.Creation_Dico_Correspondance_Type_Maille()
+
+
+
+# ---------------------------------------------------------------------------- #
+
+  def __str__(self) :
+    """
+      Impression du contenu de la partition
+    """
+    l = []
+    l.append( 'Contenu de la partition :' )
+    l.append( '-------------------------' )
+    try: l.append( '- Maillage       : ' + str(self.ASTER['MAILLAGE'].nom) )
+    except: pass
+    try: l.append( '- Modele         : ' + str(self.ASTER['MODELE'].nom) )
+    except: pass
+    l.append( '- Nb part        : ' + str(self.OPTIONS['NB_PART']) )
+    l.append( '- Niveau INFO    : ' + str(self.OPTIONS['INFO']) )
+    l.append( '- Liste group_ma : ' + str(self.ASTER['GROUP_MA']) )
+
+    return string.join(l,'\n')
+
+# ---------------------------------------------------------------------------- #
+
+  def Partitionne_Aster(self, MAILLAGE, NB_PART, MODELE=None, METHODE=None, LOGICIEL=None, INFO=1):
+
+    self.t00 = time.clock()
+
+    self.OPTIONS['INFO'] = INFO
+
+    if MODELE:
+      # Recuperation de la liste des mailles à perndre en compte
+      self.ASTER['MODELE'] = MODELE
+      self.ASTER['MAILLAGE'] = MAILLAGE
+      _LST_MA = self.Modele_to_Liste_Mailles(MODELE)
+
+    elif MAILLAGE:
+      self.ASTER['MAILLAGE'] = MAILLAGE
+      _LST_MA = None
+
+
+    # Creation du maillage Python correspondant au maillage Aster
+    MAILLAGE_Python = MAIL_PY()
+    MAILLAGE_Python.FromAster(MAILLAGE.nom)
+
+    # Partitionne le maillage Python avec la liste de mailles _LST_MA
+    self.Partitionne_Maillage(MAILLAGE_Python, NB_PART, MAILLE=_LST_MA, METHODE=METHODE, LOGICIEL=LOGICIEL, INFO=INFO)
+
+    return
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Partitionne_Maillage(self, MAILLAGE_Python, NB_PART, MAILLE=None, METHODE=None, LOGICIEL=None, INFO=1):
+
+    self.t00 =  time.clock()
+
+    if METHODE:
+      self.OPTIONS['exe_metis'] = aster.repout() + string.lower(METHODE)
+    elif LOGICIEL:
+      self.OPTIONS['exe_metis'] = LOGICIEL
+
+    self.OPTIONS['NB_PART'] = NB_PART
+    self.OPTIONS['INFO']    = INFO
+    self.MAILLAGE_Python    = MAILLAGE_Python
+
+    exe_metis = self.OPTIONS['exe_metis']
+    f_metis   = self.OPTIONS['fichier_in']
+    fw_metis  = self.OPTIONS['fichier_out']
+
+    _LST_MA = MAILLE
+
+    # On initialise la connectivité et la connectivité inverse des aretes
+    self.MAILLAGE_Python.ca = {}
+    self.MAILLAGE_Python.cia = {}
+
+    _DIM = self.MAILLAGE_Python.dime_maillage[5]
+    _LST_TMA = self.MAILLAGE_Python.tm
+
+    if self.OPTIONS['INFO']>=5:
+      print 'cn=', self.MAILLAGE_Python.cn
+      print 'tm=', self.MAILLAGE_Python.tm
+      print 'co=', self.MAILLAGE_Python.co
+      print 'gma=', self.MAILLAGE_Python.gma
+      print 'gno=', self.MAILLAGE_Python.gno
+      print 'dim=', self.MAILLAGE_Python.dime_maillage
+    if self.OPTIONS['INFO']>=5: print '_LST_MA=', _LST_MA
+
+
+    # Elimination des mailles de bords
+    if self.OPTIONS['elimine_bords']!='NON':
+
+      # Liste des mailles à prendre en compte : dimension _DIM
+      _D_DIM_MAILLES = self.Creation_Listes_Mailles_Par_Dim(self.MAILLAGE_Python.tm, _LST_MA=_LST_MA)
+
+      # Connectivité et connectivité inverse sur les bords
+      self.Connectivite_Aretes()
+
+      self.liste_mailles = _D_DIM_MAILLES[ _DIM ]
+
+      # Pour prendre en compte des mélanges d'elements de dimension differente
+      _LST, _LST_BD = self.Elimination_Mailles_de_bords(MAILLAGE_Python, _D_DIM_MAILLES, _DIM)
+      self.liste_mailles = NP.concatenate( (self.liste_mailles,NP.array(_LST)) )
+
+      if self.OPTIONS['INFO']>=5:
+        print '_LST_BD=',_LST_BD
+        print '_LST=',_LST
+
+    else:
+      self.liste_mailles = _LST_MA
+
+
+    # Restriction des connectivités aux mailles à prendre en compte
+    self.Connectivite_Aretes(OPTION='all', _LST_OK=self.liste_mailles)
+
+    # Creation de l'arbre de connectivité des bords
+    self.Creation_Graphe()
+
+    # Reduction de l'arbre de connectivité des bords
+    _nb = self.Reduction_Graphe(_DIM)
+
+    # Ecriture du fichier pour Metis/Chaco/Jostle
+    _D_CORRES = self.Ecrire_Graphe(f_metis, _nb)
+
+    # Lancement de metis sur le fichier fort.UL (production de fort.UL.part.N)
+    txt = exe_metis + ' ' + f_metis + ' ' + str(NB_PART)
+    print 'Commande : ',txt
+    os.system( txt )
+
+    # Lecture du fichier resultant de Metis
+    self.fichier_out = f_metis + '.part.' + str(NB_PART)
+    self.liste_sd = self.Lecture_fichier_sdd(self.fichier_out, self.liste_mailles)
+
+    # Traitement des mailles de bords (on les reinjecte dans un SD)
+    if self.OPTIONS['elimine_bords']!='NON':
+      self.Affectation_Mailles_de_bords(_LST_BD, _DIM)
+
+    t1 = time.clock()
+    print "--- FIN PARTITIONNEMENT : ", t1 - self.t00
+
+    return
+
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Creation_Dico_Correspondance_Type_Maille(self):
+
+    # TYPE_ELEM : CF. &CATA.TM
+    #   1 - >POI1    <>SEG2    <>SEG22   <>SEG3    <>SEG33   <>SEG4    <>TRIA3   <
+    #   8 - >TRIA33  <>TRIA6   <>TRIA66  <>TRIA7   <>QUAD4   <>QUAD44  <>QUAD8   <
+    #  15 - >QUAD88  <>QUAD9   <>QUAD99  <>TETRA4  <>TETRA10 <>PENTA6  <>PENTA15 <
+    #  22 - >PYRAM5  <>PYRAM13 <>HEXA8   <>HEXA20  <>HEXA27  <>TR3QU4  <>QU4TR3  <
+    #  29 - >TR6TR3  <>TR3TR6  <>TR6QU4  <>QU4TR6  <>TR6QU8  <>QU8TR6  <>TR6QU9  <
+    #  36 - >QU9TR6  <>QU8TR3  <>TR3QU8  <>QU8QU4  <>QU4QU8  <>QU8QU9  <>QU9QU8  <
+    #  43 - >QU9QU4  <>QU4QU9  <>QU9TR3  <>TR3QU9  <>SEG32   <>SEG23   <
+
+    # Creation du dictionnaire des correspondance type_maille -> liste des aretes
+    maille2aretes={}
+    # POI
+    maille2aretes[1]  = [ ]
+    # SEG
+    maille2aretes[2]  = [ (0,1) ]
+    maille2aretes[3]  = maille2aretes[4] = maille2aretes[5] = maille2aretes[6] = maille2aretes[2]
+    # TRIA
+    maille2aretes[7]  = [ (0,1),(1,2),(0,2) ]
+    maille2aretes[8]  = maille2aretes[9] = maille2aretes[10] = maille2aretes[11] = maille2aretes[7]
+    # QUAD
+    maille2aretes[12] = [ (0,1),(1,2),(2,3),(0,3) ]
+    maille2aretes[13] = maille2aretes[14] = maille2aretes[15] = maille2aretes[16] = maille2aretes[17] = maille2aretes[12]
+    # TETRA
+    maille2aretes[18] = [ (0,1,2),(0,1,3),(0,2,3),(1,3,2) ]
+    maille2aretes[19] = maille2aretes[18]
+    # PENTA
+    maille2aretes[20] = [ (0,1,2),(3,4,5),(0,2,5,3),(0,1,4,3),(2,1,4,5) ]
+    maille2aretes[21] = maille2aretes[20]
+    # PYRAM
+    maille2aretes[22] = [ (0,1,4),(1,2,4),(2,3,4),(3,0,4),(0,1,2,3) ]
+    maille2aretes[23] = maille2aretes[22]
+    # HEXA
+    maille2aretes[24] = [ (0,1,2,3), (4,5,6,7), (1,2,6,5), (2,3,7,6), (7,4,0,3), (4,5,1,0) ]
+    maille2aretes[25] = maille2aretes[26] =  maille2aretes[24]
+
+
+    # dictionnaire de correspondance entre type_maille -> nb noeud (maille linéaire)
+    maille2nb={}
+    # POI
+    maille2nb[1]  = 1
+    # SEG
+    maille2nb[2]  = 2
+    maille2nb[3]  = maille2nb[4] = maille2nb[5] = maille2nb[6] = maille2nb[2]
+    # TRIA
+    maille2nb[7]  = 3
+    maille2nb[8]  = maille2nb[9] = maille2nb[10] = maille2nb[11] = maille2nb[7]
+    # QUAD
+    maille2nb[12] = 4
+    maille2nb[13] = maille2nb[14] = maille2nb[15] = maille2nb[16] = maille2nb[17] = maille2nb[12]
+    # TETRA
+    maille2nb[18] = 4
+    maille2nb[19] = maille2nb[18]
+    # PENTA
+    maille2nb[20] = 5
+    maille2nb[21] = maille2nb[20]
+    # PYRAM
+    maille2nb[22] = 5
+    maille2nb[23] = maille2nb[22]
+    # HEXA
+    maille2nb[24] = 6
+    maille2nb[25] = maille2nb[26] =  maille2nb[24]
+
+
+    # dictionnaire de correspondance entre type_maille -> dimension
+    maille2dim = {}
+    # POI
+    maille2dim[1]  = 0
+    # SEG
+    maille2dim[2]  = 1
+    maille2dim[3]  = maille2dim[4] = maille2dim[5] = maille2dim[6] = maille2dim[2]
+    # TRIA
+    maille2dim[7]  = 2
+    maille2dim[8]  = maille2dim[9] = maille2dim[10] = maille2dim[11] = maille2dim[7]
+    # QUAD
+    maille2dim[12] = 2
+    maille2dim[13] = maille2dim[14] = maille2dim[15] = maille2dim[16] = maille2dim[17] = maille2dim[12]
+    # TETRA
+    maille2dim[18] = 3
+    maille2dim[19] = maille2dim[18]
+    # PENTA
+    maille2dim[20] = 3
+    maille2dim[21] = maille2dim[20]
+    # PYRAM
+    maille2dim[22] = 3
+    maille2dim[23] = maille2dim[22]
+    # HEXA
+    maille2dim[24] = 3
+    maille2dim[25] = maille2dim[26] =  maille2dim[24]
+
+    # On stocke les dictionnaires
+    self.maille2aretes = maille2aretes
+    self.maille2nb     = maille2nb
+    self.maille2dim    = maille2dim
+
+    return
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Modele_to_Liste_Mailles(self, MODELE):
+
+    nommod = string.ljust(MODELE.nom,8)
+    _DIC_MA  = aster.getcolljev(nommod.ljust(8)+'.MODELE    .LIEL')
+
+    # Creation de la liste des mailles
+    ll = []
+    for type_maille in _DIC_MA.keys():
+      ll.extend( _DIC_MA[type_maille][0:-1] )
+    _LST_MA = NP.array( ll ) - 1
+
+    if self.OPTIONS['INFO']>=5:
+      print '\n# ----- MODELE ----- #\n'
+      print '_LST_MA=',len(_LST_MA),_LST_MA
+      print '_DIC_MA=',len(_DIC_MA),_DIC_MA
+
+    return _LST_MA
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Creation_Listes_Mailles_Par_Dim(self, _LST_TMA, _LST_MA=None):
+
+    t0 = time.clock()
+
+    # Si _LST_MA est renseigné on extrait la liste des TMA correspondante aux mailles de _LST_MA
+    if _LST_MA != None:
+      _LST_TMA = NP.take(_LST_TMA,_LST_MA)
+    else:
+      _LST_MA = NP.arange(len(_LST_TMA))
+
+    _D_DIM_MAILLES = {}
+
+    # Liste des mailles 3D (type maille de 18 à 26)
+    _lst = NP.where( _LST_TMA>=18, -3, _LST_TMA )
+    _tmp = NP.where( _lst==-3, -1, 0 )
+#    _D_DIM_MAILLES[3] = NP.nonzero( _tmp )
+    _D_DIM_MAILLES[3] = NP.take(_LST_MA, NP.nonzero( _tmp )[0] )
+
+    # Liste des mailles 2D (type maille de 7 à 17)
+    _lst = NP.where( _lst>=7, -2, _lst )
+    _tmp = NP.where( _lst==-2, -1, 0 )
+    _D_DIM_MAILLES[2] = NP.take(_LST_MA, NP.nonzero( _tmp )[0] )
+
+    # Liste des mailles 1D (type maille de 2 à 6)
+    _lst = NP.where( _lst>=2, -1, _lst )
+    _tmp = NP.where( _lst==-1, -1, 0 )
+    _D_DIM_MAILLES[1] = NP.take(_LST_MA, NP.nonzero( _tmp )[0] )
+
+    # Liste des mailles 0D (type maille 1)
+    _lst = NP.where( _lst>=1, -4, _lst )
+    _tmp = NP.where( _lst==-4, -1, 0 )
+    _D_DIM_MAILLES[0] = NP.take(_LST_MA, NP.nonzero( _tmp )[0] )
+
+
+    if self.OPTIONS['INFO']>=5:
+      for i in _D_DIM_MAILLES.keys():
+        print "-----------------"
+        print 'Dim:',i, _D_DIM_MAILLES[i]
+      print "-----------------"
+
+    print "--- FIN Creation des listes de mailles par Dim : ", time.clock() - t0
+
+    return _D_DIM_MAILLES
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Connectivite_Aretes(self, OPTION=None, _LST_OK=None):
+
+    t0 = time.clock()
+
+    # Si _LST_OK n'est pas renseigné on prend toutes les mailles
+    if not _LST_OK: _LST_OK = NP.arange(len(self.MAILLAGE_Python.tm))
+
+    if self.OPTIONS['INFO']>=5: print '_LST_OK (ca)=',_LST_OK
+
+    maille2aretes = self.maille2aretes
+
+    # Creation de la :
+    #   - connectivite des aretes (self.MAILLAGE_Python.ca) : m1 -> [ (a1, a2), .. ]
+    #   - connectivite inverse des aretes (self.MAILLAGE_Python.cia) : (a1, a2) -> [ m1, m2, ... ]
+
+    self.MAILLAGE_Python.ca  = {}
+    self.MAILLAGE_Python.cia = {}
+
+    for n in _LST_OK:
+
+        n1 = self.MAILLAGE_Python.tm[n]
+
+        l_aretes = maille2aretes[n1]           # liste des aretes de la maille n
+        l_noeuds = self.MAILLAGE_Python.co[n]  # liste des noeuds de la maille n
+
+        for arete in l_aretes:
+          ll = []
+          for i in arete:
+            ll.append( l_noeuds[i] )
+          ll.sort()
+          ll = tuple(ll)
+
+          # Table de connectivité des aretes
+          if OPTION:
+            if not self.MAILLAGE_Python.ca.has_key(n): self.MAILLAGE_Python.ca[n]=[]
+            self.MAILLAGE_Python.ca[n].append(ll)
+#             try:
+#               self.MAILLAGE_Python.ca[n].append(ll)
+#             except KeyError:
+#               self.MAILLAGE_Python.ca[n]=[ll]
+
+          # Table de connectivité inverse des aretes
+          if not self.MAILLAGE_Python.cia.has_key(ll): self.MAILLAGE_Python.cia[ll]=[]
+          self.MAILLAGE_Python.cia[ll].append(n)
+#           try:
+#             self.MAILLAGE_Python.cia[ll].append(n)
+#           except KeyError:
+#             self.MAILLAGE_Python.cia[ll]=[n]
+
+
+    if self.OPTIONS['INFO']>=5:
+      for k in self.MAILLAGE_Python.cia.keys():
+        print 'cia:',k, '     ', self.MAILLAGE_Python.cia[k]
+      if OPTION:
+        for k in self.MAILLAGE_Python.ca.keys():
+          print 'ca: ',k, '     ', self.MAILLAGE_Python.ca[k]
+
+
+    print "--- FIN Creation de la connectivite simple et inverse des aretes : ", time.clock() - t0
+
+    return
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Elimination_Mailles_de_bords(self, MAILLAGE_Python, _D_DIM_MAILLES, _DIM):
+    """
+    Extraction des mailles de bords (mailles incluses dans un bord d une autre maille)
+    """
+
+    t0 = time.clock()
+
+    _LST_TMA = self.MAILLAGE_Python.tm
+
+    if self.OPTIONS['INFO']>=5:
+      MAILLAGE = self.ASTER['MAILLAGE']
+      nommail = string.ljust(MAILLAGE.nom,8)
+      _LST_MAI = aster.getvectjev(nommail.ljust(8)+'.NOMMAI')
+
+    # Le dico maille2nb donne le nombre de noeuds definissant un bord (lineaire)
+    maille2nb = self.maille2nb
+
+
+    # construction des listes des mailles de dim N-1 :
+    # _LST_OK :   Mailles de dim N-i qui ne sont pas un bord des mailles de dim N
+    # _LST_BD :   Mailles de dim N-i qui sont un bord
+    #
+    if self.OPTIONS['INFO']>=5: print '\n\nElimination des mailles de bord de DIM', _DIM - 1
+
+    _LST4 = _D_DIM_MAILLES[ _DIM - 1 ]
+    _LST_IND = NP.arange( len(_LST4) ) + 1  # on ajoute 1 pour eviter le premier 0 dans les test nonzero plus bas
+
+    if self.OPTIONS['INFO']>=5: print '  Mailles concernées=',_LST4
+
+    i=0
+    for m in _LST4:
+      if self.OPTIONS['INFO']>=5: print '\n  Maille de dim N-1:',m, ' Aster:',string.strip(_LST_MAI[m]), ' TMA:',self.MAILLAGE_Python.tm[m], ' CO:',self.MAILLAGE_Python.co[m], '(noeuds de cette maille)'
+      nb = maille2nb[ self.MAILLAGE_Python.tm[m] ]
+      ll = self.MAILLAGE_Python.co[m][0:nb]
+      ll = NP.sort(ll)
+      ll = ll.tolist()
+      ll = tuple(ll)
+      if self.OPTIONS['INFO']>=5: print '  Bord (lineaire)', ll, nb
+
+      try:
+        if self.OPTIONS['INFO']>=5: print '  CIA=', self.MAILLAGE_Python.cia[ ll ], '(mailles de dim N qui ont cette maille pour bord)'
+        _tmp=[]
+        for maille in self.MAILLAGE_Python.cia[ ll ]:
+          if self.OPTIONS['INFO']>=5: print '  Maille N:', maille, 'Aster:', string.strip(_LST_MAI[maille]), ' TMA:', self.MAILLAGE_Python.tm[maille]
+#        self.liste_mailles_bord.append(m)
+      except:
+        if self.OPTIONS['INFO']>=5: print '  Maille non-bord'
+        _LST_IND[i] = 0
+
+      i+=1
+
+    # Recuperation des mailles de bords et non-bords
+    _LST_BD = NP.nonzero(_LST_IND)[0]
+    _LST_BD = NP.take(_LST4,_LST_BD)
+
+    _LST_OK = NP.where( _LST_IND==0, 1 , 0 )
+    _LST_OK = NP.nonzero(_LST_OK)[0]
+    _LST_OK = NP.take(_LST4,_LST_OK)
+
+    if self.OPTIONS['INFO']>=5: print '\nListe Maille de bords de DIM', _DIM - 1,' :',_LST_BD
+    if self.OPTIONS['INFO']>=5: print 'Liste Maille de DIM', _DIM - 1,'qui ne sont pas des bords :',_LST_OK
+
+    print "--- FIN Maille de bords de DIM",_DIM - 1, " : ", time.clock() - t0
+    t0 = time.clock()
+
+
+    # On cherche à marier les mailles de dimension N-2, N-3
+    # Peut etre lent car on utilise la connectivité ! Mais pour le moment on a rien d'autre.
+
+    _LST_BD0 = []
+    _LST_OK0 = []
+    _D_BD = {}
+    for d in range(_DIM-1):
+      _LST4 = _D_DIM_MAILLES[ d ]
+      if self.OPTIONS['INFO']>=5: print '\n\nElimination des mailles de bord de DIM', d
+      if self.OPTIONS['INFO']>=5: print '  Mailles concernées=',_LST4
+      for mai in _LST4:
+        if self.OPTIONS['INFO']>=5: print '\n  Maille:', mai, ' Aster:',string.strip(_LST_MAI[mai]), ' TMA:',self.MAILLAGE_Python.tm[mai], ' CO:',self.MAILLAGE_Python.co[mai], '(noeuds de cette maille)'
+
+        nb = maille2nb[ self.MAILLAGE_Python.tm[mai] ]
+        ll = self.MAILLAGE_Python.co[mai][0:nb]
+        ll = NP.sort(ll)
+        ll = ll.tolist()
+        _tmp = tuple(ll)
+#        _tmp = self.MAILLAGE_Python.co[mai]
+
+        if self.OPTIONS['INFO']>=5: print '  Bord (lineaire):', _tmp, nb
+
+        ok=0
+        for arete in self.MAILLAGE_Python.cia:
+          _nb=0
+          for noe in _tmp:
+            if noe in arete: _nb+=1
+          if _nb == len(_tmp):
+            if self.OPTIONS['INFO']>=5: print '  Maille N+i:', self.MAILLAGE_Python.cia[arete], '- Arete:', arete
+            _LST_BD0.append( mai )
+            ok=1
+#             if not _D_BD.has_key( mai ): _D_BD[mai] = []
+#             _D_BD[mai].append( self.MAILLAGE_Python.cia[arete] )
+            break
+        if ok == 0:
+          _LST_OK0.append( mai )
+
+#        print 'Mai:',mai, '_D_BD[mai]=',_D_BD[mai]
+
+
+      if self.OPTIONS['INFO']>=5: print '\nListe Maille de bords de DIM', d,' :',_LST_BD0
+      if self.OPTIONS['INFO']>=5: print 'Liste Maille de DIM', d,'qui ne sont pas des bords :',_LST_OK0
+
+
+      print '--- FIN Maille de bords de DIM', d, ' :',time.clock() - t0
+      t0 = time.clock()
+
+
+    _LST_OK = NP.concatenate( (_LST_OK, NP.array(_LST_OK0)) )
+    _LST_BD = NP.concatenate( (_LST_BD, NP.array(_LST_BD0)) )
+
+    if self.OPTIONS['INFO']>=5: print '\nTotal:\nListe Maille de bords=',_LST_BD
+    if self.OPTIONS['INFO']>=5: print 'Liste Maille non-bords=',_LST_OK,'\n'
+
+#    print "--- FIN Maille de bords 3 : ", time.clock() - t0
+
+    return _LST_OK, _LST_BD
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Affectation_Mailles_de_bords(self, _LST_BD, _DIM):
+    """
+    Affectation a un SD des mailles de bords (mailles incluses dans un bord d une autre maille)
+    """
+
+    if self.OPTIONS['INFO']>=5:
+      print 'liste_mailles_bord=', self.liste_mailles_bord
+      print 'liste_sd_bord', self.liste_sd_bord
+      print '_LST_BD=',_LST_BD
+
+
+    MAILLAGE = self.ASTER['MAILLAGE']
+    _LST_TMA = self.MAILLAGE_Python.tm
+
+    if self.OPTIONS['INFO']>=5:
+      nommail = string.ljust(MAILLAGE.nom,8)
+      _LST_MAI = aster.getvectjev(nommail.ljust(8)+'.NOMMAI')
+
+    t0 = time.clock()
+
+    # Affectation des mailles de bords à chacun des SD
+
+    # Le dico maille2nb donne le nombre de noeuds definissant un bord (lineaire)
+    maille2nb = self.maille2nb
+
+    i = 0
+    for m in _LST_BD:
+      if self.OPTIONS['INFO']>=5: print '\n  Maille de dim N-1:',m, ' Aster:',string.strip(_LST_MAI[m]), ' TMA:',self.MAILLAGE_Python.tm[m], ' CO:',self.MAILLAGE_Python.co[m], '(noeuds de cette maille)'
+      nb = maille2nb[ self.MAILLAGE_Python.tm[m] ]
+      ll = self.MAILLAGE_Python.co[m][0:nb]
+      ll = NP.sort(ll)
+      ll = ll.tolist()
+      ll = tuple(ll)
+      if self.OPTIONS['INFO']>=5: print '  Bord (lineaire)', ll, nb
+
+      # Cas particulier des POI1 en 2D et 3D (ils ne peuvent etre des bords d'elements 2D ou 3D)
+      if ( (nb==1) and (_DIM>=2) ):
+        _tmp=[]
+        for arete in self.MAILLAGE_Python.cia.keys():
+          if ll[0] in arete:
+            for maille in self.MAILLAGE_Python.cia[ arete ]:
+              if self.OPTIONS['INFO']>=5: print '  Maille N+i:', maille, ' Aster:',string.strip(_LST_MAI[maille]), ' Arete:', arete
+              _tmp.append( self.liste_sd[maille] )
+
+      # Cas particulier des SEG en 3D (ils ne peuvent etre des bords d'elements 3D)
+      elif ( (nb==2) and (_DIM==3) ):
+        _tmp=[]
+        for arete in self.MAILLAGE_Python.cia.keys():
+          _nb=0
+          for noe in ll:
+            if noe in arete: _nb+=1
+          if _nb == len(ll):
+            for maille in self.MAILLAGE_Python.cia[arete]:
+              if self.OPTIONS['INFO']>=5: print '  Mailles N+i:', maille, ' Aster:',string.strip(_LST_MAI[maille]), ' Arete:', arete
+              _tmp.append( self.liste_sd[maille] )
+
+      # Autres mailles de bord
+      else:
+        if self.OPTIONS['INFO']>=5: print '  CIA=', self.MAILLAGE_Python.cia[ ll ], '(mailles de dim N qui ont cette maille pour bord)'
+        _tmp=[]
+        for maille in self.MAILLAGE_Python.cia[ ll ]:
+          if self.OPTIONS['INFO']>=5: print '  Maille N+i:', maille, 'Aster:', string.strip(_LST_MAI[maille]), ' SD:', self.liste_sd[maille], ' TMA:', self.MAILLAGE_Python.tm[maille]
+          _tmp.append( self.liste_sd[maille] )
+
+      # integre la maille au SD le plus faible (pour que des groupes de bords se retrouvent dans le meme SD)
+      _tmp.sort()
+      self.liste_mailles_bord.append(m)
+      self.liste_sd_bord.append( _tmp[0] )
+      i += 1
+      if self.OPTIONS['INFO']>=5: print '  ---> Maille:',m,'integree au SD:', _tmp[0]
+
+    if self.OPTIONS['INFO']>=5:
+      print '\n\nliste_mailles_bord=', self.liste_mailles_bord
+      print 'liste_sd_bord=', self.liste_sd_bord
+
+
+    print "--- FIN Affectation des mailles de bords : ", time.clock() - t0
+
+    return
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Creation_Graphe(self):
+
+    t0 = time.clock()
+
+    # Creation du graphe complet
+    self.GRAPH = {}
+
+    for mai in self.liste_mailles:
+      _ll=[]
+      for are in self.MAILLAGE_Python.ca[mai]:
+        _ll.extend( self.MAILLAGE_Python.cia[are] )
+        _mm = enleve_doublons_liste(_ll)  # coute cher!
+      _tmp = _mm.tolist()
+      _tmp.remove(mai)
+      self.GRAPH[mai] = _tmp
+
+      if self.OPTIONS['INFO']>=5: print 'self.GRAPH['+str(mai)+']=', self.GRAPH[mai]
+
+    print "--- FIN Creation du graphe complet : ", time.clock() - t0
+
+    return
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Reduction_Graphe(self, _DIM):
+
+    t0 = time.clock()
+
+    # Elimination des connectivités à interface nulle
+    maille2dim = self.maille2dim
+    _lst2 = []
+    for mai in self.liste_mailles:
+      if self.OPTIONS['INFO']>=5: print '\nmai:', mai, 'co:', self.MAILLAGE_Python.co[mai], 'tm:', self.MAILLAGE_Python.tm[mai]
+      _DIM1 = maille2dim[ self.MAILLAGE_Python.tm[mai] ]
+      _tmp2 =[]
+      for mai2 in self.GRAPH[mai]:
+        if self.OPTIONS['INFO']>=5: print 'mai2:', mai2, 'co:', self.MAILLAGE_Python.co[mai2], 'tm:', self.MAILLAGE_Python.tm[mai2]
+        # calcule le nombre de noeuds communs aux deux mailles
+        _nb = 0
+        for noe in self.MAILLAGE_Python.co[mai2]:
+          if noe in self.MAILLAGE_Python.co[mai]: _nb += 1
+        _DIM2 = maille2dim[ self.MAILLAGE_Python.tm[mai2] ]
+        if _nb >= min(_DIM1, _DIM2):  # le min permet de faire du collage 3D-coque par exemple
+          _tmp2.append( mai2 )
+          _tmp = [mai, mai2]
+          _tmp.sort()
+          _lst2.append(_tmp)
+      self.GRAPH[mai] = _tmp2
+
+    print "--- FIN Elimination des connectivités avec une interface nulle : ", time.clock() - t0
+    t0 = time.clock()
+
+
+    # Calcul du nombre d'aretes
+    # A voir : normalement il n'y a rien a faire car nb0 = 2*nb (a verifier...)
+    _lst2.sort()
+    _v = _lst2[0]
+    _nb = 1
+    for i in _lst2:
+      if i != _v:
+        _v = i
+        _nb += 1
+
+
+    if self.OPTIONS['INFO']>=5:
+      print '----------------------------------------------'
+      for mai in self.liste_mailles:
+        print 'self.GRAPH['+str(mai)+']=', self.GRAPH[mai]
+      print '----------------------------------------------'
+
+    return _nb
+
+
+# ------------------------------------------------------------------ #
+
+  def Ecrire_Graphe(self, f_metis, _nb):
+
+    t0 = time.clock()
+
+    # On doit renumeroter les mailles qui arrivent dans self.liste_mailles pour avoir 0... N-1
+    _D_CORRES = {}
+    for i in NP.arange(len(self.liste_mailles)):
+      _D_CORRES[ self.liste_mailles[i] ] = i
+
+    # Ecriture du fichier fort.UL pour metis
+    fw = open(f_metis,'w')
+    fw.write( str(len(self.liste_mailles)) + ' ' +  str(_nb) + '\n')
+    for l in self.liste_mailles:
+#      try:
+        _tmp = []
+        for t in self.GRAPH[l]:
+          try:
+            t = _D_CORRES[t]
+            _tmp.append( str(t+1) )    # Necessaire car metis numerote de 1 à N
+          except:
+            print 'on oublie le bord:', t
+        fw.write( string.join(_tmp, ' ') + '\n' )
+#      except:
+#        print 'Probleme ecriture graphe! On continue..'
+    fw.close()
+
+    print "--- FIN Ecriture du fichier du graphe pour metis : ", time.clock() - t0
+
+    return _D_CORRES
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Lecture_fichier_sdd(self, fichier, _LST_OK):
+
+    t0 = time.clock()
+
+    # Lecture du fichier produit par metis (partie a optimiser)
+    try:
+      f = open( fichier, 'r' )
+    except:
+      print "\n\n          ERREUR: le fichier est introuvable! Le partitionneur \n          ne s'est probablement pas lancé.\n\n"
+      sys.exit(1)
+    else:
+      _tmp = []
+      for l in f.readlines():
+        _tmp.append( int(string.strip(l)) )
+      f.close()
+      _l_domaines = NP.array(_tmp,copy=0)
+
+      # Pour garder le fichier metis
+      os.system( 'mv ' + fichier + ' REPE_OUT/' )
+
+      if self.OPTIONS['INFO']>=5: print '_l_domaines=',_l_domaines
+
+      print "--- FIN Lecture du fichier produit par metis : ", time.clock() - t0
+
+    return _l_domaines
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Creation_Group_ma_Python_par_SD(self, NOM='SD', NOM2='B'):
+
+    t0 = time.clock()
+
+    NB_PART = self.OPTIONS['NB_PART']
+
+    # Creation du dictionnaire des listes des mailles par SD
+    #     d_gma : { num sd -> [ liste mailles ] }
+    d_gma = {}
+    for i in range(NB_PART):
+      d_gma[i] = []
+
+    i=0
+    for sdd in self.liste_sd:
+      d_gma[sdd].append( self.liste_mailles[i] )
+      i+=1
+
+
+    # Creation du dictionnaire des listes des mailles de bord par SD
+    #     d_gma_bord : { num sd -> [ liste mailles ] }
+    d_gma_bord = {}
+    for i in range(NB_PART):
+      d_gma_bord[i] = []
+
+    i=0
+    for sdd in self.liste_sd_bord:
+      d_gma_bord[sdd].append( self.liste_mailles_bord[i] )
+      i+=1
+
+
+    # Generation des listes de noms de groupes
+    _l_sd = []
+    _l_bord = []
+    for i in range(NB_PART):
+      if d_gma[i] != []:
+        _l_sd.append( NOM + str(i) )
+      if d_gma_bord[i] != []:
+        _l_bord.append( NOM2 + str(i) )
+
+    # Stockage
+    self.ASTER['GROUP_MA']        = _l_sd
+    self.ASTER['GROUP_MA_BORD']   = _l_bord
+
+
+    # Creation des groupes de mailles dans le Maillage Python
+    for i in range(NB_PART):
+      self.MAILLAGE_Python.gma[NOM+str(i)]  = d_gma[i]
+      self.MAILLAGE_Python.gma[NOM2+str(i)] = d_gma_bord[i]
+
+    print "--- FIN creation du dictionnaire des listes des mailles par SD ", time.clock() - t0
+
+    return
+
+
+# ---------------------------------------------------------------------------- #
+
+  def Creation_Group_ma_Aster_par_SD(self, NOM='SD', NOM2='B', INCLUSE='NON'):
+
+    t0 = time.clock()
+
+    MAILLAGE    = self.ASTER['MAILLAGE']
+    NB_PART     = self.OPTIONS['NB_PART']
+
+    nommail     = string.ljust(MAILLAGE.nom,8)
+    _LST_MAI    = aster.getvectjev(nommail.ljust(8)+'.NOMMAI')
+
+
+    # Creation du dictionnaire des listes des mailles par SD
+    #     d_gma : { num sd -> [ liste mailles ] }
+    d_gma = {}
+    for i in range(NB_PART):
+      d_gma[i] = []
+
+    m=0
+    for sdd in self.liste_sd:
+      d_gma[sdd].append( string.strip(_LST_MAI[ self.liste_mailles[m] ]) )   # voir si le strip coute cher !
+      m += 1
+
+
+    # Creation du dictionnaire des listes des mailles de bord par SD
+    #     d_gma_bord : { num sd -> [ liste mailles ] }
+    d_gma_bord = {}
+    for i in range(NB_PART):
+      d_gma_bord[i] = []
+
+    # On inclus directement les mailles de bords dans les SD
+    if INCLUSE=='OUI':
+      m=0
+      for sdd in self.liste_sd_bord:
+        d_gma[sdd].append( string.strip(_LST_MAI[ self.liste_mailles_bord[m] ]) )   # voir si le strip coute cher !
+        m+=1
+
+    else:
+      m=0
+      for sdd in self.liste_sd_bord:
+        d_gma_bord[sdd].append( string.strip(_LST_MAI[ self.liste_mailles_bord[m] ]) )   # voir si le strip coute cher !
+        m+=1
+
+
+    print "--- FIN creation du dictionnaire des listes des mailles par SD ", time.clock() - t0
+    t0 = time.clock()
+
+
+    # Creation et lancement de la commande DEFI_GROUP associée
+    try:
+      DEFI_GROUP = self.jdc.get_cmd('DEFI_GROUP')
+    except:
+      try:
+        from Cata.cata import DEFI_GROUP
+      except:
+        print "\n\nERREUR : il faut lancer ce programme depuis Aster pour pouvoir \ngénérer les groupes de mailles Aster.\n\n"
+        return
+
+    _tmp  = []
+    _l_sd = []
+    _l_bord = []
+    for i in range(NB_PART):
+      if d_gma[i] != []:
+        _tmp.append( {'MAILLE': d_gma[i],'NOM': NOM + str(i)} )
+        _l_sd.append( NOM + str(i) )
+      if d_gma_bord[i] != []:
+        _tmp.append( {'MAILLE': d_gma_bord[i],'NOM': NOM2 + str(i)} )
+        _l_bord.append( NOM2 + str(i) )
+
+    motscle2= {'CREA_GROUP_MA': _tmp }
+
+    DEFI_GROUP( reuse=MAILLAGE,
+                MAILLAGE=MAILLAGE,
+                INFO=1,
+                **motscle2
+               ) ;
+
+    # Stockage
+    self.ASTER['DICO_SD_MAILLES'] = d_gma
+    self.ASTER['GROUP_MA']        = _l_sd
+    self.ASTER['GROUP_MA_BORD']   = _l_bord
+
+    print "--- FIN Creation et lancement de la commande DEFI_GROUP associée : ", time.clock() - t0
+
+    return
+
+# ---------------------------------------------------------------------------- #
diff --git a/Aster/Cata/cataSTA10/Utilitai/stats.py b/Aster/Cata/cataSTA10/Utilitai/stats.py
new file mode 100644 (file)
index 0000000..eb338b0
--- /dev/null
@@ -0,0 +1,61 @@
+#@ MODIF stats Utilitai  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# extract from pystat module
+#
+from math import pi,sqrt,log,exp,pow
+import numpy
+# CDF
+#
+# -------------------------------------------------------------------
+def normcdf(X):
+    # Cumulative normal distribution
+
+    (a1,a2,a3,a4,a5) = (0.31938153, -0.356563782, 1.781477937, -1.821255978, 1.330274429)
+    L = numpy.absolute(X)
+    K = 1.0 / (1.0 + 0.2316419 * L)
+    w = 1.0 - 1.0 / sqrt(2*pi)*exp(-L*L/2.) * (a1*K + a2*K*K + a3*pow(K,3) +
+    a4*pow(K,4) + a5*pow(K,5))
+    if X<0:
+        w = 1.0-w
+    return w
+
+# Inverse CDF
+def normicdf(v):
+   if v > 0.5:
+      r = -1.
+   else:
+      r = 1.
+   xp = 0.
+   lim = 1.e-20
+   p = [-0.322232431088, -1.0, -0.342242088547, -0.0204231210245, -0.453642210148e-4]
+   q = [0.0993484626060, 0.588581570495, 0.531103462366, 0.103537752850, 0.38560700634e-2]
+
+   if v < lim or v == 1:
+      return -1./lim
+   elif v == 0.5:
+      return 0
+   elif v > 0.5:
+      v = 1.-v
+   y = sqrt(log(1./v**2.))
+   xp = y+((((y*p[4]+p[3])*y+p[2])*y+p[1])*y+p[0])/((((y*q[4]+q[3])*y+q[2])*y+q[1])*y+q[0])
+   if v < 0.5:
+      xp *= -1.
+   return xp*r
+#--
diff --git a/Aster/Cata/cataSTA10/Utilitai/sup_gmsh.py b/Aster/Cata/cataSTA10/Utilitai/sup_gmsh.py
new file mode 100644 (file)
index 0000000..7d62cee
--- /dev/null
@@ -0,0 +1,1416 @@
+#@ MODIF sup_gmsh Utilitai  DATE 26/05/2010   AUTEUR ASSIRE A.ASSIRE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+import os.path, string, os, copy
+import numpy as NP
+
+try :
+  from Cata.cata import *
+  from Accas import _F
+except :
+  print 'Fonctionnalites Aster indisponibles'
+
+
+_CARAC = {
+  'prec' : 1.E-8
+  }
+
+
+def Class_search(class_name, target_class) :
+
+  """
+    Check that class_name inherits from target_class
+    (run recursively through the inheritance lists)
+  """
+
+  if class_name == target_class : return 1
+
+  for cl in class_name.__bases__ :
+    if Class_search(cl, target_class) : return 1
+  return 0
+
+
+def Progress(L,**para) :
+
+  """
+    Compute the unknown parameters for a geometric progression :
+      r = ratio
+      N = number of elements
+      h = initial size
+
+    So that :
+      L = Sum(i=0:N-1, h(i)) where h(i+1) = h(i)*r, h(0)=h
+
+    Usage :
+      Progress(L,r=...,N=...) -> h
+      Progress(L,r=...,h=...) -> N
+      Progress(L,h=...,N=...) -> r
+
+  """
+
+  prec = 1.E-4
+
+ # Calcul de N
+  if 'N' not in para.keys() :
+    r = float(para['r'])
+    h = float(para['h'])
+    N = log(1+(r-1)*L/h)/log(r)
+    N = int(N+0.5)
+    return N
+
+ # Calcul de h
+  elif 'h' not in para.keys() :
+    r = float(para['r'])
+    N = int(para['N']+0.5)
+    h = L*(r-1)/(r**N-1)
+    return h
+
+ # Calcul de r
+  elif 'r' not in para.keys() :
+    h = float(para['h'])
+    N = int(para['N']+0.5)
+    a = L/h
+    if N > a :
+      x = 0
+    else :
+      x = a**(1./(N-1))
+
+    for i in xrange(100) :
+      res = x**N - a*x + a-1
+      if abs(res) < prec*(x-1)*a :
+        return x
+      dx = res/(a-N*x**(N-1))
+      x = x+dx
+
+    raise 'Solution failure'
+
+  else :
+    raise 'Unknown parameters'
+
+
+
+def Is_Geometric(object) :
+
+  """
+    return true if the object inherits of the Geometric class
+  """
+
+  return Class_search(object.__class__, Geometric)
+
+
+
+# --------------------------------------------------------------------------------------
+
+class Geometric :
+
+  """
+    GENERIC CLASS FOR GEOMETRICAL OBJECTS
+
+    private attribute
+     parameters  : dictionnary of the attributes (except relation and parameters itself)
+                   see __getattr__ and __setattr__
+
+
+    Attributes
+     num         : index among gmsh objects
+     md          : mesh descriptor
+     mesh        : related mesh object
+     relation    : model object in case of coincidence
+     type        : type of the object (None, Point, Line, Circle, Surface, Volume)
+
+    Public methods
+     Is_point : return true is the object inherits of the Point class
+
+     Is_line  : return true is the object inherits of the Line class
+
+     Is_surface : return true is the object inherits of the Surface class
+
+     Is_volume : return true is the object inherits of the Volume class
+
+     Base_class : return the name of the base class : Point, Line, Surface
+                     or Volume
+
+     Is_same_dimension : return true is both objects are of the same dimension
+                         (point, line, surface or volume)
+       in -> object to compare to self
+
+     Duplicate   : duplicate an object and base its mesh_descriptor
+                   on the mesh_descriptor of the model
+
+     Coincide    : assert that an object is coincident with a model one
+                   All the attributes are then automatically read from
+                   the model object (see __setattr__ and __getattr__).
+       in -> model object
+
+    Private method
+
+     Root :
+       Provides the root object of an object, ie the object itself if there is no relation
+       or the deepest model in case of relation.
+
+     Geometric_coincide : check if a geometrical coincidence is possible
+                          return information about the coincidence, false else.
+       in -> model object
+
+     Deep_coincide : proceed recursively to ensure coincidence of the relevant sub-objects
+       in -> model object
+       in -> correspond (information returned by Geometric_coincide)
+
+     __setattr__ : distinguish two sets of attributes
+                    relation (to express a relation with a model object in case of coincidence)
+                    all the other attributes which are stored in the dictionnary parameters
+                    instead of the usual __dict__ if there is no relation (see Coincide)
+                    and in the model object if there is a coincidence
+
+     __getattr__ : if the object is related (relation <> None) the attribute is read
+                   in the model object. Else, it is read in the current object, actually
+                   in the dictionnary parameters (see __setattr__)
+
+     Thanks to these two overloaded methods, the access to the attributes is usual if
+     there is no relation whereas the attributes of the model object are accessed
+     transparently if there is a relation.
+
+     __cmp__ :
+       The comparison of two objects involves possible coincidence. It is no more the object ids
+       that are compared but the object roots (.relation if any).
+
+     Gmsh  : produce the source code for Gmsh
+       in -> mesh
+
+     Gmsh_send : send a line code to the gmsh interpreter
+       in -> line_code (string)
+
+     Intermediate_meshing : produce the source code for the intermediate objects
+       in -> mesh
+
+     Object meshing : produce the source code for the current object
+       var -> object number (modified if several objects are created)
+
+  """
+
+  def __init__(self) :
+    self.relation    = None
+    self.parameters  = {}
+    self.num         = 0
+    self.md          = Mesh_Descriptor()
+
+    types = {}
+    types[Geometric]   = 'Geometric'
+    types[Point]       = 'Point'
+    types[Line]        = 'Line'
+    types[Circle]      = 'Circle'
+    types[Surface]     = 'Surface'
+    types[Volume]      = 'Volume'
+    types[LineLoop]    = 'LineLoop'
+    types[SurfaceLoop] = 'SurfaceLoop'
+    try :
+      self.type = types[self.__class__]
+    except KeyError :
+      raise 'Unknown object type'
+
+
+  def Is_point(self) :
+    return Class_search(self.__class__, Point)
+
+  def Is_line(self) :
+    return Class_search(self.__class__, Line)
+
+  def Is_surface(self) :
+    return Class_search(self.__class__, Surface)
+
+  def Is_volume(self) :
+    return Class_search(self.__class__, Volume)
+
+  def Base_class(self) :
+    if self.Is_volume()  : return 'Volume'
+    if self.Is_surface() : return 'Surface'
+    if self.Is_line()    : return 'Line'
+    if self.Is_point()   : return 'Point'
+
+  def Is_same_dimension(self, obj) :
+
+    return (
+      (self.Is_point()    and  obj.Is_point()   ) or
+      (self.Is_line()     and  obj.Is_line()    ) or
+      (self.Is_surface()  and  obj.Is_surface() ) or
+      (self.Is_volume()   and  obj.Is_volume()  )
+      )
+
+
+  def __setattr__(self, attr, value) :
+
+    if attr in ['relation','parameters'] :
+      self.__dict__[attr] = value
+    else :
+      if self.relation :
+        setattr(self.relation,attr,value)
+      else :
+        self.parameters[attr] = value
+
+
+  def __getattr__(self,attr) :
+
+    if self.relation :
+      return (getattr(self.relation,attr))
+    else :
+      if attr in self.parameters.keys() :
+        return self.parameters[attr]
+      else :
+        raise AttributeError,attr
+
+
+  def Root(self) :
+
+    o = self
+    while o.relation : o = o.relation
+    return o
+
+
+  def __cmp__(self,obj) :
+
+    if self.Root() is obj.Root() :
+      return 0
+    else :
+      return -1
+
+
+  def Geometric_coincide(self,obj) : return 0
+
+  def Deep_coincide(self,obj,correspond) : pass
+
+  def Coincide(self, obj) :
+
+    if self == obj : return       # in that way recursive loops cannot exist
+
+    if self.relation :            # the root is put in coincidence, not the object itself
+      self.Root().Coincide(obj)
+      return
+
+    if not self.Is_same_dimension(obj) :
+      raise 'Coincidence impossible : objects are not of the same dimension'
+
+    correspond = self.Geometric_coincide(obj)
+    if not correspond :
+      raise 'The objects are not geometrically coincident'
+
+    self.Deep_coincide(obj,correspond)
+    self.relation = obj
+
+
+  def Duplicate(self) :
+
+    return copy.deepcopy(self)    # special deepcopy for the Mesh_Descriptor
+
+
+  def Gmsh(self,mesh) :
+
+    if self.num : return              # already meshed object
+    self.mesh = mesh                  # Storing the mesh
+    self.Intermediate_meshing(mesh)   # creation of the intermediate objects
+    num = mesh.num+1                  # New object number
+    self.Object_meshing(num)          # object meshing (with current number num)
+    mesh.num = num                    # Updating the current gmsh pointer
+    self.num = num                    # Storing the current object number
+
+
+  def Gmsh_send(self, line_code) :
+
+    self.mesh.command.append(line_code)
+
+
+  def Intermediate_meshing(self,mesh) :
+    pass
+
+
+  def Object_meshing(self,num) :
+    raise "Creation of the Gmsh source not implemented"
+
+
+
+
+# -------------------- POINT OBJECTS ---------------------
+
+
+class Point(Geometric) :
+
+  """
+    POINT OBJECT
+
+    Public methods
+     __init__ :
+       in -> coordinates (the 3rd is zero by default)
+
+     Size  : set the size of the neighbouring elements
+       in -> size
+
+     Attractor : define the point as an attractor
+       in -> scale_x : size amplification factor in the x-direction
+       in -> scale_y : size amplification factor in the y-direction
+       in -> distance: influence distance for the perturbation
+
+     Translate : translation of the point
+       in -> x,y,z translation vector (default : z=0)
+
+    Attributes
+     coor : coordinates
+     size : neighbouring element size
+     attractor : parameters of the attractor
+  """
+
+  def __init__(self,x,y,z=0) :
+
+    Geometric.__init__(self)
+    self.coor = NP.array([x,y,z], NP.float)
+    self.attractor = None
+
+
+  def Geometric_coincide(self,obj) :
+
+    global _CARAC
+    prec = _CARAC['prec']
+
+    d = VectorNorm(self.coor - obj.coor)
+    if d < prec*self.md.size :
+      return 1
+    else :
+      return None
+
+
+  def Size(self,h) :
+
+    self.md.size = float(h)
+
+
+  def Attractor(self, scale_x, scale_y, distance) :
+
+    self.attractor = (float(scale_x), float(scale_y), float(distance))
+
+
+  def Translate(self,x,y,z=0) :
+
+    tran = NP.array([x,y,z]).astype(NP.float)
+    self.coor = self.coor + tran
+
+
+  def Object_meshing(self,num) :
+
+    ch = (
+        'Point(' + `num` + ') = {'
+      + `self.coor[0]` + ', '
+      + `self.coor[1]` + ', '
+      + `self.coor[2]` + ', '
+      + `self.md.size` + '};'
+      )
+    self.Gmsh_send(ch)
+
+    if self.attractor :
+      ch = (
+        'Attractor Point{' + `num` + '} = {'
+        + `self.attractor[0]`+','
+        + `self.attractor[1]`+','
+        + `1./self.attractor[2]` + '};'
+        )
+      self.Gmsh_send(ch)
+
+
+
+# -------------------- LINE OBJECTS ----------------------
+
+
+class Line(Geometric) :
+
+  """
+    LINE OBJECT
+
+
+    Public methods
+
+     Attractor : define the point as an attractor
+       in -> scale_x : size amplification factor in the x-direction
+       in -> scale_y : size amplification factor in the y-direction
+       in -> distance: influence distance for the perturbation
+
+  """
+
+
+  def __init__(self,*points) :
+
+    Geometric.__init__(self)
+
+    if len(points) <=1 :
+      raise "There should be at least two points"
+
+    for point in points :
+      if not point.Is_point() :
+        raise "Arguments should be points"
+
+    self.points = list(points)
+    self.attractor = None
+
+
+  def Geometric_coincide(self,obj) :
+
+    nb_points = len(self.points)
+    if nb_points <> len(obj.points) :
+      raise 'To coincide, lines should have the same number of points'
+
+   # same order of points
+    info = range(nb_points)
+    for i in range(nb_points) :
+      p1 = self.points[i]
+      p2 = obj.points[info[i]]
+      if not p1.Geometric_coincide(p2) :
+        break
+    else :
+      return info
+
+   # reverse order of points
+    info.reverse()
+    for i in range(nb_points) :
+      p1 = self.points[i]
+      p2 = obj.points[info[i]]
+      if not p1.Geometric_coincide(p2) :
+        break
+    else :
+      return info
+
+    return None
+
+
+  def Deep_coincide(self,obj,info) :
+
+    for i in range(len(info)) :
+      p1 = self.points[i]
+      p2 = obj.points[info[i]]
+      p1.Coincide(p2)
+
+
+
+  def Translate(self,x,y,z=0) :
+
+    for point in self.points :
+      point.Translate(x,y,z)
+
+
+  def Transfinite(self,number,progression = 1) :
+
+    self.md.number      = int(number)
+    self.md.progression = float(progression)
+
+
+  def Attractor(self,scale_x, scale_y, distance) :
+
+    self.attractor = (float(scale_x), float(scale_y), float(distance))
+
+
+  def __rmul__(self,base) :
+
+    if len(self.points) > 2 :
+      raise "Support (right argument) should be a straight line"
+
+    if self.points[0] in base.points :
+      supp_orig = 0
+      supp_extr = 1
+    elif self.points[1] in base.points :
+      supp_orig = 1
+      supp_extr = 0
+    else :
+      raise "No common point"
+
+    if self.points[supp_orig] == base.points[0] :
+      base_orig = 0
+      base_extr = -1
+    else :
+      base_orig = -1
+      base_extr = 0
+
+  # Translation vector
+    ce = self.points[supp_extr].coor
+    co = self.points[supp_orig].coor
+    tran = ce-co
+
+  # Definition of the edge opposite to the base
+    opp_base = base.Duplicate()
+    opp_base.Translate(tran[0],tran[1],tran[2])
+    opp_base.points[base_orig] = self.points[supp_extr]
+
+  # Definition of the edge opposite to the support
+    opp_supp = self.Duplicate()
+    opp_supp.points[0] = base.points[base_extr]
+    opp_supp.points[1] = opp_base.points[base_extr]
+
+    surf = Surface(base,self,opp_base,opp_supp)
+
+    if len(base.points) > 2 : surf.Ruled()
+
+    return surf
+
+
+  def Intermediate_meshing(self,mesh) :
+
+    for point in self.points :
+      point.Gmsh(mesh)
+
+
+  def Object_meshing(self,num) :
+
+    ch = self.type + '(' + `num` + ') = {'
+    for point in self.points :
+      ch = ch + `point.num` + ','
+    ch = ch[:-1] + '};'
+    self.Gmsh_send(ch)
+
+    if self.md.transfinite :
+      ch = (
+          'Transfinite Line{' + `num` + '} = ' +
+          `self.md.number+1` +
+          ' Using Progression ' + `self.md.progression` + ';'
+          )
+      self.Gmsh_send(ch)
+
+    if self.attractor :
+      ch = (
+        'Attractor Line{' + `num` + '} = {'
+        + `self.attractor[0]`+','
+        + `self.attractor[1]`+','
+        + `1./self.attractor[2]` + '};'
+        )
+      self.Gmsh_send(ch)
+
+
+
+class Circle(Line) : pass
+
+# The class inherits everything from Line but its name (to tell Gmsh
+# that it is a circle).
+
+
+
+def Curve(l_x,l_y,l_z=None) :
+
+  if not l_z :
+    l_z = [0.] * len(l_x)
+
+  l_P = []
+  for x,y,z in map(None,l_x,l_y,l_z) :
+    l_P.append(Point(x,y,z))
+
+  line = apply(Line,l_P)
+  return line
+
+
+
+
+
+# -------------------- SURFACE OBJECTS ---------------------
+
+
+class Surface(Geometric) :
+
+  """
+    SURFACE OBJECT (inherit from the Geometric class)
+
+    Public methods
+     __init__ :
+       in -> lines : external bounday of the surface (lines should be connected)
+
+     Holes : set the internal holes (surfaces)
+       in -> holes : list of holes
+
+     Boundary : checks that the boundary is a closed loop and returns the orientation of the edges
+
+     Summit : returns the summit list sorted according to the orientation (see Boundary method)
+
+     Ruled : declare the surface is a ruled one
+
+     Translate : translate the surface
+       in -> x,y,z translation vector (default : z=0)
+
+     Recombine : recombine the surface (try to mesh with quadrangles instead of triangles)
+
+     Transfinite : Declare the mesh to be transfinite
+
+
+    Attributes
+     lines : list of external boundary lines
+     holes : list of internal holes (surfaces)
+     ruled : indicates (false or true) if the surface is a ruled surface
+     loops : list of boundary (external and internal) loops (computed when meshing)
+  """
+
+
+  def __init__(self,*lines) :
+
+    Geometric.__init__(self)
+    self.lines = list(lines)
+    self.holes = []
+    self.ruled = 0
+
+  # Check Assumptions
+    for line in lines :
+      if not line.Is_line() :
+        raise "Arguments should be lines : " + repr(line)
+    if lines == 0 : raise "There should be at least one line"
+    self.Boundary()
+
+
+  def Boundary(self) :
+
+  # checking the boundary is a loop
+    orie = []
+    tmp  = list(self.lines) + [self.lines[0]]
+    for i in range(len(self.lines)) :
+      lb = tmp[i]
+      la = tmp[i+1]
+      if lb.points[-1] in [la.points[0], la.points[-1]] :
+        orie.append(1)
+      elif lb.points[0] in [la.points[0], la.points[-1]] :
+        orie.append(-1)
+      else :
+        raise "This is not a loop"
+
+  # checking the boundary is closed
+    if orie[0]  ==  1 : pi = self.lines[0].points[0]
+    if orie[0]  == -1 : pi = self.lines[0].points[-1]
+    if orie[-1] ==  1 : pf = self.lines[-1].points[-1]
+    if orie[-1] == -1 : pf = self.lines[-1].points[0]
+    if pi <> pf : raise "The loop is not closed"
+
+    return orie
+
+
+  def Summit(self) :
+
+    summits = []
+    for line, orie in map(None,self.lines,self.Boundary()) :
+      if orie == 1 :
+        summits.append(line.points[0])
+      else :
+        summits.append(line.points[-1])
+    return summits
+
+
+  def Holes(self,*holes) :
+
+    for hole in holes :
+      if not hole.Is_surface() :
+        raise "Holes should be surfaces"
+    self.holes = list(holes)
+
+
+  def Geometric_coincide(self,obj) :
+
+    """
+      return (line_order, hole_order) :
+        line_order : list of the coupled lines ith line of self with line_order[i]th line of obj
+        hole_order : same as line_order but with the internal holes
+    """
+
+    if len(self.lines) <> len(obj.lines) :
+      raise 'To coincide, surfaces should have the same number of border lines'
+
+    if len(self.holes) <> len(obj.holes) :
+      raise 'To coincide, surfaces should have the same number of internal holes'
+
+   # Coincidence of the surface holes
+    hole_order = []
+    nb_holes = len(self.holes)
+    for hole_1 in self.holes :
+      for i in xrange(nb_holes) :
+        if i in hole_order :
+          continue
+        hole_2 = obj.holes[i]
+        if hole_1.Geometric_coincide(hole_2) :
+          hole_order.append(i)
+          break
+      else :
+        return None
+
+   # Coincidence of the external boundary lines
+    line_order = []
+    nb_lines = len(self.lines)
+    for line_1 in self.lines :
+      for i in xrange(nb_lines) :
+        if i in line_order :
+          continue
+        line_2 = obj.lines[i]
+        if line_1.Geometric_coincide(line_2) :
+          line_order.append(i)
+          break
+      else :
+        return None
+
+    return (line_order, hole_order)
+
+
+  def Deep_coincide(self,obj,info) :
+
+    line_order = info[0]
+    hole_order = info[1]
+
+    for i,j in map(None,xrange(len(line_order)),line_order) :
+      l1 = self.lines[i]
+      l2 = obj.lines[j]
+      l1.Coincide(l2)
+
+    for i,j in map(None,xrange(len(hole_order)),hole_order) :
+      h1 = self.holes[i]
+      h2 = obj.holes[j]
+      h1.Coincide(h2)
+
+
+
+  def Ruled(self) :
+
+    self.ruled = 1
+
+    if len(self.lines) not in [3,4] :
+      raise "Ruled surfaces require 3 or 4 edges"
+
+    if self.holes :
+      raise "Holes are forbidden for ruled surfaces"
+
+
+  def Translate(self,x,y,z=0) :
+
+    l_points = []
+    for surf in [self] + self.holes :
+      for line in surf.lines :
+        for point in line.points :
+          if point not in l_points : l_points.append(point)
+
+    for point in l_points :
+      point.Translate(x,y,z)
+
+
+  def Recombine(self,val=1) :
+
+    self.md.recombine = val
+
+
+  def Transfinite(self) :
+
+    self.Ruled()
+
+    if len(self.lines) == 4 :
+      self.Recombine()
+
+    self.md.transfinite = 1
+
+    for line in self.lines :
+      if not line.md.transfinite :
+        raise "Transfinite surfaces require transfinite edges"
+
+    if (
+      self.lines[0].md.number <> self.lines[2].md.number or
+      self.lines[1].md.number <> self.lines[3].md.number
+    ) :
+      raise "Coupled edges should have the same number of elements"
+
+
+
+  def Intermediate_meshing(self,mesh) :
+
+    self.loops = []
+    for surf in [self]+self.holes :
+      loop = LineLoop(surf)
+      self.loops.append(loop)
+      loop.Gmsh(mesh)
+
+
+  def Object_meshing(self,num) :
+
+  # Creation of the surface
+    if self.ruled :
+      ch = 'Ruled Surface(' + `num` + ') = {'
+    else :
+      ch = 'Plane Surface(' + `num` + ') = {'
+    for loop in self.loops :
+      ch = ch + `loop.num` + ','
+    ch = ch[:-1] + '};'
+    self.Gmsh_send(ch)
+
+  # Declaration of transfinite surface
+    if self.md.transfinite :
+      ch = 'Transfinite Surface {' + `num` + '} = {'
+      for summit in self.Summit() :
+        ch = ch + `summit.num` + ','
+      ch = ch[:-1] + '};'
+      self.Gmsh_send(ch)
+
+  # Recombine elements if requested
+    if self.md.recombine :
+      self.Gmsh_send('Recombine Surface {' + `num` + '} ;')
+
+
+
+class LineLoop(Geometric) :    # Used only during the meshing phase
+
+
+  def __init__(self,surface) :
+
+    Geometric.__init__(self)
+    self.surface = surface
+
+
+  def Intermediate_meshing(self,mesh) :
+
+    for line in self.surface.lines :
+      line.Gmsh(mesh)
+
+
+  def Object_meshing(self,num) :
+
+    ch = 'Line Loop(' + `num` + ') = {'
+    for line,orie in map(None,self.surface.lines,self.surface.Boundary()) :
+      ch = ch + `orie*line.num` + ','
+    ch = ch[:-1] +  '};'
+    self.Gmsh_send(ch)
+
+
+
+
+class Volume(Geometric) :
+
+
+  """
+    VOLUME OBJECT (inherit from the Geometric class)
+
+    Public methods
+     __init__ :
+       in -> surfaces : external bounday of the volume (surfaces should be connected)
+
+     Edge : returns the list of edges
+
+     Holes : set the internal holes (surfaces)
+       in -> holes : list of holes
+
+     Transfinite : Declare the mesh to be transfinite (force the surfaces to be transfinite too)
+
+     Translate : translate the surface
+       in -> x,y,z translation vector (default : z=0)
+
+
+    Attributes
+     surfaces : list of external boundary surfaces
+     holes : list of internal holes (volumes)
+     loops : list of boundary (external and internal) loops (computed when meshing)
+
+
+    Private methods :
+
+     Boundary : checks that the boundary is a closed loop and returns the orientation of the edges
+
+  """
+
+
+  def __init__(self,*surfaces) :
+
+    Geometric.__init__(self)
+    self.surfaces = list(surfaces)
+    self.holes = []
+    self.ruled = 0
+
+  # Check Assumptions
+    for surface in surfaces :
+      if not surface.Is_surface() :
+        raise "Arguments should be surfaces : " + repr(surface)
+    if len(surfaces) < 2 : raise "There should be at least two surfaces"
+    self.Boundary()
+
+
+  def Boundary(self) :
+
+    edges = []
+    for surface in self.surfaces :
+      edges = edges + surface.lines
+
+  # each edge has to appear twice in the list of edges
+    for edge in edges :
+      if edges.count(edge) <> 2 :
+        raise "The surface loop is not closed : each edge should appear twice"
+
+
+  def Edge(self) :
+
+    edges = []
+    for surface in self.surfaces :
+      for line in surface.lines :
+        if line not in edges : edges.append(line)
+    return edges
+
+
+  def Holes(self,*holes) :
+
+    for hole in holes :
+      if not hole.Is_volume() :
+        raise "Holes should be volumes"
+    self.holes = list(holes)
+
+
+  def Geometric_coincide(self,obj) :
+
+    """
+      return (surface_order, hole_order) :
+        surface_order : list of the coupled surfaces ith surface of self with surface_order[i]th surface of obj
+        hole_order    : same as surface_order but with the internal holes
+    """
+
+    if len(self.surfaces) <> len(obj.surfaces) :
+      raise 'To coincide, volumes should have the same number of border surfaces'
+
+    if len(self.holes) <> len(obj.holes) :
+      raise 'To coincide, volumes should have the same number of internal holes'
+
+   # Coincidence of the surface holes
+    hole_order = []
+    nb_holes = len(self.holes)
+    for hole_1 in self.holes :
+      for i in xrange(nb_holes) :
+        if i in hole_order :
+          continue
+        hole_2 = obj.holes[i]
+        if hole_1.Geometric_coincide(hole_2) :
+          hole_order.append(i)
+          break
+      else :
+        return None
+
+   # Coincidence of the external boundary lines
+    surface_order = []
+    nb_surfaces = len(self.surfaces)
+    for surface_1 in self.surfaces :
+      for i in xrange(nb_surfaces) :
+        if i in surface_order :
+          continue
+        line_2 = obj.surfaces[i]
+        if surface_1.Geometric_coincide(surface_2) :
+          surface_order.append(i)
+          break
+      else :
+        return None
+
+    return (surface_order, hole_order)
+
+
+  def Deep_coincide(self,obj,info) :
+
+    surface_order = info[0]
+    hole_order    = info[1]
+
+    for i,j in map(None,xrange(len(surface_order)),surface_order) :
+      l1 = self.surfaces[i]
+      l2 = obj.surfaces[j]
+      l1.Coincide(l2)
+
+    for i,j in map(None,xrange(len(hole_order)),hole_order) :
+      h1 = self.holes[i]
+      h2 = obj.holes[j]
+      h1.Coincide(h2)
+
+
+  def Transfinite(self) :
+
+    if len(self.surfaces) == 5 :
+      raise "Not implemented"
+
+    if len(self.surfaces) not in [5,6] :
+      raise "Transfinite volumes require 5 or 6 faces"
+
+    if self.holes :
+      raise "Holes are forbidden for transfinite volumes"
+
+    self.md.transfinite = 1
+
+    for surface in self.surfaces :
+      if not surface.md.transfinite :
+        surface.Transfinite() # attention : ce n'est pas vrai dans le cas des prismes
+
+# ATTENTION : ICI, IL FAUDRAIT VERIFIER QUE LES SURFACES PEUVENT ETRE MISES EN VIS A VIS
+
+
+
+  def Translate(self,x,y,z=0) :
+
+    l_points = []
+    for volu in [self] + self.holes :
+      for surf in volu.surfaces :
+        for line in surf.lines :
+          for point in line.points :
+            if point not in l_points : l_points.append(point)
+
+    for point in l_points :
+      point.Translate(x,y,z)
+
+
+
+  def Intermediate_meshing(self,mesh) :
+
+    self.loops = []
+    for volume in [self]+self.holes :
+      loop = SurfaceLoop(volume)
+      self.loops.append(loop)
+      loop.Gmsh(mesh)
+
+
+  def Object_meshing(self,num) :
+
+  # Creation of the volume
+    ch = 'Volume(' + `num` + ') = {'
+    for loop in self.loops :
+      ch = ch + `loop.num` + ','
+    ch = ch[:-1] + '};'
+    self.Gmsh_send(ch)
+
+  # Declaration of transfinite surface
+    if self.md.transfinite :
+
+      bottom_summits = self.surfaces[0].Summit()
+      edges = self.Edge()
+      top_summits = []
+      for summit in bottom_summits :
+        for edge in edges :
+          if summit == edge.points[0] and edge.points[-1] not in bottom_summits :
+            top_summits.append(edge.points[-1])
+            break
+          elif summit == edge.points[-1] and edge.points[0] not in bottom_summits :
+            top_summits.append(edge.points[0])
+            break
+
+      ch = 'Transfinite Volume {' + `num` + '} = {'
+      for summit in bottom_summits + top_summits :
+        ch = ch + `summit.num` + ','
+      ch = ch[:-1] + '};'
+      self.Gmsh_send(ch)
+
+
+
+class SurfaceLoop(Geometric) :    # Used only during the meshing phase
+
+
+  def __init__(self,volume) :
+
+    Geometric.__init__(self)
+    self.volume = volume
+
+
+  def Intermediate_meshing(self,mesh) :
+
+    for surface in self.volume.surfaces :
+      surface.Gmsh(mesh)
+
+
+  def Object_meshing(self,num) :
+
+    ch = 'Surface Loop(' + `num` + ') = {'
+    for surface in self.volume.surfaces :
+      ch = ch + `surface.num` + ','
+    ch = ch[:-1] +  '};'
+    self.Gmsh_send(ch)
+
+
+
+
+# ------------------- GEOMETRICAL TRANSFORMATION --------------
+
+def VectorProduct(u,v) :
+
+  return NP.array([u[1]*v[2]-u[2]*v[1],u[2]*v[0]-u[0]*v[2],u[0]*v[1]-u[1]*v[0]])
+
+
+def VectorNorm(u) :
+
+  return sqrt(dot(u,u))
+
+
+class Rotation :
+
+  def __init__(self,A,C,B) :
+
+    self.C = c
+    self.a = A-C
+    n = VectorProduct(self.a,B-C)
+    self.n = n / VectorNorm(n)
+
+
+  def Proj(self,M) :
+
+    lbd = dot(M-self.C,self.n)
+    H = self.C + lbd*self.n
+    return H
+
+
+def Scaling_P2(p,t) : return (1.-p)*t*t+p*t
+
+def Scaling_P3(p,t) :
+  q = 1./p
+  a = p+q-2
+  b = 3-2*p-q
+  return a*t**3 + b*t*t +p*t
+
+
+# -------------------- MESHING OPERATIONS ---------------------
+
+class Mesh_Descriptor :
+
+  """
+    Attributes
+      relation     Another mesh descriptor provides the mesh parameters
+      parameters   dictionnary of the mesh parameters
+                        size         Point size
+                        transfinite  Transfinite mesh (0 or 1)
+                        number       Number of elements along a line (transfinite)
+                        progression  Progression of element size (transfinite)
+                        recombine    Recombine mesh or not
+
+     Specific access :
+       md.parameter_name = xxx -> the relation is destroyed (set to None)
+       xxx = md.parameter_name -> if there is a relation, the effective
+                                  parameter is looked for recursively
+
+     Deep copying : a relation is set to the model instead of a true copy
+  """
+
+  List_Attr = ['size','transfinite','number','progression','recombine']
+
+
+  def __init__(self) :
+
+    self.relation = None
+    self.parameters = {
+      'size'       :  1.  ,     # Point size
+      'transfinite':  0   ,     # Transfinite mesh (0 or 1)
+      'recombine'  :  0         # Recombine mesh or not
+      }
+
+
+  def __setattr__(self, attr, value) :
+
+    if attr in Mesh_Descriptor.List_Attr :
+      self.relation = None
+      self.parameters[attr] = value
+
+      if attr == 'number' :
+        self.transfinite = 1
+
+    else :
+      self.__dict__[attr] = value
+
+
+  def __getattr__(self,attr) :
+
+    if self.relation :
+      return (getattr(self.relation,attr))
+    else :
+      if attr in self.parameters.keys() :
+        return self.parameters[attr]
+      else :
+        raise AttributeError
+
+
+  def __deepcopy__(self,visit) :
+
+    md = copy.copy(self)
+    md.parameters = copy.copy(self.parameters)
+    md.relation = self
+    return md
+
+
+
+class Mesh :
+
+  """
+
+  """
+
+
+  def __init__(self, algo = 2, order = 1, gmsh='gmsh') :
+
+    self.num_ph  = 0
+    self.num     = 0
+    self.order   = order
+    self.command = ['Mesh.Algorithm = ' + repr(algo) + ' ;']
+    self.command += ['Mesh.ElementOrder = ' + repr(order) + ' ;']
+    self.physicals = {}
+    self.gmsh    = gmsh
+
+
+  def Physical(self, name, *l_lobj) :
+
+  # Checking the name
+    if type(name) <> type(' ') :
+      raise 'First argument should be the name of the physical'
+    if name in self.physicals.keys() :
+      raise 'Physical '+name+' already exists'
+
+  # treating the case of list of lists parameters
+    l_obj = []
+    for l in l_lobj :
+      if type(l) == type([]) :
+        l_obj = l_obj + l
+      else :
+        l_obj.append(l)
+
+  # Checking all objects are geometric
+    for obj in l_obj :
+      if not Is_Geometric(obj) :
+        raise "Non geometrical object : " + repr(obj) + " Physical = " + name
+
+    cl = l_obj[0].Base_class()
+  # Checking all objects are of the same dimension
+  #  ref_dim = l_obj[0]
+  #  for obj in l_obj[1:] :
+  #    if not ref_dim.Is_same_dimension(obj) :
+  #      raise "All objects are not of the same dimension : " + repr(obj)
+
+  # Creation of the objects if necessary
+    for obj in l_obj :
+      obj.Gmsh(self)
+
+  # Creation of the physical
+    self.num_ph= self.num_ph + 1
+    ch = name + '=' + `self.num_ph` + ';'
+    self.command.append(ch)
+    ch = 'Physical ' + cl + '(' + name + ') = {'
+    for obj in l_obj :
+      ch = ch + `obj.num` + ','
+    ch = ch[:-1] + '};'
+    self.command.append(ch)
+
+  # Name of the physical
+    name_gmsh = 'GM'+`self.num_ph`
+    self.physicals[name] = name_gmsh
+
+
+  def Save(self, file = 'fort.geo') :
+
+    if os.path.isfile(file) :
+      os.remove(file)
+
+    f = open(file,'w')
+    f.write(string.joinfields(self.command,'\n'))
+    f.close()
+
+
+  def View(self) :
+
+    self.Save('fort.geo')
+#    os.system('gmsh fort.geo')
+    os.system(self.gmsh + ' fort.geo')
+    os.remove('fort.geo')
+
+
+  def Create(self, file = 'fort.19') :
+
+    self.Save()
+    os.system(self.gmsh + ' -3 fort.geo')
+    try: os.remove(file)
+    except: pass
+    os.rename('fort.msh',file)
+
+
+  def Name(self, MA, CREA_GROUP_NO) :
+
+    l_gma = []
+    l_mcf =  []
+    for gma in self.physicals.keys() :
+      l_gma.append(self.physicals[gma])
+      l_mcf.append(_F(GROUP_MA = self.physicals[gma],NOM=gma))
+
+    DEFI_GROUP(reuse = MA,
+      MAILLAGE = MA,
+      CREA_GROUP_MA = tuple(l_mcf),
+      )
+
+    SMESH_02 = CREA_MAILLAGE(
+      MAILLAGE = MA,
+      DETR_GROUP_MA = _F(GROUP_MA = tuple(l_gma)),
+      )
+
+    DETRUIRE(CONCEPT = _F(NOM = MA), INFO=1)
+
+    if CREA_GROUP_NO == 'OUI' :
+      DEFI_GROUP(reuse = SMESH_02,
+        MAILLAGE = SMESH_02,
+        CREA_GROUP_NO = _F(TOUT_GROUP_MA = 'OUI'),
+        )
+
+    else :
+#    Traitement des GROUP_NO qui sont des points
+      info_gno = SMESH_02.LIST_GROUP_NO()
+      l_gno = []
+      for gno in info_gno :
+        if gno[1] == 1 : l_gno.append(gno[0])
+
+      l_gma = []
+      for gma in self.physicals.keys() :
+        nom_gmsh = self.physicals[gma]
+        if nom_gmsh in l_gno :
+          l_gma.append(gma)
+
+      if l_gma :
+        DEFI_GROUP(reuse = SMESH_02,
+          MAILLAGE = SMESH_02,
+          CREA_GROUP_NO = _F(GROUP_MA = tuple(l_gma)),
+          )
+
+    return SMESH_02
+
+
+
+  def LIRE_GMSH(self,
+    UNITE_GMSH     = 19,
+    UNITE_MAILLAGE = 20,
+    MODI_QUAD      = 'NON',
+    CREA_GROUP_NO  = 'OUI'
+    ) :
+
+    """
+      Lecture du maillage (format Aster) a partir de sa definition
+      (format sup_gmsh)
+      UNITE_GMSH     = Numero d'unite logique pour le fichier msh
+      UNITE_MAILLAGE = Numero d'unite logique pour le fichier mail
+      MODI_QUAD      = 'OUI' si line->quad, 'NON' sinon
+      CREA_GROUP_NO  = 'OUI' si on cree les group_no, 'NON' sinon
+    """
+
+    nom_gmsh = 'fort.' + repr(UNITE_GMSH)
+    self.Create(nom_gmsh)
+
+    PRE_GMSH(UNITE_GMSH=UNITE_GMSH, UNITE_MAILLAGE=UNITE_MAILLAGE)
+
+    SMESH_00 = LIRE_MAILLAGE(UNITE = UNITE_MAILLAGE)
+    DEFI_FICHIER(ACTION='LIBERER',UNITE = UNITE_GMSH)
+    DEFI_FICHIER(ACTION='LIBERER',UNITE = UNITE_MAILLAGE)
+
+    if MODI_QUAD == 'OUI' and self.order == 2 :
+      raise 'The finite elements are already of second order'
+
+    if MODI_QUAD == 'OUI' and self.order <> 2 :
+      SMESH_01 = CREA_MAILLAGE(
+        MAILLAGE = SMESH_00,
+        LINE_QUAD = _F(TOUT = 'OUI')
+        )
+      DETRUIRE(CONCEPT=_F(NOM=SMESH_00), INFO=1)
+      SMESH_00 = SMESH_01
+
+    SMESH_00 = self.Name(SMESH_00,CREA_GROUP_NO)
+
+    return SMESH_00
diff --git a/Aster/Cata/cataSTA10/Utilitai/transpose.py b/Aster/Cata/cataSTA10/Utilitai/transpose.py
new file mode 100644 (file)
index 0000000..0a8698d
--- /dev/null
@@ -0,0 +1,41 @@
+#@ MODIF transpose Utilitai  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+# Il NE faudrait utiliser cette fonction QUE sur des tableaux hétérogènes.
+# Pour les tableaux homogènes (int, float, string), utiliser numpy.transpose.
+
+def transpose(liste):
+    """Transposition de double liste
+    """
+    import numpy
+    if isinstance(liste, numpy.ndarray):
+        from warnings import warn
+        warn('prefer use of numpy.transpose instead', DeprecationWarning, stacklevel=2)
+
+    n = range(len(liste[0]))
+    m = range(len(liste))
+    liste_t = [[] for i in n]
+    for i in n :
+        for j in m :
+            liste_t[i].append(liste[j][i])
+    return liste_t
+
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/utils.py b/Aster/Cata/cataSTA10/Utilitai/utils.py
new file mode 100644 (file)
index 0000000..36f48d7
--- /dev/null
@@ -0,0 +1,105 @@
+#@ MODIF utils Utilitai  DATE 26/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+"""
+Module fournissant quelques fonctions utilitaires.
+"""
+
+import os
+import time
+
+
+def miss_dble(list1, list2):
+    """miss = elements de list1 absents de list2
+      dble = elements de list2 presents dans list1, fournis plusieurs fois."""
+    s_ini = set(list1)
+    inter = s_ini.intersection(list2)
+    miss = s_ini.copy()
+    dble = set()
+    for p in list2:
+        try:
+            miss.remove(p)
+        except KeyError:
+            if set(p).issubset(s_ini) and p.strip() != '':
+                dble.add(p)
+    return miss, inter, dble
+
+
+#TODO faire à l'identique pour les commandes fortran (ou appeller cette fonction)
+def get_titre_concept(co=None):
+    """Retourne un titre automatique."""
+    # ASTER 10.01.25 CONCEPT tab0 CALCULE LE 21/05/2010 A 17:58:50 DE TYPE TABLE_SDASTER
+    import aster
+    from Noyau.N_ASSD import ASSD
+    if not isinstance(co, ASSD):
+        co = None
+    fmt = {
+        "version" : "ASTER %(version)s",
+        "nomco" : "CONCEPT %(nom_concept)s",
+        "etatco" : "CALCULE",
+        "dateheure" : "%(dateheure)s",
+        "typeco" : "DE TYPE %(type_concept)s",
+    }
+    format = [fmt["version"],]
+    df = {
+        "version" : aster.__version__,
+        "dateheure" : time.strftime("LE %m/%d/%Y A %H:%M:%S"),
+    }
+    if co:
+        df["nom_concept"] = co.nom
+        format.append(fmt["nomco"])
+        format.append(fmt["etatco"])
+    format.append(fmt["dateheure"])
+    if co:
+        df["type_concept"] = co.__class__.__name__.upper()
+        format.append(fmt["typeco"])
+    globfmt = " ".join(format)
+    titre = globfmt % df
+    lt = titre.split()
+    lt = maximize_lines(lt, 80, " ")
+    return os.linesep.join(lt)
+
+
+# existe dans asrun.mystring
+def maximize_lines(l_fields, maxlen, sep):
+    """Construit des lignes dont la longueur est au plus de `maxlen` caractères.
+    Les champs sont assemblés avec le séparateur `sep`.
+    """
+    newlines = []
+    # ceinture
+    assert max([len(f) for f in l_fields]) <= maxlen, 'lignes trop longues : %s' % l_fields
+    while len(l_fields) > 0:
+        cur = []
+        while len(l_fields) > 0 and len(sep.join(cur + [l_fields[0],])) <= maxlen:
+            cur.append(l_fields.pop(0))
+        # bretelle
+        assert len(cur) > 0, l_fields
+        newlines.append(sep.join(cur))
+    newlines = [l for l in newlines if l != '']
+    return newlines
+
+
+
+if __name__ == '__main__':
+   npar = ('X', 'Y',)
+   nuti = ('DX', 'DY', 'X', 'X')
+   print miss_dble(npar, nuti)
+
diff --git a/Aster/Cata/cataSTA10/Utilitai/veri_matr_tang.py b/Aster/Cata/cataSTA10/Utilitai/veri_matr_tang.py
new file mode 100644 (file)
index 0000000..9ceb066
--- /dev/null
@@ -0,0 +1,269 @@
+#@ MODIF veri_matr_tang Utilitai  DATE 10/01/2011   AUTEUR PROIX J-M.PROIX 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+from Cata.cata import *
+
+#              MACRO "VERI_MATR_TANG"
+#           ----------------------------
+import cPickle
+import string
+
+import numpy as NP
+from numpy import linalg as LA
+
+import aster
+
+class TANGENT :
+
+     """
+       VERIFICATION SUR LES MATRICES TANGENTES
+       Attributs publics :
+         mat       : matrice tangente
+         ddl       : nom des degres de liberte
+         nddl      : nombre de ddl
+         norme     : norme de la matrice tangente
+         prec_zero : en-dessous de prec_zero, on ne compare pas les matrices
+       Methodes publiques
+         Save       : sauvegarde la matrice dans un fichier
+         Load       : lit la matrice depuis un fichier
+         Aster      : lit la matrice depuis l'espace Aster
+         Matrice    : range la matrice
+         Difference : comparaison entre la matrice tangente et une autre matrice
+         Symetrie   : verification du caractere symetrique de la matrice tangente
+     """
+     def __init__(self,ddl='',prec_zero=1.E-12) :
+       """
+         ddl       : chaine de caracteres designant les ddl (ex: 'UUP')
+         prec_zero : en-dessous de prec_zero, on ne compare pas les matrices
+       """
+       self.ddl = ddl
+       self.prec_zero = prec_zero
+
+     def Load(self,nom_fichier) :
+       fichier = file(nom_fichier,'r')
+       self.__dict__ = cPickle.load(fichier)
+     def Save(self,nom_fichier) :
+       fichier = file(nom_fichier,'w')
+       cPickle.dump(self.__dict__,fichier)
+
+     def Aster(self,suffixe = 'MATA') :
+       """
+         nom : suffixe de l'objet jeveux
+       """
+
+       nom_obj_jeveux = string.ljust('PYTHON.TANGENT.'+suffixe,24)
+       obj_jeveux = aster.getvectjev(nom_obj_jeveux)
+       if not obj_jeveux :
+         raise 'TANGENT : OBJET JEVEUX DE SUFFIXE '+suffixe+' INEXISTANT'
+       self.Matrice(obj_jeveux)
+     def Eigen(self) :
+       self.vp = NP.sort(LA.eigvals(self.mat))
+     def Matrice(self,matrice) :
+       """
+         matrice   : la matrice tangente (rangement carre)
+       """
+       if type(matrice) == type((1,)) :
+         matrice = NP.array(list(matrice))
+       elif type(matrice) == type([]) :
+         matrice = NP.array(matrice)
+       matrice = matrice.astype(float)
+       nddl = int(len(matrice)**0.5+0.5)
+       matrice.shape = (nddl,nddl)
+
+       self.mat = matrice
+       self.nddl = nddl
+       if not self.ddl :
+         self.ddl = 'D'*nddl
+       elif len(self.ddl) <> nddl :
+         raise 'Nommage des DDL incoherents avec la taille de la matrice'
+
+       self.norme = NP.trace(NP.dot(NP.transpose(self.mat),self.mat))
+
+     def Difference(self,matp,affi_ok=0,prec_diff = 1.E-4) :
+       """
+         COMPARAISON RELATIVE DE LA MATRICE TANGENTE AVEC UNE AUTRE MATRICE
+         matp      : matrice avec laquelle self.mat est comparee
+         affi_ok   : si oui, on affiche egalement les valeurs qui collent bien
+         prec_diff : ecart au-dessus duquel on considere que ce n'est pas OK
+       """
+       if type(matp) is tuple :
+         matp = NP.array(list(matp))
+       elif type(matp) is list :
+         matp = NP.array(matp)
+       elif type(matp) == type(self) :
+         matp = matp.mat
+       elif type(matp) is NP.ndarray:
+         pass
+       else :
+         raise '1er argument doit etre une matrice (tuple,liste,TANGENT ou tableau numpy)'
+       matp = NP.ravel(matp)
+       matp = matp.astype(float)
+       if len(matp) <> self.nddl*self.nddl :
+         raise 'Matrices de tailles differentes'
+       matp.shape = (self.nddl,self.nddl)
+       refe = NP.abs(self.mat) + NP.abs(matp)
+       diff = NP.where(refe > self.prec_zero,NP.abs(self.mat-matp)/(refe+self.prec_zero),0)
+       nook = (diff.ravel()  > prec_diff).nonzero()[0]
+       ok   = (diff.ravel() <= prec_diff).nonzero()[0]
+
+       if affi_ok :
+         affi = [ok,nook]
+       else :
+         affi = [nook]
+         
+       liste_i=[]
+       liste_j=[]
+       liste_matt=[]
+       liste_matp=[]
+       liste_diff=[]
+       for ind in affi :         
+#         print '-'*80
+         for pos in ind :
+           i = pos / self.nddl
+           j = pos % self.nddl
+#           print self.ddl[i],self.ddl[j],'  ',(i+1,j+1),'  ',self.mat[i,j],' ',matp[i,j]
+           liste_i.append(i+1)
+           liste_j.append(j+1)
+           liste_matt.append(self.mat[i,j])
+           liste_matp.append(matp[i,j])
+           liste_diff.append( NP.abs(self.mat[i,j]-matp[i,j])/ ( NP.abs(self.mat[i,j]) + NP.abs(matp[i,j]) + self.prec_zero))
+#       print '-'*80
+       if self.norme > self.prec_zero :
+         ecart = (self.mat - matp)/2.
+         nor_ecart = NP.trace(NP.dot(NP.transpose(ecart),ecart))
+         nor_diff= nor_ecart / self.norme
+       else :
+         nor_diff= 0.
+       max_diff=0.
+       if (len(liste_diff) > 0 ) : max_diff = NP.max(liste_diff)
+       return liste_i,liste_j,liste_matt,liste_matp, liste_diff,nor_diff,max_diff
+
+     def Symetrie(self,prec_diff = 1.E-4) :
+       """
+         VERIFICATION QUE LA MATRICE TANGENTE EST SYMETRIQUE
+         On retourne la norme relative de l'ecart a la symetrie : || (A-At)/2|| / ||A||
+         On affiche les termes qui s'ecartent de la symetrie
+
+         prec_diff : ecart au-dessus duquel on considere que ce n'est pas OK
+       """
+
+       tran = NP.transpose(self.mat)
+       liste_i,liste_j,liste_matt,liste_matp,liste_diff,nor_diff,max_diff=self.Difference(tran,affi_ok=0,prec_diff=prec_diff)
+       
+#       if self.norme > self.prec_zero :
+#         ecart = (self.mat - tran)/2.
+#         nor_ecart = NP.trace(NP.dot(NP.transpose(ecart),ecart))
+#         return nor_ecart / self.norme
+#       else :
+#         return 0.
+       return liste_i,liste_j,liste_matt,liste_matp, liste_diff,nor_diff,max_diff
+     def Sauve(self,nom_fichier) : 
+       cPickler.dump(self.__dict__)
+       
+def veri_matr_tang_ops(self,SYMETRIE,DIFFERENCE,PRECISION,**args):
+
+   """
+      Ecriture de la macro verif_matrice_tangente_ops
+   """
+   import os
+   from Accas import _F
+   from Utilitai.Utmess     import UTMESS
+   from Utilitai.UniteAster import UniteAster
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   CREA_TABLE  = self.get_cmd('CREA_TABLE')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+  # Le concept sortant (de type fonction) est nomme ROTGD dans 
+  # le contexte de la macro
+
+   self.DeclareOut('TAB_MAT',self.sd)
+   ier=0                                                                            
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+   tgt=TANGENT()                                                                    
+   tgt.Aster(suffixe='MATA')                                                        
+   matp=TANGENT()                                                                   
+   matp.Aster(suffixe='MATC')                                                       
+   prec_diff = PRECISION                                                                                 
+   if (SYMETRIE=='OUI') :
+      list1_i,list1_j,list1_matt,list1_matp,list1_diff,symetgt,max_diff=tgt.Symetrie(prec_diff)                                                        
+      list2_i,list2_j,list2_matt,list2_matp,list2_diff,symeper,max_diff=matp.Symetrie(prec_diff)                                                       
+      print 'Symetrie de la matrice tangente',symetgt                            
+      print 'Symetrie de la matrice pr pertubation',symeper                      
+      #aster.affiche('MESSAGE',str(tgt.Difference(matp,prec_diff) ))
+   if (DIFFERENCE=='OUI'):                                                            
+       liste_i,liste_j,liste_matt,liste_matp,liste_diff,nor_diff,max_diff=tgt.Difference(matp,prec_diff)
+       print 'difference entre matrice tangente et matrice par pertubation : norme=',nor_diff,' max=',max_diff  
+       TAB_MAT=CREA_TABLE(LISTE=(
+                     _F(PARA     ='I',LISTE_I = liste_i),
+                     _F(PARA     ='J',LISTE_I = liste_j),
+                     _F(PARA     ='MAT_TGTE',LISTE_R = liste_matt),
+                     _F(PARA     ='MAT_PERT',LISTE_R = liste_matp),
+                     _F(PARA     ='MAT_DIFF',LISTE_R = liste_diff),
+                     ))
+   return
+                                                     
+VERI_MATR_TANG=MACRO(nom="VERI_MATR_TANG",op=veri_matr_tang_ops,sd_prod=table_sdaster,
+                       docu="",reentrant='n',
+fr="verification de la matrice tangente : symetrie et difference par rapport a la matrice calculee par perturbation",
+         regles=(AU_MOINS_UN('SYMETRIE','DIFFERENCE')),
+         SYMETRIE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         DIFFERENCE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.E-4 ),
+)  ;
+
index ea93f30df748401188144ac7524b6c1ad60894b6..fc785b526e899abea19f05f9ef7786f0481aa308 100755 (executable)
@@ -1,8 +1,8 @@
-#& MODIF ENTETE  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF ENTETE  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -135,6 +135,7 @@ from SD.co_listr8 import listr8_sdaster
 # maillage :
 from SD.co_maillage  import maillage_sdaster
 from SD.co_squelette import squelette
+from SD.co_grille    import grille_sdaster
 
 # -----------------------------------------------------------------------------
 # champs
@@ -218,10 +219,165 @@ from SD.co_vect_elem import vect_elem, \
                             vect_elem_pres_r, vect_elem_pres_c, \
                             vect_elem_temp_r
 
-#& MODIF COMMUN  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+
+# -----------------------------------------------------------------------------
+# corresp_2_mailla :
+from SD.co_corresp_2_mailla import corresp_2_mailla
+
+#& MODIF COMMUN  DATE 21/12/2010   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+def C_AFFICHAGE() : return FACT(statut='f',max=1,
+        INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+        UNITE       = SIMP(statut='f',typ='I',val_min=1),
+       );
+#& MODIF COMMUN  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_ARCHIVAGE() : return FACT(statut='d',max=1,
+    regles         = (EXCLUS('PAS_ARCH','LIST_INST','INST'),),
+    LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+    INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+    PAS_ARCH       = SIMP(statut='f',typ='I' ),
+    CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+    DETR_NUME_SUIV = SIMP(statut='f',typ='TXM',into=("OUI",)),
+    CHAM_EXCLU     = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+);
+#& MODIF COMMUN  DATE 07/12/2010   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+def C_COMP_ELAS( COMMAND ) :  #COMMUN#
+    
+    assert COMMAND in ('MACR_ASCOUF_CALC','MACR_ASPIC_CALC','CALC_G','POST_GP',
+                       'CALC_POINT_MAT','SIMU_POINT_MAT', 'DYNA_NON_LINE','STAT_NON_LINE','CALCUL',)
+    
+    kwargs = {}
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            RELATION
+# ----------------------------------------------------------------------------------------------------------------------------------
+    # commandes pour lesquelles on ne peut pas choisir une relation de type 1d
+    if COMMAND in ('CALC_G','POST_GP','CALC_POINT_MAT','SIMU_POINT_MAT' ):
+        kwargs['RELATION'] = SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER"))
+
+    # commandes pour lesquelles tout type de relation est possible
+    elif COMMAND in ('DYNA_NON_LINE','STAT_NON_LINE','CALCUL',):
+        kwargs['RELATION'] = SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                       "ELAS_VMIS_PUIS","ELAS_HYPER","ELAS_POUTRE_GR","CABLE"))
+
+     # cas particulier de MACR_ASCOUF/ASPIC_CALC : on limite volontairement le choix pour ne pas perturber l'utilisateur
+     # mais theoriquement, toutes les lois disponibles pour CALC_G le sont aussi pour MACR_ASCOUF/ASPIC_CALC
+    elif COMMAND in ('MACR_ASCOUF_CALC','MACR_ASPIC_CALC'):
+        kwargs['RELATION'] = SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC"))
+
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            DEFORMATION
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    # commandes pour lesquelles on ne peut pas choisir les grandes deformations
+    if COMMAND in ('CALC_POINT_MAT','MACR_ASCOUF_CALC','MACR_ASPIC_CALC'):
+        kwargs['DEFORMATION'] =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT",))
+
+    # commandes pour lesquelles on peut choisir tout type de deformation
+    elif COMMAND in ('DYNA_NON_LINE','STAT_NON_LINE','CALCUL','POST_GP','CALC_G','SIMU_POINT_MAT', ):
+        kwargs['DEFORMATION'] =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",))
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            INTEGRATION (RESI_INTE_RELA, ITER_INTE_MAXI, ALGO_INTE)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    kwargs['RESI_INTE_RELA']    =SIMP(statut='f',typ='R',defaut= 1.0E-6)
+    kwargs['ITER_INTE_MAXI']    =SIMP(statut='f',typ='I',defaut= 10 )
+    kwargs['ALGO_INTE']         =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE",))
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            LOCALISATION
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    # commandes pour lesquelles la localisation n'a pas de sens
+    # 'CALC_POINT_MAT','SIMU_POINT_MAT' 
+
+    # commandes pour lesquelles la localisation est automatique
+    # 'MACR_ASCOUF_CALC','MACR_ASPIC_CALC'
+
+    # commandes pour lesquelles on peut choisir la localisation
+    if COMMAND in ('DYNA_NON_LINE','STAT_NON_LINE','CALC_G','POST_GP','CALCUL'):
+        kwargs['regles'] = (PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),)
+        kwargs['TOUT'] =SIMP(statut='f',typ='TXM',into=("OUI",) )
+        kwargs['GROUP_MA']  =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**')
+        kwargs['MAILLE']    =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**')
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            DIVERS
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    if COMMAND == 'CALC_G':
+        kwargs['CALCUL_CONTRAINTE'] =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") )
+
+
+    mcfact = FACT(statut='f',max='**', **kwargs)
+
+    return mcfact
+#& MODIF COMMUN  DATE 08/02/2011   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -249,6 +405,14 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                  fr="Comportement de la bibliotheque Zmat",
                    NB_VARI =SIMP(statut='o',typ='I',max=1),
                    UNITE =SIMP(statut='o',typ='I',max=1),),
+           b_umat      = BLOC(condition = "RELATION == 'UMAT' ",
+                                 fr="Comportement utilisateur de type UMAT",
+                   NB_VARI =SIMP(statut='o',typ='I',max=1,fr="Nombre de variables internes"),
+                   LIBRAIRIE = SIMP(statut='o', typ='TXM',validators=LongStr(1,128),
+                        fr="Chemin vers la bibliothèque dynamique définissant le comportement UMAT"),
+                   NOM_ROUTINE = SIMP(statut='o', typ='TXM',
+                        fr="Nom de la routine UMAT dans la bibliothèque"),
+                   ),
 
 # KITs
            b_kit_ddi = BLOC(condition = "RELATION == 'KIT_DDI' ",
@@ -270,7 +434,8 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        "MAZARS"
                                        ),),
                    ),
-           b_kit_thm = BLOC(condition = "RELATION in ['KIT_HHM','KIT_HH','KIT_HM','KIT_THHM','KIT_THH','KIT_THM','KIT_THV']",
+           b_kit_thm = BLOC(condition = "RELATION in ['KIT_HHM','KIT_HH','KIT_H','KIT_HM','KIT_THHM', \
+                                                      'KIT_THH','KIT_THM','KIT_THV']",
                             fr="lois de comportements thermo-hydro-mecaniques",
                RELATION_KIT    =SIMP(statut='o',typ='TXM',max=9,validators=NoRepeat(),
                                  into=(
@@ -291,6 +456,8 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        "MAZARS",
                                        "ENDO_ISOT_BETON",
                                        "JOINT_BANDIS",
+                                       "CZM_LIN_REG",
+                                       "CZM_EXP_REG",
 # THMC
                                        "GAZ",
                                        "LIQU_SATU",
@@ -317,7 +484,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                  ),
 
            DEFORMATION       =SIMP(statut='f',typ='TXM',defaut="PETIT",
-                                   into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GREEN_REAC")),
+                                   into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GREEN_REAC","GDEF_LOG")),
            ALGO_C_PLAN       =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
            RESI_DEBO_MAXI    =SIMP(statut='f',typ='R',fr="Critère d'arret absolu pour assurer la condition de contraintes planes",),
 
@@ -329,15 +496,17 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            ALGO_1D           =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
            ITER_MAXI_DEBORST =SIMP(statut='f',typ='I',defaut= 1),
            RESI_INTE_RELA    =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           ITER_INTE_MAXI    =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_MAXI    =SIMP(statut='f',typ='I',defaut= 20 ),
 
            b_redec_local      = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",
                                      fr="Nombre de redécoupages internes du pas de temps",
                ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
                                      ),
 
-           RESO_INTE         =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                   into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE","IMPLICITE_RELI")),
+           ALGO_INTE         =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE", "DEKKER", "NEWTON_1D","BRENT", 
+                                                              "NEWTON", "NEWTON_RELI", "NEWTON_PERT", "RUNGE_KUTTA",
+                                                              "SPECIFIQUE", "SANS_OBJET")),
+
            TYPE_MATR_TANG    =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION","TANGENTE_SECANTE")),
 
            b_perturb         =BLOC(condition = " (TYPE_MATR_TANG != None) and (TYPE_MATR_TANG != 'TANGENTE_SECANTE') ",
@@ -352,7 +521,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                  TAUX_RETOUR  =SIMP(statut='f',typ='R',defaut= 0.05 ),
                                   ),
 
-           PARM_THETA      =SIMP(statut='f',typ='R',defaut= 1. ),
+           PARM_THETA      =SIMP(statut='f',typ='R',val_min=0.,val_max=1., defaut= 1.),
            PARM_ALPHA      =SIMP(statut='f',typ='R',defaut= 1. ),
 
            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
@@ -361,7 +530,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
 
          ) ;
-#& MODIF COMMUN  DATE 12/04/2010   AUTEUR MICHEL S.MICHEL 
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -379,7 +548,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE REZETTE C.REZETTE
+# RESPONSABLE ABBAS M.ABBAS
 def C_CONVERGENCE() : return FACT(statut='d',
            regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
            b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
@@ -436,7 +605,7 @@ def C_IMPL_EX() : return FACT(statut='d',
            REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1),
            PREDICTION      =SIMP(statut='f',typ='TXM',defaut="TANGENTE"),
          );
-#& MODIF COMMUN  DATE 20/07/2009   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -454,7 +623,7 @@ def C_IMPL_EX() : return FACT(statut='d',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE REZETTE C.REZETTE
+# RESPONSABLE ABBAS M.ABBAS
 def C_INCREMENT() : return FACT(statut='o',
            regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
                    EXCLUS('NUME_INST_FIN','INST_FIN'),),
@@ -468,7 +637,7 @@ def C_INCREMENT() : return FACT(statut='o',
                                  ang="Time adaptation for unstationary HM models"),
            PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
          );
-#& MODIF COMMUN  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -486,7 +655,7 @@ def C_INCREMENT() : return FACT(statut='o',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE REZETTE C.REZETTE
+# RESPONSABLE ABBAS M.ABBAS
 def C_NEWTON() : return FACT(statut='d',
            REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1,val_min=0),
            PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
@@ -496,222 +665,230 @@ def C_NEWTON() : return FACT(statut='d',
            REAC_ITER_ELAS  =SIMP(statut='f',typ='I',defaut=0,val_min=0),
            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
          );
-#& MODIF COMMUN  DATE 27/04/2010   AUTEUR DESROCHES X.DESROCHE
+#& MODIF COMMUN  DATE 29/03/2011   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 # ce fichier contient la liste des "into" possibles pour le mot cle NOM_CHAM
 # c'est a dire les noms de champs des SD RESULTAT (DATA de la routine RSCRSD)
-def C_NOM_CHAM_INTO() : return  ("ACCE",    #COMMUN#
+
+def C_NOM_CHAM_INTO( typ_cham=None ) : #COMMUN# 
+  import types
+# Liste de tout les champs
+  l_tout_cham = [
+                        "ACCE",
                         "ACCE_ABSOLU",
                         "ALPH0_ELGA_EPSP",
                         "ALPHP_ELGA_ALPH0",
                         "COMPORTEMENT",
                         "COMPORTHER",
-                        "CRIT_ELNO_RUPT",
-                        "DCHA_ELGA_SIGM",
-                        "DCHA_ELNO_SIGM",
-                        "DCHA_NOEU_SIGM",
-                        "DEDE_ELNO_DLDE",
-                        "DEDE_NOEU_DLDE",
-                        "DEGE_ELNO_DEPL",
-                        "DEGE_NOEU_DEPL",
+                        "CRIT_ELNO",
+                        "DEDE_ELNO",
+                        "DEDE_NOEU",
+                        "DEGE_ELNO",
+                        "DEGE_NOEU",
                         "DEPL",
                         "DEPL_ABSOLU",
-                        "DESI_ELNO_DLSI",
-                        "DESI_NOEU_DLSI",
-                        "DETE_ELNO_DLTE",
-                        "DETE_NOEU_DLTE",
+                        "DERA_ELGA",
+                        "DERA_ELNO",
+                        "DERA_NOEU",
+                        "DESI_ELNO",
+                        "DESI_NOEU",
+                        "DETE_ELNO",
+                        "DETE_NOEU",
                         "DISS_ELGA",
-                        "DISS_ELNO_ELGA",
-                        "DURT_ELGA_META",
-                        "DURT_ELNO_META",
-                        "DURT_NOEU_META",
-                        "ECIN_ELEM_DEPL",
-                        "EFGE_ELNO_CART",
-                        "EFGE_ELNO_DEPL",
-                        "EFGE_NOEU_CART",
-                        "EFGE_NOEU_DEPL",
+                        "DISS_ELNO",
+                        "DISS_NOEU",
+                        "DURT_ELNO",
+                        "DURT_NOEU",
+                        "ECIN_ELEM",
+                        "EFCA_ELNO",
+                        "EFCA_NOEU",
+                        "EFGE_ELNO",
+                        "EFGE_NOEU",
                         "ENDO_ELGA",
-                        "ENDO_ELNO_ELGA",
-                        "ENDO_ELNO_SIGA",
-                        "ENDO_ELNO_SINO",
-                        "ENDO_NOEU_SINO",
+                        "ENDO_ELNO",
+                        "ENDO_NOEU",
                         "ENEL_ELGA",
-                        "ENEL_ELNO_ELGA",
-                        "ENEL_NOEU_ELGA",
-                        "EPEQ_ELNO_TUYO",
-                        "EPVC_ELGA",
-                        "EPVC_ELNO",
+                        "ENEL_ELNO",
+                        "ENEL_NOEU",
+                        "EPEQ_ELGA",
+                        "EPEQ_ELNO",
+                        "EPEQ_NOEU",
                         "EPFD_ELGA",
                         "EPFD_ELNO",
+                        "EPFD_NOEU",
                         "EPFP_ELGA",
                         "EPFP_ELNO",
-                        "EPME_ELGA_DEPL",
-                        "EPME_ELNO_DEPL",
-                        "EPMG_ELGA_DEPL",
-                        "EPMG_ELNO_DEPL",
-                        "EPMG_NOEU_DEPL",
-                        "EPOT_ELEM_DEPL",
+                        "EPFP_NOEU",
+                        "EPME_ELGA",
+                        "EPME_ELNO",
+                        "EPMG_ELGA",
+                        "EPMG_ELNO",
+                        "EPMG_NOEU",
+                        "EPMQ_ELGA",
+                        "EPMQ_ELNO",
+                        "EPMQ_NOEU",
+                        "EPOT_ELEM",
                         "EPSA_ELNO",
                         "EPSA_NOEU",
-                        "EPSG_ELGA_DEPL",
-                        "EPSG_ELNO_DEPL",
-                        "EPSG_NOEU_DEPL",
-                        "EPSI_ELGA_DEPL",
-                        "EPSI_ELNO_DEPL",
-                        "EPSI_ELNO_TUYO",
-                        "EPSI_NOEU_DEPL",
+                        "EPSG_ELGA",
+                        "EPSG_ELNO",
+                        "EPSG_NOEU",
+                        "EPSI_ELGA",
+                        "EPSI_ELNO",
+                        "EPSI_NOEU",
                         "EPSP_ELGA",
                         "EPSP_ELNO",
                         "EPSP_NOEU",
-                        "EQUI_ELGA_EPME",
-                        "EQUI_ELGA_EPSI",
-                        "EQUI_ELGA_SIGM",
-                        "EQUI_ELNO_EPME",
-                        "EQUI_ELNO_EPSI",
-                        "EQUI_ELNO_SIGM",
-                        "EQUI_NOEU_EPME",
-                        "EQUI_NOEU_EPSI",
-                        "EQUI_NOEU_SIGM",
-                        "ERRE_ELEM_SIGM",
-                        "ERRE_ELEM_TEMP",
-                        "ERRE_ELNO_ELEM",
-                        "ERRE_NOEU_ELEM",
-                        "ERZ1_ELEM_SIGM",
-                        "ERZ2_ELEM_SIGM",
-                        "QIRE_ELEM_SIGM",
-                        "QIRE_ELNO_ELEM",
-                        "QIRE_NOEU_ELEM",
-                        "QIZ1_ELEM_SIGM",
-                        "QIZ2_ELEM_SIGM",
-                        "SING_ELEM",
-                        "SING_ELNO_ELEM",
+                        "EPTQ_ELNO",
+                        "EPTU_ELNO",
+                        "EPVC_ELGA",
+                        "EPVC_ELNO",
+                        "EPVC_NOEU",
+                        "ERME_ELEM",
+                        "ERME_ELNO",
+                        "ERME_NOEU",
+                        "ERTH_ELEM",
+                        "ERTH_ELNO",
+                        "ERTH_NOEU",
+                        "ERZ1_ELEM",
+                        "ERZ2_ELEM",
                         "ETOT_ELEM",
                         "ETOT_ELGA",
-                        "ETOT_ELNO_ELGA",
-                        "EXTR_ELGA_VARI",
-                        "EXTR_ELNO_VARI",
-                        "EXTR_NOEU_VARI",
+                        "ETOT_ELNO",
+                        "FERRAILLAGE",
                         "FLHN_ELGA",
-                        "FLUX_ELGA_TEMP",
-                        "FLUX_ELNO_TEMP",
-                        "FLUX_NOEU_TEMP",
+                        "FLUX_ELGA",
+                        "FLUX_ELNO",
+                        "FLUX_NOEU",
                         "FORC_NODA",
                         "FSUR_2D",
                         "FSUR_3D",
                         "FVOL_2D",
                         "FVOL_3D",
                         "GRAD_NOEU_THETA",
-                        "HYDR_ELNO_ELGA",
-                        "HYDR_NOEU_ELGA",
-                        "INDI_LOCA_ELGA",
-                        "INTE_ELNO_ACTI",
-                        "INTE_ELNO_REAC",
-                        "INTE_NOEU_ACTI",
-                        "INTE_NOEU_REAC",
+                        "HYDR_ELNO",
+                        "HYDR_NOEU",
+                        "INDL_ELGA",
+                        "INTE_ELNO",
+                        "INTE_NOEU",
                         "IRRA",
                         "LANL_ELGA",
                         "META_ELGA_TEMP",
-                        "META_ELNO_TEMP",
-                        "META_NOEU_TEMP",
+                        "META_ELNO",
+                        "META_NOEU",
                         "MODE_FLAMB",
-                        "PMPB_ELGA_SIEF",
-                        "PMPB_ELNO_SIEF",
-                        "PMPB_NOEU_SIEF",
+                        "PMPB_ELGA",
+                        "PMPB_ELNO",
+                        "PMPB_NOEU",
+                        "PRAC_ELNO",
+                        "PRAC_NOEU",
                         "PRES",
-                        "PRES_DBEL_DEPL",
-                        "PRES_ELNO_DBEL",
-                        "PRES_ELNO_IMAG",
-                        "PRES_ELNO_REEL",
-                        "PRES_NOEU_DBEL",
-                        "PRES_NOEU_IMAG",
-                        "PRES_NOEU_REEL",
-                        "PROJ_ELEM_SIGN",
-                        "PROJ_ELEM_SIGT",
-                        "PROJ_ELEM_SIT1",
-                        "PROJ_ELEM_SIT2",
-                        "RADI_ELGA_SIGM",
-                        "RADI_ELNO_SIGM",
-                        "RADI_NOEU_SIGM",
+                        "PRME_ELNO",
+                        "QIRE_ELEM",
+                        "QIRE_ELNO",
+                        "QIRE_NOEU",
+                        "QIZ1_ELEM",
+                        "QIZ2_ELEM",
                         "REAC_NODA",
+                        "SICA_ELNO",
+                        "SICA_NOEU",
+                        "SICO_ELNO",
+                        "SICO_NOEU",
                         "SIEF_ELGA",
-                        "SIEF_ELGA_DEPL",
                         "SIEF_ELNO",
-                        "SIEF_ELNO_ELGA",
                         "SIEF_NOEU",
-                        "SIEF_NOEU_ELGA",
                         "SIEF_SENO_SEGA",
-                        "SIEQ_ELNO_TUYO",
-                        "SIGM_ELNO_CART",
-                        "SIGM_ELNO_COQU",
-                        "SIGM_ELNO_DEPL",
-                        "SIGM_ELNO_SIEF",
-                        "SIGM_ELNO_TUYO",
-                        "SIGM_NOEU_CART",
-                        "SIGM_NOEU_COQU",
-                        "SIGM_NOEU_DEPL",
-                        "SIGM_NOEU_SIEF",
-                        "SIGM_NOZ1_ELGA",
-                        "SIGM_NOZ2_ELGA",
-                        "SIPO_ELNO_DEPL",
-                        "SIPO_ELNO_SIEF",
-                        "SIPO_NOEU_DEPL",
-                        "SIPO_NOEU_SIEF",
-                        "SIRE_ELNO_DEPL",
-                        "SIRE_NOEU_DEPL",
-                        "SOUR_ELGA_ELEC",
+                        "SIEQ_ELGA",
+                        "SIEQ_ELNO",
+                        "SIEQ_NOEU",
+                        "SIGM_ELNO",
+                        "SIGM_NOEU",
+                        "SING_ELEM",
+                        "SING_ELNO",
+                        "SIPM_ELNO",
+                        "SIPO_ELNO",
+                        "SIPO_NOEU",
+                        "SIRO_ELEM",
+                        "SITQ_ELNO",
+                        "SITU_ELNO",
+                        "SIZ1_ELGA",
+                        "SIZ2_ELGA",
+                        "SOUR_ELGA",
+                        "SPMX_ELGA",
                         "TEMP",
                         "THETA",
+                        "VACO_ELNO",
+                        "VAEX_ELGA",
+                        "VAEX_ELNO",
+                        "VAEX_NOEU",
                         "VALE_CONT",
-                        "VALE_NCOU_MAXI",
+                        "VARC_ELGA",
                         "VARI_ELGA",
                         "VARI_ELNO",
-                        "VARI_ELNO_COQU",
-                        "VARI_ELNO_ELGA",
-                        "VARI_ELNO_TUYO",
                         "VARI_NOEU",
-                        "VARI_NOEU_ELGA",
+                        "VATU_ELNO",
                         "VITE",
                         "VITE_ABSOLU",
                         "VITE_VENT",
-                        )
-#& MODIF COMMUN  DATE 14/12/2009   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+                        ]
+#
+# Si aucun argument n'est passe, on utilise tous les types de champs possibles
+  if ( typ_cham is None ) :
+    l_ncham = l_tout_cham
+#
+# Sinon, on n'utilise que les champs dont le type est passe en argument
+  else :
+    l_typ_cham = []
+    if (type(typ_cham) == types.StringType) :
+      l_typ_cham.append(typ_cham)
+    else :
+      l_typ_cham = typ_cham
+    l_ncham = []
+    for typ in l_typ_cham :
+     for cham in l_tout_cham :
+       if (cham.find(typ) != -1) :
+        if (cham.split('_')[1] == typ):
+           l_ncham.append(cham)
+
+  return tuple(l_ncham)
+#& MODIF COMMUN  DATE 04/04/2011   AUTEUR PELLET J.PELLET 
 # RESPONSABLE DESROCHES X.DESROCHES
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # ce fichier contient la liste des  noms des grandeurs de CODE_ASTER
-def C_NOM_GRANDEUR() : return  ( #COMMUN# 
+def C_NOM_GRANDEUR() : return  ( #COMMUN#
 "ABSC_R",
 "ADRSJEVE",
 "ADRSJEVN",
@@ -749,8 +926,9 @@ def C_NOM_GRANDEUR() : return  ( #COMMUN#
 "DEPL_F",
 "DEPL_R",
 "DISS_R",
-"DOMMAG",
+"DOMA_R",
 "DURT_R",
+"ENDO_R",
 "ENER_R",
 "EPSI_C",
 "EPSI_F",
@@ -758,6 +936,7 @@ def C_NOM_GRANDEUR() : return  ( #COMMUN#
 "ERRE_R",
 "FACY_R",
 "FELECR",
+"FER2_R",
 "FISS_R",
 "FLAPLA",
 "FLUN_F",
@@ -778,7 +957,7 @@ def C_NOM_GRANDEUR() : return  ( #COMMUN#
 "IMPE_C",
 "IMPE_F",
 "IMPE_R",
-"IND_LOCA",
+"INDL_R",
 "INFC_R",
 "INST_R",
 "INTE_R",
@@ -840,6 +1019,88 @@ def C_NOM_GRANDEUR() : return  ( #COMMUN#
 "WEIBULL",
 "XCONTAC",
                                  )
+#& MODIF COMMUN  DATE 17/01/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+def C_OBSERVATION() : return FACT(statut='f',max=99,
+
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+                                   into=("VALE_CONT","FORC_NODA",
+                                         "DEPL","VITE","ACCE","TEMP",
+                                         "SIEF_ELGA","VARI_ELGA",                                        
+                                         "DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+          
+           EVAL_CHAM       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("MIN","MAX","MOY","VALE",),),
+                                         
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max=20),
+           EVAL_CMP        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("VALE","FORMULE",),),
+                                   
+           b_formule       =BLOC(condition="(EVAL_CMP=='FORMULE')",
+                                   FORMULE = SIMP(statut='o',typ=formule,max=1),
+                                ),
+                                                 
+           b_cham_no       =BLOC(condition="(NOM_CHAM=='DEPL') or \
+                                            (NOM_CHAM=='VITE') or \
+                                            (NOM_CHAM=='ACCE') or \
+                                            (NOM_CHAM=='TEMP') or \
+                                            (NOM_CHAM=='FORC_NODA') or \
+                                            (NOM_CHAM=='VALE_CONT') or \
+                                            (NOM_CHAM=='DEPL_ABSOLU') or \
+                                            (NOM_CHAM=='VITE_ABSOLU') or \
+                                            (NOM_CHAM=='ACCE_ABSOLU')",
+                                 regles   =(UN_PARMI('NOEUD','GROUP_NO','GROUP_MA','MAILLE','TOUT')),
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),
+                                 NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                 GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                 MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),          
+                                ),          
+
+                                          
+           b_cham_elga     =BLOC(condition="(NOM_CHAM=='SIEF_ELGA') or \
+                                            (NOM_CHAM=='VARI_ELGA')",
+                                 regles          =(UN_PARMI('GROUP_MA','MAILLE','TOUT')), 
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),          
+                                 MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), 
+                                 EVAL_ELGA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                                        into=("MIN","MAX","VALE",),), 
+                                 b_elga_vale     =BLOC(condition="(EVAL_ELGA=='VALE')",                     
+                                   POINT           =SIMP(statut='o',typ='I'  ,validators=NoRepeat(),max='**'), 
+                                   SOUS_POINT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),  
+                                 ),  
+                                ),
+             
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+       
+       
+       );
 #& MODIF COMMUN  DATE 29/03/2007   AUTEUR GRANET S.GRANET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -865,10 +1126,10 @@ def C_PARA_FONCTION() : return  ( #COMMUN#
                    "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
                    "PGAZ","PCAP","PLIQ","PVAP","PAD","VITE","ENDO",
                    "NORM","EPAIS","NEUT1","NEUT2",)
-#& MODIF COMMUN  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMUN  DATE 01/02/2011   AUTEUR MASSIN P.MASSIN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -883,18 +1144,30 @@ def C_PARA_FONCTION() : return  ( #COMMUN#
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE REZETTE C.REZETTE
-def C_RECH_LINEAIRE() : return FACT(statut='f',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),
-           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
-           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3,val_max=999),
-           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
-           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
-           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
-           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
+# RESPONSABLE ABBAS M.ABBAS
+def C_PILOTAGE() : return FACT(statut='f',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","DEFORMATION",
+                                                    "ANA_LIM","SAUT_IMPO","SAUT_LONG_ARC") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           EVOL_PARA       =SIMP(statut='f',typ='TXM',defaut="SANS", into=("SANS","CROISSANT","DECROISSANT") ),
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
+           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
+           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem ,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           DIRE_PILO       =SIMP(statut='f',typ='TXM',max='**'),
          );
-#& MODIF COMMUN  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -912,140 +1185,173 @@ def C_RECH_LINEAIRE() : return FACT(statut='f',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_RECH_LINEAIRE() : return FACT(statut='f',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE","PILOTAGE") ),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3,val_max=999),
+           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
+           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
+           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
+           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
+         );
+#& MODIF COMMUN  DATE 28/02/2011   AUTEUR BARGELLI R.BARGELLINI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
 # RESPONSABLE PROIX J.M.PROIX
-def C_RELATION() : return (             "ELAS",            # RESP. : PROIX J.M.PROIX   #COMMUN#
-                                        "ARME",            # RESP. : PEYRARD C.PEYRARD
-                                        "ASSE_CORN",       # RESP. : PEYRARD C.PEYRARD
-                                        "BARCELONE",       # RESP. : ELGHARIB J.ELGHARIB
-                                        "BETON_DOUBLE_DP", # RESP. : ELGHARIB J.ELGHARIB
-                                        "BETON_RAG",       # RESP. : DEBONNIERES P.DEBONNIERES
-                                        "BETON_REGLE_PR",  # RESP. : NECS
-                                        "BETON_UMLV_FP",   # RESP. : LEPAPE Y.LEPAPE
-                                        "CAM_CLAY",        # RESP. : ELGHARIB J.ELGHARIB
-                                        "CJS",             # RESP. : CHAVANT C.CHAVANT
-                                        "CORR_ACIER",      # RESP. : LEPAPE Y.LEPAPE
-                                        "CZM_EXP_REG",     # RESP. : LAVERNE J.LAVERNE
-                                        "CZM_EXP",         # RESP. : LAVERNE J.LAVERNE
-                                        "CZM_LIN_REG",     # RESP. : LAVERNE J.LAVERNE
-                                        "CZM_OUV_MIX",     # RESP. : LAVERNE J.LAVERNE
-                                        "CZM_TAC_MIX",     # RESP. : LAVERNE J.LAVERNE
-                                        "CZM_FAT_MIX",     # RESP. : LAVERNE J.LAVERNE
-                                        "DIS_BILI_ELAS",   # RESP. : FLEJOU J.L.FLEJOU
-                                        "DIS_CHOC",        # RESP. : DEVESA G.DEVESA
-                                        "DIS_ECRO_CINE",   # RESP. : FLEJOU J.L.FLEJOU
-                                        "DIS_GOUJ2E_ELAS", # RESP. : ANGLES J.ANGLES
-                                        "DIS_GOUJ2E_PLAS", # RESP. : ANGLES J.ANGLES
-                                        "DIS_GRICRA",      # RESP. : FERNANDES R.FERNANDES
-                                        "DIS_VISC",        # RESP. : FLEJOU J.L.FLEJOU
-                                        "DRUCK_PRAGER",    # RESP. : FERNANDES R.FERNANDES
-                                        "DRUCK_PRAG_N_A",  # RESP. : FERNANDES R.FERNANDES
-                                        "VISC_DRUC_PRAG",  # RESP. : ELGHARIB J.ELGHARIB
-                                        "ELAS_GONF",       # RESP. : GRANET S.GRANET
-                                        "ELAS_HYPER",      # RESP. : ABBAS M.ABBAS
-                                        "ENDO_FRAGILE",    # RESP. : MICHEL S.MICHEL
-                                        "ENDO_SCALAIRE",   # RESP. : MICHEL S.MICHEL
-                                        "ENDO_ISOT_BETON", # RESP. : MICHEL S.MICHEL
-                                        "ENDO_ORTH_BETON", # RESP. : MICHEL S.MICHEL
-                                        "GATT_MONERIE",    # RESP. : DEBONNIERES P.DEBONNIERES
-                                        "GLRC_DAMAGE",     # RESP. : MARKOVIC D.MARKOVIC
-                                        "GLRC_DM",         # RESP. : MARKOVIC D.MARKOVIC
-                                        "GRANGER_FP_INDT", # RESP. : ROSPARS C.ROSPARS
-                                        "GRANGER_FP",      # RESP. : ROSPARS C.ROSPARS
-                                        "GRANGER_FP_V",    # RESP. : ROSPARS C.ROSPARS
-                                        "GRAN_IRRA_LOG",   # RESP. : FERNANDES R.FERNANDES
-                                        "GRILLE_CINE_LINE",# RESP. : ROSPARS C.ROSPARS
-                                        "GRILLE_ISOT_LINE",# RESP. : ROSPARS C.ROSPARS
-                                        "GRILLE_PINTO_MEN",# RESP. : ROSPARS C.ROSPARS
-                                        "HOEK_BROWN_EFF",  # RESP. : CHAVANT C.CHAVANT
-                                        "HOEK_BROWN",      # RESP. : CHAVANT C.CHAVANT
-                                        "HOEK_BROWN_TOT",  # RESP. : CHAVANT C.CHAVANT
-                                        "HUJEUX",          # RESP. : FOUCAULT A.FOUCAULT
-                                        "IRRAD3M",         # RESP. : FLEJOU J.L.FLEJOU
-                                        "JOINT_BA",        # RESP. : MICHEL S.MICHEL
+def C_RELATION() : return (             "ELAS",            #COMMUN#
+
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "BARCELONE",
+                                        "BETON_DOUBLE_DP",
+                                        "BETON_RAG",
+                                        "BETON_REGLE_PR",
+                                        "BETON_UMLV_FP",
+                                        "CAM_CLAY",
+                                        "CJS",
+                                        "CORR_ACIER",
+                                        "CZM_EXP",
+                                        "CZM_EXP_REG",
+                                        "CZM_FAT_MIX",
+                                        "CZM_LIN_REG",
+                                        "CZM_OUV_MIX",
+                                        "CZM_TAC_MIX",
+                                        "CZM_TRA_MIX",
+                                        "DIS_BILI_ELAS",
+                                        "DIS_CHOC",
+                                        "DIS_ECRO_CINE",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GRICRA",
+                                        "DIS_VISC",
+                                        "DRUCK_PRAGER",
+                                        "DRUCK_PRAG_N_A",
+                                        "ELAS_GONF",
+                                        "ELAS_HYPER",
+                                        "ENDO_CARRE",
+                                        "ENDO_FRAGILE",
+                                        "ENDO_HETEROGENE",
+                                        "ENDO_ISOT_BETON",
+                                        "ENDO_ORTH_BETON",
+                                        "ENDO_SCALAIRE",
+                                        "GATT_MONERIE",
+                                        "GLRC_DAMAGE",
+                                        "GLRC_DM",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_INDT",
+                                        "GRANGER_FP_V",
+                                        "GRAN_IRRA_LOG",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "HOEK_BROWN",
+                                        "HOEK_BROWN_EFF",
+                                        "HOEK_BROWN_TOT",
+                                        "HUJEUX",
+                                        "IRRAD3M",
+                                        "JOINT_BA",
                                         "JOINT_BANDIS",
-                                        "JOINT_MECA_RUPT", # RESP. : KAZYMYRENKO C.KAZYMYRENKO 
-                                        "KIT_DDI",         # RESP. : CHAVANT C.CHAVANT
-                                        "KIT_HHM",         # RESP. : GRANET S.GRANET
-                                        "KIT_HH",          # RESP. : GRANET S.GRANET
-                                        "KIT_HM",          # RESP. : GRANET S.GRANET
-                                        "KIT_THHM",        # RESP. : GRANET S.GRANET
-                                        "KIT_THH",         # RESP. : GRANET S.GRANET
-                                        "KIT_THM",         # RESP. : GRANET S.GRANET
-                                        "KIT_THV",         # RESP. : GRANET S.GRANET
-                                        "LABORD_1D",       # RESP. : VOLDOIRE F.VOLDOIRE
-                                        "LAIGLE",          # RESP. : ELGHARIB J.ELGHARIB
-                                        "LEMAITRE_IRRA",   # RESP. : FERNANDES R.FERNANDES
-                                        "LEMAITRE",        # RESP. : DEBONNIERES P.DEBONNIERES
-                                        "LEMA_SEUIL",      # RESP. : LECLERC S.LECLERC
-                                        "LETK",            # RESP. : ELGHARIB J.ELGHARIB
-                                        "LMARC_IRRA",      # RESP. : FERNANDES R.FERNANDES
-                                        "LMARC",           # RESP. : None
-                                        "MAZARS",          # RESP. : MICHEL S.MICHEL
-                                        "META_LEMA_ANI",   # RESP. : CANO V.CANO
-                                        "META_P_CL_PT_RE", # RESP. : CANO V.CANO
-                                        "META_P_CL_PT",    # RESP. : CANO V.CANO
-                                        "META_P_CL_RE",    # RESP. : CANO V.CANO
-                                        "META_P_CL",       # RESP. : CANO V.CANO
-                                        "META_P_IL_PT_RE", # RESP. : CANO V.CANO
-                                        "META_P_IL_PT",    # RESP. : CANO V.CANO
-                                        "META_P_IL_RE",    # RESP. : CANO V.CANO
-                                        "META_P_IL",       # RESP. : CANO V.CANO
-                                        "META_P_INL_PT_RE",# RESP. : CANO V.CANO
-                                        "META_P_INL_PT",   # RESP. : CANO V.CANO
-                                        "META_P_INL_RE",   # RESP. : CANO V.CANO
-                                        "META_P_INL",      # RESP. : CANO V.CANO
-                                        "META_V_CL_PT_RE", # RESP. : CANO V.CANO
-                                        "META_V_CL_PT",    # RESP. : CANO V.CANO
-                                        "META_V_CL_RE",    # RESP. : CANO V.CANO
-                                        "META_V_CL",       # RESP. : CANO V.CANO
-                                        "META_V_IL_PT_RE", # RESP. : CANO V.CANO
-                                        "META_V_IL_PT",    # RESP. : CANO V.CANO
-                                        "META_V_IL_RE",    # RESP. : CANO V.CANO
-                                        "META_V_IL",       # RESP. : CANO V.CANO
-                                        "META_V_INL_PT_RE",# RESP. : CANO V.CANO
-                                        "META_V_INL_PT",   # RESP. : CANO V.CANO
-                                        "META_V_INL_RE",   # RESP. : CANO V.CANO
-                                        "META_V_INL",      # RESP. : CANO V.CANO
-                                        "MONOCRISTAL",     # RESP. : PROIX J.M.PROIX
-                                        "MULTIFIBRE",      # RESP. : FLEJOU J.L.FLEJOU
-                                        "NORTON_HOFF",     # RESP. : MICHEL S.MICHEL
-                                        "PINTO_MENEGOTTO", # RESP. : ROSPARS C.ROSPARS
-                                        "POLYCRISTAL",     # RESP. : PROIX J.M.PROIX
-                                        "ROUSSELIER",      # RESP. : CANO V.CANO
-                                        "ROUSS_PR",        # RESP. : PARROT A.PARROT
-                                        "ROUSS_VISC",      # RESP. : CANO V.CANO
-                                        "RUPT_FRAG",       # RESP. : LAVERNE J.LAVERNE
-                                        "SANS",            # RESP. : MICHEL S.MICHEL
-                                        "VENDOCHAB",       # RESP. : PROIX J.M.PROIX
-                                        "VISC_CIN1_CHAB",  # RESP. : PROIX J.M.PROIX
-                                        "VISC_CIN2_CHAB",  # RESP. : PROIX J.M.PROIX
-                                        "VISC_CIN2_MEMO",  # RESP. : PROIX J.M.PROIX
-                                        "VISC_IRRA_LOG",   # RESP. : FERNANDES R.FERNANDES
-                                        "VISC_ISOT_LINE",  # RESP. : MICHEL S.MICHEL
-                                        "VISC_ISOT_TRAC",  # RESP. : PROIX J.M.PROIX
-                                        "VISCOCHAB",       # RESP. : GENIAUT S.GENIAUT
-                                        "VISC_TAHERI",     # RESP. : TAHERI S.TAHERI
-                                        "VMIS_ASYM_LINE",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_CIN1_CHAB",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_CIN2_CHAB",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_CIN2_MEMO",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_CINE_LINE",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_ECMI_LINE",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_ECMI_TRAC",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_ISOT_LINE",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_ISOT_PUIS",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_ISOT_TRAC",  # RESP. : PROIX J.M.PROIX
-                                        "VMIS_POU_FLEJOU", # RESP. : FLEJOU J.L.FLEJOU
-                                        "VMIS_POU_LINE",   # RESP. : PROIX J.M.PROIX
-                                        "ZMAT",            # RESP. : PROIX J.M.PROIX
-                                        "IMPLEX_FRAG",     # RESP. : BARGELLINI R.BARGELLINI
-                                        "IMPLEX_ISOT_BETO",# RESP. : BARGELLINI R.BARGELLINI
-                                        "IMPLEX_ISOT_LINE",# RESP. : BARGELLINI R.BARGELLINI
-                                     ) 
-#& MODIF COMMUN  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+                                        "JOINT_MECA_RUPT",
+                                        "JOINT_MECA_FROT",
+                                        "KIT_DDI",
+                                        "KIT_HH",
+                                        "KIT_H",
+                                        "KIT_HHM",
+                                        "KIT_HM",
+                                        "KIT_THH",
+                                        "KIT_THHM",
+                                        "KIT_THM",
+                                        "KIT_THV",
+                                        "LABORD_1D",
+                                        "LAIGLE",
+                                        "LEMAITRE",
+                                        "LEMAITRE_IRRA",
+                                        "LEMA_SEUIL",
+                                        "LETK",
+                                        "LMARC_IRRA",
+                                        "MAZARS",
+                                        "META_LEMA_ANI",
+                                        "META_P_CL",
+                                        "META_P_CL_PT",
+                                        "META_P_CL_PT_RE",
+                                        "META_P_CL_RE",
+                                        "META_P_IL",
+                                        "META_P_IL_PT",
+                                        "META_P_IL_PT_RE",
+                                        "META_P_IL_RE",
+                                        "META_P_INL",
+                                        "META_P_INL_PT",
+                                        "META_P_INL_PT_RE",
+                                        "META_P_INL_RE",
+                                        "META_V_CL",
+                                        "META_V_CL_PT",
+                                        "META_V_CL_PT_RE",
+                                        "META_V_CL_RE",
+                                        "META_V_IL",
+                                        "META_V_IL_PT",
+                                        "META_V_IL_PT_RE",
+                                        "META_V_IL_RE",
+                                        "META_V_INL",
+                                        "META_V_INL_PT",
+                                        "META_V_INL_PT_RE",
+                                        "META_V_INL_RE",
+                                        "MONOCRISTAL",
+                                        "MULTIFIBRE",
+                                        "NORTON_HOFF",
+                                        "PINTO_MENEGOTTO",
+                                        "POLYCRISTAL",
+                                        "ROUSSELIER",
+                                        "ROUSS_PR",
+                                        "ROUSS_VISC",
+                                        "RUPT_FRAG",
+                                        "SANS",
+                                        "VENDOCHAB",
+                                        "VISC_ENDO_LEMA",
+                                        "VISCOCHAB",
+                                        "VISC_CIN1_CHAB",
+                                        "VISC_CIN2_CHAB",
+                                        "VISC_CIN2_MEMO",
+                                        "VISC_DRUC_PRAG",
+                                        "VISC_IRRA_LOG",
+                                        "VISC_ISOT_LINE",
+                                        "VISC_ISOT_TRAC",
+                                        "VISC_TAHERI",
+                                        "VMIS_ASYM_LINE",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "VMIS_CIN2_MEMO",
+                                        "VMIS_CINE_LINE",
+                                        "VMIS_ECMI_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ISOT_PUIS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_POU_FLEJOU",
+                                        "VMIS_POU_LINE",
+                                        "ZMAT",
+                                        "UMAT",
+                                     )
+#& MODIF COMMUN  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -1063,41 +1369,49 @@ def C_RELATION() : return (             "ELAS",            # RESP. : PROIX J.M.P
 # RESPONSABLE REZETTE C.REZETTE
 def C_SOLVEUR() : return FACT(statut='d',
            METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
+# --------------------------------------------------------------------------------------------------------------------------------
            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_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' or METHODE=='FETI' ",
                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
              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","LDLT_SP",),defaut="LDLT_INC" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP"),defaut="LDLT_INC" ),
              b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
                NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
            ),
+# --------------------------------------------------------------------------------------------------------------------------------
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),            
              FILTRAGE_MATRICE =SIMP(statut='f',typ='R',defaut=-1.0,),
              MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             MATR_DISTRIBUEE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
+# --------------------------------------------------------------------------------------------------------------------------------
            b_feti          =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
              PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -1116,21 +1430,103 @@ def C_SOLVEUR() : return FACT(statut='d',
              NB_SD_PROC0     =SIMP(statut='f',typ='I',defaut=0,val_min=0),
              ACCELERATION_SM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            ),
+# --------------------------------------------------------------------------------------------------------------------------------
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
-             ),             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
            ),
-
-
+# --------------------------------------------------------------------------------------------------------------------------------
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          );
-#& MODIF COMMUN  DATE 27/06/2005   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#& MODIF COMMUN  DATE 17/01/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+def C_SUIVI_DDL() : return FACT(statut='f',max=4,
+
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+                                   into=("DEPL","VITE","ACCE",
+                                         "FORC_NODA",
+                                         "SIEF_ELGA","VARI_ELGA",                                        
+                                         "DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+          
+           EVAL_CHAM       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("MIN","MAX","MOY","VALE",),),
+                                         
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max=20),
+           EVAL_CMP        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("VALE","FORMULE",),),
+                                   
+           b_formule       =BLOC(condition="(EVAL_CMP=='FORMULE')",
+                                   FORMULE = SIMP(statut='o',typ=formule,max=1),
+                                ),                 
+           
+           b_cham_no       =BLOC(condition="(NOM_CHAM=='DEPL') or \
+                                            (NOM_CHAM=='VITE') or \
+                                            (NOM_CHAM=='ACCE') or \
+                                            (NOM_CHAM=='FORC_NODA') or \
+                                            (NOM_CHAM=='VALE_CONT') or \
+                                            (NOM_CHAM=='DEPL_ABSOLU') or \
+                                            (NOM_CHAM=='VITE_ABSOLU') or \
+                                            (NOM_CHAM=='ACCE_ABSOLU')",                                 
+                                 regles   =(UN_PARMI('NOEUD','GROUP_NO','GROUP_MA','MAILLE','TOUT')),
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),
+                                 NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                 GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                 MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),   
+                                ), 
+                                          
+           b_cham_elga     =BLOC(condition="(NOM_CHAM=='SIEF_ELGA') or \
+                                            (NOM_CHAM=='VARI_ELGA')",
+                                 regles          =(UN_PARMI('GROUP_MA','MAILLE','TOUT')), 
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),          
+                                 MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), 
+                                 EVAL_ELGA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                                        into=("MIN","MAX","VALE",),), 
+                                 b_elga_vale     =BLOC(condition="(EVAL_ELGA=='VALE')",                     
+                                   POINT           =SIMP(statut='o',typ='I'  ,validators=NoRepeat(),max='**'), 
+                                   SOUS_POINT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),  
+                                 ),  
+                                ), 
+             
+           TITRE           =  SIMP(statut='f',typ='TXM',max=3),     
+       
+       
+       );
+#& MODIF COMMUN  DATE 09/11/2010   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1148,19 +1544,30 @@ def C_SOLVEUR() : return FACT(statut='d',
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
 #
 # ce fichier contient la liste des "into" possibles pour le mot cle TYPE_CHAM
-def C_TYPE_CHAM_INTO() : #COMMUN#
-   l=[]
-   for gd in C_NOM_GRANDEUR() :
-        for typ in ("ELEM","ELNO","ELGA","CART","NOEU") :
-             l.append(typ+"_"+gd)
-   return tuple(l)
+def C_TYPE_CHAM_INTO( type_cham=None ) : #COMMUN#
+# Si aucun argument n'est passe, on utilise tous les types de champs possibles
+  if ( type_cham is None ) :
+    l_cham = ["ELEM", "ELNO", "ELGA", "CART", "NOEU"]
+# Sinon, on n'utilise que les types passes en argument
+  else :
+    l_cham = []
+    for typ in type_cham :
+      l_cham.append(typ)
+#
+  l = []
+  for gd in C_NOM_GRANDEUR() :
+    for typ in l_cham :
+      l.append(typ+"_"+gd)
+#
+  return tuple(l)
 
-#& MODIF COMMANDE  DATE 22/09/2009   AUTEUR SELLENET N.SELLENET 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -1182,7 +1589,8 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
    UIinfo ={"groupes":("Modélisation",)},
    regles = (AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','DISCRET_2D','MASSIF',
                          'GRILLE','MULTIFIBRE','RIGI_PARASOL'),
-             PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE'),),
+             PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE'),
+             EXCLUS('DISCRET','DISCRET_2D'),),
    MODELE = SIMP(statut='o',typ=modele_sdaster ),
    INFO   = SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
    VERIF  = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("MAILLE","NOEUD") ),
@@ -1707,29 +2115,37 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
       regles               = (UN_PARMI('COEF_GROUP','FONC_GROUP'),
                               UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
                               EXCLUS('GROUP_MA_POI1','GROUP_MA_SEG2'),),
-      GROUP_MA             = SIMP(statut='o',typ=ma,validators=NoRepeat(),max='**',
+      GROUP_MA             = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
          fr="Surface servant à répartir les caractéristiques des discrets"),
-      GROUP_MA_POI1        = SIMP(statut='f',typ=ma,validators=NoRepeat(),max=1,
+      GROUP_MA_POI1        = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1,
          fr="Mailles de type point correspondant aux discrets"),
-      GROUP_MA_SEG2        = SIMP(statut='f',typ=ma,validators=NoRepeat(),max=1,
+      GROUP_MA_SEG2        = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1,
          fr="Mailles de type seg2 correspondant aux discrets"),
       FONC_GROUP           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
       COEF_GROUP           = SIMP(statut='f',typ='R',max='**'),
       REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
       CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,
                                  into=("K_TR_D_N","K_T_D_N","K_TR_D_L","K_T_D_L",
-                                       "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L") ),
-      VALE                 = SIMP(statut='o',typ='R',max='**'),
+                                       "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L"),
+                                 fr="Choix des types de discrets du tapis de ressorts." ),
+      b_cara= BLOC(condition =""" (CARA in ["K_TR_D_N","K_T_D_N","K_TR_D_L","K_T_D_L",
+                                            "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L"]) or \
+                                  (len(CARA)==2 and CARA[0][2:]==CARA[1][2:]) """,
+                   fr="Valeurs pour les discrets du tapis de ressorts.",
+         VALE = SIMP(statut='o',typ='R',max='**',
+              fr="Valeurs pour les discrets du tapis de ressorts.",),
+      ),
       GROUP_NO_CENTRE      = SIMP(statut='f',typ=grno),
       NOEUD_CENTRE         = SIMP(statut='f',typ=no),
       COOR_CENTRE          = SIMP(statut='f',typ='R',min=2,max=3),
       EUROPLEXUS           = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+      UNITE                = SIMP(statut='f',typ='I',val_min=1),
    ),
 
 #============================================================================
    RIGI_MISS_3D         = FACT(statut='f',max='**',
-      GROUP_MA_POI1        = SIMP(statut='o',typ=ma,max=1),
-      GROUP_MA_SEG2        = SIMP(statut='f',typ=ma,max=1),
+      GROUP_MA_POI1        = SIMP(statut='o',typ=grma,max=1),
+      GROUP_MA_SEG2        = SIMP(statut='f',typ=grma,max=1),
       FREQ_EXTR            = SIMP(statut='o',typ='R',max=1),
       UNITE_RESU_IMPE      = SIMP(statut='f',typ='I',defaut=30),
    ),
@@ -1744,7 +2160,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
       GROUP_FIBRE          = SIMP(statut='o',typ='TXM',max='**'),
    ),
 );
-#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1766,7 +2182,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
 AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
                     fr="Affectation de charges et conditions aux limites acoustiques constantes",
                     reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Acoustique",)},
          regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
@@ -1807,10 +2223,10 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBER
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR PELLET J.PELLE
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -1842,13 +2258,13 @@ def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,EVOL_IMPO,**args):
 
 
 AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
-                    ,fr="Affectation de conditions aux limites cinématiques constantes pour un traitement sans dualisation",
+                    ,fr="Affectation de conditions aux limites cinématiques (U=U0) pour un traitement sans dualisation",
                      reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Mécanique",)},
          regles=(UN_PARMI('MECA_IMPO','THER_IMPO','ACOU_IMPO','EVOL_IMPO'),
                  ),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
-         EVOL_IMPO  =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer tous les ddls d'un evol_xxx"),
+
          MECA_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
@@ -1946,6 +2362,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
              PRES33          =SIMP(statut='f',typ='R' ),
              LH1             =SIMP(statut='f',typ='R' ),
          ),
+
          THER_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
@@ -1958,6 +2375,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
            TEMP            =SIMP(statut='f',typ='R' ),
            TEMP_INF        =SIMP(statut='f',typ='R' ),
          ),
+
          ACOU_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -1967,9 +2385,15 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            PRES            =SIMP(statut='o',typ='C' ),
          ),
+
+         EVOL_IMPO  =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer les ddls d'un evol_xxx"),
+         b_evol_impo = BLOC ( condition = "EVOL_IMPO != None",
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**',), # pour n'imposer que certaines CMPS (par défaut : toutes)
+         ),
+
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1997,27 +2421,106 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_pr
                       fr="Affectation de conditions aux limites cinématiques fonction d'un (ou plusieurs) paramètres"
                         +" pour un traitement sans dualisation",
                      reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Mécanique",)},
          regles=(UN_PARMI('MECA_IMPO','THER_IMPO')),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          MECA_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
-                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+                   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',
+                               'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                               'E3X','E3Y','E3Z','E4X','E4Y','E4Z','V11','V12','V13','V21','V22',
+                               'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21',
+                               'PRES22','PRES23','PRES31','PRES32','PRES33','LH1'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           GRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           PHI             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DX    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE1  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE2  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GONF  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V11   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V12   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V13   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V21   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V22   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V23   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V31   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V32   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V33   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES11=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES12=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES13=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES21=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES22=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES23=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES31=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES32=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES33=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           LH1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+
          ),
          THER_IMPO       =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
@@ -2033,10 +2536,10 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_pr
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -2055,7 +2558,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_pr
 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",
                      reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Mécanique",)},
          regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','CHAMNO_IMPO','LIAISON_DDL','LIAISON_XFEM','FORCE_NODALE',
                              'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
                              'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
@@ -2064,14 +2567,14 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                              'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP','LIAISON_SOLIDE',
                              'LIAISON_ELEM','ONDE_FLUI','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
                              'LIAISON_MAIL','LIAISON_CYCL','FORCE_TUYAU',
-                             'EFFE_FOND','EVOL_CHAR','ARLEQUIN','DDL_POUTRE',),
+                             'EFFE_FOND','EVOL_CHAR','DDL_POUTRE',),
                          ),
          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
          EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
                                typ=evol_char ),
 
-         PESANTEUR       =FACT(statut='f',max='**',fr="Champ de pesanteur",
+         PESANTEUR       =FACT(statut='f',max=1,fr="Champ de pesanteur",
             GROUP_MA         =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
             MAILLE           =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
             GRAVITE          =SIMP(statut='o',typ='R',min=1,max=1),
@@ -2080,9 +2583,17 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
          METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
                                into=('DUALISATION',),defaut='DUALISATION',),
                                # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
-         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),),
+
+         ROTATION        =FACT(statut='f', max=1, fr="Définition d'un chargement de rotation",
+                       GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(), max='**'),
+                       MAILLE   = SIMP(statut='f',typ=ma, validators=NoRepeat(),max='**'),
+                       VITESSE  = SIMP(statut='o', typ='R',min=1,max=1),
+                       AXE      = SIMP(statut='o', typ='R',min=2, max=3),
+                       CENTRE   = SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),
+         b_rotation_tout=BLOC(condition="(GROUP_MA == None) and (MAILLE ==None)",
+                       TOUT     = SIMP(statut='f',typ='TXM',into=("OUI",),defaut="OUI",),),
+         b_rotation=BLOC(condition="(GROUP_MA != None) or (MAILLE !=None)",
+                       TOUT     = SIMP(statut='f',typ='TXM',into=("NON","OUI"),defaut="NON",),),),
 
          DDL_IMPO        =FACT(statut='f',max='**',
              fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
@@ -2092,7 +2603,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                                  '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','LIAISON',
-                                 'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                 'H1X','H1Y','H1Z','H2X','H2Y','H2Z','H3X','H3Y','H3Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
                                  'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
                                  'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
                                  'PRES31','PRES32','PRES33',),),
@@ -2151,6 +2662,12 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
              H1X             =SIMP(statut='f',typ='R' ),
              H1Y             =SIMP(statut='f',typ='R' ),
              H1Z             =SIMP(statut='f',typ='R' ),
+             H2X             =SIMP(statut='f',typ='R' ),
+             H2Y             =SIMP(statut='f',typ='R' ),
+             H2Z             =SIMP(statut='f',typ='R' ),
+             H3X             =SIMP(statut='f',typ='R' ),
+             H3Y             =SIMP(statut='f',typ='R' ),
+             H3Z             =SIMP(statut='f',typ='R' ),
              E1X             =SIMP(statut='f',typ='R' ),
              E1Y             =SIMP(statut='f',typ='R' ),
              E1Z             =SIMP(statut='f',typ='R' ),
@@ -2304,7 +2821,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
                MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
                GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
                NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-               GROUP_NO_2      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
                NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
 
              SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
@@ -2389,21 +2906,25 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
            ),
 
-           LIAISON_ELEM    =FACT(statut='f',max='**',
-             fr="Modélise le raccord d'une partie massive 3D avec une poutre ou avec un tuyau, le raccord d'une coque"
-              +" avec une poutre ou avec un tuyau",
-             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,validators=NoRepeat(),max='**'),
-             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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_ELEM    =FACT(statut='f',max='**',
+            fr="Modélise le raccord : d'une partie massive 3D avec une poutre ou avec un tuyau, d'une coque"
+               +" avec une poutre ou avec un tuyau, d'une plaque avec une poutre",
+            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","PLAQ_POUT_ORTH") ),
+            GROUP_MA_1  =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE_1    =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_NO_2  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            NOEUD_2     =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            NUME_LAGR   =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+            ANGL_MAX    =SIMP(statut='f',typ='R',defaut= 1. ),
+            b_dalcol =BLOC( condition = "OPTION == 'PLAQ_POUT_ORTH'",
+               VERIF_EXCENT   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+            ),
+            b_option =BLOC( condition = "OPTION != 'PLAQ_POUT_ORTH'",
+               CARA_ELEM   =SIMP(statut='f',typ=(cara_elem) ),
+               AXE_POUTRE  =SIMP(statut='f',typ='R',max=3),
+            ),
+         ),
 
            LIAISON_UNIF    =FACT(statut='f',max='**',
              fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
@@ -2423,6 +2944,13 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
              NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
            ),
 
+
+         LIAISON_INTERF  =FACT(statut='f',max='**',
+             fr="Définit une relation linéaire entre les DDLs d'interface à partir d'un MACRELEM",
+             MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna),
+             TYPE_LIAISON    =SIMP(statut='f',typ='TXM',defaut="RIGIDE",into=("RIGIDE","SOUPLE") ),
+           ),
+
          LIAISON_XFEM      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
 
          CONTACT_XFEM      =SIMP(statut='f',typ=char_contact,min=1,max=1,),
@@ -2554,21 +3082,6 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
              KXY             =SIMP(statut='f',typ='R' ),
            ),
 
-         ARLEQUIN        =FACT(statut='f',min=1,max='**',
-           fr="Définit les paramètres de la méthode Arlequin",
-           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
-           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
-           GROUP_MA_COLL  =SIMP(statut='f',typ=grma,max='**'),
-           CARA_ELEM      =SIMP(statut='f',typ=cara_elem ),
-           COND_LIM       =SIMP(statut='f',typ=char_meca ),
-           COLLAGE        =SIMP(statut='f',typ='TXM',defaut="GROSSIER",into=("GROSSIER","FIN","GROUP_MA_1","GROUP_MA_2"),),
-           regles         =(UN_PARMI('POIDS_1','POIDS_2','POIDS_GROSSIER','POIDS_FIN',),),
-           POIDS_1        =SIMP(statut='f',typ='R'),
-           POIDS_2        =SIMP(statut='f',typ='R'),
-           POIDS_GROSSIER =SIMP(statut='f',typ='R'),
-           UNITE_GMSH     =SIMP(statut='f',typ='I',defaut=0,max=1),
-           POIDS_FIN      =SIMP(statut='f',typ='R'),),
-
         FORCE_POUTRE    =FACT(statut='f',max='**',
              fr="Applique des forces linéiques sur des éléments de type poutre",
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
@@ -2759,7 +3272,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
 )  ;
 
 
-#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2781,7 +3294,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
 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",
                      reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Mécanique",)},
          regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
@@ -2841,7 +3354,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2863,7 +3376,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
 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'un (ou plusieurs) paramètres",
                       reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Mécanique",)},
         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',
@@ -3298,29 +3811,29 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
 )  ;
 
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE None
 AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
                       fr="Affectation de charges et conditions limites thermiques spécifique à CARA_TORSION",
                       reentrant='n',
-            UIinfo={"groupes":("Outils métier",)},
+            UIinfo={"groupes":("Outils-métier","Thermique",)},
          regles=(AU_MOINS_UN('CARA_TORSION', ),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",
@@ -3332,7 +3845,7 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3354,7 +3867,7 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
 AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
                     ,fr="Affectation de charges et conditions aux limites thermiques constantes",
                     reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Thermique",)},
       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' ),),
@@ -3540,7 +4053,7 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3563,7 +4076,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
                      fr="Affectation de charges et conditions aux limites thermiques fonction d'un (ou plusieurs)"
                          +" paramètres (temps, ...)",
                      reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Chargements","Thermique",)},
       regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
                           'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
                           'GRAD_TEMP_INIT','RAYONNEMENT'),),
@@ -3734,10 +4247,10 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -3798,13 +4311,18 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
 
-          NOM_VARC        =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
-                                                            "EPSA","NEUT1","NEUT2")),
+          NOM_VARC        =SIMP(statut='o',typ='TXM', 
+#                                     champ dans la doc   into=("TEMP","CORR","IRRA","HYDR_ELNO","META_ELNO","NEUT")
+#                                     champ dans rscrsd   into=("IRRA","TEMP","HYDR_ELNO","HYDR_NOEU","EPSA_ELNO","META_ELNO")
+                                                            ),
           CHAMP_GD        =SIMP(statut='f',typ=cham_gd_sdaster,),
           EVOL            =SIMP(statut='f',typ=evol_sdaster,),
 
           B_EVOL          =BLOC(condition="EVOL!=None",
-              NOM_CHAM      =SIMP(statut='f',typ='TXM'),
+              NOM_CHAM      =SIMP(statut='f',typ='TXM',into=("TEMP","CORR","IRRA","NEUT"
+                                                             "HYDR_ELNO","HYDR_NOEU",
+                                                             "META_ELNO","META_NOEU",
+                                                             "EPSA_ELNO","EPSA_NOEU",)),
               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") ),
               FONC_INST     =SIMP(statut='f',typ=(fonction_sdaster,formule)),
@@ -3903,10 +4421,10 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
 )  ;
 
 
-#& MODIF COMMANDE  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#& MODIF COMMANDE  DATE 22/03/2011   AUTEUR DESOZA T.DESOZA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -3925,8 +4443,9 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
 AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
             UIinfo={"groupes":("Modélisation",)},
                  fr="Définir le phénomène physique modélisé et le type d'éléments finis sur le maillage",reentrant='n',
-         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
-         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),UN_PARMI('MAILLAGE','GRILLE')),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
+         GRILLE          =SIMP(statut='f',typ=grille_sdaster),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          VERIF           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ),
 #
@@ -3978,21 +4497,26 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "3D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
                                   "3D_FLUIDE",       # RESP. : GREFFET N.GREFFET
                                   "3D_INCO",         # RESP. : MICHEL S.MICHEL
+                                  "3D_INCO_UP",      # RESP. : SFAYOLLE
                                   "3D_INCO_GD",      # RESP. : MICHEL S.MICHEL
                                   "3D_SI",           # RESP. : DESROCHES X.DESROCHES
                                   "3D_GRAD_EPSI",    # RESP. : MICHEL S.MICHEL
                                   "3D_GRAD_VARI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_GVNO",         # RESP. : BEAURAIN J.BEAURAIN
                                   "3D_XFEM_CONT",    # RESP. : GENIAUT S.GENIAUT
                                   "3D_JOINT",        # RESP. : LAVERNE J.LAVERNE
+                                  "3D_JOINT_HYME",   # RESP. : LAVERNE J.LAVERNE
                                   "3D_INTERFACE",    # RESP. : LAVERNE J.LAVERNE
                                   "AXIS",            # RESP. : LEFEBVRE J.P.LEFEBVRE
                                   "AXIS_FLUI_STRU",  # RESP. : GREFFET N.GREFFET
                                   "AXIS_FLUIDE",     # RESP. : GREFFET N.GREFFET
                                   "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
                                   "AXIS_INCO",       # RESP. : MICHEL S.MICHEL
+                                  "AXIS_INCO_UP",    # RESP. : SFAYOLLE
                                   "AXIS_INCO_GD",    # RESP. : MICHEL S.MICHEL
                                   "AXIS_SI",         # RESP. : DESROCHES X.DESROCHES
                                   "AXIS_GRAD_VARI",  # RESP. : MICHEL S.MICHEL
+                                  "AXIS_GVNO",       # RESP. : BEAURAIN J.BEAURAIN
                                   "AXIS_JOINT",      # RESP. : LAVERNE J.LAVERNE
                                   "AXIS_INTERFACE",  # RESP. : LAVERNE J.LAVERNE
                                   "AXIS_ELDI",       # RESP. : LAVERNE J.LAVERNE
@@ -4012,11 +4536,15 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "D_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
                                   "D_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
                                   "D_PLAN_GRAD_VARI",# RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_GVNO",     # RESP. : BEAURAIN J.BEAURAIN
+                                  "D_PLAN_GRAD_SIGM",# RESP. : GRANET S.GRANET
                                   "PLAN_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_JOINT_HYME", # RESP. : LAVERNE J.LAVERNE
                                   "PLAN_INTERFACE",  # RESP. : LAVERNE J.LAVERNE
                                   "PLAN_ELDI",       # RESP. : LAVERNE J.LAVERNE
                                   "D_PLAN_ABSO",     # RESP. : DEVESA G.DEVESA
                                   "D_PLAN_INCO",     # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_INCO_UP",  # RESP. : SFAYOLLE
                                   "D_PLAN_INCO_GD",  # RESP. : MICHEL S.MICHEL
                                   "D_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
                                   "DIS_T",           # RESP. : FLEJOU J.L.FLEJOU
@@ -4037,11 +4565,9 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "Q4G",             # RESP. : DESROCHES X.DESROCHES
                                   "TUYAU_3M",        # RESP. : PROIX J.M.PROIX
                                   "TUYAU_6M",        # RESP. : PROIX J.M.PROIX
-                                  "SHB8",            # RESP. : DESROCHES X.DESROCHES
+                                  "SHB",             # RESP. : DESROCHES X.DESROCHES
                                   "D_PLAN_HHM",      # RESP. : GRANET S.GRANET
                                   "D_PLAN_HM",       # RESP. : GRANET S.GRANET
-                                  "D_PLAN_THH",      # RESP. : GRANET S.GRANET
-                                  "D_PLAN_THHM",     # RESP. : GRANET S.GRANET
                                   "D_PLAN_THM",      # RESP. : GRANET S.GRANET
                                   "D_PLAN_HHMD",     # RESP. : GRANET S.GRANET
                                   "D_PLAN_HH2MD",    # RESP. : GRANET S.GRANET
@@ -4062,14 +4588,13 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "D_PLAN_THHMS",    # RESP. : GRANET S.GRANET
                                   "D_PLAN_THMS",     # RESP. : GRANET S.GRANET
                                   "D_PLAN_HM_P",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HS",       # RESP. : GRANET S.GRANET
                                   "D_PLAN_HHD",      # RESP. : GRANET S.GRANET
                                   "D_PLAN_HHS",      # RESP. : GRANET S.GRANET
                                   "D_PLAN_HH2D",     # RESP. : GRANET S.GRANET
                                   "D_PLAN_HH2S",     # RESP. : GRANET S.GRANET
                                   "D_PLAN_2DG",      # RESP. : GRANET S.GRANET
                                   "D_PLAN_DIL",      # RESP. : GRANET S.GRANET
-                                  "AXIS_THH",        # RESP. : GRANET S.GRANET
-                                  "AXIS_THHM",       # RESP. : GRANET S.GRANET
                                   "AXIS_THM",        # RESP. : GRANET S.GRANET
                                   "AXIS_HHM",        # RESP. : GRANET S.GRANET
                                   "AXIS_HM",         # RESP. : GRANET S.GRANET
@@ -4097,8 +4622,6 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "AXIS_HH2S",       # RESP. : GRANET S.GRANET
                                   "3D_HHM" ,         # RESP. : GRANET S.GRANET
                                   "3D_HM",           # RESP. : GRANET S.GRANET
-                                  "3D_THH",          # RESP. : GRANET S.GRANET
-                                  "3D_THV",          # RESP. : GRANET S.GRANET
                                   "3D_THHM",         # RESP. : GRANET S.GRANET
                                   "3D_THM",          # RESP. : GRANET S.GRANET
                                   "3D_HHMD",         # RESP. : GRANET S.GRANET
@@ -4119,6 +4642,7 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "3D_HH2MS",        # RESP. : GRANET S.GRANET
                                   "3D_THH2S",        # RESP. : GRANET S.GRANET
                                   "3D_THH2D",        # RESP. : GRANET S.GRANET
+                                  "3D_HS",           # RESP. : GRANET S.GRANET
                                   "3D_HHD",          # RESP. : GRANET S.GRANET
                                   "3D_HHS",          # RESP. : GRANET S.GRANET
                                   "3D_HH2D",         # RESP. : GRANET S.GRANET
@@ -4130,7 +4654,8 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
                                   "D_PLAN_HH2SUDM",  # RESP. : GRANET S.GRANET
                                   "D_PLAN_HH2SUC",   # RESP. : GRANET S.GRANET
                                   "D_PLAN_HH2SUDA",  # RESP. : GRANET S.GRANET
-                                  "2D_JOINT_HMS",
+                                  "PLAN_JHMS",
+                                  "AXIS_JHMS",
                                                                       )  )  ),
 
                 b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
@@ -4158,138 +4683,254 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
          ),
 
          PARTITION         =FACT(statut='d',
-             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="MAIL_DISPERSE",
-                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE",)),
-             b_dist_sd          =BLOC(condition = "PARALLELISME == 'SOUS_DOMAINE'",
-                 PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
-                 CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
-             ),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="GROUP_ELEM",
+                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","CENTRALISE","GROUP_ELEM")),
              b_dist_maille          =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
-                 CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
+                 CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0,val_max=100),
              ),
          ),
 
          VERI_JACOBIEN  =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',
                               fr ="Vérification de la forme des mailles (jacobiens tous de meme signe).",),
 ) ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-# ======================================================================
-# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
-AIDE=PROC(nom="AIDE",op=42,
-       UIinfo={"groupes":("Modélisation",)},
-       fr="Interroger et imprimer une documentation partielle sur les noms des concepts déjà définis et sur les couples"
-           +" (type d'éléments, option) disponibles dans la version.",
-       regles=(AU_MOINS_UN('CONCEPT','TYPE_ELEM', ),),
-       UNITE       =SIMP(statut='f',typ='I',defaut=8),  
-       TYPE_ELEM   =FACT(fr="couple type_elem option",statut='f',
-         INITEL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                        ),
-       CONCEPT     =FACT(statut='f',max='**',
-         NOM          =SIMP(fr="liste des noms de concept",statut='f',typ='TXM',validators=NoRepeat(),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 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
-ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
-                   fr="Assembler deux maillages pour en former un nouveau",
-                   reentrant='n',
-                   UIinfo={"groupes":("Maillage",)},
-         MAILLAGE_1 =  SIMP(statut='o',typ=maillage_sdaster,),
-         MAILLAGE_2 =  SIMP(statut='o',typ=maillage_sdaster,),
-         OPERATION  =  SIMP(statut='o',typ='TXM',into=("SOUS_STR","SUPERPOSE","COLLAGE"),),
-         b_collage  =  BLOC(condition = "OPERATION == 'COLLAGE'",
-           COLLAGE  =  FACT(statut='o',
-              GROUP_MA_1     =SIMP(statut='o',typ=grma),
-              GROUP_MA_2     =SIMP(statut='o',typ=grma),
-                             ),
-                           ),
+
+def appl_cine_matr_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")
+
+APPL_CINE_MATR=OPER(nom="APPL_CINE_MATR",op=158,sd_prod=appl_cine_matr_prod,
+               fr="Appliquer les C.L. cinématiques sur la matrice",
+               reentrant='f', UIinfo={"groupes":("Résolution",)},
+         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) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE BODEL C.BODEL
-def asse_matr_gene_prod(METHODE,**args):
-    if   (METHODE=="INITIAL") : return matr_asse_gene_r
-    elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c
-    else : return matr_asse_gene_r
+# RESPONSABLE PELLET J.PELLET
 
-ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod,
-                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
-                    reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
-         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
-         METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
-         b_option     =BLOC(condition = "METHODE == 'CLASSIQUE'",
-           OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ),
-           ),
+APPL_CINE_SCMB=OPER(nom="APPL_CINE_SCMB",op=159,sd_prod=cham_no_sdaster,reentrant='f',
+               fr="Application des C.L. cinématiques au second membre",
+               UIinfo={"groupes":("Résolution",)},
+         CHAM_NO        =SIMP(statut='o',typ=cham_no_sdaster),
+         MATR           =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_CINE       =SIMP(statut='f',typ=cham_no_sdaster),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 06/10/2008   AUTEUR DEVESA G.DEVES
+#& MODIF COMMANDE  DATE 03/01/2011   AUTEUR ANDRIAM H.ANDRIAMBOLOLON
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+
+from Macro.asse_elem_ssd_ops import asse_elem_ssd_ops
+
+def asse_elem_ssd_prod(self,RESU_ASSE_SSD,**args):
+    MTYPES = {
+        'MODELE' : modele_gene,
+        'NUME_DDL_GENE' : nume_ddl_gene,
+        'RIGI_GENE' : matr_asse_gene_r,
+        'MASS_GENE' : matr_asse_gene_r,
+              }
+    for res in RESU_ASSE_SSD:
+        for mc, typ in MTYPES.items():
+            if res[mc]:
+                self.type_sdprod(res[mc], typ)
+    return None
+
+ASSE_ELEM_SSD=MACRO(nom="ASSE_ELEM_SSD",
+        op=asse_elem_ssd_ops,
+        sd_prod=asse_elem_ssd_prod,
+        reentrant='n',
+        fr="Enchainer les commandes DEFI_MODELE_GENE, NUME_DDL_GENE et ASSE_MATR_GENE",
+        UIinfo={"groupes":("Matrices/vecteurs",)},
+
+# pour les concepts de sortie
+        RESU_ASSE_SSD = FACT( statut='o', max=1,
+                          regles=(PRESENT_PRESENT('RIGI_GENE','NUME_DDL_GENE'),
+                                  PRESENT_PRESENT('MASS_GENE','NUME_DDL_GENE'),),
+                              MODELE=SIMP(statut='o',typ=CO,defaut=None),
+                              NUME_DDL_GENE=SIMP(statut='f',typ=CO,defaut=None),
+                              RIGI_GENE=SIMP(statut='f',typ=CO,defaut=None),
+                              MASS_GENE=SIMP(statut='f',typ=CO,defaut=None),
+                           ),
+
+        INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+
+# pour DEFI_MODELE_GENE
+        SOUS_STRUC      =FACT(statut='o',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=3),
+           TRANS           =SIMP(statut='f',typ='R',max=3),
+         ),
+        LIAISON         =FACT(statut='o',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' ),
+           regles=(EXCLUS('GROUP_MA_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),
+                   EXCLUS('MAILLE_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),),
+           GROUP_MA_MAIT_1   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_1     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_MAIT_2   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_2     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           OPTION            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("REDUIT","CLASSIQUE") ),
+         ),
+        VERIF           =FACT(statut='d',max=1,
+           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") ),
+         ),
+
+
+# pour NUME_DDL_GENE
+        METHODE      =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","ELIMINE") ),
+        STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
+
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
+                   fr="Assembler deux maillages pour en former un nouveau",
+                   reentrant='n',
+                   UIinfo={"groupes":("Maillage",)},
+         MAILLAGE_1 =  SIMP(statut='o',typ=maillage_sdaster,),
+         MAILLAGE_2 =  SIMP(statut='o',typ=maillage_sdaster,),
+         OPERATION  =  SIMP(statut='o',typ='TXM',into=("SOUS_STR","SUPERPOSE","COLLAGE"),),
+         b_collage  =  BLOC(condition = "OPERATION == 'COLLAGE'",
+           COLLAGE  =  FACT(statut='o',
+              GROUP_MA_1     =SIMP(statut='o',typ=grma),
+              GROUP_MA_2     =SIMP(statut='o',typ=grma),
+                             ),
+                           ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+def asse_matr_gene_prod(METHODE,**args):
+    if   (METHODE=="INITIAL") : return matr_asse_gene_r
+    elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c
+    else : return matr_asse_gene_r
+
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod,
+                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+         b_option     =BLOC(condition = "METHODE == 'CLASSIQUE'",
+           OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ),
+           ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 def asse_matrice_prod(MATR_ELEM,**args):
@@ -4301,37 +4942,37 @@ def asse_matrice_prod(MATR_ELEM,**args):
 
 ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
                   fr="Construction d'une matrice assemblée",reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          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_sdaster),
-         SYME            =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         SYME            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          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/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE BODEL C.BODEL
 ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
                     fr="Projection des chargements sur la base modale d'une sous structure",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
          b_nume     =BLOC(condition = "METHODE == 'CLASSIQUE'",
@@ -4341,56 +4982,56 @@ ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 
 ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
                   fr="Construire un champ aux noeuds par assemblage de vecteurs élémentaires",reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
 )  ;
-#& MODIF COMMANDE  DATE 14/12/2009   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE DEVESA G.DEVESA
 CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
                      fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
                      reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
        regles=(EXCLUS('AMOR_RAYLEIGH','ENER_SOL',),
                EXCLUS('AMOR_RAYLEIGH','AMOR_INTERNE',),
                EXCLUS('AMOR_RAYLEIGH','AMOR_SOL',),
@@ -4439,30 +5080,30 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
            SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 
 CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
                     fr="Calculer un champ élémentaire en thermique et en accoustique à partir de champs déjà calculés",
                     reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Résultats et champs","Post-traitements",)},
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
@@ -4478,15 +5119,15 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
 #
 
          OPTION          =SIMP(statut='o',typ='TXM',
-                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
-                                     "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                               into=("FLUX_ELGA","FLUX_ELNO",
+                                     "PRAC_ELNO",
                                      "COOR_ELGA"), ),
 
-         b_thermique  =BLOC(condition="OPTION in ('FLUX_ELNO_TEMP','FLUX_ELGA_TEMP',)",
+         b_thermique  =BLOC(condition="OPTION in ('FLUX_ELNO','FLUX_ELGA',)",
            TEMP            =SIMP(statut='o',typ=(cham_no_sdaster,)),
          ),
 
-         b_acoustique  =BLOC(condition="OPTION in ('PRES_ELNO_DBEL','PRES_ELNO_REEL','PRES_ELNO_IMAG',)",
+         b_acoustique  =BLOC(condition="OPTION in ('PRAC_ELNO',)",
            PRES            =SIMP(statut='o',typ=(cham_no_sdaster,)),
          ),
 
@@ -4505,52 +5146,52 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
          MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
          ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 
 CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
                     fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
          CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ),validators=NoRepeat(),max='**' ),
          INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE DEVESA G.DEVESA
 def calc_char_seisme_prod(MATR_MASS,**args ):
@@ -4559,11 +5200,11 @@ def calc_char_seisme_prod(MATR_MASS,**args ):
 
 CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
                       reentrant='n',fr="Calcul du chargement sismique",
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          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=6,fr="Directions du séisme imposé"),
-         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          MODE_STAT       =SIMP(statut='f',typ=(mode_meca,) ),
          b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
            regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
@@ -4572,10 +5213,10 @@ CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_pr
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#& MODIF COMMANDE  DATE 28/02/2011   AUTEUR BOTTONI M.BOTTONI 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -4606,9 +5247,8 @@ def calc_ecrevisse_prod(self,CHARGE_MECA,CHARGE_THER1,CHARGE_THER2,TABLE,DEBIT,*
 
 
 CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",op=calc_ecrevisse_ops,sd_prod=calc_ecrevisse_prod,reentrant='n',
-                     UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
-
-        regles             = (UN_PARMI('LOGICIEL','VERSION'),),
+                     UIinfo={"groupes":("Outils-métier",)},fr="Procedure de couplage avec Ecrevisse",
+                      regles   = (UN_PARMI('LOGICIEL','VERSION'),),
 
 #      CONCEPTS SORTANTS : 2 CHARGEMENTS THERMIQUE + 1 MECANIQUE + 2 TABLES POUR LE POST-TRAITEMENT
 #      ********************************************
@@ -4740,16 +5380,16 @@ CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",op=calc_ecrevisse_ops,sd_prod=calc_ecr
          COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
                                   fr="Generation eventuelle des courbes" ),
          LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
-         VERSION            =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+         VERSION            =SIMP(statut='f',typ='TXM',into = ("3.1.1","3.1.2","3.2")),
          ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
          IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
          INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 
 )  ;
-#& MODIF COMMANDE  DATE 27/04/2010   AUTEUR DESROCHES X.DESROCHE
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -4770,7 +5410,7 @@ def calc_elem_prod(RESULTAT,**args):
    raise AsException("type de concept resultat non prevu")
 
 CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
             fr="Compléter ou créer un résultat en calculant des champs par éléments (contraintes, déformations,... )",
      MODELE          =SIMP(statut='f',typ=modele_sdaster),
      CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
@@ -4781,8 +5421,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
 
      regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
                     'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
-             CONCEPT_SENSIBLE("SEPARE"),
-             DERIVABLE('RESULTAT'),),
+                    ),
      TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
      NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
      NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
@@ -4840,48 +5479,49 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                                  "INDI_ERREUR","AUTRES","TOUTES"),
                            ),
           b_toutes=BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol elas",
-               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="SIEF_ELNO_ELGA",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="SIEF_ELNO",
                               #  contraintes
-                           into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
-                                  "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
-                                  "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","SIGM_ELNO_TUYO","PROJ_ELEM_SIGM",
+                           into=( "SIEF_ELNO","SIGM_ELNO","SIEF_ELGA",
+                                  "SIPO_ELNO","EFGE_ELNO","EFCA_ELNO","SICA_ELNO",
+                                  "SITU_ELNO","SIRO_ELEM","SIPM_ELNO",
                               # déformations
-                                 "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELGA_DEPL","EPSG_ELNO_DEPL",
-                                 "EPME_ELNO_DEPL","EPME_ELGA_DEPL","DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
+                                 "EPSI_ELNO","EPSI_ELGA","EPSG_ELGA","EPSG_ELNO",
+                                 "EPME_ELNO","EPME_ELGA","DEGE_ELNO","EPTU_ELNO",
                                  "EPVC_ELNO","EPVC_ELGA",
                               #  ENER
-                                 "EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
-                                 "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","DISS_ELGA","DISS_ELNO_ELGA",
+                                 "EPOT_ELEM","ECIN_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                 "ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","DISS_ELGA","DISS_ELNO",
                               #  estimateurs erreur
-                                 "SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
-                                 "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
-                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
-                                 "SING_ELEM","SING_ELNO_ELEM",
+                                 "SIZ1_ELGA","ERZ1_ELEM","SIZ2_ELGA","ERZ2_ELEM",
+                                 "ERME_ELEM","ERME_ELNO",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",
                               #  CRIT
-                                 "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","CRIT_ELNO_RUPT",
-                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
-                                 "ENDO_ELGA","ENDO_ELNO_ELGA",
-                                 "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
-                              #  derivees
-                                 "DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
+                                 "SIEQ_ELNO","SIEQ_ELGA","CRIT_ELNO",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO",
+                                 "SITQ_ELNO","EPTQ_ELNO",
                               #  autres
-                                 "VALE_NCOU_MAXI","PRES_DBEL_DEPL"),),
-
-               NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="nom du champ pour VALE_NCOU_MAXI", ),
-               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="nom de la composante pour VALE_NCOU_MAXI",  ),
-
-                b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
-                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+                                 "SPMX_ELGA","PRME_ELNO","VARC_ELGA"),),
+
+#              Les 2 mots cles suivants ne sont utiles qu' a l'option SPMX_ELGA
+#              mais  on est obligé de les laisser ici a cause des blocs
+               NOM_CHAM  =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA","EPSI_ELGA","SIEQ_ELGA","EPEQ_ELGA","VARI_ELGA"),
+                               fr="nom du champ pour SPMX_ELGA",),
+               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="nom de la composante pour SPMX_ELGA",  ),
+
+                b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM' in OPTION)",
                     RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
 
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
                                   fr="precision demandee pour calculer la carte de taille des elements"),
-                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
-                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
                                    fr="choix de l'estimateur d'erreur"),),
 
                EXCIT           =FACT(statut='f',max='**',
@@ -4902,13 +5542,13 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
 
           b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
                                      fr="options de contraintes elasticite 2D et 3D",
-              OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+              OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO',
                             fr="option de calcul des contraintes",
-                           into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",),),
+                           into=( "SIEF_ELNO","SIGM_ELNO","SIEF_ELGA",),),
 
-                    b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',) or \
-                                      (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) ",
+                    b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO','SIEF_ELGA',) or \
+                                      (type(OPTION)==type(()) and  'SIGM_ELNO' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'SIEF_ELGA' in OPTION ) ",
                                       fr="charge contenant les temperatures ou autre charge",
                          EXCIT           =FACT(statut='f',max='**',
                          CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),),
@@ -4917,18 +5557,18 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
 
           b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
                                       fr="options de contraintes elasticite poutres, coques, tuyaux",
-               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO',
                             fr="option de calcul des contraintes ou efforts generalises",
-                            into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL","SIGM_ELNO_TUYO",
-                                   "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
-                                   "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF"),),
-
-               b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',\
-                                                       'SIPO_ELNO_DEPL','EFGE_ELNO_DEPL',) or \
-                                            (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
-                                            (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) or \
-                                            (type(OPTION)==type(()) and  'SIPO_ELNO_DEPL' in OPTION ) or \
-                                            (type(OPTION)==type(()) and  'EFGE_ELNO_DEPL' in OPTION ) ",
+                            into=( "SIEF_ELNO","SIGM_ELNO","SIEF_ELGA","SITU_ELNO",
+                                   "SIPO_ELNO","EFGE_ELNO","EFCA_ELNO","SICA_ELNO",
+                                   ),),
+
+               b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO','SIEF_ELGA',\
+                                                       'SIPO_ELNO','EFGE_ELNO',) or \
+                                            (type(OPTION)==type(()) and  'SIGM_ELNO' in OPTION ) or \
+                                            (type(OPTION)==type(()) and  'SIEF_ELGA' in OPTION ) or \
+                                            (type(OPTION)==type(()) and  'SIPO_ELNO' in OPTION ) or \
+                                            (type(OPTION)==type(()) and  'EFGE_ELNO' in OPTION ) ",
                                             fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
                     EXCIT           =FACT(statut='f',max='**',
                                           regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
@@ -4948,15 +5588,15 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
 
           b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
-                                 "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO","EPVC_ELNO","EPVC_ELGA",),
+                           into=("EPSI_ELNO","EPSI_ELGA","EPME_ELNO","EPME_ELGA",
+                                 "DEGE_ELNO","EPTU_ELNO","EPVC_ELNO","EPVC_ELGA",),
                                  ),
-b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ELGA_DEPL','EPSI_ELNO_DEPL','EPSI_ELNO_TUYO' ) or \
-                                      (type(OPTION)==type(()) and  'EPSI_ELNO_DEPL' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'EPSI_ELNO_TUYO' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'EPSI_ELGA_DEPL' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'EPME_ELNO_DEPL' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'EPME_ELGA_DEPL' in OPTION ) ",
+b_charge =BLOC( condition = "OPTION in ('EPME_ELNO','EPSI_ELGA','EPME_ELGA','EPSI_ELNO','EPTU_ELNO' ) or \
+                                      (type(OPTION)==type(()) and  'EPSI_ELNO' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPTU_ELNO' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPSI_ELGA' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPME_ELNO' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPME_ELGA' in OPTION ) ",
                                       fr="charge contenant les temperatures",
                     EXCIT           =FACT(statut='f',max='**',
                          CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou,char_cine_meca,) ),),
@@ -4964,14 +5604,14 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                        ),
           b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
-                                 "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","DISS_ELGA","DISS_ELNO_ELGA",),
+                           into=("EPOT_ELEM","ECIN_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                 "ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","DISS_ELGA","DISS_ELNO",),
                                  ),
-               b_charge =BLOC( condition = "OPTION in ('EPOT_ELEM_DEPL','ECIN_ELEM_DEPL','ENEL_ELGA','ENEL_ELNO_ELGA',) or \
-                                      (type(OPTION)==type(()) and  'EPOT_ELEM_DEPL' in OPTION ) or \
+               b_charge =BLOC( condition = "OPTION in ('EPOT_ELEM','ECIN_ELEM','ENEL_ELGA','ENEL_ELNO',) or \
+                                      (type(OPTION)==type(()) and  'EPOT_ELEM' in OPTION ) or \
                                       (type(OPTION)==type(()) and  'ENEL_ELGA' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'ENEL_ELNO_ELGA' in OPTION ) or \
-                                      (type(OPTION)==type(()) and  'ECIN_ELEM_DEPL' in OPTION ) ",
+                                      (type(OPTION)==type(()) and  'ENEL_ELNO' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'ECIN_ELEM' in OPTION ) ",
                                       fr="charge contenant les temperatures",
                     EXCIT           =FACT(statut='f',max='**',
                          CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
@@ -4980,50 +5620,47 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 
           b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
-                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
-                                 "ENDO_ELGA","ENDO_ELNO_ELGA",
-                                 "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+                           into=("SIEQ_ELNO","SIEQ_ELGA",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO",
+                                 "CRIT_ELNO","SITQ_ELNO","EPTQ_ELNO",
                                  ) ),
                 EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                      CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
 
-          b_derivees         =BLOC( condition = "TYPE_OPTION=='DERIVEES'",
-                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
-                                 ) ),),
 
           b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("VALE_NCOU_MAXI","PRES_DBEL_DEPL",
+                           into=("SPMX_ELGA","PRME_ELNO",
                                  ) ),
-               b_maxi    =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
-                                (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
-                    NOM_CHAM  =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
-                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+               b_maxi    =BLOC( condition = "OPTION=='SPMX_ELGA' or \
+                                (type(OPTION)==type(()) and 'SPMX_ELGA' in OPTION)",
+                    NOM_CHAM  =SIMP(statut='o',typ='TXM',into=("SIEF_ELGA","EPSI_ELGA","SIEQ_ELGA","EPEQ_ELGA","VARI_ELGA"),
+                                    fr="Nom du champ pour SPMX_ELGA",),
+                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour SPMX_ELGA"),),
                                  ),
 
           b_indi_erreur        =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELEM_SIGM",
-                           into=("SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
-                                 "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
-                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
-                                 "SING_ELEM","SING_ELNO_ELEM",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERME_ELEM",
+                           into=("SIZ1_ELGA","ERZ1_ELEM","SIZ2_ELGA","ERZ2_ELEM",
+                                 "ERME_ELEM","ERME_ELNO",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",
                                  )),
 
-               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
-                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM' in OPTION)",
                     RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
 
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
                                   fr="precision demandee pour calculer la carte de taille des elements" ),
-                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
-                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
                                    fr="choix de l'estimateur d'erreur"),),
 
                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
@@ -5040,54 +5677,55 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                           ),
           b_toutes =BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol noli",
                OPTION      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=( "SIEF_ELNO_ELGA","PROJ_ELEM_SIGM",
-                                  "SIGM_ELNO_TUYO","SIGM_ELNO_COQU","PROJ_ELNO_SIGM",
-                                  "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","EFGE_ELNO_CART",
+                           into=( "SIEF_ELNO","SIRO_ELEM",
+                                  "SITU_ELNO","SICO_ELNO",
+                                  "EFCA_ELNO","SIPO_ELNO","SIPM_ELNO",
                                   "FLHN_ELGA",
                                   # EPSI
-                                  "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
-                                 "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
-                                 "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
+                                  "EPSI_ELNO","EPSI_ELGA","EPSG_ELNO","EPSG_ELGA",
+                                 "EPME_ELNO","EPME_ELGA","EPMG_ELNO","EPMG_ELGA",
+                                 "DEGE_ELNO","EPTU_ELNO",
                                  "EPSP_ELNO","EPSP_ELGA",
                                  "EPFD_ELNO","EPFD_ELGA","EPVC_ELNO","EPVC_ELGA",
                                  "EPFP_ELNO","EPFP_ELGA",
-                                 "VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU","CRIT_ELNO_RUPT",
-                                 "EXTR_ELGA_VARI","EXTR_ELNO_VARI",
+                                 "VARC_ELGA",
+                                 "VARI_ELNO","VATU_ELNO","VACO_ELNO","CRIT_ELNO",
+                                 "VAEX_ELGA","VAEX_ELNO",
                                  # CRIT
-                                 "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
-                                 "ERRE_ELEM_SIGM","ERRE_ELNO_ELEM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
-                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_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_ELGA","ENDO_ELNO_ELGA","INDI_LOCA_ELGA","SING_ELEM",
-                                 "SING_ELNO_ELEM","ENDO_ELNO_SIGA","ENDO_ELNO_SINO",
-                                 "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","ENEL_ELGA","ENEL_ELNO_ELGA",
-                                 "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","VALE_NCOU_MAXI",
-                                 "DISS_ELGA","DISS_ELNO_ELGA"),
+                                 "SIEQ_ELNO","SIEQ_ELGA","SITQ_ELNO","EPTQ_ELNO",
+                                 "ERME_ELEM","ERME_ELNO","ERZ1_ELEM","ERZ2_ELEM",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "DERA_ELNO","DERA_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO","INDL_ELGA","SING_ELEM",
+                                 "SING_ELNO",
+                                 "PMPB_ELNO","PMPB_ELGA","ENEL_ELGA","ENEL_ELNO",
+                                 "ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","SPMX_ELGA",
+                                 "DISS_ELGA","DISS_ELNO"),
                                ),
-               NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
-                                 into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE"),
-                                 fr="Type de norme pour les options RADI_ et DCHA_"),
 
-               NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI"),
-               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),
+#              Les 2 mots cles suivants ne sont utiles qu' a l'option SPMX_ELGA
+#              mais  on est obligé de les laisser ici a cause des blocs
+               NOM_CHAM  =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA","EPSI_ELGA","SIEQ_ELGA","EPEQ_ELGA","VARI_ELGA"),
+                               fr="Nom du champ pour SPMX_ELGA",),
+               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour SPMX_ELGA"),
 
-               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
-                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM' in OPTION)",
                     RESU_DUAL=SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual"),),
 
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
                                   fr="precision demandee pour calculer la carte de taille des elements" ),
-                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
-                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
                                    fr="choix de l'estimateur d'erreur"),),
 
 
-               b_extr = BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
+               b_extr = BLOC( condition = "OPTION in ('VAEX_ELNO','VAEX_ELGA')",
                              NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
                          into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
                                "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
@@ -5117,29 +5755,29 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                       fr="options de contraintes non lin 2D et 3D",
                OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                               #  contraintes
-                           into=( "SIEF_ELNO_ELGA",),),
+                           into=( "SIEF_ELNO",),),
                             ),
 
           b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
                                        fr="options de contraintes non lin poutres, coques",
                OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                               #  contraintes
-                           into=( "SIEF_ELNO_ELGA","EFGE_ELNO_CART","SIGM_ELNO_TUYO","SIGM_ELNO_COQU",
-                           "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",),),
+                           into=( "SIEF_ELNO","EFCA_ELNO","SITU_ELNO","SICO_ELNO",
+                           ),),
                              ),
 
           b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=( "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","DEGE_ELNO_DEPL","EPVC_ELNO","EPVC_ELGA",
+                           into=( "EPSI_ELNO","EPSI_ELGA","EPSG_ELNO","EPSG_ELGA",
+                                 "EPME_ELNO","EPME_ELGA","EPMG_ELNO","EPMG_ELGA",
+                                 "EPSP_ELNO","EPSP_ELGA","DEGE_ELNO","EPVC_ELNO","EPVC_ELGA",
                                  "EPFD_ELNO","EPFD_ELGA","EPFP_ELNO","EPFP_ELGA"),
                                  ),
                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
-         b_epstuyo       =BLOC( condition = "OPTION == 'EPSI_ELNO_TUYO' or \
-                                  (type(OPTION)==type(()) and  'EPSI_ELNO_TUYO' in OPTION) ",
+         b_epstuyo       =BLOC( condition = "OPTION == 'EPTU_ELNO' or \
+                                  (type(OPTION)==type(()) and  'EPTU_ELNO' in OPTION) ",
               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                ),
@@ -5147,10 +5785,10 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
           b_vari         =BLOC( condition = "TYPE_OPTION=='VARI'",
                                        fr="Calcul et extraction des variables internes",
                    OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                                   into=("VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU",
-                                         "EXTR_ELGA_VARI","EXTR_ELNO_VARI"),
+                                   into=("VARI_ELNO","VATU_ELNO","VACO_ELNO",
+                                         "VAEX_ELGA","VAEX_ELNO"),
                                  ),
-          b_extr         =BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
+          b_extr         =BLOC( condition = "OPTION in ('VAEX_ELNO','VAEX_ELGA')",
                    NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
                          into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
                                "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
@@ -5161,8 +5799,8 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 
           b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO_ELGA",
-                                 "DISS_ELGA","DISS_ELNO_ELGA",),
+                           into=("ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                 "DISS_ELGA","DISS_ELNO",),
                                  ),
                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
@@ -5170,52 +5808,44 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 
           b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
                OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
-                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
-                                 "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT",
-                                 "ENDO_ELGA","ENDO_ELNO_ELGA",
-                                 "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+                           into=("SIEQ_ELNO","SIEQ_ELGA",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "CRIT_ELNO",
+                                 "ENDO_ELGA","ENDO_ELNO",
+                                 "PMPB_ELNO","PMPB_ELGA","SITQ_ELNO","EPTQ_ELNO",
                                  ) ),
                                  ),
 
           b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("VALE_NCOU_MAXI",) ),
-               b_maxi    =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
-                                (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
-                    NOM_CHAM  =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
-                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+                           into=("SPMX_ELGA",) ),
+               b_maxi    =BLOC( condition = "OPTION=='SPMX_ELGA' or \
+                                (type(OPTION)==type(()) and 'SPMX_ELGA' in OPTION)",
+                    NOM_CHAM  =SIMP(statut='o',typ='TXM',into=("SIEF_ELGA","EPSI_ELGA","SIEQ_ELGA","EPEQ_ELGA","VARI_ELGA"),
+                                    fr="Nom du champ pour SPMX_ELGA",),
+                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour SPMX_ELGA"),),
                                  ),
 
           b_indi_erreur         =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELEM_SIGM",
-                           into=("ERRE_ELEM_SIGM","ERRE_ELNO_ELEM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
-                                 "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
-                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
-                                 "SING_ELEM","SING_ELNO_ELEM",) ),
-
-               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
-                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
-                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERME_ELEM",
+                           into=("ERME_ELEM","ERME_ELNO","ERZ1_ELEM","ERZ2_ELEM",
+                                 "DERA_ELNO","DERA_ELGA",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",) ),
+
+               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM' in OPTION)",
                 RESU_DUAL    =SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual")),
 
                b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
                                (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
                     PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
                                   fr="precision demandee pour calculer la carte de taille des elements" ),
-                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
-                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
                                    fr="choix de l'estimateur d'erreur"),),
-
-               b_indic = BLOC( condition ="OPTION in ('DCHA_ELNO_SIGM','DCHA_ELGA_SIGM','RADI_ELNO_SIGM','RADI_ELGA_SIGM') or\
-                                            (type(OPTION)==type(()) and 'DCHA_ELNO_SIGM' in OPTION) or\
-                                            (type(OPTION)==type(()) and 'DCHA_ELGA_SIGM' in OPTION) or\
-                                            (type(OPTION)==type(()) and 'RADI_ELNO_SIGM' in OPTION) or\
-                                            (type(OPTION)==type(()) and 'RADI_ELGA_SIGM' in OPTION) ",
-                    NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
-                                 into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE") ),
-                                 ),
                                  ),
                                  ),
 #          fin bloc evol_noli
@@ -5223,9 +5853,8 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 #           thermique : evol_ther, fourier_ther
      b_ther          =BLOC( condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,fr="options thermiques",
           OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("DEUL_ELGA_TEMP","DETE_ELNO_DLTE","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
-                                  "HYDR_ELNO_ELGA","DURT_ELGA_META","DURT_ELNO_META",
-                                  "SOUR_ELGA_ELEC","ERRE_ELEM_TEMP","ERRE_ELNO_ELEM",),),
+                           into=("FLUX_ELGA","FLUX_ELNO",
+                                  "DURT_ELNO","SOUR_ELGA","ERTH_ELEM","ERTH_ELNO",),),
                EXCIT           =FACT(statut='f',max='**',
                     regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
                     CHARGE          =SIMP(statut='o',typ=char_ther ),
@@ -5242,8 +5871,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 #    acoustique
      b_acou          =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques",
           OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                           into=("PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
-                                 "INTE_ELNO_ACTI","INTE_ELNO_REAC",
+                           into=("PRAC_ELNO", "INTE_ELNO",
                                  ),),
           EXCIT           =FACT(statut='f',max='**',
                 regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
@@ -5280,39 +5908,37 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
          TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
          PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
          POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
-         RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+         RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
          ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
          PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
          RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
          OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
          ),
      ),
 
 
 
-     SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                           fr="Liste des paramètres de sensibilité.",
-                           ang="List of sensitivity parameters"),
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
      TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 ) ;
-#& MODIF COMMANDE  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 # RESPONSABLE NISTOR I.NISTOR
@@ -5353,7 +5979,7 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                    op        = calc_essai_ops,
                    sd_prod   = calc_essai_prod,
                    reentrant = 'n',
-                   UIinfo    = {"groupes":("Outils métier",)},
+                   UIinfo    = {"groupes":("Outils-métier","Dynamique",)},
                    fr        = "Outil de post-traitement interactif pour Meidee ",
                    INTERACTIF  = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
                    RESU_IDENTIFICATION = FACT( statut='f',max='**',
@@ -5388,7 +6014,7 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                                                                               EPS = SIMP(statut='f',typ='R', defaut = 0.)
                                                                        )
                                                     ),
-                             IDENTIFICATION   = FACT( statut='f',max='**',   
+                             IDENTIFICATION   = FACT( statut='f',max='**',
                                                       ALPHA   = SIMP(statut='f',typ='R', defaut = 0.),
                                                       EPS     = SIMP(statut='f',typ='R', defaut = 0.),
                                                       OBSERVABILITE  = SIMP(statut='o',typ=mode_meca),
@@ -5413,49 +6039,49 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                              # Si on realise une modification structurale, on donne les DDL capteurs et interface
                              b_modif   = BLOC( condition="MODIFSTRUCT!=None",
                                    GROUP_NO_CAPTEURS  = FACT( statut='f', max='**',
-                                                              GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+                                                              GROUP_NO = SIMP(statut='o',typ=grno, max='**'),
                                                               NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
                                                             ),
                                    GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
-                                                              GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+                                                              GROUP_NO = SIMP(statut='o',typ=grno, max='**'),
                                                               NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
                                                             ),
                                                ),
                                           ),
                         );
 
-#& MODIF COMMANDE  DATE 28/04/2009   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 from Macro.calc_europlexus_ops import calc_europlexus_ops
 
 def calc_europlexus_prod(self,COURBE=None,**args):
   if COURBE is not None:
-      self.type_sdprod(args['TABLE_COURBE'],table_sdaster) 
+      self.type_sdprod(args['TABLE_COURBE'],table_sdaster)
   return evol_noli
 
 CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=calc_europlexus_prod,
         reentrant='n',
-        #UIinfo={"groupes":("Dynamique rapide",)},
+        UIinfo={"groupes":("Outils-métier","Dynamique",)},
         fr="Chainage Code_Aster-Europlexus",
 
-        LOGICIEL = SIMP(statut='f', typ='TXM', defaut='/home/europlex/EPXD/EUROPLEXUS_GESTION/runepx_d'),
+        LOGICIEL = SIMP(statut='f', typ='TXM', defaut='/home/europlex/EPXD/bin/europlexus'),
 
         MODELE     = SIMP(statut='o',typ=modele_sdaster),
         CARA_ELEM  = SIMP(statut='o',typ=cara_elem),
@@ -5478,7 +6104,7 @@ CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=cal
                                                     'PT6L','ZONE','POUT','ECRO',
                                                     'APPU','BLOQ','PRESS','PMAT',
                                                     'DKT3','DEPL','FNOM','TABLE','FTAB',
-                                                    'MTTI','NEPE','LIAI',), ),                   
+                                                    'MTTI','NEPE','LIAI',), ),
            UNITE_DIME=SIMP(statut='f',typ='I'),
 
            Q4GS  = SIMP(statut='f',typ='I'),
@@ -5521,12 +6147,12 @@ CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=cal
         OBSERVATION     =FACT(statut='f',max='**',
            SUIVI_DDL       = SIMP(statut='o',typ='TXM',defaut="OUI",max=1,into=("OUI","NON")),
         b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
-                               regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), 
-                                        EXCLUS('PAS_NBRE','PAS_INST',), 
-                                        EXCLUS('GROUP_NO','TOUT_GROUP_NO',), 
+                               regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',),
+                                        EXCLUS('PAS_NBRE','PAS_INST',),
+                                        EXCLUS('GROUP_NO','TOUT_GROUP_NO',),
                                         EXCLUS('GROUP_MA','TOUT_GROUP_MA',), ),
-           NOM_CHAM        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', defaut = ('DEPL',), 
-                                  into=('DEPL','VITE','ACCE','SIEF_ELGA','EPSI_ELGA','VARI_ELGA'),),
+           NOM_CHAM        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut=('DEPL',),into=('DEPL'
+                                         ,'VITE','ACCE','SIEF_ELGA','EPSI_ELGA','VARI_ELGA'),),
            PAS_INST        = SIMP(statut='f',typ='R'),
            PAS_NBRE        = SIMP(statut='f',typ='I'),
            GROUP_NO        = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -5537,11 +6163,11 @@ CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=cal
         ),
 
 
-        ARCHIVAGE        =FACT(statut='f', regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), EXCLUS('PAS_NBRE','PAS_INST',), ),
+        ARCHIVAGE        =FACT(statut='o', regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), EXCLUS('PAS_NBRE','PAS_INST',), ),
            PAS_INST     = SIMP(statut='f',typ='R'),
            PAS_NBRE     = SIMP(statut='f',typ='I'),
            CONT_GENER   = SIMP(statut='o',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
-                             ),                
+                             ),
         COURBE  =  FACT(statut='f',max='**', regles=(EXCLUS('GROUP_NO','GROUP_MA')),
            UNITE_ALIT = SIMP(statut='f',typ='I'),
             NOM_CHAM   = SIMP(statut='f',typ='TXM'),
@@ -5556,40 +6182,40 @@ CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=cal
          ),
         b_courbe = BLOC(condition = "COURBE != None",
                         regles=(AU_MOINS_UN('PAS_NBRE_COURBE','PAS_INST_COURBE',),
-                                AU_MOINS_UN('TABLE_COURBE',)),          
+                                AU_MOINS_UN('TABLE_COURBE',)),
           PAS_INST_COURBE      = SIMP(statut='f',typ='R'),
           PAS_NBRE_COURBE       = SIMP(statut='f',typ='I'),
                   TABLE_COURBE      = SIMP(statut='f', typ=CO),
           ),
         DOMAINES = FACT(statut='f',max='**',
              GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             IDENTIFIANT =  SIMP(statut='f',typ='I'),), 
+             IDENTIFIANT =  SIMP(statut='f',typ='I'),),
         INTERFACES = FACT(statut='f',max='**',
              GROUP_MA_1 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              GROUP_MA_2 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              TOLE        =  SIMP(statut='f',typ='R'),
-             IDENT_DOMAINE_1  = SIMP(statut='f',typ='I'), 
+             IDENT_DOMAINE_1  = SIMP(statut='f',typ='I'),
              IDENT_DOMAINE_2  = SIMP(statut='f',typ='I'),),
 
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
         ) ;
-#& MODIF COMMANDE  DATE 06/07/2009   AUTEUR GALENNE E.GALENNE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ANGLES J.ANGLES
 def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
@@ -5602,7 +6228,7 @@ def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
 CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant='n',
                   fr="Calculer un champ de dommage de fatigue subit par une structure et déterminer le plan critique"
                       +" dans lequel le cisaillement est maximal.",
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
 
          TYPE_CALCUL = SIMP(statut='o',typ='TXM',
                                into=("CUMUL_DOMMAGE","FATIGUE_MULTI","FATIGUE_VIBR") ),
@@ -5614,7 +6240,7 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
                                  into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
                                        "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
                                        "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
-           
+
              b_sigm   =BLOC(condition = "OPTION == 'DOMA_ELNO_SIGM' or OPTION == 'DOMA_ELGA_SIGM'",
                                fr="Calcul a partir d un champ de contraintes.",
                HISTOIRE        =FACT(statut='o',
@@ -5640,7 +6266,7 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
            TAHERI_NAPPE    =SIMP(statut='f',typ=(nappe_sdaster,formule) ),
            TAHERI_FONC     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
-         
+
          b_domma_moda   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_VIBR'",
                                fr="Calcul d un champ de dommage en dynamique vibratoire",
            regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
@@ -5682,39 +6308,134 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
            b_non_period   =BLOC(condition = "TYPE_CHARGE == 'NON_PERIODIQUE'",
                CRITERE       =SIMP(statut='o',typ='TXM',
                                    into=("MATAKE_MODI_AV","DANG_VAN_MODI_AV","FATESOCI_MODI_AV","VMIS_TRESCA") ),
-               b_fati_np  =BLOC(condition = 
+               b_fati_np  =BLOC(condition =
                                "(CRITERE == 'MATAKE_MODI_AV' or CRITERE == 'DANG_VAN_MODI_AV' or CRITERE == 'FATESOCI_MODI_AV')",
                    PROJECTION    =SIMP(statut='o',typ='TXM',into=("UN_AXE", "DEUX_AXES") ),
-                   DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+                   DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),
                ),
            ),
          ),
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET
+
+def calc_ferrailage_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+
+CALC_FERRAILLAGE=OPER(nom="CALC_FERRAILLAGE",op=175,sd_prod=calc_ferrailage_prod, reentrant='o',
+            UIinfo={"groupes":("Post-traitements","Outils-métier",)},
+                 fr="calcul de cartes de densité de ferraillage ",
+
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,) ),
+
+
+#====
+# Sélection des numéros d'ordre pour lesquels on fait le calcul :
+#====
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+         b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+         ),
+
+
+#
+#====
+# Définition des grandeurs caractéristiques
+#====
+#
+         TYPE_COMB    =SIMP(statut='o',typ='TXM',into=('ELU','ELS')),
+
+#        mot clé facteur répétable pour assigner les caractéristiques locales par zones topologiques (GROUP_MA)
+         AFFE  =FACT(statut='o',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE     =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           ENROBG     =SIMP(statut='o',typ='R'), # enrobage
+           CEQUI      =SIMP(statut='f',typ='R'), # coefficient d'équivalence acier/béton  (pour ELS)
+           SIGM_ACIER =SIMP(statut='o',typ='R'), # contrainte admissible dans l'acier
+           SIGM_BETON =SIMP(statut='o',typ='R'), # contrainte admissible dans le béton
+           PIVA       =SIMP(statut='f',typ='R'), # valeur du pivot a  (pour ELU)
+           PIVB       =SIMP(statut='f',typ='R'), # valeur du pivot b  (pour ELU)
+           ),
+      )
+
+
+##############################################################################################################
+# Remarques :
+#-----------
+#        l'épaisseur des coques sera récupérée automatiquement
+#        via le cara_elem sous-jacent au résultat
+
+# Le résultat produit est un champ constant par éléments associé à la grandeur FER2_R
+# qui comporte les composantes :
+#
+#     DNSXI  densité d'acier longitudinal suivant X, peau inf
+#     DNSXS  densité d'acier longitudinal suivant X, peau sup
+#     DNSYI  densité d'acier longitudinal suivant Y, peau inf
+#     DNSYS  densité d'acier longitudinal suivant Y, peau sup
+#     DNST   densité d'acier transversal
+#     SIGMBE contrainte beton
+#     EPSIBE deformation béton
+
+# arrêt en erreur si:
+# - EFGE_ELNO n'a pas été précédemment calculé et n'est donc pas présent dans la structure de données RESULTAT
+# - si aucun CARA_ELEM n'est récupérable via la structure de données RESULTAT
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ADOBES A.ADOBES
 CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
                     reentrant='n',
                     fr="Calculer les paramètres modaux d'une structure soumise à un écoulement",
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          VITE_FLUI       =FACT(statut='f',
                                fr="Définir la plage de vitesse fluide étudiée",
            VITE_MIN        =SIMP(statut='f',typ='R' ),
@@ -5722,7 +6443,7 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
            NB_POIN         =SIMP(statut='f',typ='I' ),
          ),
          BASE_MODALE     =FACT(statut='o',
-                               
+
            regles=(AU_MOINS_UN('AMOR_REDUIT','AMOR_UNIF','AMOR_REDUIT_CONN'),),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
            NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
@@ -5737,23 +6458,23 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
            DEFORMEE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
@@ -5774,9 +6495,9 @@ def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
    raise AsException("type de concept resultat non prevu")
 
 CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_prod,
-                      docu="U4.32.01-e",reentrant='n',
+                      docu="U4.32.01",reentrant='n',
            fr="Définit une fonction (ou une nappe) à partir d'une fonction FORMULE à 1 ou 2 variables",
-           UIinfo={"groupes":("Fonction",)},
+           UIinfo={"groupes":("Fonctions",)},
          regles=(UN_PARMI('VALE_PARA','LIST_PARA'),),
          FONCTION        =SIMP(statut='o',typ=(formule,fonction_sdaster,nappe_sdaster,fonction_c) ),
          VALE_PARA       =SIMP(statut='f',typ='R',max='**'),
@@ -5787,7 +6508,7 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_pr
          PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
          PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
          NOM_PARA_FONC   =SIMP(statut='f',typ='TXM'),
-         b_eval_nappe    =BLOC(condition = "NOM_PARA_FONC != None",             
+         b_eval_nappe    =BLOC(condition = "NOM_PARA_FONC != None",
             regles=(UN_PARMI('VALE_PARA_FONC','LIST_PARA_FONC'),),
             VALE_PARA_FONC  =SIMP(statut='f',typ='R',max='**'),
             LIST_PARA_FONC  =SIMP(statut='f',typ=listr8_sdaster ),
@@ -5798,34 +6519,34 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_pr
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 from Macro.calc_fonction_ops import calc_fonction_ops
 def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
                        ENVELOPPE,FRACTILE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,
-                       LISS_ENVELOP,ABS, **args):
+                       LISS_ENVELOP,ABS, REGR_POLYNOMIALE, **args):
 
    if (INTEGRE     != None): return fonction_sdaster
    if (DERIVE      != None): return fonction_sdaster
    if (INVERSE     != None): return fonction_sdaster
-   if (COMB        != None): 
+   if (COMB        != None):
       type_vale=AsType(COMB[0]['FONCTION'])
       for mcfact in COMB :
           if(AsType(mcfact['FONCTION'])!=type_vale):
@@ -5855,22 +6576,24 @@ def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
       if (AsType(vale) == fonction_c) : return fonction_sdaster
    if (CORR_ACCE   != None): return fonction_sdaster
    if (LISS_ENVELOP!= None): return nappe_sdaster
+   if (REGR_POLYNOMIALE != None): return fonction_sdaster
    if (PUISSANCE   != None): return AsType(PUISSANCE[0]['FONCTION'])
    if (ABS         != None): return fonction_sdaster
    raise AsException("type de concept resultat non prevu")
 
+
 CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_fonction_prod
                     ,fr="Effectue des opérations mathématiques sur des concepts de type fonction",
                      reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','COMB','COMB_C','ENVELOPPE',
                           'COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE',
-                          'LISS_ENVELOP','INVERSE','ABS','FRACTILE'),),
+                          'LISS_ENVELOP','INVERSE','ABS','FRACTILE','REGR_POLYNOMIALE'),),
          FFT             =FACT(statut='f',fr="Transformée de Fourier ou de son inverse",
            FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c) ),
            METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE","COMPLET") ),
            b_syme          =BLOC ( condition = " AsType(FONCTION)==fonction_c ",
-             SYME           =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),  
+             SYME           =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
            ),
          ),
          DERIVE          =FACT(statut='f',fr="Dérivée d une fonction",
@@ -5889,6 +6612,10 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
            ELARG           =SIMP(statut='f',typ='R',defaut =0.1 ),
            TOLE_LISS       =SIMP(statut='f',typ='R',defaut =0.25 ),
          ),
+         REGR_POLYNOMIALE = FACT(statut='f',fr="Régression polynomiale d'une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster),
+           DEGRE           =SIMP(statut='o',typ='I'),
+         ),
          SPEC_OSCI       =FACT(statut='f',fr="Spectre d'oscillateur",
            METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
            FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
@@ -5912,8 +6639,8 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
            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_sdaster ),  
+         b_comb          =BLOC ( condition = "COMB != None or COMB_C != None or REGR_POLYNOMIALE != None",
+             LIST_PARA      =SIMP(statut='f',typ=listr8_sdaster ),
          ),
          COMPOSE         =FACT(statut='f',fr="Composition de deux fonctions FONC_RESU(FONC_PARA)",
            FONC_RESU       =SIMP(statut='o',typ=fonction_sdaster),
@@ -5945,22 +6672,25 @@ CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_foncti
          ),
          INVERSE         =FACT(statut='f',fr="Inverse d'une fonction",
             FONCTION      =SIMP(statut='o', typ=fonction_sdaster),
-         ),     
+         ),
          NOM_PARA        =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
          NOM_RESU        =SIMP(statut='f',typ='TXM' ),
-         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG"),
+                               fr="Type d'interpolation pour les abscisses et les ordonnées de la " \
+                                  "fonction ou bien pour le paramètre de la nappe."),
          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=C_PARA_FONCTION() ),
-         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG"),
+                                 fr="Type d'interpolation pour les abscisses et les ordonnées de la fonction"),
          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) ),
 )
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -5980,7 +6710,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
                    fr="Calculer l'effet de surpression hydrodynamique due au mouvement d'entrainement de la structure"
                        +" en analyse sismique",
                    reentrant ='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
 
         regles=(EXCLUS('MODE_MECA','MODELE_GENE'),
                 PRESENT_PRESENT( 'MODELE_GENE','NUME_DDL_GENE'),
@@ -6027,7 +6757,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -6035,32 +6765,39 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
-             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-             ),
-
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),            
+           ),
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'",
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
-                           ),
-
-           ) ;
-#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+        ),
+     ) ;
+#& MODIF COMMANDE  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -6075,12 +6812,64 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
+# RESPONSABLE DEVESA
+
+CALC_FORC_NONL=OPER(nom="CALC_FORC_NONL",op= 183,sd_prod=dyna_trans,reentrant='n',
+            fr="Créer un dyna_trans contenant des champs nommés 'DEPL' correspondant à 'FONL_NOEU' ",
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+
+         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',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1, defaut="FONL_NOEU",
+                               into=("FONL_NOEU",) ),
+
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         COMP_INCR       =C_COMP_INCR(),
+)  ;
+#& MODIF COMMANDE  DATE 07/12/2010   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
 # RESPONSABLE GALENNE E.GALENNE
 CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
             fr="Calcul du taux de restitution d'énergie par la méthode theta en thermo-élasticité"
                         +" et les facteurs d'intensité de contraintes.",
                     reentrant='f',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
          regles=(EXCLUS('COMP_ELAS','COMP_INCR'),
                  CONCEPT_SENSIBLE("ENSEMBLE"),
                  REUSE_SENSIBLE(),
@@ -6108,7 +6897,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
              DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
              DIRECTION       =SIMP(statut='f',typ='R',max=3,min=3),
              R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),             
+             R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              MODULE_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              ),
             ),
@@ -6118,7 +6907,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
          b_no_mult          =BLOC(condition="(AsType(RESULTAT) != mult_elas)",
          regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
                   'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ'),),
-            
+
             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
@@ -6129,7 +6918,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
             LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
             LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-       
+
            b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
                   b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
@@ -6143,28 +6932,20 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat() ),
          ),
 
-        
+
          EXCIT           =FACT(statut='f',max='**',
                CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
                FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
          ),
          SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
-         COMP_ELAS       =FACT(statut='f',
+
+         COMP_ELAS       =C_COMP_ELAS('CALC_G'),
+
+         COMP_INCR       =FACT(statut='f',
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
-                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS") ),
-               CALCUL_CONTRAINTE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
-      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
-         ),  
-         COMP_INCR       =FACT(statut='f',
-               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
-                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","ELAS_VMIS_PUIS") ),
-               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","VMIS_ISOT_PUIS") ),
+               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,validators=NoRepeat(),max='**'),
@@ -6174,7 +6955,7 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
            SIGM            =SIMP(statut='f',typ=cham_elem),
            DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
          ),
-          
+
          LISSAGE         =FACT(statut='d',
            DEGRE           =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
            LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
@@ -6207,29 +6988,280 @@ CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# MACRO DE COUPLAGE IFS AVEC SATURNE VIA YACS
+#
+from Macro.calc_ifs_dnl_ops import calc_ifs_dnl_ops
+#
+CALC_IFS_DNL= MACRO(nom='CALC_IFS_DNL',op=calc_ifs_dnl_ops,sd_prod=evol_noli,reentrant='f',
+            fr="Calcul de l'évolution dynamique d'une structure couplée à un domaine fluide (résolu avec le code Saturne) via YACS",
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+#IFS
+#=>
+         GROUP_MA_IFS     =SIMP(statut='o',typ=grma,max='**'),
+         NOM_CMP_IFS      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+         UNITE_NOEUD      =SIMP(statut='f',typ='I',defaut= 81 ),
+         UNITE_ELEM       =SIMP(statut='f',typ='I',defaut= 82 ),
+         PAS_INIT         =SIMP(statut='o',typ='R' ),
+#<=
+#IFS
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         MASS_DIAG       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+#IFS
+#=>
+#(une charge force nodale est fournie par le couplage avec code_saturne
+         EXCIT           =FACT(statut='f',max='**',
+#<=
+#IFS
+           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","SUIV","DIDI")),
+#IFS
+#=>
+#(une charge force nodale est fournie par le couplage avec code_saturne
+#           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+#<=
+#IFS
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           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  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         EXCIT_GENE      =FACT(statut='f',max='**',
+           FONC_MULT       =SIMP(statut='f',typ=fonction_sdaster,max='**' ),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene,max='**' ),
+         ),
+         CONTACT         =SIMP(statut='f',typ=char_contact),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+              ),
+         AMOR_RAYL_RIGI = SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE"),),
+         AMOR_MODAL      =FACT(statut='f',
+           regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         PROJ_MODAL      =FACT(statut='f',max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           regles=(PRESENT_PRESENT('MASS_GENE','RIGI_GENE'),),
+           MASS_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           RIGI_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           ACCE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+#-------------------------------------------------------------------         
+         COMP_INCR       =C_COMP_INCR(),
+#-------------------------------------------------------------------         
+         COMP_ELAS       =C_COMP_ELAS('DYNA_NON_LINE'),
+#-------------------------------------------------------------------
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+         ETAT_INIT       =FACT(statut='o',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','ACCE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+         ETAT_INIT       =FACT(statut='f',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','ACCE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+#-------------------------------------------------------------------
+#IFS : pas besoin d'INCREMENT
+#         INCREMENT       =C_INCREMENT(),
+#-------------------------------------------------------------------
+         SCHEMA_TEMPS     =FACT(statut='o',
+            SCHEMA          =SIMP(statut='o',min=1,max=1,typ='TXM',
+            into=("DIFF_CENT","TCHAMWA","NEWMARK","HHT","THETA_METHODE","KRENK"),),
+            COEF_MASS_SHIFT =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+            b_tchamwa = BLOC(condition="SCHEMA=='TCHAMWA'",
+               PHI          =SIMP(statut='f',typ='R',defaut= 1.05),),
+               
+            b_newmark = BLOC(condition="SCHEMA=='NEWMARK'",
+               BETA         =SIMP(statut='f',typ='R',defaut= 0.25),
+               GAMMA        =SIMP(statut='f',typ='R',defaut= 0.5),),
+               
+            b_hht     = BLOC(condition="SCHEMA=='HHT'",
+               ALPHA        =SIMP(statut='f',typ='R',defaut= -0.3 ),
+               MODI_EQUI    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),),
+               
+            b_theta   = BLOC(condition="SCHEMA=='THETA_METHODE'",
+               THETA         =SIMP(statut='f',typ='R',defaut= 1.,val_min=0.5,val_max=100. ),),
+
+            b_krenk   = BLOC(condition="SCHEMA=='KRENK'",
+               KAPPA         =SIMP(statut='f',typ='R',defaut= 1.0,val_min=1.0,val_max=100. ),), 
+               
+            b_explicit= BLOC(condition="SCHEMA=='TCHAMWA'or SCHEMA=='DIFF_CENT'",
+               STOP_CFL     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+               FORMULATION  =SIMP(statut='o',typ='TXM',into=("ACCELERATION",),),),
+               
+            b_implicit= BLOC(condition="SCHEMA!='TCHAMWA'and SCHEMA!='DIFF_CENT'",
+               FORMULATION  =SIMP(statut='o',max=1,typ='TXM',into=("DEPLACEMENT","VITESSE","ACCELERATION"),),),
+         ),
+#-------------------------------------------------------------------         
+         NEWTON          =C_NEWTON(),
+#-------------------------------------------------------------------
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+#-------------------------------------------------------------------
+         CONVERGENCE     =C_CONVERGENCE(),
+#-------------------------------------------------------------------
+         SOLVEUR         =C_SOLVEUR(),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#-------------------------------------------------------------------
+         SUIVI_DDL       =C_SUIVI_DDL(),
+#------------------------------------------------------------------- 
+         AFFICHAGE       =C_AFFICHAGE(),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           RIGI_GEOM     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           bloc_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+              DDL_EXCLUS      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+                                    into=('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','LIAISON','DCX',
+                                          'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                          'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                          'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                          'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+         MODE_VIBR     =FACT(statut='f',min=1,max=1,
+           MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
+           NB_FREQ          =SIMP(statut='f',typ='I',max=1,defaut=3,
+                            fr="Nombre de fréquences propres à calculer"),
+           BANDE            =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Valeur des deux fréquences délimitant la bande de recherche",),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+#-------------------------------------------------------------------
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité",
+                               ang="List of sensitivity parameters"),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         b_info=BLOC(condition="(INFO==2)",
+               fr="filtre les messages émis dans le .mess selon le type de message demandé",
+               INFO_DBG = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               into=("CONTACT",
+                                     "MECA_NON_LINE",
+                                     "PILOTAGE",
+                                     "FACTORISATION",
+                                     "APPARIEMENT"),
+                             ),
+                    ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ZENTNER I.ZENTNER
 CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
                     fr="Calcul d'une matrice interspectrale à partir d'une fonction du temps",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          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' ),
@@ -6239,10 +7271,10 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
          TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -6261,7 +7293,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
 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 rigidité ajoutés",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
                  PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
                  PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
@@ -6301,7 +7333,7 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -6310,27 +7342,35 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),             
              ),
-
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/09/2009   AUTEUR BOYERE E.BOYERE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6372,7 +7412,7 @@ def calc_matr_elem_prod(OPTION,**args):
 
 CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
                     ,fr="Calcul des matrices élémentaires",reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
 
          OPTION          =SIMP(statut='o',typ='TXM',
                                into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
@@ -6485,27 +7525,27 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
            CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 16/11/2009   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE BARGELLINI R.BARGELLINI
 CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Thermique",)},
                fr="Calcule l'évolution métallurgique à partir du résultat d'un calcul thermique",
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
@@ -6536,106 +7576,198 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
            GROUP_MA        =SIMP(statut='f',typ=grma, validators=NoRepeat(), max='**'),
            MAILLE          =SIMP(statut='f',typ=ma, validators=NoRepeat(), max='**'),
          ),
-         OPTION          =SIMP(statut='f',typ='TXM'     
-                             ,into=("META_ELNO_TEMP",) ),
+         OPTION          =SIMP(statut='f',typ='TXM'
+                             ,into=("META_ELNO",) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 
+def calc_miss_sdprod(self, TYPE_RESU, **kwargs):
+    if TYPE_RESU == 'TABLE':
+        return table_sdaster
+    elif TYPE_RESU == 'HARM_GENE':
+        return harm_gene
+    elif TYPE_RESU == 'TRAN_GENE':
+        return tran_gene
+    else:
+        return None
+
 from Macro.calc_miss_ops import calc_miss_ops
 
-CALC_MISS = MACRO(nom="CALC_MISS",op=calc_miss_ops,
-                  fr="Préparation des données puis exécution du logiciel MISS3D",
-                  UIinfo={"groupes":("Résolution",)},
+CALC_MISS = MACRO(nom="CALC_MISS",
+                  op=calc_miss_ops,
+                  sd_prod=calc_miss_sdprod,
+                  fr="Préparation des données, exécution du logiciel Miss3D, et post-traitement",
+                  UIinfo={"groupes":("Résolution","Outils-métier",)},
+
+    TYPE_RESU   = SIMP(statut='o', typ='TXM', into=('HARM_GENE', 'TRAN_GENE', 'TABLE', 'FICHIER'),
+                       fr="Type de résultat produit en post-traitement. FICHIER : pas de post-traitement"),
+    PROJET      = SIMP(statut='f', typ='TXM', defaut='MODELE',
+                       fr="Nom de l'étude Miss"),
+    REPERTOIRE  = SIMP(statut='f', typ='TXM',
+                       fr="Répertoire de travail de Miss"),
+    VERSION     = SIMP(statut='f', typ='TXM', into=("V6.6","V6.5"), defaut="V6.6",
+                       fr="Version de Miss utilisée"),
+
+    TABLE_SOL   = SIMP(statut='o', typ=table_sdaster,
+                       fr="Table des propriétés du sol"),
+
+    # pas de post-traitement
+    b_fichier   = BLOC(condition="TYPE_RESU == 'FICHIER'",
+                       regles=(UN_PARMI('MACR_ELEM_DYNA', 'BASE_MODALE'),),
+        MACR_ELEM_DYNA  = SIMP(statut='f', typ=macr_elem_dyna,
+                               fr="Macro élément produit en amont"),
+        BASE_MODALE     = SIMP(statut='f', typ=mode_meca,
+                               fr="Base de modes"),
+        b_base_modale = BLOC(condition="BASE_MODALE is not None",
+            MATR_RIGI       = SIMP(statut='f', typ=(matr_asse_depl_r, matr_asse_depl_c),),
+            MATR_MASS       = SIMP(statut='f', typ=matr_asse_depl_r ),
+        ),
+        AMOR_REDUIT     = SIMP(statut='f', typ='R', max='**'),
+        GROUP_MA_INTERF = SIMP(statut='o', typ=grma, max='**',
+                               fr="Groupe de mailles de l'interface"),
+
+        UNITE_IMPR_ASTER = SIMP(statut='f', typ='I', defaut=25,
+                                fr="Unité des résultats transmis par Code_Aster à Miss"),
+        UNITE_RESU_IMPE  = SIMP(statut='f', typ='I', defaut=38,
+                                fr="Unité logique des impédances écrites par Miss"),
+        UNITE_RESU_FORC  = SIMP(statut='f', typ='I', defaut=28,
+                                fr="Unité logique des forces sismiques écrites par Miss"),
+    ),
+    # si post-traitement
+    b_donnees   = BLOC(condition="TYPE_RESU != 'FICHIER'",
+        MACR_ELEM_DYNA  = SIMP(statut='f', typ=macr_elem_dyna,
+                               fr="Macro élément produit en amont"),
+        BASE_MODALE     = SIMP(statut='o', typ=mode_meca,
+                               fr="Base de modes"),
+        MATR_RIGI       = SIMP(statut='o', typ=(matr_asse_depl_r, matr_asse_depl_c),),
+        MATR_MASS       = SIMP(statut='o', typ=matr_asse_depl_r ),
+        AMOR_REDUIT     = SIMP(statut='o', typ='R', max='**'),
+        GROUP_MA_INTERF = SIMP(statut='o', typ=grma, max='**',
+                               fr="Groupe de mailles de l'interface"),
+
+        UNITE_IMPR_ASTER = SIMP(statut='f', typ='I',
+                                fr="Unité des résultats transmis par Code_Aster à Miss"),
+        UNITE_RESU_IMPE  = SIMP(statut='f', typ='I',
+                                fr="Unité logique des impédances à relire."),
+        UNITE_RESU_FORC  = SIMP(statut='f', typ='I',
+                                fr="Unité logique des forces sismiques à relire"),
+    ),
+    # Paramètres du calcul Miss
+    PARAMETRE   = FACT(statut='o',
+                       regles=(PRESENT_PRESENT('OFFSET_MAX', 'OFFSET_NB'),
+                               PRESENT_PRESENT('FREQ_MIN', 'FREQ_MAX','FREQ_PAS'),
+                               UN_PARMI('FREQ_MIN', 'LIST_FREQ'),
+                               PRESENT_PRESENT('SPEC_MAX', 'SPEC_NB'),),
+        FREQ_MIN       = SIMP(statut='f', typ='R'),
+        FREQ_MAX       = SIMP(statut='f', typ='R'),
+        FREQ_PAS       = SIMP(statut='f', typ='R'),
+        LIST_FREQ      = SIMP(statut='f', typ='R', max='**'),
+        Z0             = SIMP(statut='f', typ='R', defaut=0.),
+        SURF           = SIMP(statut='f', typ='TXM', into=("OUI","NON",), defaut="NON"),
+        RFIC           = SIMP(statut='f', typ='R', defaut=0.),
+
+        ALGO           = SIMP(statut='f', typ='TXM', into=("DEPL","REGU")),
+        DREF           = SIMP(statut='f', typ='R'),
+        SPEC_MAX       = SIMP(statut='f', typ='R'),
+        SPEC_NB        = SIMP(statut='f', typ='I'),
+        OFFSET_MAX     = SIMP(statut='f', typ='R'),
+        OFFSET_NB      = SIMP(statut='f', typ='I'),
+        TYPE           = SIMP(statut='f', typ='TXM', into=("BINAIRE","ASCII",), defaut="ASCII"),
+    ),
+    # Post-traitement type 1 - tran_gene
+    b_post_tran_gene = BLOC(condition="TYPE_RESU == 'TRAN_GENE'",
+                       regles=(AU_MOINS_UN('ACCE_X', 'ACCE_Y', 'ACCE_Z'),),
+        MODELE         = SIMP(statut='o', typ=(modele_sdaster),),
+        ACCE_X         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Y         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Z         = SIMP(statut='f', typ=fonction_sdaster,),
+        INST_FIN       = SIMP(statut='o', typ='R', fr="Instant final du calcul"),
+        PAS_INST       = SIMP(statut='o', typ='R', fr="Pas de temps du calcul"),
+    ),
+    # Post-traitement type 1 - harm_gene
+    b_post_harm_gene  = BLOC(condition="TYPE_RESU == 'HARM_GENE'",
+                       regles=(AU_MOINS_UN('EXCIT_HARMO', 'ACCE_X', 'ACCE_Y', 'ACCE_Z'),
+                               PRESENT_ABSENT('EXCIT_HARMO', 'ACCE_X', 'ACCE_Y', 'ACCE_Z', 'INST_FIN'),
+                               ENSEMBLE('INST_FIN', 'PAS_INST'),),
+        MODELE         = SIMP(statut='o', typ=(modele_sdaster),),
+        ACCE_X         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Y         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Z         = SIMP(statut='f', typ=fonction_sdaster,),
+        INST_FIN       = SIMP(statut='f', typ='R', fr="Instant final du calcul"),
+        PAS_INST       = SIMP(statut='f', typ='R', fr="Pas de temps du calcul"),
+        # identique à EXCIT de DYNA_LINE_HARM au type attendu pour VECT_ASSE près
+        EXCIT_HARMO    = FACT(statut='f', 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_sdaster,),
+            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, formule_c),),
+            COEF_MULT_C   = SIMP(statut='f', typ='C'),
+            FONC_MULT     = SIMP(statut='f', typ=(fonction_sdaster, nappe_sdaster, formule) ),
+            COEF_MULT     = SIMP(statut='f', typ='R'),
+            PHAS_DEG      = SIMP(statut='f', typ='R', defaut=0.),
+            PUIS_PULS     = SIMP(statut='f', typ='I', defaut=0),
+        ),
+    ),
+    # Post-traitement type 2
+    b_post_table = BLOC(condition="TYPE_RESU == 'TABLE'",
+                        regles=(AU_MOINS_UN('ACCE_X', 'ACCE_Y', 'ACCE_Z'),),
+        MODELE         = SIMP(statut='o', typ=(modele_sdaster),),
+        GROUP_NO       = SIMP(statut='o', typ=grno, max='**',
+                              fr="Liste des groupes de noeud de post-traitement"),
+        ACCE_X         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Y         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Z         = SIMP(statut='f', typ=fonction_sdaster,),
+        INST_FIN       = SIMP(statut='o', typ='R', fr="Instant final du calcul"),
+        PAS_INST       = SIMP(statut='o', typ='R', fr="Pas de temps du calcul"),
+        NORME          = SIMP(statut='o', typ='R',
+                              fr="Valeur de la norme du spectre d'oscillateur" ),
+        AMOR_SPEC_OSCI = SIMP(statut='o', typ='R', max='**',
+                              fr="Amortissement du spectre d'oscillateur"),
+        LIST_FREQ      = SIMP(statut='f', typ=listr8_sdaster,
+                              fr="Fréquences utilisées pour le calcul du spectre d'oscillateur"),
+    ),
 
-   OPTION      = FACT(statut='o',
-                      regles=(UN_PARMI('TOUT','MODULE'),),
-      TOUT        = SIMP(statut='f',typ='TXM',into=("OUI",)),
-      MODULE      = SIMP(statut='f',typ='TXM',into=("MISS_IMPE",)),     # "PRE_MISS","MISS_EVOL",
-   ),
-   TABLE_SOL   = SIMP(statut='f', typ=table_sdaster),
-
-   PROJET      = SIMP(statut='o', typ='TXM'),  
-   REPERTOIRE  = SIMP(statut='f', typ='TXM'),
-   VERSION     = SIMP(statut='f', typ='TXM', into=("V1_4",), defaut="V1_4"),
-
-   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),
-   UNITE_RESU_FORC  = SIMP(statut='f',typ='I',defaut=0),
-   PARAMETRE   = FACT(statut='f',
-                      regles=(PRESENT_PRESENT('OFFSET_MAX','OFFSET_NB'),
-                              PRESENT_PRESENT('FREQ_MIN','FREQ_MAX','FREQ_PAS'),
-                              PRESENT_PRESENT('LFREQ_NB','LFREQ_LISTE'),
-                              UN_PARMI('FREQ_MIN', 'LFREQ_NB'),
-                              PRESENT_PRESENT('CONTR_NB','CONTR_LISTE'),
-                              PRESENT_PRESENT('SPEC_MAX','SPEC_NB'),),
-      FREQ_MIN       = SIMP(statut='f',typ='R'), 
-      FREQ_MAX       = SIMP(statut='f',typ='R'),
-      FREQ_PAS       = SIMP(statut='f',typ='R'),
-      LFREQ_NB       = SIMP(statut='f',typ='I'),
-      LFREQ_LISTE    = SIMP(statut='f',typ='R',max='**'),
-      Z0             = SIMP(statut='f',typ='R',defaut=0.), 
-      SURF           = SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
-      ISSF           = SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
-      TYPE           = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII",),defaut="ASCII"),
-      RFIC           = SIMP(statut='f',typ='R',defaut=0.),
-      DIRE_ONDE      = SIMP(statut='f',typ='R',max='**'),
-
-      FICH_RESU_IMPE = SIMP(statut='f',typ='TXM'),
-      FICH_RESU_FORC = SIMP(statut='f',typ='TXM'),
-
-      ALGO           = SIMP(statut='f',typ='TXM',into=("DEPL","REGU")),
-      DREF           = SIMP(statut='f',typ='R'),
-      SPEC_MAX       = SIMP(statut='f',typ='R'),
-      SPEC_NB        = SIMP(statut='f',typ='I'),
-      OFFSET_MAX     = SIMP(statut='f',typ='R'),
-      OFFSET_NB      = SIMP(statut='f',typ='I'),
-
-      FICH_POST_TRAI = SIMP(statut='f',typ='TXM'),
-      CONTR_NB       = SIMP(statut='f',typ='I'),
-      CONTR_LISTE    = SIMP(statut='f',typ='R',max='**'),
-   ),
-   INFO        = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+    INFO        = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
 )
 
-#& MODIF COMMANDE  DATE 27/04/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-
 # RESPONSABLE NISTOR I.NISTOR
 
 from Macro.calc_modal_ops import calc_modal_ops
@@ -6647,7 +7779,7 @@ def calc_modal_prod(self,AMORTISSEMENT,**args):
 
 
 CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
                       sd_prod=calc_modal_prod,
                     fr="Calcul des modes propres reels ou complexes dans une seule commande",
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
@@ -6655,22 +7787,14 @@ CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          INST            =SIMP(statut='f',typ='R',defaut=0.),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
-         CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),  
-         SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
-         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"  ),
-         ),),
+         CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
          METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
                                into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
          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 ), 
+           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 ),
@@ -6679,13 +7803,13 @@ CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
            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 ),  
+           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 ),
          ),
          b_qz =BLOC(condition = "METHODE == 'QZ'",
-           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),  
-         ), 
+           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),
+         ),
          MODE_RIGIDE          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                                fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
          CALC_FREQ       =FACT(statut='d',min=0,
@@ -6705,13 +7829,12 @@ CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
                                    fr="Recherche des valeurs propres dans une bande donnée",
                FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),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","COMPLEXE"),
-                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+                                   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' ),
-             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 ),
@@ -6729,41 +7852,41 @@ CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/07/2009   AUTEUR TORKHANI M.TORKHANI 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
-# RESPONSABLE Mohamed TORKHANI
+# RESPONSABLE TORKHANI M.TORKHANI
 
 from Macro.calc_mode_rotation_ops import calc_mode_rotation_ops
 
 CALC_MODE_ROTATION=MACRO(nom="CALC_MODE_ROTATION",op=calc_mode_rotation_ops,sd_prod=table_container,
                   reentrant='n',fr="calculer les fréquences et modes d'un système en fonction des vitesses de rotation",
-                  UIinfo={"groupes":("Résolution",)},
-                         
+                  UIinfo={"groupes":("Résolution","Dynamique",)},
+
                   MATR_A          =SIMP(statut='o',typ=matr_asse_depl_r ),
                   MATR_B          =SIMP(statut='o',typ=matr_asse_depl_r ),
                   MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
                   MATR_GYRO       =SIMP(statut='f',typ=matr_asse_depl_r ),
                   VITE_ROTA       =SIMP(statut='f',typ='R',max='**'),
-                        
+
                   METHODE         =SIMP(statut='f',typ='TXM',defaut="QZ",
                                         into=("QZ","SORENSEN",) ),
-                                               
+
                   CALC_FREQ       =FACT(statut='d',min=0,
                          OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","CENTRE",),
                                            fr="Choix de l option et par conséquent du shift du problème modal" ),
@@ -6778,30 +7901,30 @@ CALC_MODE_ROTATION=MACRO(nom="CALC_MODE_ROTATION",op=calc_mode_rotation_ops,sd_p
                               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
                               ),
                              ),
-                                  
+
                   VERI_MODE       =FACT(statut='d',min=0,
                   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") ),),
-);      
-#& MODIF COMMANDE  DATE 27/04/2010   AUTEUR DESROCHES X.DESROCHES 
+);
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 def calc_no_prod(RESULTAT,**args):
@@ -6810,16 +7933,12 @@ def calc_no_prod(RESULTAT,**args):
 
 CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='f',
             fr="Enrichir une SD Résultat par des champs aux noeuds calculés à partir de champs aux éléments évalués aux noeuds",
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
          RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),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'),
-                 CONCEPT_SENSIBLE("SEPARE"),
-                 DERIVABLE('RESULTAT'),),
+                 ),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
          NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
@@ -6837,47 +7956,31 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='f',
              PRECISION       =SIMP(statut='o',typ='R',),),
          OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                                into=("FORC_NODA","REAC_NODA",
-                                     "FORC_NODA_NONL",
-                                     "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_DEPL",
-                                     "EPSI_NOEU_DEPL",
+                                     "DERA_NOEU",
+                                     "DURT_NOEU",
+                                     "EFCA_NOEU","EFGE_NOEU",
+                                     "ENDO_NOEU",
+                                     "ENEL_NOEU",
+                                     "EPMG_NOEU",
+                                     "EPSG_NOEU",
+                                     "EPSI_NOEU",
                                      "EPSP_NOEU"     ,
                                      "EPVC_NOEU","EPFD_NOEU","EPFP_NOEU","EPFP_NOEU",
-                                     "EQUI_NOEU_EPME","EQUI_NOEU_EPSI","EQUI_NOEU_SIGM",
-                                     "ERRE_NOEU_ELEM","QIRE_NOEU_ELEM",
-                                     "FLUX_NOEU_TEMP",
-                                     "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_ELGA",
-                                     "SIGM_NOEU_CART","SIGM_NOEU_COQU","SIGM_NOEU_DEPL",
-                                     "SIGM_NOEU_SIEF",
-                                     "SIPO_NOEU_DEPL","SIPO_NOEU_SIEF",
-                                     "SIRE_NOEU_DEPL",
-                                     "VARI_NOEU","EXTR_NOEU_VARI","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='f',typ=modele_sdaster),
-         ),
-         b_forc_nonl     =BLOC(condition = """(OPTION == 'FORC_NODA_NONL')""",
-             MODELE          =SIMP(statut='f',typ=modele_sdaster),
-             COMP_INCR       =C_COMP_INCR(),
-         ),
-         
+                                     "EPMQ_NOEU","EPEQ_NOEU","SIEQ_NOEU",
+                                     "ERME_NOEU","ERTH_NOEU","QIRE_NOEU",
+                                     "FLUX_NOEU",
+                                     "HYDR_NOEU",
+                                     "INTE_NOEU",
+                                     "META_NOEU",
+                                     "PMPB_NOEU",
+                                     "PRAC_NOEU",
+                                     "SIEF_NOEU",
+                                     "SICA_NOEU","SICO_NOEU","SIGM_NOEU",
+                                     "SIPO_NOEU",
+                                     "VAEX_NOEU","VARI_NOEU","DISS_NOEU",) ),
+
+
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
          EXCIT           =FACT(statut='f',max='**',
@@ -6886,45 +7989,37 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='f',
            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,validators=NoRepeat(),max='**'),
          MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
-         GROUP_MA_RESU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-         MAILLE_RESU     =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
-         GROUP_NO_RESU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-         NOEUD_RESU      =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+
 )  ;
-#& MODIF COMMANDE  DATE 03/05/2010   AUTEUR PROIX J-M.PROIX 
+#& MODIF COMMANDE  DATE 07/12/2010   AUTEUR GENIAUT S.GENIAUT 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PROIX J-M.PROIX
 CALC_POINT_MAT=OPER(nom="CALC_POINT_MAT",op=33,sd_prod=table_sdaster,reentrant='f',
             UIinfo={"groupes":("Résolution",)},
-            fr="intégrer une loi de comportement",
+            fr="Intégrer une loi de comportement",
      MATER           =SIMP(statut='o',typ=mater_sdaster,max=1),
      COMP_INCR       =C_COMP_INCR(),
-     COMP_ELAS       =FACT(statut='f',max='**',
-           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
-           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER")),
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT",) ),
-         ),
+     COMP_ELAS       =C_COMP_ELAS('CALC_POINT_MAT'),
      INCREMENT       =C_INCREMENT(),
      NEWTON          =C_NEWTON(),
      CONVERGENCE     =C_CONVERGENCE(),
@@ -6938,9 +8033,9 @@ CALC_POINT_MAT=OPER(nom="CALC_POINT_MAT",op=33,sd_prod=table_sdaster,reentrant='
     ## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
      ANGLE      =SIMP(statut='f',typ='R',max=1, defaut=0.),
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2)),
-     
+
      regles=(UN_PARMI('SIXX','EPXX'),UN_PARMI('SIYY','EPYY'),UN_PARMI('SIZZ','EPZZ'),
-             UN_PARMI('SIXY','EPXY'),UN_PARMI('SIXZ','EPXZ'),UN_PARMI('SIYZ','EPYZ'),),     
+             UN_PARMI('SIXY','EPXY'),UN_PARMI('SIXZ','EPXZ'),UN_PARMI('SIYZ','EPYZ'),),
      SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
      SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
      SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
@@ -6973,13 +8068,34 @@ CALC_POINT_MAT=OPER(nom="CALC_POINT_MAT",op=33,sd_prod=table_sdaster,reentrant='
      VARI_INIT=FACT(statut='f',
             VALE = SIMP(statut='o',typ='R',max='**'),
                        ),
+     MATR_C1=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     MATR_C2=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     VECT_IMPO=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+                              ),
       NB_VARI_TABLE  =SIMP(statut='f',typ='I',max=1,),
+
+      ARCHIVAGE       =FACT(statut='f',
+       LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+       INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+       PAS_ARCH        =SIMP(statut='f',typ='I' ),
+       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+                           ),
      );
 
-#& MODIF COMMANDE  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 28/02/2011   AUTEUR BARGELLI R.BARGELLINI 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -7009,7 +8125,7 @@ from Macro.calc_precont_ops import calc_precont_ops
 
 CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
                    fr="Imposer la tension définie par le BPEL dans les cables",
-                   reentrant='f',UIinfo={"groupe":("Modélisation",)},
+                   reentrant='f',UIinfo={"groupes":("Modélisation",)},
          reuse =SIMP(statut='f',typ='evol_noli'),
          MODELE           =SIMP(statut='o',typ=modele_sdaster),
          CHAM_MATER       =SIMP(statut='o',typ=cham_mater),
@@ -7017,7 +8133,6 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
          CABLE_BP         =SIMP(statut='o',typ=cabl_precont,validators=NoRepeat(),max='**'),
          CABLE_BP_INACTIF =SIMP(statut='f',typ=cabl_precont,validators=NoRepeat(),max='**'),
          INCREMENT        =C_INCREMENT(),
-         NEWTON           =C_NEWTON(),
          RECH_LINEAIRE    =C_RECH_LINEAIRE(),
          CONVERGENCE      =C_CONVERGENCE(),
           ETAT_INIT       =FACT(statut='f',
@@ -7040,6 +8155,13 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             NUME_DIDI       =SIMP(statut='f',typ='I'),
             INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
           ),
+         METHODE = SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPL_EX")),
+         b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
+                           NEWTON = C_NEWTON(),
+                        ),
+         b_meth_impl_ex = BLOC(condition = "METHODE == 'IMPL_EX'",
+                           IMPL_EX = C_IMPL_EX(),
+                        ),
           SOLVEUR         =C_SOLVEUR(),
           INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
           TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
@@ -7050,23 +8172,105 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
 
          COMP_INCR       =C_COMP_INCR(),
   )  ;
-#& MODIF COMMANDE  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# ======================================================================
+# RESPONSABLE GNICOLAS
+def calc_sensi_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_SENSI=OPER(nom="CALC_SENSI",op=132,sd_prod=calc_sensi_prod,reentrant='f',
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+            fr="Compléter ou créer un résultat en calculant des champs dérivés )",
+     MODELE          =SIMP(statut='f',typ=modele_sdaster),
+     CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+     RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Résultat d'une commande globale"),
+
+     regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                    'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
+             CONCEPT_SENSIBLE("SEPARE"),
+             DERIVABLE('RESULTAT'),),
+     TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+     INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+     LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+     CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+     b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+     b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+         PRECISION       =SIMP(statut='o',typ='R'),),
+     LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+     TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+     MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+
+     OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+
+                  into=('DEDE_ELNO','DEDE_NOEU','DESI_ELNO',
+                  'DESI_NOEU','DETE_ELNO','DETE_NOEU',
+                  'EFGE_ELNO','EPSI_ELGA','EPSI_ELNO',
+                  'EPSP_ELNO','FLUX_ELNO','FLUX_NOEU','REAC_NODA','SIEF_ELGA',
+                  'SIEF_ELNO','SIEF_NOEU',
+                  'SIGM_ELNO','SIGM_NOEU',
+                  'SIPO_ELNO','VARI_ELNO'),
+            ),
+
+
+   # -- mots cles inutiles mais qui permettent de reutiliser certaines routines :
+     EXCIT =FACT(statut='f',max='**', CHARGE=SIMP(statut='o',typ=(char_meca,) ),),
+     NORME =SIMP(statut='f',typ='TXM',defaut="XXXX", into=("XXXX",),),
+
+
+     SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                           fr="Liste des paramètres de sensibilité.",
+                           ang="List of sensitivity parameters"),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+     TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 # RESPONSABLE CORUS M.CORUS
@@ -7076,7 +8280,7 @@ from Macro.calc_spec_ops import calc_spec_ops
 CALC_SPEC=MACRO(nom="CALC_SPEC",op= calc_spec_ops,sd_prod=table_fonction,
                      reentrant='n',
                      fr="Calcule une matrice interspectrale ou des fonctions de transferts",
-                     UIinfo={"groupes":("Fonction",)},
+                     UIinfo={"groupes":("Fonctions",)},
          TAB_ECHANT      =FACT(statut='f',
            NOM_TAB         =SIMP(statut='o',typ=table_sdaster),
            LONGUEUR_ECH    =FACT(statut='f',
@@ -7098,7 +8302,7 @@ CALC_SPEC=MACRO(nom="CALC_SPEC",op= calc_spec_ops,sd_prod=table_fonction,
 #-- Cas de la matrice interspectrale --#
          INTERSPE        =FACT(statut='f',
            FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
-           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ", 
+           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ",
              DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
                                  ),
                               ),
@@ -7108,30 +8312,30 @@ CALC_SPEC=MACRO(nom="CALC_SPEC",op= calc_spec_ops,sd_prod=table_fonction,
            REFER           =SIMP(statut='o',typ='I',max='**'),
            FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
 #           DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
-           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ", 
+           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ",
              DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
                                  ),
                               ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 );
-#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR COURTOIS M.COURTOI
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
@@ -7155,6 +8359,7 @@ from Macro.calc_table_ops import calc_table_ops
 
 CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                  fr="Opérations sur une table",
+                 UIinfo={"groupes":("Tables",)},
                  reentrant='f',
    regles=(DERIVABLE('TABLE'),),
    TABLE  = SIMP(statut='o',typ=table_sdaster),
@@ -7162,7 +8367,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                     fr = "Suite des opérations à effectuer sur la table",
       OPERATION = SIMP(statut='o', typ='TXM',
                   into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'AJOUT', 'OPER', 'SUPPRIME')),
-      
+
       b_filtre = BLOC(condition="OPERATION == 'FILTRE'",
                       fr="Sélectionne les lignes de la table vérifiant un critère",
          NOM_PARA  = SIMP(statut='o',typ='TXM'),
@@ -7184,32 +8389,32 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
             PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
          ),
       ),
-      
+
       b_extr = BLOC(condition="OPERATION ==  'EXTR'",
                     fr="Extrait une ou plusieurs colonnes de la table",
          NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                          fr="Noms des colonnes à extraire"),
       ),
-   
+
       b_suppr = BLOC(condition="OPERATION ==  'SUPPRIME'",
                     fr="Supprime une ou plusieurs colonnes de la table",
          NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
                          fr="Noms des colonnes à supprimer"),
       ),
-   
+
       b_renomme = BLOC(condition="OPERATION == 'RENOMME'",
                        fr="Renomme un ou plusieurs paramètres de la table",
          NOM_PARA = SIMP(statut='o', typ='TXM', validators=NoRepeat(), min=2, max=2,
                          fr="Couple (ancien nom du paramètre, nouveau nom du paramètre)",),
       ),
-   
+
       b_tri = BLOC(condition="OPERATION == 'TRI'",
                    fr="Ordonne les lignes de la table selon les valeurs d'un ou plusieurs paramètres",
          NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
          ORDRE    = SIMP(statut='f',typ='TXM',defaut="CROISSANT",
                          into=("CROISSANT","DECROISSANT") ),
       ),
-      
+
       b_comb = BLOC(condition="OPERATION == 'COMB'",
                     fr="Combine deux tables ayant éventuellement des paramètres communs",
          TABLE    = SIMP(statut='o',typ=table_sdaster,
@@ -7220,14 +8425,14 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
          RESTREINT = SIMP(statut='f', typ='TXM', into=('OUI', 'NON'), defaut='NON',
                           fr="Restreint la fusion uniquement aux lignes où les NOM_PARA sont communs"),
       ),
-      
+
       b_append = BLOC(condition="OPERATION == 'AJOUT'",
                     fr="Ajoute une ligne à la table initiale",
          NOM_PARA = SIMP(statut='o',typ='TXM',max='**',
                          fr="Noms des paramètres dont les valeurs sont fournies sous VALE"),
          VALE     = SIMP(statut='o',typ=assd,max='**', fr='Valeurs des paramètres'),
       ),
-      
+
       b_oper = BLOC(condition="OPERATION == 'OPER'",
                     fr="Applique une formule dans laquelle les variables sont les paramètres de la table",
          FORMULE  = SIMP(statut='o',typ=formule,
@@ -7236,7 +8441,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                          fr="Nom de la nouvelle colonne"),
       ),
    ),
-   
+
    SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),max=1,
                       fr="Paramètre de sensibilité",
                       ang="Sensitivity parameter"),
@@ -7244,27 +8449,27 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
                 fr="Titre de la table produite"),
    INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GALENNE E.GALENNE
 CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
                 fr="Définir un champ theta pour le calcul du taux de restitution d'énergie"
                     +" ou des facteurs d'intensité de contraintes",
          regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
@@ -7306,27 +8511,27 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
          ),
          GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          IMPRESSION      =FACT(statut='f',
-           UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 def calc_vect_elem_prod(OPTION,**args):
@@ -7337,7 +8542,7 @@ def calc_vect_elem_prod(OPTION,**args):
   raise AsException("type de concept resultat non prevu")
 
 CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
                     fr="Calcul des seconds membres élémentaires",
          OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
                                                            "FORC_NODA") ),
@@ -7350,7 +8555,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr
               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','SUPER_MAILLE'),),
@@ -7365,35 +8570,35 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentr
            CHARGE           =SIMP(statut='o',typ=char_ther,validators=NoRepeat(),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,validators=NoRepeat(),max='**'),
          ),
-         
+
          b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
            SIEF_ELGA         =SIMP(statut='o',typ=cham_elem),
            CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
            MODELE            =SIMP(statut='f',typ=modele_sdaster),
-         ),       
+         ),
 ) ;
-#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#& MODIF COMMANDE  DATE 07/12/2010   AUTEUR GENIAUT S.GENIAUT 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ABBAS M.ABBAS
 
@@ -7421,47 +8626,38 @@ CALCUL=OPER(nom="CALCUL",op=26,sd_prod=table_container,reentrant='f',
           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
           NUME_ORDRE      =SIMP(statut='o',typ='I'),),
      COMP_INCR       =C_COMP_INCR(),
-     COMP_ELAS       =FACT(statut='f',max='**',
-          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 ),
-          RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("IMPLICITE",)),
-          RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
-                                     "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
-          DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
-          ),
+     COMP_ELAS       =C_COMP_ELAS('CALCUL'),
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 ) ;
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
                   reentrant='n',fr="Recombiner les modes de Fourier d'une SD Résultat dans des directions particulières",
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements",)},
          RESULTAT        =SIMP(statut='o',typ=(fourier_elas,fourier_ther),),
          ANGL            =SIMP(statut='o',typ='R',max='**'),
-         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6,
-             into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL","TEMP","FLUX_ELNO_TEMP"),),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6,into=("DEPL","REAC_NODA",
+                               "SIEF_ELGA","EPSI_ELNO","SIGM_ELNO","TEMP","FLUX_ELNO"),),
 ) ;
-#& MODIF COMMANDE  DATE 08/12/2008   AUTEUR SELLENET N.SELLENET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7499,7 +8695,7 @@ def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
 COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
                     fr="Effectuer la combinaison linéaire de matrices assemblées",
                     reentrant='f',
-            UIinfo={"groupes":("Résultats et champs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=(UN_PARMI('COMB_R','COMB_C','CALC_AMOR_GENE' ),),
          COMB_R          =FACT(statut='f',max='**',
            PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
@@ -7523,29 +8719,29 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
          ),
          SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
 )  ;
-#& MODIF COMMANDE  DATE 09/11/2009   AUTEUR AUDEBERT S.AUDEBERT 
+#& MODIF COMMANDE  DATE 21/03/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE AUDEBERT S.AUDEBERT
 COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
                      fr="Réponse sismique par recombinaison modale par une méthode spectrale",
                      reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Dynamique",)},
          regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
                  UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),
                  UN_PARMI('MONO_APPUI','MULTI_APPUI' ),),
@@ -7561,14 +8757,14 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
          ),
          MODE_CORR       =SIMP(statut='f',typ=mode_meca ),
-         
+
          AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
          LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
          AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
-         
+
          MASS_INER       =SIMP(statut='f',typ=table_sdaster ),
          CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         
+
          EXCIT           =FACT(statut='o',max='**',
            regles=(UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
            AXE             =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",),
@@ -7586,12 +8782,12 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
            b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
              SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),min=3,max=3 ),
              ECHELLE         =SIMP(statut='f',typ='R',min=3,max=3),
-           ),       
+           ),
            NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
            b_mult_appui    =BLOC(condition = "(MULTI_APPUI != None)",
                                  regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),)                              
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),)
          ),
          MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),
                                  fr="excitation imposée unique" ),
@@ -7602,7 +8798,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
            regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
-           
+
          ),
          b_correle =BLOC(condition = "MULTI_APPUI == 'CORRELE' ",
            COMB_MULT_APPUI =FACT(statut='f',max='**',
@@ -7631,7 +8827,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
                    AU_MOINS_UN('DX','DY','DZ' ),),
            NOM_CAS         =SIMP(statut='o',typ='TXM',max='**'),
            NUME_CAS        =SIMP(statut='o',typ='I',max='**'),
-           MODE_STAT       =SIMP(statut='f',typ=mode_meca, ),
+           MODE_STAT       =SIMP(statut='o',typ=mode_meca, ),
            NOEUD_REFE      =SIMP(statut='f',typ=no),
            NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -7640,9 +8836,9 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
            DZ              =SIMP(statut='f',typ='R' ),
          ),
          OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),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") ),
+                               into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO","SIEF_ELGA",
+                                     "EFGE_ELNO","REAC_NODA","FORC_NODA","EFCA_ELNO",
+                                     "SIPO_ELNO") ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          IMPRESSION      =FACT(statut='f',max='**',
            regles=(EXCLUS('TOUT','NIVEAU'),),
@@ -7651,10 +8847,10 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -7783,6 +8979,7 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
 #        ------------------------------------------------------------------
          b_extr          =BLOC(condition = "OPERATION == 'EXTR'",
              regles=(AU_MOINS_UN('MAILLAGE','FISSURE','RESULTAT','TABLE'),),
+#                     PRESENT_PRESENT('GRILLE_AUX','FISSURE'),),
              MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
              FISSURE         =SIMP(statut='f',typ=(fiss_xfem) ),
              RESULTAT        =SIMP(statut='f',typ=(resultat_sdaster) ),
@@ -7790,9 +8987,13 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
              b_extr_maillage =BLOC(condition = "MAILLAGE != None and TABLE == None",
                  NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
              ),
-             b_extr_fissure  =BLOC(condition = "FISSURE != None",
-                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("LTNO","LNNO","GRLTNO","GRLNNO","STNO","STNOR","BASLOC")),
+
+             b_extr_fissure  = BLOC(condition = "FISSURE != None",
+                 NOM_CHAM=SIMP(statut='o',typ='TXM',into=("LTNO","LNNO","GRLTNO","GRLNNO","STNO","STNOR","BASLOC",
+                                                                  "GRI.LNNO","GRI.LTNO","GRI.GRLNNO","GRI.GRLTNO")),
+
              ),
+                 
              b_extr_table    =BLOC(condition = "TABLE != None",
                       regles=( EXCLUS('MODELE','MAILLAGE'),
                                EXCLUS('PROL_ZERO','MAILLAGE'),),
@@ -7856,10 +9057,102 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 30/06/2008   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 03/01/2011   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+
+from Macro.crea_elem_ssd_ops import crea_elem_ssd_ops
+
+def crea_elem_ssd_prod(self,NUME_DDL,**args):
+    if NUME_DDL:
+        self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+    return macr_elem_dyna
+
+CREA_ELEM_SSD=MACRO(nom="CREA_ELEM_SSD",
+         op=crea_elem_ssd_ops,
+         sd_prod=crea_elem_ssd_prod,
+         reentrant='n',
+         fr="Creation de macro-element dynamique en enchainant les commandes : \
+             CALC_MATR_ELEM, NUME_DDL, ASSE_MATRICE, MODE_ITER_SIMULT, \
+             DEFI_INTERF_DYNA, DEFI_BASE_MODALE et MACR_ELEM_DYNA",
+         UIinfo={"groupes":("Matrices/vecteurs",)},
+
+# pour CAL_MATR_ELEM + NUME_DDL + ASSE_MATRICE + MODE_ITER_SIMULT + MODE_STATIQUE
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=CO,defaut=None),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**'),
+
+# pour DEFI_INTERF_DYNA
+         INTERFACE       =FACT(statut='o',max='**',
+           regles=(ENSEMBLE('NOM','TYPE'),
+                   UN_PARMI('NOEUD','GROUP_NO'),),
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
+         ),
+
+# pour DEFI_BASE_MODALE
+         BASE_MODALE = FACT(statut='o',max = 1,
+           TYPE   =SIMP(statut='o',typ='TXM',max=1,into=('CLASSIQUE','RITZ',)),
+           b_ritz = BLOC(condition = "TYPE == 'RITZ' ",
+             NMAX_MODE_INTF  =SIMP(statut='f',typ='I',defaut=10),
+           ),
+         ),
+
+         INFO          =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+         SOLVEUR         =C_SOLVEUR(),
+
+# pour le calcul modal
+         CALC_FREQ       =FACT(statut='d',min=0,
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
+                                   fr="Choix de l option et par consequent du shift du probleme 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 donnee",
+               FREQ            =SIMP(statut='o',typ='R',
+                                     fr="Frequence autour de laquelle on cherche les frequences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               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 donnee",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 9999,val_min=0 ),
+               FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max='**',
+                                     fr="Valeurs des frequences delimitant les bandes de recherche"),
+             ),
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
+                                   fr="Choix du pseudo-produit scalaire pour la resolution du probleme quadratique" ),
+           ),
+
+
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -7880,7 +9173,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
             UIinfo={"groupes":("Maillage",)},
          regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
                         'DETR_GROUP_MA', 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE',
-                        'QUAD_LINE', 'REPERE','RESTREINT'),),
+                        'QUAD_LINE', 'REPERE','RESTREINT','PENTA15_18',),),
 
 
 
@@ -7978,6 +9271,14 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
            PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
            PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
          ),
+         PENTA15_18     =FACT(statut='f',fr="Passage PENTA15 -> PENTA18",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
          QUAD_LINE     =FACT(statut='f',fr="Passage quadratique -> linéaire",
            regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -8003,16 +9304,16 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
            TAILLE_MIN      =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO('ELGA'),),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 #
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 25/05/2010   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -8043,7 +9344,7 @@ def crea_resu_prod(TYPE_RESU,**args):
   raise AsException("type de concept resultat non prevu")
 
 CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Résultats et champs",)},
                fr="Créer ou enrichir une structure de donnees resultat à partir de champs aux noeuds",
 
          OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",),
@@ -8130,7 +9431,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
 
            ECLA_PG         =FACT(statut='o',
              regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO('ELGA'),),
              MODELE_INIT     =SIMP(statut='o',typ=modele_sdaster),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
@@ -8225,23 +9526,23 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/07/2009   AUTEUR TORKHANI M.TORKHANI 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 
@@ -8257,13 +9558,14 @@ def crea_table_prod(TYPE_TABLE, **args):
 
 CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
                 fr="Création d'une table à partir d'une fonction ou de deux listes",
-                reentrant='f',UIinfo={"groupes":("Table",)},
+                reentrant='f',
+                UIinfo={"groupes":("Tables",)},
 
-           regles=(EXCLUS('FONCTION','LISTE'),),
+           regles=(EXCLUS('FONCTION','LISTE','RESU'),),
 
            LISTE=FACT(statut='f',max='**',
                  fr="Creation d'une table a partir de listes",
-                 regles=(UN_PARMI('LISTE_I','LISTE_R','LISTE_K')), 
+                 regles=(UN_PARMI('LISTE_I','LISTE_R','LISTE_K')),
                         PARA     =SIMP(statut='o',typ='TXM'),
                         TYPE_K   =SIMP(statut='f',typ='TXM',defaut='K8',
                                     into=('K8','K16','K24')),
@@ -8284,31 +9586,68 @@ CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
                                     fr="Liste des paramètres de sensibilité.",
                                     ang="List of sensitivity parameters"),
            ),
+           RESU=FACT(statut='f',max=1,
+                fr="Creation d'une table a partir d'un resultat ou d'un champ",
+                regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                        UN_PARMI('TOUT_CMP','NOM_CMP'),
+                        PRESENT_ABSENT('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
+                        AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
+                        ),
+                        CHAM_GD  =SIMP(statut='f',typ=cham_gd_sdaster),
+                        RESULTAT =SIMP(statut='f',typ=(resultat_sdaster) ),
+                        b_resultat   =BLOC(condition = "RESULTAT != None",
+                               regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
+                                              'MODE','LIST_MODE','FREQ','LIST_FREQ'),),
+                               NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+                               TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+                               LIST_ORDRE      =SIMP(statut='f',typ=(listis_sdaster) ),
+                               INST            =SIMP(statut='f',typ='R',max='**'),
+                               LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                               MODE            =SIMP(statut='f',typ='I',max='**'),
+                               LIST_MODE       =SIMP(statut='f',typ=(listis_sdaster) ),
+                               FREQ            =SIMP(statut='f',typ='R',max='**'),
+                               LIST_FREQ       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                                       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                                       PRECISION       =SIMP(statut='o',typ='R',),),
+                            ),
+                      TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                      NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+                      TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                      GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                      GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                      MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                      NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                      ),
+
            TYPE_TABLE = SIMP(statut='f', typ='TXM', defaut="TABLE",
                              into=('TABLE', 'TABLE_FONCTION', 'TABLE_CONTENEUR'),),
-           
+
            TITRE=SIMP(statut='f',typ='TXM',max='**'),
 )  ;
 
 
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 
@@ -8325,10 +9664,10 @@ DEBUG=PROC(nom="DEBUG",op=137,
      IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
                            statut='f',typ='TXM',into=("OUI","NON")),
  );
-#& MODIF COMMANDE  DATE 07/09/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 03/01/2011   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -8430,11 +9769,12 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
 
          IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
 
+         INFO     = SIMP(statut='f', typ='I', defaut=1, into=(1,2),),
 );
-#& MODIF COMMANDE  DATE 01/03/2010   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -8453,7 +9793,7 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
 DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=mode_meca,
                      reentrant='f',
                      fr="Définit la base d'une sous-structuration dynamique ou d'une recombinaison modale",
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
          regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS','ORTHO_BASE'),),
          CLASSIQUE       =FACT(statut='f',
            INTERF_DYNA     =SIMP(statut='o',typ=interf_dyna_clas ),
@@ -8504,14 +9844,13 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=mode_meca,
            b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
-             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-             FILTRAGE_MATRICE =SIMP(statut='f',typ='R',defaut=-1.0,),
-             MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
          ),
 
@@ -8520,23 +9859,23 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=mode_meca,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE MICHEL S.MICHEL
 
@@ -8568,7 +9907,7 @@ from Macro.defi_cable_bp_ops import defi_cable_bp_ops
 
 DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precont,
                    fr="Calculer les profils initiaux de tension le long des cables de précontrainte d'une structure en béton",
-                   reentrant='n',UIinfo={"groupe":("Modélisation",)},
+                   reentrant='n',UIinfo={"groupes":("Modélisation",)},
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
@@ -8582,36 +9921,36 @@ DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precon
            GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),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 ),  
+         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,
-           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
          ),
          CONE            =FACT(statut='f',
-           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
-           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0 ),
            PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
          ),
-         TITRE           =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/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE MICHEL S.MICHEL
 
@@ -8633,23 +9972,23 @@ DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n
            GROUP_NO_FUT    =SIMP(statut='f',typ=grno,validators=NoRepeat(),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 ),  
+         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,
-           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
          ),
-         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          CONE            =FACT(statut='f',min=0,
-           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
-           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0, defaut=0.E+0 ),  
+           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0, defaut=0.E+0 ),
            PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#& MODIF COMMANDE  DATE 23/02/2011   AUTEUR LAVERNE J.LAVERNE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -8676,16 +10015,31 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
           MONOCRISTAL    =FACT(statut='f', max='**',
              MATER           =SIMP(statut='o', typ=mater_sdaster, max=1),
              ECOULEMENT      =SIMP(statut='o', typ='TXM', max=1,
+                                into=('MONO_VISC1', 'MONO_VISC2', 'MONO_VISC3', 'MONO_DD_KR', 'MONO_DD_CFC', 'MONO_DD_CC',),
                    fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écoulement viscoplastique"),
-             ECRO_ISOT       =SIMP(statut='o', typ='TXM', max=1,
-                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage isotrope"),
-             ECRO_CINE       =SIMP(statut='o', typ='TXM', max=1,
-                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"),
              ELAS            =SIMP(statut='f', typ='TXM', max=1,
                    fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le comportement élastique (un et un seul)"),
-             FAMI_SYST_GLIS  =SIMP(statut='o',typ='TXM', max=1,
+             b_non_dd =BLOC(condition="ECOULEMENT=='MONO_VISC1' or ECOULEMENT=='MONO_VISC2' or ECOULEMENT=='MONO_VISC3'",
+                   ECRO_ISOT       =SIMP(statut='f', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage isotrope"),
+                   ECRO_CINE       =SIMP(statut='f', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"),
+                   FAMI_SYST_GLIS  =SIMP(statut='o',typ='TXM', max=1,
                                 into=('BASAL', 'PRISMATIQUE', 'OCTAEDRIQUE', 'PYRAMIDAL1',
-                                'PYRAMIDAL2', 'CUBIQUE1', 'CUBIQUE2', 'MACLAGE', 'JOINT_GRAIN', 'RL', 'UNIAXIAL','BCC24'),),
+                                'PYRAMIDAL2', 'CUBIQUE1', 'CUBIQUE2', 'MACLAGE', 'UNIAXIAL','BCC24'),),
+                                ),
+             b_dd_kr =BLOC(condition="ECOULEMENT=='MONO_DD_KR' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,
+                                into=('BCC24',),defaut=('BCC24',),),
+                                ),
+             b_dd_cfc =BLOC(condition="ECOULEMENT=='MONO_DD_CFC' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,
+                                into=('OCTAEDRIQUE',),defaut=('OCTAEDRIQUE',),),
+                                ),
+             b_dd_cc =BLOC(condition="ECOULEMENT=='MONO_DD_CC' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='o',typ='TXM', max=1,
+                                into=('CUBIQUE1',),defaut=('CUBIQUE1',),),
+                                ),
                                 ),
 
           ROTA_RESEAU =SIMP(statut='f', typ='TXM', max=1,into=('NON','POST','CALC'),defaut='NON',
@@ -8737,44 +10091,43 @@ DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
                                        "GRANGER_FP_V",
                                        "BETON_UMLV_FP",
                                        "ROUSS_PR",
-                                       "NADAI_B",
                                        "BETON_DOUBLE_DP",
                                        ),),
 # on pourrait ajouter TOUT_GROUP_FIBRE
 
                                 ) );
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction_sdaster,
                     fr="Définir la valeur d'une grandeur invariante",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
          VALE            =SIMP(statut='o',typ='R',),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 27/04/2010   AUTEUR DESOZA T.DESOZA 
+#& MODIF COMMANDE  DATE 23/02/2011   AUTEUR MASSIN P.MASSIN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -8795,6 +10148,7 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
                   op        = 30,
                   sd_prod   = char_contact,
                   fr        = "Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
+                  #en        = "Allows the definition of contact surfaces as well as unilateral conditions",
                   reentrant = 'n',
                   UIinfo    = {"groupes":("Modélisation",)},
 
@@ -8806,63 +10160,59 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
 # FORMULATION (UNIQUE PAR OCCURRENCE DE DEFI_CONTACT)
 
          FORMULATION     =SIMP(statut='o',
-                               typ='TXM',
                                position='global',
+                               typ='TXM',
+                               fr="Choix d'une formulation de contact ou de liaisons unilatérales",
                                defaut="DISCRETE",
                                into=("DISCRETE","CONTINUE","XFEM","LIAISON_UNIL",),),
 
-# PARAMETRE GENERAL: FROTTEMENT (A TERME DEVRA ETRE AU NIVEAU ZONE)
-
-           FROTTEMENT      =SIMP(statut='f',
-                                 typ='TXM',
-                                 position='global',
-                                 defaut="SANS",
-                                 into=("COULOMB","SANS",)),
-
-### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
-
-         b_contact=BLOC(condition = "FORMULATION != 'LIAISON_UNIL' ",
-
-# PARAMETRE GENERAL: APPARIEMENT
-
-           LISSAGE         =SIMP(statut='f',
-                                 typ='TXM',
-                                 defaut="NON",
-                                 into=("OUI","NON"),),
-
-# PARAMETRE GENERAL: VERIFICATION DE L'ORIENTATION ET DE LA COHERENCE DES NORMALES
+# PARAMETRE GENERAL : FROTTEMENT
 
+         FROTTEMENT      =SIMP(statut='f',
+                               position='global',
+                               typ='TXM',
+                               fr="Choix d'un modèle de frottement (uniquement pour les formulations de contact)",
+                               defaut="SANS",
+                               into=("COULOMB","SANS",)),
+
+### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT MAILLE, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
+
+         b_contact_mail=BLOC(condition = "((FORMULATION == 'CONTINUE') or (FORMULATION == 'DISCRETE'))",
+#          ARRET DU CALCUL POUR LE MODE SANS RESOLUTION DU CONTACT
+           STOP_INTERP   = SIMP(statut='f',
+                                typ='TXM',
+                                fr="Arrête le calcul dès qu'une interpénétration est détectée en mode RESOLUTION='NON'",
+                                defaut="NON",
+                                into=("OUI","NON")),
+#          LISSAGE DES NORMALES PAR MOYENNATION AUX NOEUDS
+           LISSAGE       = SIMP(statut='f',
+                                typ='TXM',
+                                fr="Lissage des normales par moyennation aux noeuds",
+                                defaut="NON",
+                                into=("OUI","NON")),
+#          VERIFICATION DE L'ORIENTATION ET DE LA COHERENCE DES NORMALES
            VERI_NORM       =SIMP(statut='f',
                                  typ='TXM',
+                                 fr="Vérification de l'orientation (sortante) des normales aux surfaces",
                                  defaut="OUI",
                                  into=("OUI","NON"),),
+           ),
 
-# PARAMETRE GENERAL: BOUCLE SUR GEOMETRIE
+### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
 
-           b_bouc_geom_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
-                                 REAC_GEOM =SIMP(statut='f',
-                                                 typ='TXM',
-                                                 into=("AUTOMATIQUE","CONTROLE","SANS",),
-                                                 defaut="AUTOMATIQUE",
-                                                 ),
-                                 b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
-                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.05),
-                                   ),
-                                 b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                   NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
-                                   ),
-                                 ),
+         b_contact=BLOC(condition = "FORMULATION != 'LIAISON_UNIL' ",
+
+# PARAMETRE GENERAL : BOUCLE DE GEOMETRIE
 
-           b_bouc_geom_cont=BLOC(condition = "FORMULATION == 'CONTINUE' ",
+           b_bouc_geom_mail=BLOC(condition = "(FORMULATION == 'DISCRETE' or FORMULATION == 'CONTINUE')",
                                  REAC_GEOM =SIMP(statut='f',
                                                  typ='TXM',
                                                  into=("AUTOMATIQUE","CONTROLE","SANS",),
                                                  defaut="AUTOMATIQUE",
                                                  ),
                                  b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
-                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=10),
+                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.01),
                                    ),
                                  b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
                                    NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
@@ -8876,7 +10226,7 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
                                                  defaut="SANS",
                                                  ),
                                  b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
-                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=10),
                                    RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.0001),
                                    ),
                                  b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
@@ -8885,7 +10235,7 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
                                  ),
 
 
-# PARAMETRE GENERAL: BOUCLE SUR CONTACT
+# PARAMETRE GENERAL : BOUCLE DE CONTACT
 
            b_bouc_cont_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
                                  ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
@@ -8906,54 +10256,73 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
                                  ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
                                                       into=("MULT","MAXI")),
                                  b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
-                                   ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                                         ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
                                    ),
                                  b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
-                                   ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+                                                         ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
                                    ),
                                  ),
 
-# PARAMETRE GENERAL: BOUCLE SUR FROTTEMENT
+# PARAMETRE GENERAL : BOUCLE DE FROTTEMENT
 
            b_bouc_frot     = BLOC(condition = "FROTTEMENT=='COULOMB' and ((FORMULATION == 'CONTINUE') or (FORMULATION == 'XFEM')) ",
                                   REAC_FROT =SIMP(statut='f',
                                                   typ='TXM',
+                                                  defaut="AUTOMATIQUE",
                                                   into=("AUTOMATIQUE","CONTROLE",),
-                                                  defaut="AUTOMATIQUE",),
+                                                  ),
                                   b_automatique = BLOC(condition = "REAC_FROT == 'AUTOMATIQUE' ",
-                                    ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2),
-                                    RESI_FROT      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                                       ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=10),
+                                                       RESI_FROT      = SIMP(statut='f',typ='R',defaut=0.0001),
                                     ),
                                   b_controle    = BLOC(condition = "REAC_FROT == 'CONTROLE' ",
-                                    NB_ITER_FROT   = SIMP(statut='f',typ='I',defaut = 2),
+                                                       NB_ITER_FROT   = SIMP(statut='f',typ='I',defaut = 2),
                                     ),
-                                 ),
+                                  ),
 
-# PARAMETRE GENERAL: METHODES DISCRETES
+# PARAMETREs GENERAUX : METHODES DISCRETES
 
            b_para_discret  = BLOC(condition = "FORMULATION == 'DISCRETE' ",
-                                  STOP_SINGULIER= SIMP(statut='f',typ='TXM',defaut="OUI",
-                                                       into=("OUI","NON")),
-                                  NB_RESOL      = SIMP(statut='f',typ='I', defaut=10 ),
-                                  STOP_INTERP   = SIMP(statut='f',typ='TXM',defaut="NON",
-                                                       into=("OUI","NON")),
-                                  TOLE_INTERP   = SIMP(statut='f',typ='R',defaut = 0.),
-                                  RESI_ABSO     = SIMP(statut='f',typ='R',
-                                  fr="Critere de convergence (niveau d'interpenetration autorise)"),
-                                  REAC_ITER     = SIMP(statut='f',typ='I',defaut=3,
-                                   fr="Frequence de reinitialisation de la conjugaison"),
-                                  ITER_GCP_MAXI = SIMP(statut='f',typ='I',defaut=0,
-                                  fr="Nombre d'iterations maximal pour le GCP"),
-
-                                  PRE_COND      = SIMP(statut='f',typ='TXM',defaut="SANS",into=("DIRICHLET","SANS"),
-                                  fr="Choix d'un preconditionneur (accelere la convergence)"),
-                                  ITER_PRE_MAXI = SIMP(statut='f',typ='I',defaut=0,
-                                  fr="Nombre d'iterations maximal pour le preconditionneur"),
-                                  COEF_RESI     = SIMP(statut='f',typ='R',defaut = 1.,
-                                  fr="Critere_Convergence_Preconditionneur = COEF_RESI*Critere_Convergence_GCP",),
-                                  RECH_LINEAIRE = SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",
-                                                       into=("ADMISSIBLE","NON_ADMISSIBLE"),
-                                                 fr="Autorise-t-on de sortir du domaine admissible lors de la recherche lineaire",),
+#                                 ## METHODES DE DUALISATION ##
+                                  STOP_SINGULIER= SIMP(statut='f',
+                                                       typ='TXM',
+                                                       fr="Tient compte de la singularité de la matrice de contact",
+                                                       defaut="OUI",
+                                                       into=("OUI","NON"),),
+                                  NB_RESOL      = SIMP(statut='f',
+                                                       typ='I',
+                                  fr="Nombre de résolutions simultanées pour la construction du complément de Schur",
+                                                       defaut=10,),
+#                                 ## GCP ##
+                                  RESI_ABSO     = SIMP(statut='f',
+                                                       typ='R',
+                                  fr="Critère de convergence (niveau d'interpénétration autorisé pour 'GCP')",),
+                                  REAC_ITER     = SIMP(statut='f',
+                                                       typ='I',
+                                                       fr="Fréquence de réinitialisation de la conjugaison ('GCP')",
+                                                       defaut=3,),
+                                  ITER_GCP_MAXI = SIMP(statut='f',
+                                                       typ='I',
+                                                       fr="Nombre d'itérations maximal ('GCP')",
+                                                       defaut=0,),
+                                  PRE_COND      = SIMP(statut='f',
+                                                       typ='TXM',
+                                                       fr="Choix d'un préconditionneur (accélère la convergence de 'GCP')",
+                                                       defaut="SANS",
+                                                       into=("DIRICHLET","SANS"),),
+                                  ITER_PRE_MAXI = SIMP(statut='f',
+                                                       typ='I',
+                                                       fr="Nombre d'itérations maximal pour le préconditionneur ('GCP')",
+                                                       defaut=0,),
+                                  COEF_RESI     = SIMP(statut='f',
+                                                       typ='R',
+                                                       fr="Critère de convergence du préconditionneur (COEF_RESI*RESI_ABSO)",
+                                                       defaut = 1.,),
+                                  RECH_LINEAIRE = SIMP(statut='f',
+                                                       typ='TXM',
+                                  fr="Autorisation de sortie du domaine admissible lors de la recherche linéaire",
+                                                       defaut="ADMISSIBLE",
+                                                       into=("ADMISSIBLE","NON_ADMISSIBLE"),),
                                   ),
            ), #fin bloc b_contact
 
@@ -8961,290 +10330,294 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
 
 # AFFECTATION - CAS LIAISON_UNILATERALE
 
-           b_affe_unil     = BLOC(condition = "FORMULATION == 'LIAISON_UNIL'",
-                                  ZONE=FACT(statut='o',
-                                            max='**',
-
+         b_affe_unil     = BLOC(condition = "FORMULATION == 'LIAISON_UNIL'",
+                                ZONE=FACT(statut='o',
+                                          max='**',
 # -- Liaison unilatérale
-                                            regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
-                                            GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-                                            MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-                                            GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-                                            NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-
-                                            NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
-                                            COEF_IMPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
-                                            COEF_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
-
+                                          regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+                                          GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+                                          MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+#
+                                          NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                                          COEF_IMPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+                                          COEF_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
 # -- Incompatibilité avec CL
-                                            SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-                                            SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
 
-                                            ),
-                                  ), #fin bloc b_affe_unil
 
-# AFFECTATION - CAS DISCRET
+                                          ),
+                                ), #fin bloc b_affe_unil
 
-           b_affe_discret  = BLOC(condition = "FORMULATION == 'DISCRETE'",
-                                  ZONE=FACT(statut='o',
-                                            max='**',
+# AFFECTATION - CAS DISCRET
 
+         b_affe_discret  = BLOC(condition = "FORMULATION == 'DISCRETE'",
+                                ZONE=FACT(statut='o',
+                                          max='**',
 # -- Appariement
-                                            APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                                                  into=("NODAL","MAIT_ESCL"),),
-
-                                            regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
-                                                    UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
-                                            GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
-                                            MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-                                            GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
-                                            MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-
-                                            NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
-                                                                  into=("MAIT","MAIT_ESCL","ESCL"),),
-
-                                            VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
-                                                                  into=("AUTO","FIXE","VECT_Y")),
-
-                                            b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
-                                              MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
-
-                                            b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
-                                              MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
-
-                                            VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
-                                                                  into=("AUTO","FIXE","VECT_Y")),
-
-                                            b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
-                                              ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
-
-                                            b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
-                                              ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
+                                          APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                                                into=("NODAL","MAIT_ESCL"),),
+#
+                                          regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+                                                  UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+                                          GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+#
+                                          NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                                                into=("MAIT","MAIT_ESCL","ESCL"),),
+#
+                                          VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
 
-                                            TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
-                                                             into  =("PROCHE","FIXE")),
+                                          b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+                                            MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
 
-                                            b_appa_fixe     =BLOC(condition = "TYPE_APPA == 'FIXE'",
-                                              DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
-                                              ),
+                                          b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+                                            MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
 
-                                            DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-                                            DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-                                            b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
-                                              CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
-                                              ),
+                                          b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+                                            ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
 
-                                            DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                            DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                          b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+                                            ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                                           into  =("PROCHE","FIXE")),
 
-                                            TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
-                                            TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+                                          b_appa_fixe     =BLOC(condition = "TYPE_APPA == 'FIXE'",
+                                            DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+                                            ),
+#
+                                          DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+                                            CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
+                                            ),
 
+                                          DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                          DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                          TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+                                          TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
 # -- Incompatibilité avec CL
-                                            SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-                                            SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-
+                                          SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          SANS_MAILLE     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_MA   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+# -- Mode sans calcul
+                                          RESOLUTION      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                                          b_verif=BLOC(condition = "RESOLUTION == 'NON' ",
+                                            TOLE_INTERP   = SIMP(statut='f',typ='R',defaut = 0.),
+                                            ),
 # -- Résolution
-                                            ALGO_CONT       =SIMP(statut='o',typ='TXM',defaut="CONTRAINTE",
-                                                                  into=("CONTRAINTE","LAGRANGIEN","PENALISATION","VERIF","GCP"),),
-
-                                            b_active=BLOC(condition = "ALGO_CONT == 'CONTRAINTE' ",
-                                                         fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
-                                              GLISSIERE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                                              b_glissiere=BLOC(condition = "GLISSIERE == 'OUI' ",
-                                                ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
-                                                ),
-                                              ),
-
-                                            b_verif=BLOC(condition = "ALGO_CONT == 'VERIF' ",
-                                                         fr="Paramètres de la méthode sans calcul de contact",
-                                              GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-                                              ),
-
-                                            b_penal_contact=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
-                                                                 fr="Paramètres de la méthode pénalisée (contact)",
-                                              E_N           =SIMP(statut='o',typ='R'),
-                                              ),
-
-                                            b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
-                                                              fr="Paramètres du frottement",
-                                              COULOMB       =SIMP(statut='o',typ='R',),
-                                              COEF_MATR_FROT=SIMP(statut='f',typ='R',defaut=0.E+0),
-                                              ALGO_FROT     =SIMP(statut='o',typ='TXM',defaut="PENALISATION",
-                                                                  into=("PENALISATION","LAGRANGIEN"),),
-
-                                              b_penal_frot=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
-                                                                fr="Paramètres de la méthode pénalisée (frottement)",
-                                                E_T         =SIMP(statut='o',typ='R'),
-                                                ),
-                                              ),
-                                            ), #fin mot-clé facteur ZONE
-                                  ), #fin bloc b_affe_discret
-
+                                          ALGO_CONT       =SIMP(statut='o',typ='TXM',defaut="CONTRAINTE",
+                                                                into=("CONTRAINTE","LAGRANGIEN","PENALISATION","GCP"),),
+
+                                          b_active=BLOC(condition = "ALGO_CONT == 'CONTRAINTE' ",
+                                                        fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                                                        GLISSIERE=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                                                        b_glissiere=BLOC(condition = "GLISSIERE == 'OUI' ",
+                                                                         ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
+                                                                        ),
+                                                        ),
+#
+                                          b_penal_contact=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                                               fr="Paramètres de la méthode pénalisée (contact)",
+                                                               E_N=SIMP(statut='o',typ='R'),
+                                                               ),
+#
+                                          b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
+                                                            fr="Paramètres du frottement de Coulomb",
+                                                            COULOMB       =SIMP(statut='o',typ='R',),
+                                                            COEF_MATR_FROT=SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                            ALGO_FROT     =SIMP(statut='o',typ='TXM',defaut="PENALISATION",
+                                                                                into=("PENALISATION","LAGRANGIEN"),),
+#
+                                                            b_penal_frot=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                              fr="Paramètres de la méthode pénalisée (frottement)",
+                                                                              E_T=SIMP(statut='o',typ='R'),
+                                                                              ),
+                                                           ),
+                                          ), #fin mot-clé facteur ZONE
+                                ), #fin bloc b_affe_discret
 
 # AFFECTATION - CAS CONTINUE
 
-           b_affe_continue = BLOC(condition = "FORMULATION == 'CONTINUE'",
-                                  ZONE=FACT(statut='o',
-                                            max='**',
-
+         b_affe_continue = BLOC(condition = "FORMULATION == 'CONTINUE'",
+                                ZONE=FACT(statut='o',
+                                          max='**',
 # -- Appariement
-                                            APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                                                  into=("MAIT_ESCL",)),
-
-                                            regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
-                                                    UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
-                                            GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
-                                            MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-                                            GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
-                                            MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-
-                                            NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
-                                                                  into=("MAIT","MAIT_ESCL","ESCL"),),
-
-                                            VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
-                                                                  into=("AUTO","FIXE","VECT_Y")),
-
-                                            b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
-                                              MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
-
-                                            b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
-                                              MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
-
-                                            VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
-                                                                  into=("AUTO","FIXE","VECT_Y")),
-
-                                            b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
-                                              ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
-
-                                            b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
-                                              ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
-                                              ),
+                                          APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                                                into=("MAIT_ESCL",)),
+#
+                                          regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+                                                  UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+                                          GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+#
+                                          NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                                                into=("MAIT","MAIT_ESCL","ESCL"),),
+#
+                                          VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
 
-                                            TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
-                                                             into  =("PROCHE","FIXE")),
+                                          b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+                                            MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
 
-                                            b_appa_fixe=BLOC(condition = "TYPE_APPA == 'FIXE'",
-                                              DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
-                                              ),
+                                          b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+                                            MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
 
-                                            DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-                                            DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
-                                            b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
-                                              CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
-                                              ),
+                                          b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+                                            ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
 
-                                            DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                            DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                          b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+                                            ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                                           into  =("PROCHE","FIXE")),
 
-                                            TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
-                                            TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+                                          b_appa_fixe=BLOC(condition = "TYPE_APPA == 'FIXE'",
+                                            DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+                                            ),
+#
+                                          DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+                                            CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
+                                            ),
 
+                                          DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                          DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                          TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+                                          TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
 # -- Incompatibilité avec CL
-
-                                            SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-                                            SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-
-                                            FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
-                                            b_fond_fissure =BLOC(condition = "FOND_FISSURE == 'OUI' ",
-                                                                 fr="Traitement en fond de fissure",
-                                              regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
-                                              NOEUD_FOND    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                                              GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                                              MAILLE_FOND   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                                              GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-                                              ),
-
-                                            RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
-                                            b_raccord_surf =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",
-                                                                 fr="Traitement du raccord surfacique",
-                                              regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
-                                              NOEUD_RACC    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                                              GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                                              ),
-
-                                            EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
-
+                                          SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          SANS_MAILLE     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_MA   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+#
+                                          FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                          b_fond_fissure  =BLOC(condition = "FOND_FISSURE == 'OUI' ",
+                                                                fr="Traitement en fond de fissure",
+                                          regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+                                          NOEUD_FOND    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                          GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                          MAILLE_FOND   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                          GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                                                ),
+#
+                                          RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                          b_raccord_surf =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",
+                                                               fr="Traitement du raccord surfacique",
+                                                               regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+                                          NOEUD_RACC    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                          GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                                               ),
+#
+                                          EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+# -- Mode sans calcul
+                                          RESOLUTION       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                                          b_verif=BLOC(condition = "RESOLUTION == 'NON' ",
+                                                       TOLE_INTERP   = SIMP(statut='f',typ='R',defaut = 0.),
+                                                       ),
 # -- Fonctionnalités spécifiques 'CONTINUE'
-                                            INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",
-                                                                   into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
-                                                                                         "NCOTES" ,"NCOTES1" ,"NCOTES2"),),
-
-                                            CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
-
-                                            GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
-
-                                            ALGO_CONT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
-                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
-
-                                            b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
-                                                            fr="Parametres de la formulation Lagrangienne",
-                                              COEF_CONT     =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                              ),
-                                            b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
-                                                            fr="Parametres du Lagrangien augmenté",
-                                              COEF_REGU_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
-                                              COEF_STAB_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
-                                              COEF_PENA_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
-                                              ),
-                                            b_cont_pena =BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                          INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",
+                                                                 into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
+                                                                                       "NCOTES" ,"NCOTES1" ,"NCOTES2"),),
+#
+                                          CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",
+                                                                into=("OUI","INTERPENETRE","NON"),),
+#
+                                          GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+#
+                                          ALGO_CONT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                into=("STANDARD","AVANCE","PENALISATION"),),
+
+                                          b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
+                                                          fr="Paramètres de la formulation Lagrangienne",
+                                                          COEF_CONT = SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          ),
+                                          b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
+                                                          fr="Paramètres du Lagrangien augmenté",
+                                                          COEF_REGU_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          COEF_STAB_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          COEF_PENA_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          ),
+                                          b_cont_pena=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
                                                             fr="Paramètres de la méthode pénalisée",
-                                              COEF_PENA_CONT  =SIMP(statut='o',typ='R'),),
-
-                                            COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                                            b_compliance=BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
-                                              ASPERITE      =SIMP(statut='o',typ='R',),
-                                              E_N           =SIMP(statut='o',typ='R',),
-                                              E_V           =SIMP(statut='f',typ='R',defaut=0.E+0),
-                                              ),
-
-                                            b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement",
-                                              COULOMB          =SIMP(statut='o',typ='R',),
-                                              SEUIL_INIT     =SIMP(statut='f',typ='R',defaut=0.E+0),
-
-                                              regles=(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
-                                              SANS_NOEUD_FR    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                                              SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                                              b_sans_group_no_frot=BLOC(condition="SANS_GROUP_NO_FR != None or SANS_NO_FR != None",
-                                                                        fr="Direction(s) de frottement à exclure",
-                                                                        EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3),
-                                                                        EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),
-                                                ),
-
-                                              ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
-                                                                    into=("STANDARD","AVANCE","PENALISATION"),),
-                                              b_frot_std      =BLOC(condition = "ALGO_FROT == 'STANDARD' ",
-                                                                    fr="Parametres de la formulation Lagrangienne",
-                                                                   COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                                ),
-                                              b_frot_avc      =BLOC(condition = "ALGO_FROT == 'AVANCE' ",
-                                                                    fr="Parametres du Lagrangien augmenté",
-                                                                   COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                                                   COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                                                   COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                                ),
-                                              b_frot_pena =BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
-                                                                    fr="Paramètres de la méthode pénalisée",
-                                                                   COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
-                                                ),
+                                                            COEF_PENA_CONT  =SIMP(statut='o',typ='R'),
+                                                            ),
+#
+                                          COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                                          b_compliance=BLOC(condition = "COMPLIANCE == 'OUI' ",
+                                                            fr="Paramètres de la compliance",
+                                                            ASPERITE = SIMP(statut='o',typ='R',),
+                                                            E_N      = SIMP(statut='o',typ='R',),
+                                                            E_V      = SIMP(statut='f',typ='R',defaut=0.E+0),
+                                            ),
+#
+                                          b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
+                                                            fr="Paramètres du frottement de Coulomb",
+                                                            COULOMB    = SIMP(statut='o',typ='R',),
+                                                            SEUIL_INIT = SIMP(statut='f',typ='R',defaut=0.E+0),
+#
+                                          regles=(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
+                                          SANS_NOEUD_FR    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                                            b_sans_group_no_frot=BLOC(condition = " SANS_GROUP_NO_FR != None or \
+                                                                                                    SANS_NOEUD_FR != None ",
+                                                            fr="Direction de frottement à exclure (uniquement dans le cas 3D)",
+                                                            DIRE_EXCL_FROT=SIMP(statut='f',typ='R',min=3,max=3),
+                                                            ),
 
-                                              USURE          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
-                                              b_usure        =BLOC(condition = "USURE == 'ARCHARD' ",
-                                                                   fr="Parametres de la loi d'usure d'Archard",
-                                                                   K =SIMP(statut='o',typ='R',),
-                                                                   H =SIMP(statut='o',typ='R',val_min=1E-8),
-                                                ),
+                                            ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+                                            b_frot_std      =BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+                                                                  fr="Paramètres de la formulation Lagrangienne",
+                                                                  COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  ),
+                                            b_frot_avc      =BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+                                                                  fr="Paramètres du Lagrangien augmenté",
+                                                                  COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  ),
+                                            b_frot_pena     =BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                  fr="Paramètres de la méthode pénalisée",
+                                                                  COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
+                                                                  ),
+#
+                                            USURE           =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
+                                            b_usure         =BLOC(condition = "USURE == 'ARCHARD' ",
+                                                                  fr="Parametres de la loi d'usure d'Archard",
+                                                                  K =SIMP(statut='o',typ='R',),
+                                                                  H =SIMP(statut='o',typ='R',val_min=1E-8),
+                                                                  ),
 
-                                              ), #fin bloc b_frottement
-                                            ), #fin mot-clé facteur ZONE
-                                  ), #fin bloc b_affe_continue
+                                            ), #fin bloc b_frottement
+                                          ), #fin mot-clé facteur ZONE
+                                ), #fin bloc b_affe_continue
 
 
 # AFFECTATION - CAS XFEM
@@ -9263,76 +10636,82 @@ DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
                                                              into=("GAUSS","FPG2","FPG3","FPG4","FPG6","FPG7",
                                                                    "NOEUD","SIMPSON","SIMPSON1","NCOTES","NCOTES1","NCOTES2"),),
 
-                                       CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
 
-                                       GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
-                                       RELATION         = SIMP(statut='f',typ='TXM',defaut="NON",into=("CZM_XFEM","NON"),),
+                                       RELATION       = SIMP(statut='f',typ='TXM',defaut="NON",
+                                                             into=("CZM_EXP_REG","CZM_LIN_REG","NON"),),
 
                                        ALGO_LAGR      = SIMP(statut='f',typ='TXM',defaut="VERSION1",
                                                              into=("NON","VERSION1","VERSION2"),),
                                        COEF_ECHELLE   = SIMP(statut='f',typ='R',defaut=1.E+6),
 
-                                       ALGO_CONT      =SIMP(statut='f',typ='TXM',defaut="STANDARD",
-                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+                                       ALGO_CONT      = SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION","CZM"),),
+                                                                  
+                                       b_cont_nczm =BLOC(condition = "ALGO_CONT!='CZM'",
+                                                CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                                GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                                ),
 
-                                       b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
-                                                       fr="Parametres de la formulation Lagrangienne",
-                                         COEF_CONT    =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                         ),
-                                       b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",fr="Parametres du Lagrangien augmenté",
-                                         COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                         COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
-                                         COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
-                                         ),
+                                       b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD'",
+                                                fr="Parametres de la formulation Lagrangienne",
+                                                COEF_CONT    =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                ),
+             
+                                       b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
+                                                 fr="Parametres du Lagrangien augmenté",
+                                                 COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                 COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 ),
 
                                        b_cont_pen=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
-                                         fr="Paramètre de la méthode pénalisée",
-                                         COEF_PENA_CONT =SIMP(statut='o',typ='R'),
-                                         ),
-
-                                       b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement",
-                                         COULOMB      =SIMP(statut='o',typ='R',),
-                                         SEUIL_INIT   =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 fr="Paramètre de la méthode pénalisée",
+                                                 COEF_PENA_CONT =SIMP(statut='o',typ='R'),
+                                                 ),
 
-                                         ALGO_FROT    =SIMP(statut='f',typ='TXM',defaut="STANDARD",
-                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+                                       b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' and  ALGO_CONT != 'CZM' ",
+                                                 fr="Paramètres du frottement",
+                                                 COULOMB      =SIMP(statut='o',typ='R',),
+                                                 SEUIL_INIT   =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 ALGO_FROT    =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                            into=("STANDARD","AVANCE","PENALISATION"),),
 
-                                         b_frot_std=BLOC(condition = "ALGO_FROT == 'STANDARD' ",
-                                                         fr="Parametres de la formulation Lagrangienne",
-                                           COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                           ),
-                                         b_frot_avc=BLOC(condition = "ALGO_FROT == 'AVANCE' ",
-                                                         fr="Parametres du Lagrangien augmenté",
-                                           COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                                           COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
-                                           COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
-                                           ),
-                                         b_frot_pen=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
-                                                         fr="Paramètre de la méthode pénalisée",
-                                           COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
-                                           ),
-                                         ), #fin bloc b_frottement
+                                                 b_frot_std=BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+                                                                  fr="Parametres de la formulation Lagrangienne",
+                                                                  COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  ),
+                                                 b_frot_avc=BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+                                                                  fr="Parametres du Lagrangien augmenté",
+                                                                  COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                                  COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                                  ),
+                                                 b_frot_pen=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                  fr="Paramètre de la méthode pénalisée",
+                                                                  COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
+                                                                  ),
+                                                        ), #fin bloc b_frottement
                                        ), #fin mot-clé facteur ZONE
                              ), #fin bloc b_affe_xfem
 
                   ) #fin OPER
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='n',
@@ -9346,26 +10725,26 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='
                                  val_min=-90.E+0,val_max=90.E+0   ),
          ),
          IMPRESSION      =FACT(statut='f',
-           UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 def DEFIC_prod(self,ACTION,UNITE,**args):
@@ -9416,12 +10795,12 @@ DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_pr
                   FICHIER   =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
            ),
 
-           INFO          =SIMP(statut='f',typ='I',into=(1,2) ),           
+           INFO          =SIMP(statut='f',typ='I',into=(1,2) ),
            )
-#& MODIF COMMANDE  DATE 24/08/2009   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -9447,6 +10826,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
 # ------------------------------------------------------------------------------------------------------------------------
 
     MODELE                =SIMP(statut='o',typ=modele_sdaster),
+    MODELE_GRILLE         =SIMP(statut='f',typ=modele_sdaster,max=1,position='global'),
 
 # ------------------------------------------------------------------------------------------------------------------------
 #                       fissure/interface
@@ -9463,13 +10843,13 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
       regles              =UN_PARMI('GROUP_MA_FISS','FONC_LN','FORM_FISS','CHAM_NO_LSN'),
 
 # impossible de faire des regles dans des blocs condition, dommage
-#       b_fissure           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",fr="Regles pour les fissures",           
+#       b_fissure           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",fr="Regles pour les fissures",
 #                 regles    =(ENSEMBLE('FONC_LN','FONC_LT'),
 #                             ENSEMBLE('CHAM_NO_LSN','CHAM_NO_LST'),
 #                             ENSEMBLE('GROUP_MA_FISS','GROUP_MA_FOND')),
 #                                ),
 # 
-#       b_interface           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",fr="Regles pour les interfaces",           
+#       b_interface           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",fr="Regles pour les interfaces",
 #                 regles    =(PRESENT_ABSENT('FONC_LN','FONC_LT'),
 #                             PRESENT_ABSENT('CHAM_NO_LSN','CHAM_NO_LST'),
 #                             PRESENT_ABSENT('GROUP_MA_FISS','GROUP_MA_FOND')),
@@ -9481,21 +10861,30 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
       CHAM_NO_LST         =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
       GROUP_MA_FISS       =SIMP(statut='f',typ=grma,min=1,max=1),
       GROUP_MA_FOND       =SIMP(statut='f',typ=grma,min=1,max=1),
-      FORM_FISS   =SIMP(statut='f',typ='TXM',into=("ELLIPSE","CYLINDRE","DEMI_PLAN","SEGMENT","DEMI_DROITE","INCLUSION","DROITE") ),
-      b_ellipse           =BLOC(condition = "FORM_FISS == 'ELLIPSE' ",fr="Paramètres de la fissure elliptique",           
-           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
-           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+      FORM_FISS   =SIMP(statut='f',typ='TXM',into=("ELLIPSE","RECTANGLE","CYLINDRE","DEMI_PLAN",
+                                                   "SEGMENT","DEMI_DROITE","INCLUSION","DROITE") ),
+      b_ellipse           =BLOC(condition = "FORM_FISS == 'ELLIPSE' ",fr="Paramètres de la fissure elliptique",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
+           COTE_FISS      =SIMP(statut='f',typ='TXM',defaut="IN",into=("IN","OUT",) ),    ),
+      b_rectangle         =BLOC(condition = "FORM_FISS == 'RECTANGLE' ",fr="Paramètres de la fissure rectangulaire",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           RAYON_CONGE    =SIMP(statut='f',typ='R',val_min=0.,defaut=0.),
            CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
            VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
            VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
            COTE_FISS      =SIMP(statut='f',typ='TXM',defaut="IN",into=("IN","OUT",) ),    ),
       b_cylindre          =BLOC(condition = "FORM_FISS == 'CYLINDRE' ",fr="Paramètres de la fissure cylindrique",
-           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
-           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
            CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
            VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
            VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),),
-      b_demiplan          =BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",fr="Paramètres de la fissure plane à front droit", 
+      b_demiplan          =BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",fr="Paramètres de la fissure plane à front droit",
            PFON           =SIMP(statut='o',typ='R',min=3,max=3),
            NORMALE        =SIMP(statut='o',typ='R',min=3,max=3),
            DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
@@ -9509,31 +10898,51 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
            POINT          =SIMP(statut='o',typ='R',min=3,max=3),
            DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
       b_inclusion         =BLOC(condition = "FORM_FISS == 'INCLUSION' ",fr="Paramètres de l'interface 2D (inclusion)",
-           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
-           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
            CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
            VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
            VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),),
                             ),
 
+# ------------------------------------------------------------------------------------------------------------------------
+#                       grille (pour Homard)
+# ------------------------------------------------------------------------------------------------------------------------
+
+    DEFI_FISS_GRILLE       =FACT(statut='f',max=1,
+
+      b_fissure            =BLOC(condition="MODELE_GRILLE == None",
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,max=1),
+                                ),
+
+      b_levelset_grille    =BLOC(condition="MODELE_GRILLE != None" ,
+           CHAM_NO_LSN_GRILLE  =SIMP(statut='o',typ=cham_no_sdaster,max=1),
+           CHAM_NO_LST_GRILLE  =SIMP(statut='o',typ=cham_no_sdaster,max=1),
+           CHAM_NO_GRLSN_GRILLE=SIMP(statut='o',typ=cham_no_sdaster,max=1),
+           CHAM_NO_GRLST_GRILLE=SIMP(statut='o',typ=cham_no_sdaster,max=1),
+                                 ),
+                                 ),
+
+                           
+
 # ------------------------------------------------------------------------------------------------------------------------
 #                       partie du maillage potentiellement enrichie
 # ------------------------------------------------------------------------------------------------------------------------
 
-    GROUP_MA_ENRI         =SIMP(statut='o',typ=grma,max=01),
+    GROUP_MA_ENRI         =SIMP(statut='f',typ=grma,max=01),
 
 # ------------------------------------------------------------------------------------------------------------------------
 #                       types d'enrichissement 
 # ------------------------------------------------------------------------------------------------------------------------
 
-    b_enri_inte           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",     
+    b_enri_inte           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",
 
       CHAM_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("DEPL","SIGM"),defaut="DEPL" ),
 
                           ),
 
 
-    b_enri_fiss           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",           
+    b_enri_fiss           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",
 
       CHAM_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("DEPL",),defaut="DEPL" ),
       TYPE_ENRI_FOND      =SIMP(statut='f',typ='TXM',into=("TOPOLOGIQUE","GEOMETRIQUE"),defaut="TOPOLOGIQUE" ),
@@ -9552,7 +10961,7 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
 #                       orientation du fond de fissure
 # ------------------------------------------------------------------------------------------------------------------------
 
-    b_orie_fond           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",           
+    b_orie_fond           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",
 
     ORIE_FOND             =FACT(statut='f',max=1,
       PFON_INI            =SIMP(statut='o',typ='R',max=3),
@@ -9563,34 +10972,44 @@ DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n'
                              ),
 
 # ------------------------------------------------------------------------------------------------------------------------
+#                       branchement
+# ------------------------------------------------------------------------------------------------------------------------
+
+    b_jonction            =BLOC(condition = "MODELE_GRILLE == None ",
+        JONCTION              =FACT(statut='f',max=1,
+          FISSURE             =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+          POINT               =SIMP(statut='o',typ='R',max=3,),
+                                   ),
+                               ),
+# ------------------------------------------------------------------------------------------------------------------------
 #                       info
 # ------------------------------------------------------------------------------------------------------------------------
 
     INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ),
 
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ADOBES A.ADOBES
 DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
                     reentrant='n',fr="Définit les caractéristiques nécessaires à l'étude dynamique d'une structure sous écoulement",
-            UIinfo={"groupes":("Maillage",)},
+            UIinfo={"groupes":("Modélisation",)},
          regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
          FAISCEAU_TRANS  =FACT(statut='f',max='**',
            regles=(  ENSEMBLE('CSTE_CONNORS','NB_CONNORS','RHO_TUBE'),),
@@ -9604,7 +11023,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
            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),            
+           UNITE_CK        =SIMP(statut='f',typ='I',defaut=71),
            PAS             =SIMP(statut='f',typ='R' ),
            CSTE_CONNORS    =SIMP(statut='f',typ='R',min=2,max=2,val_min=0.E+00),
            NB_CONNORS      =SIMP(statut='f',typ='I',val_min=2,),
@@ -9613,7 +11032,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
          GRAPPE          =FACT(statut='f',
            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  
+#  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") ),
@@ -9623,7 +11042,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
            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),            
+           UNITE_KA        =SIMP(statut='f',typ='I',defaut=71),
          ),
          FAISCEAU_AXIAL  =FACT(statut='f',max='**',
            regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
@@ -9633,7 +11052,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
                    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                            
+#  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
            VECT_X          =SIMP(statut='f',typ='R',max=3),
@@ -9675,30 +11094,30 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 11/01/2010   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PEYRARD C.PEYRARD
 
 from Macro.defi_fonc_elec_ops import defi_fonc_elec_ops
 
 DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",op=defi_fonc_elec_ops,sd_prod=fonction_sdaster,reentrant='n',
-            UIinfo={"groupes":("Outils métier",)},
+            UIinfo={"groupes":("Outils-métier",)},
                     fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE",
       regles=(UN_PARMI('COUR_PRIN','COUR'),
               EXCLUS('COUR','COUR_SECO'), ),
@@ -9748,29 +11167,29 @@ DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",op=defi_fonc_elec_ops,sd_prod=fonction
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ADOBES A.ADOBES
 DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
                     reentrant='n',
             fr="Définit un profil de vitesse d'écoulement fluide le long d'une poutre",
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Modélisation","Fonctions",)},
          MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
          NOEUD_INIT      =SIMP(statut='o',typ=no),
          NOEUD_FIN       =SIMP(statut='o',typ=no),
@@ -9788,23 +11207,23 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args):
@@ -9818,7 +11237,7 @@ def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args):
 DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
                     ,fr="Définit une fonction réelle ou complexe d'une variable réelle",
                      reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA','ABSCISSE'),),
          NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
@@ -9851,27 +11270,27 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GALENNE E.GALENNE
 DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Modélisation",)},
                     fr="Définition de lèvres et d'un fond de fissure en 3D",
          regles=(UN_PARMI('FOND_FISS','FOND_FERME','FOND_INF'),
                  EXCLUS('FOND_FERME','DTAN_ORIG'),
@@ -9896,7 +11315,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-#  à mettre à jour le max vaut-il 1  
+#  à mettre à jour le max vaut-il 1
              NOEUD_ORIG      =SIMP(statut='f',typ=no,),
              GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
              NOEUD_EXTR      =SIMP(statut='f',typ=no,),
@@ -9912,7 +11331,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
              NOEUD_ORIG      =SIMP(statut='f',typ=no,),
              GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
              MAILLE_ORIG     =SIMP(statut='f',typ=ma,),
-             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,),
+             GROUP_MA_ORIG   =SIMP(statut='f',typ=grma,),
            ),
            FOND_INF       =FACT(statut='f',
              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
@@ -9925,7 +11344,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
              GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
            ),
            FOND_SUP       =FACT(statut='f',
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), 
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
@@ -9952,30 +11371,30 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
            VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE FLEJOU J.L.FLEJOU
-# 
+#
 DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
                     fr="Definition des groupes de fibres pour les elements multifibres",
                     reentrant='n',
-            UIinfo={"groupes":("Modelisation",)},
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('SECTION','FIBRE'),),
 
          INFO       =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
@@ -10004,10 +11423,127 @@ DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
 
 
 ) ;
-#& MODIF COMMANDE  DATE 20/04/2009   AUTEUR SFAYOLLE S.FAYOLLE 
+#& MODIF COMMANDE  DATE 11/01/2011   AUTEUR SFAYOLLE S.FAYOLLE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SFAYOLLE S.FAYOLLE
+DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f',
+               UIinfo={"groupes":("Modélisation",)},
+               fr="Déterminer les caractéristiques homogenéisées du béton armé à partir des propriétés du béton et des  "
+                        +" armatures",
+               reuse = SIMP(statut='f',typ=mater_sdaster),
+               RELATION = SIMP(statut='o',typ='TXM',defaut="GLRC_DAMAGE",
+                          into=("GLRC_DM","GLRC_DAMAGE"),),
+
+               b_glrc_dm=BLOC(condition = "RELATION == 'GLRC_DM'",
+                              fr="Paramètres de la loi GLRC_DM",
+                              BETON = FACT(statut='o',max=1,
+                                MATER = SIMP(statut='o',typ=(mater_sdaster),),
+                                EPAIS = SIMP(statut='o',typ='R',val_min=0.E+0 ),),
+                              NAPPE = FACT(statut='o',max=1,
+                                MATER = SIMP(statut='o',typ=(mater_sdaster),),
+                                OMY   = SIMP(statut='o',typ='R',val_min=0.E+0,),
+                                OMX   = SIMP(statut='o',typ='R',val_min=0.E+0,),
+                                RY    = SIMP(statut='o',typ='R',val_min=-1.0E+0,val_max=1.0E+0,),
+                                RX    = SIMP(statut='o',typ='R',val_min=-1.0E+0,val_max=1.0E+0),),
+                              RHO = SIMP(statut='f',typ='R',val_min=0.E+0,),
+                              AMOR_ALPHA = SIMP(statut='f',typ='R',val_min=0.E+0,),
+                              AMOR_BETA = SIMP(statut='f',typ='R',val_min=0.E+0,),
+                              COMPR = SIMP(statut='o',typ='TXM',defaut="GAMMA",
+                                           into=("GAMMA","SEUIL")),
+                   b_gamma=BLOC(condition = "COMPR == 'GAMMA'",
+                                fr="Paramètre d'endommagement en compression ",
+                                GC = SIMP(statut='o',typ='R',defaut=1.0E+0,val_min=0.0E+0, val_max=1.0E+0),),
+                   b_seuil=BLOC(condition = "COMPR == 'SEUIL'",
+                                fr="Seuil d'endommagement en compression ",
+                                SYC = SIMP(statut='o',typ='R'),),
+                   PENTE = SIMP(statut='o',typ='TXM',defaut="RIGI_ACIER",
+                                into=("PLAS_ACIER","UTIL","RIGI_ACIER")),
+                   b_util = BLOC(condition = "PENTE == 'UTIL'",
+                                 fr="Valeur de la déformation maximale de l'élément",
+                                  EPSI_MEMB = SIMP(statut='o',typ='R',defaut=0.E+0),
+                                  EPSI_FLEX = SIMP(statut='o',typ='R',defaut=0.E+0),),
+                   CISAIL = SIMP(statut='o',typ='TXM',defaut="NON",
+                                 into=("OUI","NON"),),
+                   METHODE_ENDO = SIMP(statut='o',typ='TXM',defaut="ENDO_INTER",
+                                  into=("ENDO_NAISS","ENDO_LIM","ENDO_INTER"),),
+                   INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2),),
+                           ),
+           b_glrc_damage=BLOC(condition = "RELATION == 'GLRC_DAMAGE'",
+                            fr="Paramètres de la loi GLRC_DAMAGE",
+                   BETON            =FACT(statut='o',max=1,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+                     GAMMA           =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+                     QP1             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+                     QP2             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+
+                     C1N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+
+                     OMT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+                     EAT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+                     BT1             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+                     BT2             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+
+                     MP1X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+                     MP2X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+                     MP1Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+                     MP2Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+         ),
+                   NAPPE     =FACT(statut='o',max=10,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+                     RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+         ),
+                   CABLE_PREC   =FACT(statut='f',max=1,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+                     RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+                     PREX            =SIMP(statut='o',typ='R'),
+                     PREY            =SIMP(statut='o',typ='R'),
+         ),
+                   LINER           =FACT(statut='f',max=10,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     OML             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     RLR             =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+         ),
+                   INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2),),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -10022,71 +11558,19 @@ DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-# RESPONSABLE SFAYOLLE S.FAYOLLE
-DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f',
-            UIinfo={"groupes":("Modelisation",)},
-                    fr="Determiner les caracteristiques du beton arme homogeneisees a partir des proprietes du beton et de  "
-                        +" plusieurs types d'armature",
-         reuse = SIMP(statut='f',typ=mater_sdaster), 
-         BETON          =FACT(statut='o',max=1,
-           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
-           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
-           GAMMA           =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
-           QP1             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
-           QP2             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
-
-           C1N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C1N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C1N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C2N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C2N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C2N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C1M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C1M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C1M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C2M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C2M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
-           C2M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
-
-           OMT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
-           EAT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
-           BT1             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
-           BT2             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
-
-           MP1X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
-           MP2X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
-           MP1Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
-           MP2Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
-         ),
-         NAPPE     =FACT(statut='o',max=10,
-           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
-           OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
-           OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
-           RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
-           RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
-         ),
-         CABLE_PREC   =FACT(statut='f',max=1,
-           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
-           OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
-           OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
-           RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
-           RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
-           PREX            =SIMP(statut='o',typ='R'),
-           PREY            =SIMP(statut='o',typ='R'),
-         ),
-         LINER           =FACT(statut='f',max=10,
-           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
-           OML             =SIMP(statut='o',typ='R',val_min=0.E+0),
-           RLR             =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
-         ),
-         IMPRESSION      =FACT(statut='f',
-           UNITE           =SIMP(statut='f',typ='I',defaut=8),
-         ),
+# RESPONSABLE GENIAUT S.GENIAUT
+DEFI_GRILLE=OPER(nom="DEFI_GRILLE",op=82,sd_prod=grille_sdaster,reentrant='n',
+                UIinfo={"groupes":("Modélisation",)},
+                fr="Définition d'une grille",
+    
+    MAILLAGE       = SIMP(statut='o',typ=maillage_sdaster),
+
+    INFO           = SIMP(statut='f',typ='I',defaut= 0,into=(0,1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 02/02/2010   AUTEUR PELLET J.PELLE
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR GENIAUT S.GENIAU
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -10131,7 +11615,7 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
             TYPE_MAILLE     =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","1D","2D","3D"),max=1 ),
 
             OPTION         =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE",
-                                                              "BANDE","APPUI_LACHE","APPUI") ),
+                                                              "BANDE","APPUI_LACHE","APPUI","FISS_XFEM") ),
                 b_group_ma      =BLOC(condition = "GROUP_MA != None",
                   regles=(EXCLUS('POSITION','NUME_INIT'),),
                   NUME_INIT       =SIMP(statut='f',typ='I'),
@@ -10153,6 +11637,8 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
                   NOEUD_CENTRE    =SIMP(statut='f',typ=no),
                   GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
                   RAYON           =SIMP(statut='o',typ='R' ),
+                  CRIT_NOEUD      = SIMP(statut='f',typ='TXM',defaut="AU_MOINS_UN",
+                                  into=("TOUS","AU_MOINS_UN","MAJORITE"),),
                 ),
                 b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
                   regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
@@ -10163,6 +11649,8 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
                   RAYON           =SIMP(statut='o',typ='R' ),
                   ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
                   VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                  CRIT_NOEUD      = SIMP(statut='f',typ='TXM',defaut="AU_MOINS_UN",
+                                  into=("TOUS","AU_MOINS_UN","MAJORITE"),),
                 ),
                 b_bande         =BLOC(condition = "OPTION == 'BANDE'",
                   regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
@@ -10173,6 +11661,8 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
                   DIST            =SIMP(statut='o',typ='R' ),
                   ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
                   VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                  CRIT_NOEUD      = SIMP(statut='f',typ='TXM',defaut="AU_MOINS_UN",
+                                  into=("TOUS","AU_MOINS_UN","MAJORITE"),),
                 ),
                 b_app_lache         =BLOC(condition = "OPTION == 'APPUI_LACHE'",
                   regles=(UN_PARMI('NOEUD','GROUP_NO'),),
@@ -10185,12 +11675,17 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
                   GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
                   TYPE_APPUI      =SIMP(statut='o',typ='TXM',max=1, into=('AU_MOINS_UN','TOUT','SOMMET','MAJORITE')),
                 ),
+                b_fiss_xfem       =BLOC(condition = "OPTION == 'FISS_XFEM'",
+                  TYPE_GROUP      =SIMP(statut='o',typ='TXM',max=1,defaut='XFEM',
+                                          into=('HEAVISIDE','CRACKTIP','MIXTE','FISSUREE','XFEM',),),
+                  FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+                ),
          ),
 
 
          CREA_GROUP_NO   =FACT(statut='f',max='**',
            OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
-                                               "SEGM_DROI_ORDO","NOEUD_ORDO","TUNNEL","INCLUSION") ),
+                                               "SEGM_DROI_ORDO","NOEUD_ORDO","TUNNEL","INCLUSION","FISS_XFEM") ),
 
            b_option =BLOC(condition = "OPTION == None" ,
                           regles=(UN_PARMI('TOUT_GROUP_MA','GROUP_MA','GROUP_NO','NOEUD',
@@ -10302,27 +11797,32 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
              GROUP_MA_INCL   =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
              MAILLAGE_INCL   =SIMP(statut='f',typ=maillage_sdaster),
            ),
-         ),
+           b_fiss_xfem            =BLOC(condition = "OPTION == 'FISS_XFEM'",
+                  NOM             =SIMP(statut='o',typ=geom),
+                  TYPE_GROUP      =SIMP(statut='o',typ='TXM',max=1,into=('HEAVISIDE','CRACKTIP','MIXTE','XFEM',)),
+                  FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+           ),
+          ),
          ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ZENTNER I.ZENTNER
 from Macro.defi_inte_spec_ops import defi_inte_spec_ops
@@ -10330,7 +11830,7 @@ from Macro.defi_inte_spec_ops import defi_inte_spec_ops
 DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_fonction,
                      reentrant='n',
                      fr="Définit une matrice interspectrale",
-                     UIinfo={"groupes":("Fonction",)},
+                     UIinfo={"groupes":("Fonctions",)},
 
          DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
 
@@ -10368,31 +11868,31 @@ DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_f
            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) ),               
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORU
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE CORUS M.CORUS
 
 DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
                       reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
             fr="Définir les interfaces d'une structure et leur affecter un type",
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
          INTERFACE       =FACT(statut='o',max='**',
@@ -10409,7 +11909,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
          FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10431,7 +11931,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
 DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
                     fr="Définir une liste d'entiers strictement croissante",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
 
          OPERATION    =SIMP(statut='o',typ='TXM',defaut='DEFI',into=('DEFI','NUME_ORDRE',)),
 
@@ -10464,31 +11964,52 @@ DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 22/09/2009   AUTEUR SELLENET N.SELLENE
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR GENIAUT S.GENIAU
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GENIAUT S.GENIAUT
 
+
+# bloc utilisé deux fois à l'identique
+bloc_unif = BLOC(condition = "SUBD_METHODE == 'UNIFORME'",
+                SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0,max=1,
+                                     fr="Coefficient multiplicateur de la 1ère subdivision"),
+                SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
+                                     fr="Nombre de subdivision d'un pas de temps"),
+
+                b_subd_unif_manu  =   BLOC(condition="METHODE == 'MANUEL'",
+                    regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+                    SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,defaut=3,max=1,
+                                     fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+                    SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+                                       fr="Pas de temps en dessous duquel on ne subdivise plus"),
+                ),
+
+                b_subd_unif_auto  =   BLOC(condition="METHODE == 'AUTO'",
+                    SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+                                       fr="Pas de temps en dessous duquel on ne subdivise plus"),
+                ),
+            ) # fin si UNIFORME
+
 DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Fonctions",)},
                fr="Définition de la gestion de la liste d'instants",
 
-
 # ----------------------------------------------------------------------------------------------------------------------------------
 # mot-cle pour la definition a priori de la liste d'instant
 # ----------------------------------------------------------------------------------------------------------------------------------
@@ -10500,65 +12021,72 @@ DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n'
          b_manuel            =BLOC(condition = "METHODE == 'MANUEL' ",fr="Liste d'instants donnée par l'utilisateur",
            LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
                                   ),
-                      
-         b_auto              =BLOC(condition = "METHODE == 'AUTO' ",fr="a compléter",
+
+         b_auto              =BLOC(condition = "(METHODE == 'AUTO') ",fr="Gestion automatique de la liste d'instants",
            LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
-           PAS_MINI    =SIMP(statut='o',typ='R',val_min=0.0,max=1),
+           PAS_MINI    =SIMP(statut='f',typ='R',val_min=1.e-12,max=1),
            PAS_MAXI    =SIMP(statut='f',typ='R',max=1),
-           NB_PAS_MAXI =SIMP(statut='f',typ='I',max=1),
+           NB_PAS_MAXI =SIMP(statut='f',typ='I',val_max=1000000,max=1,defaut=1000000),
                                   ),
-           
-#          b_cfl               =BLOC(condition = "METHODE  == 'CFL' ",fr="Liste d'instants construite sur condition CFL",
-#            COEF            =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut=0.5),
-#            MODELE          =SIMP(statut='o',typ=modele_sdaster),
-#                                   ),
-
-                               ),
 
+                      ),
 # ----------------------------------------------------------------------------------------------------------------------------------
 # mot-cle pour le comportement en cas d'echec (on doit recommencer le meme instant)
 # ----------------------------------------------------------------------------------------------------------------------------------
 
     ECHEC  =FACT(statut='d',max='**',
 
-      EVENEMENT     =SIMP(statut='f',typ='TXM',into=("DIVERGENCE",),defaut="DIVERGENCE",max=1 ),
-
-      SUBD_METHODE    =SIMP(statut='f',typ='TXM',into =("AUCUNE","UNIFORME","EXTRAPOLE"),defaut="UNIFORME",max=1,
-                            fr="Méthode de subdivision des pas de temps en cas de diconvergence"),
-
-           b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'",
-             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
-             SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0,max=1,
-                fr="Coefficient multiplicateur de la 1ère subdivision"),
-             SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
-                fr="Nombre de subdivision d'un pas de temps"),
-             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,defaut=3,max=1,
-                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
-             SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
-                fr="Pas de temps en dessous duquel on ne subdivise plus"),
-                           ),
+        EVENEMENT     =SIMP(statut='f',typ='TXM',into=("ERREUR","DELTA_GRANDEUR","DIVE_ITER_PILO"),defaut="ERREUR",max=1 ),
 
-           b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'",
-             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
-             SUBD_OPTION    =SIMP(statut='f',typ='TXM',
-                into =("IGNORE_PREMIERES","GARDE_DERNIERES",),
-                defaut="IGNORE_PREMIERES",
-                fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"),
-             SUBD_ITER_IGNO =SIMP(statut='f',typ='I',defaut=3,val_min=3,max=1,
-                fr="Les n premières itérations sont ignorées pour l'extrapolation"),
-             SUBD_ITER_FIN  =SIMP(statut='f',typ='I',defaut=8,val_min=3,max=1,
-                fr="Seules les n dernières itérations sont prises pour l'extrapolation"),
-             SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
-                fr="Nombre de subdivision d'un pas de temps en cas divergence"),
-             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,max=1,
-                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
-             SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
-                fr="Pas de temps en dessous duquel on ne subdivise plus"),
-             SUBD_ITER_PLUS =SIMP(statut='f',typ='I',defaut=50,val_min=20,max=1,
-                fr="% itération autorisée en plus"),
-                            ),
+        b_edelta           =BLOC(condition = "EVENEMENT == 'DELTA_GRANDEUR' ",fr=" ",
+#      event-driven : on sous-decoupe si l'increment d'une composante d'un champ depasse le seuil
+            VALE_REF          =SIMP(statut='o',typ='R',max=1),
+            NOM_CHAM          =SIMP(statut='o',typ='TXM',into=("DEPL","VARI_ELGA","SIEF_ELGA",),max=1),
+            NOM_CMP           =SIMP(statut='o',typ='TXM',max=1),
 
-               ),
+            SUBD_METHODE    =SIMP(statut='f',typ='TXM',into =("AUCUNE","UNIFORME"),defaut="UNIFORME",max=1,
+                            fr="Méthode de subdivision des pas de temps en cas de diconvergence pour event-driven"),
+
+            b_subd_unif = bloc_unif,
+
+        ), # fin si DELTA_GRANDEUR
+
+        b_subd_erreur  =   BLOC(condition="EVENEMENT == 'ERREUR'",
+            SUBD_METHODE    =SIMP(statut='f',typ='TXM',into =("AUCUNE","UNIFORME","EXTRAPOLE"),defaut="UNIFORME",max=1,
+                                  fr="Méthode de subdivision des pas de temps en cas de divergence pour erreur"),
+
+            b_subd_unif = bloc_unif,
+
+            b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'",
+                SUBD_OPTION    =SIMP(statut='f',typ='TXM', into =("IGNORE_PREMIERES","GARDE_DERNIERES",),
+                                     defaut="IGNORE_PREMIERES",
+                    fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"),
+                SUBD_ITER_IGNO =SIMP(statut='f',typ='I',defaut=3,val_min=3,max=1,
+                                     fr="Les n premières itérations sont ignorées pour l'extrapolation"),
+                SUBD_ITER_FIN  =SIMP(statut='f',typ='I',defaut=8,val_min=3,max=1,
+                                     fr="Seules les n dernières itérations sont prises pour l'extrapolation"),
+                SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
+                                     fr="Nombre de subdivision d'un pas de temps en cas ERREUR"),
+
+                b_subd_unif_manu  =   BLOC(condition="METHODE == 'MANUEL'",
+                    regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+                    SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,max=1,
+                                     fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+                    SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+                                       fr="Pas de temps en dessous duquel on ne subdivise plus"),
+                ),
+
+                b_subd_unif_auto  =   BLOC(condition="METHODE == 'AUTO'",
+                    SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+                                       fr="Pas de temps en dessous duquel on ne subdivise plus"),
+                ),
+
+                SUBD_ITER_PLUS =SIMP(statut='f',typ='I',defaut=50,val_min=20,max=1,
+                                     fr="% itération autorisée en plus"),
+            ), # fin si EXTRAPOLE
+        ), # fin si ERREUR
+
+   ), # fin ECHEC
 
 # ----------------------------------------------------------------------------------------------------------------------------------
 # mot-cle pour le comportement en cas de succes (on a bien converge)
@@ -10573,7 +12101,7 @@ DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n'
 
       EVENEMENT       =SIMP(statut='f',typ='TXM',into=("SEUIL","TOUT_INST","AUCUN"),defaut="SEUIL",max=1 ),
 
-         b_adap_seuil       =BLOC(condition = "EVENEMENT == 'SEUIL' ",fr="seuil de re-decoupe",           
+         b_adap_seuil       =BLOC(condition = "EVENEMENT == 'SEUIL' ",fr="seuil de re-decoupe",
 
 #          FORMULE_SEUIL          =SIMP(statut='f',typ=formule),
 
@@ -10585,36 +12113,38 @@ DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n'
                NB_INCR_SEUIL     =SIMP(statut='f',typ='I',defaut=2),
                NOM_PARA          =SIMP(statut='f',typ='TXM',into=("NB_ITER_NEWTON",),defaut="NB_ITER_NEWTON"),
                CRIT_COMP         =SIMP(statut='f',typ='TXM',into=("LT","GT","LE","GE"),defaut="LE"),
-#                   b_vale_R           =BLOC(condition = "NOM_PARA == 'DP' ",fr="valeur reelle",           
+#                   b_vale_R           =BLOC(condition = "NOM_PARA == 'DP' ",fr="valeur reelle",
 #                VALE              =SIMP(statut='o',typ='R'),
 #                                           ),
-                  b_vale_I           =BLOC(condition = "NOM_PARA == 'NB_ITER_NEWTON' ",fr="valeur entiere",           
+                  b_vale_I           =BLOC(condition = "NOM_PARA == 'NB_ITER_NEWTON' ",fr="valeur entiere",
                VALE_I            =SIMP(statut='f',typ='I'),
                                           ),
 #                                    ),
                                 ),
-                           
+
 #     2) parametre du mode de calcul de dt+
 #     ----------------------------------------
 
-      MODE_CALCUL_TPLUS =SIMP(statut='f',typ='TXM',into=("FIXE","DELTA_GRANDEUR","ITER_NEWTON","FORMULE"),defaut='FIXE',max=1 ),
-         b_mfixe           =BLOC(condition = "MODE_CALCUL_TPLUS == 'FIXE' ",fr="fixe",           
+      MODE_CALCUL_TPLUS =SIMP(statut='f',typ='TXM',into=("FIXE","DELTA_GRANDEUR","ITER_NEWTON","FORMULE","IMPLEX"),defaut='FIXE',
+                              max=1),
+
+         b_mfixe           =BLOC(condition = "MODE_CALCUL_TPLUS == 'FIXE' ",fr="fixe",
 #      dans le cas FIXE :(deltaT+) = (deltaT-)x(1+PCENT_AUGM/100)
       PCENT_AUGM                 =SIMP(statut='f',typ='R',defaut=100.,val_min=-100.,max=1),
                                ),
-         b_mdelta           =BLOC(condition = "MODE_CALCUL_TPLUS == 'DELTA_GRANDEUR' ",fr=" ",           
+         b_mdelta           =BLOC(condition = "MODE_CALCUL_TPLUS == 'DELTA_GRANDEUR' ",fr=" ",
 #      dans le cas DELTA_GRANDEUR : (deltaT+) = (deltaT-)x(VALREF/deltaVAL) : l'acceleration est inversement proportionnelle
 #                                                                             a la variation de la grandeur
       VALE_REF          =SIMP(statut='o',typ='R',max=1),
       NOM_CHAM          =SIMP(statut='o',typ='TXM',into=("DEPL","VARI_ELGA","SIEF_ELGA",),max=1),
       NOM_CMP           =SIMP(statut='o',typ='TXM',max=1),
                                   ),
-         b_mitnew           =BLOC(condition = "MODE_CALCUL_TPLUS == 'ITER_NEWTON' ",fr=" ",           
+         b_mitnew           =BLOC(condition = "MODE_CALCUL_TPLUS == 'ITER_NEWTON' ",fr=" ",
 #      dans le cas ITER_NEWTON : (deltaT+) = (deltaT-) x sqrt(VALREF/N) : l'acceleration est inversement proportionnelle
 #                                                                        au nombre d'iter de Newton precedent
       NB_ITER_NEWTON_REF          =SIMP(statut='o',typ='I',max=1),
                                   ),
-         b_mformule           =BLOC(condition = "MODE_CALCUL_TPLUS == 'FORMULE' ",fr=" ",           
+         b_mformule           =BLOC(condition = "MODE_CALCUL_TPLUS == 'FORMULE' ",fr=" ",
 #      dans le cas FORMULE
            regles=UN_PARMI('FORMULE_TPLUS','NOM_SCHEMA'),
       FORMULE_TPLUS     =SIMP(statut='f',typ=formule),
@@ -10622,7 +12152,7 @@ DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n'
                                    ),
 
 # les schemas pre-definis :
-#  abaqus : 
+#  abaqus :
 #      EVENEMENT       ='SEUIL'
 #      NB_INCR_SEUIL     = 2
 #      NOM_PARA          ='NB_ITER_NEWTON'
@@ -10630,17 +12160,17 @@ DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n'
 #      VALE_I            = 5
 #      MODE_CALCUL_TPLUS ='FIXE'
 #      PCENT_AUGM        = 50.
-#  Zebulon 1 : 
+#  Zebulon 1 :
 #      EVENEMENT       ='TOUT_INST'
 #      MODE_CALCUL_TPLUS ='DELTA_GRANDEUR'
 #      VALE_REF          = valref
 #      NOM_CHAM          ='VARI_ELGA'
 #      NOM_CMP           ='V1'
-#  Zebulon 2 : 
+#  Zebulon 2 :
 #      EVENEMENT       ='TOUT_INST'
 #      MODE_CALCUL_TPLUS ='ITER_NEWTON'
 #      NB_ITER_NEWTON_REF= nc
-#  Tough2 : 
+#  Tough2 :
 #      EVENEMENT       ='SEUIL'
 #      NB_INCR_SEUIL     = 1
 #      NOM_PARA          ='NB_ITER_NEWTON'
@@ -10648,43 +12178,60 @@ DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n'
 #      VALE_I            = n
 #      MODE_CALCUL_TPLUS ='FIXE'
 #      PCENT_AUGM        = 100.
-#  Oliver : 
+#  Oliver :
 #      EVENEMENT       ='TOUT_INST'
 #      MODE_CALCUL_TPLUS ='FORMULE'
 #      NOM_SCHEMA        ='OLIVER'
 
              ),
       ),
+#  b_adaplex  =   BLOC(condition = "METHODE == 'AUTO' and MODE_CALCUL_TPLUS == 'IMPLEX'",
+#
+#    ADAPTATION  =FACT(statut='d',max='**',
+#
+#     1 parametres de l'evenement declencheur
+#     ----------------------------------------
+#
+#      EVENEMENT       =SIMP(statut='f',typ='TXM',into=("TOUT_INST",),defaut="TOUT_INST",max=1 ),
+#
+#                           
+#     2 parametre du mode de calcul de dt+
+#     ----------------------------------------
+#
+#     MODE_CALCUL_TPLUS =SIMP(statut='f',typ='TXM',into=("IMPLEX",),defaut='IMPLEX',max=1,position='global' ),
+#
+#             ),
+#     ),
 
 # ----------------------------------------------------------------------------------------------------------------------------------
 
     INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 
 )  ;
-      
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
                     fr="Définir une liste de réels strictement croissante",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          regles=(UN_PARMI('VALE','DEBUT',),
                  EXCLUS('VALE','INTERVALLE'),
                  ENSEMBLE('DEBUT','INTERVALLE')),
@@ -10699,23 +12246,23 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
@@ -10752,7 +12299,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
            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"),                     
+                                 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='**'),
@@ -10760,13 +12307,13 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
            b_noeud_init    =BLOC(condition = "NOEUD_INIT != None",
              SUPER_MAILLE    =SIMP(statut='o',typ=ma),
              NOEUD_FIN       =SIMP(statut='o',typ=no),
-           ),        
+           ),
          ),
          DEFI_GROUP_NO   =FACT(statut='f',max='**',
            regles=(UN_PARMI('TOUT','SUPER_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           
+#  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" ),
            SUPER_MAILLE    =SIMP(statut='f',typ=ma,
@@ -10778,10 +12325,10 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
            GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#& MODIF COMMANDE  DATE 23/02/2011   AUTEUR LAVERNE J.LAVERNE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -10806,6 +12353,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                       'ELAS_HYPER','ELAS_2NDG',),
                EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
                EXCLUS('ECRO_LINE','ECRO_LINE_FO','ECRO_PUIS'),
+               EXCLUS('ENDO_HETEROGENE'),
                EXCLUS('TAHERI','TAHERI_FO'),
                EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
                EXCLUS('VISC_SINH','VISC_SINH_FO'),
@@ -10816,10 +12364,10 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
                EXCLUS('LEMAITRE','LEMAITRE_FO','VISC_IRRA_LOG',
                'LEMA_SEUIL','LEMA_SEUIL_FO','LEMAITRE_IRRA','LMARC_IRRA',),
-               EXCLUS('LMARC','LMARC_FO'),
                EXCLUS('META_LEMA_ANI','META_LEMA_ANI_FO'),
                EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
                EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+               EXCLUS('VISC_ENDO','VISC_ENDO_FO'),
                PRESENT_PRESENT('BPEL_ACIER','ELAS'),
                EXCLUS('RCCM','RCCM_FO'),
                EXCLUS('WEIBULL','WEIBULL_FO'),
@@ -10945,12 +12493,15 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
            ),
            ELAS_HYPER      =FACT(statut='f',
                                  regles=(UN_PARMI('K','NU'),),
-             C10             =SIMP(statut='f',typ='R',defaut=0.0),
-             C01             =SIMP(statut='o',typ='R'),
-             C20             =SIMP(statut='f',typ='R',defaut=0.0),
-             K               =SIMP(statut='f',typ='R'),
-             RHO             =SIMP(statut='f',typ='R',defaut=0.0),
-             NU              =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+             C10             =SIMP(statut='o',typ='R',
+                                   fr="Si C10 est le seul coefficient fourni, alors le matériau est Néo-Hookéen."),
+             C01             =SIMP(statut='f',typ='R',defaut=0.0,
+                                   fr="Si l'on fournit C01 en plus de C10, on obtient un matériau de type Mooney-Rivlin."),
+             C20             =SIMP(statut='f',typ='R',defaut=0.0,
+                                   fr="Si l'on fournit C20 en plus de C10 et C01, on obtient un matériau de type Signorini."),
+             K               =SIMP(statut='f',typ='R',fr="Module de compressibilité."),
+             NU              =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=0.5E+0,fr="Coefficient de Poisson."),
+             RHO             =SIMP(statut='f',typ='R',defaut=0.0,fr="Masse volumique."),
            ),
            ELAS_COQUE      =FACT(statut='f',
              regles=(EXCLUS('MEMB_L','M_LLLL',),
@@ -11083,6 +12634,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              D_SIGM_EPSI     =SIMP(statut='o',typ='R',),
              SY              =SIMP(statut='o',typ='R',),
            ),
+           ENDO_HETEROGENE   =FACT(statut='f',
+             WEIBULL         =SIMP(statut='o',typ='R',),
+             SY              =SIMP(statut='o',typ='R',),
+             KI              =SIMP(statut='o',typ='R',),
+             EPAI            =SIMP(statut='o',typ='R',),
+             GR              =SIMP(statut='f',typ='R',defaut= 1.0),
+           ),
            ECRO_LINE_FO    =FACT(statut='f',
              D_SIGM_EPSI     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -11387,68 +12945,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              UN_SUR_K        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              UN_SUR_M        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-           ),
-           LMARC           =FACT(statut='f',
-             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',
-             DE_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             Y_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             Y_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             A_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             RM              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             M               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             P               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             P1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             P2              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             M11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             M22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             M33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             M66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             N11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             N22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             N33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             N66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             Q11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             Q22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             Q33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             Q66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             R11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             R22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             R33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             R66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
            ),
              META_LEMA_ANI     =FACT(statut='f',
              F1_A            =SIMP(statut='o',typ='R'),
@@ -11592,15 +13088,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                      PRESENT_PRESENT('ANG1_FO','ANG2_FO','PEN1_FO','PEN2_FO','PEN3_FO',),
                                      ),
            ),
-           NADAI_B         =FACT(statut='f',
-             F_C             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             F_T             =SIMP(statut='o',typ='R',val_min=0.E+0),
-             CRIT_E_C        =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
-             EPSP_P_C        =SIMP(statut='o',typ='R',val_min=0.E+0),
-             EPSP_R_C        =SIMP(statut='o',typ='R',val_min=0.E+0),
-             EPSI_R_T        =SIMP(statut='o',typ='R',val_min=0.E+0),
-             FAC_T_C         =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
-           ),
            BETON_DOUBLE_DP =FACT(statut='f',
              F_C             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              F_T             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -11658,27 +13145,31 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              BDN             =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
            ),
           VENDOCHAB       =FACT(statut='f',
-             S               =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             SY              =SIMP(statut='o',typ='R',defaut= 0.E+0),
              ALPHA_D         =SIMP(statut='o',typ='R',defaut= 0.E+0),
              BETA_D          =SIMP(statut='o',typ='R',defaut= 0.E+0),
-             N               =SIMP(statut='o',typ='R'),
-             UN_SUR_M        =SIMP(statut='o',typ='R',defaut= 0.E+0),
-             UN_SUR_K        =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',
-             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              ALPHA_D         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              BETA_D          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             UN_SUR_M        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             UN_SUR_K        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              R_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              A_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
              K_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
            ),
+           VISC_ENDO      =FACT(statut='f',
+             SY              =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             R_D             =SIMP(statut='o',typ='R'),
+             A_D             =SIMP(statut='o',typ='R'),
+           ),
+           VISC_ENDO_FO   =FACT(statut='f',
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
            PINTO_MENEGOTTO =FACT(statut='f',
              SY              =SIMP(statut='o',typ='R'),
              EPSI_ULTM       =SIMP(statut='o',typ='R'),
@@ -12292,7 +13783,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PRE2          = SIMP(statut='f',typ='R'),
                                            PRES_VAPE     = SIMP(statut='f',typ='R'),
                                            DEGR_SATU     = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO     = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -12347,10 +13837,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           SIGMA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -12426,7 +13912,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # ---------------------------------------------------------------------------------
                                            PRES_VAPE        = SIMP(statut='f',typ='R'),
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -12496,10 +13981,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
                                            EMMAG           = SIMP(statut='f',typ='R'),
-                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -12578,7 +14059,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PRE2             = SIMP(statut='f',typ='R'),
                                            PRES_VAPE        = SIMP(statut='f',typ='R'),
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -12630,10 +14110,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           SIGMA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -12710,7 +14186,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                                            PRE2             = SIMP(statut='f',typ='R'),
                                            PRES_VAPE        = SIMP(statut='f',typ='R'),
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -12762,10 +14237,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             SIGMA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             D_SIGMA_T       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             PERM_G_INTR     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-             CHAL_VAPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -12842,7 +14313,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -12912,10 +14382,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES FACULTATIVES   ------------------------------------
 # ---------------------------------------------------------------------------------
                                            EMMAG            = SIMP(statut='f',typ='R'),
-                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -12946,11 +14412,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # ---------------------------------------------------------------------------------
                                            ALPHA            = SIMP(statut='f',typ='R'),
                                            CP               = SIMP(statut='f',typ='R'),
-                                           LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           LAMB_T    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           LAMB_CT        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEES CACHEES -------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -13027,7 +14488,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -13097,10 +14557,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES FACULTATIVE   ----------------------------------
 # ---------------------------------------------------------------------------------
                                            EMMAG            = SIMP(statut='f',typ='R'),
-                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -13187,7 +14643,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -13257,10 +14712,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES FACULTATIVES   ------------------------------------
 # ---------------------------------------------------------------------------------
                                            EMMAG            = SIMP(statut='f',typ='R'),
-                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -13288,11 +14739,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # ---------------------------------------------------------------------------------
                                            ALPHA            = SIMP(statut='f',typ='R'),
                                            CP               = SIMP(statut='f',typ='R'),
-                                           LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           LAMB_T    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           LAMB_CT        = SIMP(statut='f',typ='R'),
                                              ),
 # =================================================================================
 # --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
@@ -13359,7 +14805,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # ---------------------------------------------------------------------------------
                                            PRE2             = SIMP(statut='f',typ='R'),
                                            DEGR_SATU        = SIMP(statut='f',typ='R'),
-                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
 # ---------------------------------------------------------------------------------
 # -------------------   DONNEE CACHEE ---------------------------------------------
 # ---------------------------------------------------------------------------------
@@ -13427,10 +14872,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 # -------------------   DONNEES INUTILES   ----------------------------------------
 # ---------------------------------------------------------------------------------
                                            EMMAG            = SIMP(statut='f',typ='R'),
-                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
-                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                                            FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -13538,6 +14979,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
                COEF_CISA_TRAC     =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
              ),
            ),
+
+
+           THM_RUPT       =FACT(statut='f',
+             OUV_FICT        =SIMP(statut='o',typ='R'),
+             UN_SUR_N        =SIMP(statut='f',typ='R',defaut= 0.),
+           ),
 #
 # autres comportements ...
 #
@@ -13557,7 +15004,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
            NON_LOCAL       =FACT(statut='f',
              regles=(AU_MOINS_UN('LONG_CARA','C_GONF','C_GRAD_VARI','PENA_LAGR',),),
              LONG_CARA       =SIMP(statut='f',typ='R'),
-             C_GRAD_VARI     =SIMP(statut='f',typ='R'),             
+             C_GRAD_VARI     =SIMP(statut='f',typ='R'),
              PENA_LAGR       =SIMP(statut='f',typ='R',defaut= 1.0E3),
              C_GONF          =SIMP(statut='f',typ='R'),
              COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
@@ -13576,8 +15023,23 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              PENA_ADHERENCE  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.),
            ),
+           RUPT_DUCT       =FACT(statut='f',
+             GC              =SIMP(statut='o',typ='R'),
+             SIGM_C          =SIMP(statut='o',typ='R'),
+             COEF_EXTR       =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=9.99E-1),
+             COEF_PLAS       =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=9.99E-1),
+             PENA_LAGR       =SIMP(statut='f',typ='R',defaut=1.0E2,val_min=1.01E+0),
+             RIGI_GLIS       =SIMP(statut='f',typ='R',defaut=1.0E1),
+           ),
            JOINT_MECA_RUPT  =FACT(statut='f',
-             regles=(EXCLUS('PRES_FLUIDE','PRES_CLAVAGE'),),
+             regles=(EXCLUS('PRES_FLUIDE','PRES_CLAVAGE'),
+                     PRESENT_PRESENT('RHO_FLUIDE','VISC_FLUIDE','OUV_MIN'),
+                     PRESENT_ABSENT('PRES_FLUIDE','RHO_FLUIDE','VISC_FLUIDE','OUV_MIN'),
+                     PRESENT_ABSENT('PRES_CLAVAGE','RHO_FLUIDE','VISC_FLUIDE','OUV_MIN'),
+                     PRESENT_ABSENT('RHO_FLUIDE','PRES_FLUIDE','PRES_CLAVAGE'),
+                     PRESENT_ABSENT('VISC_FLUIDE','PRES_FLUIDE','PRES_CLAVAGE'),
+                     PRESENT_ABSENT('OUV_MIN','PRES_FLUIDE','PRES_CLAVAGE'),
+                     ),
              K_N             =SIMP(statut='o',typ='R',val_min=1.E-12),
              K_T             =SIMP(statut='f',typ='R',val_min=1.E-12),
              SIGM_MAX        =SIMP(statut='o',typ='R',val_min=0.),
@@ -13586,7 +15048,17 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.,val_min=1.E-12),
              PRES_FLUIDE     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
              PRES_CLAVAGE    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO_FLUIDE      =SIMP(statut='f',typ='R',val_min=0.),
+             VISC_FLUIDE     =SIMP(statut='f',typ='R',val_min=1.E-20),
+             OUV_MIN         =SIMP(statut='f',typ='R',val_min=1.E-15), 
            ),
+           JOINT_MECA_FROT   =FACT(statut='f',
+             K_N             =SIMP(statut='o',typ='R',val_min=1.E-12),
+             K_T             =SIMP(statut='f',typ='R',val_min=1.E-12),
+             MU              =SIMP(statut='o',typ='R',val_min=1.E-3),             
+             PENA_TANG       =SIMP(statut='f',typ='R',val_min=0.),
+             ADHESION        =SIMP(statut='f',typ='R',defaut=0., val_min=0.),
+           ),           
            RCCM            =FACT(statut='f',
              regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
              SY_02           =SIMP(statut='f',typ='R'),
@@ -13676,6 +15148,25 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              ),
              DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
            ),
+
+           DRUCK_PRAGER_FO  =FACT(statut='f',
+             ALPHA           =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             P_ULTM          =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+             b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+                    H               =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 1.0,),
+             ),
+             b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+                    SY_ULTM         =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
+             ),
+            DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           ),
+
            VISC_DRUC_PRAG          =FACT(statut='f',
              PREF       =SIMP(statut='o',typ='R',fr="pression de reference"),
              A          =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
@@ -13690,7 +15181,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              R_ULT      =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil ultime"),
              BETA_0     =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil d elasticite"),
              BETA_PIC   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil de pic"),
-             BETA_ULT   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil ultime"),          
+             BETA_ULT   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil ultime"),
            ),
              HOEK_BROWN          =FACT(statut='f',
              GAMMA_RUP       =SIMP(statut='o',typ='R'),
@@ -13717,13 +15208,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
            ),
 ####  MONOCRISTAL
 
-           ECOU_VISC1      =FACT(statut='f',
+           MONO_VISC1      =FACT(statut='f',
              TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
              N               =SIMP(statut='o',typ='R'),
              K               =SIMP(statut='o',typ='R'),
              C               =SIMP(statut='o',typ='R'),
            ),
-           ECOU_VISC2      =FACT(statut='f',
+           MONO_VISC2      =FACT(statut='f',
              TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
              N               =SIMP(statut='o',typ='R'),
              K               =SIMP(statut='o',typ='R'),
@@ -13731,7 +15222,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              D               =SIMP(statut='o',typ='R'),
              A               =SIMP(statut='o',typ='R'),
            ),
-           ECOU_VISC3      =FACT(statut='f',
+           MONO_VISC3      =FACT(statut='f',
              TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
              K               =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
              TAUMU           =SIMP(statut='o',typ='R',fr="Seuil d ecoulement, en unite de contraintes"),
@@ -13739,31 +15230,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              DELTAV          =SIMP(statut='o',typ='R',fr="Volume d activation"),
              DELTAG0         =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
            ),
-           KOCKS_RAUCH      =FACT(statut='f',
-              regles=(UN_PARMI('H','H1'),
-                      PRESENT_PRESENT('H1','H2','H3','H4'),
-                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
-                      ),
-             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
-             K               =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
-             TAUR            =SIMP(statut='o',typ='R',fr="Contraintes de cisaillement à T=0K, en unite de contraintes"),
-             TAU0            =SIMP(statut='o',typ='R',fr="Contraintes critique initiale de cisaillement, en unite de contraintes"),
-             GAMMA0          =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
-             DELTAG0         =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
-             BSD             =SIMP(statut='o',typ='R',fr="fonction de la taille du grain B/D"),
-             GCB             =SIMP(statut='o',typ='R',fr="distance critique d'annihilation GC/B"),
-             KDCS            =SIMP(statut='o',typ='R',fr="Parametre relatif à la direction principale de la dislocation"),
-             P               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
-             Q               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
-             H               =SIMP(statut='f',typ='R'),
-             H1              =SIMP(statut='f',typ='R'),
-             H2              =SIMP(statut='f',typ='R'),
-             H3              =SIMP(statut='f',typ='R'),
-             H4              =SIMP(statut='f',typ='R'),
-             H5              =SIMP(statut='f',typ='R'),
-             H6              =SIMP(statut='f',typ='R'),
-           ),
-           ECRO_ISOT1      =FACT(statut='f',
+           MONO_ISOT1      =FACT(statut='f',
               regles=(UN_PARMI('H','H1'),
                       PRESENT_PRESENT('H1','H2','H3','H4'),
                       PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
@@ -13780,7 +15247,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              H5              =SIMP(statut='f',typ='R'),
              H6              =SIMP(statut='f',typ='R'),
            ),
-           ECRO_ISOT2      =FACT(statut='f',
+           MONO_ISOT2      =FACT(statut='f',
               regles=(UN_PARMI('H','H1'),
                       PRESENT_PRESENT('H1','H2','H3','H4'),
                       PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
@@ -13799,43 +15266,204 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
              Q2              =SIMP(statut='o',typ='R'),
              B2              =SIMP(statut='o',typ='R'),
            ),
-           ECRO_CINE1      =FACT(statut='f',
+           MONO_CINE1      =FACT(statut='f',
              TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
              D               =SIMP(statut='o',typ='R'),
            ),
-           ECRO_CINE2      =FACT(statut='f',
+           MONO_CINE2      =FACT(statut='f',
              TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
              D               =SIMP(statut='o',typ='R'),
              GM              =SIMP(statut='o',typ='R'),
              PM              =SIMP(statut='o',typ='R'),
              C               =SIMP(statut='o',typ='R'),
            ),
+           MONO_DD_KR      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+            # TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             K               =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
+             TAUR            =SIMP(statut='o',typ='R',fr="Contraintes de cisaillement à T=0K, en unite de contraintes"),
+             TAU0            =SIMP(statut='o',typ='R',fr="Contraintes critique initiale de cisaillement, en unite de contraintes"),
+             GAMMA0          =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
+             DELTAG0         =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
+             BSD             =SIMP(statut='o',typ='R',fr="fonction de la taille du grain B/D"),
+             GCB             =SIMP(statut='o',typ='R',fr="distance critique d'annihilation GC/B"),
+             KDCS            =SIMP(statut='o',typ='R',fr="Parametre relatif à la direction principale de la dislocation"),
+             P               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+             Q               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+           ),
+           MONO_DD_CFC      =FACT(statut='f',
+             regles=(UN_PARMI('H','H1'),
+                     PRESENT_PRESENT('H1','H2','H3','H4','H5'),
+                     PRESENT_ABSENT('H','H1','H2','H3','H4','H5'),
+                     ),
+             #TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             GAMMA0          =SIMP(statut='f',typ='R',defaut=0.001,fr="Vitesse d ecoulement initiale en s**-1"),
+             TAU_F           =SIMP(statut='o',typ='R',fr="Contraintes , en unite de contraintes ex 20 MPa"),
+             A               =SIMP(statut='f',typ='R',defaut=0.13,fr="paramètre A, sans unité"),
+             B               =SIMP(statut='f',typ='R',defaut=0.005,fr="paramètre B, sans unité"),
+             N               =SIMP(statut='f',typ='R',defaut=200.,fr="paramètre n, sans unité"),
+             Y               =SIMP(statut='o',typ='R',fr="paramète Y, en unité de longueur ex 2.5 A"),
+             ALPHA           =SIMP(statut='f',typ='R',defaut=0.35,fr="ecrouissage, paramètre alpha"),
+             BETA            =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre b, en unite de longueur"),
+             RHO_REF         =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre rho_ref, en unité de longueur **-2"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R',defaut=0.124,fr="matrice d'interaction, terme a*",),
+             H2              =SIMP(statut='f',typ='R',defaut=0.625,fr="matrice d'interaction, terme a_colineaire",),
+             H3              =SIMP(statut='f',typ='R',defaut=0.137,fr="matrice d'interaction, terme a_glissile",),
+             H4              =SIMP(statut='f',typ='R',defaut=0.122,fr="matrice d'interaction, terme a_Lomer",),
+             H5              =SIMP(statut='f',typ='R',defaut=0.07,fr="matrice d'interaction, terme a_Hirth",),
+           ),
 
-####  MONOCRISTAL
 
-           DRUCK_PRAGER_FO  =FACT(statut='f',
-             ALPHA           =SIMP(statut='o',typ=(fonction_sdaster,formule)),
-             SY              =SIMP(statut='o',typ=(fonction_sdaster,formule)),
-             P_ULTM          =SIMP(statut='o',typ=(fonction_sdaster,formule)),
-             ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
-             b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
-                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
-                    H               =SIMP(statut='o',typ=(fonction_sdaster,formule)),
-                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 1.0,),
-             ),
-             b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
-                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
-                    SY_ULTM         =SIMP(statut='o',typ=(fonction_sdaster,formule)),
-                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
-             ),
-            DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           MONO_DD_CC      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4','H5','H6'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             #TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             GAMMA0          =SIMP(statut='f',typ='R',defaut=0.001,fr="Vitesse d ecoulement initiale en s**-1"),
+             TAU_F           =SIMP(statut='o',typ='R',fr="Contraintes , en unite de contraintes ex 20 MPa"),
+             A               =SIMP(statut='f',typ='R',defaut=0.13,fr="paramètre A, sans unité"),
+             B               =SIMP(statut='f',typ='R',defaut=0.005,fr="paramètre B, sans unité"),
+             N               =SIMP(statut='f',typ='R',defaut=200.,fr="paramètre n, sans unité"),
+             Y               =SIMP(statut='o',typ='R',fr="paramète Y, en unité de longueur ex 2.5 A"),
+             ALPHA           =SIMP(statut='f',typ='R',defaut=0.35,fr="ecrouissage, paramètre alpha"),
+             BETA            =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre b, en unite de longueur"),
+             RHO_REF         =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre rho_ref, en unité de longueur **-2"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
            ),
 
 
+####  MONOCRISTAL
+
+### UMAT
+           UMAT   =FACT(statut='f',
+             C1 =SIMP(statut='f',typ='R'),
+             C2 =SIMP(statut='f',typ='R'),
+             C3 =SIMP(statut='f',typ='R'),
+             C4 =SIMP(statut='f',typ='R'),
+             C5 =SIMP(statut='f',typ='R'),
+             C6 =SIMP(statut='f',typ='R'),
+             C7 =SIMP(statut='f',typ='R'),
+             C8 =SIMP(statut='f',typ='R'),
+             C9 =SIMP(statut='f',typ='R'),
+             C10 =SIMP(statut='f',typ='R'),
+             C11 =SIMP(statut='f',typ='R'),
+             C12 =SIMP(statut='f',typ='R'),
+             C13 =SIMP(statut='f',typ='R'),
+             C14 =SIMP(statut='f',typ='R'),
+             C15 =SIMP(statut='f',typ='R'),
+             C16 =SIMP(statut='f',typ='R'),
+             C17 =SIMP(statut='f',typ='R'),
+             C18 =SIMP(statut='f',typ='R'),
+             C19 =SIMP(statut='f',typ='R'),
+             C20 =SIMP(statut='f',typ='R'),
+             C21 =SIMP(statut='f',typ='R'),
+             C22 =SIMP(statut='f',typ='R'),
+             C23 =SIMP(statut='f',typ='R'),
+             C24 =SIMP(statut='f',typ='R'),
+             C25 =SIMP(statut='f',typ='R'),
+             C26 =SIMP(statut='f',typ='R'),
+             C27 =SIMP(statut='f',typ='R'),
+             C28 =SIMP(statut='f',typ='R'),
+             C29 =SIMP(statut='f',typ='R'),
+             C30 =SIMP(statut='f',typ='R'),
+             C31 =SIMP(statut='f',typ='R'),
+             C32 =SIMP(statut='f',typ='R'),
+             C33 =SIMP(statut='f',typ='R'),
+             C34 =SIMP(statut='f',typ='R'),
+             C35 =SIMP(statut='f',typ='R'),
+             C36 =SIMP(statut='f',typ='R'),
+             C37 =SIMP(statut='f',typ='R'),
+             C38 =SIMP(statut='f',typ='R'),
+             C39 =SIMP(statut='f',typ='R'),
+             C40 =SIMP(statut='f',typ='R'),
+             C41 =SIMP(statut='f',typ='R'),
+             C42 =SIMP(statut='f',typ='R'),
+             C43 =SIMP(statut='f',typ='R'),
+             C44 =SIMP(statut='f',typ='R'),
+             C45 =SIMP(statut='f',typ='R'),
+             C46 =SIMP(statut='f',typ='R'),
+             C47 =SIMP(statut='f',typ='R'),
+             C48 =SIMP(statut='f',typ='R'),
+             C49 =SIMP(statut='f',typ='R'),
+             C50 =SIMP(statut='f',typ='R'),
+           ),
+           UMAT_FO   =FACT(statut='f',
+             C1 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C2 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C3 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C4 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C5 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C6 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C7 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C8 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C9 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C10 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C11 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C12 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C13 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C14 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C15 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C16 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C17 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C18 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C19 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C20 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C21 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C22 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C23 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C24 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C25 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C26 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C27 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C28 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C29 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C30 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C31 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C32 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C33 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C34 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C35 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C36 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C37 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C38 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C39 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C40 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C41 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C42 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C43 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C44 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C45 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C46 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C47 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C48 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C49 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C50 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+           ),
+### UMAT
+
+
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR NISTOR I.NISTOR 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13857,12 +15485,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
                       reentrant='n',
             fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique", 
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          SOUS_STRUC      =FACT(statut='o',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=3),
-           TRANS           =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           TRANS           =SIMP(statut='o',typ='R',max=3),
          ),
          LIAISON         =FACT(statut='o',max='**',
            SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
@@ -13885,66 +15513,68 @@ DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=4,sd_prod=nappe_sdaster,
                 fr="Définir une fonction réelle de deux variables réelles",
-                reentrant='n',UIinfo={"groupes":("Fonction",)},
+                reentrant='n',UIinfo={"groupes":("Fonctions",)},
          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=C_PARA_FONCTION() ),
-         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
          PARA            =SIMP(statut='o',typ='R',max='**'),
          FONCTION        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
          NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
          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") ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG"),
+                                 fr="Type d'interpolation pour les abscisses et les ordonnées de la fonction."),
            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") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG"),
+                               fr="Type d'interpolation pour le paramètre de la nappe"),
          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) ),
+         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/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE KHAM M.KHAM
 DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=table_fonction,
@@ -13982,30 +15612,30 @@ DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=table_fonction,
          VALE            =SIMP(statut='f',typ='R',max='**'),
          VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # 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",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          NOM_RESU        =SIMP(statut='c',typ='TXM',into=("TOUTRESU",),defaut="TOUTRESU",
                                fr="Nom du concept créé",
                                ang="Name of the concept"),
@@ -14014,30 +15644,30 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
                                ang="Value of the parameter"),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/11/2009   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 
 from Macro.defi_part_feti_ops import defi_part_feti_ops
 
 DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_sdaster,
-                     reentrant='n',UIinfo={"groupe":("Maillage",)},
+                     reentrant='n',UIinfo={"groupes":("Modélisation",)},
                      fr="Creation partitionnement en sous-domaines pour FETI",
          regles=(UN_PARMI('MAILLAGE','MODELE'),PRESENT_PRESENT('MODELE','EXCIT'),),
 
@@ -14048,8 +15678,8 @@ DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_
            CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),),
 
          # Methode de partitionnement
-         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="SCOTCH" ),
-         
+         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="KMETIS" ),
+
          LOGICIEL      =SIMP(statut='f',typ='TXM'),
 
          # Corrige les problemes possibles de non-connexite des sous-domaines
@@ -14064,12 +15694,12 @@ DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_
            GROUP_MA       =SIMP(statut='o',typ=grma,),
            POIDS          =SIMP(statut='f',typ='I',val_min=2),
                           ),
-         # Prefixe pour le nom des group_ma definissant les sous-domaines 
+         # Prefixe pour le nom des group_ma definissant les sous-domaines
          NOM_GROUP_MA    =SIMP(statut='f',typ='TXM',defaut='SD' ),
 
          # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
          TRAITER_BORDS   =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
-         
+
          # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
          # Note : le calcul FETI sera impossible
          b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
@@ -14078,30 +15708,30 @@ DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_
 
          INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 
 DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster,
                     fr="Creation partitionnement en sous-domaines pour FETI",
                     docu="U4.23.05",reentrant='n',
-                    UIinfo={"groupes":("Résolution",)},
+                    UIinfo={"groupes":("Modélisation",)},
          MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
          MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
          NOM             =SIMP(statut='f',typ='TXM',defaut='SD'),
@@ -14114,37 +15744,37 @@ DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster,
            CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
          ),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ASSIRE A.ASSIRE
 
 DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
                     fr="Creation partitionnement en sous-domaines pour FETI",
                     docu="U4.00.00",
-                    UIinfo={"groupes":("Résolution",)},
+                    UIinfo={"groupes":("Modélisation",)},
          MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
          MODELE          =SIMP(statut='f',typ=(modele_sdaster)),
          NB_PART         =SIMP(statut='o',typ='I',),
 
          # Methode de partitionnement
-         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="SCOTCH" ),
-         
+         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="KMETIS" ),
+
          LOGICIEL      =SIMP(statut='f',typ='TXM'),
 
          # Corrige les problemes possibles de non-connexite des sous-domaines
@@ -14159,7 +15789,7 @@ DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
            GROUP_MA       =SIMP(statut='o',typ=grma,),
            POIDS          =SIMP(statut='f',typ='I'),
                           ),
-         # Prefixe pour le nom des group_ma definissant les sous-domaines 
+         # Prefixe pour le nom des group_ma definissant les sous-domaines
          NOM_GROUP_MA    =SIMP(statut='f',typ='TXM',defaut='SD' ),
 
          # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
@@ -14174,23 +15804,23 @@ DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
          INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
 
 );
-#& MODIF COMMANDE  DATE 28/12/2009   AUTEUR COURTOIS M.COURTOI
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 
@@ -14198,7 +15828,7 @@ from Macro.defi_sol_miss_ops import defi_sol_miss_ops
 
 DEFI_SOL_MISS = MACRO(nom="DEFI_SOL_MISS",op=defi_sol_miss_ops, sd_prod=table_sdaster,
                       fr="Définition des données de sol pour Miss", reentrant='n',
-                      UIinfo={"groupes":("Modélisation",)},
+                      UIinfo={"groupes":("Modélisation","Outils-métier",)},
    MATERIAU = FACT(statut='o', max='**',
             fr="Définition des matériaux",
       E         = SIMP(statut='o', typ='R', fr="Module d'Young"),
@@ -14220,29 +15850,29 @@ DEFI_SOL_MISS = MACRO(nom="DEFI_SOL_MISS",op=defi_sol_miss_ops, sd_prod=table_sd
    INFO  = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
 )
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ADOBES A.ADOBES
 DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
                     fr="Définition d'un spectre d'excitation turbulente",
                     reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Modélisation","Outils-métier",)},
          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'),),
@@ -14329,29 +15959,29 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE BODEL C.BODEL
 DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
                     fr="Définit un maillage pour visualiser les résultats d'une sous-structuration dynamique",
                     reentrant='n',
-            UIinfo={"groupes":("Maillage",)},
+            UIinfo={"groupes":("Maillage","Dynamique",)},
          regles=(UN_PARMI('CYCLIQUE','MODELE_GENE','MAILLAGE'),
                  PRESENT_PRESENT('CYCLIQUE','SECTEUR'),
                  EXCLUS('SOUS_STRUC','SECTEUR'),
@@ -14394,7 +16024,8 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
          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',max='**',
-           NOM             =SIMP(statut='f',typ='TXM' ),
+           regles=(UN_PARMI('TOUT','MAILLE','GROUP_MA'),),
+           NOM             =SIMP(statut='o',typ='TXM' ),
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -14406,27 +16037,27 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE CANO V.CANO
 DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Modélisation","Thermique",)},
               fr="Définir d'un diagramme de transformations en refroidissement continu (TRC) de référence d'un acier"
                 +" pour les calculs métallurgiques.",
          HIST_EXP        =FACT(statut='o',max='**',
@@ -14443,23 +16074,23 @@ DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
            A              =SIMP(statut='f',typ='R'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 def depl_interne_prod(DEPL_GLOBAL,**args ):
@@ -14472,29 +16103,29 @@ def depl_interne_prod(DEPL_GLOBAL,**args ):
     raise AsException("type de concept resultat non prevu")
 
 DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
                   fr="Calculer le champ de déplacement à l'intérieur d'une sous-structure statique",
          DEPL_GLOBAL     =SIMP(statut='o',typ=(cham_no_sdaster,mode_meca,mode_meca_c,evol_elas,dyna_trans,dyna_harmo),),
          SUPER_MAILLE    =SIMP(statut='o',typ=ma,),
          NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
@@ -14510,36 +16141,36 @@ DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
                                  ang="Sensitivity parameter",max='**'),
             ),
             OBJET  =FACT(statut='f',max='**',
-               CLASSE      =SIMP(statut='f',typ='TXM',into=('G','V','L'),defaut='G'),  
+               CLASSE      =SIMP(statut='f',typ='TXM',into=('G','V','L'),defaut='G'),
                CHAINE      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
                POSITION    =SIMP(statut='f',typ='I'  ,max='**'),
             ),
             ALARME        =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',),
-            INFO          =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ),           
+            INFO          =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ),
 );
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ZENTNER I.ZENTNER
 DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
                      fr="Calcul de la réponse spectrale d'une structure linéaire sous une excitation connue par sa DSP",
                      reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          BASE_MODALE     =FACT(statut='o',
            regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
@@ -14554,31 +16185,31 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
          ),
          MODE_STAT       =SIMP(statut='f',typ=mode_meca),
 # MODE_STAT devrait etre dans EXCIT car est utile et obligatoire que si NOM_CMP=depl_r, on pourrait
-# ainsi rajouter un bloc du genre  b_mod_stat= BLOC(condition = "(GRANDEUR == None) or (GRANDEUR == 'DEPL_R')",        
+# ainsi rajouter un bloc du genre  b_mod_stat= BLOC(condition = "(GRANDEUR == None) or (GRANDEUR == 'DEPL_R')",
          EXCIT           =FACT(statut='o',
            INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
            NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
            MODAL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-           b_modal_non = BLOC(condition = "(MODAL == None) or (MODAL == 'NON')",           
+           b_modal_non = BLOC(condition = "(MODAL == None) or (MODAL == 'NON')",
              regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'),),
              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",
                regles=(EXCLUS('CHAM_NO','NOEUD'),),
 # on devrait rajouter EXCLUS('GRANDEUR','CHAM_NO') pour eviter ambiguite car CHAM_NO => GRANDEUR='EFFO'
-# cela impliquerait d'enlever la valeur par defaut a GRANDEUR            
+# cela impliquerait d'enlever la valeur par defaut a GRANDEUR
                NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
                CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
                NOEUD           =SIMP(statut='f',typ=no,max='**'),
                b_noeud         =BLOC(condition = "NOEUD != None",
                   NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
-                ),  
+                ),
                GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
                            into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
-# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP  
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP
                DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
-             ),           
+             ),
              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='**'),
@@ -14589,10 +16220,10 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
 # NOEUD_I, NOM_CMP_I ...  => modif. du Fortran
                GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
                            into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
-# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP_I  
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP_I
                DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
              ),
-           ),  
+           ),
            b_modal_oui = BLOC(condition = "(MODAL == 'OUI')",
 # dans ce cas, y-a-t-il vraiment la possibilite d'une matrice interspectrale avec plusieurs termes
              NUME_ORDRE_I    =SIMP(statut='o',typ='I',max='**'),
@@ -14601,9 +16232,9 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
                            into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
              DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
 # dans le cas MODAL=OUI, GRANDEUR peut-il etre different de EFFO et doit il etre impose a EFFO   On devrait
-# pouvoir supprimer GRANDEUR et DERIVATION ici   
-           ),  
-                    
+# pouvoir supprimer GRANDEUR et DERIVATION ici
+           ),
+
          ),
          REPONSE         =FACT(statut='f',
            regles=( ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
@@ -14620,49 +16251,59 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 24/06/2009   AUTEUR ZENTNER I.ZENTNER 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE ZENTNER I.ZENTNER
+
 from Macro.dyna_iss_vari_ops import dyna_iss_vari_ops
 #
-DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,sd_prod=table_fonction,
+def dyna_iss_vari_prod(self, FONC_SIGNAL,**args):
+   if FONC_SIGNAL !=None : 
+       return tran_gene
+   else:  
+      return  table_fonction
+   raise AsException("type de concept resultat non prevu")
+#
+    
+      
+DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,   sd_prod=dyna_iss_vari_prod,
                     fr="Calcul du spectre de réponse ou de la reponse temporelle sismique incoherente par decomposition spectrale",
                     reentrant='n',
-                    UIinfo={"groupes":("Outils métier",)},        
-         NOM_CMP         =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
-         PRECISION       =SIMP(statut='f',typ='R',defaut=0.999 ),
+                    UIinfo={"groupes":("Outils métier",)},
+         regles=(UN_PARMI('FONC_SIGNAL','NB_FREQ'),),                                    
+         FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster) ),
+         NB_FREQ       =SIMP(statut='f',typ='I' ),
+         NOM_CMP       =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+         PRECISION     =SIMP(statut='f',typ='R',defaut=0.999 ),
          INTERF           =FACT(statut='o',
-            GROUP_NO_INTERF =SIMP(statut='o',typ=grma ,max='**'), 
-            MODE_INTERF  =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")),
+              GROUP_NO_INTERF =SIMP(statut='o',typ=grno ,max='**'), 
+              MODE_INTERF  =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")),
          ),      
          MATR_COHE       =FACT(statut='o',
-            VITE_ONDE       =SIMP(statut='o',typ='R'),
-            PARA_ALPHA     =SIMP(statut='f',typ='R',defaut=0.5),           
+              VITE_ONDE       =SIMP(statut='o',typ='R'),
+              PARA_ALPHA     =SIMP(statut='f',typ='R',defaut=0.5),           
          ),
-#        FONC_MULT     =SIMP(statut='f',typ='R' ),
-         FREQ_INIT       =SIMP(statut='o',typ='R' ),
-         NB_FREQ       =SIMP(statut='o',typ='I' ),
-         PAS             =SIMP(statut='o',typ='R' ),     
 #        LIST_FREQ        =SIMP(statut='o',typ='liste' ),  
          UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=33),
          UNITE_RESU_IMPE  = SIMP(statut='f',typ='I',defaut=32), 
          TYPE             = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII"), defaut="ASCII"),
+#         NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE") , validators=NoRepeat(),max=3,defaut="DEPL" ),
 #
          MATR_GENE         = FACT(statut='o',
             MATR_MASS     = SIMP(statut='o',typ=(matr_asse_gene_r ) ),
@@ -14670,14 +16311,27 @@ DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,sd_prod=table_fonc
             MATR_AMOR     = SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c ) ), 
          ),         
 #         
-         OPTION        = SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"),
-#             
-         INFO           =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)),
+        INFO           =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)),
+#         
+         b_type_trans = BLOC(condition="FONC_SIGNAL !=None",                               
+                        FREQ_MAX       =SIMP(statut='f',typ='R' ),
+                        FREQ_PAS       =SIMP(statut='f',typ='R' ),    
+                        regles=( ENSEMBLE('FREQ_MAX','FREQ_PAS'),  )                                  
+                        
+                        ),
+                              
+        b_type_spec = BLOC(condition="NB_FREQ != None",          
+                       FREQ_INIT       =SIMP(statut='o',typ='R' ),
+                       FREQ_PAS     =SIMP(statut='o',typ='R' ),    
+                       OPTION        = SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"),
+                       ),
+         
+         
          )  ;
-#& MODIF COMMANDE  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -14704,7 +16358,7 @@ def dyna_line_harm_prod(MATR_RIGI,**args):
 DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
                     fr="Calcul de la réponse dynamique complexe d'un système à une excitation harmonique",
                     reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
                  PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
                  PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
@@ -14767,11 +16421,12 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
            ),
           ),
          ),
@@ -14797,11 +16452,12 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),         
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
-             OUT_OF_CORE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
           ),
          ),
@@ -14814,10 +16470,10 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
 # Rajouter test icompatibilite vect_asse et sensibilite
 # Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation
 #  presents dans le Fortran
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -14836,7 +16492,7 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
 DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
                     fr="Calcul de la réponse dynamique transitoire à une excitation temporelle quelconque",
                     reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
 #         regles=(UN_PARMI('WILSON','DIFF_CENTRE','ADAPT'),),
          regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),
                  CONCEPT_SENSIBLE('ENSEMBLE'),),
@@ -14911,7 +16567,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          ),
 
          SOLVEUR         =FACT(statut='d',
-         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
 
            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") ),
@@ -14934,7 +16590,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -14943,22 +16599,31 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",into=("CENTRALISE","CENTRALISE")),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
 
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
@@ -14985,6 +16650,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            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 ),
+           PAS_MINI         =SIMP(statut='f',typ='R' ),
          ),
          ARCHIVAGE       =FACT(statut='f',
            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
@@ -14999,10 +16665,10 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR MICHEL S.MICHEL 
+#& MODIF COMMANDE  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -15021,7 +16687,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
 #
 DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
             fr="Calcul de l'évolution dynamique d'une structure dont le matériau ou la géométrie ont un comportement non linéaire",
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
                  CONCEPT_SENSIBLE('ENSEMBLE'),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
@@ -15029,7 +16695,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
          MODE_STAT       =SIMP(statut='f',typ=mode_meca),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
          MASS_DIAG       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='f',max='**',
            regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
                    # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
@@ -15074,23 +16740,14 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            MASS_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
            RIGI_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
            AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           ACCE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),           
          ),
+#-------------------------------------------------------------------         
          COMP_INCR       =C_COMP_INCR(),
-         COMP_ELAS       =FACT(statut='f',max='**',
-           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
-                                      "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
-      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           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 ),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("IMPLICITE",)),
-         ),
+#-------------------------------------------------------------------         
+         COMP_ELAS       =C_COMP_ELAS('DYNA_NON_LINE'),
 #-------------------------------------------------------------------
          b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
          ETAT_INIT       =FACT(statut='o',
@@ -15143,18 +16800,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
          ),),
 #-------------------------------------------------------------------
-         INCREMENT       =FACT(statut='o',
-           regles=(EXCLUS('NUME_INST_FIN','INST_FIN'),),
-           LIST_INST       =SIMP(statut='o',typ=(listr8_sdaster,list_inst)),
-           INST_INIT       =SIMP(statut='f',typ='R'),
-           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
-           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
-           INST_FIN        =SIMP(statut='f',typ='R'),
-           ERRE_TEMPS      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
-                                 fr="Adaptation temporelle pour les modélisations HM instationnaires",
-                                 ang="Time adaptation for unstationary HM models"),
-           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
-         ),
+         INCREMENT       =C_INCREMENT(),
 #-------------------------------------------------------------------
          SCHEMA_TEMPS     =FACT(statut='o',
             SCHEMA          =SIMP(statut='o',min=1,max=1,typ='TXM',
@@ -15184,176 +16830,22 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
             b_implicit= BLOC(condition="SCHEMA!='TCHAMWA'and SCHEMA!='DIFF_CENT'",
                FORMULATION  =SIMP(statut='o',max=1,typ='TXM',into=("DEPLACEMENT","VITESSE","ACCELERATION"),),),
          ),
-         NEWTON          =FACT(statut='d',
-           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1,val_min=0 ),
-           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,val_min=0),
-           REAC_ITER_ELAS  =SIMP(statut='f',typ='I',defaut=0,val_min=0),
-           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-         ),
-         SOLVEUR         =FACT(statut='d',
-           METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
-           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_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
-                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
-             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
-             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
-           ),
-           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
-             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
-             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
-             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
-             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
-             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-             FILTRAGE_MATRICE=SIMP(statut='f',typ='R',defaut=-1.0,),
-             MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",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","LDLT_SP",),defaut="LDLT_INC" ),
-             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
-               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
-               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
-               ),
-             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
-               ),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
-             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
-           ),
-           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
-             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
-              NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
-              REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.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= -1 ),
-           ),           
-           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-         ),
+#-------------------------------------------------------------------         
+         NEWTON          =C_NEWTON(),
 #-------------------------------------------------------------------
-         CONVERGENCE     =FACT(statut='d',
-           regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
-           b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
-             regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
-                                  'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),),
-             SIGM_REFE       =SIMP(statut='f',typ='R'),
-             EPSI_REFE       =SIMP(statut='f',typ='R'),
-             FLUX_THER_REFE  =SIMP(statut='f',typ='R'),
-             FLUX_HYD1_REFE  =SIMP(statut='f',typ='R'),
-             FLUX_HYD2_REFE  =SIMP(statut='f',typ='R'),
-             VARI_REFE       =SIMP(statut='f',typ='R'),
-           ),
-           RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
-           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
-           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
-           RESI_COMP_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),
-           TYPE            =SIMP(statut='f',typ='TXM',defaut="PIC",into=("PIC","PLATEAU")),
-           b_plateau    =BLOC(condition = "TYPE == 'PLATEAU' ",
-             
-             PLATEAU_ITER    =SIMP(statut='f',typ='I',defaut=3, val_min =2),
-             PLATEAU_RELA    =SIMP(statut='f',typ='R',defaut=1E-3),                   
-           ),
-           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
-           
-         ),
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
 #-------------------------------------------------------------------
-         OBSERVATION     =FACT(statut='f',max='**',
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
-           SUIVI_DDL       =SIMP(statut='f',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
-         b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
-                                regles=(UN_PARMI('NOEUD','MAILLE','GROUP_NO','GROUP_MA','VALE_MIN','VALE_MAX'),
-                                                  PRESENT_PRESENT('MAILLE','POINT'),),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-                                   into=("DEPL","VITE","ACCE","SIEF_ELGA",
-                                         "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             NUME_SUIVI      =SIMP(statut='o',typ='I' ,min=1,max=4),
-             VALE_MAX        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),
-             VALE_MIN        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),),
-         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
-                                regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),PRESENT_PRESENT('MAILLE','POINT'),),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
-                                              "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU")),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-             PAS_OBSE        =SIMP(statut='f',typ='I'),
-             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
-             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
-                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
-             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
-                PRECISION       =SIMP(statut='o',typ='R',),),),
-         ),
-
-         AFFICHAGE      = FACT(statut='f',max=16,
-
-            UNITE       = SIMP(statut='f',typ='I',val_min=1),
-
-            LONG_R      = SIMP(statut='f',typ='I',defaut=12,val_min=1,val_max=12),
-            PREC_R      = SIMP(statut='f',typ='I',defaut=5, val_min=1,val_max=8),
-            LONG_I      = SIMP(statut='f',typ='I',defaut=6, val_min=1,val_max=12),
-
-            NOM_COLONNE = SIMP(statut='o',typ='TXM',defaut="STANDARD",
-                                into=("STANDARD","MINIMUM",
-                                      "ITER_NEWT",
-                                      "INCR_TPS",
-                                      "RESI_RELA","RELA_NOEU",
-                                      "RESI_MAXI","MAXI_NOEU",
-                                      "RESI_REFE","REFE_NOEU",
-                                      "RELI_ITER","RELI_COEF",
-                                      "PILO_PARA",
-                                      "MATR_ASSE",
-                                      "ITER_DEBO",
-                                      "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
-                                      "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
-                                      "SUIV_1","SUIV_2","SUIV_3","SUIV_4",
-                                     ),
-                               ),
-            b_residu    = BLOC(condition = " NOM_COLONNE == 'RESI_RELA' or \
-                    NOM_COLONNE == 'RESI_MAXI' or\
-                    NOM_COLONNE == 'RESI_REFE' or\
-                    NOM_COLONNE == 'CTCD_GEOM' or\
-                    NOM_COLONNE == 'STANDARD' ",
-                            INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                          ),
-         ),
+         CONVERGENCE     =C_CONVERGENCE(),
 #-------------------------------------------------------------------
-         ARCHIVAGE       =FACT(statut='f',
-           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
-                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
-           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-           PAS_ARCH        =SIMP(statut='f',typ='I' ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           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',validators=NoRepeat(),max='**',
-           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE",)),
-         ),
-
+         SOLVEUR         =C_SOLVEUR(),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#-------------------------------------------------------------------
+         SUIVI_DDL       =C_SUIVI_DDL(),
+#------------------------------------------------------------------- 
+         AFFICHAGE       =C_AFFICHAGE(),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
 #-------------------------------------------------------------------
          CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
            NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
@@ -15371,7 +16863,15 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                           'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
                                           'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
                                           'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
-           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+           regles         = (EXCLUS('PAS_CALC','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_CALC       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
          ),
          MODE_VIBR     =FACT(statut='f',min=1,max=1,
            MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
@@ -15379,7 +16879,15 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                             fr="Nombre de fréquences propres à calculer"),
            BANDE            =SIMP(statut='f',typ='R',min=2,max=2,
                             fr="Valeur des deux fréquences délimitant la bande de recherche",),
-           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+           regles         = (EXCLUS('PAS_CALC','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_CALC       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
          ),
 #-------------------------------------------------------------------
            SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
@@ -15387,9 +16895,19 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                ang="List of sensitivity parameters"),
 #-------------------------------------------------------------------
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         b_info=BLOC(condition="(INFO==2)",
+               fr="filtre les messages émis dans le .mess selon le type de message demandé",
+               INFO_DBG = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               into=("CONTACT",
+                                     "MECA_NON_LINE",
+                                     "PILOTAGE",
+                                     "FACTORISATION",
+                                     "APPARIEMENT"),
+                             ),
+                    ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15411,7 +16929,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
 DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
                      fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
                      reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu_sdaster ),
          EXCIT           =FACT(statut='o',
            INTE_SPEC_GENE  =SIMP(statut='o',typ=table_fonction),
@@ -15419,10 +16937,10 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
          OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 19/04/2010   AUTEUR GREFFET N.GREFFET 
+#& MODIF COMMANDE  DATE 31/01/2011   AUTEUR GREFFET N.GREFFET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -15442,11 +16960,11 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
                      fr="Calcul de la réponse dynamique transitoire d'un système amorti ou non en coordonées généralisées"
                         +" par superposition modale ou par sous structuration",
                      reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
       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") ),
+                               into=("EULER","NEWMARK","DEVOGE","ADAPT_ORDRE1","ADAPT_ORDRE2","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 ),
@@ -15458,7 +16976,17 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
          COUPLAGE_EDYOS     =FACT(statut='f',max=1,         
                              VITE_ROTA          = SIMP(statut='o',typ='R' ),
                              PAS_TPS_EDYOS      = SIMP(statut='o',typ='R' ),
-                             UNITE              = SIMP(statut='f',typ='I',defaut=45),
+         ),
+
+         PALIER_EDYOS      =FACT(statut='f',max='**',
+         regles=(PRESENT_ABSENT('UNITE','GROUP_NO'),
+                 PRESENT_ABSENT('UNITE','TYPE_EDYOS'),
+                 EXCLUS('GROUP_NO','NOEUD'),),
+                                     UNITE       = SIMP(statut='f',typ='I',),
+                                     GROUP_NO    = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                     NOEUD       = SIMP(statut='f',typ=no),
+                                     TYPE_EDYOS  = SIMP(statut='f',typ='TXM',
+                                     into=("PAPANL","PAFINL","PACONL","PAHYNL",),),
          ),
 
          ETAT_INIT       =FACT(statut='f',
@@ -15488,6 +17016,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
            NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
            PAS_MAXI         =SIMP(statut='f',typ='R' ),
+           PAS_MINI         =SIMP(statut='f',typ='R' ),
          ),
          ARCHIVAGE       =FACT(statut='f',
            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
@@ -15664,18 +17193,19 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
          ),
 
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
  )  ;
-#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15695,7 +17225,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
-                   UIinfo={"groupes":("Impression",)},
+                   UIinfo={"groupes":("Impression","Utilitaires",)},
                    fr="Engendre des tests pour la non régression du code (pour développeurs)",
          UNITE           =SIMP(statut='f',typ='I',defaut=8),
          FORMAT          =SIMP(statut='f',typ='TXM',into=("OBJET",) ),
@@ -15715,10 +17245,53 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
             TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME",) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+# 
+#  ENVOI DES CHAMPS CINEMATIQUES VIA YACS POUR COUPLAGE IFS 
+#
+ENV_CINE_YACS=PROC(nom             = "ENV_CINE_YACS",
+                   op              = 111,
+                   UIinfo          = {"groupes":("Résultats et champs",)},
+                   fr              = "Envoi des champs de deplacement et vitesse via YACS pour Couplage de Code_Aster et Saturne",
+                   regles          = (EXCLUS('ETAT_INIT','RESULTAT',),),
+                   MATR_PROJECTION = SIMP(statut='o', typ=corresp_2_mailla,),
+                   VIS_A_VIS = FACT(statut='o', max='**',
+                                   GROUP_MA_1=SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                   GROUP_NO_2=SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+                   RESULTAT  = FACT(statut='f',
+                                   NUME_ORDRE=SIMP(statut='o', typ='I',              validators=NoRepeat()),
+                                   RESU      =SIMP(statut='o', typ=resultat_sdaster, validators=NoRepeat()),),
+                   ETAT_INIT = FACT(statut='f',
+                                    DEPL=SIMP(statut='f', typ=cham_no_sdaster,  validators=NoRepeat()),
+                                    VITE=SIMP(statut='f', typ=cham_no_sdaster,  validators=NoRepeat()),
+                                    ACCE=SIMP(statut='f', typ=cham_no_sdaster,  validators=NoRepeat()),),
+                   INST         = SIMP(statut='o',typ='R', ),
+                   PAS             = SIMP(statut='o',typ='R', ),
+                   NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                   INFO            = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR ASSIRE A.ASSIRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -15744,13 +17317,27 @@ def exec_logiciel_prod(self, MAILLAGE, **args):
 
 EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_logiciel_prod,
                       fr="Exécute un logiciel ou une commande système depuis Aster",
-                      UIinfo={"groupes":("Outils métier",)},
-      
-      regles = (AU_MOINS_UN('LOGICIEL', 'MAILLAGE'),),
+                      UIinfo={"groupes":("Gestion du travail","Outils-métier",)},
       
+      regles = ( AU_MOINS_UN('LOGICIEL', 'MAILLAGE', 'SALOME'), 
+                 EXCLUS('MACHINE_DISTANTE','MAILLAGE'), 
+                 EXCLUS('MAILLAGE','SALOME'),
+                 ),
+
       LOGICIEL = SIMP(statut='f', typ='TXM'),
       ARGUMENT = SIMP(statut='f', max='**', typ='TXM'),
 
+
+      MACHINE_DISTANTE = FACT(statut='f',
+        SSH_ADRESSE  = SIMP(statut='o', typ='TXM', val_min=1, val_max=255,
+                           fr="Adresse IP ou nom de la machine sur laquelle le logiciel/script sera exécuté via SSH"),
+        SSH_LOGIN    = SIMP(statut='f', typ='TXM', val_min=1, val_max=255,
+                           fr="Nom d'utilisateur sur la machine distante"),
+        SSH_PORT     = SIMP(statut='f', typ='I', val_min=1, val_max=65535, defaut=22,
+                           fr="Port SSH de la machien distante"),
+      ),
+
+
       MAILLAGE = FACT(statut='f',
          FORMAT     = SIMP(statut='o', typ='TXM', into=("GMSH", "GIBI", "SALOME")),
          UNITE_GEOM = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=16,
@@ -15760,12 +17347,36 @@ EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_log
          MAILLAGE   = SIMP(statut='o', typ=CO),
       ),
 
+
+      SALOME = FACT(statut='f',
+           regles=(UN_PARMI('CHEMIN_SCRIPT', 'UNITE_SCRIPT'),
+                   PRESENT_PRESENT('NOM_PARA','VALE'),),
+         CHEMIN_SCRIPT     = SIMP(statut='f', typ='TXM',
+                               fr="Chemin du script Salome"),
+         UNITE_SCRIPT      = SIMP(statut='f', typ='I', val_min=80, val_max=99,
+                               fr="Unité logique du script Salome"),
+         SALOME_HOST       = SIMP(statut='f', typ='TXM', defaut='localhost',
+                               fr="Machine sur laquelle tourne Salome"),
+         SALOME_PORT       = SIMP(statut='f', typ='I', val_min=2800, val_max=2900, defaut=2810,
+                               fr="Port de l'instance Salome (2810 ou supérieur)"),
+         SALOME_RUNAPPLI   = SIMP(statut='f', typ='TXM',
+                               fr="Chemin vers le script de lancement runAppli de Salome"),
+         FICHIERS_ENTREE   = SIMP(statut='f', typ='TXM', validators=NoRepeat(),max='**',
+                               fr="Liste des fichiers d'entrée du script Salome"),
+         FICHIERS_SORTIE   = SIMP(statut='f', typ='TXM', validators=NoRepeat(),max='**',
+                               fr="Liste des fichiers générés par le script Salome"),
+         NOM_PARA          = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(), 
+                               fr="Liste des noms des paramètres à modifier dans le script Salome"),
+         VALE              = SIMP(statut='f',typ='TXM',max='**',
+                               fr="Valeur des paramètres à) modifier dans le script Salome"),
+      ),
+
       CODE_RETOUR_MAXI = SIMP(statut='f', typ='I', defaut=0, val_min=-1,
                               fr="Valeur maximale du code retour toléré (-1 pour l'ignorer)"),
       
       INFO     = SIMP(statut='f', typ='I', defaut=2, into=(1,2),),
 )
-#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15794,7 +17405,7 @@ def extr_mode_prod(FILTRE_MODE,**args):
 
 EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
                reentrant='n',fr="Extraire séléctivement des modes des structures de données modales",
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          FILTRE_MODE     =FACT(statut='o',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 ) ),
@@ -15822,7 +17433,7 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
            CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 18/05/2010   AUTEUR MEUNIER S.MEUNIER 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15898,7 +17509,7 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f',
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15926,7 +17537,7 @@ def extr_table_prod(TYPE_RESU,**args):
   raise AsException("type de concept resultat non prevu")
 
 EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
-            UIinfo={"groupes":("Résultats et champs",)},
+            UIinfo={"groupes":("Résultats et champs","Tables")},
          fr="Extraire d'une table des concepts Code_Aster",
          TYPE_RESU       =SIMP(statut='o',typ='TXM',),
 
@@ -15952,10 +17563,10 @@ EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -16006,21 +17617,28 @@ FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
          PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
          ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
          OUT_OF_CORE  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
          
          # mots clés pour solveur GCPC et PETSc :
          PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
-         b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",fr="Paramètres de la factorisation incomplete",
+         b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
            NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
            REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+           RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
          ),
-         b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-           REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+         b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+           REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+           RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+         ),
+         b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+           RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
          ),
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/08/2009   AUTEUR COURTOIS M.COURTOI
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16055,7 +17673,7 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
                                statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
          UNITE           =SIMP(statut='f',typ='I',defaut=6),  
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16075,11 +17693,11 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
 # ======================================================================
 # RESPONSABLE ADOBES A.ADOBES
 FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
-                    reentrant='n',fr="Crée une fonction constante paramètrée par l'abscisse curviligne",
-            UIinfo={"groupes":("Fonction",)},
+                    reentrant='n',fr="Crée une fonction constante paramétrée par l'abscisse curviligne",
+            UIinfo={"groupes":("Fonctions",)},
          TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16104,12 +17722,15 @@ def formule_prod(self,VALE,VALE_C,**args):
    elif VALE_C != None:
       return formule_c
 
-def form_pyth_ops(self,d):
-   NOM_PARA=self.etape['NOM_PARA']
+def form_pyth_ops(self, d):
+   NOM_PARA = self.etape['NOM_PARA']
    VALE    =self.etape['VALE']
    VALE_C  =self.etape['VALE_C']
    if type(NOM_PARA) not in (list, tuple):
       NOM_PARA = [NOM_PARA,]
+   for para in NOM_PARA:
+       if para.strip() != para:
+           raise AsException("nom de paramètre invalide (contient des blancs) : %s" % repr(para))
    if self.sd == None:
       return
    if VALE     != None :
@@ -16119,14 +17740,14 @@ def form_pyth_ops(self,d):
    self.sd.setFormule(NOM_PARA, texte.strip())
 
 FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5,
-             sd_prod=formule_prod,UIinfo={"groupes":("Fonction",)},
+             sd_prod=formule_prod,UIinfo={"groupes":("Fonctions",)},
              fr="Définit une formule réelle ou complexe à partir de son expression mathématique",
          regles=(UN_PARMI('VALE','VALE_C',),),
          VALE     =SIMP(statut='f',typ='TXM'),
          VALE_C   =SIMP(statut='f',typ='TXM'),
          NOM_PARA =SIMP(statut='o',typ='TXM',max='**'),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16148,7 +17769,7 @@ FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5,
 GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
                     fr="Génération de la fonction temporelle à partir d une matrice interspectrale",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
          NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
          INTERPOL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
@@ -16163,7 +17784,7 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16192,7 +17813,7 @@ GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op=  27,
 sd_prod=gene_matr_alea_prod,
                fr="Générer une réalisation d'une matrice aléatoire réelle sym. déf. positive ou d'un macro élément dynamique",
                reentrant='n',
-            UIinfo={"groupes":("Matrice",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
    MATR_MOYEN   = SIMP(statut='o', typ=(matr_asse_gene_r,macr_elem_dyna)),
 
 #    cas matrice generalisee 
@@ -16213,7 +17834,7 @@ sd_prod=gene_matr_alea_prod,
    INIT_ALEA    =SIMP(statut='f',typ='I'),
 ) ;
    
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16237,7 +17858,7 @@ GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
                op_init=gene_vari_alea_init,op=gene_vari_alea_ops,
                sd_prod=reel,reentrant='n',
                fr="Générer une réalisation d'une variable aléatoire réelle de loi de probabilité donnée (Gamma ou Exponentielle)",
-               UIinfo={"groupes":("Fonction",)},
+               UIinfo={"groupes":("Fonctions",)},
    TYPE       = SIMP(statut='f', typ='TXM', into=("EXP_TRONQUEE", "EXPONENTIELLE", "GAMMA"), defaut="GAMMA"),
    b_gamma    =BLOC(condition = "TYPE == 'GAMMA' ",fr="Parametres loi gamma",
            VALE_MOY   = SIMP(statut='f', typ='R', defaut=1.),
@@ -16255,7 +17876,7 @@ GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
              ),
    INIT_ALEA       =SIMP(statut='f',typ='I'),
 )
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16275,7 +17896,7 @@ GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 IMPR_CO=PROC(nom="IMPR_CO",op=17,
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Impression","Utilitaires",)},
              fr="Imprimer tous les objets JEVEUX qui constituent un concept utilisateur existant (pour les développeurs)",
          regles=(UN_PARMI('CONCEPT','CHAINE','TOUT' ),),
 
@@ -16294,7 +17915,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,
          POSITION        =SIMP(statut='f',typ='I',defaut=1),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
 )  ;
-#& MODIF COMMANDE  DATE 22/12/2009   AUTEUR TORKHANI M.TORKHANI 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR TORKHANI M.TORKHANI 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16316,11 +17937,11 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,
 
 from Macro.impr_diag_campbell_ops import impr_diag_campbell_ops
 
-IMPR_DIAG_CAMPBELL=MACRO(nom="IMPR_DIAG_CAMPBELL",op=impr_diag_campbell_ops, fr="Tracer du Diagramme de Campbell",
-            UIinfo={"groupes":("Post-traitements",)},
+IMPR_DIAG_CAMPBELL=MACRO(nom="IMPR_DIAG_CAMPBELL",op=impr_diag_campbell_ops, fr="Tracé du Diagramme de Campbell",
+            UIinfo={"groupes":("Impression","Outils-métier",)},
             MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
             MODES           =SIMP(statut='o',typ=table_container),
-            NFREQ_camp      =SIMP(statut='o',typ='I' ),
+            NFREQ_CAMP      =SIMP(statut='o',typ='I' ),
             TYP_PREC        =SIMP(statut='f',typ='I',defaut= 1, into=(1,2) ),
             TYP_TRI         =SIMP(statut='f',typ='I',defaut= 2, into=(0,1,2) ),
             UNIT_FLE        =SIMP(statut='o',typ='I' ,val_min=1),
@@ -16330,7 +17951,7 @@ IMPR_DIAG_CAMPBELL=MACRO(nom="IMPR_DIAG_CAMPBELL",op=impr_diag_campbell_ops, fr=
             UNIT_INT        =SIMP(statut='o',typ='I' ,val_min=1),
             L_S             =SIMP(statut='f',typ='R', defaut= 1., max='**'),
 );
-#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16353,7 +17974,7 @@ from Macro.impr_fonction_ops import impr_fonction_ops
 
 IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
                  fr="Imprime le contenu d'objets de type fonction ou liste de réels dans un fichier destiné à un traceur de courbe",
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Impression","Fonctions",)},
          FORMAT          =SIMP(statut='o',typ='TXM',position='global',defaut='TABLEAU',
                                into=("TABLEAU","AGRAF","XMGRACE",),),
          b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
@@ -16467,10 +18088,10 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -16488,7 +18109,7 @@ IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
 # RESPONSABLE BOYERE E.BOYERE
 IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
             fr="Imprimer le résultat d'un calcul dynamique en variables généralisées au format RESULTAT",
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Impression","Dynamique",)},
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
          UNITE           =SIMP(statut='f',typ='I',defaut=8),  
          GENE            =FACT(statut='o',max='**',
@@ -16521,7 +18142,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
            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='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**',into=C_NOM_CHAM_INTO(),),
            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='**'),
@@ -16529,7 +18150,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
            INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 03/08/2009   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16549,7 +18170,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Impression","Utilitaires",)},
                  fr="Imprimer le contenu des objets créés par JEVEUX (pour développeur)",
          ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
                                into=("DISQUE","MEMOIRE","REPERTOIRE",    
@@ -16590,10 +18211,10 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
          ),
          COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
 )  ;
-#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR CORUS M.CORUS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -16611,21 +18232,21 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
 # RESPONSABLE CORUS M.CORUS
 
 IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
-                    UIinfo={"groupes":("Impression",)},
+                    UIinfo={"groupes":("Impression","Outils-métier",)},
          fr="Impression d'une structure de données MACR_ELEM_DYNA au format IDEAS MISS3D PLEXUS ou CADYRO",
          MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
-                               into=("MISS_3D","IDEAS","CADYRO","PLEXUS") ),
+                               into=("MISS_3D","IDEAS") ),
 
-         b_plexus         =BLOC(condition = "FORMAT == 'IDEAS'",
+         b_ideas         =BLOC(condition = "FORMAT == 'IDEAS'",
            UNITE           =SIMP(statut='f',typ='I',defaut=30),
            VERSION          =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
          ),             
 
-         b_ideas         =BLOC(condition = "FORMAT == 'PLEXUS'",
-           UNITE           =SIMP(statut='f',typ='I',defaut=30),
-           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
-         ),                      
+#         b_plexus         =BLOC(condition = "FORMAT == 'PLEXUS'",
+#           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+#           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+#         ),                      
 
          b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
            regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
@@ -16643,20 +18264,49 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
            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") ),
-         ),
+#         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 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# RECUPERATION DES MAILLAGES IFS VENANT DE SATURNE VIA YACS
+#
+IMPR_MAIL_YACS=PROC(nom="IMPR_MAIL_YACS",op=43,
+            UIinfo={"groupes":("Maillage",)},
+               fr="Lecture d'un maillage via YACS lors du Couplage de Code_Aster et Saturne",
+         UNITE_MAILLAGE = SIMP(statut='f',typ='I',defaut=30),
+         TYPE_MAILLAGE = SIMP(statut='o',typ='TXM',into=("SOMMET","MILIEU")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -16673,7 +18323,7 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
 # ======================================================================
 # RESPONSABLE DEVESA G.DEVESA
 IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Impression","Outils-métier",)},
          fr="Impression des données d'entrée pour une étude sismique avec MISS3D",
          regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
                  PRESENT_PRESENT('INST_INIT','INST_FIN'),
@@ -16682,27 +18332,24 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
          EXCIT           =FACT(statut='f',max='**',
            regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
            VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
-           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
            COEF_MULT       =SIMP(statut='f',typ='R' ),
          ),
          EXCIT_SOL       =FACT(statut='f',max='**',
            DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
            FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
-                                 into=("DEPL","VITE","ACCE","FORC",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","FORC",),),
          ),
          SOURCE_SOL      =FACT(statut='f',max='**',
            POINT           =SIMP(statut='o',typ='R',min=3,max=3),
            DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
-           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
-                                 into=("DEPL","VITE","ACCE","FORC",) ),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","FORC",),),
          ),
          SOURCE_FLUIDE   =FACT(statut='f',max='**',
            POINT           =SIMP(statut='o',typ='R',min=3,max=3),
-           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
-                                 into=("DEPL","VITE","ACCE","FORC",) ),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","FORC",),),
          ),
          DIRE_ONDE       =SIMP(statut='f',typ='R',min=3,max=3),
          INST_INIT       =SIMP(statut='f',typ='R' ),
@@ -16714,7 +18361,7 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/11/2009   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16737,7 +18384,7 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
 from Macro.impr_oar_ops import impr_oar_ops
 IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
                fr="Impression au format OAR",
-               UIinfo={"groupes":("Impression",)},
+               UIinfo={"groupes":("Impression","Outils-métier",)},
    TYPE_CALC = SIMP(statut='o', typ='TXM',into=('COMPOSANT', 'MEF', 'TUYAUTERIE')),
    b_composant =BLOC(condition = "TYPE_CALC == 'COMPOSANT' ",
       regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
@@ -16784,10 +18431,10 @@ IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
    UNITE = SIMP(statut='f',typ='I',defaut=38),
    AJOUT = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
    );
-#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR SELLENET N.SELLENET 
+#& MODIF COMMANDE  DATE 11/05/2011   AUTEUR SELLENET N.SELLENET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -16804,7 +18451,7 @@ IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
 # ======================================================================
 # RESPONSABLE SELLENET N.SELLENET
 IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Impression","Résultats et champs",)},
                fr="Imprimer un maillage et/ou les résultats d'un calcul (différents formats)",
          MODELE          =SIMP(statut='f',typ=modele_sdaster),
 
@@ -16842,15 +18489,16 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
            VERSION         =SIMP(statut='f',typ='R',defaut=1.2,into=(1.0,1.2)),
          ),
 
-
-         RESTREINT   =FACT(statut='f', max=1,
-           fr="Pour réduire une ou plusieurs sd_resultat sur un ensemble de mailles",
-           regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
-           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+         b_restreint  =BLOC(condition="FORMAT=='MED'",fr="Seulement pour les fichiers MED",
+            RESTREINT   =FACT(statut='f', max=1,
+            fr="Pour réduire une ou plusieurs sd_resultat sur un ensemble de mailles",
+            regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+            TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+            ),
          ),
 
          RESU            =FACT(statut='o',max='**',
@@ -16920,6 +18568,11 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
            ),
+###
+           b_med=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and(FORMAT == 'MED')""",
+                                fr="renommage du champ",
+             NOM_CHAM_MED    =SIMP(statut='f',typ='TXM',validators=(LongStr(1,64),NoRepeat()),max='**'),
+           ),
 ###
            b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
                                 fr="sélection des composantes et des entités toplogiques",
@@ -16963,10 +18616,10 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 ) ;
-#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -16984,9 +18637,9 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
 # RESPONSABLE NISTOR I.NISTOR
 
 IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
-            UIinfo={"groupes":("Résolution",)},
-         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 ) ),
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r,matr_asse_gene_r) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r,matr_asse_gene_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'",
@@ -16999,13 +18652,36 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val
              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 ),
          UNITE           =SIMP(statut='f',typ='I',defaut=8),  
          PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
          SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS")),
+             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="SANS",into=("SANS","SANS") ),
+             ),
+             b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+               NPREC           =SIMP(statut='f',typ='I',defaut= 8, val_min=0),
+             ),
+             b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+               TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+               PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+               RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+               ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+               PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+               OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+               LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+           ),    
+
 )  ;
-#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17027,7 +18703,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val
 from Macro.impr_table_ops import impr_table_ops
 
 IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Impression","Tables",)},
                 fr="Impression du contenu d'une table dans un fichier",
            regles=(DERIVABLE("TABLE"),),
    TABLE          =SIMP(statut='o',typ=table_sdaster),
@@ -17128,7 +18804,7 @@ IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
    TITRE          =SIMP(statut='f',typ='TXM',max='**'),
    INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17154,7 +18830,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
          UNITE = SIMP(statut='o',typ='I'),
          INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17174,7 +18850,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
 # ======================================================================
 # RESPONSABLE DURAND C.DURAND
 INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Modélisation","Gestion du travail",)},
          fr="Récupérer les caractéristiques d'un matériau dans le Catalogue Materiaux d'Aster ",
          sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
          NOM_AFNOR       =SIMP(statut='o',typ='TXM' ),  
@@ -17193,7 +18869,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
          UNITE_LONGUEUR  =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17230,7 +18906,7 @@ INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
          TITRE          =SIMP(statut='f',typ='TXM',max='**'),
          INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17261,7 +18937,7 @@ def info_fonction_prod(self,ECART_TYPE,RMS,NOCI_SEISME,MAX,NORME, **args):
 INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_fonction_prod
                     ,fr="Opérations mathématiques sur des concepts de type fonction, fonction_c ou nappe",
                      reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Fonctions",)},
          regles=(UN_PARMI('MAX','RMS','NOCI_SEISME','NORME','ECART_TYPE',),),
          RMS             =FACT(statut='f',fr="Valeur RMS d'une fonction",max='**',
            METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
@@ -17311,6 +18987,8 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti
          ),
          MAX             =FACT(statut='f',fr="Extrémas locaux d'une fonction",
            FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           INTERVALLE      =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="définition des bornes des intervalles sous forme de couples (xi_i1,xs_i1,xi_i2,xs_i2)"),
          ),
          NORME           =FACT(statut='f',fr="Norme L2 d'une fonction",
             FONCTION      =SIMP(statut='o', typ=nappe_sdaster),
@@ -17328,7 +19006,7 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti
          ),     
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR SELLENET N.SELLENET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17348,12 +19026,12 @@ INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_foncti
 # ======================================================================
 # RESPONSABLE SELLENET N.SELLENET
 INFO_RESU=PROC(nom="INFO_RESU",op=40,
-               UIinfo={"groupes":("Impression",)},
+               UIinfo={"groupes":("Impression","Utilitaires",)},
                fr="Imprimer tous les champs présents dans une structure de données résultat",
                RESULTAT=SIMP(statut='f',typ=resultat_sdaster),
                UNITE=SIMP(statut='f',typ='I',defaut=6),
 );
-#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR GREFFET N.GREFFET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17372,11 +19050,13 @@ INFO_RESU=PROC(nom="INFO_RESU",op=40,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 # RESPONSABLE GREFFET
-INIT_COMPO=PROC(nom="INIT_COMPO",op=  117,
-                    fr="Initialiser adresse component YACS",
+INIT_COMPO=PROC(nom="INIT_COMPO",
+                op=  117,
+                UIinfo={"groupes":("Gestion du travail",)},
+                fr="Initialiser adresse component YACS",
            COMPO           =SIMP(statut='o',typ='I',),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17396,7 +19076,7 @@ INIT_COMPO=PROC(nom="INIT_COMPO",op=  117,
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements",)},
                   fr="Définition d'une courbe dans un maillage 2D",reentrant='n',
 
          MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
@@ -17458,7 +19138,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
          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/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17478,7 +19158,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements",)},
                   fr="Définir un chemin de type segment de droite dans un maillage 3D",reentrant='n',
          MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -17497,7 +19177,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17524,8 +19204,9 @@ def lire_champ_prod(TYPE_CHAM=None,**args):
   raise AsException("type de concept resultat non prevu")
 
 LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+                UIinfo={"groupes":("Lecture","Résultats et champs",)},
                 fr="Lire un champ dans un fichier au format MED et le stocker dans un concept.",
-                reentrant='n',UIinfo={"groupe":("Résultats et champs",)},
+                reentrant='n',
          MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster,),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),),
          UNITE           =SIMP(statut='f',typ='I',defaut= 81,),  
@@ -17566,10 +19247,10 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
                   ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -17598,9 +19279,9 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti
                    fr="Lit les valeurs réelles dans un fichier de données représentant une fonction et"
                      +" crée un concept de type fonction ou nappe",
                    reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Lecture","Fonctions",)},
          FORMAT          =SIMP(statut='f',typ='TXM',into=("LIBRE",),defaut="LIBRE"  ),
-         TYPE            =SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C","NAPPE"),defaut="FONCTION"  ),
+         TYPE            =SIMP(statut='f',typ='TXM',into=("Fonctions","FONCTION_C","NAPPE"),defaut="FONCTION"  ),
          SEPAR           =SIMP(statut='f',typ='TXM',into=("None",",",";","/"),defaut="None" ),
          INDIC_PARA      =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,1]),
          b_fonction      =BLOC(condition = "TYPE=='FONCTION' ",
@@ -17616,7 +19297,8 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti
          b_nappe         =BLOC(condition = "TYPE=='NAPPE' ",
            NOM_PARA_FONC   =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
            INDIC_ABSCISSE  =SIMP(statut='o',typ='I',min=2,max=2,),
-           INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG"),
+                                 fr="Type d'interpolation pour les abscisses et les ordonnées de la fonction"),
            PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
            PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
            DEFI_FONCTION   =FACT(statut='f',max='**',
@@ -17624,14 +19306,16 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti
          UNITE           =SIMP(statut='o',typ='I' ),
          NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
-         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG"),
+                               fr="Type d'interpolation pour les abscisses et les ordonnées de la " \
+                                  "fonction ou bien pour le paramètre de la nappe."),
          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 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17651,18 +19335,21 @@ LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_foncti
 # ======================================================================
 # RESPONSABLE DEVESA G.DEVESA
 LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
-                    fr="Création d un vecteur assemblé à partir de base modale",
+                    fr="Création d'un vecteur assemblé à partir d'une base modale",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},           
+            UIinfo={"groupes":("Matrices et vecteurs","Outils-métier",)},           
          BASE            =SIMP(statut='o',typ=mode_meca),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          FREQ_EXTR       =SIMP(statut='o',typ='R',max=1),
-         NOM_CMP         =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+         NOM_CMP         =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
          NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE"),defaut="DEPL"),
-         UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),
+         NUME_CHAR       =SIMP(statut='f',typ='I' ),
+         ISSF            =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),         
+         NOM_RESU_FORC   =SIMP(statut='f',typ='TXM' ),         
 )  ;
 
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17684,15 +19371,17 @@ LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
 LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
                     fr="Création d une matrice assemblée à partir de base modale",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},           
+            UIinfo={"groupes":("Matrices et vecteurs","Outils-métier",)},           
          BASE            =SIMP(statut='o',typ=mode_meca ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          FREQ_EXTR       =SIMP(statut='o',typ='R',max=1),
          UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+         ISSF            =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
          TYPE            =SIMP(statut='f',typ='TXM',defaut="ASCII",into=("BINAIRE","ASCII") ),         
+         SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
 )  ;
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17717,7 +19406,7 @@ from Macro.lire_inte_spec_ops import lire_inte_spec_ops
 LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fonction,
                     fr="Lecture sur un fichier externe de fonctions complexes pour créer une matrice interspectrale",
                     reentrant='n',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Lecture","Fonctions",)},
          UNITE           =SIMP(statut='o',typ='I' ),
          FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS") ),
@@ -17731,7 +19420,7 @@ LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fo
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 07/12/2009   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17754,7 +19443,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
                    fr="Crée un maillage par lecture d'un fichier au format Aster ou Med",
                    ang="Readings of a mesh file",
                    reentrant='n',
-            UIinfo={"groupes":("Maillage",)},
+            UIinfo={"groupes":("Lecture","Maillage",)},
 #
          UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
 #
@@ -17794,7 +19483,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 #
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17821,14 +19510,14 @@ def lire_miss_3d_prod(TYPE_RESU,**args):
 LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
                   fr="Restituer sur base physique une réponse harmonique ou transitoire issue de MISS3D",
                   reentrant='n',
-            UIinfo={"groupes":("Maillage",)},
+            UIinfo={"groupes":("Lecture","Outils-métier",)},
          MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
          UNITE           =SIMP(statut='f',typ='I',defaut= 27 ),
          NOM             =SIMP(statut='f',typ='TXM' ),
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17851,7 +19540,7 @@ LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
 LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
                  fr="Lire le fichier de résultats au format IDEAS produit par le logiciel EUROPLEXUS",
                  reentrant='n',
-            UIinfo={"groupes":("Maillage",)},
+            UIinfo={"groupes":("Lecture","Outils-métier",)},
          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",)),
@@ -17871,10 +19560,10 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
                    PRECISION       =SIMP(statut='o',typ='R',),),),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR SELLENET N.SELLENET 
+#& MODIF COMMANDE  DATE 08/03/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -17906,37 +19595,116 @@ def lire_resu_prod(TYPE_RESU,**args):
 
 # pour éviter d'écrire 3 fois cette liste :
 def l_nom_cham_pas_elga(): return (
-     "ACCE", "ACCE_ABSOLU", "CRIT_ELNO_RUPT", "DCHA_ELNO_SIGM",
-     "DCHA_NOEU_SIGM", "DEDE_ELNO_DLDE", "DEDE_NOEU_DLDE", "DEGE_ELNO_DEPL", "DEGE_NOEU_DEPL",
-     "DEPL", "DEPL_ABSOLU", "DESI_ELNO_DLSI", "DESI_NOEU_DLSI", "DETE_ELNO_DLTE", "DETE_NOEU_DLTE",
-     "DURT_ELNO_META", "DURT_NOEU_META", "ECIN_ELEM_DEPL", "EFGE_ELNO_CART", "EFGE_ELNO_DEPL",
-     "EFGE_NOEU_CART", "EFGE_NOEU_DEPL", "ENDO_ELNO_SIGA", "ENDO_ELNO_SINO", "ENDO_NOEU_SINO",
-     "ENEL_ELNO_ELGA", "ENEL_NOEU_ELGA", "EPEQ_ELNO_TUYO", "EPGR_ELNO", "EPME_ELNO_DEPL",
-     "EPMG_ELNO_DEPL", "EPMG_NOEU_DEPL", "EPOT_ELEM_DEPL", "EPSA_ELNO", "EPSA_NOEU",
-     "EPSG_ELNO_DEPL", "EPSG_NOEU_DEPL", "EPSI_ELNO_DEPL", "EPSI_ELNO_TUYO", "EPSI_NOEU_DEPL",
-     "EPSP_ELNO", "EPSP_NOEU", "EQUI_ELNO_EPME", "EQUI_ELNO_EPSI",
-     "EQUI_ELNO_SIGM", "EQUI_NOEU_EPME", "EQUI_NOEU_EPSI", "EQUI_NOEU_SIGM", "ERRE_ELEM_NOZ1",
-     "ERRE_ELEM_NOZ2", "ERRE_ELNO_ELGA", "ERRE_NOEU_ELGA", "ERTH_ELEM_TEMP", "ERTH_ELNO_ELEM",
-     "ETOT_ELEM", "ETOT_ELNO_ELGA", "FLUX_ELNO_TEMP", "FLUX_NOEU_TEMP", "FORC_NODA", "FSUR_2D",
-     "FSUR_3D", "FVOL_2D", "FVOL_3D", "GRAD_NOEU_THETA", "HYDR_ELNO_ELGA", "HYDR_NOEU_ELGA",
-     "INTE_ELNO_ACTI", "INTE_ELNO_REAC", "INTE_NOEU_ACTI", "INTE_NOEU_REAC", "IRRA",
-     "META_ELNO_TEMP", "META_NOEU_TEMP", "PMPB_ELNO_SIEF", "PMPB_NOEU_SIEF",
-     "PRES", "PRES_DBEL_DEPL", "PRES_ELNO_DBEL", "PRES_ELNO_IMAG", "PRES_ELNO_REEL",
-     "PRES_NOEU_DBEL", "PRES_NOEU_IMAG", "PRES_NOEU_REEL",
-     "RADI_ELNO_SIGM", "RADI_NOEU_SIGM", "REAC_NODA",
-     "SIEF_ELNO", "SIEF_ELNO_ELGA", "SIEF_NOEU", "SIEF_NOEU_ELGA", "SIEQ_ELNO_TUYO",
-     "SIGM_ELNO_CART", "SIGM_ELNO_COQU", "SIGM_ELNO_DEPL", "SIGM_ELNO_SIEF",
-     "SIGM_ELNO_TUYO", "SIGM_NOEU_CART", "SIGM_NOEU_COQU",
-     "SIGM_NOEU_DEPL", "SIGM_NOEU_SIEF", "SIGM_NOZ1_ELGA",
-     "SIGM_NOZ2_ELGA", "SIPO_ELNO_DEPL", "SIPO_ELNO_SIEF", "SIPO_NOEU_DEPL",
-     "SIPO_NOEU_SIEF", "SIRE_ELNO_DEPL", "SIRE_NOEU_DEPL", "TEMP", "THETA",
-     "VALE_CONT", "VALE_NCOU_MAXI", "VARI_ELNO", "VARI_ELNO_COQU",
-     "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA",
-     "VITE", "VITE_ABSOLU", "VITE_VENT",
+     "ACCE",
+     "ACCE_ABSOLU",
+     "CRIT_ELNO",
+     "DERA_ELNO",
+     "DERA_NOEU",
+     "DEDE_ELNO",
+     "DEDE_NOEU",
+     "DEGE_ELNO",
+     "DEGE_NOEU",
+     "DEPL",
+     "DEPL_ABSOLU",
+     "DESI_ELNO",
+     "DESI_NOEU",
+     "DETE_ELNO",
+     "DETE_NOEU",
+     "DURT_ELNO",
+     "DURT_NOEU",
+     "ECIN_ELEM",
+     "EFCA_ELNO",
+     "EFGE_ELNO",
+     "EFCA_NOEU",
+     "EFGE_NOEU",
+     "ENDO_ELNO",
+     "ENDO_NOEU",
+     "ENEL_ELNO",
+     "ENEL_NOEU",
+     "EPTQ_ELNO",
+     "EPGR_ELNO",
+     "EPME_ELNO",
+     "EPMG_ELNO",
+     "EPMG_NOEU",
+     "EPOT_ELEM",
+     "EPSA_ELNO",
+     "EPSA_NOEU",
+     "EPSG_ELNO",
+     "EPSG_NOEU",
+     "EPSI_ELNO",
+     "EPTU_ELNO",
+     "EPSI_NOEU",
+     "EPSP_ELNO",
+     "EPSP_NOEU",
+     "EPMQ_ELNO",
+     "EPEQ_ELNO",
+     "SIEQ_ELNO",
+     "EPMQ_NOEU",
+     "EPEQ_NOEU",
+     "SIEQ_NOEU",
+     "ERRE_ELEM_NOZ1",
+     "ERRE_ELEM_NOZ2",
+     "ERRE_ELNO_ELGA",
+     "ERRE_NOEU_ELGA",
+     "ERTH_ELEM_TEMP",
+     "ERTH_ELNO_ELEM",
+     "ETOT_ELEM",
+     "ETOT_ELNO",
+     "FLUX_ELNO",
+     "FLUX_NOEU",
+     "FORC_NODA",
+     "FSUR_2D",
+     "FSUR_3D",
+     "FVOL_2D",
+     "FVOL_3D",
+     "GRAD_NOEU_THETA",
+     "HYDR_ELNO",
+     "HYDR_NOEU",
+     "INTE_ELNO",
+     "INTE_NOEU",
+     "IRRA",
+     "META_ELNO",
+     "META_NOEU",
+     "PMPB_ELNO",
+     "PMPB_NOEU",
+     "PRES",
+     "PRME_ELNO",
+     "PRAC_ELNO",
+     "PRAC_NOEU",
+     "REAC_NODA",
+     "SIEF_ELNO",
+     "SIEF_ELNO",
+     "SIEF_NOEU",
+     "SIEF_NOEU",
+     "SITQ_ELNO",
+     "SICA_ELNO",
+     "SICO_ELNO",
+     "SIGM_ELNO",
+     "SITU_ELNO",
+     "SICA_NOEU",
+     "SICO_NOEU",
+     "SIGM_NOEU",
+     "SIZ1_ELGA",
+     "SIZ2_ELGA",
+     "SIPO_ELNO",
+     "SIPO_NOEU",
+     "TEMP",
+     "THETA",
+     "VALE_CONT",
+     "SPMX_ELGA",
+     "VARI_ELNO",
+     "VACO_ELNO",
+     "VARI_ELNO",
+     "VATU_ELNO",
+     "VARI_NOEU",
+     "VARI_NOEU",
+     "VITE",
+     "VITE_ABSOLU",
+     "VITE_VENT",
                            )
 
 LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
-            UIinfo={"groupes":("Résultats et champs",)},
+            UIinfo={"groupes":("Lecture","Résultats et champs",)},
                fr="Lire dans un fichier, soit format IDEAS, soit au format ENSIGHT soit au format MED,"
                  +" des champs et les stocker dans une SD résultat",
 
@@ -17959,7 +19727,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
          NB_VARI         =SIMP(statut='f',typ='I' ),
 
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater,),
-         
+
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem,),
 
           b_evol_elas  = BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
@@ -18001,7 +19769,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
          ),
          b_dataset_58_b = BLOC(condition="(FORMAT=='IDEAS_DS58') and ((TYPE_RESU=='DYNA_TRANS') or\
                                         (TYPE_RESU=='DYNA_HARMO') or (TYPE_RESU=='HARM_GENE'))",
-           NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU_DEPL","SIEF_NOEU",) ),
+           NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU","SIEF_NOEU",),max='**' ),
            REDEFI_ORIENT=FACT(statut='f',max='**',
                               regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
                               CODE_DIR =SIMP(statut='f',typ='I',into=(1,2,3,) ),
@@ -18032,11 +19800,6 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
              POSI_FREQ       =SIMP(statut='f',typ='I',min=2,max=2),
              NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),),
          ),
-             
-         b_mode   =BLOC(condition="((TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C') )and (FORMAT=='IDEAS')",
-             NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),max=1,
-                fr="Utile en dynamique pour pouvoir imposer la numérotation des cham_no."),     
-         ),
 
 # 1-3 ensight :
 # -------------
@@ -18064,8 +19827,11 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
 # 2) blocs selon le type du résultat :
 #---------------------------------
          b_mode_meca     =BLOC(condition="(TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C')",
-           MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,),
-           MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,),
+           # Ces mots cles sont stockes dans l'objet .REFD des mode_meca
+           # Ces mots cles sont aussi utilises  pour imposer la numerotation des cham_no de DEPL_R
+           MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,max=1),
+           MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,max=1),
+           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),max=1,),
          ),
 
 
@@ -18090,7 +19856,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18114,7 +19880,7 @@ from Macro.lire_table_ops import lire_table_ops
 
 LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
                  fr="Lecture d'un fichier contenant une table",
-            UIinfo={"groupes":("Table",)},
+            UIinfo={"groupes":("Lecture","Tables",)},
          UNITE           =SIMP(statut='o',typ='I' ),
          FORMAT          =SIMP(statut='f',typ='TXM',into=("ASTER",),defaut="ASTER"),
          NUME_TABLE      =SIMP(statut='f',typ='I',defaut=1),
@@ -18123,7 +19889,7 @@ LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          )  ;
 
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18146,7 +19912,7 @@ LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
 MAC_MODES=OPER(nom="MAC_MODES",op=  141,sd_prod=table_sdaster,
                fr="Critere orthogonalite de modes propres",
                reentrant='n',
-               UIinfo={"groupes":("Résolution",)},
+               UIinfo={"groupes":("Résolution","Dynamique",)},
                regles=(PRESENT_PRESENT('IERI','MATR_ASSE'),),
          BASE_1     =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
          BASE_2     =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
@@ -18155,30 +19921,31 @@ MAC_MODES=OPER(nom="MAC_MODES",op=  141,sd_prod=table_sdaster,
          TITRE      =SIMP(statut='f',typ='TXM',max='**'),
          INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 11/05/2011   AUTEUR SELLENET N.SELLENET 
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 
 
 from Macro.macr_adap_mail_ops import macr_adap_mail_ops
 
-def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
+def macr_adap_mail_prod(self, MAJ_CHAM, ADAPTATION, **args):
 #
 # 0. Typage des structures produites
 #
@@ -18201,7 +19968,7 @@ def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
 MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_adap_mail_prod,
                      fr="Adapter un maillage avec le logiciel HOMARD.",
                      ang="Mesh adaptation with the HOMARD software.",
-                     docu="U7.03.01-b",UIinfo={"groupe":("Maillage",)},
+                     docu="U7.03.01",UIinfo={"groupes":("Maillage",)},
 #
 # 1. Le niveau d'information
 #
@@ -18209,14 +19976,14 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
 # 2. Version de HOMARD
 #
-  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V9_6",
-                        into=("V9_6", "V9_N", "V9_N_PERSO"),
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V10_1",
+                        into=("V10_1", "V10_N", "V10_N_PERSO"),
                         fr="Version de HOMARD",
                         ang="HOMARD release"),
 #
 # 3. Langue des messages produits par HOMARD
 #
-  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",
                 into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
                 fr="Langue des messages produits par HOMARD.",
                 ang="Language for the HOMARD messages." ),
@@ -18231,20 +19998,20 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                       ang="Mesh before adaptation" ),
 #
   MAILLAGE_NP1 = SIMP(statut='o',typ=CO,
-                      fr="Maillage apres adaptation",
+                      fr="Maillage après adaptation",
                       ang="Mesh after adaptation" ),
 #
 # 4.2. Eventuellement, on peut produire un maillage annexe
 #      Actuellement, c'est le maillage n+1, mais de degré différent.
 #
   MAILLAGE_NP1_ANNEXE = SIMP(statut='f',typ=CO,
-                             fr="Maillage annexe apres adaptation",
+                             fr="Maillage annexe après adaptation",
                              ang="Additional mesh after adaptation" ),
 #
 # 5. Le pilotage de l'adaptation, avec les variantes suivantes :
-#  . Raffinement et deraffinement, selon un champ d'indicateurs d'erreur
-#  . Raffinement seul, selon un champ d'indicateurs d'erreur
-#  . Deraffinement seul, selon un champ d'indicateurs d'erreur
+#  . Raffinement et deraffinement, selon un champ
+#  . Raffinement seul, selon un champ
+#  . Deraffinement seul, selon un champ
 #  . Raffinement seul, selon des zones geometriques
 #  . Raffinement uniforme : toutes les mailles sont divisées
 #  . Deraffinement uniforme : toutes les mailles sont regroupées
@@ -18255,44 +20022,44 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                     into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT","RAFFINEMENT_ZONE", \
                           "RAFFINEMENT_UNIFORME","DERAFFINEMENT_UNIFORME", \
                           "MODIFICATION","RIEN"),
-                    fr="Pilotage de l'adaptation : selon un indicateur d'erreur ou uniforme.",
-                    ang="Adaptation control : either among an error indicator or uniform" ),
+                    fr="Pilotage de l'adaptation : selon un champ ou uniforme.",
+                    ang="Adaptation control : either among an field or uniform" ),
 #
-# 6. Pour de l'adaptation libre, il faut un indicateur d'erreur
+# 6. Pour de l'adaptation libre, il faut un champ ou une zone
 #
-  b_indicateur_d_erreur = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
-                                              (ADAPTATION == 'RAFFINEMENT') or \
-                                              (ADAPTATION == 'DERAFFINEMENT') " ,
-                                fr="Pour une adaptation libre, choix de l'indicateur d'erreur ou d'une zone à raffiner",
-                                ang="For a free adaptation, selection of the error indicator or of a zone",
+  b_champ = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                (ADAPTATION == 'RAFFINEMENT') or \
+                                (ADAPTATION == 'DERAFFINEMENT') " ,
+                  fr="Pour une adaptation libre, choix du champ ou d'une zone à raffiner",
+                  ang="For a free adaptation, selection of the field or of a zone",
 #
     regles=(UN_PARMI('CHAM_GD','RESULTAT_N')),
 #
-# 6.1. Repérage de la zone à raffiner à l'aide d'un indicateur
+# 6.1. Reperage de la zone a raffiner a l'aide d'un champ
 #
 # 6.1.1. Sous forme de champ de grandeur
 #
     CHAM_GD    = SIMP(statut='f',typ=cham_gd_sdaster,
-                      fr="Champ de grandeur Code_Aster contenant l'indicateur d'erreur",
-                      ang="Code_Aster champ de grandeur with error indicator" ),
+                      fr="Champ de grandeur Code_Aster pilotant l'adaptation",
+                      ang="Code_Aster 'champ de grandeur' governing the adapatation" ),
 #
 # 6.1.2. Sous forme de concept resultat_sdaster
 #
     RESULTAT_N = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ,
-                      fr="Concept resultat Code_Aster contenant l'indicateur d'erreur",
-                      ang="The Code_Aster result with error indicator" ),
+                      fr="Concept résultat Code_Aster contenant le champ",
+                      ang="The Code_Aster result with the field" ),
 #
-    b_champ_indicateur = BLOC(condition="(RESULTAT_N != None)",
-      INDICATEUR = SIMP(statut='o',typ='TXM',
-                        fr="Champ de l'indicateur d'erreur dans le résultat",
-                        ang="The error indicator field in the result structure" ),
+    b_champ_adaptation = BLOC(condition="(RESULTAT_N != None)",
+      NOM_CHAM = SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),
+                        fr="Champ dans le résultat",
+                        ang="The field in the result structure" ),
     ),
 #
-# 6.1.3. Est-ce un champ dérivé
+# 6.1.3. Est-ce un champ derive
 #
     b_sensibilite = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
                         fr="Est-ce un champ dérivé",
-                        ang="Is the indicator a derivative field",
+                        ang="Is the field a derivative field",
 #
       SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
                          fr="Paramètre de sensibilité.",
@@ -18303,27 +20070,27 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 # 6.1.4. La ou les composantes retenues
 #
     b_composante = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
-                        fr="Choix de la composante ou des composantes pour l'indicateur",
-                        ang="Selection of the component(s) for the error indicator",
+                        fr="Choix de la composante ou des composantes pour le champ",
+                        ang="Selection of the component(s) for the field",
 #
-      NOM_CMP_INDICA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
-                            fr="Liste des composante(s) retenue(s) pour l'indicateur d'erreur.",
-                            ang="List of the selected component(s) for the error indicator." ),
+      NOM_CMP = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                            fr="Liste des composante(s) retenue(s) pour le champ.",
+                            ang="List of the selected component(s) for the field." ),
 #
     ),
 #
-# 6.1.5. Le paramètre temporel pour l'indicateur
+# 6.1.5. Le paramètre temporel pour le champ
 #
     b_parametre_temporel = BLOC(condition="(RESULTAT_N != None)",
-                                fr="Choix éventuel du paramètre temporel pour l'indicateur",
-                                ang="Time selection for the error indicator (option)",
+                                fr="Choix éventuel du paramètre temporel pour le champ",
+                                ang="Time selection for the field (option)",
 #
       regles=(EXCLUS('NUME_ORDRE','INST'),),
 #
 # 6.1.5.1. Soit le numero d'ordre
 #
       NUME_ORDRE = SIMP(statut='f',typ='I',
-                        fr="Numero d ordre",
+                        fr="Numéro d ordre",
                         ang="Rank" ),
 #
 # 6.1.5.2. Soit l'instant
@@ -18353,34 +20120,34 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
     ),
 #
-# 6.1.6. Type de valeur de l'indicateur : absolue (norme L2), norme infinie, ou relative
+# 6.1.6. Usage des composantes : maximum, maximum de la valeur absolue, ou de la norme L2, ou de la norme infinie
 #
-    b_valeur_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
-                               fr="Type de valeur pour l'indicateur",
-                               ang="Type of the value type for the error indicator",
+    b_usage_cmp = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                       fr="Type d'usage de(s) composante(s)",
+                       ang="Type of the use for the component(s)",
 #
-      TYPE_VALEUR_INDICA = SIMP(statut='f',typ='TXM',defaut="V_ABSOLUE",
-                                into=("V_ABSOLUE", "NORME_L2", "NORME_INFINIE", "V_RELATIVE"),
-                                fr="Valeur absolue, norme des composantes ou valeur relative pour l'indicateur",
-                                ang="Absolute value, norm or relative value for the error indicator" ),
+      USAGE_CMP = SIMP(statut='f',typ='TXM',defaut="NORME_L2",
+                       into=("ABSOLU", "NORME_L2", "NORME_INFINIE", "RELATIF"),
+                       fr="Valeur absolue de la composante, ou norme du champ, ou valeur relative de la composante",
+                       ang="Absolute value of the component, or norm of the field, or relative value of the component" ),
 #
     ),
 #
-# 6.1.7. Type d'opération sur l'indicateur : la valeur par maille ou le max du saut entre mailles
+# 6.1.7. Usage du champ : la valeur par maille ou le max du saut entre mailles
 #
-    b_usage_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
-                              fr="Usage de l'indicateur : direct ou saut",
-                              ang="Use type for the error indicator : direct or jump",
+    b_usage_champ = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                         fr="Usage du champ : par maille ou saut entre mailles voisines",
+                         ang="Use type for the field : direct or jump",
 #
-      TYPE_OPER_INDICA = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"),
-                              fr="Usage de l'indicateur : la valeur par maille ou le saut entre mailles voisines",
-                              ang="Use of the indicator : value over every mesh or jump between neighbour" ),
+      USAGE_CHAMP = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"),
+                         fr="Usage du champ : la valeur par maille ou le saut entre mailles voisines",
+                         ang="Use of the field : value over every mesh or jump between the neighbours" ),
 #
     ),
 #
   ) ,
 #
-# 7. Les criteres pour de l'adaptation libre avec un indicateur d'erreur :
+# 7. Les criteres pour de l'adaptation libre avec un champ :
 #        absolu, relatif, en proportion d'entite
 # 7.1. Pour le raffinement :
 #
@@ -18428,7 +20195,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                  fr="Pour une adaptation selon une zone à raffiner",
                  ang="For adaptation among a zone",
 #
-    ZONE = FACT(statut='f',max='**',
+    ZONE = FACT(statut='o',min=1,max='**',
                 fr="Définition de zones à raffiner.",
                 ang="Refined zone definition.",
 #
@@ -18503,10 +20270,10 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 ##gn                           fr="X et Y du centre d'un disque plein ou perce, d'une sphere.",
 ##gn                           ang="X and Y of the centre of a disk or of a sphere.",
       X_CENTRE = SIMP(statut='f',typ='R',
-                      fr="Abscisse du centre du disque ou de la sphere",
+                      fr="Abscisse du centre du disque ou de la sphère",
                       ang="X for the center of the disk or of the sphere"),
       Y_CENTRE = SIMP(statut='f',typ='R',
-                      fr="Ordonnee du centre du disque ou de la sphere",
+                      fr="Ordonnée du centre du disque ou de la sphère",
                       ang="Y for the center of the disk or of the sphere"),
 ##gn      ) ,
 #
@@ -18516,7 +20283,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 ##gn                       fr="Cote du centre de la sphere.",
 ##gn                       ang="Z for the center of the sphere.",
        Z_CENTRE = SIMP(statut='f',typ='R',
-                       fr="Cote du centre de la sphere",
+                       fr="Cote du centre de la sphère",
                        ang="Z for the center of the sphere"),
 ##gn      ) ,
 #
@@ -18526,10 +20293,10 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 ##gn                                fr="Le rayon d'un disque perce ou d'un tuyau.",
 ##gn                                ang="The radius of a holed disk or of a pipe.",
       RAYON_INT = SIMP(statut='f',typ='R',
-                       fr="Rayon interieur",
+                       fr="Rayon intérieur",
                        ang="Internal radius"),
       RAYON_EXT = SIMP(statut='f',typ='R',
-                       fr="Rayon exterieur",
+                       fr="Rayon extérieur",
                        ang="External radius"),
 ##gn      ) ,
 #
@@ -18542,7 +20309,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                    fr="Abscisse du vecteur directeur de l'axe",
                    ang="X for the axial vector"),
       Y_AXE = SIMP(statut='f',typ='R',
-                   fr="Ordonnee du vecteur directeur de l'axe",
+                   fr="Ordonnée du vecteur directeur de l'axe",
                    ang="Y for the axial vector"),
       Z_AXE = SIMP(statut='f',typ='R',
                    fr="Cote du vecteur directeur de l'axe",
@@ -18551,7 +20318,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                     fr="Abscisse d'un point de la base, sur l'axe",
                     ang="X for the basis, on the axis"),
       Y_BASE = SIMP(statut='f',typ='R',
-                    fr="Ordonnee d'un point de la base, sur l'axe",
+                    fr="Ordonnée d'un point de la base, sur l'axe",
                     ang="Y for the basis, on the axis"),
       Z_BASE = SIMP(statut='f',typ='R',
                     fr="Cote d'un point de la base, sur l'axe",
@@ -18572,11 +20339,17 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                                          (ADAPTATION == 'RAFFINEMENT') or \
                                          (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
                                          (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
-                           fr="Niveau maximum de profondeur de raffinement",
-                           ang="Maximum level for the refinement",
+                           fr="Profondeur maximale de raffinement",
+                           ang="Maximum depth for the refinement",
+#
     NIVE_MAX = SIMP(statut='f',typ='I',
                     fr="Niveau maximum de profondeur de raffinement",
                     ang="Maximum level for the refinement"),
+#
+    DIAM_MIN = SIMP(statut='f',typ='R',
+                    fr="Diamètre minimal de maille",
+                    ang="Minimal diameter for the mesh" ),
+#
   ) ,
 #
 # 9.2. Pour le deraffinement :
@@ -18611,46 +20384,46 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                     ang="List of the groups of nodes for filtering of the adaptation." ),
   ) ,
 #
-# 11. Suivi d'une frontiere
+# 11. Suivi d'une frontière
 #
-# 11.1. Definition d'une frontiere par un maillage (valable seulement pour des frontieres 1D)
+# 11.1. Definition d'une frontière par un maillage (valable seulement pour des frontières 1D)
 #
   MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
-                           fr="Maillage de la frontiere à suivre",
-                           ang="Boundary mesh" ),
+                           fr="Maillage de la frontière discrète à suivre",
+                           ang="Discrete boundary mesh" ),
 #
-  b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
-                      fr="Information complémentaire sur la frontière",
-                      ang="Further information about boundary",
+  b_FRONTIERE = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière discrète",
+                      ang="Further information about discrete boundary",
 #
     GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
-                          fr="Liste des groupes de mailles définissant la frontière",
-                          ang="Mesh groups which define the boundary" ),
+                          fr="Liste des groupes de mailles définissant la frontière discrète",
+                          ang="Mesh groups which define the discrete boundary" ),
 #
   ) ,
 #
-# 11.2. Definition analytique d'une frontiere
+# 11.2. Definition analytique d'une frontière
 #
   FRONTIERE_ANALYTIQUE = FACT(statut='f',max='**',
-                              fr="Definition analytique de frontieres a suivre.",
+                              fr="Definition analytique de frontières a suivre.",
                               ang="Analytical definition of a boundary.",
 #
-# 11.2.1. Type de la frontiere
+# 11.2.1. Nom de la frontière
 #
-    TYPE = SIMP(statut='o',typ='TXM',into=("SPHERE", "CYLINDRE"),
-                fr="Type de la frontiere",
-                ang="Type of the boundary" ),
+    NOM = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+               fr="Nom de la frontière analytique",
+               ang="Name of the analytic boundary" ),
 #
-# 11.2.2. Groupe lie a la frontiere
+# 11.2.2. Type de la frontière
 #
-    GROUP_MA = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
-                    fr="Liste des groupes de mailles definissant la frontiere",
-                    ang="Groups of meshes which define the boundary" ),
+    TYPE = SIMP(statut='o',typ='TXM',into=("SPHERE", "CYLINDRE"),
+                fr="Type de la frontière analytique",
+                ang="Type of the analytic boundary" ),
 #
 # 11.2.3. Pour une sphere ou un cylindre : rayon et centre
 #
     b_fr_rayon = BLOC( condition = " (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
-                       fr="Le rayon et le centre d'une sphere ou d'un cylindre.",
+                       fr="Le rayon et le centre d'une sphère ou d'un cylindre.",
                        ang="The radius and the centre of a sphere or of a cylinder.",
       RAYON = SIMP(statut='o',typ='R',
                    fr="Rayon",
@@ -18659,7 +20432,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                       fr="Abscisse du centre",
                       ang="X for the center"),
       Y_CENTRE = SIMP(statut='o',typ='R',
-                      fr="Ordonnee du centre",
+                      fr="Ordonneée du centre",
                       ang="Y for the center"),
       Z_CENTRE = SIMP(statut='o',typ='R',
                       fr="Cote du centre",
@@ -18675,16 +20448,22 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                    fr="Abscisse du vecteur directeur de l'axe",
                    ang="X for the axial vector"),
       Y_AXE = SIMP(statut='o',typ='R',
-                   fr="Ordonnee du vecteur directeur de l'axe",
+                   fr="Ordonnée du vecteur directeur de l'axe",
                    ang="Y for the axial vector"),
       Z_AXE = SIMP(statut='o',typ='R',
                    fr="Cote du vecteur directeur de l'axe",
                    ang="Z for the axial vector"),
     ) ,
+#
+# 11.2.5. Groupe(s) lie(s) a la frontière
+#
+    GROUP_MA = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles placées sur la frontière",
+                    ang="Groups of meshes which are located on the boundary" ),
 #
   ) ,
 #
-# 12. Mise à jour de champs sur le nouveau maillage
+# 12. mise à jour de champs sur le nouveau maillage
 #
   MAJ_CHAM = FACT(statut='f',max='**',
                   fr="Mise à jour de champs sur le nouveau maillage.",
@@ -18698,7 +20477,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
 # 12.2. Le type du champ qui contiendra le resultat de la mise a jour
 #
-    TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(),
+    TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO( ('NOEU', 'ELNO', 'ELEM') ),
                      fr="Type du champ qui contiendra le champ mis à jour",
                      ang="Type of the field for the updated field" ),
 #
@@ -18715,24 +20494,24 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 # 12.3.2. Sous forme de champ dans un resultat
 #
     RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
-                    fr="Resultat contenant le champ à mettre à jour",
+                    fr="Résultat contenant le champ à mettre à jour",
                     ang="Result with the field to be updated" ),
 #
     b_nom_du_champ = BLOC(condition="(RESULTAT != None)",
                           fr="Choix éventuel du nom du champ à interpoler",
                           ang="Selection for the name of the field (option)",
 #
-      NOM_CHAM = SIMP(statut='o',typ='TXM',
+      NOM_CHAM = SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),
                       fr="Nom du champ à mettre à jour",
                       ang="Name of the field to be updated" ),
 #
     ),
 #
-# 12.4. Est-ce un champ dérivé
+# 12.4. Les composantes
 #
-    SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
-                       fr="Paramètre de sensibilité.",
-                       ang="Sensitivity parameter"),
+    NOM_CMP = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                   fr="Liste des composante(s) retenue(s) pour le champ.",
+                   ang="List of the selected component(s) for the field." ),
 #
 # 12.5. Le paramètre temporel pour le champ a interpoler
 #
@@ -18745,7 +20524,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 # 12.5.1. Soit le numero d'ordre
 #
       NUME_ORDRE = SIMP(statut='f',typ='I',
-                        fr="Numero d ordre du champ à mettre à jour",
+                        fr="Numéro d ordre du champ à mettre à jour",
                         ang="Rank of the field to be updated" ),
 #
 # 12.5.2. Soit l'instant
@@ -18776,6 +20555,19 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
       ),
 #
     ),
+#
+# 12.6. Type d'interpolation
+#
+    TYPE_MAJ = SIMP(statut='f',typ='TXM',defaut="AUTO",
+                    into=("AUTO", "ISOP2"),
+                    fr="Type de mise à jour : automatique ou iso-P2",
+                    ang="Type of the updating" ),
+#
+# 12.7. Est-ce un champ dérivé
+#
+    SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+                       fr="Paramètre de sensibilité.",
+                       ang="Sensitivity parameter"),
   ),
 #
 # 13. Les Modifications
@@ -18789,7 +20581,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 # 13.1. Changement de degre
 #
       DEGRE         = SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON"),
-                          fr="Changement de degre du maillage",
+                          fr="Changement de degré du maillage",
                           ang="Modification of the degree of the mesh" ),
 #
 # 13.2. Création des joints
@@ -18807,7 +20599,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                         fr="Nombre de noeuds et de mailles du maillage",
                         ang="Number of nodes and meshes in the mesh" ),
 #
-# 14.2. Determination de la qualité des éléments du maillage
+# 14.2. Determination de la qualité des mailles du maillage
 #
   QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                         fr="Qualité du maillage",
@@ -18839,13 +20631,13 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
 # 15. Unite logique d'un fichier a ajouter a HOMARD.Configuration
 #
-  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V9_N') or \
-                                (VERSION_HOMARD == 'V9_N_PERSO') " ,
-                                fr="Fichier supplementaire.",
+  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V10_N') or \
+                                (VERSION_HOMARD == 'V10_N_PERSO') " ,
+                                fr="Fichier supplémentaire.",
                                 ang="Additional file.",
 #
   UNITE = SIMP(statut='f',typ='I',
-               fr="Unite logique a ajouter a HOMARD.Configuration",
+               fr="Unite logique du fichier à ajouter à HOMARD.Configuration",
                ang="Additional file to HOMARD.Configuration" ),
 #
   ) ,
@@ -18859,10 +20651,10 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                              ang="Incompatible meshes for HOMARD" ),
 #
 ) ;
-#& MODIF COMMANDE  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -18890,8 +20682,7 @@ def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,RESU_THER,*
 MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=macr_ascouf_calc_prod,
                       fr="Réalise l'analyse thermomécanique du coude dont le maillage a été concu par MACR_ASCOUF_MAIL",
                       reentrant='n',
-            UIinfo={"groupes":("Outils métier",)},
-         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+            UIinfo={"groupes":("Résolution","Outils-métier",)},
 
          TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
                                into=("SAIN",
@@ -18915,7 +20706,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma
          AFFE_MATERIAU   =FACT(statut='o',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") ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,into=("COUDE","BOL") ),
            MATER           =SIMP(statut='o',typ=mater_sdaster ),
            TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
@@ -18943,24 +20734,8 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma
            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
          ),
 
-         COMP_INCR       =FACT(statut='f',
-           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
-           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 ),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
-         ),
 
-         COMP_ELAS       =FACT(statut='f',
-           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
-           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 ),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
-         ),
+         COMP_ELAS       =C_COMP_ELAS('MACR_ASCOUF_CALC'),
 
          SOLVEUR         =C_SOLVEUR(),
 
@@ -19016,7 +20791,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19038,7 +20813,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=ma
 from Macro.macr_ascouf_mail_ops import macr_ascouf_mail_ops
 MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=maillage_sdaster,
             fr="Engendre le maillage d'un coude sain ou comportant une fissure ou une (ou plusieurs) sous-épaisseur(s)",
-            UIinfo={"groupes":("Outils métier",)},reentrant='n',
+            UIinfo={"groupes":("Maillage","Outils-métier",)},reentrant='n',
 
          regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
 
@@ -19164,10 +20939,10 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=ma
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -19196,8 +20971,7 @@ def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_
 
 MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_aspic_calc_prod,
             fr="Réalise un calcul prédéfini de piquages sains ou fissurés ainsi que les post-traitements associés ",
-            UIinfo={"groupes":("Outils métier",)},reentrant='n',
-         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+            UIinfo={"groupes":("Résolution","Outils-métier",)},reentrant='n',
 
          TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
                                into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
@@ -19217,7 +20991,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_
          AFFE_MATERIAU   =FACT(statut='o',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") ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
            MATER           =SIMP(statut='o',typ=mater_sdaster),
            TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            RCCM            =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
@@ -19264,23 +21038,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_
            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
          ),
 
-         COMP_INCR       =FACT(statut='f',
-           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
-           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),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
-         ),
-
-         COMP_ELAS       =FACT(statut='f',
-           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
-           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 ),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
-         ),
+         COMP_ELAS       =C_COMP_ELAS('MACR_ASPIC_CALC'),
 
          THETA_3D        =FACT(statut='f',max='**',
            R_INF           =SIMP(statut='o',typ='R'),
@@ -19321,8 +21079,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_
            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',validators=NoRepeat(),max=3,
-                                   into=("DEPL","EQUI_ELNO_SIGM","TEMP")),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","SIEQ_ELNO","TEMP")),
 
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
@@ -19334,7 +21091,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_
 
          TITRE           =SIMP(statut='f',typ='TXM'),
 )
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19358,7 +21115,7 @@ from Macro.macr_aspic_mail_ops import macr_aspic_mail_ops
 
 MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= macr_aspic_mail_ops,sd_prod=maillage_sdaster,reentrant='n',
             fr="Engendre le maillage d'un piquage sain ou avec fissure (longue ou courte)",
-            UIinfo={"groupes":("Outils métier",)},
+            UIinfo={"groupes":("Maillage","Outils-métier",)},
 
          EXEC_MAILLAGE   =FACT(statut='o',
            LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
@@ -19431,7 +21188,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= macr_aspic_mail_ops,sd_prod=mail
 
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 30/06/2008   AUTEUR FLEJOU J-L.FLEJOU 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19508,10 +21265,10 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
                                  fr="type de conditions aux limites sur le plancher supérieur" ),
             ),
 )
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -19537,14 +21294,14 @@ def macr_ecla_pg_prod(self,RESULTAT,MAILLAGE,RESU_INIT,**args):
 
 
 MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_prod, reentrant='n',
-             UIinfo={"groupes":("Post traitements",)},
+             UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
              fr="Permettre la visualisation des champs aux points de Gauss d'une SD_RESULTAT sans lissage ni interpolation",
 
 
              # SD résultat ,modèle et champs à "éclater" :
              RESU_INIT       =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à éclater",),
              MODELE_INIT     =SIMP(statut='o',typ=modele_sdaster,fr="MODELE à éclater"),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO('ELGA'),),
 
              # paramètres numériques de la commande :
              SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
@@ -19572,10 +21329,10 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p
              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
                  PRECISION       =SIMP(statut='o',typ='R',),),
             )
-#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#& MODIF COMMANDE  DATE 28/02/2011   AUTEUR BOTTONI M.BOTTONI 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -19601,9 +21358,9 @@ def macr_ecre_calc_prod(self,TABLE,DEBIT,**args):
   return None
 
 MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",op=macr_ecre_calc_ops,sd_prod=macr_ecre_calc_prod,reentrant='n',
-                     UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+                     UIinfo={"groupes":("Résolution","Outils-métier",)},fr="Procedure de couplage avec Ecrevisse",
 
-         regles             = (UN_PARMI('LOGICIEL','VERSION'),),
+                     regles = (UN_PARMI('LOGICIEL','VERSION'),),
 
 #      CONCEPTS SORTANT : 2 TABLES POUR LE POST-TRAITEMENT
 #      ********************************************
@@ -19748,16 +21505,16 @@ MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",op=macr_ecre_calc_ops,sd_prod=macr_ecr
          COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
                                   fr="Generation eventuelle des courbes" ),
          LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
-         VERSION            =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+         VERSION            =SIMP(statut='f',typ='TXM',into = ("3.1.1","3.1.2","3.2")),
          ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
          IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
          INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#& MODIF COMMANDE  DATE 28/02/2011   AUTEUR BOTTONI M.BOTTONI 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -19787,9 +21544,9 @@ def macr_ecrevisse_prod(self,TABLE,TEMPER,DEBIT,**args):
 
 
 MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecrevisse_prod,reentrant='f',
-                       UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+                       UIinfo={"groupes":("Résolution","Outils-métier",)},fr="Procedure de couplage avec Ecrevisse",
 
-       reuse =SIMP(statut='f',typ='evol_noli'),
+       reuse  = SIMP(statut='f',typ='evol_noli'),
        regles = (EXCLUS('TEMPER','ETAT_INIT'),
                  UN_PARMI('LOGICIEL','VERSION'),),
 
@@ -19976,7 +21733,7 @@ MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecr
          COURBES            = SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
                                   fr="Generation eventuelle des courbes" ),
          LOGICIEL           = SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
-         VERSION            = SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2") ),
+         VERSION            =SIMP(statut='f',typ='TXM',into = ("3.1.1","3.1.2","3.2")),
          ENTETE             = SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
          IMPRESSION         = SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
          INFO               = SIMP(statut='f',typ='I',defaut="1",into=(1,2) ),
@@ -20041,7 +21798,7 @@ MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecr
          PARM_THETA         =SIMP(statut='f',typ='R',defaut= 0.57),
 
 )
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20064,7 +21821,7 @@ MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecr
 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",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
          regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),
                  PRESENT_ABSENT('MATR_IMPE','MATR_RIGI','MATR_MASS'),),
          BASE_MODALE     =SIMP(statut='o',typ=mode_meca ),
@@ -20077,13 +21834,14 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
          b_matr_impe     =BLOC(condition = "MATR_IMPE != None",
              FREQ_EXTR       =SIMP(statut='o',typ='R' ),
              AMOR_SOL        =SIMP(statut='f',typ='R',defaut=0.E+0 ),
+             MATR_IMPE_INIT  =SIMP(statut='f',typ=matr_asse_gene_c ),
            ),
          CAS_CHARGE      =FACT(statut='f',max='**',
            NOM_CAS         =SIMP(statut='o',typ='TXM'),
            VECT_ASSE_GENE  =SIMP(statut='o',typ=vect_asse_gene ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20103,7 +21861,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant='f',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
                     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'),),
@@ -20139,7 +21897,7 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant=
          ),
 
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20162,7 +21920,7 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant=
 from Macro.macr_fiab_impr_ops import macr_fiab_impr_ops
 
 MACR_FIAB_IMPR=MACRO(nom="MACR_FIAB_IMPR",op=macr_fiab_impr_ops,
-                     docu="U7.04.41",UIinfo={"groupe":("Impression",)},
+                     docu="U7.04.41",UIinfo={"groupes":("Impression","Outils-métier",)},
                      fr="Imprimer les valeurs à transmettre au logiciel de fiabilité.",
                      ang="Print values for the fiability software",
 #
@@ -20209,7 +21967,7 @@ MACR_FIAB_IMPR=MACRO(nom="MACR_FIAB_IMPR",op=macr_fiab_impr_ops,
          ),
 #
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20244,7 +22002,7 @@ def macr_fiabilite_prod ( self , **args ):
 #====
 #
 MACR_FIABILITE = MACRO ( nom="MACR_FIABILITE",op=macr_fiabilite_ops,
-                         docu="U7.03.31",UIinfo={"groupe":("Post traitements",)},
+                         docu="U7.03.31",UIinfo={"groupes":("Post-traitements","Outils-métier",)},
                          sd_prod=macr_fiabilite_prod,
                          fr="Calcule les probabiltés de dépassement de seuil (mécanique de fiabilité).",
                          ang="Fiability mechanics.",
@@ -20588,30 +22346,31 @@ MACR_FIABILITE = MACRO ( nom="MACR_FIABILITE",op=macr_fiabilite_ops,
    ),
 #
 );
-#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 11/05/2011   AUTEUR SELLENET N.SELLENET 
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 
 from Macro.macr_adap_mail_ops import macr_adap_mail_ops
 
 MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
-                     docu="U7.03.02-b",UIinfo={"groupe":("Maillage",)},
+                     docu="U7.03.02",UIinfo={"groupes":("Maillage",)},
                      fr="Donner des informations sur un maillage.",
                      ang="To give information about a mesh.",
 #
@@ -20621,14 +22380,14 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
 #
 # 2. Version de HOMARD
 #
-  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V9_6",
-                        into=("V9_6", "V9_N", "V9_N_PERSO"),
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V10_1",
+                        into=("V10_1", "V10_N", "V10_N_PERSO"),
                         fr="Version de HOMARD",
                         ang="HOMARD release"),
 #
 # 3. Langue des messages issus de HOMARD
 #
-  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+  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." ),
@@ -20655,7 +22414,7 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
 #
                     ) ,
 #
-# 6. Les options ; par defaut, on controle tout
+# 6. Les options ; par defaut, on controle tout, sauf l'interpénétration
 # 6.1. Nombre de noeuds et mailles
 #
   NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
@@ -20680,10 +22439,10 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
                         fr="Tailles des sous-domaines du maillage.",
                         ang="Sizes of mesh sub-domains." ),
 #
-# 6.5. Controle de la non-interpenetration des elements
+# 6.5. Controle de la non-interpénétration des mailles
 #
   INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
-                        fr="Controle de la non interpénétration des éléments.",
+                        fr="Controle de la non interpénétration des mailles.",
                         ang="Overlapping checking." ),
 #
 # 6.6. Propriétés du maillage de calcul
@@ -20692,10 +22451,10 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
                         fr="Propriétés du maillage de calcul.",
                         ang="Properties of the calculation mesh." ),
 #
-# 7. Unite logique d'un fichier a ajouter a HOMARD.Configuration
+# 7. Unite logique d'un fichier à ajouter a HOMARD.Configuration
 #
-  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V9_N') or \
-                                (VERSION_HOMARD == 'V9_N_PERSO') " ,
+  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V10_N') or \
+                                (VERSION_HOMARD == 'V10_N_PERSO') " ,
                                 fr="Fichier supplementaire.",
                                 ang="Additional file.",
 #
@@ -20713,10 +22472,11 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
                              fr="Acceptation de mailles incompatibles avec HOMARD",
                              ang="Incompatible meshes for HOMARD" ),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -20737,7 +22497,7 @@ from Macro.macr_lign_coupe_ops import macr_lign_coupe_ops
 
 MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table_sdaster,
                        reentrant='n',
-            UIinfo={"groupes":("Outils métier",)},
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
             fr="Extraction des valeurs d'un résultat dans une ou plusieurs tables sur des lignes de coupe définies"
              +" par deux points et un intervalle",
             regles=(UN_PARMI("RESULTAT","CHAM_GD"),),
@@ -20760,13 +22520,19 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
 
 # extraction des résultats
          b_meca        =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique",
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU',into=C_NOM_CHAM_INTO(),),
          ),
          b_ther        =BLOC(condition = "AsType(RESULTAT) in (evol_ther,)",fr="résultat thermique",
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='TEMP' ),
-         ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='TEMP',into=("TEMP",
+                                 "FLUX_ELGA","FLUX_ELNO","FLUX_NOEU",
+                                 "META_ELNO","META_NOEU",
+                                 "DURT_ELNO","DURT_NOEU",
+                                 "HYDR_ELNO","HYDR_NOEU",
+                                 "DETE_ELNO","DETE_NOEU",
+                                 "SOUR_ELGA","COMPORTHER",
+                                 "ERTH_ELEM","ERTH_ELNO","ERTH_NOEU",),),),
          b_cham       =BLOC(condition = "CHAM_GD!=None",
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO(),),),
 
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=25),
          MODELE          =SIMP(statut='f',typ=modele_sdaster ),
@@ -20800,7 +22566,7 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
 
 
            b_local        =BLOC(condition = "REPERE=='LOCAL' ",
-             VECT_Y          =SIMP(statut='o',typ='R',min=2,max=3),),
+             VECT_Y          =SIMP(statut='f',typ='R',min=2,max=3),),
 
            b_utili        =BLOC(condition = "REPERE=='UTILISATEUR'",
              ANGL_NAUT       =SIMP(statut='o',typ='R',min=3,max=3),),
@@ -20836,10 +22602,10 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
 )  ;
 
 
-#& MODIF COMMANDE  DATE 22/04/2010   AUTEUR ASSIRE A.ASSIRE 
+#& MODIF COMMANDE  DATE 28/03/2011   AUTEUR ASSIRE A.ASSIRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -20862,7 +22628,7 @@ def macr_recal_prod(self,**args ):
   return listr8_sdaster
 
 MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
-            UIinfo={"groupes":("Résultats et champs",)},
+            UIinfo={"groupes":("Résolution","Résultats et champs",)},
                       sd_prod=macr_recal_prod,
                       fr="Réalise le recalage des calculs Aster sur des résultats expérimentaux"
                         +" ou sur d'autres résultats de calculs",
@@ -20930,6 +22696,8 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
             LANCEMENT         =SIMP(statut='f', typ='TXM', defaut='INCLUSION',into=("DISTRIBUTION","INCLUSION"),),
 
             b_eval_distrib =BLOC(condition = "LANCEMENT == 'DISTRIBUTION'",
+                UNITE_SUIVI   =SIMP(statut='f', typ='I',val_min=10,val_max=99,defaut=29, 
+                                  fr="Affichage de l'output et/ou error des jobs esclaves dans ce fichier"),
                 MODE          =SIMP(statut='f', typ='TXM',      into=("INTERACTIF","BATCH"),),
                 MEMOIRE       =SIMP(statut='f', typ='I',        fr="Memoire demandee pour les calculs esclaves (Mo)"),
                 TEMPS         =SIMP(statut='f', typ='I',        fr="Temps demandee pour les calculs esclaves (secondes)"),
@@ -20945,9 +22713,9 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
                APPARIEMENT_MANUEL =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON")),           
                                ),
 
-         INFO            =SIMP(statut='f',typ='I',defaut=2,into=( 1, 2 ) ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1, into=( 1, 2 ) ),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -20970,8 +22738,9 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
 from Macro.macr_spectre_ops import macr_spectre_ops
 
 MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster,
-                       reentrant='n', UIinfo={"groupes":("Outils métier",)},
-                       fr="calcul de spectre, post-traitement de séisme",
+                       reentrant='n',
+                       UIinfo={"groupes":("Post-traitements","Outils-métier",)},
+                       fr="Calcul de spectre, post-traitement de séisme",
          MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster,),
          PLANCHER      =FACT(statut='o',max='**',
             regles=(AU_MOINS_UN('NOEUD','GROUP_NO' ),),
@@ -21018,10 +22787,10 @@ MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster,
                    DEPL_Z        =SIMP(statut='o',typ=fonction_sdaster),),),
          ),
 )
-#& MODIF COMMANDE  DATE 19/01/2010   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -21067,17 +22836,17 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
            TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
            CHAR_MECA       =SIMP(statut='f',typ=(char_meca),validators=NoRepeat(),max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),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","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA",
-                                       "ERZ2_ELEM_SIGM","VNOR_ELEM_DEPL","ERRE_ELNO_ELEM","SIRE_ELNO_DEPL",
-                                       "ERRE_ELEM_SIGM","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
-                                       "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
-                                       "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") ),
+                                 into=("EFGE_ELNO","EPOT_ELEM","SIGM_ELNO","SIEF_ELGA",
+                                       "SICA_ELNO","EFCA_ELNO","DEGE_ELNO","EPSI_ELNO",
+                                       "EPSI_ELGA","EPSG_ELNO","EPSG_ELGA","EPSP_ELNO","EPSP_ELGA",
+                                       "ECIN_ELEM","FLUX_ELGA","FLUX_ELNO","SOUR_ELGA",
+                                       "PRAC_ELNO","INTE_ELNO",
+                                       "SIZ1_ELGA","ERZ1_ELEM","SIZ2_ELGA",
+                                       "ERZ2_ELEM","VNOR_ELEM_DEPL","ERME_ELNO",
+                                       "ERME_ELEM","SIEQ_ELNO","SIEQ_ELGA","EPEQ_ELNO",
+                                       "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                       "EPEQ_ELGA","FORC_NODA","REAC_NODA","EPSI_NOEU","SIGM_NOEU",
+                                       "EFGE_NOEU","SIEQ_NOEU","EPEQ_NOEU","FLUX_NOEU") ),
            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='**'),
@@ -21101,10 +22870,10 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -21140,7 +22909,7 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
                    op=macro_expans_ops,
                    sd_prod=macro_expans_prod,
                    reentrant='n',
-                   UIinfo={"groupes":("Outils métier",)},
+                   UIinfo={"groupes":("Outils-métier","Dynamique",)},
                    fr="Outil d'expansion de resultats exprimentaux sur une base definie sur un modele numerique",
                         MODELE_CALCUL   = FACT(statut='o',
                            MODELE          = SIMP(statut='o',typ=(modele_sdaster) ),
@@ -21153,7 +22922,7 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
                            MODELE          = SIMP(statut='o',typ=(modele_sdaster) ),
                            MESURE          = SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
                            NOM_CHAM        = SIMP(statut='f',typ='TXM',defaut="DEPL",
-                                                  into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
+                                                  into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU",) ),
                            NUME_MODE       = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
                            NUME_ORDRE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
 
@@ -21176,10 +22945,10 @@ MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
                                         ),
                                              ),
                    )
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -21209,7 +22978,7 @@ def macro_matr_ajou_prod(self,MATR_AMOR_AJOU,MATR_MASS_AJOU,MATR_RIGI_AJOU,FORC_
   return None
 
 MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro_matr_ajou_prod,
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Résolution","Matrices et vecteurs",)},
             fr="Calculer de facon plus condensée qu'avec CALC_MATR_AJOU des matrices de masse, d'amortissement"
               +" ou de rigidité ajoutés",
       regles=(AU_MOINS_UN('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
@@ -21278,7 +23047,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -21296,12 +23065,20 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
 
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
@@ -21310,10 +23087,10 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro
          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 17/11/2008   AUTEUR DELMAS J.DELMAS 
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -21358,7 +23135,7 @@ def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
   return None
 
 MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
                       sd_prod=macro_matr_asse_prod,
                       fr="Calcul des matrices assemblées (rigidité, masse, amortissement,...) ",
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
@@ -21377,8 +23154,9 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
            RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
          ),
          b_mumps         =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
-           RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+           RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
            OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
          ),
          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"  ),
@@ -21422,7 +23200,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR GREFFET N.GREFFET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21446,7 +23224,7 @@ from Macro.macro_miss_3d_ops import macro_miss_3d_ops
 
 MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
             fr="Préparation des données puis exécution du logiciel MISS3D",
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Résolution","Outils-métier",)},
          OPTION          =FACT(statut='o',
            regles=(UN_PARMI('TOUT','MODULE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
@@ -21491,7 +23269,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
            DIRE_ONDE       =SIMP(statut='f',typ='R',max='**'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21515,7 +23293,7 @@ from Macro.macro_mode_meca_ops import macro_mode_meca_ops
 
 MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_meca,
                      reentrant='n',fr="Lancer une succession de calculs de modes propres réels",
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          MATR_A          =SIMP(statut='o',typ=matr_asse_depl_r ),
          MATR_B          =SIMP(statut='o',typ=matr_asse_depl_r ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
@@ -21552,7 +23330,6 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_
            NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),  
            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 ),  
            SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
@@ -21582,7 +23359,7 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_
                                  into=("MASS_EFFE_UN","MASS_GENE",) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21615,7 +23392,7 @@ def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,**args ):
 
 MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
          regles=(AU_MOINS_UN('MATR_ASSE_GENE','VECT_ASSE_GENE')),
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
                       sd_prod=macro_proj_base_prod,
          fr="Projection des matrices et/ou vecteurs assemblés sur une base (modale ou de RITZ)",
          BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
@@ -21636,10 +23413,10 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -21655,17 +23432,21 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+#
 MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
-            UIinfo={"groupes":("Gestion du travail",)},
-              fr="Compilation des catalogues de commandes et d'éléments",
+              UIinfo={"groupes":("Gestion du travail",)},
+              fr="Compilation des catalogues d'éléments et couverture des calculs élémentaires",
+              regles=(UN_PARMI('ELEMENT','TYPE_ELEM', ),),
 
-         ELEMENT         =FACT(statut='f',),
+              ELEMENT     =FACT(statut='f',),
 
-)  ;
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+              UNITE       =SIMP(statut='f',typ='I',defaut=8),       
+              TYPE_ELEM   =FACT(statut='f',),
+);
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -21683,7 +23464,7 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
 # RESPONSABLE PELLET J.PELLET
 MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
                    fr="Résoudre un problème de mécanique statique linéaire",reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Mécanique",)},
          regles=(EXCLUS("INST","LIST_INST"),
                  AU_MOINS_UN('CHAM_MATER','CARA_ELEM',),
                  CONCEPT_SENSIBLE('ENSEMBLE'),),
@@ -21703,7 +23484,7 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
          INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
          INST_FIN        =SIMP(statut='f',typ='R'),
-         OPTION          =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA_DEPL","SANS"),defaut="SIEF_ELGA_DEPL",max=1,
+         OPTION          =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA","SANS"),defaut="SIEF_ELGA",max=1,
              fr="seule option : contraintes aux points de Gauss. Utiliser CALC_ELEM pour les autres.",
                           ),
          SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
@@ -21711,7 +23492,7 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
                                ang="List of sensitivity parameters"),
 
          SOLVEUR         =FACT(statut='d',
-         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS","PETSC") ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS","PETSC")),
 
            b_feti          =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
              PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
@@ -21747,13 +23528,13 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
            ),
 
            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","LDLT_SP",),defaut="LDLT_INC" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP","SANS",),defaut="LDLT_INC" ),
              b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
                NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -21763,29 +23544,38 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              MATR_DISTRIBUEE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
 
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21808,7 +23598,7 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
                     fr="Calcul des modes propres d'une structure à répétitivité cyclique à partir"
                         +" d'une base de modes propres réels",
                     reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          BASE_MODALE     =SIMP(statut='o',typ=mode_meca ),
          NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
          NB_SECTEUR      =SIMP(statut='o',typ='I' ),
@@ -21842,10 +23632,10 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 05/05/2009   AUTEUR BOITEAU O.BOITEAU 
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -21873,7 +23663,7 @@ def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
 MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
                     ,fr="Calcul des modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
                      reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
          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 ) ),
@@ -21893,12 +23683,36 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
              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, ),
+             ),
+             SOLVEUR         =FACT(statut='d',
+               METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS")),
+               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="SANS",into=("SANS","SANS") ),
+               ),
+               b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+                 NPREC           =SIMP(statut='f',typ='I',defaut= 8,val_min=0),
+               ),
+               b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+                 TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+                 PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+                 POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+                 RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+                 ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                 PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+                 RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+                 OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                 LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+               ),
+             ),
+
            ),
-         ),
          b_flamb        =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
            CALC_FREQ       =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
            
@@ -21911,12 +23725,36 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
              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, ),
+             ),
+             SOLVEUR         =FACT(statut='d',
+               METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS")),
+               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="SANS",into=("SANS","SANS") ),
+               ),
+               b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+                 NPREC           =SIMP(statut='f',typ='I',defaut= 8,val_min=0),
+               ),
+               b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+                 TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+                 PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+                 POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+                 RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+                 ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                 PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+                 RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+                 OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                 LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+               ),
+             ),
+             
            ),
-         ),
          CALC_MODE       =FACT(statut='d',min=0,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" ),
@@ -21939,10 +23777,10 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 05/05/2009   AUTEUR BOITEAU O.BOITEAU 
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -21974,7 +23812,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
                       fr="Calcul des modes propres par itérations simultanées ; valeurs propres et"
                          +" modes propres réels ou complexes",
                       reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
          MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,
                                matr_asse_gene_r,matr_asse_gene_c,matr_asse_pres_r ) ),
@@ -22031,11 +23869,34 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
              regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
              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,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 ),
-           ),
+             ),
+             SOLVEUR         =FACT(statut='d',
+               METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS")),
+               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="SANS",into=("SANS","SANS") ),
+               ),
+               b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+                 NPREC           =SIMP(statut='f',typ='I',defaut= 8,val_min=0),
+               ),
+               b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+                 TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+                 PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+                 POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+                 RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+                 ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                 PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+                 RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+                 OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                 LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+               ),
+             ),
          ),
 
          b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
@@ -22062,12 +23923,36 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
              regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
              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,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 ),
+             ),
+             SOLVEUR         =FACT(statut='d',
+               METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS")),
+               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="SANS",into=("SANS","SANS") ),
+               ),
+               b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+                 NPREC           =SIMP(statut='f',typ='I',defaut= 8,val_min=0),
+               ),
+               b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+                 TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+                 PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+                 POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+                 RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+                 ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                 PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+                 RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+                 OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                 LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),               
+               ),
+             ),
+
            ),
-         ),
 
          VERI_MODE       =FACT(statut='d',min=0,
            STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
@@ -22089,10 +23974,10 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),        
 )  ;
-#& MODIF COMMANDE  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -22110,12 +23995,21 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
 # RESPONSABLE NISTOR I.NISTOR
 
 MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
-                   fr="Calcul de deformees statiques pour un déplacement, une force ou une accélération unitaire imposé",
+                   fr="Calcul de déformées statiques pour un déplacement, une force ou une accélération unitaire imposé",
                    reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+            
+         regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE','MODE_INTERF'),
+                 PRESENT_PRESENT('MODE_INTERF','MATR_MASS'),
+                 PRESENT_PRESENT('PSEUDO_MODE','MATR_MASS'),
+                 ),
+               
+                  
          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',max='**',
            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
                    UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
@@ -22152,11 +24046,22 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
              SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
            ),
          ),
+         MODE_INTERF    =FACT(statut='f',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='**'),
+           NBMOD           =SIMP(statut='o',typ='I',defaut= 1),
+           FREQ            =SIMP(statut='o',typ='R',defaut= 1.0),
 
+         ),
 
          SOLVEUR         =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
-         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
-
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
 
            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") ),
@@ -22175,30 +24080,44 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
 
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
 
            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",),defaut="LDLT_INC" ),
-             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),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
            ),
          ),
@@ -22208,7 +24127,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22230,7 +24149,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
 MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
                       reentrant='f',
             fr="Définir la base modale d'une structure sous écoulement",
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
 #  la commande modi_base _modale : reentrant = f ou o                      
          regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
          BASE            =SIMP(statut='o',typ=mode_meca ),
@@ -22242,7 +24161,46 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 14/10/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+#  RECUPERATION DES EFFORTS VIA YACS POUR COUPLAGE IFS
+#
+MODI_CHAR_YACS=OPER(nom            = "MODI_CHAR_YACS",
+                   op              = 112,
+                   sd_prod         = char_meca,
+                   reentrant       = 'o',
+                   UIinfo          = {"groupes":("Résultats et champs",)},
+                   fr              = "Reception des forces nodales via YACS lors du couplage de  Code_Aster et Saturne",
+                   CHAR_MECA       = SIMP(statut ='o', typ = char_meca),
+                   MATR_PROJECTION = SIMP(statut ='o', typ = corresp_2_mailla,),
+                   NOM_CMP_IFS     = SIMP(statut ='o', typ = 'TXM',validators = NoRepeat(), max = '**'),
+                   VIS_A_VIS       = FACT(statut ='o', max = '**',
+                                   GROUP_MA_1 = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+                                   GROUP_NO_2 = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**'),),
+                   INST            = SIMP(statut='o',typ='R', ),
+                   PAS             = SIMP(statut='o',typ='R', ),
+                   NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                   INFO            = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22401,23 +24359,23 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/06/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 
@@ -22428,8 +24386,8 @@ MODI_MODELE=OPER(nom="MODI_MODELE",op= 103,sd_prod=modele_sdaster,reentrant='o',
          MODELE          =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
 
          PARTITION         =FACT(statut='d',
-             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="MAIL_DISPERSE",
-                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE",)),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="GROUP_ELEM",
+                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE","GROUP_ELEM")),
              b_dist_maille          =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
                  CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
              ),
@@ -22439,7 +24397,7 @@ MODI_MODELE=OPER(nom="MODI_MODELE",op= 103,sd_prod=modele_sdaster,reentrant='o',
              ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 20/04/2009   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22460,16 +24418,17 @@ MODI_MODELE=OPER(nom="MODI_MODELE",op= 103,sd_prod=modele_sdaster,reentrant='o',
 # RESPONSABLE GENIAUT S.GENIAUT
 
 MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu="U4.44.12-e",reentrant='f',
-            UIinfo={"groupes":("Modélisation",)},
+            UIinfo={"groupes":("Modélisation","Rupture",)},
                            fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
                            
     MODELE_IN       =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
     FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
     CRITERE         =SIMP(statut='f',typ='R',defaut=1.1E-4),
     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,)),
-    CONTACT         =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON"),min=1,max=1,),
+    CONTACT        
+     =SIMP(statut='f',typ='TXM',defaut='SANS',into=("P1P1","P1P1A","P2P1","SANS"),min=1,max=1,),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22505,7 +24464,7 @@ MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
          V_USUR_OBST     =SIMP(statut='f',typ='R',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 02/03/2010   AUTEUR MACOCCO K.MACOCCO 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22528,7 +24487,7 @@ def modi_repere_prod(RESULTAT,**args):
   if AsType(RESULTAT) != None : return AsType(RESULTAT)
 
 MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n',
-            UIinfo={"groupes":("Résultats et champs",)},
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
                     fr="Calcule des résultats dans le repère cylindrique",
          RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
 
@@ -22584,7 +24543,7 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n'
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22613,7 +24572,7 @@ def norm_mode_prod(MODE,**args ):
 NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
                fr="Normer des modes propres en fonction d'un critère choisi par l'utilisateur",
                reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Dynamique",)},
          regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),
                  CONCEPT_SENSIBLE('SEPARE'),
                  DERIVABLE('MODE'),),
@@ -22647,10 +24606,10 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
          TITRE      =SIMP(statut='f',typ='TXM',max='**'),
          INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 08/08/2008   AUTEUR DESOZA T.DESOZA 
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -22667,7 +24626,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
               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',validators=NoRepeat(),max=100,
@@ -22684,14 +24643,14 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
            RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
          ),
          b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
-           RENUM         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+           RENUM        =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
          ),
          b_gcpc          =BLOC(condition="METHODE=='GCPC' or METHODE=='PETSC'",fr="paramètres associés à la GCPC ou PETSc",
            RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
          ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22713,12 +24672,12 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
 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",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=UN_PARMI('MODELE_GENE','BASE'),
          MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
              b_modele_gene     =BLOC(condition = "MODELE_GENE != None",
                STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
-               METHODE            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("INITIAL","CLASSIQUE") ),
+               METHODE            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("INITIAL","CLASSIQUE","ELIMINE") ),
                                     ),
          BASE     =SIMP(statut='f',typ=(mode_meca,mode_gene ) ),
              b_base     =BLOC(condition = "BASE != None",
@@ -22726,10 +24685,10 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
                NB_VECT     =SIMP(statut='f',typ='I',defaut= 9999 ),
                              ),
 )  ;
-#& MODIF COMMANDE  DATE 14/12/2009   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -22762,14 +24721,14 @@ def observation_prod(self, RESULTAT, **args):
         return None
 
 OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
                       sd_prod=observation_prod,
                       fr="Calcul de l'observabilite d'un champ aux noeuds ",
 #
          MODELE_1        =SIMP(statut='o',typ=modele_sdaster),
          MODELE_2        =SIMP(statut='o',typ=modele_sdaster),
          RESULTAT        =SIMP(statut='o',typ=(mode_meca,evol_elas,dyna_harmo,dyna_trans,) ),
-         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO(),),
 
 #        ------------------------------------------------------------------
 
@@ -22800,7 +24759,8 @@ OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
 #                fr="Si le résultat est un mode_xxx ou une base_xxx, on peut prolonger"
 #                   +" les champs par zéro la ou la projection ne donne pas de valeurs."),
 
-         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster) ),
+         MATR_A          =SIMP(statut='f',typ=(matr_asse_depl_r) ),
+         MATR_B          =SIMP(statut='f',typ=(matr_asse_depl_r) ),
          VIS_A_VIS       =FACT(statut='f',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'),),
@@ -22872,29 +24832,97 @@ OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
            MASQUE          =SIMP(statut='f',typ='TXM',max=6),
          ),
 
-#        ------------------------------------------------------------------
-#        FILTRE DES DDL
-#        ------------------------------------------------------------------
-         FILTRE     =FACT(statut='f',max='**',
-           regles=(UN_PARMI('DDL_ACTIF'),
-#                           'MASQUE'),
-           AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-#
-           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max=6),
-# TODO : mettre en place le systeme de masques
-#           MASQUE          =SIMP(statut='f',typ='TXM',max=6),
-         ),
-#        ------------------------------------------------------------------
+#        ------------------------------------------------------------------
+#        FILTRE DES DDL
+#        ------------------------------------------------------------------
+         FILTRE     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('DDL_ACTIF'),
+#                           'MASQUE'),
+           AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),into=C_NOM_CHAM_INTO(),),
+
+#
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max=6),
+# TODO : mettre en place le systeme de masques
+#           MASQUE          =SIMP(statut='f',typ='TXM',max=6),
+         ),
+#        ------------------------------------------------------------------
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+      )  ;
+#& MODIF COMMANDE  DATE 23/02/2011   AUTEUR BARGELLI R.BARGELLINI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BARGELLINI R.BARGELLINI
+
+
+from Macro.post_bordet_ops import post_bordet_ops
+
+
 
-         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
-         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
-      )  ;
-#& MODIF COMMANDE  DATE 27/07/2009   AUTEUR NISTOR I.NISTOR 
+POST_BORDET =MACRO(nom="POST_BORDET", op=post_bordet_ops,sd_prod=table_sdaster,
+                   UIinfo={"groupes":("Outils-métier","Rupture",)},
+                   docu="",reentrant='n',fr="calcul de la probabilite de clivage via le modele de Bordet",
+         regles=(UN_PARMI('TOUT','GROUP_MA'),
+                 UN_PARMI('INST','NUME_ORDRE'),
+                 ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles"),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         PRECISION =SIMP(statut='f',typ='R',validators=NoRepeat(),val_min=0.,val_max=1E-3,defaut=1E-6),
+         CRITERE   =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU") ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         PROBA_NUCL      =SIMP(statut='f',typ='TXM',into=("NON","OUI"), defaut="NON",
+                      fr="prise en compte du facteur exponentiel"),
+         b_nucl          =BLOC( condition = "PROBA_NUCL=='OUI'",
+                          PARAM =FACT(statut='o',
+                                 M                =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIGM_REFE         =SIMP(statut='o',typ=(fonction_sdaster),val_min=0.E+0),
+                                 VOLU_REFE        =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIG_CRIT         =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_REFE       =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_CALC       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster)),                   
+                                 DEF_PLAS_REFE    =SIMP(statut='o',typ='R'),),),
+                                 
+         b_prop          =BLOC( condition = "PROBA_NUCL=='NON'",
+                          PARAM =FACT(statut='o',
+                                 M                =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIGM_REFE         =SIMP(statut='o',typ=fonction_sdaster,val_min=0.E+0),
+                                 VOLU_REFE        =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIG_CRIT         =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_REFE       =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_CALC       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),),
+                                 ),
+                                 ),    
+                                  
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Resultat d'une commande globale STAT_NON_LINE"),
+         TEMP            =SIMP(statut='o',typ=(fonction_sdaster,'R')),
+         COEF_MULT       =SIMP(statut='f',typ='R', defaut=1.),                   
+           )
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22921,21 +24949,14 @@ def post_cham_xfem_prod(RESULTAT,**args ):
   raise AsException("type de concept resultat non prevu")
 
 POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=post_cham_xfem_prod,
-                    reentrant='n',UIinfo={"groupes":("Post traitements",)},
-            fr="Calcul des champs DEPL et SIEF_ELGA sur le maillage fissuré",
-    MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
-    MAILLAGE_FISS = SIMP(statut='o',typ=maillage_sdaster),
-    NOM_CHAM      = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA"),),
-    MODELE        = SIMP(statut='o',typ=modele_sdaster,),
+                    reentrant='n',UIinfo={"groupes":("Post-traitements","Rupture",)},
+            fr="Calcul des champs DEPL, SIEF_ELGA et VARI_ELGA sur le maillage de visualisation (fissuré)",
+    MAILLAGE_SAIN = SIMP(statut='f',typ=maillage_sdaster),
     RESULTAT      = SIMP(statut='o',typ=resultat_sdaster),
-      b_elga      = BLOC(condition = "NOM_CHAM in ('SIEF_ELGA','VARI_ELGA') or \
-                                      (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM) or \
-                                      (type(NOM_CHAM)==type(()) and 'VARI_ELGA' in NOM_CHAM)",
-      MODELE_VISU = SIMP(statut='o',typ=modele_sdaster,),
-                         ),
-    INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+    MODELE_VISU   = SIMP(statut='o',typ=modele_sdaster,),
+    INFO          = SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
 );                     
-#& MODIF COMMANDE  DATE 08/02/2010   AUTEUR DESROCHES X.DESROCHE
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22957,7 +24978,7 @@ POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=post_cham_xfem_prod,
 
 from Macro.post_coque_ops import post_coque_ops
 POST_COQUE=MACRO(nom="POST_COQUE",op=post_coque_ops,sd_prod=table_sdaster, reentrant='n',
-             UIinfo={"groupes":("Post traitements",)},
+             UIinfo={"groupes":("Post-traitements",)},
              fr="Calcul des efforts et déformations en un point et une cote quelconque de la coque",
 
              regles=(EXCLUS('INST','NUME_ORDRE'),),
@@ -22966,14 +24987,46 @@ POST_COQUE=MACRO(nom="POST_COQUE",op=post_coque_ops,sd_prod=table_sdaster, reent
              RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à posttraiter",),
              CHAM            =SIMP(statut='o',typ='TXM',into=("EFFORT","DEFORMATION",)),
              NUME_ORDRE      =SIMP(statut='f',typ='I'),
-             INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
+             INST            =SIMP(statut='f',typ='R'),
 
              # points de post-traitement :
-             COOR_POINT      =FACT(statut='o',max='**',fr="coordonnées et position dans l épaisseur",
+             COOR_POINT      =FACT(statut='o',max='**',fr="coordonnées et position dans l'épaisseur",
                                    COOR=SIMP(statut='o',typ='R',min=3,max=4),),
 
             )
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+
+from Macro.post_decollement_ops import post_decollement_ops
+
+POST_DECOLLEMENT=MACRO(nom="POST_DECOLLEMENT",op=post_decollement_ops,sd_prod=table_sdaster,
+                     fr="calcul du rapport de surfaces de contact radier/sol",
+                     reentrant='n',
+            UIinfo={"groupes":("Post-traitements",)},
+         RESULTAT   =SIMP(statut='o',typ=(evol_noli) ),
+         NOM_CHAM   =SIMP(statut='f',typ='TXM',defaut='DEPL',into=C_NOM_CHAM_INTO(),max=1),
+         NOM_CMP    =SIMP(statut='f',typ='TXM',defaut='DZ',max=1),
+         GROUP_MA   =SIMP(statut='o',typ=grma,max=1),
+         INFO       =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22996,7 +25049,7 @@ from Macro.post_dyna_alea_ops import post_dyna_alea_ops
 POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_sdaster,
                     fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
                     reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Dynamique",)},
          regles=(UN_PARMI('FRAGILITE','INTE_SPEC'),),
          FRAGILITE  =FACT(statut='f',fr="donnees pour courbe de fragilite",max='**', 
                     TABL_RESU  =SIMP(statut='o',typ=table_sdaster),
@@ -23030,7 +25083,7 @@ POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_s
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23052,7 +25105,7 @@ POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_s
 POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
                       fr="Post-traiter les résultats en coordonnées généralisées produit par DYNA_TRAN_MODAL",
                       reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Dynamique",)},
         regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
          RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
          CHOC            =FACT(statut='f',max='**',
@@ -23073,10 +25126,10 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 19/05/2009   AUTEUR MACOCCO K.MACOCCO 
+#& MODIF COMMANDE  DATE 22/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -23093,12 +25146,12 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
                fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
 
          regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT','MINMAX',
                           'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
-                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
+                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL','VOLUMOGRAMME',
                           'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE','ENER_DISS','INTEGRALE'),
                 ),
 
@@ -23329,6 +25382,36 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
                        regles=(UN_PARMI('CHAM_GD','RESULTAT'),
                                EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_ORDRE','LIST_INST'),),
                        MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas,evol_char) ),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         VOLUMOGRAMME  = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max=1),
+                               TYPE_MAILLE  = SIMP(statut='f',typ='TXM',into=('2D','3D',)),
+                               NOM_CHAM     = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                               NOM_CMP      = SIMP(statut='o',typ='TXM'),
+                               NB_INTERV    = SIMP(statut='f',typ='I',defaut=5),
+                              ),
+         b_volumogramme = BLOC(condition = "( VOLUMOGRAMME != None )",
+                       fr="calcul de la distribution du volume d'une structure vis-à-vis d'une composante",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_ORDRE','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
                        RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas,evol_char) ),
                        CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
                        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
@@ -23592,7 +25675,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 
  )  ;
-#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23629,7 +25712,7 @@ POST_ENDO_FISS=MACRO(nom       = "POST_ENDO_FISS",
                      op        = post_endo_fiss_ops,
                      sd_prod  = post_endo_fiss_prod,
                      reentrant = 'n',
-                     UIinfo = {"groupes":("Outils metier",)},
+                     UIinfo = {"groupes":("Post-traitements","Outils-métier",)},
                      fr = "Individuation du trace d'une fissure a partir d'un champ scalaire pertinant",
 
             TABLE  = SIMP(statut = 'o', typ = CO,),
@@ -23671,7 +25754,7 @@ POST_ENDO_FISS=MACRO(nom       = "POST_ENDO_FISS",
 
 
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23691,7 +25774,7 @@ POST_ENDO_FISS=MACRO(nom       = "POST_ENDO_FISS",
 # ======================================================================
 # RESPONSABLE ZENTNER I.ZENTNER
 POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
                     fr="Calculer le dommage de fatigue subi par une structure soumise à une sollicitation de type aléatoire",
          regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
                  PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
@@ -23707,7 +25790,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant=
          MATER           =SIMP(statut='o',typ=mater_sdaster),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -23727,7 +25810,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant=
 # ======================================================================
 # RESPONSABLE ANGLES J.ANGLES
 POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
                   fr="Calculer en un point, le dommage de fatigue subi par une structure soumise à une histoire de chargement",
 
          CHARGEMENT = SIMP(statut='o',typ='TXM',into=("UNIAXIAL","PERIODIQUE","QUELCONQUE")),
@@ -23786,10 +25869,10 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -23805,23 +25888,27 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 # RESPONSABLE WADIER Y.WADIER
-
+   
 from Macro.post_gp_ops import post_gp_ops
-def post_gp_prod(self, TABL_RESU, **kargs):
+
+def post_gp_prod(self, TABL_GPMAX,TABL_GP, **kargs):
    """Typage des sd_prod
    """
-   if TABL_RESU != None:
-      self.type_sdprod(TABL_RESU, table_sdaster)
+   if TABL_GPMAX != None:
+      self.type_sdprod(TABL_GPMAX, table_sdaster)
+   if TABL_GP != None :
+      if TABL_GPMAX != None:
+         self.type_sdprod(TABL_GPMAX, table_sdaster)
+         self.type_sdprod(TABL_GP, table_sdaster)
    return table_sdaster
 
+
 POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
               fr="Calcul du critère énergétique Gp suite à un calcul thermo-mécanique",
               reentrant='n',
-              UIinfo={"groupes":("Post traitements",)},
+              UIinfo={"groupes":("Post-traitements","Rupture",)},
               regles=(UN_PARMI('IDENTIFICATION', 'PREDICTION'),
-                      UN_PARMI('THETA_2D','THETA_3D'),
-                      UN_PARMI('PAS_ENTAILLE','LIST_EP_COPEAUX'),
-                      PRESENT_PRESENT('THETA_2D','DIRECTION'),),
+                      UN_PARMI('THETA_2D','THETA_3D'),),
       
       # Résultat, modèle, comportement, chargement
       RESULTAT     = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),),
@@ -23829,12 +25916,11 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
       MODELE       = SIMP(statut='o',typ=modele_sdaster),
       MATER        = SIMP(statut='o',typ=mater_sdaster),
       
-      COMP_ELAS    = FACT(statut='o',
-            RELATION    = SIMP(statut='f',typ='TXM',defaut="ELAS",
-                            into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC"),),
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
-      ),
+      COMP_ELAS    = C_COMP_ELAS('POST_GP'),
       
+      LIST_INST    = SIMP(statut='o',typ=listr8_sdaster),
+
+      TYPE_DEF = SIMP(statut='f',typ='TXM', defaut="PETIT", into=("PETIT","GRAND")),
       EXCIT        = FACT(statut='f', max='**',
             CHARGE      = SIMP(statut='o', typ=(char_meca,char_cine_meca)),
             FONC_MULT   = SIMP(statut='f', typ=(fonction_sdaster,nappe_sdaster,formule)),
@@ -23842,15 +25928,22 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
       ),
       SYME_CHAR    = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS")),
       
-      DIRECTION    = SIMP(statut='f', typ='R', max=3),
-
+      b_direction     =BLOC(condition = "(THETA_2D != None) ",
+          DIRECTION    = SIMP(statut='o', typ='R', max=3),),
+      
       THETA_2D     = FACT(statut='f', max='**',
                           fr="paramètres de définition des champs theta",
             GROUP_NO    = SIMP(statut='o', typ=grno, validators=NoRepeat(), max='**'),
             R_INF       = SIMP(statut='o', typ='R'),
-            R_SUP       = SIMP(statut='o', typ='R'),
-      ),
+            R_SUP       = SIMP(statut='o', typ='R'),),
 
+      b_theta_2d=BLOC(condition="(THETA_2D != None)",
+           # correction axisymétrie
+            RAYON_AXIS   = SIMP(statut='f', typ='R', val_min=0., defaut=1.),
+            TRANCHE = FACT(statut='o', max=1,
+     
+                           GROUP_MA  = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+                           ),),
 
       THETA_3D        =FACT(statut='f',max='**',
             GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
@@ -23867,27 +25960,19 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
                              ),
     
             FOND_FISS       =SIMP(statut='o',typ=fond_fiss,max=1,),
-            NB_TRANCHES     =SIMP(statut='o',typ='I',max=1,
-                            fr="nombre de tranches: nombre de segments maillant le fond de fissure",),
-                         ),
+            TRANCHE = FACT(statut='o', max='**',
+                           GROUP_MA  = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+                           ),),
 
       # prise en compte de la traction compression
       TRAC_COMP    = SIMP(statut='f',typ='TXM',into=("OUI",),
                           fr="prise en compte de la traction-compression (plus lent)",
                          ),
 
-      # copeaux
-      GROUP_MA        = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
-      PAS_ENTAILLE    = SIMP(statut='f', typ='R', val_min=0.),
-      LIST_EP_COPEAUX = SIMP(statut='f', typ='R', max='**'),
-      
       # critère sur Gp
       CRIT_MAXI_GP = SIMP(statut='f', typ='TXM', defaut="ABSOLU",
                           into=("RELATIF","ABSOLU")),
-      
-      # correction axisymétrie
-      RAYON_AXIS   = SIMP(statut='f', typ='R', val_min=0., defaut=1.),
-      
+            
       # identification
       IDENTIFICATION = FACT(statut='f', max=1,
             KJ_CRIT     = SIMP(statut='o', typ='R', val_min=0., max='**'),
@@ -23901,14 +25986,14 @@ POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
       ),
       
       # table résultat
-      TABL_RESU    = SIMP(statut='o', typ=CO,),
-      
+      TABL_GPMAX    = SIMP(statut='o', typ=CO,),
+      TABL_GP       = SIMP(statut='f', typ=CO,),
       INFO         = SIMP(statut='f', typ='I', defaut=1, into=(1, 2),),
 )
-#& MODIF COMMANDE  DATE 20/10/2008   AUTEUR GALENNE E.GALENNE 
+#& MODIF COMMANDE  DATE 14/03/2011   AUTEUR GENIAUT S.GENIAUT 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -23929,25 +26014,42 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
                    fr="Calcul des facteurs d'intensité de contraintes en 2D et en 3D par extrapolation des sauts de déplacements"
                      +" sur les lèvres de la fissure",
                    reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
 
            regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'),
-                  EXCLUS('FISSURE','FOND_FISS'),
-                  PRESENT_PRESENT('FISSURE','RESULTAT'),
-                  PRESENT_PRESENT('FOND_FISS','VECT_K1'),
-                  PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'),
+                   EXCLUS('FISSURE','FOND_FISS'),
+                   PRESENT_PRESENT('FISSURE','RESULTAT'),
+                   PRESENT_PRESENT('FOND_FISS','VECT_K1'),
+                   PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'),
                    #PRESENT_PRESENT('RESULTAT','FOND_FISS'),
                    ),
 
          MODELISATION  =SIMP(statut='o',typ='TXM',
-                             into=("3D","AXIS","D_PLAN","C_PLAN"),
+                             into=("3D","AXIS","D_PLAN","C_PLAN"),position='global',
                              fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
          FOND_FISS     =SIMP(statut='f',typ=fond_fiss),
-         FISSURE     =SIMP(statut='f',typ=fiss_xfem),
-         b_fond_fiss   =BLOC (condition="(FOND_FISS!= None)",
+         FISSURE       =SIMP(statut='f',typ=fiss_xfem),
+         NB_NOEUD_COUPE=SIMP(statut='f',typ='I',defaut=5,val_min = 3),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS")),
+
+#        bloc correspondant a la donnee du fond de fissure pour les fissures maillees
+         b_fond_fiss_res   =BLOC (condition="((FOND_FISS!= None)and(RESULTAT!= None))",
+                         
+              b_ref_3d     =BLOC (condition="MODELISATION=='3D'",
+                                  TYPE_MAILLAGE = SIMP(statut='f',typ='TXM',into=("LIBRE","REGLE"),defaut="REGLE"),
+                                ),
+                         
+                         NOEUD         = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                         EVOL_THER     = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
+                         ),
+
+         b_fond_fiss_tab   =BLOC (condition="((FOND_FISS!= None)and(TABL_DEPL_SUP!= None)and(RESULTAT== None))",
+
                          MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
-                         TYPE_MAILLAGE = SIMP(statut='f',typ='TXM',into=("LIBRE","REGLE"),defaut="REGLE"),
-                         NB_NOEUD_COUPE= SIMP(statut='f',typ='I'),
                          NOEUD         = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
                          GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
                          SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
@@ -23955,14 +26057,22 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
                          TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
                          EVOL_THER     = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
                          ),
-         b_fissure   =BLOC (condition="(FISSURE!= None)",
-                         MAILLAGE       = SIMP(statut='o',typ=maillage_sdaster),
-                         NB_NOEUD_COUPE = SIMP(statut='f',typ='I' ,defaut=5 ),
-                         NB_POINT_FOND  = SIMP(statut='f',typ='I' ,),
-                         NUME_FOND      = SIMP(statut='f',typ='I',defaut=1),
-                         DTAN_ORIG      = SIMP(statut='f',typ='R',max='**'),
-                         DTAN_EXTR      = SIMP(statut='f',typ='R',max='**'),
+#        bloc correspondant a la donnee de la fissure pour les fissures X-FEM
+         b_fissure_res     =BLOC (condition="((FISSURE!= None)and(RESULTAT!= None))",
+                         NB_POINT_FOND = SIMP(statut='f',typ='I' ,),
+                         NUME_FOND     = SIMP(statut='f',typ='I',defaut=1),
+                         DTAN_ORIG     = SIMP(statut='f',typ='R',max='**'),
+                         DTAN_EXTR     = SIMP(statut='f',typ='R',max='**'),
+                         ),
+
+         b_fissure_tab     =BLOC (condition="((FISSURE!= None)and(TABL_DEPL_SUP!= None)and(RESULTAT== None))",
+                         MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
+                         NB_POINT_FOND = SIMP(statut='f',typ='I' ,),
+                         NUME_FOND     = SIMP(statut='f',typ='I',defaut=1),
+                         DTAN_ORIG     = SIMP(statut='f',typ='R',max='**'),
+                         DTAN_EXTR     = SIMP(statut='f',typ='R',max='**'),
                          ),
+
          MATER         =SIMP(statut='o',typ=mater_sdaster,
                              fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
          RESULTAT      =SIMP(statut='f',typ=(evol_elas,evol_noli),
@@ -23973,7 +26083,7 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
                              fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
          ABSC_CURV_MAXI=SIMP(statut='o',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.1),
+         PREC_VIS_A_VIS=SIMP(statut='f',typ='R',defaut=0.1),
          TOUT_ORDRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          NUME_ORDRE    =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
          LIST_ORDRE    =SIMP(statut='f',typ=listis_sdaster),
@@ -23986,13 +26096,12 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
                b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
                    PRECISION       =SIMP(statut='o',typ='R',),),
              ),
-         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS") ),
          INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          VECT_K1       =SIMP(statut='f',typ='R',max=3,min=3,
                              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 03/06/2008   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24015,7 +26124,7 @@ POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdast
 POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
                    fr="Calcul des facteurs d'intensité de contraintes par la méthode K_BETA",
                    reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
          MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
          MATER_REV     = SIMP(statut='o',typ=mater_sdaster),
          EPAIS_REV     = SIMP(statut='o',typ='R'),
@@ -24034,7 +26143,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
          ),
          TITRE         = SIMP(statut='f',typ='TXM',max='**'),  
 );
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24058,7 +26167,7 @@ from Macro.post_k_trans_ops import post_k_trans_ops
 
 POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
             fr="Calcul des facteurs d intensite des contrainte par recombinaison modale",reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
         RESU_TRANS      =SIMP(statut='o',typ=tran_gene), 
         K_MODAL         =FACT(statut='o',
            TABL_K_MODA     =SIMP(statut='f',typ=table_sdaster,),
@@ -24100,7 +26209,7 @@ POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
         TITRE           =SIMP(statut='f',typ='TXM'),
 )
 
-#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR MAZET S.MAZET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24120,10 +26229,10 @@ POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
 # ======================================================================
 # RESPONSABLE GENIAUT S.GENIAUT
 POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
-                    reentrant='n',UIinfo={"groupes":("Maillage",)},
+                    reentrant='n',UIinfo={"groupes":("Maillage","Rupture",)},
             fr="Crée un maillage se conformant à la fissure pour le post-traitement des éléments XFEM",
     MODELE        = SIMP(statut='o',typ=modele_sdaster),
-    MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
+    MAILLAGE_SAIN = SIMP(statut='f',typ=maillage_sdaster),
     PREF_NOEUD_X   =SIMP(statut='f',typ='TXM',defaut="NX",validators=LongStr(1,2),),
     PREF_NOEUD_M   =SIMP(statut='f',typ='TXM',defaut="NM",validators=LongStr(1,2),),
     PREF_NOEUD_P   =SIMP(statut='f',typ='TXM',defaut="NP",validators=LongStr(1,2),),
@@ -24133,10 +26242,10 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
     INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
 
 );                     
-#& MODIF COMMANDE  DATE 06/07/2009   AUTEUR GALENNE E.GALENNE 
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -24154,7 +26263,7 @@ POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
 POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
                fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
                reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","DETAILS") ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
@@ -24335,7 +26444,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
            b_extrac        =BLOC(condition="RESULTAT != None",
                                  fr="extraction d un champ de grandeur",
              regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','NOEUD_CMP'),),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("EFGE_ELNO_DEPL","SIEF_ELNO_ELGA"),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("EFGE_ELNO","SIEF_ELNO"),),
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              NUME_ORDRE      =SIMP(statut='f',typ='I',),
              INST            =SIMP(statut='f',typ='R',),
@@ -24412,10 +26521,10 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
                                ),
                ),
 )  ;
-#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR DESROCHES X.DESROCHE
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMA
 # ======================================================================
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -24434,7 +26543,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
 POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f',
             fr="Extraire des valeurs de composantes de champs de grandeurs pour y effectuer des calculs (moyenne,invariants,..)"
                +" ou pour les exprimer dans d'autres repères",
-            docu="U4.81.21",UIinfo={"groupes":("Post traitements",)},
+            docu="U4.81.21",UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
 
          ACTION          =FACT(statut='o',max='**',
                                regles=(UN_PARMI('RESULTAT','CHAM_GD'),), 
@@ -24489,7 +26598,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f'
            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' ),  
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),  
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
              LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
@@ -24582,7 +26691,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f'
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24602,7 +26711,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f'
 # ======================================================================
 # RESPONSABLE ZENTNER I.ZENTNER
 POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements",)},
                 fr="Calcul des volumes d'usure et des profondeurs d'usure d'après la puissance d'usure",
          regles=(UN_PARMI('TUBE_NEUF','RESU_GENE','PUIS_USURE'),
                  PRESENT_PRESENT('RESU_GENE','NOEUD','LOI_USURE'),
@@ -24702,10 +26811,10 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 03/01/2011   AUTEUR COURTOIS M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -24807,8 +26916,9 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
 
          IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
 
+         INFO     = SIMP(statut='f', typ='I', defaut=1, into=(1,2),),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24834,7 +26944,7 @@ PRE_GIBI=PROC(nom="PRE_GIBI",op=49,
          UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24860,7 +26970,7 @@ PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
          UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24886,7 +26996,7 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
          CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24909,15 +27019,15 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
 PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
                     fr="Effectuer le produit d'une matrice par un vecteur",
                     reentrant='n',
-            UIinfo={"groupes":("Résultats et champs",)},
+            UIinfo={"groupes":("Post-traitements","Matrices et vecteurs",)},
          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_sdaster),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 19/04/2010   AUTEUR BERARD A.BERARD 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -24934,21 +27044,30 @@ PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
 # ======================================================================
 # RESPONSABLE PELLET J.PELLET
 def proj_champ_prod(RESULTAT=None,CHAM_GD=None,**args ):
-    if AsType(RESULTAT) != None : return AsType(RESULTAT)
-    if AsType(CHAM_GD)  != None : return AsType(CHAM_GD)
+    if (RESULTAT == None and CHAM_GD == None) : return corresp_2_mailla
+    if  RESULTAT != None                      : return AsType(RESULTAT)
+    if  CHAM_GD  != None                      : return AsType(CHAM_GD)
     raise AsException("type de concept resultat non prevu")
 
 
 
 
 PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
-            UIinfo={"groupes":("Résultats et champs",)},
-                fr="Projeter des champs d'un maillage sur un autre",
+        UIinfo={"groupes":("Résultats et champs",)},
+            fr="Projeter des champs d'un maillage sur un autre",
+
+     # faut-il projeter les champs ?
+     PROJECTION      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",),),
+
+     # pour projeter avec une sd_corresp_2_mailla deja calculée :
+     MATR_PROJECTION   =SIMP(statut='f',typ=corresp_2_mailla,),
 
 
-         METHODE         =SIMP(statut='f',typ='TXM',defaut="ELEM",
-                               into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
 
+     #-----------------------------------------------------------------------------------------------------------
+     # 1er cas : on fait tout d'un coup : creation de la sd_corresp_2_mailla + projection des champs
+     #-----------------------------------------------------------------------------------------------
+     b_1_et_2   =BLOC(condition= "PROJECTION == 'OUI' and MATR_PROJECTION == None",
          regles=(UN_PARMI('RESULTAT','CHAM_GD'),
                  UN_PARMI('MODELE_1','MAILLAGE_1'),
                  UN_PARMI('MODELE_2','MAILLAGE_2'),
@@ -24956,6 +27075,10 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
          RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
          CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem)),
 
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                               into=("NUAGE_DEG_0","NUAGE_DEG_1","AUTO","COLLOCATION","ECLA_PG",) ),
+
+
          MODELE_1        =SIMP(statut='f',typ=modele_sdaster),
          MAILLAGE_1      =SIMP(statut='f',typ=maillage_sdaster),
 
@@ -24969,29 +27092,180 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
          ),
 
 
-         # Cas de la projection ELEM :
+         # Cas de la projection COLLOCATION :
+         #--------------------------------------------
+         b_elem          =BLOC(condition="METHODE in ('COLLOCATION','ECLA_PG','AUTO')",
+             CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
+                  fr="Pour indiquer au programme le type de projection souhaité"),
+             DISTANCE_MAX    =SIMP(statut='f',typ='R',
+                  fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+
+             TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_1 avant la projection."),
+             TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_2 avant la projection."),
+
+             ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+             TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
+                  fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                  fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."),
+         ),
+
+
+         # Cas de la projection d'une sd_resultat :
+         #--------------------------------------------
+         b_resultat      =BLOC(condition="RESULTAT != None",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM',),
+                   CONCEPT_SENSIBLE('SEPARE'),
+                   REUSE_SENSIBLE(),
+                   DERIVABLE('RESULTAT'),),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramétres de sensibilité.",
+                               ang="List of sensitivity parameters",),
+
+           NOM_PARA        =SIMP(statut='f',typ='TXM', max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO(),),
+
+           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
+                fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."),
+
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+           b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+         ),
+
+
+         VIS_A_VIS       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+           # les mots clés suivants ne sont actifs que si METHODE='COLLOCATION' mais on ne peut pas le vérifier:
+               CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+               TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_1 avant la projection."),
+               TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_2 avant la projection."),
+         ),
+     ), # fin bloc b_1_et_2
+
+
+
+     #-----------------------------------------------------------------------------------------------------------
+     # 2eme cas : on s'arrete apres la creation de la sd_corresp_2_mailla
+     #-----------------------------------------------------------------------------------------------
+     b_1   =BLOC(condition="PROJECTION == 'NON'",
+
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="COLLOCATION",
+                               into=("COLLOCATION","COUPLAGE",) ),
+
+         regles=(UN_PARMI('MODELE_1','MAILLAGE_1'),
+                 UN_PARMI('MODELE_2','MAILLAGE_2'),
+                 ),
+         MODELE_1        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_1      =SIMP(statut='f',typ=maillage_sdaster),
+
+         MODELE_2        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_2      =SIMP(statut='f',typ=maillage_sdaster),
+
+
+         # Cas de la projection COLLOCATION :
          #--------------------------------------------
-         b_elem          =BLOC(condition="METHODE == 'ELEM'",
+         b_elem          =BLOC(condition="METHODE in ('COLLOCATION',)",
              CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
                   fr="Pour indiquer au programme le type de projection souhaité"),
              DISTANCE_MAX    =SIMP(statut='f',typ='R',
                   fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
 
-             TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
-                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
-                     " aux noeuds du MODELE_1 avant la projection."),
-             TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
-                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
-                     " aux noeuds du MODELE_2 avant la projection."),
+             TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_1 avant la projection."),
+             TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_2 avant la projection."),
+
+             ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         ),
+
+         VIS_A_VIS       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+           # les mots clés suivants ne sont actifs que si METHODE='COLLOCATION' mais on ne peut pas le vérifier:
+               CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+               TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_1 avant la projection."),
+               TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_2 avant la projection."),
+         ),
+     ), # fin bloc b_1
+
+
+
+     #-----------------------------------------------------------------------------------------------------------
+     # 3eme cas : on projette les champs avec une sd_corresp_2_mailla déjé calculée
+     #-----------------------------------------------------------------------------------------------
+     b_2   =BLOC(condition="MATR_PROJECTION != None",
+         regles=(UN_PARMI('RESULTAT','CHAM_GD'),),
+         RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem)),
+
+         TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
+              fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
 
-             ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
+              fr="Parfois utile en dynamique pour pouvoir imposer la numérotation des cham_no."),
 
-             TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
-                  fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+         # nécessaire si l'on projette des cham_elem :
+         MODELE_2        =SIMP(statut='f',typ=modele_sdaster),
 
-             PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
-                  fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."),
-         ),
+         PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+              fr="Pour prolonger les champs par zéro là où la projection ne donne pas de valeurs."),
 
 
 
@@ -25004,15 +27278,12 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
                    REUSE_SENSIBLE(),
                    DERIVABLE('RESULTAT'),),
            SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                               fr="Liste des paramètres de sensibilité.",
+                               fr="Liste des paramétres de sensibilité.",
                                ang="List of sensitivity parameters",),
 
            NOM_PARA        =SIMP(statut='f',typ='TXM', max='**'),
            TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-
-           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
-                fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO(),),
 
 
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -25034,39 +27305,14 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
            ),
 
          ),
+     ), # fin bloc b_2
 
 
 
-         # Mots clés utilisables dans tous les cas :
-         #---------------------------------------------
-         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
-         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
-
-         VIS_A_VIS       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-
-           # les mots clés suivants ne sont actifs que si METHODE='ELEM' mais on ne peut pas le vérifier:
-               CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
-               TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
-                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
-                       " aux noeuds du MODELE_1 avant la projection."),
-               TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
-                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
-                       " aux noeuds du MODELE_2 avant la projection."),
-         ),
+     TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+     INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25095,7 +27341,7 @@ def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args):
 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)",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
          BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene ) ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
@@ -25103,10 +27349,10 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
          MATR_ASSE_GENE  =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
 )  ;
 
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -25146,7 +27392,8 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
            MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
 #           MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,base_modale,mode_meca,mode_meca_c,) ),
            MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE",
+                                 "SIEF_NOEU","EPSI_NOEU",),max='**'),
                          ),
          CORR_MANU       =FACT(statut='f',max='**',
            regles=(PRESENT_PRESENT('NOEU_CALCUL','NOEU_MESURE'),),
@@ -25168,7 +27415,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
              ),
 
           ); 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25188,7 +27435,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
 # ======================================================================
 # RESPONSABLE ADOBES A.ADOBES
 PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
             fr="Projecter un ou plusieurs spectres de turbulence sur une (ou plusieurs) base(s) modale(s) ",
       regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),),
          SPEC_TURB       =SIMP(statut='o',typ=spectre_sdaster,validators=NoRepeat(),max='**' ),
@@ -25208,7 +27455,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentran
          ORIG_AXE        =SIMP(statut='f',typ='R',min=3,max=3 ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25231,7 +27478,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentran
 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)",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
          BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
@@ -25239,10 +27486,10 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
          VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
          VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
 )  ;
-#& MODIF COMMANDE  DATE 03/05/2010   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 04/05/2011   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -25280,7 +27527,7 @@ def propa_fiss_prod(self,**args):
 
 PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
             fr="Propagation de fissure avec X-FEM",reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
 
         METHODE_PROPA = SIMP(statut='o',typ='TXM',
                                into=("SIMPLEXE","UPWIND","MAILLAGE","INITIALISATION") ),
@@ -25298,7 +27545,6 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
                                    FISSURE   = FACT(statut='o',min=1,max='**',
                                                     FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
                                                     FISS_PROPAGEE  = SIMP(statut='o',typ=CO,max=1),
-                                                    GRILLE_AUX     = SIMP(statut='f',typ=modele_sdaster,max=1),
                                                     NB_POINT_FOND  = SIMP(statut='f',typ='I',max='**'),
                                                     TABLE          = SIMP(statut='o',typ=table_sdaster,max=1),
                                                     ),
@@ -25321,7 +27567,6 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
                                    FISSURE   = FACT(statut='o',min=1,max='**',
                                                     FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
                                                     FISS_PROPAGEE  = SIMP(statut='o',typ=CO,max=1),
-                                                    GRILLE_AUX     = SIMP(statut='f',typ=modele_sdaster,max=1),
                                                     ),
                                    ITERATIONS     = SIMP(statut='f',typ='I',max=1,val_min=3,defaut=5),
                                    TOLERANCE      = SIMP(statut='f',typ='R',max=1,val_min=0.0,val_max=100.0,defaut=5.0),
@@ -25336,12 +27581,11 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
                
                FISSURE   = FACT(statut='o',min=1,max='**',
                                 MAIL_ACTUEL    = SIMP(statut='o',typ=maillage_sdaster,max=1),
-                                GROUP_MA_FOND    = SIMP(statut='f',typ='TXM',defaut="FOND"), 
-                                GROUP_MA_FISS    = SIMP(statut='f',typ='TXM',defaut="FISS"), 
+                                GROUP_MA_FOND    = SIMP(statut='f',typ=grma,defaut="FOND"), 
+                                GROUP_MA_FISS    = SIMP(statut='f',typ=grma,defaut="FISS"), 
                                 FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
                                 MAIL_PROPAGE  = SIMP(statut='f',typ=CO,max=1),
                                 TABLE          = SIMP(statut='o',typ=table_sdaster,max=1),
-                                METHODE_POSTK  = SIMP(statut='f',typ='I',into=(1,2,3),max=1),
                                 DTAN_ORIG      = SIMP(statut='f',typ='R',max=3),
                                 DTAN_EXTR      = SIMP(statut='f',typ='R',max=3),
                                                     ),
@@ -25355,8 +27599,8 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
         b_init    =BLOC(condition="(METHODE_PROPA=='INITIALISATION')",
                MAIL_STRUC    = SIMP(statut='o',typ=maillage_sdaster), 
                FORM_FISS   = SIMP(statut='o',typ='TXM', into=("DEMI_DROITE","DEMI_PLAN","ELLIPSE"), ),
-               GROUP_MA_FOND    = SIMP(statut='f',typ='TXM',defaut="FOND"), 
-               GROUP_MA_FISS    = SIMP(statut='f',typ='TXM',defaut="FISS"), 
+               GROUP_MA_FOND    = SIMP(statut='f',typ=grma,defaut="FOND"), 
+               GROUP_MA_FISS    = SIMP(statut='f',typ=grma,defaut="FISS"), 
                MAIL_TOTAL     = SIMP(statut='o',typ=CO), 
                MAIL_FISS       = SIMP(statut='f',typ=CO), 
              
@@ -25369,7 +27613,7 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
                   DTAN        = SIMP(statut='o',typ='R',min=3,max=3),
                   POINT_ORIG        = SIMP(statut='o',typ='R',min=3,max=3),
                   POINT_EXTR        = SIMP(statut='o',typ='R',min=3,max=3),
-                  NB_POINT_FOND     = SIMP(statut='o',typ='I',val_max=26),
+                  NB_POINT_FOND     = SIMP(statut='o',typ='I',),
                ),
                 
                b_ellipse = BLOC(condition = "FORM_FISS == 'ELLIPSE' ",
@@ -25380,7 +27624,7 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
                   VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
                   ANGLE_ORIG        = SIMP(statut='o',typ='R',),
                   ANGLE_EXTR        = SIMP(statut='o',typ='R',),
-                  NB_POINT_FOND     = SIMP(statut='o',typ='I',val_max=52,),
+                  NB_POINT_FOND     = SIMP(statut='o',typ='I',)
                ),   
              ),       
 
@@ -25399,10 +27643,10 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
         INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
 )
 
-#& MODIF COMMANDE  DATE 15/12/2009   AUTEUR COLOMBO D.COLOMBO 
+#& MODIF COMMANDE  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -25420,13 +27664,11 @@ PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
 # RESPONSABLE GENIAUT S.GENIAUT
 
 PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
-                UIinfo={"groupes":("Modelisation",)},
+                UIinfo={"groupes":("Post-traitements","Rupture",)},
                 fr="Propagation de fissure avec X-FEM",
     
     MODELE        =SIMP(statut='o',typ=modele_sdaster),
 
-    GRILLE_AUX    =SIMP(statut='f',typ=modele_sdaster),
-
     TEST_MAIL     =SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
 
     DA_MAX        =SIMP(statut='o',typ='R'),
@@ -25470,7 +27712,7 @@ PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
 
     INFO           =SIMP(statut='f',typ='I',defaut= 0,into=(0,1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 20/07/2009   AUTEUR GENIAUT S.GENIAUT 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25493,12 +27735,12 @@ from Macro.raff_xfem_ops import raff_xfem_ops
 RAFF_XFEM=MACRO(nom="RAFF_XFEM",op=raff_xfem_ops,sd_prod=cham_no_sdaster,
                    fr="Calcul de la distance au fond de fissure le plus proche",
                    reentrant='n',
-            UIinfo={"groupes":("Rupture",)},
+            UIinfo={"groupes":("Résultats et champs","Rupture",)},
 
     FISSURE       =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
     INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25519,7 +27761,7 @@ RAFF_XFEM=MACRO(nom="RAFF_XFEM",op=raff_xfem_ops,sd_prod=cham_no_sdaster,
 # RESPONSABLE PARROT A.PARROT
 RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
                      fr="Recaler les paramètres du modèle de WEIBULL sur des données expérimentales",reentrant='n',
-            UIinfo={"groupes":("Post traitements",)},
+            UIinfo={"groupes":("Post-traitements",)},
          LIST_PARA       =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("SIGM_REFE","M",) ),
          RESU            =FACT(statut='o',max='**',
            regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST',),
@@ -25545,7 +27787,7 @@ RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
          ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
                        )  ;
-#& MODIF COMMANDE  DATE 23/03/2010   AUTEUR BOYERE E.BOYERE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25577,7 +27819,7 @@ def recu_fonction_prod(RESULTAT=None,TABLE=None,RESU_GENE=None,
 RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
                    fr="Extraire sous forme d'une fonction, l'évolution d'une grandeur en fonction d'une autre",
                    reentrant='f',
-            UIinfo={"groupes":("Fonction",)},
+            UIinfo={"groupes":("Résultats et champs","Fonctions",)},
          regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','NAPPE'),),
 
          CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem,),),
@@ -25780,7 +28022,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25813,7 +28055,47 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
          b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
              PRECISION       =SIMP(statut='o',typ='R',),),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# RECUPERATION DE PARAMETRES DE COUPLAGE VIA YACS
+# 
+RECU_PARA_YACS=OPER(nom="RECU_PARA_YACS",op=114,sd_prod=listr8_sdaster,
+                   reentrant = 'n',
+                    UIinfo={"groupes":("Fonction",)},
+                   fr        = "Gestion des scalaires via YACS pour le coupleur IFS",
+          DONNEES = SIMP(statut='o',typ='TXM',into=("INITIALISATION","CONVERGENCE","FIN","PAS",) ),
+          b_init   = BLOC(condition= "DONNEES=='INITIALISATION'",
+                     PAS             = SIMP(statut='o',typ='R', ),),
+          b_noinit = BLOC(condition= "(DONNEES=='CONVERGENCE')or(DONNEES=='FIN')",
+                     NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                     INST         = SIMP(statut='o',typ='R', ),
+                     PAS             = SIMP(statut='o',typ='R', ),),
+          b_pastps = BLOC(condition= "(DONNEES=='PAS')",
+                     NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                     INST         = SIMP(statut='o',typ='R', ),
+                     PAS             = SIMP(statut='o',typ='R', ),),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25835,14 +28117,14 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
 RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster,
          fr="Récupérer dans une table les valeurs d'un paramètre d'une SD Résultat ou d'extraire une table contenue"
             +" dans une autre SD pour celles qui le permettent",
-         UIinfo={"groupes":("Résultats et champs",)},reentrant='n',
+         UIinfo={"groupes":("Résultats et champs","Tables",)},reentrant='n',
          CO              =SIMP(statut='o',typ=assd),
          regles=(UN_PARMI('NOM_TABLE','NOM_PARA')),
          NOM_TABLE       =SIMP(statut='f',typ='TXM' ),
          NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 11/08/2009   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25887,10 +28169,10 @@ RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f',
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -25907,10 +28189,11 @@ RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f',
 # ======================================================================
  
 # RESPONSABLE DEVESA G.DEVESA
-def rest_cond_tran_prod(RESULTAT,**args ):
+def rest_cond_tran_prod(RESULTAT,TYPE_RESU,**args ):
  
-  if AsType(RESULTAT) == evol_noli  : return dyna_trans
-  if AsType(RESULTAT) == dyna_trans : return dyna_trans
+  if AsType(RESULTAT) == dyna_trans  : return dyna_trans
+  if (AsType(RESULTAT) == evol_noli and TYPE_RESU == "DYNA_TRANS") : return dyna_trans
+  if (AsType(RESULTAT) == evol_noli and TYPE_RESU == "EVOL_NOLI") : return evol_noli
 
   raise AsException("type de concept resultat non prevu")
 
@@ -25918,12 +28201,14 @@ REST_COND_TRAN=OPER(nom="REST_COND_TRAN",op=  78,sd_prod=rest_cond_tran_prod,
                     fr="Restituer dans la base physique des résultats issus d'un calcul" 
                         +"non-lineaire avec projection modale ou d'un calcul transitoire linear"
                         +"avec condensation dynamique",
-                    reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+                    reentrant='f',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
         regles=(
                 EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
                 EXCLUS('MACR_ELEM_DYNA','BASE_MODALE'),),
          RESULTAT        =SIMP(statut='f',typ=(evol_noli,dyna_trans) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNA_TRANS",
+                          into=("DYNA_TRANS","EVOL_NOLI") ),
          BASE_MODALE     =SIMP(statut='f',typ=mode_meca),
 #         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
          MACR_ELEM_DYNA  =SIMP(statut='f',typ=macr_elem_dyna),
@@ -25940,14 +28225,18 @@ REST_COND_TRAN=OPER(nom="REST_COND_TRAN",op=  78,sd_prod=rest_cond_tran_prod,
          INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          b_nom_cham=BLOC(condition="TOUT_CHAM == None",
-             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,defaut="ACCE",   
-                               into=("DEPL","VITE","ACCE",) ),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,defaut="ACCE",into=("DEPL",
+                                   "VITE","ACCE",),),),
+         b_base_moda=BLOC(condition="BASE_MODALE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem),),
+             RESU_FINAL      =SIMP(statut='f',typ=(evol_noli,dyna_trans) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -25975,7 +28264,7 @@ def rest_gene_phys_prod(RESU_GENE,**args ):
 REST_GENE_PHYS=OPER(nom="REST_GENE_PHYS",op=  75,sd_prod=rest_gene_phys_prod,
                     fr="Restituer dans la base physique des résultats en coordonnées généralisées",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
         regles=(
                 EXCLUS('INST','LIST_INST','TOUT_INST',
                        'TOUT_ORDRE','NUME_ORDRE','NUME_MODE',),
@@ -26007,9 +28296,8 @@ REST_GENE_PHYS=OPER(nom="REST_GENE_PHYS",op=  75,sd_prod=rest_gene_phys_prod,
          CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          b_nom_cham=BLOC(condition="TOUT_CHAM == None",
-             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",   
-                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
-                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",into=("DEPL",
+                                   "VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO","SIPO_ELNO","SIGM_ELNO","FORC_NODA",),),),
          GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
          NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
          GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
@@ -26018,10 +28306,10 @@ REST_GENE_PHYS=OPER(nom="REST_GENE_PHYS",op=  75,sd_prod=rest_gene_phys_prod,
          DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3 ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -26051,7 +28339,7 @@ def rest_sous_struc_prod(RESU_GENE,RESULTAT,**args ):
 REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
           fr="Restituer dans la base physique des résultats obtenus par sous-structuration",
                     reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
         regles=(UN_PARMI('RESU_GENE','RESULTAT'),
 # ajout d'une regle de Ionel et Nicolas:
 #                UN_PARMI('NOM_CHAM','TOUT_CHAM'),
@@ -26062,6 +28350,7 @@ REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
               EXCLUS('NOEUD','GROUP_NO'),
               EXCLUS('MAILLE','GROUP_MA'),
               PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+              UN_PARMI('SQUELETTE','SOUS_STRUC','SECTEUR'),
 
                 ),
          RESULTAT        =SIMP(statut='f',typ=(evol_noli,dyna_trans,
@@ -26085,9 +28374,8 @@ REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
          INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          b_nom_cham=BLOC(condition="TOUT_CHAM == None",
-             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",   
-                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
-                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",into=("DEPL",
+                                   "VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO","SIPO_ELNO","SIGM_ELNO","FORC_NODA",) ),),
          GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
          NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
          GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
@@ -26101,13 +28389,13 @@ REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
 
          SQUELETTE       =SIMP(statut='f',typ=squelette ),
          SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
-         SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         SECTEUR         =SIMP(statut='f',typ='I'),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -26126,7 +28414,7 @@ REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
 REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
                     reentrant='n',
             fr="Calculer la réponse d'une structure dans la base physique",
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),        
          BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
          MODE_MECA       =SIMP(statut='f',typ=mode_meca,),
@@ -26137,9 +28425,8 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
          NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
          MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
          NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),  
-         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=7,    
-                               into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",
-                                     "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=7,into=("DEPL",
+                               "VITE","ACCE","EFGE_ELNO","SIPO_ELNO","SIGM_ELNO","FORC_NODA") ),
          MODE_STAT       =SIMP(statut='f',typ=mode_meca ),
          EXCIT           =FACT(statut='f',
            NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
@@ -26150,7 +28437,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
                                into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 06/10/2008   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -26180,7 +28467,7 @@ def rest_spec_temp_prod(RESU_GENE,RESULTAT,**args):
 REST_SPEC_TEMP=OPER(nom="REST_SPEC_TEMP",op=181,sd_prod=rest_spec_temp_prod,
               fr="Transformée de Fourier d'un résultat",
               reentrant='n',
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          regles=UN_PARMI('RESU_GENE','RESULTAT'),
          RESU_GENE       =SIMP(statut='f',typ=(harm_gene,tran_gene,) ),
          RESULTAT        =SIMP(statut='f',typ=(dyna_harmo,dyna_trans,) ),
@@ -26189,10 +28476,10 @@ REST_SPEC_TEMP=OPER(nom="REST_SPEC_TEMP",op=181,sd_prod=rest_spec_temp_prod,
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
          NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
 );
-#& MODIF COMMANDE  DATE 03/05/2010   AUTEUR PROIX J-M.PROIX 
+#& MODIF COMMANDE  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -26217,13 +28504,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s
                    fr="Calcul de l'évolution mécanique, en quasi-statique,"
                       +" d'un point matériel en non linéaire",
    COMP_INCR       =C_COMP_INCR(),
-   COMP_ELAS       =FACT(statut='f',max='**',
-           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
-           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER")),
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
-         ),
+   COMP_ELAS       =C_COMP_ELAS('SIMU_POINT_MAT'),
    MATER           =SIMP(statut='o',typ=mater_sdaster,max=30),
    
 ## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
@@ -26244,60 +28525,85 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s
       NB_VARI_TABLE  =SIMP(statut='f',typ='I',max=1,),
       ARCHIVAGE       =FACT(statut='f',
        LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+       INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+       PAS_ARCH        =SIMP(statut='f',typ='I' ),
        PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
                            ),
                ),        
    b_EF = BLOC(condition="SUPPORT ==  'ELEMENT'",fr="Simulation sur un élément fini",                    
       MODELISATION  =SIMP(statut='f',typ='TXM',max=1,into=("3D","C_PLAN","D_PLAN",)),
-      RECH_LINEAIRE   =C_RECH_LINEAIRE(),                                      
-      ARCHIVAGE       =FACT(statut='f',
-       LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
-       INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-       PAS_ARCH        =SIMP(statut='f',typ='I' ),
-       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-       ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",),defaut="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',validators=NoRepeat(),max='**',
-                                    into=("DEPL","SIEF_ELGA","VARI_ELGA",)),
-        ),
+      RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+      ARCHIVAGE       =C_ARCHIVAGE(), 
                  ),                                            
    # on permet certaines variables de commandes scalaires, définies par une fonction du temps
    b_EFV = BLOC(condition="SUPPORT ==  'ELEMENT'",fr="variables de commande sur un élément fini",                    
          # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
-         LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP",)),
+         LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP","CORR","IRRA","HYDR","SECH","EPSA",
+                                                           "M_ACIER","M_ZIRC","NEUT1","NEUT2")),
+
          AFFE_VARC    = FACT(statut='f',max='**',
-          NOM_VARC    = SIMP(statut='o',typ='TXM', into=("TEMP",)),
+          NOM_VARC        =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
+                                                            "EPSA","NEUT1","NEUT2")),
           VALE_FONC   = SIMP(statut='o',typ=(fonction_sdaster,formule) ),
           VALE_REF    = SIMP(statut='f',typ='R'),
          ),
-         #  mots clés cachés pour variable de commande TEMP :
-         #  --------------------------------------------------
-         VARC_TEMP    =FACT(statut='d',
-           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="TEMP"),
-           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
-           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
-           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
-           VALE_DEF        =SIMP(statut='c',typ='R',max=1,min=1,defaut=(0.,)),
-                           ),
+
+        SIGM_IMPOSE=FACT(statut='f',
+              SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                         ),
+        EPSI_IMPOSE=FACT(statut='f',
+              EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                         ),
                ),
+   b_COEF = BLOC(condition="SUPPORT !=  'ELEMENT'",fr="matrice de coefficients",
+     regles = (PRESENT_ABSENT('SIGM_IMPOSE','MATR_C1','MATR_C2','VECT_IMPO'),
+               PRESENT_ABSENT('EPSI_IMPOSE','MATR_C1','MATR_C2','VECT_IMPO'),
+               PRESENT_ABSENT('MATR_C1','SIGM_IMPOSE','EPSI_IMPOSE'),
+               PRESENT_ABSENT('MATR_C2','SIGM_IMPOSE','EPSI_IMPOSE'),
+               PRESENT_ABSENT('VECT_IMPO', 'SIGM_IMPOSE','EPSI_IMPOSE'),
+     ),
                
-   SIGM_IMPOSE=FACT(statut='f',
-         SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIGM_IMPOSE=FACT(statut='f',
+           SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                      ),
+     EPSI_IMPOSE=FACT(statut='f',
+           EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                      ),
+     MATR_C1=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     MATR_C2=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     VECT_IMPO=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+                              ),
                     ),
-   EPSI_IMPOSE=FACT(statut='f',
-         EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-         EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
-                    ),            
    SIGM_INIT=FACT(statut='f',
           SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
           SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
@@ -26320,7 +28626,7 @@ SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_s
    INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
 
-#& MODIF COMMANDE  DATE 22/09/2009   AUTEUR SELLENET N.SELLENET 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -26344,7 +28650,7 @@ from Macro.stanley_ops import stanley_ops
 
 STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
                        reentrant='n',
-              UIinfo={"groupes":("Outils métier",)},
+              UIinfo={"groupes":("Post-traitements",)},
                        fr="Outil de post-traitement interactif Stanley ",
          RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther,mode_meca,dyna_harmo,dyna_trans) ),
          MODELE          =SIMP(statut='f',typ=modele_sdaster),
@@ -26355,10 +28661,10 @@ STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
                                fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"),
 
 )  ;
-#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR MICHEL S.MICHEL 
+#& MODIF COMMANDE  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -26379,7 +28685,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                    fr="Calcul de l'évolution mécanique ou thermo-hydro-mécanique couplée, en quasi-statique,"
                       +" d'une structure en non linéaire",
                    reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Mécanique",)},
          regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),
                  CONCEPT_SENSIBLE('ENSEMBLE'),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
@@ -26399,23 +28705,11 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                 SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
                 FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
               ),
+#-------------------------------------------------------------------               
          COMP_INCR       =C_COMP_INCR(),
-         COMP_ELAS       =FACT(statut='f',max='**',
-           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 ),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("IMPLICITE",)),
-           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
-                                      "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
-          
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
-      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-         ),
+#-------------------------------------------------------------------          
+         COMP_ELAS       =C_COMP_ELAS('STAT_NON_LINE'),
+#-------------------------------------------------------------------          
          b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
            ETAT_INIT       =FACT(statut='o',
              regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
@@ -26458,129 +28752,33 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
              NUME_DIDI       =SIMP(statut='f',typ='I'),
              INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
          ),),
+#-------------------------------------------------------------------            
          INCREMENT       =C_INCREMENT(),
-#         **C_ALGO_RESOLUTION()
-         METHODE = SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPL_EX")),
-         b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
-                           NEWTON = C_NEWTON(),
-                        ),
-         b_meth_impl_ex = BLOC(condition = "METHODE == 'IMPL_EX'",
-                           IMPL_EX = C_IMPL_EX(),
-                        ),
+#-------------------------------------------------------------------   
+         METHODE         =SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPL_EX")),
+             b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
+                                  NEWTON = C_NEWTON(),
+                                  ),
+            b_meth_impl_ex = BLOC(condition = "METHODE == 'IMPL_EX'",
+                                  IMPL_EX = C_IMPL_EX(),
+                          ),
+#-------------------------------------------------------------------    
          RECH_LINEAIRE   =C_RECH_LINEAIRE(),
-         
-         PILOTAGE        =FACT(statut='f',
-           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","DEFORMATION","ANA_LIM") ),
-           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
-           EVOL_PARA       =SIMP(statut='f',typ='TXM',defaut="SANS", into=("SANS","CROISSANT","DECROISSANT") ),
-           
-           
-           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
-           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
-           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
-                         ),
-                         
+#-------------------------------------------------------------------            
+         PILOTAGE        =C_PILOTAGE(),
+#-------------------------------------------------------------------                         
          CONVERGENCE     =C_CONVERGENCE(),
+#------------------------------------------------------------------- 
          SOLVEUR         =C_SOLVEUR(),
-          
-         ARCHIVAGE       =FACT(statut='f',
-           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
-                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
-           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-           PAS_ARCH        =SIMP(statut='f',typ='I' ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           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',validators=NoRepeat(),max='**',
-                                 into=("DEPL","SIEF_ELGA","VARI_ELGA",)),
-         ),
-         OBSERVATION     =FACT(statut='f',max='**',
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
-           SUIVI_DDL       =SIMP(statut='f',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
-         b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
-                                regles=(UN_PARMI('NOEUD','MAILLE','GROUP_NO','GROUP_MA','VALE_MIN','VALE_MAX'),
-                                                  PRESENT_PRESENT('MAILLE','POINT'),),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
-                                   into=("DEPL","VITE","ACCE","SIEF_ELGA",
-                                         "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             NUME_SUIVI      =SIMP(statut='o',typ='I' ,min=1,max=4),
-             VALE_MAX        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),
-             VALE_MIN        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),),
-         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
-                                regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),PRESENT_PRESENT('MAILLE','POINT'),),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
-                                              "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU","VALE_CONT")),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-             PAS_OBSE        =SIMP(statut='f',typ='I'),
-             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
-             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
-                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
-             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
-                PRECISION       =SIMP(statut='o',typ='R',),),),
-         ),
-
-         AFFICHAGE      = FACT(statut='f',max=16,
-
-            UNITE       = SIMP(statut='f',typ='I',val_min=1),
-
-            LONG_R      = SIMP(statut='f',typ='I',defaut=12,val_min=1,val_max=12),
-            PREC_R      = SIMP(statut='f',typ='I',defaut=5, val_min=1,val_max=8),
-            LONG_I      = SIMP(statut='f',typ='I',defaut=6, val_min=1,val_max=12),
-
-            NOM_COLONNE = SIMP(statut='o',typ='TXM',defaut="STANDARD",
-                                into=("STANDARD","MINIMUM",
-                                      "ITER_NEWT",
-                                      "INCR_TPS",
-                                      "RESI_RELA","RELA_NOEU",
-                                      "RESI_MAXI","MAXI_NOEU",
-                                      "RESI_REFE","REFE_NOEU",
-                                      "RELI_ITER","RELI_COEF",
-                                      "RESI_COMP","COMP_NOEU",
-                                      "PILO_PARA",
-                                      "MATR_ASSE",
-                                      "ITER_DEBO",
-                                      "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
-                                      "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
-                                      "SUIV_1","SUIV_2","SUIV_3","SUIV_4","ITER_FETI",
-                                     ),
-                               ),
-            b_residu    = BLOC(condition = " NOM_COLONNE == 'RESI_RELA' or \
-                    NOM_COLONNE == 'RESI_MAXI' or\
-                    NOM_COLONNE == 'RESI_REFE' or\
-                    NOM_COLONNE == 'CTCD_GEOM' or\
-                    NOM_COLONNE == 'STANDARD' ",
-                            INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-                          ),
-         ),
-
-
-
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#-------------------------------------------------------------------
+         SUIVI_DDL       =C_SUIVI_DDL(),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------   
+         AFFICHAGE      = C_AFFICHAGE(),
+#-------------------------------------------------------------------   
          CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
            NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
            CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10),
@@ -26597,16 +28795,116 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                                           'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
                                           'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
                                           'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
-           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+           regles         = (EXCLUS('PAS_CALC','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_CALC       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
          ),
            SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
                                fr="Liste des paramètres de sensibilité",
                                ang="List of sensitivity parameters"),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         b_info=BLOC(condition="INFO==2",
+               fr="filtre les messages émis dans le .mess selon le type de message demandé",
+               INFO_DBG = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               into=("CONTACT",
+                                     "MECA_NON_LINE",
+                                     "PILOTAGE",
+                                     "FACTORISATION",
+                                     "APPARIEMENT"),
+                             ),
+                    ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
  )
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE PROIX J.M.PROIX
+
+from Macro.test_compor_ops import test_compor_ops
+
+#              MACRO "TEST_THERMOPLASTIQUE"
+#           ----------------------------
+
+TEST_COMPOR =MACRO(nom="TEST_COMPOR", op=test_compor_ops,sd_prod=table_sdaster,
+                       docu="",reentrant='n',
+                       fr="macro de test des comportements incrementaux dependant de la temperature",         
+
+         OPTION         =SIMP(statut='f',typ='TXM',into=("THER","MECA"),defaut="THER"),
+
+         COMP_INCR       =C_COMP_INCR(),
+         COMP_ELAS       =C_COMP_ELAS('SIMU_POINT_MAT'),
+         NEWTON          =C_NEWTON(),
+         CONVERGENCE     =C_CONVERGENCE(),
+         
+         b_ther          =BLOC(condition = "OPTION == 'THER'",
+            regles=(EXCLUS('C_PRAG','D_SIGM_EPSI'),),
+            MATER           =SIMP(statut='o',typ=mater_sdaster,max=1,fr="materiau dependant de la temperature"),
+            ALPHA           =SIMP(statut='o',typ=fonction_sdaster,
+                                  fr="coefficient de dilatation fonction de la temperature"),
+            YOUNG           =SIMP(statut='o',typ=fonction_sdaster,
+                                  fr="module d'Young fonction de la temperature"),
+            LIST_MATER      =SIMP(statut='o',typ=mater_sdaster,max='**', 
+                                          fr="liste des materiaux constants interpolés à chaque température"),
+            TEMP_INIT       =SIMP(statut='o',typ='R', fr="temperature initiale et de reference"),
+            TEMP_FIN        =SIMP(statut='o',typ='R', fr="temperature finale"),
+            INST_FIN        =SIMP(statut='f',typ='R',defaut=1.,fr="instant final"),
+            NB_VARI         =SIMP(statut='o',typ='I', fr="nombre de variables internes - 0 en elasticité"),
+            VARI_TEST       =SIMP(statut='f',typ='TXM',max='**', 
+                                  fr="liste de variables internes à tester - par defaut, toutes"),
+
+#           special ecrouissage cinematique
+            D_SIGM_EPSI     =SIMP(statut='f',typ=fonction_sdaster,
+                                  fr="module tangent fonction de la temperature- VMIS_CINE_LINE"),
+            C_PRAG          =SIMP(statut='f',typ=fonction_sdaster,
+                                  fr="constante de Prager fonction de la temperature- VMIS_ECMI_*"),
+                        ),
+         b_meca          =BLOC(condition = "OPTION == 'MECA'",
+            LIST_MATER      =SIMP(statut='o',typ=mater_sdaster,max=2,min=2, 
+                                          fr="liste des materiaux en Pa puis MPa "),
+            YOUNG           =SIMP(statut='o',typ='R',fr="module d'Young"),
+            POISSON         =SIMP(statut='o',typ='R',fr="coef de Poisson"),
+            LIST_NPAS       =SIMP(statut='f',typ='I',max='**',
+                                  fr="nombre de pas de temps pour chaque discretisation"),
+            LIST_TOLE       =SIMP(statut='f',typ='R',max='**',),
+            PREC_ZERO       =SIMP(statut='f',typ='R',max='**',),
+            VARI_TEST       =SIMP(statut='f',typ='TXM',max='**',defaut=('V1','VMIS','TRACE'), 
+                                  fr="liste des CMP à tester "),
+            SUPPORT         =SIMP(statut='f',typ='TXM',max=1,into=("POINT","ELEMENT",)),
+            MODELISATION    =SIMP(statut='f',typ='TXM',max=1,into=("3D","C_PLAN"),defaut="3D",),
+            ANGLE           =SIMP(statut='f',typ='R',max=1, defaut=0.,
+             fr='Rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées',),
+            MASSIF          =FACT(statut='f',max='**',fr='orientation du materiau (monocristal, orthotropie)',
+              regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+              ANGL_REP        =SIMP(statut='f',typ='R',min=1,max=3),
+              ANGL_EULER      =SIMP(statut='f',typ='R',min=1,max=3),
+                                 ),
+                               ),
+            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+                 )
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -26629,7 +28927,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
 from Macro.test_fichier_ops import test_fichier_ops
 
 TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
-                   UIinfo={"groupes":("Impression",)},
+                   UIinfo={"groupes":("Utilitaires",)},
                    fr="Tester la non régression de fichiers produits par des commandes aster",
    FICHIER          =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
    EXPR_IGNORE      =SIMP(statut='f',typ='TXM',max='**',
@@ -26652,7 +28950,7 @@ TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
 
    INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
-#& MODIF COMMANDE  DATE 01/02/2010   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -26676,7 +28974,7 @@ from Macro.test_fonction_ops import test_fonction_ops
 
 TEST_FONCTION=MACRO(nom="TEST_FONCTION",op=test_fonction_ops,sd_prod=None,
             fr="Extraction d'une valeur numérique ou d'un attribut de fonction pour comparaison à une valeur de référence",
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Fonctions","Utilitaires",)},
          TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          VALEUR          =FACT(statut='f',max='**',
                                fr="Tester la valeur d une fonction ou d une nappe",
@@ -26749,7 +29047,7 @@ TEST_FONCTION=MACRO(nom="TEST_FONCTION",op=test_fonction_ops,sd_prod=None,
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 01/02/2010   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -26771,7 +29069,7 @@ TEST_FONCTION=MACRO(nom="TEST_FONCTION",op=test_fonction_ops,sd_prod=None,
 # ======================================================================
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 TEST_RESU=PROC(nom="TEST_RESU",op=23,
-            UIinfo={"groupes":("Impression",)},
+            UIinfo={"groupes":("Résultats et champs","Utilitaires",)},
          fr="Extraction d'une valeur d'une structure de donnée et comparaison à une valeur de référence",
          regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','GENE','OBJET','TEST_NAN',)),
 
@@ -26784,7 +29082,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
            CHAM_GD         =SIMP(statut='o',typ=cham_no_sdaster),
            NOEUD           =SIMP(statut='f',typ=no   ),
            GROUP_NO        =SIMP(statut='f',typ=grno ),
-           NOM_CMP         =SIMP(statut='f',typ='TXM'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max=1),
            TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
            VALE            =SIMP(statut='f',typ='R',max='**'),
            VALE_I          =SIMP(statut='f',typ='I',max='**'),
@@ -26811,7 +29109,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
            SOUS_POINT      =SIMP(statut='f',typ='I'),
            NOEUD           =SIMP(statut='f',typ=no),
            GROUP_NO        =SIMP(statut='f',typ=grno),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max=1),
            TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
            VALE            =SIMP(statut='f',typ='R',max='**' ),
            VALE_I          =SIMP(statut='f',typ='I',max='**' ),
@@ -26849,7 +29147,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
            ANGL            =SIMP(statut='f',typ='R'),
            PARA            =SIMP(statut='f',typ='TXM'),
            NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max=1),
            MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
            NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
@@ -26924,7 +29222,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
 
          TEST_NAN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 )  ;
-#& MODIF COMMANDE  DATE 01/02/2010   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -26944,10 +29242,10 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,
 # ======================================================================
 # RESPONSABLE COURTOIS M.COURTOIS
 TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
-            UIinfo={"groupes":("Impression",)},
-         fr="Tester une cellule ou une colonne d'une table",
-         regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),
-                 DERIVABLE('TABLE'),),
+                UIinfo={"groupes":("Tables","Utilitaires",)},
+                fr="Tester une cellule ou une colonne d'une table",
+                regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),
+                DERIVABLE('TABLE'),),
 #  concept table_sdaster à tester
          TABLE           =SIMP(statut='o',typ=table_sdaster),
 
@@ -26985,7 +29283,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 05/09/2008   AUTEUR COURTOIS M.COURTOI
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMA
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -27010,6 +29308,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
 from Macro.test_temps_ops import test_temps_ops
 
 TEST_TEMPS=MACRO(nom="TEST_TEMPS",op=test_temps_ops, sd_prod=None,
+                 UIinfo={"groupes":("Utilitaires",)},
                  fr="Permet de vérifier le temps passé dans les commandes",
                  reentrant='n',
 
@@ -27033,10 +29332,10 @@ TEST_TEMPS=MACRO(nom="TEST_TEMPS",op=test_temps_ops, sd_prod=None,
    INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
 
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -27053,7 +29352,7 @@ TEST_TEMPS=MACRO(nom="TEST_TEMPS",op=test_temps_ops, sd_prod=None,
 # ======================================================================
 # RESPONSABLE DURAND C.DURAND
 THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Thermique",)},
                    fr="Résoudre un problème thermique linéaire stationnaire ou transitoire",
          regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
@@ -27118,7 +29417,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -27127,44 +29426,45 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
 
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
            ),
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
-         ARCHIVAGE       =FACT(statut='f',
-           regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
-           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-           PAS_ARCH        =SIMP(statut='f',typ='I' ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
-           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
-                                 into=("VARI",)),
-         ),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),         
+#-------------------------------------------------------------------
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -27181,7 +29481,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
 # ======================================================================
 # RESPONSABLE DURAND C.DURAND
 THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Thermique",)},
                    fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
                       +" stationnaire ou transitoire" ,
          regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
@@ -27266,7 +29566,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -27275,68 +29575,53 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),           
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO","SCOTCH",)),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              FILTRAGE_MATRICE=SIMP(statut='f',typ='R',defaut=-1.0,),
              MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
 
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
            ),
            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',
-           regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
-           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-           PAS_ARCH        =SIMP(statut='f',typ='I' ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
-           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
-                                 into=("VARI",)),
-         ),
-         OBSERVATION     =FACT(statut='f',max='**',
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
-           SUIVI_DDL       =SIMP(statut='c',typ='TXM',defaut="NON",max=1,into=("NON",)),
-         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
-                                regles=(UN_PARMI('NOEUD','GROUP_NO')),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("TEMP",)),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
-             PAS_OBSE        =SIMP(statut='f',typ='I'),
-             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
-             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
-                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
-             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
-                PRECISION       =SIMP(statut='o',typ='R',),),),
-         ),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#------------------------------------------------------------------- 
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,
-                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
+                               into=("FLUX_ELGA","FLUX_ELNO") ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 
 )  ;
-#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#& MODIF COMMANDE  DATE 08/02/2011   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -27356,7 +29641,7 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
                      fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
                         +" stationnaire avec chargement mobile",
                      reentrant='n',
-            UIinfo={"groupes":("Résolution",)},
+            UIinfo={"groupes":("Résolution","Thermique",)},
          MODELE          =SIMP(statut='o',typ=modele_sdaster ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
@@ -27394,7 +29679,7 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
                RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
                ),
              b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
-               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
                ),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
@@ -27403,20 +29688,29 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
              TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
              PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
              POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
              ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
              PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
              RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
              OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
              ),
            b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
              ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
-             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+             b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
                NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
                REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+               RENUM            =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             ),
+             b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+             ),
+             b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'", 
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
              ),
-             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= -1 ),
            ),
index 258662733de4cfce1b1bbecb0a3402cc13e9f145..2992ed0adc519de3ad2f92cf91bbe20a2b164071 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF ops Cata  DATE 09/11/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -188,8 +188,8 @@ def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
                UTMESS('A', 'SUPERVIS_93', valk=(elem, name))
                del pickle_context[elem]
                continue
-            # rétablir le parent pour les attributs de la SD
-            pickle_context[elem].reparent_sd()
+            # rétablir le catalogue de SD
+            pickle_context[elem].rebuild_sd()
             if elem in self.g_context.keys():
                poursu_class=self.g_context[elem].__class__
                if poursu_class!=pickle_class :
@@ -212,6 +212,8 @@ def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
      # POURSUITE
      if hasattr(self,'fichier_init'):
         return
+     if aster_exists:
+        UTMESS('F','SUPERVIS_89')
      self.make_poursuite()
 
 def get_pickled_context():
diff --git a/Aster/Cata/cataSTA11/__init__.py b/Aster/Cata/cataSTA11/__init__.py
new file mode 100644 (file)
index 0000000..3cdb1ca
--- /dev/null
@@ -0,0 +1,18 @@
+import os,sys
+sys.modules["Cata"]=sys.modules[__name__]
+rep_macro = os.path.dirname(__file__)
+sys.path.insert(0,rep_macro)
+rep_macro=os.path.join(rep_macro,'Macro')
+sys.path.insert(0,rep_macro)
+
+if sys.modules.has_key("SD"):
+  del sys.modules["SD"]
+for k in sys.modules.keys():
+  if k[0:3] == "SD.":
+    del sys.modules[k]
+
+
+from cata import *
+from math import ceil
+from Extensions import param2
+pi=param2.Variable('pi',pi)
diff --git a/Aster/Cata/cataSTA11/cata.py b/Aster/Cata/cataSTA11/cata.py
new file mode 100755 (executable)
index 0000000..9859ef8
--- /dev/null
@@ -0,0 +1,33123 @@
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+from math import sin, cos, tan, asin, acos, atan2, atan, sinh, cosh, tanh
+from math import pi ,exp,log, log10, sqrt
+
+import Accas
+from Accas import *
+from Accas import _F
+import ops
+
+try:
+    import aster
+    aster_exists = True
+except ImportError:
+    aster = None
+    aster_exists = False
+
+# Le catalogue est constitué par concaténation des fichiers .capy
+# de catapy/{entete,commun,commande}.
+
+# Tous les imports globaux devraient être faits ici dans accas.capy.
+# Veillez à limiter les imports dans la définition des concepts (co_*.capy)
+# au strict nécessaire et les faire sous les méthodes qui en ont
+# expressément besoin.
+
+JdC = JDC_CATA(code='ASTER',
+               execmodul=None,
+               regles=(AU_MOINS_UN('DEBUT', 'POURSUITE'),
+                       AU_MOINS_UN('FIN'),
+                       A_CLASSER(('DEBUT', 'POURSUITE'), 'FIN')))
+
+# Types géométriques
+class no(GEOM): pass
+class grno(GEOM): pass
+class ma(GEOM): pass
+class grma(GEOM): pass
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class cabl_precont(ASSD):
+    cata_sdj = "SD.sd_cabl_precont.sd_cabl_precont"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class cara_elem(ASSD):
+   cata_sdj = "SD.sd_cara_elem.sd_cara_elem"
+
+   def toEPX(self):
+      # s'il y a un problème sur la structure de données ==> <F>
+      try:
+         EPXnoeud = self.sdj.CARRIGXN.get()
+         EPXval   = self.sdj.CARRIGXV.get()
+         lenEPXval   = len(EPXval)
+         lenEPXnoeud = len(EPXnoeud)*6
+      except:
+         from Utilitai.Utmess import UTMESS
+         UTMESS('F','MODELISA9_98')
+      # Vérification de la déclaration qui est faite dans 'acearp'
+      if ( lenEPXval != lenEPXnoeud ):
+         from Utilitai.Utmess import UTMESS
+         UTMESS('F','MODELISA9_97')
+      # Tout est OK
+      ressorts = {}
+      i=0
+      for no in EPXnoeud :
+         ressorts[no] = EPXval[i:i+6]
+         i+=6
+      return ressorts
+
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+class cham_gd_sdaster(ASSD):
+    cata_sdj = "SD.sd_champ.sd_champ"
+
+class carte_sdaster(cham_gd_sdaster):
+    cata_sdj = "SD.sd_champ.sd_carte_class"
+
+class cham_elem(cham_gd_sdaster):
+   cata_sdj = "SD.sd_champ.sd_cham_elem_class"
+
+   def EXTR_COMP(self,comp,lgma,topo=0) :
+      """ retourne les valeurs de la composante comp du champ sur la liste
+        de groupes de mailles lgma avec eventuellement l'info de la
+        topologie si topo>0. Si lgma est une liste vide, c'est equivalent
+        a un TOUT='OUI' dans les commandes aster
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs
+        Si on a demande la topo  :
+          - self.maille  : numero de mailles
+          - self.point   : numero du point dans la maille
+          - self.sous_point : numero du sous point dans la maille """
+      import numpy
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans cham_elem.EXTR_COMP en PAR_LOT='OUI'")
+
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      nchams=ncham[0:7]+'S'
+      ncmp=comp+(8-len(comp))*' '
+
+      aster.prepcompcham(ncham,nchams,ncmp,"EL      ",topo,lgma)
+
+      valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
+
+      if (topo>0) :
+         maille=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.M'))
+         point=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.P'))
+         sous_point=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.SP'))
+      else :
+         maille=None
+         point=None
+         sous_point=None
+
+      aster.prepcompcham("__DETR__",nchams,ncmp,"EL      ",topo,lgma)
+
+      return post_comp_cham_el(valeurs,maille,point,sous_point)
+
+class cham_no_sdaster(cham_gd_sdaster):
+   cata_sdj = "SD.sd_champ.sd_cham_no_class"
+
+   def EXTR_COMP(self,comp=' ',lgno=[],topo=0) :
+      """ retourne les valeurs de la composante comp du champ sur la liste
+        de groupes de noeuds lgno avec eventuellement l'info de la
+        topologie si topo>0. Si lgno est une liste vide, c'est equivalent
+        a un TOUT='OUI' dans les commandes aster
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs
+        Si on a demande la topo (i.e. self.topo = 1) :
+          - self.noeud  : numero de noeud
+        Si on demande toutes les composantes (comp = ' ') :
+          - self.comp : les composantes associees a chaque grandeur pour chaque noeud
+      """
+      import numpy
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans cham_no.EXTR_COMP en PAR_LOT='OUI'")
+
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      nchams=ncham[0:7]+'S'
+      ncmp=comp+(8-len(comp))*' '
+
+      aster.prepcompcham(ncham,nchams,ncmp,"NO      ",topo,lgno)
+
+      valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
+
+      if (topo>0) :
+         noeud=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.N'))
+      else :
+         noeud=None
+
+      if comp[:1] == ' ':
+         comp=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.C'))
+         aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
+         return post_comp_cham_no(valeurs,noeud,comp)
+      else:
+         aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
+         return post_comp_cham_no(valeurs,noeud)
+
+   def __add__(self, other):
+      from SD.sd_nume_equa import sd_nume_equa
+      # on recupere le type
+      __nume_ddl=sd_nume_equa(self.sdj.REFE.get()[1])
+      __gd=__nume_ddl.REFN.get()[1].strip()
+      __type='NOEU_'+__gd
+      # on recupere le nom du maillage
+      __nomMaillage=self.sdj.REFE.get()[0].strip()
+      # on recupere l'objet du maillage
+      __maillage=CONTEXT.get_current_step().get_concept(__nomMaillage)
+      __CHAM = CREA_CHAMP(OPERATION='ASSE',
+                          MAILLAGE=__maillage,
+                          TYPE_CHAM=__type,
+                          INFO=1,
+                          ASSE=(_F(CHAM_GD=self,
+                                   TOUT='OUI',
+                                   CUMUL='OUI',
+                                   COEF_R=1.),
+                                _F(CHAM_GD=other,
+                                   TOUT='OUI',
+                                   CUMUL='OUI',
+                                   COEF_R=1.),
+                               ))
+      return __CHAM
+
+# post-traitement :
+class post_comp_cham_no :
+    def __init__(self, valeurs, noeud=None, comp=None) :
+        self.valeurs = valeurs
+        self.noeud = noeud
+        self.comp = comp
+
+class post_comp_cham_el :
+    def __init__(self, valeurs, maille=None, point=None, sous_point=None) :
+        self.valeurs = valeurs
+        self.maille = maille
+        self.point = point
+        self.sous_point = sous_point
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class cham_mater(ASSD):
+    cata_sdj = "SD.sd_cham_mater.sd_cham_mater"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_acou(ASSD):
+    cata_sdj = "SD.sd_char_acou.sd_char_acou"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_cine_acou(ASSD):
+    cata_sdj = "SD.sd_char_cine.sd_char_cine"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_cine_meca(ASSD):
+    cata_sdj = "SD.sd_char_cine.sd_char_cine"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_cine_ther(ASSD):
+    cata_sdj = "SD.sd_char_cine.sd_char_cine"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_contact(ASSD):
+    cata_sdj = "SD.sd_contact.sd_contact"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_meca(ASSD):
+    cata_sdj = "SD.sd_char_meca.sd_char_meca"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class char_ther(ASSD):
+    cata_sdj = "SD.sd_char_ther.sd_char_ther"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class compor_sdaster(ASSD):
+    cata_sdj = "SD.sd_compor.sd_compor"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class corresp_2_mailla(ASSD):
+    cata_sdj = "SD.sd_corresp_2_mailla.sd_corresp_2_mailla"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class courbe_sdaster(ASSD):
+    cata_sdj = "SD.sd_courbe.sd_courbe"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+class entier(ASSD):
+    def __init__(self, valeur=None, **args):
+        ASSD.__init__(self,**args)
+        self.valeur = valeur
+
+    def __adapt__(self, validator):
+        if validator.name == "list":
+            # validateur liste,cardinalité
+            return (self, )
+        elif validator.name == "type":
+            # validateur type
+            return validator.adapt(self.valeur or 0)
+        else:
+            # validateur into et valid
+            return self
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class fiss_xfem(ASSD):
+    cata_sdj = "SD.sd_xfem.sd_fiss_xfem"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+# types 'fonction' :
+class fonction_class(ASSD):
+   cata_sdj = "SD.sd_fonction.sd_fonction_aster"
+
+   def Valeurs(self):
+      pass
+
+   def Parametres(self):
+      """
+      Retourne un dictionnaire contenant les parametres de la fonction ;
+      le type jeveux (FONCTION, FONCT_C, NAPPE) n'est pas retourne,
+      le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel.
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+        TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+        objev = '%-19s.PROL' % self.get_name()
+        prol = self.sdj.PROL.get()
+        if prol == None:
+           UTMESS('F', 'SDVERI_2', valk=[objev])
+        dico={
+         'INTERPOL'    : [prol[1][0:3],prol[1][4:7]],
+         'NOM_PARA'    : prol[2][0:16].strip(),
+         'NOM_RESU'    : prol[3][0:16].strip(),
+         'PROL_DROITE' : TypeProl[prol[4][1]],
+         'PROL_GAUCHE' : TypeProl[prol[4][0]],
+        }
+      elif hasattr(self,'etape') and self.etape.nom=='DEFI_FONCTION' :
+        dico={
+         'INTERPOL'    : self.etape['INTERPOL'],
+         'NOM_PARA'    : self.etape['NOM_PARA'],
+         'NOM_RESU'    : self.etape['NOM_RESU'],
+         'PROL_DROITE' : self.etape['PROL_DROITE'],
+         'PROL_GAUCHE' : self.etape['PROL_GAUCHE'],
+        }
+        if   type(dico['INTERPOL']) == tuple:
+                  dico['INTERPOL']=list(dico['INTERPOL'])
+        elif type(dico['INTERPOL']) == str:
+                  dico['INTERPOL']=[dico['INTERPOL'],]
+        if len(dico['INTERPOL'])==1 :
+           dico['INTERPOL']=dico['INTERPOL']*2
+      else:
+         raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
+      return dico
+
+   def Trace(self,FORMAT='TABLEAU',**kargs):
+      """Tracé d'une fonction"""
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans fonction.Trace en PAR_LOT='OUI'")
+      from Utilitai.Graph import Graph
+      gr=Graph()
+      gr.AjoutCourbe(Val=self.Valeurs(),
+            Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']],
+            Leg=os.linesep.join(self.sdj.TITR.get()) )
+      gr.Trace(FORMAT=FORMAT,**kargs)
+
+class fonction_sdaster(fonction_class):
+
+   def convert(self, arg='real'):
+      """
+      Retourne un objet de la classe t_fonction
+      représentation python de la fonction
+      """
+      from Cata_Utils.t_fonction import t_fonction, t_fonction_c
+      class_fonction = t_fonction
+      if arg == 'complex':
+         class_fonction = t_fonction_c
+      absc, ordo = self.Valeurs()
+      return class_fonction(absc, ordo, self.Parametres(), nom=self.nom)
+
+   def Valeurs(self) :
+      """
+      Retourne deux listes de valeurs : abscisses et ordonnees
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+        vale = '%-19s.VALE' % self.get_name()
+        lbl = self.sdj.VALE.get()
+        if lbl == None:
+          UTMESS('F', 'SDVERI_2', valk=[vale])
+        lbl = list(lbl)
+        dim = len(lbl)/2
+        lx = lbl[0:dim]
+        ly = lbl[dim:2*dim]
+      elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
+         if self.etape['VALE'] is not None:
+            lbl = list(self.etape['VALE'])
+            dim = len(lbl)
+            lx = [lbl[i] for i in range(0,dim,2)]
+            ly = [lbl[i] for i in range(1,dim,2)]
+         elif self.etape['VALE_PARA'] is not None:
+            lx = self.etape['VALE_PARA'].Valeurs()
+            ly = self.etape['VALE_FONC'].Valeurs()
+         elif self.etape['ABSCISSE'] is not None:
+            lx = self.etape['ABSCISSE']
+            ly = self.etape['ORDONNEE']
+         else:
+            raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le fichier de commandes courant.")
+      else:
+         raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le fichier de commandes courant.")
+      return [lx, ly]
+
+   def Absc(self):
+      """Retourne la liste des abscisses"""
+      return self.Valeurs()[0]
+
+   def Ordo(self):
+      """Retourne la liste des ordonnées"""
+      return self.Valeurs()[1]
+
+   def __call__(self,val):
+      ### Pour EFICAS : substitution de l'instance de classe
+      ### parametre par sa valeur
+      if isinstance(val, ASSD):
+         val=val.valeur
+      ###
+      __ff=self.convert()
+      return __ff(val)
+
+
+class para_sensi(fonction_sdaster):
+   pass
+
+
+class fonction_c(fonction_class):
+
+   def convert(self,arg='real'):
+      """
+      Retourne un objet de la classe t_fonction ou t_fonction_c,
+      représentation python de la fonction complexe
+      """
+      import numpy
+      from Cata_Utils.t_fonction import t_fonction, t_fonction_c
+      class_fonction = t_fonction
+      if arg == 'complex':
+         class_fonction = t_fonction_c
+      absc = self.Absc()
+      para = self.Parametres()
+      if arg == 'real':
+         ordo = self.Ordo()
+      elif arg == 'imag':
+         ordo = self.OrdoImg()
+      elif arg == 'modul':
+         ordo = numpy.sqrt(numpy.array(self.Ordo())**2 + numpy.array(self.OrdoImg())**2)
+      elif arg == 'phase':
+         ordo = numpy.arctan2(numpy.array(self.OrdoImg()), numpy.array(self.Ordo())) * 180. / pi
+      elif arg == 'complex':
+         ordo = map(complex,self.Ordo(),self.OrdoImg())
+
+      return class_fonction(self.Absc(), ordo, self.Parametres(), nom=self.nom)
+
+   def Valeurs(self) :
+      """
+      Retourne trois listes de valeurs : abscisses, parties reelles et imaginaires.
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+         vale = '%-19s.VALE' % self.get_name()
+         lbl = self.sdj.VALE.get()
+         if lbl == None:
+           UTMESS('F', 'SDVERI_2', valk=[vale])
+         lbl = list(lbl)
+         dim=len(lbl)/3
+         lx=lbl[0:dim]
+         lr=[]
+         li=[]
+         for i in range(dim):
+            lr.append(lbl[dim+2*i])
+            li.append(lbl[dim+2*i+1])
+      elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' \
+            and self.etape['VALE_C'] is not None:
+         lbl=list(self.etape['VALE_C'])
+         dim=len(lbl)
+         lx=[lbl[i] for i in range(0,dim,3)]
+         lr=[lbl[i] for i in range(1,dim,3)]
+         li=[lbl[i] for i in range(2,dim,3)]
+      else:
+         raise Accas.AsException("Erreur (fonction_c.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le jdc courant.")
+      return [lx, lr, li]
+
+   def Absc(self):
+      """Retourne la liste des abscisses"""
+      return self.Valeurs()[0]
+
+   def Ordo(self):
+      """Retourne la liste des parties réelles des ordonnées"""
+      return self.Valeurs()[1]
+
+   def OrdoImg(self):
+      """Retourne la liste des parties imaginaires des ordonnées"""
+      return self.Valeurs()[2]
+
+   def Trace(self,FORMAT='TABLEAU',**kargs):
+      """Tracé d'une fonction complexe"""
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
+      from Utilitai.Graph import Graph
+      para = self.Parametres()
+      gr=Graph()
+      gr.AjoutCourbe(Val=self.Valeurs(),
+         Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']],
+         Leg=os.linesep.join(self.sdj.TITR.get()) )
+      gr.Trace(FORMAT=FORMAT,**kargs)
+
+   def __call__(self,val):
+      ### Pour EFICAS : substitution de l'instance de classe
+      ### parametre par sa valeur
+      if isinstance(val, ASSD):
+         val=val.valeur
+      ###
+      __ff=self.convert(arg='complex')
+      return __ff(val)
+
+
+class nappe_sdaster(fonction_class):
+
+   def convert(self):
+      """
+      Retourne un objet de la classe t_nappe, représentation python de la nappe
+      """
+      from Cata_Utils.t_fonction import t_fonction, t_nappe
+      para = self.Parametres()
+      vale = self.Valeurs()
+      l_fonc = []
+      i = 0
+      for pf in para[1] :
+          para_f = {'INTERPOL'    : pf['INTERPOL_FONC'],
+                    'PROL_DROITE' : pf['PROL_DROITE_FONC'],
+                    'PROL_GAUCHE' : pf['PROL_GAUCHE_FONC'],
+                    'NOM_PARA'    : para[0]['NOM_PARA_FONC'],
+                    'NOM_RESU'    : para[0]['NOM_RESU'],
+                   }
+          l_fonc.append(t_fonction(vale[1][i][0],vale[1][i][1],para_f))
+          i += 1
+      return t_nappe(vale[0], l_fonc, para[0], nom=self.nom)
+
+   def Valeurs(self):
+      """
+      Retourne la liste des valeurs du parametre,
+      et une liste de couples (abscisses,ordonnees) de chaque fonction.
+      """
+      from Utilitai.Utmess import UTMESS
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans nappe.Valeurs en PAR_LOT='OUI'")
+      nsd = '%-19s' % self.get_name()
+      dicv=aster.getcolljev(nsd+'.VALE')
+      # les cles de dicv sont 1,...,N (indice du parametre)
+      lpar=aster.getvectjev(nsd+'.PARA')
+      if lpar == None:
+         UTMESS('F', 'SDVERI_2', valk=[nsd+'.PARA'])
+      lval=[]
+      for k in range(len(dicv)):
+         lbl=dicv[k+1]
+         dim=len(lbl)/2
+         lval.append([lbl[0:dim],lbl[dim:2*dim]])
+      return [list(lpar),lval]
+
+   def Parametres(self):
+      """
+      Retourne un dictionnaire contenant les parametres de la nappe,
+      le type jeveux (NAPPE) n'est pas retourne,
+      le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel,
+      et une liste de dictionnaire des parametres de chaque fonction.
+      """
+      from Utilitai.Utmess import UTMESS
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans nappe.Parametres en PAR_LOT='OUI'")
+      TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+      objev = '%-19s.PROL' % self.get_name()
+      prol=aster.getvectjev(objev)
+      if prol == None:
+         UTMESS('F', 'SDVERI_2', valk=[objev])
+      dico={
+         'INTERPOL'      : [prol[1][0:3],prol[1][4:7]],
+         'NOM_PARA'      : prol[2][0:16].strip(),
+         'NOM_RESU'      : prol[3][0:16].strip(),
+         'PROL_DROITE'   : TypeProl[prol[4][1]],
+         'PROL_GAUCHE'   : TypeProl[prol[4][0]],
+         'NOM_PARA_FONC' : prol[6][0:4].strip(),
+      }
+      lparf=[]
+      nbf=(len(prol)-7)/2
+      for i in range(nbf):
+         dicf={
+            'INTERPOL_FONC'    : [prol[7+i*2][0:3],prol[7+i*2][4:7]],
+            'PROL_DROITE_FONC' : TypeProl[prol[8+i*2][1]],
+            'PROL_GAUCHE_FONC' : TypeProl[prol[8+i*2][0]],
+         }
+         lparf.append(dicf)
+      return [dico,lparf]
+
+   def Absc(self):
+      """Retourne la liste des abscisses"""
+      return self.Valeurs()[0]
+
+   def Trace(self,FORMAT='TABLEAU',**kargs):
+      """Tracé d'une nappe"""
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans nappe.Trace en PAR_LOT='OUI'")
+      from Utilitai.Graph import Graph
+      gr=Graph()
+      lv=self.Valeurs()[1]
+      dp=self.Parametres()[0]
+      for lx,ly in lv:
+         gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']],
+            Leg=os.linesep.join(self.sdj.TITR.get()) )
+      gr.Trace(FORMAT=FORMAT,**kargs)
+
+   def __call__(self,val1,val2):
+      ### Pour EFICAS : substitution de l'instance de classe
+      ### parametre par sa valeur
+      if isinstance(val1, ASSD):
+         val1=val1.valeur
+      if isinstance(val2, ASSD):
+         val2=val2.valeur
+      ###
+      __ff=self.convert()
+      return __ff(val1,val2)
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class fond_fiss(ASSD):
+    cata_sdj = "SD.sd_fond_fiss.sd_fond_fiss"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class gfibre_sdaster(ASSD):
+    cata_sdj = "SD.sd_gfibre.sd_gfibre"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class interf_dyna_clas(ASSD):
+    cata_sdj = "SD.sd_interf_dyna_clas.sd_interf_dyna_clas"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class list_inst(ASSD):
+    cata_sdj = "SD.sd_list_inst.sd_list_inst"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class listis_sdaster(ASSD):
+    cata_sdj = "SD.sd_listis.sd_listis"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class listr8_sdaster(ASSD):
+   cata_sdj = "SD.sd_listr8.sd_listr8"
+
+   def Valeurs(self) :
+      """
+      Retourne la liste des valeurs : [val1, ..., valN]
+      """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans listr8.Valeurs en PAR_LOT='OUI'")
+      from Utilitai.Utmess import UTMESS
+      t_vale = self.sdj.VALE.get()
+      if t_vale == None:
+         UTMESS('F', 'SDVERI_2', valk=[vale])
+      return list(t_vale)
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def VALE_triang2array(vect_VALE, dim, dtype=None):
+    """Conversion (par recopie) de l'objet .VALE decrivant une matrice pleine
+    par sa triangulaire sup en numpy.array plein.
+    """
+    import numpy
+    triang_sup = numpy.array(vect_VALE)
+    assert dim*(dim+1)/2 == len(triang_sup), \
+        'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+
+    valeur = numpy.zeros([dim, dim], dtype=dtype)
+    for i in range(1, dim+1):
+        for j in range(1, i+1):
+            k = i*(i-1)/2 + j
+            valeur[j-1, i-1]=triang_sup[k-1]
+    valeur = valeur + numpy.transpose(valeur)
+    for i in range(dim):
+        valeur[i, i] = 0.5 * valeur[i, i]
+    return valeur
+
+class macr_elem_dyna(ASSD):
+    cata_sdj = "SD.sd_macr_elem_dyna.sd_macr_elem_dyna"
+
+    def EXTR_MATR_GENE(self,typmat) :
+        """ retourne les valeurs des matrices generalisees reelles
+        dans un format numpy
+         typmat='MASS_GENE' pour obtenir la matrice de masse generalisee
+         typmat='RIGI_GENE' pour obtenir la matrice de raideur generalisee
+         typmat='AMOR_GENE' pour obtenir la matrice d'amortissement generalisee
+         Attributs retourne
+            - self.valeurs : numpy.array contenant les valeurs """
+        import numpy
+        if not self.accessible():
+            raise Accas.AsException("Erreur dans macr_elem_dyna.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+        if (typmat=='MASS_GENE') :
+            macr_elem = self.sdj.MAEL_MASS
+        elif (typmat=='RIGI_GENE') :
+            macr_elem = self.sdj.MAEL_RAID
+        elif (typmat=='AMOR_GENE') :
+            macr_elem = self.sdj.MAEL_AMOR
+        else:
+            raise Accas.AsException("Le type de la matrice est incorrect")
+
+        desc=numpy.array(macr_elem.DESC.get())
+        # On teste si le DESC du vecteur existe
+        if (desc==None):
+            raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+
+        matrice = VALE_triang2array(macr_elem.VALE.get(), desc[1])
+        return matrice
+
+    def RECU_MATR_GENE(self,typmat,matrice) :
+        """ envoie les valeurs d'un tableau numpy dans des matrices generalisees
+        reelles definies dans jeveux
+         typmat='MASS_GENE' pour obtenir la matrice de masse generalisee
+         typmat='RIGI_GENE' pour obtenir la matrice de raideur generalisee
+         typmat='AMOR_GENE' pour obtenir la matrice d'amortissement generalisee
+         Attributs ne retourne rien """
+        import numpy
+        if not self.accessible():
+            raise Accas.AsException("Erreur dans macr_elem_dyna.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+        nommacr=self.get_name()
+        if (typmat=='MASS_GENE') :
+            macr_elem = self.sdj.MAEL_MASS
+        elif (typmat=='RIGI_GENE') :
+            macr_elem = self.sdj.MAEL_RAID
+        elif (typmat=='AMOR_GENE') :
+            macr_elem = self.sdj.MAEL_AMOR
+        else:
+            raise Accas.AsException("Le type de la matrice est incorrect")
+        nom_vale = macr_elem.VALE.nomj()
+        desc=numpy.array(macr_elem.DESC.get())
+
+        # On teste si le DESC de la matrice jeveux existe
+        if (desc==None):
+            raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+        numpy.asarray(matrice)
+
+        # On teste si la matrice python est de dimension 2
+        if (len(numpy.shape(matrice))<>2):
+            raise Accas.AsException("La dimension de la matrice est incorrecte")
+
+        # On teste si les tailles de la matrice jeveux et python sont identiques
+        if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+            raise Accas.AsException("La dimension de la matrice est incorrecte")
+        taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+        tmp=numpy.zeros([int(taille)])
+        for j in range(desc[1]+1):
+            for i in range(j):
+                k=j*(j-1)/2+i
+                tmp[k]=matrice[j-1,i]
+        aster.putvectjev(nom_vale,len(tmp),tuple((
+            range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class macr_elem_stat(ASSD):
+    cata_sdj = "SD.sd_macr_elem_stat.sd_macr_elem_stat"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class maillage_sdaster(ASSD):
+   cata_sdj = "SD.sd_maillage.sd_maillage"
+
+   def LIST_GROUP_NO(self) :
+      """ retourne la liste des groupes de noeuds sous la forme :
+        [ (gno1, nb noeuds  gno1), ...] """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans maillage.LIST_GROUP_NO en PAR_LOT='OUI'")
+      dic_gpno = self.sdj.GROUPENO.get()
+      if dic_gpno is None:
+          return []
+      return [(gpno.strip(),len(dic_gpno[gpno])) for gpno in dic_gpno]
+
+   def LIST_GROUP_MA(self) :
+      """ retourne la liste des groupes de mailles sous la forme :
+        [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans maillage.LIST_GROUP_MA en PAR_LOT='OUI'")
+      ltyma = aster.getvectjev("&CATA.TM.NOMTM")
+      catama = aster.getcolljev("&CATA.TM.TMDIM")
+      dic_gpma = self.sdj.GROUPEMA.get()
+      if dic_gpma is None:
+          return []
+      dimama = [catama[ltyma[ma-1]][0] for ma in self.sdj.TYPMAIL.get()]
+      ngpma = []
+      for grp in dic_gpma.keys():
+         dim = max([dimama[ma-1] for ma in dic_gpma[grp]])
+         ngpma.append((grp.strip(), len(dic_gpma[grp]),dim))
+      return ngpma
+
+class grille_sdaster(maillage_sdaster):
+    cata_sdj = "SD.sd_grille.sd_grille"
+
+class squelette(maillage_sdaster):
+    cata_sdj = "SD.sd_squelette.sd_squelette"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class mater_sdaster(ASSD):
+   cata_sdj = "SD.sd_mater.sd_mater"
+
+   def RCVALE(self, phenomene, nompar=(), valpar=(), nomres=(), stop=1):
+      """Appel à la routine fortran RCVALE pour récupérer les valeurs des
+      propriétés du matériau.
+      """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans mater.RCVALE en PAR_LOT='OUI'")
+      from Utilitai.Utmess import UTMESS
+      # vérification des arguments
+      if not type(nompar) in (list, tuple):
+         nompar = [nompar,]
+      if not type(valpar) in (list, tuple):
+         valpar = [valpar,]
+      if not type(nomres) in (list, tuple):
+         nomres = [nomres,]
+      nompar = tuple(nompar)
+      valpar = tuple(valpar)
+      nomres = tuple(nomres)
+      if len(nompar) != len(valpar):
+         vk1=', '.join(nompar)
+         vk2=', '.join([repr(v) for v in valpar])
+         UTMESS('F','SDVERI_4',valk=[vk1,vk2])
+      if len(nomres) < 1:
+         UTMESS('F', 'SDVERI_5')
+      # appel à l'interface Python/C
+      return aster.rcvale(self.nom, phenomene, nompar, valpar, nomres, stop)
+
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+class matr_asse(ASSD):
+    cata_sdj = "SD.sd_matr_asse.sd_matr_asse"
+
+    def EXTR_MATR(self) :
+        """ retourne les valeurs de la matrice  dans un format numpy
+            Attributs retourne
+              - self.valeurs : numpy.array contenant les valeurs """
+        import numpy
+        from SD.sd_stoc_morse import sd_stoc_morse
+
+        if not self.accessible():
+            raise Accas.AsException("Erreur dans matr_asse.EXTR_MATR en PAR_LOT='OUI'")
+
+        refa = numpy.array(self.sdj.REFA.get())
+        ma=refa[0]
+        nu=refa[1]
+        smos = sd_stoc_morse(nu[:14]+'.SMOS')
+
+        valm=self.sdj.VALM.get()
+        smhc=smos.SMHC.get()
+        smdi=smos.SMDI.get()
+
+        sym=len(valm)==1
+        dim=len(smdi)
+        nnz=smdi[dim-1]
+
+        triang_sup = numpy.array(valm[1])
+        if sym:
+            triang_inf = triang_sup
+        else:
+            triang_inf = numpy.array(valm[2])
+
+        if type(valm[1][0]) == type(1.j) :
+            dtype=complex
+        else :
+            dtype=float
+        valeur=numpy.zeros([dim, dim], dtype=dtype)
+
+        jcol=1
+        for kterm in range(1,nnz+1):
+            ilig=smhc[kterm-1]
+            if (smdi[jcol-1] < kterm):
+                jcol=jcol+1
+            valeur[jcol-1,ilig-1]=triang_inf[kterm-1]
+            valeur[ilig-1,jcol-1]=triang_sup[kterm-1]
+
+        return valeur
+
+class matr_asse_gd(matr_asse):
+    cata_sdj = "SD.sd_matr_asse_gene.sd_matr_asse_gene"
+
+class matr_asse_depl_c(matr_asse_gd):
+    pass
+
+class matr_asse_depl_r(matr_asse_gd):
+    pass
+
+class matr_asse_pres_c(matr_asse_gd):
+    pass
+
+class matr_asse_pres_r(matr_asse_gd):
+    pass
+
+class matr_asse_temp_c(matr_asse_gd):
+    pass
+
+class matr_asse_temp_r(matr_asse_gd):
+    pass
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def VALM_triang2array(dict_VALM, dim, dtype=None):
+   """Conversion (par recopie) de l'objet .VALM decrivant une matrice pleine
+   par sa triangulaire inf (et parfois triang sup) en numpy.array plein.
+   """
+   import numpy
+   # stockage symetrique ou non (triang inf+sup)
+   sym = len(dict_VALM) == 1
+   triang_sup = numpy.array(dict_VALM[1])
+   assert dim*(dim+1)/2 == len(triang_sup), \
+         'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+   if sym:
+      triang_inf = triang_sup
+   else:
+      triang_inf = numpy.array(dict_VALM[2])
+   valeur=numpy.zeros([dim, dim], dtype=dtype)
+   for i in range(1, dim+1):
+     for j in range(1, i+1):
+       k = i*(i-1)/2 + j
+       valeur[i-1, j-1]=triang_inf[k-1]
+       valeur[j-1, i-1]=triang_sup[k-1]
+   return valeur
+
+def VALM_diag2array(dict_VALM, dim, dtype=None):
+   """Conversion (par recopie) de l'objet .VALM decrivant une matrice
+   diagonale en numpy.array plein.
+   """
+   import numpy
+   diag = numpy.array(dict_VALM[1])
+   assert dim == len(diag), 'Dimension incorrecte : %d != %d' % (dim, len(diag))
+   valeur=numpy.zeros([dim, dim], dtype=dtype)
+   for i in range(dim):
+      valeur[i,i] =  diag[i]
+   return valeur
+
+class matr_asse_gene(ASSD):
+    cata_sdj = "SD.sd_matr_asse_gene.sd_matr_asse_gene"
+
+class matr_asse_gene_r(matr_asse_gene):
+  def EXTR_MATR_GENE(self) :
+    """ retourne les valeurs de la matrice generalisee reelle
+    dans un format numpyal Array
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs """
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene.EXTR_MATR_GENE en PAR_LOT='OUI'")
+    import numpy
+
+    desc=numpy.array(self.sdj.DESC.get())
+    # On teste si le DESC de la matrice existe
+    if (desc==None):
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+    # Si le stockage est plein
+    if desc[2]==2 :
+       valeur = VALM_triang2array(self.sdj.VALM.get(), desc[1])
+
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+       valeur = VALM_diag2array(self.sdj.VALM.get(), desc[1])
+
+    # Sinon on arrete tout
+    else:
+      raise KeyError
+    return valeur
+
+  def RECU_MATR_GENE(self,matrice) :
+    """ envoie les valeurs d'un tableau numpy dans des matrices
+    generalisees reelles definies dans jeveux
+        Attributs ne retourne rien """
+    import numpy
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+    ncham=self.get_name()
+    desc=numpy.array(self.sdj.DESC.get())
+
+    # On teste si le DESC de la matrice existe
+    if (desc==None):
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+    numpy.asarray(matrice)
+
+    # On teste si la dimension de la matrice python est 2
+    if (len(numpy.shape(matrice))<>2) :
+       raise Accas.AsException("La dimension de la matrice est incorrecte ")
+
+    # On teste si les tailles des matrices jeveux et python sont identiques
+    if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+       raise Accas.AsException("La taille de la matrice est incorrecte ")
+
+    # Si le stockage est plein
+    if desc[2]==2 :
+      taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+      tmp=numpy.zeros([int(taille)])
+      for j in range(desc[1]+1):
+        for i in range(j):
+          k=j*(j-1)/2+i
+          tmp[k]=matrice[j-1,i]
+      aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
+      range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+      tmp=numpy.zeros(desc[1])
+      for j in range(desc[1]):
+          tmp[j]=matrice[j,j]
+      aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
+      range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+    # Sinon on arrete tout
+    else:
+      raise KeyError
+    return
+
+class matr_asse_gene_c(matr_asse_gene):
+  def EXTR_MATR_GENE(self) :
+    """ retourne les valeurs de la matrice generalisee complexe
+    dans un format numpy
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs """
+    import numpy
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene_c.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+    desc = numpy.array(self.sdj.DESC.get())
+    if desc == None:
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster ")
+    # Si le stockage est plein
+    if desc[2] == 2 :
+       valeur = VALM_triang2array(self.sdj.VALM.get(), desc[1], complex)
+
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+       valeur = VALM_diag2array(self.sdj.VALM.get(), desc[1], complex)
+
+    # Sinon on arrete tout
+    else:
+       raise KeyError
+    return valeur
+
+  def RECU_MATR_GENE(self,matrice) :
+    """ envoie les valeurs d'un tableau numpy dans des matrices
+    generalisees reelles definies dans jeveux
+        Attributs ne retourne rien """
+    import numpy
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene_c.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+    numpy.asarray(matrice)
+    ncham=self.get_name()
+    desc=numpy.array(self.sdj.DESC.get())
+
+    # On teste si le DESC de la matrice existe
+    if (desc==None):
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+    numpy.asarray(matrice)
+
+    # On teste si la dimension de la matrice python est 2
+    if (len(numpy.shape(matrice))<>2) :
+       raise Accas.AsException("La dimension de la matrice est incorrecte ")
+
+    # On teste si la taille de la matrice jeveux et python est identique
+    if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+       raise Accas.AsException("La taille de la matrice est incorrecte ")
+
+    # Si le stockage est plein
+    if desc[2]==2 :
+      taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+      tmpr=numpy.zeros([int(taille)])
+      tmpc=numpy.zeros([int(taille)])
+      for j in range(desc[1]+1):
+        for i in range(j):
+          k=j*(j-1)/2+i
+          tmpr[k]=matrice[j-1,i].real
+          tmpc[k]=matrice[j-1,i].imag
+      aster.putvectjev('%-19s.VALM' % ncham, len(tmpr), tuple((\
+                       range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+      tmpr=numpy.zeros(desc[1])
+      tmpc=numpy.zeros(desc[1])
+      for j in range(desc[1]):
+          tmpr[j]=matrice[j,j].real
+          tmpc[j]=matrice[j,j].imag
+      aster.putvectjev('%-19s.VALM' % ncham,len(tmpr),tuple((\
+                       range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+    # Sinon on arrete tout
+    else:
+      raise KeyError
+    return
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class matr_elem(ASSD):
+    cata_sdj = "SD.sd_matr_elem.sd_matr_elem"
+
+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
+
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class melasflu_sdaster(ASSD):
+    cata_sdj = "SD.sd_melasflu.sd_melasflu"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class mode_cycl(ASSD):
+    cata_sdj = "SD.sd_mode_cycl.sd_mode_cycl"
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class modele_gene(ASSD):
+   cata_sdj = "SD.sd_modele_gene.sd_modele_gene"
+
+   def LIST_SOUS_STRUCT(self) :
+      """ retourne la liste des sous structures du modele generalise
+         la liste des macro-elements sous-jacents"""
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans modele_gene.LIST_SOUS_STRUCT en PAR_LOT='OUI'")
+      nommodgen=self.get_name()
+      ncham=nommodgen+(8-len(nommodgen))*' '
+      ssno=aster.getvectjev(ncham+(14-len(ncham))*' '+'.MODG.SSNO')
+      ssme=aster.getcolljev(ncham+(14-len(ncham))*' '+'.MODG.SSME')
+      return [([ssno[ind], ssme[ind+1]]) for ind in range(len(ssno))]
+
+   def LIST_LIAIS_STRUCT(self) :
+      """ retourne la liste des liaisons entre sous structures du modele generalise sous la forme :
+         [ (ss1, nom_liais1,  ss2 , nom_liais2), ...] """
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans modele_gene.LIST_LIAIS_STRUCT en PAR_LOT='OUI'")
+      nommodgen=self.get_name()
+      ncham=nommodgen+(8-len(nommodgen))*' '
+      lidf=aster.getcolljev(ncham+(14-len(ncham))*' '+'.MODG.LIDF')
+      return [([(lidf[ind][indb]) for indb in range(4)]) for ind in lidf]
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class modele_sdaster(ASSD):
+    cata_sdj = "SD.sd_modele.sd_modele"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class nume_ddl_gene(ASSD):
+    cata_sdj = "SD.sd_nume_ddl.sd_nume_ddl"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class nume_ddl_sdaster(ASSD):
+    cata_sdj = "SD.sd_nume_ddl.sd_nume_ddl"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+class reel(ASSD):
+    def __init__(self, valeur=None, **args):
+        ASSD.__init__(self, **args)
+        self.valeur = valeur
+
+    def __call__(self):
+        return self.valeur
+
+    def __adapt__(self, validator):
+        if validator.name == "list":
+            # validateur liste,cardinalité
+            return (self, )
+        elif validator.name == "type":
+            # validateur type
+            return validator.adapt(self.valeur or 0.)
+        else:
+            # validateur into et valid
+            return self
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class resultat_sdaster(ASSD):
+   cata_sdj = "SD.sd_resultat.sd_resultat"
+
+   def LIST_CHAMPS (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_CHAMPS en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "CHAMPS")
+
+   def LIST_NOM_CMP (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_NOM_CMP en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "COMPOSANTES")
+
+   def LIST_VARI_ACCES (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_VARI_ACCES en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "VARI_ACCES")
+
+   def LIST_PARA (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_PARA en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "PARAMETRES")
+
+class resultat_jeveux(resultat_sdaster):
+   """Classe permettant d'accéder à un resultat jeveux qui n'a pas d'ASSD associée,
+   c'est le cas des concepts résultats (table, evol_xxxx) dérivés."""
+   def __init__(self, nom_jeveux):
+      resultat_sdaster.__init__(self)
+      self.set_name(nom_jeveux)
+
+class resultat_dyn(resultat_sdaster):
+    cata_sdj = "SD.sd_resultat_dyn.sd_resultat_dyn"
+
+class mode_meca(resultat_dyn):
+    cata_sdj = "SD.sd_mode_meca.sd_mode_meca"
+
+class base_modale(resultat_dyn):
+    cata_sdj = "SD.sd_base_modale.sd_base_modale"
+
+
+class acou_harmo(resultat_dyn): pass
+class dyna_harmo(resultat_dyn): pass
+class dyna_trans(resultat_dyn): pass
+class harm_gene(resultat_dyn): pass
+class mode_acou(resultat_dyn): pass
+class mode_flamb(resultat_dyn): pass
+class mode_gene(resultat_dyn): pass
+
+class comb_fourier(resultat_sdaster): pass
+class fourier_elas(resultat_sdaster): pass
+class fourier_ther(resultat_sdaster): pass
+class mult_elas(resultat_sdaster): pass
+class theta_geom(resultat_sdaster): pass
+
+# resultat_sdaster/evol_sdaster :
+class evol_sdaster(resultat_sdaster): pass
+class evol_char(evol_sdaster): pass
+class evol_elas(evol_sdaster): pass
+class evol_noli(evol_sdaster): pass
+class evol_ther(evol_sdaster): pass
+class evol_varc(evol_sdaster): pass
+
+# resultat_sdaster/mode_meca :
+class mode_meca_c(mode_meca): pass
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class sd_feti_sdaster(ASSD):
+    cata_sdj = "SD.sd_feti.sd_feti"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class spectre_sdaster(ASSD):
+    cata_sdj = "SD.sd_spectre.sd_spectre"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class surface_sdaster(ASSD):
+    cata_sdj = "SD.sd_surface.sd_surface"
+#& MODIF ENTETE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class table_sdaster(ASSD):
+    cata_sdj = "SD.sd_table.sd_table"
+
+    def __getitem__(self, key):
+        """Retourne la valeur d'une cellule de la table.
+        Exemple : TAB['INST', 1] retourne la 1ère valeur de la colonne 'INST'."""
+        from Utilitai.Utmess import UTMESS
+        if not self.accessible():
+            raise Accas.AsException("Erreur dans table.__getitem__ en PAR_LOT='OUI'")
+        assert len(key) == 2
+        para, numlign = key
+        tabnom = self.sdj.TBLP.get()
+        try:
+            i = tabnom.index('%-24s' % para)
+            resu = aster.getvectjev(tabnom[i + 2])
+            exist = aster.getvectjev(tabnom[i + 3])
+            assert resu is not None
+            assert exist is not None
+            assert exist[numlign - 1] != 0
+            res = resu[numlign - 1]
+        except (IndexError, AssertionError):
+            # pour __getitem__, il est plus logique de retourner KeyError.
+            raise KeyError
+        return res
+
+    def TITRE(self):
+        """Retourne le titre d'une table Aster
+        (Utile pour récupérer le titre et uniquement le titre d'une table dont
+        on souhaite manipuler la dérivée).
+        """
+        if not self.accessible():
+            raise Accas.AsException("Erreur dans table.TITRE en PAR_LOT='OUI'")
+        #titj = aster.getvectjev('%-19s.TITR' % self.get_name())
+        titj = self.sdj.TITR.get()
+        if titj != None:
+            titr = '\n'.join(titj)
+        else:
+            titr = ''
+        return titr
+
+    def EXTR_TABLE(self, para=None) :
+        """Produit un objet Table à partir du contenu d'une table Aster.
+        On peut limiter aux paramètres listés dans 'para'.
+        """
+        def Nonefy(l1,l2) :
+            if l2 == 0:
+                return None
+            else:
+                return l1
+        if not self.accessible():
+            raise Accas.AsException("Erreur dans table.EXTR_TABLE en PAR_LOT='OUI'")
+        from Utilitai.Table import Table
+        # titre
+        titr = self.TITRE()
+        # récupération des paramètres
+        #v_tblp = aster.getvectjev('%-19s.TBLP' % self.get_name())
+        v_tblp = self.sdj.TBLP.get()
+        if v_tblp == None:
+            # retourne une table vide
+            return Table(titr=titr, nom=self.nom)
+        tabnom=list(v_tblp)
+        nparam=len(tabnom)/4
+        lparam=[tabnom[4*i:4*i+4] for i in range(nparam)]
+        # restriction aux paramètres demandés
+        if para is not None:
+            if type(para) not in (list, tuple):
+                para = [para, ]
+            para = [p.strip() for p in para]
+            restr = []
+            for ip in lparam:
+                if ip[0].strip() in para:
+                    restr.append(ip)
+            lparam = restr
+        dval={}
+        # liste des paramètres et des types
+        lpar=[]
+        ltyp=[]
+        for i in lparam :
+            value=list(aster.getvectjev(i[2]))
+            exist=aster.getvectjev(i[3])
+            dval[i[0].strip()] = map(Nonefy, value, exist)
+            lpar.append(i[0].strip())
+            ltyp.append(i[1].strip())
+        n=len(dval[lpar[0]])
+        # contenu : liste de dict
+        lisdic=[]
+        for i in range(n) :
+            d={}
+            for p in lpar:
+               d[p]=dval[p][i]
+            lisdic.append(d)
+        return Table(lisdic, lpar, ltyp, titr, self.nom)
+
+class table_fonction(table_sdaster):
+    """Table contenant en plus une colonne FONCTION et/ou FONCTION_C dont les
+    valeurs des cellules sont des noms de fonction_sdaster ou fonction_c."""
+
+class table_jeveux(table_sdaster):
+    """Classe permettant d'accéder à une table jeveux qui n'a pas d'ASSD associée,
+    c'est le cas des concepts résultats (table, evol_xxxx) dérivés."""
+    def __init__(self, nom_jeveux):
+        table_sdaster.__init__(self)
+        self.set_name(nom_jeveux)
+
+class table_fonction(table_sdaster):
+    """Table contenant une colonne FONCTION et/ou FONCTION_C dont les
+    valeurs des cellules sont des noms de fonction_sdaster ou
+    fonction_c."""
+    cata_sdj = "SD.sd_table_fonction.sd_table_fonction"
+
+class table_container(table_sdaster):
+    """Table contenant les colonnes NOM_OBJET, TYPE_OBJET et NOM_SD."""
+    cata_sdj = "SD.sd_table_container.sd_table_container"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class tran_gene(ASSD):
+   cata_sdj = "SD.sd_tran_gene.sd_tran_gene"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class type_flui_stru(ASSD):
+   cata_sdj = "SD.sd_type_flui_stru.sd_type_flui_stru"
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class vect_asse_gene(ASSD):
+   cata_sdj = "SD.sd_cham_gene.sd_cham_gene"
+
+   def EXTR_VECT_GENE_R(self) :
+      """ retourne les valeurs du vecteur generalisee
+      dans un format numpy
+         Attributs retourne
+            - self.valeurs : numpy.array contenant les valeurs """
+      import numpy
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_r.EXTR_VECT_GENE en PAR_LOT='OUI'")
+      #ncham=self.get_name()
+      #ncham=ncham+(8-len(ncham))*' '
+      #valeur=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.VALE'))
+      valeur = numpy.array(self.sdj.VALE.get())
+      return valeur
+
+   def RECU_VECT_GENE_R(self, vecteur) :
+      """ envoie les valeurs d'un tableau numpy dans un vecteur generalise
+      reel definie dans jeveux
+         Attributs ne retourne rien """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_r.RECU_VECT_GENE en PAR_LOT='OUI'")
+      import numpy
+      numpy.asarray(vecteur)
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      #desc=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+      desc = numpy.array(self.sdj.DESC.get())
+      # On teste si le DESC du vecteur existe
+      if (desc==None):
+         raise Accas.AsException("L'objet vecteur n'existe pas ou \
+         est mal cree par Code Aster")
+      # On teste si la taille du vecteur jeveux et python est identique
+      if desc[1] != numpy.shape(vecteur)[0] :
+         raise Accas.AsException("La taille du vecteur python est incorrecte")
+      aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALE',
+                       len(vecteur),
+                       tuple(range(1, len(vecteur)+1)),
+                       tuple(vecteur),
+                       tuple(vecteur),
+                       1)
+      return
+
+   def EXTR_VECT_GENE_C(self) :
+      """ retourne les valeurs du vecteur generalisee
+      dans un format numpy
+         Attributs retourne
+            - self.valeurs : numpy.array contenant les valeurs """
+      import numpy
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_c.EXTR_VECT_GENE en PAR_LOT='OUI'")
+
+      #ncham=self.get_name()
+      #ncham=ncham+(8-len(ncham))*' '
+      #valeur=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.VALE'), complex)
+      valeur=numpy.array(self.sdj.VALE.get(), complex)
+
+      return valeur
+
+   def RECU_VECT_GENE_C(self,vecteur) :
+      """ envoie les valeurs d'un tableau numpy dans un vecteur generalise
+      complexe definie dans jeveux
+         Attributs ne retourne rien """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_c.RECU_VECT_GENE en PAR_LOT='OUI'")
+      import numpy
+      numpy.asarray(vecteur)
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      desc=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+      # On teste si le DESC de la matrice existe
+      if (desc==None):
+         raise Accas.AsException("L'objet vecteur n'existe pas ou \
+         est mal cree par Code Aster")
+      # On teste si la taille de la matrice jeveux et python est identique
+      if desc[1]<>numpy.shape(vecteur)[0] :
+         raise Accas.AsException("La taille du vecteur python est incorrecte")
+      tmpr=vecteur.real
+      tmpc=vecteur.imag
+      aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALE',
+                       len(tmpr),
+                       tuple(range(1, len(tmpr)+1)),
+                       tuple(tmpr),
+                       tuple(tmpc),
+                       1)
+      return
+
+#& MODIF ENTETE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+class vect_elem(ASSD):
+   cata_sdj = "SD.sd_vect_elem.sd_vect_elem"
+
+class vect_elem_depl_r(vect_elem):
+   pass
+
+class vect_elem_pres_r(vect_elem):
+   pass
+
+class vect_elem_pres_c(vect_elem):
+   pass
+
+class vect_elem_temp_r(vect_elem):
+   pass
+#& MODIF COMMUN  DATE 26/07/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+def C_AFFICHAGE() : return FACT(statut='f',max=1,
+        INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+        INFO_TEMPS  = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),  
+        UNITE       = SIMP(statut='f',typ='I',val_min=1),
+       );
+#& MODIF COMMUN  DATE 21/02/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_ARCHIVAGE() : return FACT(statut='d',max=1,
+    regles         = (EXCLUS('PAS_ARCH','LIST_INST','INST'),),
+    LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+    INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+    PAS_ARCH       = SIMP(statut='f',typ='I' ),
+    CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+    DETR_NUME_SUIV = SIMP(statut='f',typ='TXM',into=("OUI",)),
+    CHAM_EXCLU     = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+);
+#& MODIF COMMUN  DATE 26/09/2011   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+def C_COMP_ELAS( COMMAND ) :  #COMMUN#
+    
+    assert COMMAND in ('MACR_ASCOUF_CALC','MACR_ASPIC_CALC','CALC_G','POST_GP',
+                       'CALC_POINT_MAT','SIMU_POINT_MAT', 'DYNA_NON_LINE','STAT_NON_LINE','CALCUL',)
+    
+    kwargs = {}
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            RELATION
+# ----------------------------------------------------------------------------------------------------------------------------------
+    # commandes pour lesquelles on ne peut pas choisir une relation de type 1d
+    if COMMAND in ('CALC_G','POST_GP','CALC_POINT_MAT','SIMU_POINT_MAT' ):
+        kwargs['RELATION'] = SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER"))
+
+    # commandes pour lesquelles tout type de relation est possible
+    elif COMMAND in ('DYNA_NON_LINE','STAT_NON_LINE','CALCUL',):
+        kwargs['RELATION'] = SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                       "ELAS_VMIS_PUIS","ELAS_HYPER","ELAS_POUTRE_GR","CABLE"))
+
+     # cas particulier de MACR_ASCOUF/ASPIC_CALC : on limite volontairement le choix pour ne pas perturber l'utilisateur
+     # mais theoriquement, toutes les lois disponibles pour CALC_G le sont aussi pour MACR_ASCOUF/ASPIC_CALC
+    elif COMMAND in ('MACR_ASCOUF_CALC','MACR_ASPIC_CALC'):
+        kwargs['RELATION'] = SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC"))
+
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            DEFORMATION
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    # commandes pour lesquelles on ne peut pas choisir les grandes deformations
+    if COMMAND in ('CALC_POINT_MAT','MACR_ASCOUF_CALC','MACR_ASPIC_CALC'):
+        kwargs['DEFORMATION'] =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT",))
+
+    # commandes pour lesquelles on peut choisir tout type de deformation
+    elif COMMAND in ('DYNA_NON_LINE','STAT_NON_LINE','CALCUL','POST_GP','CALC_G','SIMU_POINT_MAT', ):
+        kwargs['DEFORMATION'] =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",))
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            INTEGRATION (RESI_INTE_RELA, ITER_INTE_MAXI, ALGO_INTE)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    kwargs['RESI_INTE_RELA']    =SIMP(statut='f',typ='R',defaut= 1.0E-6)
+    kwargs['ITER_INTE_MAXI']    =SIMP(statut='f',typ='I',defaut= 10 )
+    kwargs['ALGO_INTE']         =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE",))
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            LOCALISATION
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    # commandes pour lesquelles la localisation n'a pas de sens
+    # 'CALC_POINT_MAT','SIMU_POINT_MAT' 
+
+    # commandes pour lesquelles la localisation est automatique
+    # 'MACR_ASCOUF_CALC','MACR_ASPIC_CALC'
+
+    # commandes pour lesquelles on peut choisir la localisation
+    if COMMAND in ('DYNA_NON_LINE','STAT_NON_LINE','CALC_G','POST_GP','CALCUL'):
+        kwargs['regles'] = (PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),)
+        kwargs['TOUT'] =SIMP(statut='f',typ='TXM',into=("OUI",) )
+        kwargs['GROUP_MA']  =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**')
+        kwargs['MAILLE']    =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**')
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#                            DIVERS
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+
+
+    mcfact = FACT(statut='f',max='**', **kwargs)
+
+    return mcfact
+#& MODIF COMMUN  DATE 19/09/2011   AUTEUR GRANET S.GRANET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
+           RELATION  =SIMP( statut='o',typ='TXM',defaut="ELAS",into=C_RELATION()),
+           b_monox     = BLOC(condition = "RELATION == 'MONOCRISTAL' ",
+                                 fr="SD issue de DEFI_COMPOR",
+                   COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),),
+           b_polyx     = BLOC(condition = "RELATION == 'POLYCRISTAL' ",
+                                 fr="SD issue de DEFI_COMPOR",
+                   COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),),
+           b_zmat      = BLOC(condition = "RELATION == 'ZMAT' ",
+                                 fr="Comportement de la bibliotheque Zmat",
+                   NB_VARI =SIMP(statut='o',typ='I',max=1),
+                   UNITE =SIMP(statut='o',typ='I',max=1),),
+           b_umat      = BLOC(condition = "RELATION == 'UMAT' ",
+                                 fr="Comportement utilisateur de type UMAT",
+                   NB_VARI =SIMP(statut='o',typ='I',max=1,fr="Nombre de variables internes"),
+                   LIBRAIRIE = SIMP(statut='o', typ='TXM',validators=LongStr(1,128),
+                        fr="Chemin vers la bibliothèque dynamique définissant le comportement UMAT"),
+                   NOM_ROUTINE = SIMP(statut='o', typ='TXM',
+                        fr="Nom de la routine UMAT dans la bibliothèque"),
+                   ),
+
+# KITs
+           b_kit_ddi = BLOC(condition = "RELATION == 'KIT_DDI' ",
+                            fr="relations de couplage fluage-plasticite",
+               RELATION_KIT    =SIMP(statut='o',typ='TXM',min=2,max=2,validators=NoRepeat(),
+                                 into=(
+                                       "VMIS_CINE_LINE",
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_PUIS",
+                                       "GLRC_DM",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_INDT",
+                                       "GRANGER_FP_V",
+                                       "BETON_UMLV_FP",
+                                       "ROUSS_PR",
+                                       "BETON_DOUBLE_DP",
+                                       "ENDO_ISOT_BETON",
+                                       "MAZARS"
+                                       ),),
+                   ),
+           b_kit_thm = BLOC(condition = "RELATION in ['KIT_HHM','KIT_HH','KIT_H','KIT_HM','KIT_THHM', \
+                                                      'KIT_THH','KIT_THM','KIT_THV']",
+                            fr="lois de comportements thermo-hydro-mecaniques",
+               RELATION_KIT    =SIMP(statut='o',typ='TXM',max=9,validators=NoRepeat(),
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "HUJEUX",
+                                       "CAM_CLAY",
+                                       "BARCELONE",
+                                       "LAIGLE",
+                                       "LETK",
+                                       "DRUCK_PRAGER",
+                                       "DRUCK_PRAG_N_A",
+                                       "VISC_DRUC_PRAG",
+                                       "ELAS_GONF",
+                                       "HOEK_BROWN_EFF",
+                                       "HOEK_BROWN_TOT",
+                                       "MAZARS",
+                                       "ENDO_ISOT_BETON",
+                                       "JOINT_BANDIS",
+                                       "CZM_LIN_REG",
+                                       "CZM_EXP_REG",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",
+                                       "LIQU_AD_GAZ_VAPE",
+                                       "LIQU_AD_GAZ",
+                                       "LIQU_VAPE",
+                                       "LIQU_GAZ",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR_VGM",
+                                       "HYDR_VGC",
+                                       "HYDR",
+                                       "HYDR_ENDO",
+                                       ),),
+                                       ),
+           b_kit_meta = BLOC(condition = "RELATION in ('META_LEMA_ANI','META_P_CL_PT_RE','META_P_CL_PT','META_P_CL_RE','META_P_CL',\
+       'META_P_IL_PT_RE','META_P_IL_PT','META_P_IL_RE','META_P_IL','META_P_INL_PT_RE','META_P_INL_PT','META_P_INL_RE','META_P_INL',\
+           'META_V_CL_PT_RE','META_V_CL_PT','META_V_CL_RE','META_V_CL','META_V_IL_PT_RE','META_V_IL_PT','META_V_IL_RE','META_V_IL',\
+           'META_V_INL_PT_RE','META_V_INL_PT','META_V_INL_RE','META_V_INL')",
+                            fr="nombre de phases metallurgiques",
+               RELATION_KIT    =SIMP(statut='o',typ='TXM',max=1,validators=NoRepeat(),
+                                 into=("ACIER","ZIRC"),),
+                                 ),
+
+           DEFORMATION       =SIMP(statut='f',typ='TXM',defaut="PETIT",
+                                   into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GREEN_REAC","GDEF_LOG")),
+           ALGO_C_PLAN       =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+           RESI_DEBO_MAXI    =SIMP(statut='f',typ='R',fr="Critère d'arret absolu pour assurer la condition de contraintes planes",),
+
+           b_resideborst     =BLOC(condition = " RESI_DEBO_MAXI == None ",
+                                      fr="Critère d'arret relatif pour assurer la condition de contraintes planes",
+               RESI_DEBO_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+                                  ),
+
+           ALGO_1D           =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+           ITER_MAXI_DEBORST =SIMP(statut='f',typ='I',defaut= 1),
+           RESI_INTE_RELA    =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI    =SIMP(statut='f',typ='I',defaut= 20 ),
+
+           b_redec_local      = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",
+                                     fr="Nombre de redécoupages internes du pas de temps",
+               ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+                                     ),
+
+           ALGO_INTE         =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE", "SECANTE", "DEKKER", "NEWTON_1D","BRENT", 
+                                                              "NEWTON", "NEWTON_RELI", "NEWTON_PERT", "RUNGE_KUTTA",
+                                                              "SPECIFIQUE", "SANS_OBJET")),
+
+           TYPE_MATR_TANG    =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION","TANGENTE_SECANTE")),
+
+           b_perturb         =BLOC(condition = " (TYPE_MATR_TANG != None) and (TYPE_MATR_TANG != 'TANGENTE_SECANTE') ",
+                                   fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation",
+                VALE_PERT_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-5),
+                                  ),
+
+           b_tangsec        = BLOC(condition = " TYPE_MATR_TANG == 'TANGENTE_SECANTE' ",
+                                   fr="Modification evolutive de la matrice tangente/secante",
+                 SEUIL        =SIMP(statut='f',typ='R',defaut= 3. ),
+                 AMPLITUDE    =SIMP(statut='f',typ='R',defaut= 1.5 ),
+                 TAUX_RETOUR  =SIMP(statut='f',typ='R',defaut= 0.05 ),
+                                  ),
+
+           PARM_THETA      =SIMP(statut='f',typ='R',val_min=0.,val_max=1., defaut= 1.),
+           PARM_ALPHA      =SIMP(statut='f',typ='R',defaut= 1. ),
+
+           regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+         ) ;
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_CONVERGENCE() : return FACT(statut='d',
+           regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
+           b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
+             regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE','FORC_REFE',
+                                  'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE','DEPL_REFE','LAGR_REFE'),),
+             FORC_REFE       =SIMP(statut='f',typ='R',min=2,max=2,
+                fr="Force et Moment de référence pour les éléments de structure."),
+             SIGM_REFE       =SIMP(statut='f',typ='R'),
+             DEPL_REFE       =SIMP(statut='f',typ='R'),
+             EPSI_REFE       =SIMP(statut='f',typ='R'),
+             FLUX_THER_REFE  =SIMP(statut='f',typ='R'),
+             FLUX_HYD1_REFE  =SIMP(statut='f',typ='R'),
+             FLUX_HYD2_REFE  =SIMP(statut='f',typ='R'),
+             VARI_REFE       =SIMP(statut='f',typ='R'),
+             LAGR_REFE       =SIMP(statut='f',typ='R'),
+           ),
+           RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           RESI_COMP_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),
+           TYPE            =SIMP(statut='f',typ='TXM',defaut="PIC",into=("PIC","PLATEAU")),
+           b_plateau    =BLOC(condition = "TYPE == 'PLATEAU' ",
+
+             PLATEAU_ITER    =SIMP(statut='f',typ='I',defaut=3, val_min =2),
+             PLATEAU_RELA    =SIMP(statut='f',typ='R',defaut=1E-3),
+           ),
+
+
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         );
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_INCREMENT() : return FACT(statut='o',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=(listr8_sdaster,list_inst)),
+           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'),
+           ERRE_TEMPS      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                                 fr="Adaptation temporelle pour les modélisations HM instationnaires",
+                                 ang="Time adaptation for unstationary HM models"),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+         );
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_NEWTON() : return FACT(statut='d',
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1,val_min=0),
+           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',val_min=0.0),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+           REAC_ITER_ELAS  =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         );
+#& MODIF COMMUN  DATE 11/10/2011   AUTEUR MEUNIER S.MEUNIER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+# ce fichier contient la liste des "into" possibles pour le mot cle NOM_CHAM
+# c'est a dire les noms de champs des SD RESULTAT (DATA de la routine RSCRSD)
+
+def C_NOM_CHAM_INTO( *l_typ_cham ): #COMMUN#
+    """Cette fonction retourne la liste des "into" possibles pour le mot-clé NOM_CHAM.
+    C'est à dire les noms de champs des SD RESULTAT (DATA de la routine RSCRSD).
+    l_typ_cham : rien ou un ou plusieurs parmi 'ELGA', 'ELNO', 'NOEU', 'ELEM'.
+    """
+    # Liste de tout les champs
+    l_tout_cham = [
+                        "ACCE",
+                        "ACCE_ABSOLU",
+                        "ALPH0_ELGA_EPSP",
+                        "ALPHP_ELGA_ALPH0",
+                        "COMPORTEMENT",
+                        "COMPORTHER",
+                        "DEDE_ELNO",
+                        "DEDE_NOEU",
+                        "DEGE_ELNO",
+                        "DEGE_ELGA",
+                        "DEGE_NOEU",
+                        "DEPL",
+                        "DEPL_ABSOLU",
+                        "DEPL_VIBR",
+                        "DERA_ELGA",
+                        "DERA_ELNO",
+                        "DERA_NOEU",
+                        "DESI_ELNO",
+                        "DESI_NOEU",
+                        "DETE_ELNO",
+                        "DETE_NOEU",
+                        "DISS_ELGA",
+                        "DISS_ELNO",
+                        "DISS_NOEU",
+                        "DIVU",
+                        "DURT_ELNO",
+                        "DURT_NOEU",
+                        "ECIN_ELEM",
+                        "EFCA_ELNO",
+                        "EFCA_NOEU",
+                        "EFGE_ELGA",
+                        "EFGE_ELNO",
+                        "EFGE_NOEU",
+                        "ENDO_ELGA",
+                        "ENDO_ELNO",
+                        "ENDO_NOEU",
+                        "ENEL_ELGA",
+                        "ENEL_ELNO",
+                        "ENEL_NOEU",
+                        "EPEQ_ELGA",
+                        "EPEQ_ELNO",
+                        "EPEQ_NOEU",
+                        "EPFD_ELGA",
+                        "EPFD_ELNO",
+                        "EPFD_NOEU",
+                        "EPFP_ELGA",
+                        "EPFP_ELNO",
+                        "EPFP_NOEU",
+                        "EPME_ELGA",
+                        "EPME_ELNO",
+                        "EPMG_ELGA",
+                        "EPMG_ELNO",
+                        "EPMG_NOEU",
+                        "EPMQ_ELGA",
+                        "EPMQ_ELNO",
+                        "EPMQ_NOEU",
+                        "EPOT_ELEM",
+                        "EPSA_ELNO",
+                        "EPSA_NOEU",
+                        "EPSG_ELGA",
+                        "EPSG_ELNO",
+                        "EPSG_NOEU",
+                        "EPSI_ELGA",
+                        "EPSI_ELNO",
+                        "EPSI_NOEU",
+                        "EPSP_ELGA",
+                        "EPSP_ELNO",
+                        "EPSP_NOEU",
+                        "EPTQ_ELNO",
+                        "EPTU_ELNO",
+                        "EPVC_ELGA",
+                        "EPVC_ELNO",
+                        "EPVC_NOEU",
+                        "ERME_ELEM",
+                        "ERME_ELNO",
+                        "ERME_NOEU",
+                        "ERTH_ELEM",
+                        "ERTH_ELNO",
+                        "ERTH_NOEU",
+                        "ERZ1_ELEM",
+                        "ERZ2_ELEM",
+                        "ETOT_ELEM",
+                        "ETOT_ELGA",
+                        "ETOT_ELNO",
+                        "FERRAILLAGE",
+                        "FLHN_ELGA",
+                        "FLUX_ELGA",
+                        "FLUX_ELNO",
+                        "FLUX_NOEU",
+                        "FORC_NODA",
+                        "FSUR_2D",
+                        "FSUR_3D",
+                        "FVOL_2D",
+                        "FVOL_3D",
+                        "GRAD_NOEU_THETA",
+                        "HYDR_ELNO",
+                        "HYDR_NOEU",
+                        "INDL_ELGA",
+                        "INTE_ELNO",
+                        "INTE_NOEU",
+                        "IRRA",
+                        "LANL_ELGA",
+                        "META_ELGA_TEMP",
+                        "META_ELNO",
+                        "META_NOEU",
+                        "MODE_FLAMB",
+                        "PDIL_ELGA",
+                        "PMPB_ELGA",
+                        "PMPB_ELNO",
+                        "PMPB_NOEU",
+                        "PRAC_ELNO",
+                        "PRAC_NOEU",
+                        "PRES",
+                        "PRME_ELNO",
+                        "PTOT",
+                        "QIRE_ELEM",
+                        "QIRE_ELNO",
+                        "QIRE_NOEU",
+                        "QIZ1_ELEM",
+                        "QIZ2_ELEM",
+                        "REAC_NODA",
+                        "SICA_ELNO",
+                        "SICA_NOEU",
+                        "SIEF_ELGA",
+                        "SIEF_ELNO",
+                        "SIEF_NOEU",
+                        "SIEF_SENO_SEGA",
+                        "SIEQ_ELGA",
+                        "SIEQ_ELNO",
+                        "SIEQ_NOEU",
+                        "SIGM_ELGA",
+                        "SIGM_ELNO",
+                        "SIGM_NOEU",
+                        "SING_ELEM",
+                        "SING_ELNO",
+                        "SIPM_ELNO",
+                        "SIPO_ELNO",
+                        "SIPO_NOEU",
+                        "SIRO_ELEM",
+                        "SITQ_ELNO",
+                        "SITU_ELNO",
+                        "SIZ1_NOEU",
+                        "SIZ2_NOEU",
+                        "SOUR_ELGA",
+                        "SPMX_ELGA",
+                        "STRX_ELGA",
+                        "TEMP",
+                        "THETA",
+                        "VACO_ELNO",
+                        "VAEX_ELGA",
+                        "VAEX_ELNO",
+                        "VAEX_NOEU",
+                        "VALE_CONT",
+                        "VARC_ELGA",
+                        "VARI_ELGA",
+                        "VARI_ELNO",
+                        "VARI_NOEU",
+                        "VATU_ELNO",
+                        "VITE",
+                        "VITE_ABSOLU",
+                        "VITE_VENT",
+                        ]
+    for typ in ('ELGA', 'ELNO', 'NOEU'):
+        for i in range(1, 11):
+            l_tout_cham.append('UT%02d_%s' % (i, typ))
+
+    # Si aucun argument n'est passe, on utilise tous les types de champs possibles
+    if len(l_typ_cham) == 0:
+        return tuple(l_tout_cham)
+
+    l_ncham = []
+    for typ in l_typ_cham :
+        for cham in l_tout_cham :
+            if typ in cham.split('_'):
+                l_ncham.append(cham)
+    return tuple(l_ncham)
+#& MODIF COMMUN  DATE 19/09/2011   AUTEUR PELLET J.PELLET 
+# RESPONSABLE DESROCHES X.DESROCHES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# ce fichier contient la liste des  noms des grandeurs de CODE_ASTER
+def C_NOM_GRANDEUR() : return  ( #COMMUN#
+"ABSC_R",
+"ADRSJEVE",
+"ADRSJEVN",
+"CAARPO",
+"CACABL",
+"CACOQU",
+"CADISA",
+"CADISK",
+"CADISM",
+"CAFI_R",
+"CAGEBA",
+"CAGEPO",
+"CAGNBA",
+"CAGNPO",
+"CAMASS",
+"CAORIE",
+"CAPOUF",
+"CARCRI",
+"CASECT",
+"CHLI_R",
+"CODE_I",
+"COEH_F",
+"COEH_R",
+"COMPOR",
+"CORR_R",
+"CRRU_R",
+"DBEL_R",
+"DCEL_I",
+"DDLI_C",
+"DDLI_F",
+"DDLI_R",
+"DDLM_C",
+"DDLM_R",
+"DEPL_C",
+"DEPL_F",
+"DEPL_R",
+"DISS_R",
+"DOMA_R",
+"DURT_R",
+"ENDO_R",
+"ENER_R",
+"EPSI_C",
+"EPSI_F",
+"EPSI_R",
+"ERRE_R",
+"FACY_R",
+"FELECR",
+"FER2_R",
+"FISS_R",
+"FLAPLA",
+"FLUN_F",
+"FLUN_R",
+"FLUX_F",
+"FLUX_R",
+"FORC_C",
+"FORC_F",
+"FORC_R",
+"FREQ_R",
+"FTHM_F",
+"FTHM_R",
+"G",
+"GEOM_R",
+"G_DEPL_R",
+"HARMON",
+"HYDR_R",
+"IMPE_C",
+"IMPE_F",
+"IMPE_R",
+"INDL_R",
+"INFC_R",
+"INST_R",
+"INTE_R",
+"INTLOC",
+"IRRA_R",
+"ITECREL",
+"ITEDEC",
+"J",
+"LISTMA",
+"MACOMP",
+"MASS_R",
+"MATE_F",
+"NBSP_I",
+"NEUT_F",
+"NEUT_I",
+"NEUT_K16",
+"NEUT_K24",
+"NEUT_K8",
+"NEUT_R",
+"NUMC_I",
+"NUMMOD",
+"ONDE_F",
+"ONDE_R",
+"PESA_R",
+"PDIL_R",
+"PILO_K",
+"PILO_R",
+"POSI",
+"PREC",
+"PRES_C",
+"PRES_F",
+"PRES_R",
+"RAYO_F",
+"RAYO_R",
+"RCCM_K",
+"RCCM_R",
+"RESCREL",
+"RICE_TRA",
+"ROTA_R",
+"SECTION",
+"SIEF_C",
+"SIEF_R",
+"SIZZ_R",
+"SOUR_F",
+"SOUR_R",
+"SPMX_R",
+"STRX_R",
+"STAOUDYN",
+"TEMP_C",
+"TEMP_F",
+"TEMP_R",
+"THETA",
+"VALO_R",
+"VANL_R",
+"VAR2_R",
+"VARI_R",
+"VENTCX_F",
+"VNOR_C",
+"VNOR_F",
+"VOISIN",
+"WEIBULL",
+"XCONTAC",
+                                 )
+#& MODIF COMMUN  DATE 20/06/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+def C_OBSERVATION() : return FACT(statut='f',max=99,
+
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+                                   into=("VALE_CONT","FORC_NODA",
+                                         "DEPL","VITE","ACCE","TEMP",
+                                         "SIEF_ELGA","VARI_ELGA",                                        
+                                         "DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+          
+           EVAL_CHAM       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("MIN","MAX","MOY","VALE",),),
+                                         
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max=20),
+           EVAL_CMP        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("VALE","FORMULE",),),
+                                   
+           b_formule       =BLOC(condition="(EVAL_CMP=='FORMULE')",
+                                   FORMULE = SIMP(statut='o',typ=formule,max=1),
+                                ),
+                                                 
+           b_cham_no       =BLOC(condition="(NOM_CHAM=='DEPL') or \
+                                            (NOM_CHAM=='VITE') or \
+                                            (NOM_CHAM=='ACCE') or \
+                                            (NOM_CHAM=='TEMP') or \
+                                            (NOM_CHAM=='FORC_NODA') or \
+                                            (NOM_CHAM=='VALE_CONT') or \
+                                            (NOM_CHAM=='DEPL_ABSOLU') or \
+                                            (NOM_CHAM=='VITE_ABSOLU') or \
+                                            (NOM_CHAM=='ACCE_ABSOLU')",
+                                 regles   =(UN_PARMI('NOEUD','GROUP_NO','GROUP_MA','MAILLE','TOUT')),
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),
+                                 NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                 GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                 MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),          
+                                ),          
+
+                                          
+           b_cham_elga     =BLOC(condition="(NOM_CHAM=='SIEF_ELGA') or \
+                                            (NOM_CHAM=='VARI_ELGA')",
+                                 regles          =(UN_PARMI('GROUP_MA','MAILLE','TOUT')), 
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),          
+                                 MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), 
+                                 EVAL_ELGA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                                        into=("MIN","MAX","VALE",),), 
+                                 b_elga_vale     =BLOC(condition="(EVAL_ELGA=='VALE')",                     
+                                   POINT           =SIMP(statut='o',typ='I'  ,validators=NoRepeat(),max='**'), 
+                                   SOUS_POINT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),  
+                                 ),  
+                                ),
+             
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           PAS_OBSE        =SIMP(statut='f',typ='I'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+       
+       
+       );
+#& MODIF COMMUN  DATE 29/03/2007   AUTEUR GRANET S.GRANET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# ce fichier contient la liste des PARA possibles pour les fonctions et les nappes
+def C_PARA_FONCTION() : return  ( #COMMUN#
+                   "DX","DY","DZ","DRX","DRY","DRZ","TEMP","TSEC",
+                   "INST","X","Y","Z","EPSI","META","FREQ","PULS","DSP",
+                   "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+                   "PGAZ","PCAP","PLIQ","PVAP","PAD","VITE","ENDO",
+                   "NORM","EPAIS","NEUT1","NEUT2",)
+#& MODIF COMMUN  DATE 01/02/2011   AUTEUR MASSIN P.MASSIN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_PILOTAGE() : return FACT(statut='f',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","DEFORMATION",
+                                                    "ANA_LIM","SAUT_IMPO","SAUT_LONG_ARC") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           EVOL_PARA       =SIMP(statut='f',typ='TXM',defaut="SANS", into=("SANS","CROISSANT","DECROISSANT") ),
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
+           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
+           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem ,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           DIRE_PILO       =SIMP(statut='f',typ='TXM',max='**'),
+         );
+
+#& MODIF COMMUN  DATE 06/12/2010   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+def C_RECH_LINEAIRE() : return FACT(statut='f',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE","PILOTAGE") ),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3,val_max=999),
+           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
+           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
+           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
+           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
+         );
+#& MODIF COMMUN  DATE 20/04/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+def C_RELATION() : return (             "ELAS",            #COMMUN#
+
+                                        "ARME",
+                                        "ASSE_CORN",
+                                        "BARCELONE",
+                                        "BETON_DOUBLE_DP",
+                                        "BETON_RAG",
+                                        "BETON_REGLE_PR",
+                                        "BETON_UMLV_FP",
+                                        "CAM_CLAY",
+                                        "CJS",
+                                        "CORR_ACIER",
+                                        "CZM_EXP",
+                                        "CZM_EXP_REG",
+                                        "CZM_FAT_MIX",
+                                        "CZM_LIN_REG",
+                                        "CZM_OUV_MIX",
+                                        "CZM_TAC_MIX",
+                                        "CZM_TRA_MIX",
+                                        "DIS_BILI_ELAS",
+                                        "DIS_CHOC",
+                                        "DIS_ECRO_CINE",
+                                        "DIS_GOUJ2E_ELAS",
+                                        "DIS_GOUJ2E_PLAS",
+                                        "DIS_GRICRA",
+                                        "DIS_VISC",
+                                        "DRUCK_PRAGER",
+                                        "DRUCK_PRAG_N_A",
+                                        "ELAS_GONF",
+                                        "ELAS_HYPER",
+                                        "ENDO_CARRE",
+                                        "ENDO_FRAGILE",
+                                        "ENDO_HETEROGENE",
+                                        "ENDO_ISOT_BETON",
+                                        "ENDO_ORTH_BETON",
+                                        "ENDO_SCALAIRE",
+                                        "GATT_MONERIE",
+                                        "GLRC_DAMAGE",
+                                        "GLRC_DM",
+                                        "GRANGER_FP",
+                                        "GRANGER_FP_INDT",
+                                        "GRANGER_FP_V",
+                                        "GRAN_IRRA_LOG",
+                                        "GRILLE_CINE_LINE",
+                                        "GRILLE_ISOT_LINE",
+                                        "GRILLE_PINTO_MEN",
+                                        "HOEK_BROWN",
+                                        "HOEK_BROWN_EFF",
+                                        "HOEK_BROWN_TOT",
+                                        "HUJEUX",
+                                        "IRRAD3M",
+                                        "JOINT_BA",
+                                        "JOINT_BANDIS",
+                                        "JOINT_MECA_RUPT",
+                                        "JOINT_MECA_FROT",
+                                        "KIT_DDI",
+                                        "KIT_HH",
+                                        "KIT_H",
+                                        "KIT_HHM",
+                                        "KIT_HM",
+                                        "KIT_THH",
+                                        "KIT_THHM",
+                                        "KIT_THM",
+                                        "KIT_THV",
+                                        "LABORD_1D",
+                                        "LAIGLE",
+                                        "LEMAITRE",
+                                        "LEMAITRE_IRRA",
+                                        "LEMA_SEUIL",
+                                        "LETK",
+                                        "LMARC_IRRA",
+                                        "MAZARS",
+                                        "META_LEMA_ANI",
+                                        "META_P_CL",
+                                        "META_P_CL_PT",
+                                        "META_P_CL_PT_RE",
+                                        "META_P_CL_RE",
+                                        "META_P_IL",
+                                        "META_P_IL_PT",
+                                        "META_P_IL_PT_RE",
+                                        "META_P_IL_RE",
+                                        "META_P_INL",
+                                        "META_P_INL_PT",
+                                        "META_P_INL_PT_RE",
+                                        "META_P_INL_RE",
+                                        "META_V_CL",
+                                        "META_V_CL_PT",
+                                        "META_V_CL_PT_RE",
+                                        "META_V_CL_RE",
+                                        "META_V_IL",
+                                        "META_V_IL_PT",
+                                        "META_V_IL_PT_RE",
+                                        "META_V_IL_RE",
+                                        "META_V_INL",
+                                        "META_V_INL_PT",
+                                        "META_V_INL_PT_RE",
+                                        "META_V_INL_RE",
+                                        "MONOCRISTAL",
+                                        "MULTIFIBRE",
+                                        "NORTON_HOFF",
+                                        "PINTO_MENEGOTTO",
+                                        "POLYCRISTAL",
+                                        "ROUSSELIER",
+                                        "ROUSS_PR",
+                                        "ROUSS_VISC",
+                                        "RUPT_FRAG",
+                                        "SANS",
+                                        "VENDOCHAB",
+                                        "VISC_ENDO_LEMA",
+                                        "VISCOCHAB",
+                                        "VISC_CIN1_CHAB",
+                                        "VISC_CIN2_CHAB",
+                                        "VISC_CIN2_MEMO",
+                                        "VISC_DRUC_PRAG",
+                                        "VISC_IRRA_LOG",
+                                        "VISC_ISOT_LINE",
+                                        "VISC_ISOT_TRAC",
+                                        "VISC_TAHERI",
+                                        "VMIS_ASYM_LINE",
+                                        "VMIS_CIN1_CHAB",
+                                        "VMIS_CIN2_CHAB",
+                                        "VMIS_CIN2_MEMO",
+                                        "VMIS_CINE_LINE",
+                                        "VMIS_ECMI_LINE",
+                                        "VMIS_ECMI_TRAC",
+                                        "VMIS_ISOT_LINE",
+                                        "VMIS_ISOT_PUIS",
+                                        "VMIS_ISOT_TRAC",
+                                        "VMIS_JOHN_COOK",
+                                        "VMIS_POU_FLEJOU",
+                                        "VMIS_POU_LINE",
+                                        "ZMAT",
+                                        "UMAT",
+                                     )
+#& MODIF COMMUN  DATE 11/10/2011   AUTEUR DESOZA T.DESOZA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOITEAU
+
+def C_SOLVEUR( COMMAND, BASE=None ) :  #COMMUN#
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# VERIFICATIONS
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   assert COMMAND in ('CALC_ELEM',
+                      'CALC_ERREUR',
+                      'CALC_FORC_AJOU',
+                      'CALC_IFS_DNL',
+                      'CALC_MATR_AJOU',
+                      'CALC_PRECONT',
+                      'CREA_ELEM_SSD',
+                      'DEFI_BASE_MODALE',
+                      'DYNA_LINE_HARM',
+                      'DYNA_LINE_TRAN',
+                      'DYNA_NON_LINE',
+                      'DYNA_TRAN_MODAL',
+                      'IMPR_STURM',
+                      'MACR_ASCOUF_CALC',
+                      'MACR_ASPIC_CALC',
+                      'MACRO_BASCULE_SCHEMA',
+                      'MACRO_MATR_AJOU',
+                      'MECA_STATIQUE',
+                      'MODE_ITER_SIMULT',
+                      'MODE_ITER_INV',
+                      'MODE_STATIQUE',
+                      'STAT_NON_LINE',
+                      'THER_LINEAIRE',
+                      'THER_NON_LINE',
+                      'THER_NON_LINE_MO',
+                      )
+
+   if BASE != None:
+      assert COMMAND == 'DYNA_LINE_HARM'
+      assert BASE in ('GENE','PHYS')
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# CLASSIFICATION EN 3 CATEGORIES :
+#  - solveurs directs uniquement
+#  - solveurs pour le linéaire
+#  - solveurs pour le non-linéaire
+#
+# GESTION DES EXCEPTIONS
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _type   = None
+
+#  Classification ('SD'/'LIN'/'NL')
+   if COMMAND in ('CALC_ELEM',
+                  'CALC_ERREUR',
+                  'CREA_ELEM_SSD',
+                  'DEFI_BASE_MODALE',
+                  'DYNA_LINE_HARM',
+                  'DYNA_TRAN_MODAL',
+                  'IMPR_STURM',
+                  'MODE_ITER_SIMULT',
+                  'MODE_ITER_INV',
+                  ):
+      _type = 'SD'
+   elif COMMAND in ('CALC_FORC_AJOU',
+                    'CALC_MATR_AJOU',
+                    'DYNA_LINE_TRAN',
+                    'MACRO_MATR_AJOU',
+                    'MECA_STATIQUE',
+                    'MODE_STATIQUE',
+                    'THER_LINEAIRE',
+                    'THER_NON_LINE_MO',
+                    ):
+      _type = 'LIN'
+   elif COMMAND in ('CALC_IFS_DNL',
+                    'CALC_PRECONT',
+                    'DYNA_NON_LINE',
+                    'MACR_ASCOUF_CALC',
+                    'MACR_ASPIC_CALC',
+                    'MACRO_BASCULE_SCHEMA',
+                    'STAT_NON_LINE',
+                    'THER_NON_LINE',
+                    ):
+      _type = 'NL'
+   else:
+      assert False
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _feti   = False
+   _dist   = False
+
+#  FETI et MATR_DISTRIBUEE ne fonctionnent que dans MECA_STATIQUE et MECA_NON_LINE
+   if COMMAND in ('CALC_IFS_DNL',
+                  'CALC_PRECONT',
+                  'DYNA_NON_LINE',
+                  'MACR_ASCOUF_CALC',
+                  'MACR_ASPIC_CALC',
+                  'MACRO_BASCULE_SCHEMA',
+                  'MECA_STATIQUE',
+                  'STAT_NON_LINE',
+                  ):
+      _feti = True
+      _dist = True
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _gene   = False
+   _ldlt   = False
+
+#  Avec des matrices généralisées, MULT_FRONT n'est pas permis, LDLT est donc par défaut
+   if BASE == 'GENE':
+      _gene = True
+      _ldlt = True
+
+#  LDLT est le solveur par défaut dans DYNA_TRAN_MODAL (systèmes linéaires petits)
+   if COMMAND == 'DYNA_TRAN_MODAL':
+      _ldlt = True
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _syme   = False
+
+#  Seuls les opérateurs non-linéaires produisent des matrices non-symétriques
+   if _type == 'NL':
+      _syme = True
+   if COMMAND == 'THER_NON_LINE_MO':
+      _syme = True
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _singu  = True
+   _rcmk   = True
+   _resol  = True
+
+#  Avec les solveurs modaux STOP_SINGULIER n'existe pas, de plus RCMK n'est pas disponible
+   if COMMAND in ('IMPR_STURM','MODE_ITER_INV','MODE_ITER_SIMULT'):
+      _singu = False
+      _rcmk  = False
+#     Dans IMPR_STURM on ne fait que factoriser
+      if COMMAND == 'IMPR_STURM':
+         _resol = False
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _singu_non = False
+
+#  Dans DEFI_BASE_MODALE, NON est le défaut de STOP_SINGULIER 
+   if COMMAND == 'DEFI_BASE_MODALE':
+      _singu_non = True
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# INITIALISATIONS
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+#  Mot-clés simples
+   _MotCleSimples={}
+
+#  Solveurs
+   _BlocMF={}
+   _BlocLD={}
+   _BlocMU={}
+   _BlocGC={}
+   _BlocPE={}
+   _BlocFE={}
+
+#  Préconditionneurs
+   _BlocGC_INC={}
+   _BlocPE_INC={}
+   _BlocXX_SP={}
+   _BlocXX_Jac_Sor={}
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# MOT-CLES SIMPLES : METHODE
+#                    SYME
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+#  METHODE
+   if (_ldlt):
+      _defaut = "LDLT"
+   else:
+      _defaut = "MULT_FRONT"
+
+   if _type == 'SD':
+      _into = ("MULT_FRONT", "LDLT", "MUMPS", )
+      if _gene:
+         _into = ("LDLT", "MUMPS", )
+   else:
+      _into = ("MULT_FRONT", "LDLT", "MUMPS", "GCPC", "PETSC", )
+      if _feti:
+         _into = ("MULT_FRONT", "LDLT", "MUMPS", "GCPC", "PETSC", "FETI", )
+
+   _MotCleSimples['METHODE'] = SIMP(statut='f', typ='TXM', defaut=_defaut, into=_into, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+#  SYME
+   if _syme:
+      _MotCleSimples['SYME'] = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# MULT_FRONT/LDLT/MUMPS/FETI (RENUM/NPREC/STOP_SINGULIER)
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+#  RENUM
+   _BlocMF['RENUM'] = SIMP(statut='f', typ='TXM', defaut="METIS", into=("MD", "MDA", "METIS", ), )
+   _BlocFE['RENUM'] = SIMP(statut='f', typ='TXM', defaut="METIS", into=("MD", "MDA", "METIS", ), )
+
+   if _rcmk:
+      _into = ("RCMK", "SANS", )
+      _defaut = "RCMK"
+   else:
+      _into = ("SANS",)
+      _defaut = "SANS"
+
+   _BlocLD['RENUM'] = SIMP(statut='f', typ='TXM', defaut=_defaut, into=_into, )
+
+   _BlocMU['RENUM'] = SIMP(statut='f', typ='TXM', defaut="AUTO", into=("AMD", "AMF", "PORD", "METIS", "QAMD", "SCOTCH", "AUTO", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+#  NPREC
+   _BlocMF['NPREC'] = SIMP(statut='f', typ='I', defaut=8, )
+   _BlocLD['NPREC'] = SIMP(statut='f', typ='I', defaut=8, )
+   _BlocMU['NPREC'] = SIMP(statut='f', typ='I', defaut=8, )
+   _BlocFE['NPREC'] = SIMP(statut='f', typ='I', defaut=8, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+#  STOP_SINGULIER
+   _into = ("OUI", "NON", )
+   _defaut = "OUI"
+   
+   if _singu_non:
+      _defaut = "NON"
+
+   if _singu:
+      _BlocMF['STOP_SINGULIER'] = SIMP(statut='f', typ='TXM', defaut=_defaut, into=_into, )
+      _BlocLD['STOP_SINGULIER'] = SIMP(statut='f', typ='TXM', defaut=_defaut, into=_into, )
+      _BlocMU['STOP_SINGULIER'] = SIMP(statut='f', typ='TXM', defaut=_defaut, into=_into, )
+      _BlocFE['STOP_SINGULIER'] = SIMP(statut='f', typ='TXM', defaut=_defaut, into=_into, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# MUMPS (MOT-CLES RESTANT)
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocMU['TYPE_RESOL'     ] = SIMP(statut='f', typ='TXM', defaut="AUTO", into=("NONSYM", "SYMGEN", "SYMDEF", "AUTO", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocMU['PRETRAITEMENTS' ] = SIMP(statut='f', typ='TXM', defaut="AUTO", into=("SANS", "AUTO", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   if _resol:
+      _BlocMU['POSTTRAITEMENTS'] = SIMP(statut='f', typ='TXM', defaut="AUTO", into=("SANS", "AUTO", "FORCE", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocMU['ELIM_LAGR2'     ] = SIMP(statut='f', typ='TXM', defaut="OUI" , into=("OUI", "NON", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocMU['PCENT_PIVOT'    ] = SIMP(statut='f', typ='I'  , defaut=10, val_min=1, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   if _resol:
+      if _type == 'LIN':
+         _BlocMU['RESI_RELA'] = SIMP(statut='f', typ='R', defaut=1.0E-6, )
+      else:
+         _BlocMU['RESI_RELA'] = SIMP(statut='f', typ='R', defaut=-1.0, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocMU['OUT_OF_CORE'    ] = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocMU['LIBERE_MEMOIRE' ] = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   if _type == 'NL':
+      _BlocMU['FILTRAGE_MATRICE'] = SIMP(statut='f', typ='R'  , defaut=-1.0, )
+      _BlocMU['MIXER_PRECISION' ] = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   if _dist:
+      _BlocMU['MATR_DISTRIBUEE' ] = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# GCPC/PETSC
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocPE['ALGORITHME'] = SIMP(statut='f', typ='TXM', defaut="GMRES", into=("BCGS", "BICG", "CG", "CR", "GMRES", "TFQMR", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocGC['PRE_COND'] = SIMP(statut='f', typ='TXM', defaut="LDLT_INC", into=("LDLT_INC", "LDLT_SP", ), )
+   _BlocPE['PRE_COND'] = SIMP(statut='f', typ='TXM', defaut="LDLT_SP" , into=("LDLT_INC", "JACOBI", "SOR", "LDLT_SP", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocGC['RESI_RELA'] = SIMP(statut='f', typ='R', defaut= 1.E-6, )
+   _BlocPE['RESI_RELA'] = SIMP(statut='f', typ='R', defaut= 1.E-6, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocGC['NMAX_ITER'] = SIMP(statut='f', typ='I', defaut= 0, )
+   _BlocPE['NMAX_ITER'] = SIMP(statut='f', typ='I', defaut= 0, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Mot-cle cache pour desactiver le critere en norme non preconditionnee dans PETSC
+
+   if _type == 'NL':
+      _BlocPE['RESI_RELA_PC'] = SIMP(statut='c', typ='R', defaut= -1.0, )
+   else:
+      _BlocPE['RESI_RELA_PC'] = SIMP(statut='c', typ='R', defaut=  0.0, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocGC_INC['RENUM'] = SIMP(statut='f', typ='TXM', defaut="RCMK", into=("SANS","RCMK"), )
+   _BlocPE_INC['RENUM'] = SIMP(statut='f', typ='TXM', defaut="RCMK", into=("SANS","RCMK"), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocGC_INC['NIVE_REMPLISSAGE'] = SIMP(statut='f', typ='I', defaut= 0, )
+   _BlocPE_INC['NIVE_REMPLISSAGE'] = SIMP(statut='f', typ='I', defaut= 0, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocPE_INC['REMPLISSAGE'] = SIMP(statut='f', typ='R', defaut= 1.0, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocXX_SP['RENUM'] = SIMP(statut='f', typ='TXM', defaut="SANS", into=("SANS","RCMK"), )
+   _BlocXX_SP['REAC_PRECOND'] = SIMP(statut='f', typ='I', defaut=30, )
+   _BlocXX_SP['PCENT_PIVOT' ] = SIMP(statut='f', typ='I', defaut=10, val_min=1, )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocXX_Jac_Sor['RENUM'] = SIMP(statut='f', typ='TXM', defaut="SANS", into=("SANS","RCMK", ), )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# FETI (MOT-CLES RESTANT)
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   _BlocFE['PARTITION'      ] = SIMP(statut='o',typ=sd_feti_sdaster)
+   _BlocFE['RESI_RELA'      ] = SIMP(statut='f',typ='R',defaut=1.E-6,val_min=0.)
+   _BlocFE['NMAX_ITER'      ] = SIMP(statut='f',typ='I',defaut=0,val_min=0)
+   _BlocFE['REAC_RESI'      ] = SIMP(statut='f',typ='I',defaut=0,val_min=0)
+   _BlocFE['TYPE_REORTHO_DD'] = SIMP(statut='f',typ='TXM',defaut="GSM",into=("SANS","GS","GSM","IGSM") )
+   _BlocFE['NB_REORTHO_DD'  ] = SIMP(statut='f',typ='I',defaut=0,val_min=0)
+   _BlocFE['NB_REORTHO_INST'] = SIMP(statut='f',typ='I',defaut=0,val_min=0)
+   _BlocFE['PRE_COND'       ] = SIMP(statut='f',typ='TXM',defaut="LUMPE",into=("LUMPE","SANS") )
+   _BlocFE['SCALING'        ] = SIMP(statut='f',typ='TXM',defaut="MULT",into=("SANS","MULT") )
+   _BlocFE['VERIF_SDFETI'   ] = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") )
+   _BlocFE['TEST_CONTINU'   ] = SIMP(statut='f',typ='R',defaut=1.E-8,val_min=0.)
+   _BlocFE['INFO_FETI'      ] = SIMP(statut='f',typ='TXM',defaut='FFFFFFFFFFFFFFFFFFFFFFFF')
+   _BlocFE['STOCKAGE_GI'    ] = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","CAL") )
+   _BlocFE['NB_SD_PROC0'    ] = SIMP(statut='f',typ='I',defaut=0,val_min=0)
+   _BlocFE['ACCELERATION_SM'] = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") )
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#
+# PREPARATION DU MOT-CLE FACTEUR
+#
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+   mcfact = FACT(statut='d',
+                 b_mult_front = BLOC(condition = "METHODE == 'MULT_FRONT' ",
+                                     fr="Paramètres de la méthode multi frontale",
+                                     **_BlocMF
+                                     ),
+                 b_ldlt       = BLOC(condition = "METHODE == 'LDLT' ",
+                                     fr="Paramètres de la méthode LDLT",
+                                     **_BlocLD
+                                     ),
+                 b_mumps      = BLOC(condition = "METHODE == 'MUMPS' ",
+                                     fr="Paramètres de la méthode MUMPS",
+                                     **_BlocMU
+                                     ),
+                 b_gcpc       = BLOC(condition = "METHODE == 'GCPC' ",
+                                      fr="Paramètres de la méthode du gradient conjugué",
+                                     b_ldltinc    = BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+                                                         fr="Paramètres de la factorisation incomplète",
+                                                         **_BlocGC_INC
+                                                         ),
+                                     b_simple     = BLOC(condition = "PRE_COND == 'LDLT_SP' ",
+                                                         fr="Paramètres de la factorisation simple précision",
+                                                         **_BlocXX_SP
+                                                         ),
+                                     **_BlocGC
+                                     ),
+                 b_petsc      = BLOC(condition = "METHODE == 'PETSC' ",
+                                     fr="Paramètres de la méthode PETSC",
+                                     b_ldltinc    = BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+                                                         fr="Paramètres de la factorisation incomplète",
+                                                         **_BlocPE_INC
+                                                         ),
+                                     b_simple     = BLOC(condition = "PRE_COND == 'LDLT_SP' ",
+                                                         fr="Paramètres de la factorisation simple précision",
+                                                         **_BlocXX_SP
+                                                         ),
+                                     b_jacobi_sor = BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'",
+                                                         **_BlocXX_Jac_Sor
+                                                         ),
+                                     **_BlocPE
+                                     ),
+                 b_feti       = BLOC(condition = "METHODE == 'FETI' ",
+                                     fr="Paramètres de la méthode FETI 1",
+                                     **_BlocFE
+                                     ),
+                 **_MotCleSimples
+                 )
+
+   return mcfact
+#& MODIF COMMUN  DATE 20/06/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+def C_SUIVI_DDL() : return FACT(statut='f',max=4,
+
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+                                   into=("DEPL","VITE","ACCE",
+                                         "FORC_NODA",
+                                         "SIEF_ELGA","VARI_ELGA",)),
+          
+           EVAL_CHAM       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("MIN","MAX","MOY","VALE",),),
+                                         
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max=20),
+           EVAL_CMP        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                   into=("VALE","FORMULE",),),
+                                   
+           b_formule       =BLOC(condition="(EVAL_CMP=='FORMULE')",
+                                   FORMULE = SIMP(statut='o',typ=formule,max=1),
+                                ),                 
+           
+           b_cham_no       =BLOC(condition="(NOM_CHAM=='DEPL') or \
+                                            (NOM_CHAM=='VITE') or \
+                                            (NOM_CHAM=='ACCE') or \
+                                            (NOM_CHAM=='FORC_NODA') or \
+                                            (NOM_CHAM=='VALE_CONT')",                                 
+                                 regles   =(UN_PARMI('NOEUD','GROUP_NO','GROUP_MA','MAILLE','TOUT')),
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),
+                                 NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                 GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                 MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),   
+                                ), 
+                                          
+           b_cham_elga     =BLOC(condition="(NOM_CHAM=='SIEF_ELGA') or \
+                                            (NOM_CHAM=='VARI_ELGA')",
+                                 regles          =(UN_PARMI('GROUP_MA','MAILLE','TOUT')), 
+                                 TOUT            =SIMP(statut='d',typ='TXM',into=("OUI",) ),          
+                                 MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                 GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'), 
+                                 EVAL_ELGA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,defaut='VALE',
+                                                        into=("MIN","MAX","VALE",),), 
+                                 b_elga_vale     =BLOC(condition="(EVAL_ELGA=='VALE')",                     
+                                   POINT           =SIMP(statut='o',typ='I'  ,validators=NoRepeat(),max='**'), 
+                                   SOUS_POINT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),  
+                                 ),  
+                                ), 
+             
+           TITRE           =  SIMP(statut='f',typ='TXM',max=3),     
+       
+       
+       );
+#& MODIF COMMUN  DATE 09/11/2010   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+#
+# ce fichier contient la liste des "into" possibles pour le mot cle TYPE_CHAM
+def C_TYPE_CHAM_INTO( type_cham=None ) : #COMMUN#
+# Si aucun argument n'est passe, on utilise tous les types de champs possibles
+  if ( type_cham is None ) :
+    l_cham = ["ELEM", "ELNO", "ELGA", "CART", "NOEU"]
+# Sinon, on n'utilise que les types passes en argument
+  else :
+    l_cham = []
+    for typ in type_cham :
+      l_cham.append(typ)
+#
+  l = []
+  for gd in C_NOM_GRANDEUR() :
+    for typ in l_cham :
+      l.append(typ+"_"+gd)
+#
+  return tuple(l)
+
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FLEJOU J-L.FLEJOU
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
+   fr="Affectation de caractéristiques à des éléments de structure",
+   reentrant='n',
+   UIinfo ={"groupes":("Modélisation",)},
+   regles = (AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','DISCRET_2D','MASSIF',
+                         'GRILLE','MULTIFIBRE','RIGI_PARASOL'),
+             PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE'),
+             EXCLUS('DISCRET','DISCRET_2D'),),
+   MODELE = SIMP(statut='o',typ=modele_sdaster ),
+   INFO   = SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+   VERIF  = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("MAILLE","NOEUD") ),
+
+#  ============================================================================
+   POUTRE               = FACT(statut= 'f',max= '**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut= 'f',typ= ma  ,validators= NoRepeat(),max= '**'),
+      GROUP_MA             = SIMP(statut= 'f',typ= grma,validators= NoRepeat(),max= '**'),
+      SECTION              = SIMP(statut= 'o',typ= 'TXM' ,into= ("GENERALE","RECTANGLE","CERCLE") ),
+      PREC_AIRE            = SIMP(statut= 'f',typ= 'R',defaut= 0.01),
+      PREC_INERTIE         = SIMP(statut= 'f',typ= 'R',defaut= 0.1),
+      b_generale           = BLOC(condition = "SECTION == 'GENERALE'",
+         VARI_SECT            = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE"),defaut= "CONSTANT"),
+         b_constant           = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 4 ,max= 15,
+                                       fr= "A,IY,IZ,JX sont des paramètres obligatoires",
+                                       into= ("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+                                             "JG","IYR2","IZR2","AI") ),
+            VALE                    = SIMP(statut= 'o',typ= 'R',min= 4 ,max= 15), ),
+         b_homothetique       = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 8 ,max= 30,
+                                       fr= "A1,A2,IY1,IY2,IZ1,IZ2,JX1,JX2 sont des paramètres obligatoires",
+                                       into= ("A1","IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+                                             "RZ1","RT1","JG1","IYR21","IZR21","AI1",
+                                             "A2","IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+                                             "RZ2","RT2","JG2","IYR22","IZR22","AI2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 8 ,max= 30),),
+      ),
+      b_rectangle          = BLOC(condition = "SECTION == 'RECTANGLE'",
+         VARI_SECT            = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE","AFFINE"),defaut= "CONSTANT"),
+         b_constant           = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 1 ,max= 4,
+                                       into= ("H","EP", "HY","HZ","EPY","EPZ") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 1 ,max= 4), ),
+         b_homothetique       = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 2 ,max= 8,
+                                       into= ("H1","HZ1","HY1","EP1","EPY1","EPZ1",
+                                          "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 2 ,max= 8), ),
+         b_affine             = BLOC(condition = "VARI_SECT == 'AFFINE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 3 ,max= 6,
+                                       into= ("HY","EPY", "HZ1","EPZ1","HZ2","EPZ2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 3 ,max= 6), ),
+      ),
+      b_cercle             = BLOC(condition = "SECTION == 'CERCLE'",
+         VARI_SECT            = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE"),defaut= "CONSTANT"),
+         b_constant           = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 1 ,max= 2,
+                                       fr= "R est un paramètre obligatoire",
+                                       into= ("R","EP") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 1 ,max= 2), ),
+         b_homothetique       = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 2 ,max= 4,
+                                       fr= "R1, R2 sont des paramètres obligatoires",
+                                       into= ("R1","R2","EP1","EP2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 2 ,max= 4), ),
+         MODI_METRIQUE     = SIMP(statut= 'f',typ= 'TXM',defaut= "NON",into= ("OUI","NON") ),
+         FCX               = SIMP(statut= 'f',typ= (fonction_sdaster,nappe_sdaster,formule) ),
+         TUYAU_NSEC        = SIMP(statut= 'f',typ= 'I',val_max= 32,defaut= 16),
+         TUYAU_NCOU        = SIMP(statut= 'f',typ= 'I',val_max= 10,defaut= 3),
+      ),
+   ),
+
+#  ============================================================================
+   BARRE                = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),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',min=1,max=1 ), ),
+      b_rectangle          = BLOC(condition = "SECTION=='RECTANGLE'",
+         CARA                 = SIMP(statut='o',typ='TXM',
+                                    into=("H","EP","HZ","HY","EPY","EPZ"),
+                                    validators=NoRepeat(),min=1,max=4 ),
+         VALE                 = SIMP(statut='o',typ='R',min=1,max=4 ), ),
+      b_cercle             =  BLOC(condition = "SECTION=='CERCLE'",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),min=1,max=2,into=("R","EP") ),
+         VALE                 = SIMP(statut='o',typ='R',min=1,max=2 ), ),
+      FCX                  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+   ),
+
+#  ============================================================================
+   COQUE                = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA' ),
+                              PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),
+                              AU_MOINS_UN('EPAIS','EPAIS_F',),
+                              PRESENT_ABSENT('EPAIS','EPAIS_F',),
+                              EXCLUS('ANGL_REP','VECTEUR'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      EPAIS                = SIMP(statut='f',typ='R' ),
+      EPAIS_F              = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),
+      ANGL_REP             = SIMP(statut='f',typ='R',min=2,max=2),
+      VECTEUR              = SIMP(statut='f',typ='R',min=3,max=3),
+      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',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      N_INIT               = SIMP(statut='f',typ='R',defaut= 5000. ),
+      SECTION              = SIMP(statut='f',typ='R' ),
+      FCX                  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+   ),
+
+#  ============================================================================
+   DISCRET              = FACT(statut='f',max='**',
+      REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+      AMOR_HYST            = SIMP(statut='f',typ='R' ),
+
+      SYME                 = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+      b_SYME_OUI           = BLOC(condition="SYME=='OUI'",
+         fr="SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            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_T_D_L", "M_TR_D_N", "M_TR_D_L", "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_D_N", "A_T_D_L", "A_TR_D_N", "A_TR_D_L", "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE
+         b_AK_T_D_N            = BLOC(condition = "((CARA=='K_T_D_N')or(CARA=='A_T_D_N'))",
+            fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_AK_T_D_L            = BLOC(condition = "((CARA=='K_T_D_L')or(CARA=='A_T_D_L'))",
+            fr="SEGMENT: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_AK_TR_D_N           = BLOC(condition = "((CARA=='K_TR_D_N')or(CARA=='A_TR_D_N'))",
+            fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_AK_TR_D_L           = BLOC(condition = "((CARA=='K_TR_D_L')or(CARA=='A_TR_D_L'))",
+            fr="SEGMENT: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_MAK_T_N              = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_MAK_T_L              = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 21 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=21,max=21),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+         b_MAK_TR_N             = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 21 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=21,max=21),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+         b_MAK_TR_L             = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 78 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=78,max=78),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=78 ,max=78 ),),
+         #  Affection des caractéristiques de MASSE
+         b_M_T_D_N           = BLOC(condition = "(CARA=='M_T_D_N')",
+            fr="NOEUD: 1 valeur de masse",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+         b_M_T_D_L           = BLOC(condition = "(CARA=='M_T_D_L')",
+            fr="SEGMENT: 1 valeur de masse",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+         b_M_TR_D_N           = BLOC(condition = "(CARA=='M_TR_D_N')",
+            fr="NOEUD: 1 valeur de masse, 6 valeurs du tenseur d'inertie, 3 composantes du vecteur d'excentrement",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=10,max=10),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=10 ,max=10 ),),
+         b_M_TR_D_L           = BLOC(condition = "(CARA=='M_TR_D_L')",
+            fr="SEGMENT: 1 valeur de masse, 3 valeurs du tenseur d'inertie",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=4,max=4),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+      ),
+      #     éléments à matrice non-symétrique
+      #        b_MAK_T_N_NS       'K_T_N'     'A_T_N'    'M_T_N'
+      #        b_MAK_T_L_NS       'K_T_L'     'A_T_L'    'M_T_L'
+      #        b_MAK_TR_N_NS      'K_TR_N'    'A_TR_N'   'M_TR_N'
+      #        b_MAK_TR_L_NS      'K_TR_L'    'A_TR_L'   'M_TR_L'
+      b_SYME_NON           = BLOC(condition="SYME=='NON'",
+         fr="NON-SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            into=("K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+                  "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE : NON-SYMETRIQUE
+         b_MAK_T_N_NS           = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 9 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=9 ,max=9 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=9 ,max=9 ),),
+         b_MAK_T_L_NS           = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 36 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=36,max=36),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+         b_MAK_TR_N_NS          = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 36 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=36,max=36),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+         b_MAK_TR_L_NS          = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 144 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=144,max=144),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=144 ,max=144 ),),
+      ),
+   ),
+#  ============================================================================
+   DISCRET_2D           = FACT(statut='f',max='**',
+      REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+      AMOR_HYST            = SIMP(statut='f',typ='R' ),
+      SYME                 = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+      b_SYME_OUI           = BLOC(condition="SYME=='OUI'",
+         fr="SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            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_T_D_L", "M_TR_D_N", "M_TR_D_L", "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_D_N", "A_T_D_L", "A_TR_D_N", "A_TR_D_L", "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE
+         b_AK_T_D_N            = BLOC(condition = "((CARA=='K_T_D_N')or(CARA=='A_T_D_N'))",
+            fr="NOEUD: 2 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+         b_AK_T_D_L            = BLOC(condition = "((CARA=='K_T_D_L')or(CARA=='A_T_D_L'))",
+            fr="SEGMENT: 2 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+         b_AK_TR_D_N           = BLOC(condition = "((CARA=='K_TR_D_N')or(CARA=='A_TR_D_N'))",
+            fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_AK_TR_D_L           = BLOC(condition = "((CARA=='K_TR_D_L')or(CARA=='A_TR_D_L'))",
+            fr="SEGMENT: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_MAK_T_N              = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_MAK_T_L              = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 10 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=10,max=10),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=10 ,max=10 ),),
+         b_MAK_TR_N             = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_MAK_TR_L             = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 21 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=21,max=21),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+         #  Affection des caractéristiques de MASSE
+         b_M_T_D_N            = BLOC(condition = "(CARA=='M_T_D_N')",
+            fr="NOEUD: 1 valeur de masse",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+         b_M_T_D_L            = BLOC(condition = "(CARA=='M_T_D_L')",
+            fr="SEGMENT: 1 valeur de masse",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+         b_M_TR_D_N           = BLOC(condition = "(CARA=='M_TR_D_N')",
+            fr="NOEUD: 1 valeur de masse, 1 valeur d'inertie, 2 composantes du vecteur d'excentrement",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=4 ,max=4 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+         b_M_TR_D_L           = BLOC(condition = "(CARA=='M_TR_D_L')",
+            fr="SEGMENT: 1 valeur de masse, 1 valeur d'inertie",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+      ),
+      #     éléments à matrice non-symétrique
+      #        b_MAK_T_N_NS       'K_T_N'     'A_T_N'    'M_T_N'
+      #        b_MAK_T_L_NS       'K_T_L'     'A_T_L'    'M_T_L'
+      #        b_MAK_TR_N_NS      'K_TR_N'    'A_TR_N'   'M_TR_N'
+      #        b_MAK_TR_L_NS      'K_TR_L'    'A_TR_L'   'M_TR_L'
+      b_SYME_NON           = BLOC(condition="SYME=='NON'",
+         fr="NON-SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            into=("K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+                  "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE : NON-SYMETRIQUE
+         b_MAK_T_N_NS           = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 4 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=4 ,max=4 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+         b_MAK_T_L_NS           = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 16 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=16,max=16),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=16 ,max=16 ),),
+         b_MAK_TR_N_NS          = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 9 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=9 ,max=9),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=9 ,max=9 ),),
+         b_MAK_TR_L_NS          = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 36 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=36,max=36),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+      ),
+   ),
+#  ============================================================================
+   ORIENTATION          = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+      GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),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',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  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      ORIE_ARC             = SIMP(statut='f',typ='R'),
+      CENTRE               = SIMP(statut='f',typ='R',max='**'),
+      NOEUD_CENTRE         = SIMP(statut='f',typ=no),
+      GROUP_NO_CENTRE      = SIMP(statut='f',typ=grno),
+      POIN_TANG            = SIMP(statut='f',typ='R',max='**'),
+      NOEUD_POIN_TANG      = SIMP(statut='f',typ=no),
+      GROUP_NO_POIN_TG     = SIMP(statut='f',typ=grno),
+      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',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                              UN_PARMI('ANGL_REP','ANGL_AXE','ANGL_EULER'),
+                              EXCLUS('ANGL_REP','ANGL_EULER'),
+                              EXCLUS('ANGL_REP','ANGL_AXE'),
+                              EXCLUS('ANGL_REP','ORIG_AXE'),
+                              PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      ANGL_REP             = SIMP(statut='f',typ='R',max=3),
+      ANGL_EULER           = SIMP(statut='f',typ='R',min=3,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',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),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',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                              EXCLUS('ANGL_REP','ORIG_AXE'),
+                              ENSEMBLE('ORIG_AXE','AXE')),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      SECTION              = SIMP(statut='o',typ='R'),
+      ANGL_REP             = SIMP(statut='f',typ='R',max=2),
+      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,),
+   ),
+
+#============================================================================
+   RIGI_PARASOL         = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('COEF_GROUP','FONC_GROUP'),
+                              UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                              EXCLUS('GROUP_MA_POI1','GROUP_MA_SEG2'),),
+      GROUP_MA             = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
+         fr="Surface servant à répartir les caractéristiques des discrets"),
+      GROUP_MA_POI1        = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1,
+         fr="Mailles de type point correspondant aux discrets"),
+      GROUP_MA_SEG2        = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1,
+         fr="Mailles de type seg2 correspondant aux discrets"),
+      FONC_GROUP           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+      COEF_GROUP           = SIMP(statut='f',typ='R',max='**'),
+      REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+      CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,
+                                 into=("K_TR_D_N","K_T_D_N","K_TR_D_L","K_T_D_L",
+                                       "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L"),
+                                 fr="Choix des types de discrets du tapis de ressorts." ),
+      b_cara= BLOC(condition =""" au_moins_un(CARA, ["K_TR_D_N","K_T_D_N","K_TR_D_L","K_T_D_L",
+                                            "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L"]) or \
+                                  (len(CARA)==2 and CARA[0][2:]==CARA[1][2:])""",
+                   fr="Valeurs pour les discrets du tapis de ressorts.",
+         VALE = SIMP(statut='o',typ='R',max='**',
+              fr="Valeurs pour les discrets du tapis de ressorts.",),
+      ),
+      GROUP_NO_CENTRE      = SIMP(statut='f',typ=grno),
+      NOEUD_CENTRE         = SIMP(statut='f',typ=no),
+      COOR_CENTRE          = SIMP(statut='f',typ='R',min=2,max=3),
+      EUROPLEXUS           = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+      UNITE                = SIMP(statut='f',typ='I',val_min=1),
+   ),
+
+#============================================================================
+   RIGI_MISS_3D         = FACT(statut='f',max='**',
+      GROUP_MA_POI1        = SIMP(statut='o',typ=grma,max=1),
+      GROUP_MA_SEG2        = SIMP(statut='f',typ=grma,max=1),
+      FREQ_EXTR            = SIMP(statut='o',typ='R',max=1),
+      UNITE_RESU_IMPE      = SIMP(statut='f',typ='I',defaut=30),
+   ),
+
+#============================================================================
+   GEOM_FIBRE           = SIMP(statut='f',max=1,typ=gfibre_sdaster,
+      fr="Donner le nom de la SD regroupant tous les groupes de fibres (issue de DEFI_GEOM_FIBRE)"),
+   MULTIFIBRE           = FACT(statut='f',max='**',
+      regles               = (AU_MOINS_UN('GROUP_MA','MAILLE'),),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_FIBRE          = SIMP(statut='o',typ='TXM',max='**'),
+   ),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE None
+AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
+                    fr="Affectation de charges et conditions aux limites acoustiques constantes",
+                    reentrant='n',
+            UIinfo={"groupes":("Chargements","Acoustique","CACHE",)},
+         regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les pressions imposées",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+         PRES_IMPO       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         VITE_FACE       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           VNOR            =SIMP(statut='o',typ='C' ),
+         ),
+         IMPE_FACE       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           IMPE            =SIMP(statut='o',typ='C' ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,EVOL_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
+  if EVOL_IMPO != None  :
+      if AsType(EVOL_IMPO) in (evol_elas,evol_noli) :
+          return char_cine_meca
+      elif AsType(EVOL_IMPO) in (evol_ther,) :
+          return char_cine_ther
+      else :
+          raise AsException("Extension à faire ...")
+
+  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 (U=U0) pour un traitement sans dualisation",
+                     reentrant='n',
+            UIinfo={"groupes":("Chargements","Mécanique","CACHE")},
+         regles=(UN_PARMI('MECA_IMPO','THER_IMPO','ACOU_IMPO','EVOL_IMPO'),
+                 ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+
+         MECA_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('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',
+                               'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                               'E3X','E3Y','E3Z','E4X','E4Y','E4Z','V11','V12','V13','V21','V22',
+                               'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21',
+                               'PRES22','PRES23','PRES31','PRES32','PRES33','LH1'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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' ),
+             H1X             =SIMP(statut='f',typ='R' ),
+             H1Y             =SIMP(statut='f',typ='R' ),
+             H1Z             =SIMP(statut='f',typ='R' ),
+             E1X             =SIMP(statut='f',typ='R' ),
+             E1Y             =SIMP(statut='f',typ='R' ),
+             E1Z             =SIMP(statut='f',typ='R' ),
+             E2X             =SIMP(statut='f',typ='R' ),
+             E2Y             =SIMP(statut='f',typ='R' ),
+             E2Z             =SIMP(statut='f',typ='R' ),
+             E3X             =SIMP(statut='f',typ='R' ),
+             E3Y             =SIMP(statut='f',typ='R' ),
+             E3Z             =SIMP(statut='f',typ='R' ),
+             E4X             =SIMP(statut='f',typ='R' ),
+             E4Y             =SIMP(statut='f',typ='R' ),
+             E4Z             =SIMP(statut='f',typ='R' ),
+             V11             =SIMP(statut='f',typ='R' ),
+             V12             =SIMP(statut='f',typ='R' ),
+             V13             =SIMP(statut='f',typ='R' ),
+             V21             =SIMP(statut='f',typ='R' ),
+             V22             =SIMP(statut='f',typ='R' ),
+             V23             =SIMP(statut='f',typ='R' ),
+             V31             =SIMP(statut='f',typ='R' ),
+             V32             =SIMP(statut='f',typ='R' ),
+             V33             =SIMP(statut='f',typ='R' ),
+             PRES11          =SIMP(statut='f',typ='R' ),
+             PRES12          =SIMP(statut='f',typ='R' ),
+             PRES13          =SIMP(statut='f',typ='R' ),
+             PRES21          =SIMP(statut='f',typ='R' ),
+             PRES22          =SIMP(statut='f',typ='R' ),
+             PRES23          =SIMP(statut='f',typ='R' ),
+             PRES31          =SIMP(statut='f',typ='R' ),
+             PRES32          =SIMP(statut='f',typ='R' ),
+             PRES33          =SIMP(statut='f',typ='R' ),
+             LH1             =SIMP(statut='f',typ='R' ),
+         ),
+
+         THER_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+
+         EVOL_IMPO  =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer les ddls d'un evol_xxx"),
+         b_evol_impo = BLOC ( condition = "EVOL_IMPO != None",
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**',), # pour n'imposer que certaines CMPS (par défaut : toutes)
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+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= 101,sd_prod=affe_char_cine_f_prod,
+                      fr="Affectation de conditions aux limites cinématiques fonction d'un (ou plusieurs) paramètres"
+                        +" pour un traitement sans dualisation",
+                     reentrant='n',
+            UIinfo={"groupes":("Chargements","Mécanique",)},
+         regles=(UN_PARMI('MECA_IMPO','THER_IMPO')),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         MECA_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('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',
+                               'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                               'E3X','E3Y','E3Z','E4X','E4Y','E4Z','V11','V12','V13','V21','V22',
+                               'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21',
+                               'PRES22','PRES23','PRES31','PRES32','PRES33','LH1'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DX    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE1  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE2  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UI6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           UO6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VI6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VO6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO3   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO4   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO5   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO6   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WI1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           WO1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GONF  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4X   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Y   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Z   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V11   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V12   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V13   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V21   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V22   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V23   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V31   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V32   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           V33   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES11=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES12=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES13=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES21=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES22=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES23=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES31=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES32=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES33=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           LH1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+
+         ),
+         THER_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 04/10/2011   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES 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",
+                     reentrant='n',
+            UIinfo={"groupes":("Chargements","Mécanique",)},
+         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','CHAMNO_IMPO','LIAISON_DDL','LIAISON_XFEM','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','RELA_CINE_BP','EPSI_INIT','ARETE_IMPO',
+                             'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP','LIAISON_SOLIDE',
+                             'LIAISON_ELEM','ONDE_FLUI','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
+                             'LIAISON_MAIL','LIAISON_CYCL','FORCE_TUYAU',
+                             'EFFE_FOND','EVOL_CHAR','DDL_POUTRE',),
+                         ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+
+         PESANTEUR       =FACT(statut='f',max=1,fr="Champ de pesanteur",
+            GROUP_MA         =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE           =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GRAVITE          =SIMP(statut='o',typ='R',min=1,max=1),
+            DIRECTION        =SIMP(statut='o',typ='R',min=3,max=3),),
+
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+         ROTATION        =FACT(statut='f', max=1, fr="Définition d'un chargement de rotation",
+                       GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(), max='**'),
+                       MAILLE   = SIMP(statut='f',typ=ma, validators=NoRepeat(),max='**'),
+                       VITESSE  = SIMP(statut='o', typ='R',min=1,max=1),
+                       AXE      = SIMP(statut='o', typ='R',min=2, max=3),
+                       CENTRE   = SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),
+         b_rotation_tout=BLOC(condition="(GROUP_MA == None) and (MAILLE ==None)",
+                       TOUT     = SIMP(statut='f',typ='TXM',into=("OUI",),defaut="OUI",),),
+         b_rotation=BLOC(condition="(GROUP_MA != None) or (MAILLE !=None)",
+                       TOUT     = SIMP(statut='f',typ='TXM',into=("NON","OUI"),defaut="NON",),),),
+
+         DDL_IMPO        =FACT(statut='f',max='**',
+             fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
+             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','LIAISON',
+                                 'H1X','H1Y','H1Z','H2X','H2Y','H2Z','H3X','H3Y','H3Z','H4X','H4Y','H4Z',
+                                 'E1X','E1Y','E1Z','E2X','E2Y','E2Z','E3X','E3Y','E3Z','E4X','E4Y','E4Z',
+                                 'LAGS_C','LAGS_F1','LAGS_F2','LAG2_C','LAG2_F1','LAG2_F2','LAG3_C','LAG3_F1',
+                                 'V11','V12','V13','V21','V22','V23','V31','V32','V33',
+                                 'PRES11','PRES12','PRES13','PRES21','PRES22','PRES23','PRES31','PRES32','PRES33','LH1'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+             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' ),
+             H1X             =SIMP(statut='f',typ='R' ),
+             H1Y             =SIMP(statut='f',typ='R' ),
+             H1Z             =SIMP(statut='f',typ='R' ),
+             H2X             =SIMP(statut='f',typ='R' ),
+             H2Y             =SIMP(statut='f',typ='R' ),
+             H2Z             =SIMP(statut='f',typ='R' ),
+             H3X             =SIMP(statut='f',typ='R' ),
+             H3Y             =SIMP(statut='f',typ='R' ),
+             H3Z             =SIMP(statut='f',typ='R' ),
+             H4X             =SIMP(statut='f',typ='R' ),
+             H4Y             =SIMP(statut='f',typ='R' ),
+             H4Z             =SIMP(statut='f',typ='R' ),
+             E1X             =SIMP(statut='f',typ='R' ),
+             E1Y             =SIMP(statut='f',typ='R' ),
+             E1Z             =SIMP(statut='f',typ='R' ),
+             E2X             =SIMP(statut='f',typ='R' ),
+             E2Y             =SIMP(statut='f',typ='R' ),
+             E2Z             =SIMP(statut='f',typ='R' ),
+             E3X             =SIMP(statut='f',typ='R' ),
+             E3Y             =SIMP(statut='f',typ='R' ),
+             E3Z             =SIMP(statut='f',typ='R' ),
+             E4X             =SIMP(statut='f',typ='R' ),
+             E4Y             =SIMP(statut='f',typ='R' ),
+             E4Z             =SIMP(statut='f',typ='R' ),
+             LAGS_C          =SIMP(statut='f',typ='R' ),
+             LAGS_F1         =SIMP(statut='f',typ='R' ),
+             LAGS_F2         =SIMP(statut='f',typ='R' ),
+             LAG2_C          =SIMP(statut='f',typ='R' ),
+             LAG2_F1         =SIMP(statut='f',typ='R' ),
+             LAG2_F2         =SIMP(statut='f',typ='R' ),       
+             LAG3_C          =SIMP(statut='f',typ='R' ),
+             LAG3_F1         =SIMP(statut='f',typ='R' ),
+             V11             =SIMP(statut='f',typ='R' ),
+             V12             =SIMP(statut='f',typ='R' ),
+             V13             =SIMP(statut='f',typ='R' ),
+             V21             =SIMP(statut='f',typ='R' ),
+             V22             =SIMP(statut='f',typ='R' ),
+             V23             =SIMP(statut='f',typ='R' ),
+             V31             =SIMP(statut='f',typ='R' ),
+             V32             =SIMP(statut='f',typ='R' ),
+             V33             =SIMP(statut='f',typ='R' ),
+             PRES11          =SIMP(statut='f',typ='R' ),
+             PRES12          =SIMP(statut='f',typ='R' ),
+             PRES13          =SIMP(statut='f',typ='R' ),
+             PRES21          =SIMP(statut='f',typ='R' ),
+             PRES22          =SIMP(statut='f',typ='R' ),
+             PRES23          =SIMP(statut='f',typ='R' ),
+             PRES31          =SIMP(statut='f',typ='R' ),
+             PRES32          =SIMP(statut='f',typ='R' ),
+             PRES33          =SIMP(statut='f',typ='R' ),
+             LH1             =SIMP(statut='f',typ='R' ),
+           ),
+
+
+
+         DDL_POUTRE    =FACT(statut='f',max='**',
+             fr="Bloque des DDLs dans un repère local d'une poutre",
+             regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ'),
+                     UN_PARMI('VECT_Y','ANGL_VRIL'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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' ),
+#  définition du repère local
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+             ANGL_VRIL       =SIMP(statut='f',typ='R',),
+#  restriction sur les mailles servant à définir le repère local
+             GROUP_MA        =SIMP(statut='f',typ=grma,),
+             MAILLE          =SIMP(statut='f',typ=ma,),
+                            ),
+
+
+
+           FACE_IMPO       =FACT(statut='f',max='**',
+             fr="Impose à tous les noeuds d'une face une ou plusieurs valeurs de déplacement (ou de certaines grandeurs associées)",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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' ),
+           ),
+
+         CHAMNO_IMPO  =FACT(statut='f',max='**',
+             fr="Impose des DDLs aux valeurs d'un concept cham_no_sdaster",
+#  type de cham_no_sdaster CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster), #CO()
+             COEF_MULT       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+         ARETE_IMPO       =FACT(statut='f',max='**',
+             fr="Impose à tous les noeuds d'une arete des elements 3D une ou plusieurs valeurs de déplacement",
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('DX','DY','DZ','DTAN','PRES','PHI','TEMP','PRE1','PRE2'),
+                     EXCLUS('DTAN','DX'),
+                     EXCLUS('DTAN','DY'),
+                     EXCLUS('DTAN','DZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DTAN            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+           ),
+
+           LIAISON_DDL     =FACT(statut='f',max='**',
+             fr="Définit 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='R' ),
+           ),
+
+           LIAISON_OBLIQUE =FACT(statut='f',max='**',
+             fr="Applique à des noeuds la meme valeur de déplacement définie composante par composante"
+              +" dans un repère oblique quelconque",
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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_GROUP   =FACT(statut='f',max='**',
+             fr="Définit la meme relation linéaire 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,validators=NoRepeat(),max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+             SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),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_MAIL    =FACT(statut='f',max='**',
+             fr="Définit des relations linéaires permettant de recoller deux bords d'une structure",
+             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,validators=NoRepeat(),max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+              TYPE_RACCORD    =SIMP(statut='o',typ='TXM',defaut="MASSIF",into=("MASSIF","COQUE","COQUE_MASSIF","MASSIF_COQUE",)),
+
+              b_MASSIF     =BLOC ( condition = "TYPE_RACCORD == 'MASSIF'",
+                 regles=( PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              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",) ),
+              ),
+              b_COQUE_MASSIF =BLOC ( condition = "TYPE_RACCORD == 'COQUE_MASSIF'",
+                 EPAIS           =SIMP(statut='o',typ='R'),
+                 CHAM_NORMALE    =SIMP(statut='o',typ=cham_no_sdaster),
+              ),
+              ELIM_MULT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+           LIAISON_CYCL    =FACT(statut='f',max='**',
+             fr="Définit des relations linéaires permettant de recoller les bords de deux parties symétriquement cycliques",
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT1','MAILLE_MAIT1'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),
+                     ),
+              GROUP_MA_MAIT1   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_MAIT1     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_MAIT2   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_MAIT2     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD_ESCL     =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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 ),
+              COEF_MAIT1            =SIMP(statut='f',typ='R',max=1 ),
+              COEF_MAIT2            =SIMP(statut='f',typ='R',max=1 ),
+              COEF_ESCL            =SIMP(statut='f',typ='R',max=1 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+         ),
+
+
+           LIAISON_SOLIDE  =FACT(statut='f',max='**',
+             fr="Modélise une partie indéformable d'une structure."
+              +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     ENSEMBLE('CENTRE','ANGL_NAUT'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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 ),
+             DIST_MIN        =SIMP(statut='f',typ='R'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+         LIAISON_ELEM    =FACT(statut='f',max='**',
+            fr="Modélise le raccord : d'une partie massive 3D avec une poutre ou avec un tuyau, d'une coque"
+               +" avec une poutre ou avec un tuyau, d'une plaque avec une poutre",
+            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","2D_POU","COQ_POU","COQ_TUYAU","PLAQ_POUT_ORTH") ),
+            GROUP_MA_1  =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE_1    =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_NO_2  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            NOEUD_2     =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            NUME_LAGR   =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+            ANGL_MAX    =SIMP(statut='f',typ='R',defaut= 1. ),
+            b_dalcol =BLOC( condition = "OPTION == 'PLAQ_POUT_ORTH'",
+               VERIF_EXCENT   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+            ),
+            b_option =BLOC( condition = "OPTION != 'PLAQ_POUT_ORTH'",
+               CARA_ELEM   =SIMP(statut='f',typ=(cara_elem) ),
+               AXE_POUTRE  =SIMP(statut='f',typ='R',max=3),
+            ),
+         ),
+
+           LIAISON_UNIF    =FACT(statut='f',max='**',
+             fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ),
+
+         LIAISON_CHAMNO  =FACT(statut='f',max='**',
+             fr="Définit une relation linéaire entre tous les DDLs présents dans un concept CHAM_NO",
+#  type de cham_no_sdaster CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+
+         LIAISON_INTERF  =FACT(statut='f',max='**',
+             fr="Définit une relation linéaire entre les DDLs d'interface à partir d'un MACRELEM",
+             MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna),
+             TYPE_LIAISON    =SIMP(statut='f',typ='TXM',defaut="RIGIDE",into=("RIGIDE","SOUPLE") ),
+           ),
+
+         LIAISON_XFEM      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+
+         CONTACT_XFEM      =SIMP(statut='f',typ=char_contact,min=1,max=1,),
+
+
+#         SIMP(statut='f',typ='TXM',defaut="NON" ),
+
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster ),
+#
+# FORCES
+#
+         FORCE_NODALE    =FACT(statut='f',fr="Applique à des noeuds des forces nodales",max='**',
+           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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_FACE      =FACT(statut='f',max='**',
+             fr="Applique des forces surfaciques sur une face d'élément volumique",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_ARETE     =FACT(statut='f',max='**',
+         fr="Applique des forces linéiques à une arete d'élément volumique ou de coque",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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',max='**',
+             fr="Applique des forces linéiques au bord d'un domaine 2D ou AXIS ou AXIS_FOURIER",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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',max='**',
+             fr="Applique des forces volumiques (2D ou 3D) à un domaine volumique",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         SIGM_INTERNE   =FACT(statut='f',max='**',
+             fr="Applique des contraintes volumiques (2D ou 3D) à un domaine volumique",
+             #INST            =SIMP(statut='f',typ='R' ),
+             SIGM            =SIMP(statut='o',typ=(cham_elem,carte_sdaster)),
+           ),
+
+         PRES_REP        =FACT(statut='f',max='**',
+             fr="Applique une pression à un domaine de milieu continu 2D ou 3D, ou à un domaine de coques et tuyaux",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FISSURE         =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
+           ),
+
+         EFFE_FOND       =FACT(statut='f',max='**',
+           fr="Calcul l'effet de fond sur une branche de tuyauterie (modélisation 3D) soumise à une pression",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
+         ),
+
+         EPSI_INIT       =FACT(statut='f',max='**',
+             fr="Applique un chargement de déformation initiale à un élément 2D, 3D ou de structure",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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_POUTRE    =FACT(statut='f',max='**',
+             fr="Applique des forces linéiques sur des éléments de type poutre",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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',max='**',
+             fr="Applique une pression sur des éléments TUYAU",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_COQUE     =FACT(statut='f',max='**',
+             fr="Applique des forces surfaciques sur des éléments de types coques",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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",) ),
+           ),
+
+           LIAISON_COQUE   =FACT(statut='f',max='**',
+             fr="Permet de représenter le raccord entre des éléments de coques au moyen des relations linéaires",
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+         RELA_CINE_BP    =FACT(statut='f',max='**',
+           fr="Etablir des relations cinématiques permettant de relier les noeuds cable aux noeuds du béton, et spécifier"
+              +" la prise en compte des contraintes initiales dans les cables",
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DIST_MIN        =SIMP(statut='f',typ='R'),
+         ),
+
+         FORCE_ELEC      =FACT(statut='f',max='**',
+             fr="Appliquer la force de LAPLACE agissant sur un conducteur principal, due à la présence d'un conducteur"
+                 +" secondaire droit",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_fxyz  =BLOC ( condition = "POSITION == None",
+                  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 ),
+                       ),
+
+             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),
+             ),
+           ),
+
+
+
+
+        INTE_ELEC       =FACT(statut='f',max='**',
+             fr="Appliquer la force de LAPLACE agissant sur un conducteur principal, due à la présence d'un conducteur"
+               +" secondaire non nécessairement droit",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             TRANS           =SIMP(statut='f',typ='R' ,max='**'),
+             SYME            =SIMP(statut='f',typ='R' ,max='**'),
+           ),
+
+
+         IMPE_FACE       =FACT(statut='f',fr="Applique une impédance acoustique à une face",max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+
+         VITE_FACE       =FACT(statut='f',fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE), ",max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+
+
+
+         ONDE_FLUI       =FACT(statut='f',max='**',
+             fr="Applique une amplitude de pression d'onde incidente sinusoidale arrivant normalement à une face",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             PRES            =SIMP(statut='o',typ='R' ),
+           ),
+
+         FLUX_THM_REP    =FACT(statut='f',max='**',
+             fr="Applique à un domaine de milieu continu 2D ou 3D un flux de chaleur et/ou un apport de masse fluide"
+                 +" (flux hydraulique)",
+             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,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES 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",
+                     reentrant='n',
+            UIinfo={"groupes":("Chargements","Mécanique",)},
+         regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+         DDL_IMPO        =FACT(statut='f',max='**',
+           fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','LIAISON', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+           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',max='**',
+           fr="Applique des forces linéiques sur des éléments de type poutre",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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',max='**',
+           fr="Définit une relation linéaire entre les 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='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/07/2011   AUTEUR FERNANDES R.FERNANDES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES 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'un (ou plusieurs) paramètres",
+                      reentrant='n',
+            UIinfo={"groupes":("Chargements","Mécanique",)},
+        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',
+                            'EFFE_FOND','FLUX_THM_REP',),),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+         DDL_IMPO        =FACT(statut='f',max='**',
+           fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées) fournies"
+               +" par l'intermédiaire d'un concept fonction ",
+           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','GONF','LIAISON','H1X',
+                               'H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                               'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE1            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE2            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GONF            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           LAGS_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FACE_IMPO       =FACT(statut='f',max='**',
+           fr="Impose à tous les noeuds d'une face une ou plusieurs valeurs de déplacement (ou de certaines grandeurs associées)"
+              +" fournies par l'intérmédiaire d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE1            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE2            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DNOR            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DTAN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_DDL     =FACT(statut='f',max='**',
+           fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds, les valeurs sont fournies par"
+               +" l'intermediaire d'un concept de type fonction",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),UN_PARMI('COEF_MULT','COEF_MULT_FONC'),),
+           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='f',typ='R',max='**'),
+           COEF_MULT_FONC  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_OBLIQUE =FACT(statut='f',max='**',
+           fr="Applique à des noeuds la meme valeur de déplacement définie composante par composante dans un repère oblique"
+              +" quelconque, les valeurs sont fournis par l'intermédiaire d'un concept fonction",
+           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_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_GROUP   =FACT(statut='f',max='**',
+           fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds, les valeurs sont fournies par"
+               +" l'intermédiaire de concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),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_sdaster,nappe_sdaster,formule) ),
+           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_UNIF    =FACT(statut='f',max='**',
+           fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+
+
+         LIAISON_SOLIDE  =FACT(statut='f',max='**',
+           fr="Modélise une partie indéformable d'une structure."
+            +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                   ENSEMBLE('CENTRE','ANGL_NAUT'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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 ),
+           DIST_MIN        =SIMP(statut='f',typ='R'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+
+
+
+         FORCE_NODALE    =FACT(statut='f',max='**',
+           fr="Applique à des noeuds des forces nodales dont les valeurs des composantes sont fournies par l'intermédiaire"
+               +" d'un concept fonction",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           ANGL_NAUT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max=3 ),
+         ),
+
+         FORCE_FACE      =FACT(statut='f',max='**',
+           fr="Applique des forces surfaciques sur une face d'élément volumique dont les valeurs des composantes sont fournies"
+               +" par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         FORCE_ARETE     =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques à une arete d'élément volumique ou de coque dont les valeurs des composantes sont"
+               +" fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         FORCE_CONTOUR   =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques au bord d'un domaine 2D ou AXIS ou AXIS_FOURIER, dont les valeurs des composantes"
+               +" sont fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_INTERNE   =FACT(statut='f',max='**',
+           fr="Applique des forces volumiques (2D ou 3D) à un domaine volumique, dont les valeurs des composantes sont fournies"
+               +" par l'intermédiaire d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         PRES_REP        =FACT(statut='f',max='**',
+           fr="Applique une pression à un domaine de milieu continu 2D ou 3D ou à un domaine de coques et tuyaux, dont les"
+               +" valeurs imposées (pression et/ou cisaillement) sont fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                   AU_MOINS_UN('PRES','CISA_2D'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           CISA_2D         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         EFFE_FOND       =FACT(statut='f',max='**',
+           fr="Calcul l'effet de fond sur une branche de tuyauterie (modélisation 3D) soumise"
+               +" à une pression dont la valeur est fournie par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         EPSI_INIT       =FACT(statut='f',max='**',
+           fr="Applique un chargement de déformation initiale à un élément 2D, 3D ou de structure dont les composantes"
+               +" du tenseur de déformation sont fournies par l'intermédiaire d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           EPXX            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYY            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPZZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXY            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_POUTRE    =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques sur des éléments de type poutre dont les valeurs sont fournies par"
+               +" l'intermédiaire d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           N               =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_TUYAU     =FACT(statut='f',max='**',
+           fr="Applique une pression sur des éléments TUYAU, la valeur est fournie par l'intermédiaire d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_COQUE     =FACT(statut='f',max='**',
+           fr="Applique des forces surfaciques sur des éléments de types coques dont les valeurs sont fournies par"
+               +" l'intermédiaires d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F1              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F2              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F3              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MF1             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MF2             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                                 into=("SUP","INF","MOY","MAIL") ),
+         ),
+
+         LIAISON_COQUE   =FACT(statut='f',max='**',
+           fr="Permet de représenter le raccord entre des éléments de coques au moyen des relations linéaires",
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+
+
+         VITE_FACE       =FACT(statut='f',max='**',
+           fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE) dont les valeurs sont fournies par"
+               +" l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           VNOR            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         IMPE_FACE       =FACT(statut='f',max='**',
+           fr="Applique à une face une impédance acoustique dont la valeur est fournie par l'intermédiaire"
+               +" d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           IMPE            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         ONDE_PLANE      =FACT(statut='f',max='**',
+           fr="Impose un chargement sismique par onde plane dont la valeur est fournie par l'intermédiaire"
+               +" d'un concept fonction",
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
+           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DIST_ORIG       =SIMP(statut='o',typ='R' ),
+         ),
+
+
+
+         FLUX_THM_REP    =FACT(statut='f',max='**',
+           fr="Applique à un domaine continue 2D ou 3D un flux de chaleur et/ou un apport de masse fluide (flux hydraulique)"
+               +" dont les valeurs des flux sont fournies par l'intermédiaire d'un concept fonction",
+           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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_HYDR1      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_HYDR2      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
+                    ,fr="Affectation de charges et conditions aux limites thermiques constantes",
+                    reentrant='n',
+            UIinfo={"groupes":("Chargements","Thermique",)},
+      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_sdaster) ),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les températures imposées",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+         TEMP_IMPO       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TEMP            =SIMP(statut='f',typ='R'),
+           TEMP_INF        =SIMP(statut='f',typ='R'),
+           TEMP_SUP        =SIMP(statut='f',typ='R'), ),
+
+         FLUX_REP        =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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=table_sdaster),
+         ),
+
+
+         RAYONNEMENT     =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SIGMA           =SIMP(statut='o',typ='R'),
+           EPSILON         =SIMP(statut='o',typ='R'),
+           TEMP_EXT        =SIMP(statut='o',typ='R'),
+         ),
+
+         ECHANGE         =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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'),
+         ),
+
+         SOURCE          =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SOUR            =SIMP(statut='f',typ='R'),
+           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem) ),
+         ),
+
+         GRAD_TEMP_INIT  =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUX_X          =SIMP(statut='f',typ='R' ),
+           FLUX_Y          =SIMP(statut='f',typ='R' ),
+           FLUX_Z          =SIMP(statut='f',typ='R' ),
+                         ),
+
+         LIAISON_DDL     =FACT(statut='f',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' ),
+         ),
+
+         LIAISON_GROUP   =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),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='**'),
+         ),
+
+         LIAISON_MAIL    =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_ESCL      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max='**' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),
+           CENTRE          =SIMP(statut='f',typ='R',max='**' ),
+           ELIM_MULT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         ECHANGE_PAROI   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+                         ),
+
+         LIAISON_UNIF    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+
+         LIAISON_CHAMNO  =FACT(statut='f',max='**',
+           CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),# 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") ),
+         ),
+
+         CONVECTION      =FACT(statut='f',max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_sdaster) ),
+         ),
+
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
+                     fr="Affectation de charges et conditions aux limites thermiques fonction d'un (ou plusieurs)"
+                         +" paramètres (temps, ...)",
+                     reentrant='n',
+            UIinfo={"groupes":("Chargements","Thermique",)},
+      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_sdaster) ),
+
+         TEMP_IMPO       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',into=("TEMP",) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FLUX_REP        =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_INF        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_SUP        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_X          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FLUX_NL         =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+         RAYONNEMENT     =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SIGMA           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPSILON         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+
+         ECHANGE         =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_H          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_H_INF      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT_INF    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_H_SUP      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+         SOURCE          =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SOUR            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         GRAD_TEMP_INIT  =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUX_X          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         ECHANGE_PAROI   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                        UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_H          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+
+        LIAISON_DDL     =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_GROUP   =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),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_sdaster,nappe_sdaster,formule) ),
+           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='**'),
+         ),
+
+         LIAISON_UNIF    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+
+         CONVECTION      =FACT(statut='f',max='**',
+           VITESSE         =SIMP(statut='o',typ=cham_no_sdaster ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/10/2011   AUTEUR MEUNIER S.MEUNIER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
+                   fr="Affecter des matériaux à des zones géométriques d'un maillage",
+                         reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+
+         #  affectation du nom du matériau (par mailles):
+         #  ----------------------------------------------
+         AFFE            =FACT(statut='o',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           MATER           =SIMP(statut='o',typ=mater_sdaster,max=30),
+         ),
+
+         #  affectation de comportement (multifibres pour l'instant):
+         #  ----------------------------------------------
+         AFFE_COMPOR        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COMPOR          =SIMP(statut='o',typ=compor_sdaster,max=1),
+         ),
+
+         #  affectation des variables de commande :
+         #  --------------------------------------------------
+         # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
+         LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP","CORR","IRRA","HYDR","SECH","EPSA",
+                                                           "M_ACIER","M_ZIRC","NEUT1","NEUT2","PTOT","DIVU",)),
+
+         AFFE_VARC    =FACT(statut='f',max='**',
+          regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                  PRESENT_ABSENT('GROUP_MA','TOUT'),
+                  PRESENT_ABSENT('MAILLE','TOUT'),
+                  AU_MOINS_UN('EVOL','CHAMP_GD','VALE_REF'),
+                  EXCLUS('EVOL','CHAMP_GD'),
+                  ),
+
+          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ), # [défaut]
+          GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+          MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+          NOM_VARC        =SIMP(statut='o',typ='TXM',
+#                                     champ dans la doc   into=("TEMP","CORR","IRRA","HYDR_ELNO","META_ELNO","NEUT")
+#                                     champ dans rscrsd   into=("IRRA","TEMP","HYDR_ELNO","HYDR_NOEU","EPSA_ELNO","META_ELNO",
+#                                                               "PTOT","DIVU")
+                                                            ),
+          CHAMP_GD        =SIMP(statut='f',typ=cham_gd_sdaster,),
+          EVOL            =SIMP(statut='f',typ=evol_sdaster,),
+
+          B_EVOL          =BLOC(condition="EVOL!=None",
+              NOM_CHAM      =SIMP(statut='f',typ='TXM',into=("TEMP","CORR","IRRA","NEUT"
+                                                             "HYDR_ELNO","HYDR_NOEU",
+                                                             "META_ELNO","META_NOEU",
+                                                             "EPSA_ELNO","EPSA_NOEU","PTOT","DIVU",)),
+              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") ),
+              FONC_INST     =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+          ),
+          VALE_REF          =SIMP(statut='f',typ='R'),
+         ),
+
+         #  mots clés cachés pour les variables de commande NEUTi :
+         #  -------------------------------------------------------
+         VARC_NEUT1   =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="NEUT1"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="NEUT_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("X1")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("NEUT1")),
+         ),
+         VARC_NEUT2   =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="NEUT2"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="NEUT_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("X1")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("NEUT2")),
+         ),
+
+         #  mots clés cachés pour variable de commande TEMP :
+         #  --------------------------------------------------
+         VARC_TEMP    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="TEMP"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           VALE_DEF        =SIMP(statut='c',typ='R',max=1,min=1,defaut=(0.,)),
+         ),
+
+         #  mots clés cachés pour variable de commande PTOT :
+         #  -------------------------------------------------
+         VARC_PTOT    =FACT(statut='d',
+           NOM_VARC         =SIMP(statut='c',typ='TXM',defaut="PTOT"),
+           GRANDEUR         =SIMP(statut='c',typ='TXM',defaut="DEPL_R"),
+           CMP_GD           =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("PTOT",)),
+           CMP_VARC         =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("PTOT",)),
+         ),
+
+         #  mots clés cachés pour variable de commande SECH :
+         #  --------------------------------------------------
+         VARC_SECH    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="SECH"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("SECH",)),
+         ),
+
+         #  mots clés cachés pour variable de commande HYDR :
+         #  --------------------------------------------------
+         VARC_HYDR    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="HYDR"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="HYDR_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("HYDR",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("HYDR",)),
+         ),
+
+         #  mots clés cachés pour variable de commande CORR :
+         #  --------------------------------------------------
+         VARC_CORR    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="CORR"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="CORR_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("CORR",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("CORR",)),
+         ),
+
+         #  mots clés cachés pour variable de commande IRRA :
+         #  --------------------------------------------------
+         VARC_IRRA    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="IRRA"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="IRRA_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("IRRA",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("IRRA",)),
+         ),
+
+         #  mots clés cachés pour variable de commande DIVU :
+         #  --------------------------------------------------
+         VARC_DIVU    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="DIVU"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="EPSI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("DIVU",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("DIVU",)),
+         ),
+
+         #  mots clés cachés pour variable de commande EPSA :
+         #  --------------------------------------------------
+         VARC_EPSA    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="EPSA"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="EPSI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=6,min=6,defaut=("EPXX","EPYY","EPZZ","EPXY","EPXZ","EPYZ",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=6,min=6,defaut=("EPSAXX","EPSAYY","EPSAZZ","EPSAXY","EPSAXZ","EPSAYZ",)),
+         ),
+         #  mots clés cachés pour variable de commande metallurgique ACIER :
+         #  -----------------------------------------------------------------
+         VARC_M_ACIER  =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="M_ACIER"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="VARI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=7,min=7,defaut=("V1","V2","V3","V4","V5","V6","V7")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=7,min=7,defaut=("PFERRITE","PPERLITE","PBAINITE",
+                                                                          "PMARTENS","TAUSTE","TRANSF","TACIER",)),
+         ),
+         #  mots clés cachés pour variable de commande metallurgique ZIRCALOY :
+         #  --------------------------------------------------------------------
+         VARC_M_ZIRC  =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="M_ZIRC"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="VARI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=4,min=4,defaut=("V1","V2","V3","V4")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=4,min=4,defaut=("ALPHPUR","ALPHBETA","TZIRC","TEMPS")),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 05/07/2011   AUTEUR FERNANDES R.FERNANDES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
+            UIinfo={"groupes":("Modélisation",)},
+                 fr="Définir le phénomène physique modélisé et le type d'éléments finis sur le maillage",reentrant='n',
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),UN_PARMI('MAILLAGE','GRILLE')),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
+         GRILLE          =SIMP(statut='f',typ=grille_sdaster),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ),
+#
+#====
+# Définition des grandeurs caractéristiques
+#====
+#
+         GRANDEUR_CARA =FACT(statut='f',max=1,
+         fr="Grandeurs caractéristiques pour l'adimensionnement des indicateurs d'erreur HM",
+         ang="Characteristic data for HM error estimators adimensionalisation",
+#
+            LONGUEUR      =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Longueur caractéristique",
+                                ang="Characteristic length",),
+            PRESSION      =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Pression caractéristique",
+                                ang="Characteristic pressure",),
+            TEMPERATURE   =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Température caractéristique",
+                                ang="Characteristic temperature",),),
+#
+         AFFE_SOUS_STRUC =FACT(statut='f',
+           regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           SUPER_MAILLE    =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+         ),
+         AFFE            =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           PHENOMENE       =SIMP(statut='o',typ='TXM',
+                                 into=("MECANIQUE","THERMIQUE","ACOUSTIQUE") ),
+                b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+                                        fr="modélisations mécaniques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                                  "2D_DIS_T",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_DIS_TR",       # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
+                                  "2D_FLUI_PESA",    # RESP. : GREFFET N.GREFFET
+                                  "2D_FLUI_STRU",    # RESP. : GREFFET N.GREFFET
+                                  "2D_FLUIDE",       # RESP. : GREFFET N.GREFFET
+                                  "3D",              # RESP. : DESROCHES X.DESROCHES
+                                  "3D_ABSO",         # RESP. : DEVESA G.DEVESA
+                                  "3D_FAISCEAU",     # RESP. : VOLDOIRE F.VOLDOIRE
+                                  "3D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
+                                  "3D_FLUIDE",       # RESP. : GREFFET N.GREFFET
+                                  "3D_INCO",         # RESP. : MICHEL S.MICHEL
+                                  "3D_INCO_UP",      # RESP. : SFAYOLLE
+                                  "3D_INCO_GD",      # RESP. : MICHEL S.MICHEL
+                                  "3D_SI",           # RESP. : DESROCHES X.DESROCHES
+                                  "3D_GRAD_EPSI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_GRAD_VARI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_GVNO",         # RESP. : BEAURAIN J.BEAURAIN
+                                  "3D_XFEM_CONT",    # RESP. : GENIAUT S.GENIAUT
+                                  "3D_JOINT",        # RESP. : LAVERNE J.LAVERNE
+                                  "3D_JOINT_HYME",   # RESP. : LAVERNE J.LAVERNE
+                                  "3D_INTERFACE",    # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS",            # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "AXIS_FLUI_STRU",  # RESP. : GREFFET N.GREFFET
+                                  "AXIS_FLUIDE",     # RESP. : GREFFET N.GREFFET
+                                  "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
+                                  "AXIS_INCO",       # RESP. : MICHEL S.MICHEL
+                                  "AXIS_INCO_UP",    # RESP. : SFAYOLLE
+                                  "AXIS_INCO_GD",    # RESP. : MICHEL S.MICHEL
+                                  "AXIS_SI",         # RESP. : DESROCHES X.DESROCHES
+                                  "AXIS_GRAD_VARI",  # RESP. : MICHEL S.MICHEL
+                                  "AXIS_GVNO",       # RESP. : BEAURAIN J.BEAURAIN
+                                  "AXIS_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS_INTERFACE",  # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS_ELDI",       # RESP. : LAVERNE J.LAVERNE
+                                  "BARRE",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_BARRE",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "C_PLAN",          # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "C_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+                                  "C_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
+                                  "C_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+                                  "CABLE",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "CABLE_POULIE",    # RESP. : None
+                                  "COQUE_3D",        # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_AXIS",      # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_C_PLAN",    # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_D_PLAN",    # RESP. : DESROCHES X.DESROCHES
+                                  "D_PLAN",          # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "D_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+                                  "D_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_GRAD_VARI",# RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_GVNO",     # RESP. : BEAURAIN J.BEAURAIN
+                                  "D_PLAN_GRAD_SIGM",# RESP. : GRANET S.GRANET
+                                  "PLAN_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_JOINT_HYME", # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_INTERFACE",  # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_ELDI",       # RESP. : LAVERNE J.LAVERNE
+                                  "D_PLAN_ABSO",     # RESP. : DEVESA G.DEVESA
+                                  "D_PLAN_INCO",     # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_INCO_UP",  # RESP. : SFAYOLLE
+                                  "D_PLAN_INCO_GD",  # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
+                                  "DIS_T",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "DIS_TR",          # RESP. : FLEJOU J.L.FLEJOU
+                                  "DKT",             # RESP. : DESROCHES X.DESROCHES
+                                  "DKTG",            # RESP. : MARKOVIC D.MARKOVIC
+                                  "DST",             # RESP. : DESROCHES X.DESROCHES
+                                  "FLUI_STRU",       # RESP. : GREFFET N.GREFFET
+                                  "GRILLE_EXCENTRE", # RESP. : ROSPARS C.ROSPARS
+                                  "GRILLE_MEMBRANE", # RESP. : ROSPARS C.ROSPARS
+                                  "POU_C_T",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_E",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_EM",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_T",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_T_GD",      # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_TG",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_TGM",       # RESP. : FLEJOU J.L.FLEJOU
+                                  "Q4G",             # RESP. : DESROCHES X.DESROCHES
+                                  "TUYAU_3M",        # RESP. : PROIX J.M.PROIX
+                                  "TUYAU_6M",        # RESP. : PROIX J.M.PROIX
+                                  "SHB",             # RESP. : DESROCHES X.DESROCHES
+                                  "D_PLAN_HHM",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HM",       # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THM",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHMD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2MD",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HMD",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2D",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THVD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2MD",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHMD",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THMD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHMS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2MS",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HMS",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2S",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THVS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2MS",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHMS",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THMS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HM_P",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HS",       # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHD",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHS",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2D",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2S",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_2DG",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_DIL",      # RESP. : GRANET S.GRANET
+                                  "3D_DIL",          # RESP. : GRANET S.GRANET
+                                  "AXIS_THM",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HHM",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HM",         # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2MD",      # RESP. : GRANET S.GRANET
+                                  "AXIS_HHMD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HMD",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2D",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THVD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THHMD",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2MD",     # RESP. : GRANET S.GRANET
+                                  "AXIS_THMD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2MS",      # RESP. : GRANET S.GRANET
+                                  "AXIS_HHMS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HMS",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2S",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THVS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THHMS",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2MS",     # RESP. : GRANET S.GRANET
+                                  "AXIS_THMS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HHD",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HHS",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2D",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2S",       # RESP. : GRANET S.GRANET
+                                  "3D_HHM" ,         # RESP. : GRANET S.GRANET
+                                  "3D_HM",           # RESP. : GRANET S.GRANET
+                                  "3D_THHM",         # RESP. : GRANET S.GRANET
+                                  "3D_THM",          # RESP. : GRANET S.GRANET
+                                  "3D_HHMD",         # RESP. : GRANET S.GRANET
+                                  "3D_HMD",          # RESP. : GRANET S.GRANET
+                                  "3D_THHD",         # RESP. : GRANET S.GRANET
+                                  "3D_THVD",         # RESP. : GRANET S.GRANET
+                                  "3D_THHMD",        # RESP. : GRANET S.GRANET
+                                  "3D_THMD",         # RESP. : GRANET S.GRANET
+                                  "3D_HHMS",         # RESP. : GRANET S.GRANET
+                                  "3D_HMS",          # RESP. : GRANET S.GRANET
+                                  "3D_THHS",         # RESP. : GRANET S.GRANET
+                                  "3D_THVS",         # RESP. : GRANET S.GRANET
+                                  "3D_THHMS",        # RESP. : GRANET S.GRANET
+                                  "3D_THMS",         # RESP. : GRANET S.GRANET
+                                  "3D_THH2MD",       # RESP. : GRANET S.GRANET
+                                  "3D_THH2MS",       # RESP. : GRANET S.GRANET
+                                  "3D_HH2MD",        # RESP. : GRANET S.GRANET
+                                  "3D_HH2MS",        # RESP. : GRANET S.GRANET
+                                  "3D_THH2S",        # RESP. : GRANET S.GRANET
+                                  "3D_THH2D",        # RESP. : GRANET S.GRANET
+                                  "3D_HS",           # RESP. : GRANET S.GRANET
+                                  "3D_HHD",          # RESP. : GRANET S.GRANET
+                                  "3D_HHS",          # RESP. : GRANET S.GRANET
+                                  "3D_HH2D",         # RESP. : GRANET S.GRANET
+                                  "3D_HH2S",         # RESP. : GRANET S.GRANET
+                                  "VF1",             # RESP. : GRANET S.GRANET
+                                  "3D_HH2SUDM",      # RESP. : GRANET S.GRANET
+                                  "3D_HH2SUDA",      # RESP. : GRANET S.GRANET
+                                  "3D_HH2SUC",       # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2SUDM",  # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2SUC",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2SUDA",  # RESP. : GRANET S.GRANET
+                                  "PLAN_JHMS",
+                                  "AXIS_JHMS",
+                                                                      )  )  ),
+
+                b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+                                        fr="modélisations thermiques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                                  "3D",              # RESP. : DURAND C.DURAND
+                                  "3D_DIAG",         # RESP. : DURAND C.DURAND
+                                  "AXIS",            # RESP. : DURAND C.DURAND
+                                  "AXIS_DIAG",       # RESP. : DURAND C.DURAND
+                                  "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE",           # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_AXIS",      # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_PLAN",      # RESP. : DESROCHES X.DESROCHES
+                                  "PLAN",            # RESP. : DURAND C.DURAND
+                                  "PLAN_DIAG",       # RESP. : DURAND C.DURAND
+                                                                      ),),),
+
+                b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+                                        fr="modélisations acoustiques",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                                  "3D",              # RESP. : None
+                                  "PLAN"             # RESP. : None
+                                                                       ), ),),
+
+         ),
+
+         PARTITION         =FACT(statut='d',
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="GROUP_ELEM",
+                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","CENTRALISE","GROUP_ELEM")),
+             b_dist_maille          =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
+                 CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0,val_max=100),
+             ),
+         ),
+
+         VERI_JACOBIEN  =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',
+                              fr ="Vérification de la forme des mailles (jacobiens tous de meme signe).",),
+) ;
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+def appl_cine_matr_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")
+
+APPL_CINE_MATR=OPER(nom="APPL_CINE_MATR",op=158,sd_prod=appl_cine_matr_prod,
+               fr="Appliquer les C.L. cinématiques sur la matrice",
+               reentrant='f', UIinfo={"groupes":("Résolution",)},
+         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) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+APPL_CINE_SCMB=OPER(nom="APPL_CINE_SCMB",op=159,sd_prod=cham_no_sdaster,reentrant='f',
+               fr="Application des C.L. cinématiques au second membre",
+               UIinfo={"groupes":("Résolution",)},
+         CHAM_NO        =SIMP(statut='o',typ=cham_no_sdaster),
+         MATR           =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_CINE       =SIMP(statut='f',typ=cham_no_sdaster),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+
+
+def asse_elem_ssd_prod(self,RESU_ASSE_SSD,**args):
+    MTYPES = {
+        'MODELE' : modele_gene,
+        'NUME_DDL_GENE' : nume_ddl_gene,
+        'RIGI_GENE' : matr_asse_gene_r,
+        'MASS_GENE' : matr_asse_gene_r,
+              }
+    for res in RESU_ASSE_SSD:
+        for mc, typ in MTYPES.items():
+            if res[mc]:
+                self.type_sdprod(res[mc], typ)
+    return None
+
+ASSE_ELEM_SSD=MACRO(nom="ASSE_ELEM_SSD",
+                    op=OPS('Macro.asse_elem_ssd_ops.asse_elem_ssd_ops'),
+                    sd_prod=asse_elem_ssd_prod,
+                    reentrant='n',
+                    fr="Enchainer les commandes DEFI_MODELE_GENE, NUME_DDL_GENE et ASSE_MATR_GENE",
+                    UIinfo={"groupes":("Matrices/vecteurs",)},
+
+# pour les concepts de sortie
+        RESU_ASSE_SSD = FACT( statut='o', max=1,
+                          regles=(PRESENT_PRESENT('RIGI_GENE','NUME_DDL_GENE'),
+                                  PRESENT_PRESENT('MASS_GENE','NUME_DDL_GENE'),),
+                              MODELE=SIMP(statut='o',typ=CO,defaut=None),
+                              NUME_DDL_GENE=SIMP(statut='f',typ=CO,defaut=None),
+                              RIGI_GENE=SIMP(statut='f',typ=CO,defaut=None),
+                              MASS_GENE=SIMP(statut='f',typ=CO,defaut=None),
+                           ),
+
+        INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+
+# pour DEFI_MODELE_GENE
+        SOUS_STRUC      =FACT(statut='o',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=3),
+           TRANS           =SIMP(statut='f',typ='R',max=3),
+         ),
+        LIAISON         =FACT(statut='o',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' ),
+           regles=(EXCLUS('GROUP_MA_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),
+                   EXCLUS('MAILLE_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),),
+           GROUP_MA_MAIT_1   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_1     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_MAIT_2   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_2     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           OPTION            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("REDUIT","CLASSIQUE") ),
+         ),
+        VERIF           =FACT(statut='d',max=1,
+           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") ),
+         ),
+
+
+# pour NUME_DDL_GENE
+        METHODE      =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","ELIMINE") ),
+        STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
+
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
+                   fr="Assembler deux maillages pour en former un nouveau",
+                   reentrant='n',
+                   UIinfo={"groupes":("Maillage",)},
+         MAILLAGE_1 =  SIMP(statut='o',typ=maillage_sdaster,),
+         MAILLAGE_2 =  SIMP(statut='o',typ=maillage_sdaster,),
+         OPERATION  =  SIMP(statut='o',typ='TXM',into=("SOUS_STR","SUPERPOSE","COLLAGE"),),
+         b_collage  =  BLOC(condition = "OPERATION == 'COLLAGE'",
+           COLLAGE  =  FACT(statut='o',
+              GROUP_MA_1     =SIMP(statut='o',typ=grma),
+              GROUP_MA_2     =SIMP(statut='o',typ=grma),
+                             ),
+                           ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+def asse_matr_gene_prod(METHODE,**args):
+    if   (METHODE=="INITIAL") : return matr_asse_gene_r
+    elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c
+    else : return matr_asse_gene_r
+
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod,
+                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+         b_option     =BLOC(condition = "METHODE == 'CLASSIQUE'",
+           OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ),
+           ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET 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",reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         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_sdaster),
+         SYME            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
+                    fr="Projection des chargements sur la base modale d'une sous structure",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+         b_nume     =BLOC(condition = "METHODE == 'CLASSIQUE'",
+             CHAR_SOUS_STRUC =FACT(statut='o',max='**',
+             SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+             VECT_ASSE       =SIMP(statut='o',typ=cham_no_sdaster ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
+                  fr="Construire un champ aux noeuds par assemblage de vecteurs élémentaires",reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
+                     fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+       regles=(EXCLUS('AMOR_RAYLEIGH','ENER_SOL',),
+               EXCLUS('AMOR_RAYLEIGH','AMOR_INTERNE',),
+               EXCLUS('AMOR_RAYLEIGH','AMOR_SOL',),
+               PRESENT_PRESENT('ENER_SOL','AMOR_INTERNE'),
+               PRESENT_PRESENT('ENER_SOL','AMOR_SOL'),
+               ),
+         AMOR_RAYLEIGH   =FACT(statut='f',
+           AMOR_ALPHA      =SIMP(statut='o',typ='R'),
+           AMOR_BETA       =SIMP(statut='o',typ='R'),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         ),
+         ENER_SOL        =FACT(statut='f',
+           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,validators=NoRepeat(),max='**'),
+           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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=3),
+         ),
+         AMOR_INTERNE    =FACT(statut='f',
+           ENER_POT        =SIMP(statut='o',typ=table_sdaster ),
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
+         ),
+         AMOR_SOL        =FACT(statut='f',
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FONC_AMOR_GEO   =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+           HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
+                    fr="Calculer un champ élémentaire en thermique et en accoustique à partir de champs déjà calculés",
+                    reentrant='n',
+            UIinfo={"groupes":("Résultats et champs","Post-traitements",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         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,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+#
+#
+#  introduire un mot cle de type modelisation : mécanique,thermique,...
+#
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("FLUX_ELGA","FLUX_ELNO",
+                                     "PRAC_ELNO",
+                                     "COOR_ELGA"), ),
+
+         b_thermique  =BLOC(condition="OPTION in ('FLUX_ELNO','FLUX_ELGA',)",
+           TEMP            =SIMP(statut='o',typ=(cham_no_sdaster,)),
+         ),
+
+         b_acoustique  =BLOC(condition="OPTION in ('PRAC_ELNO',)",
+           PRES            =SIMP(statut='o',typ=(cham_no_sdaster,)),
+         ),
+
+
+
+         EXCIT           =FACT(statut='f',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_sdaster,nappe_sdaster,formule)),
+               COEF_MULT       =SIMP(statut='f',typ='R'), ),
+
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0),
+         ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+         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 12/10/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+def calc_champ_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_CHAMP=OPER(nom="CALC_CHAMP",op=52,sd_prod=calc_champ_prod,reentrant='f',
+                UIinfo={"groupes":("Post traitements",)},
+                fr="Completer ou creer un resultat en calculant des champs par elements ou aux noeuds",
+     MODELE           = SIMP(statut='f',typ=modele_sdaster),
+     CHAM_MATER       = SIMP(statut='f',typ=cham_mater),
+     CARA_ELEM        = SIMP(statut='f',typ=cara_elem),
+
+     RESULTAT         = SIMP(statut='o',typ=resultat_sdaster,position='global',
+                             fr="Resultat d'une commande globale"),
+
+     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',validators=NoRepeat(),max='**'),
+     NUME_MODE        = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NOEUD_CMP        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NOM_CAS          = SIMP(statut='f',typ='TXM' ),
+     INST             = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     FREQ             = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     LIST_INST        = SIMP(statut='f',typ=listr8_sdaster),
+     LIST_FREQ        = SIMP(statut='f',typ=listr8_sdaster),
+     CRITERE          = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+     b_prec_rela = BLOC(condition="(CRITERE=='RELATIF')",
+          PRECISION   = SIMP(statut='f',typ='R',defaut= 1.E-6),),
+     b_prec_abso = BLOC(condition="(CRITERE=='ABSOLU')",
+          PRECISION   = SIMP(statut='o',typ='R'),),
+     LIST_ORDRE       = SIMP(statut='f',typ=listis_sdaster),
+
+     TOUT             = SIMP(statut='f',typ='TXM',into=("OUI",),
+                             fr="le calcul sera effectue sur toutes les mailles"),
+     GROUP_MA         = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                             fr="le calcul ne sera effectue que sur ces groupes de mailles"),
+     MAILLE           = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                             fr="le calcul ne sera effectue que sur ces mailles"),
+     GROUP_NO         = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                             fr="le calcul ne sera effectue que sur ces groupes de noeuds"),
+     NOEUD            = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                             fr="le calcul ne sera effectue que sur ces noeuds"),
+
+     EXCIT       = FACT(statut='f',max='**',
+                        fr="Charges contenant les temperatures, les efforts repartis pour les poutres...",
+                        regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+         CHARGE       = SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
+         FONC_MULT    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         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",),),),
+
+     # Bloc lineaire
+     b_lineaire  = BLOC(condition = "AsType(RESULTAT) in (evol_elas,dyna_trans,dyna_harmo,mode_meca,\
+                                                          comb_fourier,mult_elas,fourier_elas,mode_flamb)",
+         CONTRAINTE   = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de contraintes et efforts generalises",
+                             into=(
+                                    "SIEF_ELGA","SIEF_ELNO","SIEF_NOEU",
+                                    "SIGM_ELGA","SIGM_ELNO","SIGM_NOEU",
+                                    "EFGE_ELGA",
+                                    "SIPO_ELNO","SIPO_NOEU",
+                                    #"EFGE_ELNO",
+                                    "EFGE_NOEU",
+                                    #"EFCA_ELNO",
+                                    #"EFCA_NOEU"
+                                    "SICA_ELNO","SICA_NOEU",
+                                    "SITU_ELNO",
+                                    #"SIRO_ELEM",
+                                    "SIPM_ELNO",
+                                  ),
+                            ),
+         DEFORMATION  = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de deformations",
+                             into=(
+                                    "EPSI_ELNO","EPSI_ELGA","EPSG_ELGA","EPSG_ELNO",
+                                    "EPME_ELNO","EPME_ELGA","DEGE_ELNO","DEGE_ELGA",
+                                    "EPTU_ELNO","EPVC_ELNO","EPVC_ELGA","EPSI_NOEU",
+                                    "EPSG_NOEU","EPVC_NOEU",
+                                  ),
+                            ),
+         ENERGIE      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul d'energies",
+                             into=(
+                                    "EPOT_ELEM","ECIN_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                    "ENEL_NOEU",
+                                    #"ETOT_ELGA",
+                                    #"ETOT_ELNO",
+                                    #"ETOT_ELEM",
+                                    "DISS_ELGA","DISS_ELNO","DISS_NOEU",
+                                  ),
+                             ),
+         CRITERES     = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de criteres",
+                             into=(
+                                    #"SIEQ_ELNO","SIEQ_NOEU",
+                                    "SIEQ_ELGA",
+                                    "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                    "ENDO_ELGA","ENDO_ELNO","ENDO_NOEU","EPEQ_NOEU",
+                                    "SITQ_ELNO","EPTQ_ELNO",
+                                  ),
+                            ),
+         VARI_INTERNE = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de variables internes",
+                             into=( "VARC_ELGA", ),),
+                     ),
+
+     # Bloc non-lineaire
+     b_non_lin  = BLOC(condition = "AsType(RESULTAT) in (evol_noli,)",
+         CONTRAINTE   = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de contraintes et efforts generalises",
+                             into=(
+                                                "SIEF_ELNO","SIEF_NOEU",
+                                    "SIGM_ELGA","SIGM_ELNO","SIGM_NOEU",
+                                    "EFGE_ELGA",
+                                    #"EFCA_ELNO","EFCA_NOEU"
+                                    "SITU_ELNO","SIPO_ELNO","SIPO_NOEU",
+                                  ),
+                            ),
+
+         DEFORMATION  = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de deformations",
+                             into=(
+                                    "EPSI_ELNO","EPSI_ELGA","EPSG_ELNO","EPSG_ELGA","EPSG_NOEU",
+                                    "EPME_ELNO","EPME_ELGA","EPMG_ELNO","EPMG_ELGA","EPMG_NOEU",
+                                    "EPSP_ELNO","EPSP_ELGA","DEGE_ELNO","EPVC_ELNO","EPVC_ELGA",
+                                    "EPFD_ELNO","EPFD_ELGA","EPFP_ELNO","EPFP_ELGA","EPTU_ELNO",
+                                    "EPSI_NOEU","EPSP_NOEU","EPVC_NOEU","EPFD_NOEU","EPFP_NOEU",
+                                  ),
+                            ),
+
+         ENERGIE      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul d'energies",
+                             into=(
+                                    #"ETOT_ELGA",
+                                    #"ETOT_ELNO",
+                                    #"ETOT_ELEM",
+                                    "ENEL_ELGA","ENEL_ELNO","ENEL_NOEU",
+                                    "DISS_ELGA","DISS_ELNO",
+                                  ),
+                             ),
+
+         CRITERES     = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de criteres",
+                             into=(
+                                    #"SIEQ_ELNO","SIEQ_NOEU",
+                                    "SIEQ_ELGA",
+                                    "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                    "EPMQ_NOEU","EPEQ_NOEU",
+                                    "ENDO_ELGA","ENDO_ELNO","ENDO_NOEU",
+                                    "PMPB_ELNO","PMPB_ELGA","SITQ_ELNO","EPTQ_ELNO",
+                                    "PMPB_NOEU",
+                                  ),
+                            ),
+
+         VARI_INTERNE = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de variables internes",
+                             into=(
+                                    "VARI_ELNO","VARI_NOEU","VATU_ELNO","VACO_ELNO",
+                                    "VAEX_ELGA","VAEX_NOEU","VAEX_ELNO",
+                                  ),
+                            ),
+
+         b_nom_vari   = BLOC(condition = "au_moins_un(VARI_INTERNE, ('VAEX_ELNO','VAEX_ELGA','VAEX_NOEU'))",
+             NOM_VARI = SIMP(statut='o',typ='TXM',min= 1,max='**',
+                             fr="nom de la variable a extraire",
+               into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+                     "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+                     "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+                     "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4",
+                    ),
+                            ),
+                            ),
+
+         HYDRAULIQUE  = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour le calcul de flux hydraulique",
+                             into=(
+                                    "FLHN_ELGA",
+                                  ),
+                            ),
+                      ),
+
+     # Bloc Thermique
+     b_ther = BLOC(condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,
+         THERMIQUE    = SIMP(statut='f',typ='TXM',validators=NoRepeat(), max='**',
+                             fr="Options pour le calcul de champs en thermique",
+                             into=(
+                                    "FLUX_ELGA","FLUX_ELNO","FLUX_NOEU",
+                                    "DURT_ELNO","SOUR_ELGA","ERTH_ELEM","ERTH_ELNO",
+                                    "DURT_NOEU",
+                                  ),
+                            ),
+                  ),
+
+     # Bloc acoustique
+     b_acou = BLOC(condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,dyna_harmo)",
+         ACOUSTIQUE   = SIMP(statut='f',typ='TXM',validators=NoRepeat(), max='**',
+                             fr="Options pour le calcul de champs en acoustique",
+                             into=(
+                                    "PRAC_ELNO","PRAC_NOEU",
+                                    "INTE_ELNO","INTE_NOEU",
+                                  ),
+                            ),
+                  ),
+
+     # Bloc FORC_NODA et REAC_NODA
+     FORCE            = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                             fr="Options pour des forces nodales et des reactions nodales",
+                             into=("FORC_NODA","REAC_NODA",),
+                            ),
+
+     # Mot-cle facteur CHAMp UTILisateur
+     CHAM_UTIL = FACT(statut='f', max='**',
+          regles = (UN_PARMI('FORMULE', 'CRITERE'), ),
+          NOM_CHAM = SIMP(statut='o', typ='TXM',
+                          fr="Nom du champ utilisé en donnée",),
+          FORMULE  = SIMP(statut='f', typ=formule, max='**',
+                          fr="Formule permet d'obtenir le critère",),
+          CRITERE  = SIMP(statut='f', typ='TXM',
+                          into=('TRACE', 'VMIS', 'INVA_2'),
+                          fr="Calcule d'un critère pré-défini",),
+          NUME_CHAM_RESU = SIMP(statut='o', typ='I', val_min=1, val_max=20,
+                          fr="Numéro du champ produit. Exemple: 6 produit le champ UT06",),
+     ),
+
+     INFO             = SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
+
+     TITRE            = SIMP(statut='f',typ='TXM',max='**'),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
+                    fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
+         CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ),validators=NoRepeat(),max='**' ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def calc_char_seisme_prod(MATR_MASS,**args ):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_sdaster
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
+                      reentrant='n',fr="Calcul du chargement sismique",
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         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=6,fr="Directions du séisme imposé"),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         MODE_STAT       =SIMP(statut='f',typ=(mode_meca,) ),
+         b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR CORUS M.CORUS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+CALC_CORR_SSD=OPER(nom="CALC_CORR_SSD",op=  91,sd_prod=table_container,
+                    fr="Qualite d'un modele reduit en dynamique",
+                    reentrant='n',
+            UIinfo={"groupes":("Dynamique",)},
+         MODELE_GENE    =SIMP(statut='o',typ=modele_gene),
+         RESU_GENE      =SIMP(statut='o',typ=mode_gene ),
+         UNITE          =SIMP(statut='f',typ='I',defaut=6,),   
+         SHIFT          =SIMP(statut='f',typ='R',defaut= 1. ),
+         VERIF          =FACT(statut='f',max='**',
+           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") ),
+         ),
+         TITRE          =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+
+def calc_ecrevisse_prod(self,CHARGE_MECA,CHARGE_THER1,CHARGE_THER2,TABLE,DEBIT,**args):
+
+  self.type_sdprod(CHARGE_MECA,char_meca)
+  self.type_sdprod(CHARGE_THER1,char_ther)
+  self.type_sdprod(CHARGE_THER2,char_ther)
+  self.type_sdprod(TABLE,table_sdaster)
+  self.type_sdprod(DEBIT,table_sdaster)
+  return None
+
+
+
+CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",
+                     op=OPS('Macro.calc_ecrevisse_ops.calc_ecrevisse_ops'),
+                     sd_prod=calc_ecrevisse_prod,
+                     reentrant='n',
+                     UIinfo={"groupes":("Outils-métier",)},fr="Procedure de couplage avec Ecrevisse",
+                     regles   = (UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPTS SORTANTS : 2 CHARGEMENTS THERMIQUE + 1 MECANIQUE + 2 TABLES POUR LE POST-TRAITEMENT
+#      ********************************************
+         CHARGE_MECA        =SIMP(statut='o',typ=CO),
+         CHARGE_THER1       =SIMP(statut='o',typ=CO),
+         CHARGE_THER2       =SIMP(statut='o',typ=CO),
+         TABLE              =SIMP(statut='o',typ=CO),
+         DEBIT              =SIMP(statut='o',typ=CO),
+
+
+#      MODELES MECANIQUES
+#      ********************************************
+         MODELE_MECA        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_THER        =SIMP(statut='o',typ=modele_sdaster),
+
+
+#      DONNEES GEOMETRIQUES RELATIVES AUX RESULTATS
+#      ********************************************
+         RESULTAT           =FACT(statut='o',min=1,max=1,
+           MECANIQUE           =SIMP(statut='o',typ=resultat_sdaster),
+           THERMIQUE           =SIMP(statut='o',typ=resultat_sdaster),
+           regles=(EXCLUS('NUME_ORDRE','INST'),),
+           NUME_ORDRE          =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           INST                =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         ),
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+
+         FISSURE            =FACT(statut='o',min=1,max='**',
+           PREFIXE_FICHIER     =SIMP(statut='f',typ='TXM',validators=LongStr(1,8),),
+           GROUP_MA            =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+                                     fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+           GROUP_NO_ORIG       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           GROUP_NO_EXTR       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+           OUVERT_REMANENTE    =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+           TORTUOSITE          =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+                                       fr="Coefficient de tortuosite de la fissure" ),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section", ),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section", ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+
+         ECOULEMENT         =FACT(statut='o',min=1,max=1,
+           PRES_ENTREE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='o',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION    =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE        =FACT(statut='o',min=1,max=1,
+           KGTEST              =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                     fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI      =SIMP(statut='f',typ='I',defaut= 400,
+                                     fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI      =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                     fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+#      GENERAL
+#      *******
+
+         COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',into = ("3.1.1","3.1.2","3.2")),
+         ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+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,reentrant='f',
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+            fr="Compléter ou créer un résultat en calculant des champs par éléments (contraintes, déformations,... )",
+     MODELE          =SIMP(statut='f',typ=modele_sdaster),
+     CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+     RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Résultat d'une commande globale"),
+
+     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',validators=NoRepeat(),max='**'),
+     NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+     INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+     LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+     CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+     b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+     b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+         PRECISION       =SIMP(statut='o',typ='R'),),
+     LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+     TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+     MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+
+#    definition d'un repere local
+
+     REPE_COQUE      =FACT(statut='f',max='**',
+                           fr="définiton du lieu de post-traitement",
+          TOUT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+          GROUP_MA     =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',),
+          MAILLE       =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',),
+
+          NUME_COUCHE  =SIMP(statut='f',typ='I',defaut= 1,
+                             fr="numero de couche dans l'épaisseur de la coque ou du tuyau" ),
+          NIVE_COUCHE  =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
+                             fr="position dans l'épaisseur de la coque, ou de la couche" ),
+
+          ANGLE        =SIMP(statut='f',typ='I',defaut= 0,
+                             fr="angle de dépouillement pour les tuyaux, en degres à partir de la génératrice" ),
+                            ),
+
+#    options pour des resultats lineaires
+
+     b_lineaire =BLOC( condition = "AsType(RESULTAT) in (evol_elas,dyna_trans,dyna_harmo,mode_meca,\
+                                                         comb_fourier,mult_elas,fourier_elas,mode_flamb)",
+                                                               fr="options mecaniques lineaires",
+          TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques lineaires",
+                           into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","DERIVEES",
+                                 "INDI_ERREUR","AUTRES","TOUTES"),
+                           ),
+          b_toutes=BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol elas",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="SIEF_ELNO",
+                              #  contraintes
+                           into=( "SIEF_ELNO","SIGM_ELNO","SIEF_ELGA","EFGE_ELGA",
+                                  "SIPO_ELNO","EFGE_ELNO","EFCA_ELNO","SICA_ELNO",
+                                  "SITU_ELNO","SIRO_ELEM","SIPM_ELNO","SICO_ELNO",
+                              # déformations
+                                 "EPSI_ELNO","EPSI_ELGA","EPSG_ELGA","EPSG_ELNO",
+                                 "EPME_ELNO","EPME_ELGA","DEGE_ELNO","EPTU_ELNO",
+                                 "EPVC_ELNO","EPVC_ELGA","DEGE_ELGA",
+                              #  ENER
+                                 "EPOT_ELEM","ECIN_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                 "ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","DISS_ELGA","DISS_ELNO",
+                              #  estimateurs erreur
+                                 "SIZ1_NOEU","ERZ1_ELEM","SIZ2_NOEU","ERZ2_ELEM",
+                                 "ERME_ELEM","ERME_ELNO",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",
+                              #  CRIT
+                                 "SIEQ_ELNO","SIEQ_ELGA",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO",
+                                 "SITQ_ELNO","EPTQ_ELNO",
+                              #  autres
+                                 "PRME_ELNO","VARC_ELGA"),),
+
+                b_erre_qi =BLOC(condition = "au_moins_un(OPTION, ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM'))",
+                    RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
+
+               b_sing =BLOC(condition= "'SING_ELEM' in OPTION",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements"),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+               EXCIT           =FACT(statut='f',max='**',
+                                     fr="Charges contenant les températures, les efforts répartis pour les poutres...",
+                                     regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    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",),),),
+
+
+                            ),
+#             fin bloc b_toutes
+
+          b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
+                                     fr="options de contraintes elasticite 2D et 3D",
+              OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO',
+                            fr="option de calcul des contraintes",
+                           into=( "SIEF_ELNO","SIGM_ELNO","SIEF_ELGA",),),
+
+                    b_charge =BLOC( condition = "au_moins_un(OPTION, ('SIGM_ELNO','SIEF_ELGA'))",
+                                      fr="charge contenant les temperatures ou autre charge",
+                         EXCIT           =FACT(statut='f',max='**',
+                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),),
+                                    ),
+                                  ),
+
+          b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
+                                      fr="options de contraintes elasticite poutres, coques, tuyaux",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO',
+                            fr="option de calcul des contraintes ou efforts generalises",
+                            into=( "SIEF_ELNO","SIGM_ELNO","SIEF_ELGA","SITU_ELNO",
+                                   "SIPO_ELNO","EFGE_ELGA","EFGE_ELNO","EFCA_ELNO","SICA_ELNO",
+                                   ),),
+
+               b_charge =BLOC( condition = "au_moins_un(OPTION, ('SIGM_ELNO','SIEF_ELGA', \
+                                                                 'SIPO_ELNO','EFGE_ELNO',)) ",
+                                            fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
+                    EXCIT           =FACT(statut='f',max='**',
+                                          regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca) ),
+                         FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                         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",),),),
+                             ),
+
+
+                            ),
+#          fin bloc contraintes struct
+
+          b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("EPSI_ELNO","EPSI_ELGA","EPME_ELNO","EPME_ELGA",
+                                 "DEGE_ELNO","DEGE_ELGA","EPTU_ELNO","EPVC_ELNO","EPVC_ELGA",),
+                                 ),
+b_charge =BLOC( condition = "au_moins_un(OPTION, ('EPME_ELNO','EPSI_ELGA','EPME_ELGA','EPSI_ELNO','EPTU_ELNO'))",
+                                      fr="charge contenant les temperatures",
+                    EXCIT           =FACT(statut='f',max='**',
+                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou,char_cine_meca,) ),),
+                                 ),
+                                       ),
+          b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("EPOT_ELEM","ECIN_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                 "ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","DISS_ELGA","DISS_ELNO",),
+                                 ),
+               b_charge =BLOC( condition = "au_moins_un(OPTION, ('EPOT_ELEM','ECIN_ELEM','ENEL_ELGA','ENEL_ELNO'))",
+                                      fr="charge contenant les temperatures",
+                    EXCIT           =FACT(statut='f',max='**',
+                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
+                              ),
+                                 ),
+
+          b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("SIEQ_ELNO","SIEQ_ELGA",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO",
+                                 "SITQ_ELNO","EPTQ_ELNO",
+                                 ) ),
+                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+
+
+          b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
+                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("PRME_ELNO",),
+                                 ) ),
+
+          b_indi_erreur        =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERME_ELEM",
+                           into=("SIZ1_NOEU","ERZ1_ELEM","SIZ2_NOEU","ERZ2_ELEM",
+                                 "ERME_ELEM","ERME_ELNO",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",
+                                 )),
+
+               b_erre_qi =BLOC(condition = "au_moins_un(OPTION, ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM'))",
+                    RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
+
+               b_sing =BLOC(condition= "'SING_ELEM' in OPTION",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+                                 ),
+#    fin bloc lineaire
+
+#    statique ou dynamique non lineaire : evol_noli
+     b_noli          =BLOC( condition = "AsType(RESULTAT) == evol_noli",fr="options mecaniques non lineaires",
+          TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques non lineaires",
+                           into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","FLUX",
+                                 "VARI","INDI_ERREUR","TOUTES","AUTRES"),
+                          ),
+          b_toutes =BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol noli",
+               OPTION      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=( "SIEF_ELNO","SIRO_ELEM",
+                                  "SITU_ELNO","SICO_ELNO","EFGE_ELGA","SIGM_ELNO",
+                                  "EFCA_ELNO","SIPO_ELNO","SIPM_ELNO",
+                                  "FLHN_ELGA",
+                                  # EPSI
+                                  "EPSI_ELNO","EPSI_ELGA","EPSG_ELNO","EPSG_ELGA",
+                                 "EPME_ELNO","EPME_ELGA","EPMG_ELNO","EPMG_ELGA",
+                                 "DEGE_ELNO","EPTU_ELNO",
+                                 "EPSP_ELNO","EPSP_ELGA",
+                                 "EPFD_ELNO","EPFD_ELGA","EPVC_ELNO","EPVC_ELGA",
+                                 "EPFP_ELNO","EPFP_ELGA",
+                                 "VARC_ELGA","DEGE_ELGA",
+                                 "VARI_ELNO","VATU_ELNO","VACO_ELNO",
+                                 "VAEX_ELGA","VAEX_ELNO",
+                                 # CRIT
+                                 "SIEQ_ELNO","SIEQ_ELGA","SITQ_ELNO","EPTQ_ELNO",
+                                 "ERME_ELEM","ERME_ELNO","ERZ1_ELEM","ERZ2_ELEM",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "DERA_ELNO","DERA_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO","INDL_ELGA","SING_ELEM",
+                                 "SING_ELNO","PDIL_ELGA",
+                                 "PMPB_ELNO","PMPB_ELGA","ENEL_ELGA","ENEL_ELNO",
+                                 "ETOT_ELGA","ETOT_ELNO","ETOT_ELEM",
+                                 "DISS_ELGA","DISS_ELNO"),
+                               ),
+
+
+               b_erre_qi =BLOC(condition = "au_moins_un(OPTION, ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM'))",
+                    RESU_DUAL=SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual"),),
+
+               b_sing =BLOC(condition= "'SING_ELEM' in OPTION",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+
+               b_extr = BLOC( condition = "au_moins_un(OPTION, ('VAEX_ELNO','VAEX_ELGA'))",
+                             NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
+                         into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+                               "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+                               "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+                               "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4",),),
+                            ),
+               EXCIT           =FACT(statut='f',max='**',
+                                      regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=char_meca ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    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",),),),
+                         ),
+
+          b_flux =BLOC( condition = "TYPE_OPTION == 'FLUX'",
+                                      fr="option de calcul de flux hydraulique 2D et 3D",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                              #  flux hydraulique
+                           into=( "FLHN_ELGA",),),
+                            ),
+
+          b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
+                                      fr="options de contraintes non lin 2D et 3D",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                              #  contraintes
+                           into=( "SIEF_ELNO",),),
+                            ),
+
+          b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
+                                       fr="options de contraintes non lin poutres, coques",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                              #  contraintes
+                           into=( "SIEF_ELNO","EFCA_ELNO","SITU_ELNO","SICO_ELNO","EFGE_ELGA",
+                           ),),
+                             ),
+
+          b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=( "EPSI_ELNO","EPSI_ELGA","EPSG_ELNO","EPSG_ELGA",
+                                 "EPME_ELNO","EPME_ELGA","EPMG_ELNO","EPMG_ELGA",
+                                 "EPSP_ELNO","EPSP_ELGA","DEGE_ELNO","EPVC_ELNO","EPVC_ELGA",
+                                 "EPFD_ELNO","EPFD_ELGA","EPFP_ELNO","EPFP_ELGA","DEGE_ELGA",),
+                                 ),
+               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+         b_epstuyo       =BLOC( condition = "'EPTU_ELNO' in OPTION",
+              EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                               ),
+
+          b_vari         =BLOC( condition = "TYPE_OPTION=='VARI'",
+                                       fr="Calcul et extraction des variables internes",
+                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                                   into=("VARI_ELNO","VATU_ELNO","VACO_ELNO",
+                                         "VAEX_ELGA","VAEX_ELNO"),
+                                 ),
+          b_extr         =BLOC( condition = "au_moins_un(OPTION, ('VAEX_ELNO','VAEX_ELGA'))",
+                   NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
+                         into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+                               "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+                               "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+                               "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4"),),
+                            ),
+                           ),
+
+          b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("ETOT_ELGA","ETOT_ELNO","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO",
+                                 "DISS_ELGA","DISS_ELNO",),
+                                 ),
+               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+
+          b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("SIEQ_ELNO","SIEQ_ELGA",
+                                 "EPEQ_ELNO","EPEQ_ELGA","EPMQ_ELNO","EPMQ_ELGA",
+                                 "ENDO_ELGA","ENDO_ELNO",
+                                 "PMPB_ELNO","PMPB_ELGA","SITQ_ELNO","EPTQ_ELNO",
+                                 ) ),
+                                 ),
+
+
+          b_indi_erreur         =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERME_ELEM",
+                           into=("ERME_ELEM","ERME_ELNO","ERZ1_ELEM","ERZ2_ELEM",
+                                 "DERA_ELNO","DERA_ELGA",
+                                 "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",) ),
+
+               b_erre_qi =BLOC(condition = "au_moins_un(OPTION, ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM'))",
+                RESU_DUAL    =SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual")),
+
+               b_sing =BLOC(condition= "'SING_ELEM' in OPTION",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+                                 ),
+                                 ),
+#          fin bloc evol_noli
+
+#           thermique : evol_ther, fourier_ther
+     b_ther          =BLOC( condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,fr="options thermiques",
+          OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("FLUX_ELGA","FLUX_ELNO",
+                                  "DURT_ELNO","SOUR_ELGA","ERTH_ELEM","ERTH_ELNO",),),
+               EXCIT           =FACT(statut='f',max='**',
+                    regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=char_ther ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    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",),),
+                                     ),
+                                 ),
+
+#    acoustique
+     b_acou          =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques",
+          OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("PRAC_ELNO", "INTE_ELNO",
+                                 ),),
+          EXCIT           =FACT(statut='f',max='**',
+                regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                CHARGE          =SIMP(statut='o',typ=char_acou ),
+                FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                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",),),),
+                                 ),
+
+#-------------------------------------------------------------------
+#    Catalogue commun SOLVEUR (utilisé actuellement pour estimateur d'erreur ZZ1)
+     SOLVEUR         =C_SOLVEUR('CALC_ELEM'),
+#-------------------------------------------------------------------
+
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+     TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DELMAS J.DELMAS
+def calc_erreur_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_ERREUR=OPER(nom="CALC_ERREUR",op=42,sd_prod=calc_erreur_prod,reentrant='f',
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+            fr="Compléter ou créer un résultat en calculant des champs d'erreur",
+     MODELE          =SIMP(statut='f',typ=modele_sdaster),
+     CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+
+     RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Résultat d'une commande globale"),
+
+     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',validators=NoRepeat(),max='**'),
+     NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+     INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+     LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+     CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+     b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+     b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+         PRECISION       =SIMP(statut='o',typ='R'),),
+     LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+     TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="Le calcul ne sera effectué que sur ces mailles là"),
+     MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                           fr="Le calcul ne sera effectué que sur ces mailles là"),
+
+#-----------------------------------------------------------------------
+# pour conserver la compatibilité mais ne sert à rien
+#-----------------------------------------------------------------------
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+     EXCIT           =FACT(statut='f',max='**',
+                           fr="Charges contenant les températures, les efforts répartis pour les poutres...",
+                           regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    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",),),),
+#-----------------------------------------------------------------------
+
+     OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("SIZ1_NOEU","ERZ1_ELEM",
+                                 "SIZ2_NOEU","ERZ2_ELEM",
+                                 "ERME_ELEM","ERME_ELNO",
+                                 "QIRE_ELEM","QIRE_ELNO",
+                                 "QIZ1_ELEM","QIZ2_ELEM",
+                                 "SING_ELEM","SING_ELNO",
+                                 "ERTH_ELEM","ERTH_ELNO",),),
+
+     b_erre_qi =BLOC(condition = "au_moins_un(OPTION, ('QIRE_ELEM','QIZ1_ELEM','QIZ2_ELEM'))",
+                     RESU_DUAL=SIMP(statut='o',typ=resultat_sdaster,fr="Résultat du problème dual"),),
+
+     b_sing    =BLOC(condition= "'SING_ELEM' in OPTION",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="Précision demandée pour calculer la carte de taille des éléments"),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERME_ELEM","ERZ1_ELEM","ERZ2_ELEM",
+                                                              "QIRE_ELEM","QIZ1_ELEM","QIZ2_ELEM",),
+                                   fr="Choix de l'estimateur d'erreur"),),
+
+#-------------------------------------------------------------------
+#    Catalogue commun SOLVEUR (utilisé actuellement pour estimateur d'erreur ZZ1)
+     SOLVEUR         =C_SOLVEUR('CALC_ERREUR'),
+#-------------------------------------------------------------------
+
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+     TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+# RESPONSABLE NISTOR I.NISTOR
+
+
+def calc_essai_prod(self,RESU_IDENTIFICATION,
+                    RESU_MODIFSTRU,
+                    **args):
+
+    if RESU_IDENTIFICATION != None:
+        for res in RESU_IDENTIFICATION:
+            self.type_sdprod(res['TABLE'],table_fonction)
+
+    MTYPES = {
+        'MODELE'    : modele_sdaster,
+        'MODE_MECA' : mode_meca,
+        'NUME_DDL'  : nume_ddl_sdaster,
+        'MAILLAGE'  : maillage_sdaster,
+        'MASS_MECA' : matr_asse_depl_r,
+        'RIGI_MECA' : matr_asse_depl_r,
+        'AMOR_MECA' : matr_asse_depl_r,
+        'MACR_ELEM' : macr_elem_stat,
+        'PROJ_MESU' : mode_gene,
+        'BASE_ES'   : mode_meca,
+        'BASE_LMME' : mode_meca,
+        'MODE_STA'  : mode_meca,
+              }
+    if RESU_MODIFSTRU != None:
+        for res in RESU_MODIFSTRU:
+            for mc, typ in MTYPES.items():
+                if res[mc]:
+                    self.type_sdprod(res[mc], typ)
+    return None
+
+
+CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
+                   op        = OPS('Macro.calc_essai_ops.calc_essai_ops'),
+                   sd_prod   = calc_essai_prod,
+                   reentrant = 'n',
+                   UIinfo    = {"groupes":("Outils-métier","Dynamique",)},
+                   fr        = "Outil de post-traitement interactif pour Meidee ",
+                   INTERACTIF  = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
+                   RESU_IDENTIFICATION = FACT( statut='f',max='**',
+                                               TABLE = SIMP(statut='f', typ=CO),
+                                             ),
+                   RESU_MODIFSTRU = FACT( statut='f', max=1,
+                                          MODELE=SIMP(statut='f',typ=CO,defaut=None),
+                                          MODE_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          MAILLAGE=SIMP(statut='f',typ=CO,defaut=None),
+                                          NUME_DDL=SIMP(statut='f',typ=CO,defaut=None),
+                                          MASS_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          RIGI_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          AMOR_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          MACR_ELEM=SIMP(statut='f',typ=CO,defaut=None),
+                                          PROJ_MESU=SIMP(statut='f',typ=CO,defaut=None),
+                                          BASE_ES=SIMP(statut='f',typ=CO,defaut=None),
+                                          BASE_LMME=SIMP(statut='f',typ=CO,defaut=None),
+                                          MODE_STA=SIMP(statut='f',typ=CO,defaut=None),
+                                         ),
+
+                   b_inter    = BLOC( condition="INTERACTIF=='NON'",
+
+                             EXPANSION        = FACT( statut='f',max='**',
+                                                      CALCUL           = SIMP(statut='o',typ=mode_meca),
+                                                      NUME_MODE_CALCUL = SIMP(statut='f',typ='I',validators=NoRepeat(),
+                                                                              max='**',defaut=0),
+                                                      MESURE           = SIMP(statut='o',typ=mode_meca),
+                                                      NUME_MODE_MESURE = SIMP(statut='f',typ='I',validators=NoRepeat(),
+                                                                              max='**',defaut=0),
+                                                      RESOLUTION       = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')),
+                                                      b_reso           = BLOC(condition = "RESOLUTION=='SVD'",
+                                                                              EPS = SIMP(statut='f',typ='R', defaut = 0.)
+                                                                       )
+                                                    ),
+                             IDENTIFICATION   = FACT( statut='f',max='**',
+                                                      ALPHA   = SIMP(statut='f',typ='R', defaut = 0.),
+                                                      EPS     = SIMP(statut='f',typ='R', defaut = 0.),
+                                                      OBSERVABILITE  = SIMP(statut='o',typ=mode_meca),
+                                                      COMMANDABILITE = SIMP(statut='o',typ=mode_meca),
+                                                      INTE_SPEC      = SIMP(statut='o',typ=table_sdaster),
+                                                      RESU_EXPANSION = SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+                                                      BASE           = SIMP(statut='o',typ=mode_meca),
+                                                     ),
+                             MODIFSTRUCT = FACT( statut='f', max=1,
+                                                 MESURE = SIMP(statut='o', typ=mode_meca),
+                                                 MODELE_SUP = SIMP(statut='o', typ=modele_sdaster),
+                                                 MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r),
+                                                 RESOLUTION = SIMP(statut='f', typ='TXM',
+                                                               into=('ES', 'LMME'), defaut='ES'),
+                                                 b_resol = BLOC( condition = "RESOLUTION=='LMME'",
+                                                                 MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r),
+                                                                ),
+                                                 NUME_MODE_MESU   = SIMP(statut='o', typ='I',max='**'),
+                                                 NUME_MODE_CALCUL = SIMP(statut='o', typ='I',max='**'),
+                                                 MODELE_MODIF = SIMP(statut='o', typ=modele_sdaster),
+                                               ),
+                             # Si on realise une modification structurale, on donne les DDL capteurs et interface
+                             b_modif   = BLOC( condition="MODIFSTRUCT!=None",
+                                   GROUP_NO_CAPTEURS  = FACT( statut='f', max='**',
+                                                              GROUP_NO = SIMP(statut='o',typ=grno, max='**'),
+                                                              NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
+                                                            ),
+                                   GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
+                                                              GROUP_NO = SIMP(statut='o',typ=grno, max='**'),
+                                                              NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
+                                                            ),
+                                               ),
+                                          ),
+                        );
+
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+def calc_europlexus_prod(self,COURBE=None,**args):
+  if COURBE is not None:
+      self.type_sdprod(args['TABLE_COURBE'],table_sdaster)
+  return evol_noli
+
+CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",
+                        op=OPS('Macro.calc_europlexus_ops.calc_europlexus_ops'),
+                        sd_prod=calc_europlexus_prod,
+                        reentrant='n',
+                        UIinfo={"groupes":("Outils-métier","Dynamique",)},
+                        fr="Chainage Code_Aster-Europlexus",
+
+        LOGICIEL = SIMP(statut='f', typ='TXM', defaut='/home/europlex/EPXD/bin/europlexus'),
+
+        MODELE     = SIMP(statut='o',typ=modele_sdaster),
+        CARA_ELEM  = SIMP(statut='o',typ=cara_elem),
+
+        FONC_PARASOL = FACT(statut='f',
+           NFKT       = SIMP(statut='f',typ=(fonction_sdaster,)),
+           NFKR       = SIMP(statut='f',typ=(fonction_sdaster,)),
+           GROUP_MA   = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           ),
+
+
+        CHAM_MATER = SIMP(statut='o',typ=cham_mater),
+
+        EXCIT      = FACT(statut='o',max='**',
+           CHARGE         = SIMP(statut='o',typ=(char_meca,)),
+           FONC_MULT      = SIMP(statut='o',typ=(fonction_sdaster,)),
+          ),
+
+        DIME = FACT(statut='o', regles=(AU_MOINS_UN('UNITE_DIME','Q4GS','FORCE',
+                                                    'PT6L','ZONE','POUT','ECRO',
+                                                    'APPU','BLOQ','PRESS','PMAT',
+                                                    'DKT3','DEPL','FNOM','TABLE','FTAB',
+                                                    'MTTI','NEPE','LIAI',), ),
+           UNITE_DIME=SIMP(statut='f',typ='I'),
+
+           Q4GS  = SIMP(statut='f',typ='I'),
+           FORCE = SIMP(statut='f',typ='I'),
+           PT6L  = SIMP(statut='f',typ='I'),
+           ZONE  = SIMP(statut='f',typ='I'),
+           POUT  = SIMP(statut='f',typ='I'),
+           ECRO  = SIMP(statut='f',typ='I'),
+           APPU  = SIMP(statut='f',typ='I'),
+           BLOQ  = SIMP(statut='f',typ='I'),
+           PRESS = SIMP(statut='f',typ='I',min=2,max=2,),
+           PMAT  = SIMP(statut='f',typ='I'),
+           DKT3  = SIMP(statut='f',typ='I'),
+           DEPL  = SIMP(statut='f',typ='I'),
+           FNOM  = SIMP(statut='f',typ='I'),
+           TABLE = SIMP(statut='f',typ='I',min=2,max=2,),
+           FTAB  = SIMP(statut='f',typ='I'),
+           MTTI  = SIMP(statut='f',typ='I'),
+           NEPE  = SIMP(statut='f',typ='I'),
+           LIAI  = SIMP(statut='f',typ='I'),
+             ),
+
+        CALCUL = FACT(statut='o',
+           TYPE_DISCRETISATION  = SIMP(statut='o',typ='TXM',defaut='AUTO',into=('AUTO','UTIL')),
+           INST_FIN             = SIMP(statut='o',typ='R'),
+           INST_INIT            = SIMP(statut='o',typ='R'),
+           NMAX                 = SIMP(statut='f',typ='R'),
+
+           b_auto =BLOC( condition = "TYPE_DISCRETISATION=='AUTO'",
+              CSTAB  = SIMP(statut='o',typ='R',max='**',defaut=0.3),
+#              DTMAX  = SIMP(statut='f',typ='R',max='**'),
+                       ),
+
+           b_util =BLOC( condition = "TYPE_DISCRETISATION=='UTIL'",
+              PASFIX   = SIMP(statut='o',typ='R',max='**'),
+                       ),
+           ),
+
+
+        OBSERVATION     =FACT(statut='f',max='**',
+           SUIVI_DDL       = SIMP(statut='o',typ='TXM',defaut="OUI",max=1,into=("OUI","NON")),
+        b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+                               regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',),
+                                        EXCLUS('PAS_NBRE','PAS_INST',),
+                                        EXCLUS('GROUP_NO','TOUT_GROUP_NO',),
+                                        EXCLUS('GROUP_MA','TOUT_GROUP_MA',), ),
+           NOM_CHAM        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut=('DEPL',),into=('DEPL'
+                                         ,'VITE','ACCE','SIEF_ELGA','EPSI_ELGA','VARI_ELGA'),),
+           PAS_INST        = SIMP(statut='f',typ='R'),
+           PAS_NBRE        = SIMP(statut='f',typ='I'),
+           GROUP_NO        = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           GROUP_MA        = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_NO   = SIMP(statut='f',typ='TXM',into=('OUI',),),
+           TOUT_GROUP_MA   = SIMP(statut='f',typ='TXM',into=('OUI',),),
+                             ),
+        ),
+
+
+        ARCHIVAGE        =FACT(statut='o', regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), EXCLUS('PAS_NBRE','PAS_INST',), ),
+           PAS_INST     = SIMP(statut='f',typ='R'),
+           PAS_NBRE     = SIMP(statut='f',typ='I'),
+           CONT_GENER   = SIMP(statut='o',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+                             ),
+        COURBE  =  FACT(statut='f',max='**', regles=(EXCLUS('GROUP_NO','GROUP_MA')),
+           UNITE_ALIT = SIMP(statut='f',typ='I'),
+            NOM_CHAM   = SIMP(statut='f',typ='TXM'),
+            NOM_CMP    = SIMP(statut='f',typ='TXM'),
+#             NOEUD      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+#             MAILLE     = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+            GROUP_NO   = SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+            GROUP_MA   = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1),
+
+            b_maille = BLOC(condition = "GROUP_MA != None", regles=(AU_MOINS_UN('NUM_GAUSS')),
+              NUM_GAUSS = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),),
+         ),
+        b_courbe = BLOC(condition = "COURBE != None",
+                        regles=(AU_MOINS_UN('PAS_NBRE_COURBE','PAS_INST_COURBE',),
+                                AU_MOINS_UN('TABLE_COURBE',)),
+          PAS_INST_COURBE      = SIMP(statut='f',typ='R'),
+          PAS_NBRE_COURBE       = SIMP(statut='f',typ='I'),
+                  TABLE_COURBE      = SIMP(statut='f', typ=CO),
+          ),
+        DOMAINES = FACT(statut='f',max='**',
+             GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             IDENTIFIANT =  SIMP(statut='f',typ='I'),),
+        INTERFACES = FACT(statut='f',max='**',
+             GROUP_MA_1 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             GROUP_MA_2 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             TOLE        =  SIMP(statut='f',typ='R'),
+             IDENT_DOMAINE_1  = SIMP(statut='f',typ='I'),
+             IDENT_DOMAINE_2  = SIMP(statut='f',typ='I'),),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
+        ) ;
+#& MODIF COMMANDE  DATE 20/06/2011   AUTEUR TRAN V-X.TRAN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANGLES J.ANGLES
+def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
+  if TYPE_CALCUL == "CUMUL_DOMMAGE" : return cham_elem
+  if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_ELGA": return cham_elem
+  if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_NOEUD": return cham_no_sdaster
+  if TYPE_CALCUL == "FATIGUE_VIBR" : return cham_elem
+  raise AsException("type de calcul non prevu")
+
+CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant='n',
+                  fr="Calculer un champ de dommage de fatigue subit par une structure et déterminer le plan critique"
+                      +" dans lequel le cisaillement est maximal.",
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+
+         TYPE_CALCUL = SIMP(statut='o',typ='TXM',
+                               into=("CUMUL_DOMMAGE","FATIGUE_MULTI","FATIGUE_VIBR") ),
+
+         b_cumul_domma   =BLOC(condition = "TYPE_CALCUL == 'CUMUL_DOMMAGE'",
+                               fr="Calcul d un champ de dommage subi par une structure.",
+           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") ),
+
+             b_sigm   =BLOC(condition = "OPTION == 'DOMA_ELNO_SIGM' or OPTION == 'DOMA_ELGA_SIGM'",
+                               fr="Calcul a partir d un champ de contraintes.",
+               HISTOIRE        =FACT(statut='o',
+               RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+                                                   evol_noli) ),
+               EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+                                 into=("VMIS_SG",) ),
+                                   ),
+                           ),
+             b_epsi   =BLOC(condition = "OPTION != 'DOMA_ELNO_SIGM' and OPTION != 'DOMA_ELGA_SIGM'",
+                               fr="Calcul a partir d un champ de déformations.",
+               HISTOIRE        =FACT(statut='o',
+               RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+                                                   evol_noli) ),
+               EQUI_GD         =SIMP(statut='o',typ='TXM',defaut="INVA_2_SG",
+                                 into=("INVA_2_SG",) ),
+                                    ),
+                           ),
+           DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON",
+                                     "TAHERI_MIXTE",) ),
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           TAHERI_NAPPE    =SIMP(statut='f',typ=(nappe_sdaster,formule) ),
+           TAHERI_FONC     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         b_domma_moda   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_VIBR'",
+                               fr="Calcul d un champ de dommage en dynamique vibratoire",
+           regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",) ),
+           CORR_SIGM_MOYE = SIMP(statut='o',typ='TXM',into=("GOODMAN","GERBER")),
+           HISTOIRE        =FACT(statut='o',
+             RESULTAT  =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+             MODE_MECA        =SIMP(statut='o',typ=(mode_meca) ),
+             NUME_MODE        =SIMP(statut='o',typ='I',min=1 ,max='**'),
+             FACT_PARTICI        =SIMP(statut='o',typ='R',min=1, max='**',defaut=1. ),
+             EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+                                 into=("VMIS_SG",) ),
+           ),
+           DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER",) ),
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+         ),
+
+         b_fatigue_multi   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'",
+                                 fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.",
+           TYPE_CHARGE   =SIMP(statut='o',typ='TXM',into=("PERIODIQUE","NON_PERIODIQUE") ),
+           OPTION        =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
+           RESULTAT      =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+           CHAM_MATER    =SIMP(statut='o',typ=(cham_mater) ),
+           MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
+           MAILLE        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**' ),
+           GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ),
+           NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**' ),
+           COEF_PREECROU =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           b_period       =BLOC(condition = "TYPE_CHARGE == 'PERIODIQUE'",
+               CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE_MODI_AC",
+                                                              "DANG_VAN_MODI_AC","VMIS_TRESCA","FORMULE_CRITERE") ),
+               b_fati_p  =BLOC(condition = "(CRITERE == 'MATAKE_MODI_AC' or CRITERE == 'DANG_VAN_MODI_AC')",
+                   METHODE       =SIMP(statut='o',typ='TXM',into=("CERCLE_EXACT",) ),
+               ),
+               
+               b_fati_pf  =BLOC(condition = "(CRITERE == 'FORMULE_CRITERE')",
+                   FORMULE_GRDEQ   = SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+                   COURBE_GRD_VIE  = SIMP(statut='o',typ='TXM',into=("WOHLER","MANSON_C","FORM_VIE") ),
+                   b_fati_pfvie  = BLOC(condition = "(COURBE_GRD_VIE == 'FORM_VIE')",
+                        FORMULE_VIE   =SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+                  ),
+               ),
+           ),
+           b_non_period   =BLOC(condition = "TYPE_CHARGE == 'NON_PERIODIQUE'",
+               CRITERE       =SIMP(statut='o',typ='TXM',
+                                   into=("MATAKE_MODI_AV","DANG_VAN_MODI_AV","FATESOCI_MODI_AV","FORMULE_CRITERE","VMIS_TRESCA") ),
+               b_fati_np  =BLOC(condition =
+                               "(CRITERE != 'VMIS_TRESCA')",
+                   PROJECTION    =SIMP(statut='o',typ='TXM',into=("UN_AXE", "DEUX_AXES") ),
+                   DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+               ),
+               b_fati_npf  =BLOC(condition = "(CRITERE == 'FORMULE_CRITERE')",
+                   FORMULE_GRDEQ   =SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+                   COURBE_GRD_VIE  = SIMP(statut='o',typ='TXM',into=("WOHLER","MANSON_C","FORM_VIE") ),
+                   b_fati_npfvie  = BLOC(condition = "(COURBE_GRD_VIE == 'FORM_VIE')",
+                        FORMULE_VIE   =SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+                  ),
+               ),
+           ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/06/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET
+
+def calc_ferraillage_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+
+CALC_FERRAILLAGE=OPER(nom="CALC_FERRAILLAGE",op=175,sd_prod=calc_ferraillage_prod, reentrant='o',
+            UIinfo={"groupes":("Post-traitements","Outils-métier",)},
+                 fr="calcul de cartes de densité de ferraillage ",
+
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,) ),
+
+
+#====
+# Sélection des numéros d'ordre pour lesquels on fait le calcul :
+#====
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+         b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+         ),
+
+
+#
+#====
+# Définition des grandeurs caractéristiques
+#====
+#
+         TYPE_COMB    =SIMP(statut='o',typ='TXM',into=('ELU','ELS')),
+
+#        mot clé facteur répétable pour assigner les caractéristiques locales par zones topologiques (GROUP_MA)
+         AFFE  =FACT(statut='o',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE     =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           ENROBG     =SIMP(statut='o',typ='R'), # enrobage
+           CEQUI      =SIMP(statut='f',typ='R'), # coefficient d'équivalence acier/béton  (pour ELS)
+           SIGM_ACIER =SIMP(statut='o',typ='R'), # contrainte admissible dans l'acier
+           SIGM_BETON =SIMP(statut='o',typ='R'), # contrainte admissible dans le béton
+           PIVA       =SIMP(statut='f',typ='R'), # valeur du pivot a  (pour ELU)
+           PIVB       =SIMP(statut='f',typ='R'), # valeur du pivot b  (pour ELU)
+           ),
+      )
+
+
+##############################################################################################################
+# Remarques :
+#-----------
+#        l'épaisseur des coques sera récupérée automatiquement
+#        via le cara_elem sous-jacent au résultat
+
+# Le résultat produit est un champ constant par éléments associé à la grandeur FER2_R
+# qui comporte les composantes :
+#
+#     DNSXI  densité d'acier longitudinal suivant X, peau inf
+#     DNSXS  densité d'acier longitudinal suivant X, peau sup
+#     DNSYI  densité d'acier longitudinal suivant Y, peau inf
+#     DNSYS  densité d'acier longitudinal suivant Y, peau sup
+#     DNST   densité d'acier transversal
+#     SIGMBE contrainte beton
+#     EPSIBE deformation béton
+
+# arrêt en erreur si:
+# - EFGE_ELNO n'a pas été précédemment calculé et n'est donc pas présent dans la structure de données RESULTAT
+# - si aucun CARA_ELEM n'est récupérable via la structure de données RESULTAT
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
+                    reentrant='n',
+                    fr="Calculer les paramètres modaux d'une structure soumise à un écoulement",
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         VITE_FLUI       =FACT(statut='f',
+                               fr="Définir la plage de vitesse fluide étudiée",
+           VITE_MIN        =SIMP(statut='f',typ='R' ),
+           VITE_MAX        =SIMP(statut='f',typ='R' ),
+           NB_POIN         =SIMP(statut='f',typ='I' ),
+         ),
+         BASE_MODALE     =FACT(statut='o',
+
+           regles=(AU_MOINS_UN('AMOR_REDUIT','AMOR_UNIF','AMOR_REDUIT_CONN'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**',val_min=0.E+00),
+           AMOR_UNIF       =SIMP(statut='f',typ='R',val_min=0.E+00 ),
+           AMOR_REDUIT_CONN=SIMP(statut='f',typ='R',max='**',val_min=0.E+00),
+         ),
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=type_flui_stru ),
+         IMPRESSION      =FACT(statut='f',
+                               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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
+   if   AsType(FONCTION) == nappe_sdaster:
+      return nappe_sdaster
+   elif AsType(FONCTION) == fonction_sdaster:
+      return fonction_sdaster
+   elif AsType(FONCTION) == fonction_c:
+      return fonction_c
+   elif AsType(FONCTION) == formule_c:
+      return fonction_c
+   elif AsType(FONCTION) == formule:
+      if NOM_PARA_FONC != None:
+         return nappe_sdaster
+      return fonction_sdaster
+   elif AsType(FONCTION) == para_sensi:
+      return para_sensi
+   raise AsException("type de concept resultat non prevu")
+
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_prod,
+                      docu="U4.32.01",reentrant='n',
+           fr="Définit une fonction (ou une nappe) à partir d'une fonction FORMULE à 1 ou 2 variables",
+           UIinfo={"groupes":("Fonctions",)},
+         regles=(UN_PARMI('VALE_PARA','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=(formule,fonction_sdaster,nappe_sdaster,fonction_c) ),
+         VALE_PARA       =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM'),
+         NOM_PARA        =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=("EXCLU","CONSTANT","LINEAIRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM'),
+         b_eval_nappe    =BLOC(condition = "NOM_PARA_FONC != None",
+            regles=(UN_PARMI('VALE_PARA_FONC','LIST_PARA_FONC'),),
+            VALE_PARA_FONC  =SIMP(statut='f',typ='R',max='**'),
+            LIST_PARA_FONC  =SIMP(statut='f',typ=listr8_sdaster ),
+            INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG")),
+            PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+            PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
+                       ENVELOPPE,FRACTILE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,
+                       LISS_ENVELOP,ABS, REGR_POLYNOMIALE, **args):
+
+   if (INTEGRE     != None): return fonction_sdaster
+   if (DERIVE      != None): return fonction_sdaster
+   if (INVERSE     != None): return fonction_sdaster
+   if (COMB        != None):
+      type_vale=AsType(COMB[0]['FONCTION'])
+      for mcfact in COMB :
+          if(AsType(mcfact['FONCTION'])!=type_vale):
+             raise AsException("CALC_FONCTION/COMB : pas de types hétérogènes nappe/fonction")
+      return type_vale
+   if (COMB_C      != None):
+      vale=COMB_C[0]['FONCTION']
+      if(AsType(vale) == nappe_sdaster):
+         for mcfact in COMB_C[1:] :
+             if(AsType(mcfact['FONCTION'])!=nappe_sdaster):
+                raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
+         return nappe_sdaster
+      else:
+         for mcfact in COMB_C :
+             if(AsType(mcfact['FONCTION'])==nappe_sdaster):
+                raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
+         return fonction_c
+   if (ENVELOPPE   != None): return AsType(ENVELOPPE[0]['FONCTION'])
+   if (FRACTILE    != None): return AsType(FRACTILE[0] ['FONCTION'])
+   if (EXTRACTION  != None): return fonction_sdaster
+   if (SPEC_OSCI   != None): return nappe_sdaster
+   if (COMPOSE     != None): return fonction_sdaster
+   if (ASSE        != None): return fonction_sdaster
+   if (FFT         != None):
+      vale=FFT[0]['FONCTION']
+      if (AsType(vale) == fonction_sdaster )  : return fonction_c
+      if (AsType(vale) == fonction_c) : return fonction_sdaster
+   if (CORR_ACCE   != None): return fonction_sdaster
+   if (LISS_ENVELOP!= None): return nappe_sdaster
+   if (REGR_POLYNOMIALE != None): return fonction_sdaster
+   if (PUISSANCE   != None): return AsType(PUISSANCE[0]['FONCTION'])
+   if (ABS         != None): return fonction_sdaster
+   raise AsException("type de concept resultat non prevu")
+
+
+CALC_FONCTION=MACRO(nom="CALC_FONCTION",
+                    op=OPS('Macro.calc_fonction_ops.calc_fonction_ops'),
+                    sd_prod=calc_fonction_prod,
+                    fr="Effectue des opérations mathématiques sur des concepts de type fonction",
+                    reentrant='n',
+                    UIinfo={"groupes":("Fonctions",)},
+         regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','COMB','COMB_C','ENVELOPPE',
+                          'COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE',
+                          'LISS_ENVELOP','INVERSE','ABS','FRACTILE','REGR_POLYNOMIALE'),),
+         FFT             =FACT(statut='f',fr="Transformée de Fourier ou de son inverse",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c) ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE","COMPLET") ),
+           b_syme          =BLOC ( condition = " AsType(FONCTION)==fonction_c ",
+             SYME           =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
+           ),
+         ),
+         DERIVE          =FACT(statut='f',fr="Dérivée d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+         ),
+         INTEGRE         =FACT(statut='f',fr="Intégrale d'une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
+         ),
+         LISS_ENVELOP    = FACT(statut='f',fr="Lissage d une enveloppe",
+           NAPPE           =SIMP(statut='o',typ=nappe_sdaster ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut =0.2),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut =35.5),
+           ELARG           =SIMP(statut='f',typ='R',defaut =0.1 ),
+           TOLE_LISS       =SIMP(statut='f',typ='R',defaut =0.25 ),
+         ),
+         REGR_POLYNOMIALE = FACT(statut='f',fr="Régression polynomiale d'une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster),
+           DEGRE           =SIMP(statut='o',typ='I'),
+         ),
+         SPEC_OSCI       =FACT(statut='f',fr="Spectre d'oscillateur",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='o',typ='R',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") ),
+         ),
+         ABS             =FACT(statut='f',fr="Valeur absolue d'une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster,),
+         ),
+         COMB            =FACT(statut='f',max='**',fr="Combinaison linéaire réelle de fonctions",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster) ),
+           COEF            =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+         ),
+         COMB_C          =FACT(statut='f',max='**',fr="Combinaison linéaire complexe de fonctions",
+           regles=(UN_PARMI('COEF_R','COEF_C'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster) ),
+           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 or REGR_POLYNOMIALE != None",
+             LIST_PARA      =SIMP(statut='f',typ=listr8_sdaster ),
+         ),
+         COMPOSE         =FACT(statut='f',fr="Composition de deux fonctions FONC_RESU(FONC_PARA)",
+           FONC_RESU       =SIMP(statut='o',typ=fonction_sdaster),
+           FONC_PARA       =SIMP(statut='o',typ=fonction_sdaster),
+         ),
+         EXTRACTION      =FACT(statut='f',fr="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',fr="Enveloppe d une famille de fonctions",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
+         ),
+         FRACTILE        =FACT(statut='f',fr="Fractile d une famille de fonctions ou de nappes",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           FRACT           =SIMP(statut='o',typ='R',defaut=1.,val_min=0.,val_max=1.,fr="Valeur du fractile" ),
+         ),
+         ASSE            =FACT(statut='f',fr="Concatenation de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster,min=2,max=2 ),
+           SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
+         ),
+         CORR_ACCE       =FACT(statut='f',fr="Correction d un accelerogramme reel",
+            CORR_DEPL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+            FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+         ),
+         PUISSANCE       =FACT(statut='f',fr="Fonction élevée à une puissance",
+            FONCTION      =SIMP(statut='o', typ=(fonction_sdaster,nappe_sdaster) ),
+            EXPOSANT      =SIMP(statut='f', typ='I', defaut=1 ),
+         ),
+         INVERSE         =FACT(statut='f',fr="Inverse d'une fonction",
+            FONCTION      =SIMP(statut='o', typ=fonction_sdaster),
+         ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG"),
+                               fr="Type d'interpolation pour les abscisses et les ordonnées de la " \
+                                  "fonction ou bien pour le paramètre de la nappe."),
+         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=C_PARA_FONCTION() ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG"),
+                                 fr="Type d'interpolation pour les abscisses et les ordonnées de la fonction"),
+         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) ),
+)
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
+                   fr="Calculer l'effet de surpression hydrodynamique due au mouvement d'entrainement de la structure"
+                       +" en analyse sismique",
+                   reentrant ='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+
+        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_sdaster ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele_sdaster ),
+         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',validators=NoRepeat(),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  ,validators=NoRepeat(),max='**'),
+         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca,),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('CALC_FORC_AJOU'),
+#-------------------------------------------------------------------
+     ) ;
+#& MODIF COMMANDE  DATE 14/12/2010   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA
+
+CALC_FORC_NONL=OPER(nom="CALC_FORC_NONL",op= 183,sd_prod=dyna_trans,reentrant='n',
+            fr="Créer un dyna_trans contenant des champs nommés 'DEPL' correspondant à 'FONL_NOEU' ",
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+
+         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',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1, defaut="FONL_NOEU",
+                               into=("FONL_NOEU",) ),
+
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         COMP_INCR       =C_COMP_INCR(),
+)  ;
+#& MODIF COMMANDE  DATE 26/09/2011   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
+            fr="Calcul du taux de restitution d'énergie par la méthode theta en thermo-élasticité"
+                        +" et les facteurs d'intensité de contraintes.",
+                    reentrant='f',
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+         regles=(EXCLUS('COMP_ELAS','COMP_INCR'),
+                 CONCEPT_SENSIBLE("ENSEMBLE"),
+                 REUSE_SENSIBLE(),
+                 DERIVABLE('RESULTAT'),),
+
+         THETA          =FACT(statut='o',
+           THETA           =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster),),
+           FOND_FISS       =SIMP(statut='f',typ=fond_fiss,max=1),
+           FISSURE         =SIMP(statut='f',position='global',typ=fiss_xfem,max=1),
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           NB_POINT_FOND   =SIMP(statut='f',typ='I',val_min=2),
+           regles=(EXCLUS('FOND_FISS','FISSURE'),
+                 EXCLUS('FOND_FISS','NB_POINT_FOND'),
+                 EXCLUS('FOND_FISS','DTAN_ORIG'),
+                 EXCLUS('FOND_FISS','DTAN_EXTR'),),
+          b_theta        =BLOC(condition="THETA == None",fr="calcul de theta",
+            regles=(UN_PARMI('R_INF','R_INF_FO'),
+                 PRESENT_PRESENT('R_INF','R_SUP'),
+                PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+             NUME_FOND        =SIMP(statut='f',typ='I',defaut=1),
+             R_INF           =SIMP(statut='f',typ='R'),
+             R_SUP           =SIMP(statut='f',typ='R'),
+             MODULE          =SIMP(statut='f',typ='R',defaut=1.),
+             DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
+             DIRECTION       =SIMP(statut='f',typ='R',max=3,min=3),
+             R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MODULE_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ),
+            ),
+
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca,mult_elas),),
+
+         b_no_mult          =BLOC(condition="(AsType(RESULTAT) != mult_elas)",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
+                  'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ'),),
+
+            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+            LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+            INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+            LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+            TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+            LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
+            LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+            FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R'),),
+            ),
+         ),
+
+         b_mult_elas     =BLOC(condition="(AsType(RESULTAT) == mult_elas)",
+            NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat() ),
+         ),
+
+
+         EXCIT           =FACT(statut='f',max='**',
+               CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+               FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+
+         COMP_ELAS       =C_COMP_ELAS('CALC_G'),
+
+         COMP_INCR       =FACT(statut='f',
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","VMIS_ISOT_PUIS") ),
+               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,validators=NoRepeat(),max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           SIGM            =SIMP(statut='f',typ=cham_elem),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+         ),
+
+         LISSAGE         =FACT(statut='d',
+           DEGRE           =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE",
+                                 "LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+         ),
+
+         OPTION          =SIMP(statut='o',typ='TXM',max=1,defaut='CALC_G',
+                               into=("CALC_G",
+                                     "CALC_G_GLOB",
+                                     "CALC_K_G",
+                                     "K_G_MODA",
+                                     "G_MAX",
+                                     "G_MAX_GLOB",
+                                     "G_BILI",
+                                     "G_BILI_GLOB",
+                                     "CALC_K_MAX"),
+                             ),
+
+         b_g_max    =BLOC(condition="(OPTION=='G_MAX') or (OPTION=='G_MAX_GLOB')",
+           BORNES          =FACT(statut='o',max='**',
+                NUME_ORDRE     =SIMP(statut='o',typ='I'),
+                VALE_MIN       =SIMP(statut='o',typ='R'),
+                VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+         ),
+         b_k_max    =BLOC(condition="(OPTION=='CALC_K_MAX')",
+           SIGNES          =FACT(statut='o',max=1,
+                CHARGE_S       =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
+                CHARGE_NS      =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
+                                ),
+         ),
+
+        b_cal_contrainte =BLOC(condition="(COMP_ELAS!=None and ETAT_INIT==None and (OPTION=='CALC_G' or OPTION=='CALC_G_GLOB'))",
+          CALCUL_CONTRAINTE =SIMP(statut='f',typ='TXM',into=("NON",),),
+         ),
+
+
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                           fr="Liste des paramètres de sensibilité.",
+                           ang="List of sensitivity parameters"),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+);
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# MACRO DE COUPLAGE IFS AVEC SATURNE VIA YACS
+#
+CALC_IFS_DNL= MACRO(nom='CALC_IFS_DNL',
+                    op=OPS("Macro.calc_ifs_dnl_ops.calc_ifs_dnl_ops"),
+                    sd_prod=evol_noli,
+                    reentrant='f',
+                    fr="Calcul de l'évolution dynamique d'une structure couplée à un "\
+                       "domaine fluide (résolu avec le code Saturne) via YACS",
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+#IFS
+#=>
+         GROUP_MA_IFS     =SIMP(statut='o',typ=grma,max='**'),
+         NOM_CMP_IFS      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+         UNITE_NOEUD      =SIMP(statut='f',typ='I',defaut= 81 ),
+         UNITE_ELEM       =SIMP(statut='f',typ='I',defaut= 82 ),
+         PAS_INIT         =SIMP(statut='o',typ='R' ),
+#<=
+#IFS
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         MASS_DIAG       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+#IFS
+#=>
+#(une charge force nodale est fournie par le couplage avec code_saturne
+         EXCIT           =FACT(statut='f',max='**',
+#<=
+#IFS
+           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","SUIV","DIDI")),
+#IFS
+#=>
+#(une charge force nodale est fournie par le couplage avec code_saturne
+#           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+#<=
+#IFS
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           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  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         EXCIT_GENE      =FACT(statut='f',max='**',
+           FONC_MULT       =SIMP(statut='f',typ=fonction_sdaster,max='**' ),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene,max='**' ),
+         ),
+         CONTACT         =SIMP(statut='f',typ=char_contact),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+              ),
+         AMOR_RAYL_RIGI = SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE"),),
+         AMOR_MODAL      =FACT(statut='f',
+           regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         PROJ_MODAL      =FACT(statut='f',max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           regles=(PRESENT_PRESENT('MASS_GENE','RIGI_GENE'),),
+           MASS_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           RIGI_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           ACCE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+#-------------------------------------------------------------------
+         COMP_INCR       =C_COMP_INCR(),
+#-------------------------------------------------------------------
+         COMP_ELAS       =C_COMP_ELAS('DYNA_NON_LINE'),
+#-------------------------------------------------------------------
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+         ETAT_INIT       =FACT(statut='o',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','ACCE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+         ETAT_INIT       =FACT(statut='f',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','ACCE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+#-------------------------------------------------------------------
+#IFS : pas besoin d'INCREMENT
+#         INCREMENT       =C_INCREMENT(),
+#-------------------------------------------------------------------
+         SCHEMA_TEMPS     =FACT(statut='o',
+            SCHEMA          =SIMP(statut='o',min=1,max=1,typ='TXM',
+            into=("DIFF_CENT","TCHAMWA","NEWMARK","HHT","THETA_METHODE","KRENK"),),
+            COEF_MASS_SHIFT =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+            b_tchamwa = BLOC(condition="SCHEMA=='TCHAMWA'",
+               PHI          =SIMP(statut='f',typ='R',defaut= 1.05),),
+
+            b_newmark = BLOC(condition="SCHEMA=='NEWMARK'",
+               BETA         =SIMP(statut='f',typ='R',defaut= 0.25),
+               GAMMA        =SIMP(statut='f',typ='R',defaut= 0.5),),
+
+            b_hht     = BLOC(condition="SCHEMA=='HHT'",
+               ALPHA        =SIMP(statut='f',typ='R',defaut= -0.3 ),
+               MODI_EQUI    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),),
+
+            b_theta   = BLOC(condition="SCHEMA=='THETA_METHODE'",
+               THETA         =SIMP(statut='f',typ='R',defaut= 1.,val_min=0.5,val_max=100. ),),
+
+            b_krenk   = BLOC(condition="SCHEMA=='KRENK'",
+               KAPPA         =SIMP(statut='f',typ='R',defaut= 1.0,val_min=1.0,val_max=100. ),),
+
+            b_explicit= BLOC(condition="SCHEMA=='TCHAMWA'or SCHEMA=='DIFF_CENT'",
+               STOP_CFL     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+               FORMULATION  =SIMP(statut='o',typ='TXM',into=("ACCELERATION",),),),
+
+            b_implicit= BLOC(condition="SCHEMA!='TCHAMWA'and SCHEMA!='DIFF_CENT'",
+               FORMULATION  =SIMP(statut='o',max=1,typ='TXM',into=("DEPLACEMENT","VITESSE","ACCELERATION"),),),
+         ),
+#-------------------------------------------------------------------
+         NEWTON          =C_NEWTON(),
+#-------------------------------------------------------------------
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+#-------------------------------------------------------------------
+         CONVERGENCE     =C_CONVERGENCE(),
+#-------------------------------------------------------------------
+         SOLVEUR         =C_SOLVEUR('CALC_IFS_DNL'),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#-------------------------------------------------------------------
+         SUIVI_DDL       =C_SUIVI_DDL(),
+#-------------------------------------------------------------------
+         AFFICHAGE       =C_AFFICHAGE(),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           RIGI_GEOM     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           bloc_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+              DDL_EXCLUS      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+                                    into=('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','LIAISON','DCX',
+                                          'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                          'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                          'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                          'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+         MODE_VIBR     =FACT(statut='f',min=1,max=1,
+           MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
+           NB_FREQ          =SIMP(statut='f',typ='I',max=1,defaut=3,
+                            fr="Nombre de fréquences propres à calculer"),
+           BANDE            =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Valeur des deux fréquences délimitant la bande de recherche",),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+#-------------------------------------------------------------------
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité",
+                               ang="List of sensitivity parameters"),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         b_info=BLOC(condition="(INFO==2)",
+               fr="filtre les messages émis dans le .mess selon le type de message demandé",
+               INFO_DBG = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               into=("CONTACT",
+                                     "MECA_NON_LINE",
+                                     "PILOTAGE",
+                                     "FACTORISATION",
+                                     "APPARIEMENT"),
+                             ),
+                    ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
+                    fr="Calcul d'une matrice interspectrale à partir d'une fonction du temps",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+         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_sdaster,nappe_sdaster,formule),max='**' ),
+         TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FERNANDES R.FERNANDES
+
+
+CALC_MAC3COEUR = MACRO(nom="MAC3COEUR",
+                       op=OPS("Mac3coeur.calc_mac3coeur_ops.calc_mac3coeur_ops"),
+                       sd_prod=evol_noli,
+
+         TYPE_COEUR   = SIMP(statut='o',typ='TXM',into=("TEST","900","1300","N4","EPR") ),
+         # TYPE DE COEUR A CONSIDERER
+
+         LAME = FACT(statut='f',max=1,
+                     fr="Estimation des lames d'eau entre AC",
+               TABLE_N      = SIMP(statut='o',typ=table_sdaster),         # TABLE INITIALE DES DAMAC A L INSTANT N
+               TABLE_NP1    = SIMP(statut='o',typ=table_sdaster),         # TABLE INITIALE DES DAMAC A L INSTANT N+1
+               MAILLAGE_N   = SIMP(statut='o',typ=maillage_sdaster),        # MAILLAGE EN ATTENDANT MIEUX ???
+               MAILLAGE_NP1 = SIMP(statut='o',typ=maillage_sdaster),),        # MAILLAGE EN ATTENDANT MIEUX ???
+
+         DEFORMATION  = FACT(statut='f',max=1,
+                      fr="Estimation des deformations des AC",
+               TABLE_N      = SIMP(statut='o',typ=table_sdaster),         # TABLE INITIALE DES DAMAC
+               MAILLAGE_N   = SIMP(statut='o',typ=maillage_sdaster),        # MAILLAGE EN ATTENDANT MIEUX ???
+               NIVE_FLUENCE = SIMP(statut='o',typ='R',validators=NoRepeat(),max=1), # FLUENCE MAXIMALE DANS LE COEUR
+               RESULTAT     = SIMP(statut='o',typ=evol_noli),)            # SD_RESULTAT (QUI DOIT CORRESPONDRE A TABLE)
+                );
+
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+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 rigidité ajoutés",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         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_sdaster ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele_sdaster ),
+         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_sdaster ),
+         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',validators=NoRepeat(),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 ) ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('CALC_MATR_AJOU'),
+#-------------------------------------------------------------------
+)  ;
+#& MODIF COMMANDE  DATE 05/09/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET 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 == "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 == "MECA_GYRO"        : 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 == "AMOR_MECA_ABSO"   : 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",reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
+                                     "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
+                                     "ONDE_FLUI","AMOR_MECA_ABSO","MASS_FLUI_STRU","RIGI_FLUI_STRU",
+                                     "RIGI_ROTA","MECA_GYRO","MASS_MECA_DIAG","RIGI_ACOU",
+                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST") ),
+         MODELE            =SIMP(statut='o',typ=modele_sdaster ),
+
+         # mots clés facultatifs que l'on a du mal à mettre dans les blocs
+         # sans gener MACRO_MATR_ASSE :
+         #------------------------------------------------------------------
+         INST=SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+
+         b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+           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,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_meca   =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+         ),
+
+         b_rigi_geom       =BLOC(condition = "OPTION=='RIGI_GEOM'",
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem ),
+           STRX_ELGA         =SIMP(statut='f',typ=cham_elem ),
+           MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+
+         b_rigi_rota       =BLOC(condition = "OPTION=='RIGI_ROTA'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'",
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_amor_meca       =BLOC(condition = "OPTION=='AMOR_MECA'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           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,validators=NoRepeat(),max='**'),
+         ),
+
+         b_amor_meca_abso  =BLOC(condition = "OPTION=='AMOR_MECA_ABSO'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',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,validators=NoRepeat(),max='**'),
+         ),
+
+         b_rigi_meca_hyst  =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
+           CHARGE            =SIMP(statut='f',typ=char_meca ,validators=NoRepeat(),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'",
+           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,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_ther       =BLOC(condition = "OPTION=='MASS_THER'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHARGE            =SIMP(statut='f',typ=char_ther ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_rigi_acou       =BLOC(condition = "OPTION=='RIGI_ACOU'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_acou       =BLOC(condition = "(OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_rigi_flui       =BLOC(condition = "OPTION=='RIGI_FLUI_STRU'",
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_flui       =BLOC(condition = "OPTION=='MASS_FLUI_STRU'",
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**'),
+         ),
+
+         b_impe_meca       =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 13/01/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BARGELLINI R.BARGELLINI
+CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
+            UIinfo={"groupes":("Post-traitements","Thermique",)},
+               fr="Calcule l'évolution métallurgique à partir du résultat d'un calcul thermique",
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         RESULTAT        =SIMP(statut='o',typ=evol_ther ),
+         ETAT_INIT       =FACT(statut='o',
+            regles=(UN_PARMI('EVOL_THER', 'META_INIT_ELNO'),),
+            EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+            META_INIT_ELNO  =SIMP(statut='f',typ=carte_sdaster ),
+            b_etat     =BLOC(condition="EVOL_THER != None",
+               regles=(UN_PARMI('NUME_INIT', 'INST_INIT',),),
+               NUME_INIT       =SIMP(statut='f',typ='I'),
+               INST_INIT       =SIMP(statut='f',typ='R'),
+               b_inst     =BLOC(condition="INST_INIT != None",
+                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R',),),
+               ),
+            ),
+         ),
+         COMP_INCR       =FACT(statut='o',max=1,
+           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=4,into=(4,) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma, validators=NoRepeat(), max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma, validators=NoRepeat(), max='**'),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM'
+                             ,into=("META_ELNO",) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def calc_miss_sdprod(self, TYPE_RESU, **kwargs):
+    if TYPE_RESU == 'TABLE':
+        return table_sdaster
+    elif TYPE_RESU == 'HARM_GENE':
+        return harm_gene
+    elif TYPE_RESU == 'TRAN_GENE':
+        return tran_gene
+    else:
+        return None
+
+
+CALC_MISS = MACRO(nom="CALC_MISS",
+                  op=OPS('Macro.calc_miss_ops.calc_miss_ops'),
+                  sd_prod=calc_miss_sdprod,
+                  fr="Préparation des données, exécution du logiciel Miss3D, et post-traitement",
+                  UIinfo={"groupes":("Résolution","Outils-métier",)},
+
+    TYPE_RESU   = SIMP(statut='o', typ='TXM', into=('HARM_GENE', 'TRAN_GENE', 'TABLE', 'FICHIER'),
+                       fr="Type de résultat produit en post-traitement. FICHIER : pas de post-traitement"),
+    PROJET      = SIMP(statut='f', typ='TXM', defaut='MODELE',
+                       fr="Nom de l'étude Miss"),
+    REPERTOIRE  = SIMP(statut='f', typ='TXM',
+                       fr="Répertoire de travail de Miss"),
+    VERSION     = SIMP(statut='f', typ='TXM', into=("V6.6","V6.5"), defaut="V6.6",
+                       fr="Version de Miss utilisée"),
+
+    TABLE_SOL   = SIMP(statut='o', typ=table_sdaster,
+                       fr="Table des propriétés du sol"),
+
+    # pas de post-traitement
+    b_fichier   = BLOC(condition="TYPE_RESU == 'FICHIER'",
+                       regles=(UN_PARMI('MACR_ELEM_DYNA', 'BASE_MODALE'),),
+        MACR_ELEM_DYNA  = SIMP(statut='f', typ=macr_elem_dyna,
+                               fr="Macro élément produit en amont"),
+        BASE_MODALE     = SIMP(statut='f', typ=mode_meca,
+                               fr="Base de modes"),
+        b_base_modale = BLOC(condition="BASE_MODALE is not None",
+            MATR_RIGI       = SIMP(statut='f', typ=(matr_asse_depl_r, matr_asse_depl_c),),
+            MATR_MASS       = SIMP(statut='f', typ=matr_asse_depl_r ),
+        ),
+        AMOR_REDUIT     = SIMP(statut='f', typ='R', max='**'),
+        GROUP_MA_INTERF = SIMP(statut='o', typ=grma, max='**',
+                               fr="Groupe de mailles de l'interface"),
+
+        UNITE_IMPR_ASTER = SIMP(statut='f', typ='I', defaut=25,
+                                fr="Unité des résultats transmis par Code_Aster à Miss"),
+        UNITE_RESU_IMPE  = SIMP(statut='f', typ='I', defaut=38,
+                                fr="Unité logique des impédances écrites par Miss"),
+        UNITE_RESU_FORC  = SIMP(statut='f', typ='I', defaut=28,
+                                fr="Unité logique des forces sismiques écrites par Miss"),
+    ),
+    # si post-traitement
+    b_donnees   = BLOC(condition="TYPE_RESU != 'FICHIER'",
+        MACR_ELEM_DYNA  = SIMP(statut='f', typ=macr_elem_dyna,
+                               fr="Macro élément produit en amont"),
+        BASE_MODALE     = SIMP(statut='o', typ=mode_meca,
+                               fr="Base de modes"),
+        MATR_RIGI       = SIMP(statut='o', typ=(matr_asse_depl_r, matr_asse_depl_c),),
+        MATR_MASS       = SIMP(statut='o', typ=matr_asse_depl_r ),
+        AMOR_REDUIT     = SIMP(statut='o', typ='R', max='**'),
+        GROUP_MA_INTERF = SIMP(statut='o', typ=grma, max='**',
+                               fr="Groupe de mailles de l'interface"),
+
+        UNITE_IMPR_ASTER = SIMP(statut='f', typ='I',
+                                fr="Unité des résultats transmis par Code_Aster à Miss"),
+        UNITE_RESU_IMPE  = SIMP(statut='f', typ='I',
+                                fr="Unité logique des impédances à relire."),
+        UNITE_RESU_FORC  = SIMP(statut='f', typ='I',
+                                fr="Unité logique des forces sismiques à relire"),
+    ),
+    # Paramètres du calcul Miss
+    PARAMETRE   = FACT(statut='o',
+                       regles=(PRESENT_PRESENT('OFFSET_MAX', 'OFFSET_NB'),
+                               PRESENT_PRESENT('FREQ_MIN', 'FREQ_MAX','FREQ_PAS'),
+                               UN_PARMI('FREQ_MIN', 'LIST_FREQ'),
+                               PRESENT_PRESENT('SPEC_MAX', 'SPEC_NB'),),
+        FREQ_MIN       = SIMP(statut='f', typ='R'),
+        FREQ_MAX       = SIMP(statut='f', typ='R'),
+        FREQ_PAS       = SIMP(statut='f', typ='R'),
+        LIST_FREQ      = SIMP(statut='f', typ='R', max='**'),
+        Z0             = SIMP(statut='f', typ='R', defaut=0.),
+        SURF           = SIMP(statut='f', typ='TXM', into=("OUI","NON",), defaut="NON"),
+        RFIC           = SIMP(statut='f', typ='R', defaut=0.),
+
+        ALGO           = SIMP(statut='f', typ='TXM', into=("DEPL","REGU")),
+        DREF           = SIMP(statut='f', typ='R'),
+        SPEC_MAX       = SIMP(statut='f', typ='R'),
+        SPEC_NB        = SIMP(statut='f', typ='I'),
+        OFFSET_MAX     = SIMP(statut='f', typ='R'),
+        OFFSET_NB      = SIMP(statut='f', typ='I'),
+        TYPE           = SIMP(statut='f', typ='TXM', into=("BINAIRE","ASCII",), defaut="ASCII"),
+    ),
+    # Post-traitement type 1 - tran_gene
+    b_post_tran_gene = BLOC(condition="TYPE_RESU == 'TRAN_GENE'",
+                       regles=(AU_MOINS_UN('ACCE_X', 'ACCE_Y', 'ACCE_Z'),),
+        MODELE         = SIMP(statut='o', typ=(modele_sdaster),),
+        ACCE_X         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Y         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Z         = SIMP(statut='f', typ=fonction_sdaster,),
+        INST_FIN       = SIMP(statut='o', typ='R', fr="Instant final du calcul"),
+        PAS_INST       = SIMP(statut='o', typ='R', fr="Pas de temps du calcul"),
+    ),
+    # Post-traitement type 1 - harm_gene
+    b_post_harm_gene  = BLOC(condition="TYPE_RESU == 'HARM_GENE'",
+                       regles=(AU_MOINS_UN('EXCIT_HARMO', 'ACCE_X', 'ACCE_Y', 'ACCE_Z'),
+                               PRESENT_ABSENT('EXCIT_HARMO', 'ACCE_X', 'ACCE_Y', 'ACCE_Z', 'INST_FIN'),
+                               ENSEMBLE('INST_FIN', 'PAS_INST'),),
+        MODELE         = SIMP(statut='o', typ=(modele_sdaster),),
+        ACCE_X         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Y         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Z         = SIMP(statut='f', typ=fonction_sdaster,),
+        INST_FIN       = SIMP(statut='f', typ='R', fr="Instant final du calcul"),
+        PAS_INST       = SIMP(statut='f', typ='R', fr="Pas de temps du calcul"),
+        # identique à EXCIT de DYNA_LINE_HARM au type attendu pour VECT_ASSE près
+        EXCIT_HARMO    = FACT(statut='f', 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_sdaster,),
+            CHARGE        = SIMP(statut='f', typ=char_meca),
+            FONC_MULT_C   = SIMP(statut='f', typ=(fonction_c, formule_c),),
+            COEF_MULT_C   = SIMP(statut='f', typ='C'),
+            FONC_MULT     = SIMP(statut='f', typ=(fonction_sdaster, nappe_sdaster, formule) ),
+            COEF_MULT     = SIMP(statut='f', typ='R'),
+            PHAS_DEG      = SIMP(statut='f', typ='R', defaut=0.),
+            PUIS_PULS     = SIMP(statut='f', typ='I', defaut=0),
+        ),
+    ),
+    # Post-traitement type 2
+    b_post_table = BLOC(condition="TYPE_RESU == 'TABLE'",
+                        regles=(AU_MOINS_UN('ACCE_X', 'ACCE_Y', 'ACCE_Z'),),
+        MODELE         = SIMP(statut='o', typ=(modele_sdaster),),
+        GROUP_NO       = SIMP(statut='o', typ=grno, max='**',
+                              fr="Liste des groupes de noeud de post-traitement"),
+        ACCE_X         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Y         = SIMP(statut='f', typ=fonction_sdaster,),
+        ACCE_Z         = SIMP(statut='f', typ=fonction_sdaster,),
+        INST_FIN       = SIMP(statut='o', typ='R', fr="Instant final du calcul"),
+        PAS_INST       = SIMP(statut='o', typ='R', fr="Pas de temps du calcul"),
+        NORME          = SIMP(statut='o', typ='R',
+                              fr="Valeur de la norme du spectre d'oscillateur" ),
+        AMOR_SPEC_OSCI = SIMP(statut='o', typ='R', max='**',
+                              fr="Amortissement du spectre d'oscillateur"),
+        LIST_FREQ      = SIMP(statut='f', typ=listr8_sdaster,
+                              fr="Fréquences utilisées pour le calcul du spectre d'oscillateur"),
+    ),
+
+    INFO        = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+)
+
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+
+def calc_modal_prod(self,AMORTISSEMENT,**args):
+  if AMORTISSEMENT=="NON": return mode_meca
+  if AMORTISSEMENT=="OUI": return mode_meca_c
+  raise AsException("type de concept resultat non prevu")
+
+
+CALC_MODAL=MACRO(nom="CALC_MODAL",
+                 op=OPS('Macro.calc_modal_ops.calc_modal_ops'),
+                 UIinfo={"groupes":("Résolution","Dynamique",)},
+                 sd_prod=calc_modal_prod,
+                 fr="Calcul des modes propres reels ou complexes dans une seule commande",
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         AMORTISSEMENT    =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         INST            =SIMP(statut='f',typ='R',defaut=0.),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
+         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 ),
+         ),
+         b_qz =BLOC(condition = "METHODE == 'QZ'",
+           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),
+         ),
+         MODE_RIGIDE          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                               fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+         CALC_FREQ       =FACT(statut='d',min=0,
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+                                   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',
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               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,validators=NoRepeat(),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","COMPLEXE"),
+                                   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' ),
+             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 ),
+             STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+        VERI_MODE       =FACT(statut='d',min=0,
+           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") ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE TORKHANI M.TORKHANI
+
+
+CALC_MODE_ROTATION=MACRO(nom="CALC_MODE_ROTATION",
+                         op=OPS('Macro.calc_mode_rotation_ops.calc_mode_rotation_ops'),
+                         sd_prod=table_container,
+                         reentrant='n',
+                         fr="calculer les fréquences et modes d'un système en fonction des " \
+                            "vitesses de rotation",
+                         UIinfo={"groupes":("Résolution","Dynamique",)},
+
+                  MATR_A          =SIMP(statut='o',typ=matr_asse_depl_r ),
+                  MATR_B          =SIMP(statut='o',typ=matr_asse_depl_r ),
+                  MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+                  MATR_GYRO       =SIMP(statut='f',typ=matr_asse_depl_r ),
+                  VITE_ROTA       =SIMP(statut='f',typ='R',max='**'),
+
+                  METHODE         =SIMP(statut='f',typ='TXM',defaut="QZ",
+                                        into=("QZ","SORENSEN",) ),
+
+                  CALC_FREQ       =FACT(statut='d',min=0,
+                         OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","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',
+                                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+                              AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+                              NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+                              ),
+                             ),
+
+                  VERI_MODE       =FACT(statut='d',min=0,
+                  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") ),),
+);
+#& MODIF COMMANDE  DATE 03/10/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHE 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,reentrant='f',
+            fr="Enrichir une SD Résultat par des champs aux noeuds calculés à partir de champs aux éléments évalués aux noeuds",
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+
+         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',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                               into=("FORC_NODA","REAC_NODA",
+                                     "DERA_NOEU",
+                                     "DURT_NOEU",
+                                     "EFCA_NOEU","EFGE_NOEU",
+                                     "ENDO_NOEU",
+                                     "ENEL_NOEU",
+                                     "EPMG_NOEU",
+                                     "EPSG_NOEU",
+                                     "EPSI_NOEU",
+                                     "EPSP_NOEU"     ,
+                                     "EPVC_NOEU","EPFD_NOEU","EPFP_NOEU","EPFP_NOEU",
+                                     "EPMQ_NOEU","EPEQ_NOEU","SIEQ_NOEU",
+                                     "ERME_NOEU","ERTH_NOEU","QIRE_NOEU",
+                                     "FLUX_NOEU",
+                                     "HYDR_NOEU",
+                                     "INTE_NOEU",
+                                     "META_NOEU",
+                                     "PMPB_NOEU",
+                                     "PRAC_NOEU",
+                                     "SIEF_NOEU",
+                                     "SICA_NOEU","SIGM_NOEU",
+                                     "SIPO_NOEU",
+                                     "VAEX_NOEU","VARI_NOEU","DISS_NOEU",) ),
+
+
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           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,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+
+)  ;
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J-M.PROIX
+CALC_POINT_MAT=OPER(nom="CALC_POINT_MAT",op=33,sd_prod=table_sdaster,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+            fr="Intégrer une loi de comportement",
+     MATER           =SIMP(statut='o',typ=mater_sdaster,max=1),
+     COMP_INCR       =C_COMP_INCR(),
+     COMP_ELAS       =C_COMP_ELAS('CALC_POINT_MAT'),
+     INCREMENT       =C_INCREMENT(),
+     NEWTON          =C_NEWTON(),
+     CONVERGENCE     =C_CONVERGENCE(),
+
+    # --MASSIF : orientation du materiau (monocristal, orthotropie)
+     MASSIF          =FACT(statut='f',max='**',
+                    regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+         ANGL_REP        =SIMP(statut='f',typ='R',min=1,max=3),
+         ANGL_EULER      =SIMP(statut='f',typ='R',min=1,max=3),
+      ),
+    ## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
+     ANGLE      =SIMP(statut='f',typ='R',max=1, defaut=0.),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2)),
+
+     regles=(
+             EXCLUS('SIXX','EPXX',),
+             EXCLUS('SIYY','EPYY',),
+             EXCLUS('SIZZ','EPZZ',),
+             EXCLUS('SIXY','EPXY',),
+             EXCLUS('SIXZ','EPXZ',),
+             EXCLUS('SIYZ','EPYZ',),
+             
+             ENSEMBLE('F11','F12','F13','F21','F22','F23','F31','F32','F33',),),
+             
+     SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     
+     EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     
+     F11 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F12 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F13 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F21 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F22 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F23 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F31 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F32 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     F33 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+
+     MATR_C1=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     MATR_C2=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     VECT_IMPO=FACT(statut='f',max=6,
+           VALE          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+                              ),
+     SIGM_INIT=FACT(statut='f',
+            SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIZZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIXY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIXZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIYZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+                       ),
+     EPSI_INIT=FACT(statut='f',
+            EPXX = SIMP(statut='o',typ='R',max=1),
+            EPYY = SIMP(statut='o',typ='R',max=1),
+            EPZZ = SIMP(statut='o',typ='R',max=1),
+            EPXY = SIMP(statut='o',typ='R',max=1),
+            EPXZ = SIMP(statut='o',typ='R',max=1),
+            EPYZ = SIMP(statut='o',typ='R',max=1),
+                       ),
+     VARI_INIT=FACT(statut='f',
+            VALE = SIMP(statut='o',typ='R',max='**'),
+                       ),
+      FORMAT_TABLE    =SIMP(statut='f',typ='TXM',max=1,into=("CMP_COLONNE","CMP_LIGNE",),defaut=("CMP_COLONNE"),),
+
+      NB_VARI_TABLE  =SIMP(statut='f',typ='I',max=1,),
+
+      OPER_TANGENT  =SIMP(statut='f',typ='TXM',max=1,into=("OUI","NON",),defaut="NON",),
+      
+      ARCHIVAGE       =FACT(statut='f',
+       LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+       INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+       PAS_ARCH        =SIMP(statut='f',typ='I' ),
+       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+                           ),
+     );
+
+#& MODIF COMMANDE  DATE 12/10/2011   AUTEUR BARGELLI R.BARGELLINI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
+
+
+CALC_PRECONT=MACRO(nom="CALC_PRECONT",
+                   op=OPS('Macro.calc_precont_ops.calc_precont_ops'),
+                   sd_prod=evol_noli,
+                   fr="Imposer la tension définie par le BPEL dans les cables",
+                   reentrant='f',UIinfo={"groupes":("Modélisation",)},
+         reuse =SIMP(statut='f',typ='evol_noli'),
+         MODELE           =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER       =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM        =SIMP(statut='o',typ=cara_elem),
+         CABLE_BP         =SIMP(statut='o',typ=cabl_precont,validators=NoRepeat(),max='**'),
+         CABLE_BP_INACTIF =SIMP(statut='f',typ=cabl_precont,validators=NoRepeat(),max='**'),
+         INCREMENT        =C_INCREMENT(),
+         RECH_LINEAIRE    =C_RECH_LINEAIRE(),
+         CONVERGENCE      =C_CONVERGENCE(),
+         ETAT_INIT       =FACT(statut='f',
+            regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+                    EXCLUS('EVOL_NOLI','DEPL',),
+                    EXCLUS('EVOL_NOLI','SIGM',),
+                    EXCLUS('EVOL_NOLI','VARI',),
+                    EXCLUS('NUME_ORDRE','INST'), ),
+            DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+            SIGM            =SIMP(statut='f',typ=(carte_sdaster,cham_elem)),
+            VARI            =SIMP(statut='f',typ=cham_elem),
+            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+            NUME_ORDRE      =SIMP(statut='f',typ='I'),
+            INST            =SIMP(statut='f',typ='R'),
+            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),
+            NUME_DIDI       =SIMP(statut='f',typ='I'),
+            INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+          ),
+         METHODE = SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPLEX")),
+         b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
+                           NEWTON = C_NEWTON(),
+                        ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('CALC_PRECONT'),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=char_meca),
+         ),
+
+         COMP_INCR       =C_COMP_INCR(),
+  )  ;
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# ======================================================================
+# RESPONSABLE GNICOLAS
+def calc_sensi_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_SENSI=OPER(nom="CALC_SENSI",op=132,sd_prod=calc_sensi_prod,reentrant='f',
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+            fr="Compléter ou créer un résultat en calculant des champs dérivés )",
+     MODELE          =SIMP(statut='f',typ=modele_sdaster),
+     CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+     RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Résultat d'une commande globale"),
+
+     regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                    'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
+             CONCEPT_SENSIBLE("SEPARE"),
+             DERIVABLE('RESULTAT'),),
+     TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+     INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+     LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+     CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+     b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+     b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+         PRECISION       =SIMP(statut='o',typ='R'),),
+     LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+     TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+     MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+
+     OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+
+                  into=('DEDE_ELNO','DEDE_NOEU','DESI_ELNO',
+                  'DESI_NOEU','DETE_ELNO','DETE_NOEU',
+                  'EFGE_ELNO','EPSI_ELGA','EPSI_ELNO',
+                  'EPSP_ELNO','FLUX_ELNO','FLUX_NOEU','REAC_NODA','SIEF_ELGA',
+                  'SIEF_ELNO','SIEF_NOEU',
+                  'SIGM_ELNO','SIGM_NOEU',
+                  'SIPO_ELNO','VARI_ELNO'),
+            ),
+
+
+   # -- mots cles inutiles mais qui permettent de reutiliser certaines routines :
+     EXCIT =FACT(statut='f',max='**', CHARGE=SIMP(statut='o',typ=(char_meca,) ),),
+     NORME =SIMP(statut='f',typ='TXM',defaut="XXXX", into=("XXXX",),),
+
+
+     SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                           fr="Liste des paramètres de sensibilité.",
+                           ang="List of sensitivity parameters"),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+     TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+# RESPONSABLE CORUS M.CORUS
+
+
+CALC_SPEC=MACRO(nom="CALC_SPEC",
+                op=OPS('Macro.calc_spec_ops.calc_spec_ops'),
+                sd_prod=table_fonction,
+                reentrant='n',
+                fr="Calcule une matrice interspectrale ou des fonctions de transferts",
+                UIinfo={"groupes":("Fonctions",)},
+         TAB_ECHANT      =FACT(statut='f',
+           NOM_TAB         =SIMP(statut='o',typ=table_sdaster),
+           LONGUEUR_ECH    =FACT(statut='f',
+             DUREE           =SIMP(statut='f',typ='R'),
+             POURCENT        =SIMP(statut='f',typ='R'),
+             NB_PTS          =SIMP(statut='f',typ='I'),
+                              ),
+           RECOUVREMENT  =FACT(statut='f',
+             DUREE           =SIMP(statut='f',typ='R'),
+             POURCENT        =SIMP(statut='f',typ='R'),
+             NB_PTS          =SIMP(statut='f',typ='I'),
+                                ),
+                              ),
+         ECHANT          =FACT(statut='f',max='**',
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_MES        =SIMP(statut='o',typ='I' ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster),
+                              ),
+#-- Cas de la matrice interspectrale --#
+         INTERSPE        =FACT(statut='f',
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
+           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ",
+             DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
+                                 ),
+                              ),
+#-- Cas des transferts - estimateurs H1 / H2 / Hv + Coherence --#
+         TRANSFERT       =FACT(statut='f',
+           ESTIM           =SIMP(statut='f',typ='TXM',defaut="H1",into=("H1","H2","CO",)),
+           REFER           =SIMP(statut='o',typ='I',max='**'),
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
+#           DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
+           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ",
+             DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
+                                 ),
+                              ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+);
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def calc_table_prod(self, TABLE, ACTION, **kargs):
+   """Typage du concept produit.
+   """
+   l_typ = [AsType(TABLE),]
+   for mcf in ACTION:
+      dmc = mcf.cree_dict_valeurs(mcf.mc_liste)
+      if dmc.get('TABLE') != None:
+         l_typ.append(AsType(dmc['TABLE']))
+   # une table_fonction étant une table
+   if table_fonction in l_typ:
+      return table_fonction
+   else:
+      return table_sdaster
+
+
+
+CALC_TABLE=MACRO(nom="CALC_TABLE",
+                 op=OPS('Macro.calc_table_ops.calc_table_ops'),
+                 sd_prod=calc_table_prod,
+                 fr="Opérations sur une table",
+                 UIinfo={"groupes":("Tables",)},
+                 reentrant='f',
+   regles=(DERIVABLE('TABLE'),),
+   TABLE  = SIMP(statut='o',typ=table_sdaster),
+   ACTION = FACT(statut='o', max='**',
+                    fr = "Suite des opérations à effectuer sur la table",
+      OPERATION = SIMP(statut='o', typ='TXM',
+                  into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'AJOUT_LIGNE',
+                        'OPER', 'SUPPRIME', 'AJOUT_COLONNE')),
+
+      b_filtre = BLOC(condition="OPERATION == 'FILTRE'",
+                      fr="Sélectionne les lignes de la table vérifiant un critère",
+         NOM_PARA  = SIMP(statut='o',typ='TXM'),
+         CRIT_COMP = SIMP(statut='f',typ='TXM',defaut="EQ",
+                          into=('EQ','NE','GT','LT','GE','LE','REGEXP',
+                                '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',max='**'),
+            VALE_I = SIMP(statut='f',typ='I',max='**'),
+            VALE_C = SIMP(statut='f',typ='C',max='**'),
+            VALE_K = SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'",
+            VALE_K = SIMP(statut='o',typ='TXM',),
+         ),
+         b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')",
+            CRITERE   = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+            PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+      ),
+
+      b_extr = BLOC(condition="OPERATION ==  'EXTR'",
+                    fr="Extrait une ou plusieurs colonnes de la table",
+         NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                         fr="Noms des colonnes à extraire"),
+      ),
+
+      b_suppr = BLOC(condition="OPERATION ==  'SUPPRIME'",
+                    fr="Supprime une ou plusieurs colonnes de la table",
+         NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                         fr="Noms des colonnes à supprimer"),
+      ),
+
+      b_renomme = BLOC(condition="OPERATION == 'RENOMME'",
+                       fr="Renomme un ou plusieurs paramètres de la table",
+         NOM_PARA = SIMP(statut='o', typ='TXM', validators=NoRepeat(), min=2, max=2,
+                         fr="Couple (ancien nom du paramètre, nouveau nom du paramètre)",),
+      ),
+
+      b_tri = BLOC(condition="OPERATION == 'TRI'",
+                   fr="Ordonne les lignes de la table selon les valeurs d'un ou plusieurs paramètres",
+         NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+         ORDRE    = SIMP(statut='f',typ='TXM',defaut="CROISSANT",
+                         into=("CROISSANT","DECROISSANT") ),
+      ),
+
+      b_comb = BLOC(condition="OPERATION == 'COMB'",
+                    fr="Combine deux tables ayant éventuellement des paramètres communs",
+         TABLE    = SIMP(statut='o',typ=table_sdaster,
+                         fr="Table dont les colonnes vont venir surcharger la table initiale"),
+         NOM_PARA = SIMP(statut='f',typ='TXM',max='**',
+                         fr="Noms des paramètres dont les valeurs doivent etre identiques dans les deux tables "\
+                            "pour que les colonnes soient combinées"),
+         RESTREINT = SIMP(statut='f', typ='TXM', into=('OUI', 'NON'), defaut='NON',
+                          fr="Restreint la fusion uniquement aux lignes où les NOM_PARA sont communs"),
+      ),
+
+      b_ajout_lig = BLOC(condition="OPERATION == 'AJOUT_LIGNE'",
+                    fr="Ajoute une ligne à la table initiale",
+         NOM_PARA = SIMP(statut='o',typ='TXM',max='**',
+                         fr="Noms des paramètres dont les valeurs sont fournies sous VALE"),
+         VALE     = SIMP(statut='o',typ=not_checked,max='**', fr='Valeurs des paramètres'),
+      ),
+
+      b_ajout_col = BLOC(condition="OPERATION == 'AJOUT_COLONNE'",
+                    fr="Ajoute une colonne constante à la table initiale",
+         NOM_PARA = SIMP(statut='o',typ='TXM',max='**',
+                         fr="Noms des paramètres des colonnes à ajouter"),
+         VALE   = SIMP(statut='o', typ=not_checked, max='**',
+                       fr="Valeur constante pour chaque colonne"),
+      ),
+
+      b_oper = BLOC(condition="OPERATION == 'OPER'",
+                    fr="Applique une formule dans laquelle les variables sont les paramètres de la table",
+         FORMULE  = SIMP(statut='o',typ=formule,
+                         fr="Formule à appliquer aux colonnes de la table"),
+         NOM_PARA = SIMP(statut='o',typ='TXM',
+                         fr="Nom de la nouvelle colonne"),
+      ),
+   ),
+
+   SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),max=1,
+                      fr="Paramètre de sensibilité",
+                      ang="Sensitivity parameter"),
+   TITRE = SIMP(statut='f',typ='TXM',max='**',
+                fr="Titre de la table produite"),
+   INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+                fr="Définir un champ theta pour le calcul du taux de restitution d'énergie"
+                    +" ou des facteurs d'intensité de contraintes",
+         regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
+                 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_sdaster) ),
+         THETA_3D        =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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_sdaster,nappe_sdaster,formule)),
+           R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                         ),
+         b_theta_3d     =BLOC(condition="THETA_3D != None",
+           FOND_FISS       =SIMP(statut='o',typ=fond_fiss),),
+         DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+         THETA_2D        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),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',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") ),
+         IMPRESSION      =FACT(statut='f',
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def calc_vect_elem_prod(OPTION,**args):
+  if OPTION == "CHAR_MECA" :      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,reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+                    fr="Calcul des seconds membres élémentaires",
+         OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
+                                                           "FORC_NODA") ),
+         b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
+           regles=(AU_MOINS_UN('CHARGE','MODELE'),),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+           MODELE          =SIMP(statut='f',typ=modele_sdaster),
+           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','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+              ),
+           ),
+         ),
+         b_char_ther     =BLOC(condition = "OPTION=='CHAR_THER'",
+           CARA_ELEM        =SIMP(statut='f',typ=cara_elem),
+           CHARGE           =SIMP(statut='o',typ=char_ther,validators=NoRepeat(),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,validators=NoRepeat(),max='**'),
+         ),
+
+         b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
+           MODELE            =SIMP(statut='f',typ=modele_sdaster),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 07/12/2010   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+CALCUL=OPER(nom="CALCUL",op=26,sd_prod=table_container,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+            fr="Calculer des objets élémentaires comme une matrice tangente, intégrer une loi de comportement, etc...",
+     OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="COMPORTEMENT",
+                           into=( "COMPORTEMENT","MATR_TANG_ELEM","FORC_INT_ELEM"),),
+     MODELE          =SIMP(statut='o',typ=modele_sdaster),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+     CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+     TABLE           =SIMP(statut='f',typ=table_container),
+     EXCIT           =FACT(statut='o',max='**',
+       CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+       FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+       TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE",)),
+
+     ),
+     DEPL            =SIMP(statut='o',typ=cham_no_sdaster ),
+     INCR_DEPL       =SIMP(statut='o',typ=cham_no_sdaster ),
+     SIGM            =SIMP(statut='o',typ=cham_elem),
+     VARI            =SIMP(statut='o',typ=cham_elem),
+     INCREMENT       =FACT(statut='o',
+          LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+          NUME_ORDRE      =SIMP(statut='o',typ='I'),),
+     COMP_INCR       =C_COMP_INCR(),
+     COMP_ELAS       =C_COMP_ELAS('CALCUL'),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+
+#& MODIF COMMANDE  DATE 11/10/2011   AUTEUR MEUNIER S.MEUNIER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GRANET S.GRANET
+#from Macro.chainage_thm_ops import chainage_thm_ops
+
+def chainage_thm_prod(self,TYPE_CHAINAGE,TYPE_RESU = None,**args) :
+
+  if TYPE_CHAINAGE == "MECA_HYDR" : return evol_varc
+
+  if TYPE_CHAINAGE == "HYDR_MECA" :
+    if TYPE_RESU == "CHAM_NO" :
+      return cham_no_sdaster
+    elif TYPE_RESU == "EVOL_VARC" :
+      return evol_varc
+
+  if TYPE_CHAINAGE == "INIT" :
+    matr_mh  = args['MATR_MH']
+    matr_hm1 = args['MATR_HM1']
+    matr_hm2 = args['MATR_HM2']
+
+    self.type_sdprod(matr_mh,corresp_2_mailla)
+    self.type_sdprod(matr_hm1,corresp_2_mailla)
+    self.type_sdprod(matr_hm2,corresp_2_mailla)
+    return None
+
+  raise AsException("type de chainage THM non prevu")
+
+CHAINAGE_THM=MACRO(nom="CHAINAGE_THM",
+                   op=OPS('Macro.chainage_thm_ops.chainage_thm_ops'),
+                   sd_prod=chainage_thm_prod,
+                   reentrant='n',
+                   UIinfo={"groupes":("Résultats et champs",)},
+                   docu="Ux.xx.xx",
+                   fr="Calcul des variables de commande pour le chaînage THM",
+
+         TYPE_CHAINAGE  = SIMP(statut='o',typ='TXM',
+                               into=("HYDR_MECA","MECA_HYDR","INIT",),
+                               fr="Sens du chaînage ou initialisation des matrices de projection"),
+
+         # Cas HYDR_MECA :
+
+         b_hydr_meca    = BLOC(condition = "TYPE_CHAINAGE == 'HYDR_MECA'",fr="Chaînage hydraulique vers mécanique",
+
+             RESU_HYDR       = SIMP(statut='o',typ=resultat_sdaster,fr="Résultat hydraulique à chaîner" ),
+             MODELE_MECA     = SIMP(statut='o',typ=modele_sdaster  ,fr="Modèle d'arrivée mécanique"),
+             TYPE_RESU       = SIMP(statut='f',typ='TXM',into=("EVOL_VARC","CHAM_NO"),defaut="EVOL_VARC", ),
+             MATR_HM1        = SIMP(statut='o',typ=corresp_2_mailla,),
+             MATR_HM2        = SIMP(statut='o',typ=corresp_2_mailla,),
+
+             b_type_resu     = BLOC(condition = "TYPE_RESU == 'EVOL_VARC'",fr="Instant obligatoire si TYPE_RESU=EVOL_VARC",
+                                   INST = SIMP(statut='o',typ='R',validators=NoRepeat(),min=1,max=1),
+
+           ),),
+
+         # Cas MECA_HYDR :
+
+         b_meca_hydr    = BLOC(condition = "TYPE_CHAINAGE == 'MECA_HYDR'",fr="Chaînage mécanique vers hydraulique",
+
+             RESU_MECA       = SIMP(statut='o',typ=resultat_sdaster,fr="Résultat mécanique à chaîner" ),
+             MODELE_HYDR     = SIMP(statut='o',typ=modele_sdaster  ,fr="Modèle d'arrivée hydraulique"),
+
+             MATR_MH         = SIMP(statut='o',typ=corresp_2_mailla,),
+             INST            = SIMP(statut='o',typ='R',validators=NoRepeat(),min=1,max=1),
+           ),
+
+         # Cas INIT :
+
+         b_init    = BLOC(condition = "TYPE_CHAINAGE == 'INIT'",fr="Calcul des matrices de projection",
+
+             MODELE_MECA     = SIMP(statut='o',typ=modele_sdaster  ,fr="Modèle mécanique"),
+             MODELE_HYDR     = SIMP(statut='o',typ=modele_sdaster  ,fr="Modèle hydraulique"),
+
+             MATR_MH         = SIMP(statut='o',typ=CO,),
+             MATR_HM1        = SIMP(statut='o',typ=CO,),
+             MATR_HM2        = SIMP(statut='o',typ=CO,),
+           ),
+
+         INFO     = SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
+
+) ;
+
+
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
+                  reentrant='n',fr="Recombiner les modes de Fourier d'une SD Résultat dans des directions particulières",
+            UIinfo={"groupes":("Post-traitements",)},
+         RESULTAT        =SIMP(statut='o',typ=(fourier_elas,fourier_ther),),
+         ANGL            =SIMP(statut='o',typ='R',max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6,into=("DEPL","REAC_NODA",
+                               "SIEF_ELGA","EPSI_ELNO","SIGM_ELNO","TEMP","FLUX_ELNO"),),
+) ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C[0]['MATR_ASSE'])
+    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[0]['MATR_ASSE'])
+    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
+  elif CALC_AMOR_GENE != None: 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="Effectuer la combinaison linéaire de matrices assemblées",
+                    reentrant='f',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         regles=(UN_PARMI('COMB_R','COMB_C','CALC_AMOR_GENE' ),),
+         COMB_R          =FACT(statut='f',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',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' ),
+         ),
+         CALC_AMOR_GENE   =FACT(statut='f',
+           RIGI_GENE    = SIMP(statut='o', typ=matr_asse_gene_r),
+           MASS_GENE    = SIMP(statut='o', typ=matr_asse_gene_r),
+           regles=(UN_PARMI('AMOR_REDUIT','LIST_AMOR' ),),
+           AMOR_REDUIT  = SIMP(statut='f',typ='R',max='**'),
+           LIST_AMOR    = SIMP(statut='f',typ=listr8_sdaster ),
+         ),
+         SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/03/2011   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE AUDEBERT S.AUDEBERT
+COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
+                     fr="Réponse sismique par recombinaison modale par une méthode spectrale",
+                     reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Dynamique",)},
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
+                 UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),
+                 UN_PARMI('MONO_APPUI','MULTI_APPUI' ),),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         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_meca ),
+
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+
+         MASS_INER       =SIMP(statut='f',typ=table_sdaster ),
+         CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         EXCIT           =FACT(statut='o',max='**',
+           regles=(UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+           AXE             =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",),
+           TRI_AXE         =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant les trois axes mais avec le meme spectre",),
+           TRI_SPEC        =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Excitation suivant les trois axes  avec trois spectres"),
+           b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),),
+             ECHELLE         =SIMP(statut='f',typ='R',),
+           ),
+           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=(nappe_sdaster,formule),),
+             ECHELLE         =SIMP(statut='f',typ='R',),
+           ),
+           b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),min=3,max=3 ),
+             ECHELLE         =SIMP(statut='f',typ='R',min=3,max=3),
+           ),
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
+           b_mult_appui    =BLOC(condition = "(MULTI_APPUI != None)",
+                                 regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),)
+         ),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="excitation imposée unique" ),
+         MULTI_APPUI      =SIMP(statut='f',typ='TXM',position='global',into=("DECORRELE","CORRELE"),
+                                 fr="excitation imposée unique" ),
+         b_decorrele     =BLOC(condition = "MULTI_APPUI == 'DECORRELE' ",
+           GROUP_APPUI     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+
+         ),
+         b_correle =BLOC(condition = "MULTI_APPUI == 'CORRELE' ",
+           COMB_MULT_APPUI =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE",) ),),
+         ),
+
+         COMB_MODE       =FACT(statut='o',
+           TYPE            =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
+           DUREE           =SIMP(statut='f',typ='R' ),
+         ),
+         COMB_DIRECTION  =FACT(statut='f',
+           TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
+         ),
+         COMB_DEPL_APPUI=FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','LIST_CAS'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           LIST_CAS       =SIMP(statut='f',typ='I',max='**'),
+           TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
+         ),
+         DEPL_MULT_APPUI =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   AU_MOINS_UN('DX','DY','DZ' ),),
+           NOM_CAS         =SIMP(statut='o',typ='TXM',max='**'),
+           NUME_CAS        =SIMP(statut='o',typ='I',max='**'),
+           MODE_STAT       =SIMP(statut='o',typ=mode_meca, ),
+           NOEUD_REFE      =SIMP(statut='f',typ=no),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),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',validators=NoRepeat(),max=9,
+                               into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO","SIEF_ELGA",
+                                     "EFGE_ELNO","REAC_NODA","FORC_NODA","EFCA_ELNO",
+                                     "SIPO_ELNO") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         IMPRESSION      =FACT(statut='f',max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),validators=NoRepeat(),max=3 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def crea_champ_prod(TYPE_CHAM,**args):
+  if TYPE_CHAM[0:5] == "CART_" :
+     return carte_sdaster
+  elif TYPE_CHAM[0:5] == "NOEU_" :
+     return cham_no_sdaster
+  elif TYPE_CHAM[0:2] == "EL"    :
+     return cham_elem
+  else :
+     raise AsException("type de concept resultat_sdaster non prevu")
+
+
+CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
+                fr="Création d'un champ ",reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
+      # TYPE_CHAM doit etre de la forme : CART_xx, NOEU_xx, ELEM_xx, ELGA_xx ou ELNO_xx
+      # ou xx est le nom d'une grandeur définie dans le catalogue des grandeurs
+#        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_sdaster) ),
+         CHAM_NO         =SIMP(statut='f',typ=(cham_no_sdaster) ),
+
+#        SI CREATION D'UN CHAM_ELEM, POUR aider a l'allocation du champ :
+#        (PAR DEFAUT : TOU_INI_ELNO/_ELGA/_ELEM)
+#        ------------------------------------------------------------------
+         OPTION         =SIMP(statut='f',typ='TXM'),
+
+         OPERATION       =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC","NORMALE","R2C","C2R","COMB") ),
+
+#        ------------------------------------------------------------------
+         b_norm          =BLOC(condition = "OPERATION == 'NORMALE'",
+                               regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+             MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                             ),
+#        ------------------------------------------------------------------
+         b_affe          =BLOC(condition = "OPERATION == 'AFFE'",
+             regles=(UN_PARMI('MAILLAGE','MODELE'),),
+             MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+             MODELE          =SIMP(statut='f',typ=(modele_sdaster) ),
+             b_affe_modele   =BLOC(condition = "MODELE != None",
+                 PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+             AFFE            =FACT(statut='o',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 ,validators=NoRepeat(),max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),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_sdaster,nappe_sdaster,formule),max='**'),
+                                   ),
+                             ),
+#        ------------------------------------------------------------------
+         b_asse          =BLOC(condition = "OPERATION == 'ASSE'",
+             regles=(UN_PARMI('MAILLAGE','MODELE'),),
+             MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+             MODELE          =SIMP(statut='f',typ=(modele_sdaster) ),
+             b_asse_modele   =BLOC(condition = "MODELE != None",
+                 PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+             ASSE            =FACT(statut='o',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,validators=NoRepeat(),max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                CHAM_GD         =SIMP(statut='o',typ=cham_gd_sdaster),
+                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. ),
+                COEF_C          =SIMP(statut='f',typ='C',max=1),
+                                    ),
+                             ),
+#        ------------------------------------------------------------------
+         b_comb          =BLOC(condition = "OPERATION == 'COMB'",
+                               fr="Pour faire une combinaison linéaire de cham_no ayant meme profil",
+             COMB            =FACT(statut='o',max='**',
+                CHAM_GD         =SIMP(statut='o',typ=cham_no_sdaster),
+                COEF_R          =SIMP(statut='o',typ='R'),
+                                   ),
+                             ),
+#        ------------------------------------------------------------------
+         b_eval          =BLOC(condition = "OPERATION == 'EVAL'",
+             CHAM_F          =SIMP(statut='o',typ=cham_gd_sdaster),
+             CHAM_PARA       =SIMP(statut='o',typ=cham_gd_sdaster,max='**'),
+                             ),
+#        ------------------------------------------------------------------
+         b_r2c           =BLOC(condition = "OPERATION == 'R2C'",
+             CHAM_GD          =SIMP(statut='o',typ=cham_gd_sdaster),
+                             ),
+#        ------------------------------------------------------------------
+         b_c2r           =BLOC(condition = "OPERATION == 'C2R'",
+             CHAM_GD          =SIMP(statut='o',typ=cham_gd_sdaster),
+             PARTIE           =SIMP(statut='o',typ='TXM',into=('REEL','IMAG','MODULE','PHASE'),),
+                             ),
+#        ------------------------------------------------------------------
+         b_disc          =BLOC(condition = "OPERATION == 'DISC'",
+             MODELE          =SIMP(statut='f',typ=(modele_sdaster) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             CHAM_GD         =SIMP(statut='o',typ=cham_gd_sdaster),
+                             ),
+#        ------------------------------------------------------------------
+         b_extr          =BLOC(condition = "OPERATION == 'EXTR'",
+             regles=(AU_MOINS_UN('MAILLAGE','FISSURE','RESULTAT','TABLE'),
+                     PRESENT_ABSENT('MAILLAGE','FISSURE','RESULTAT'),
+                     PRESENT_ABSENT('FISSURE','MAILLAGE','RESULTAT','TABLE'),
+                     PRESENT_ABSENT('RESULTAT','FISSURE','MAILLAGE','TABLE'),
+                     PRESENT_ABSENT('TABLE','RESULTAT','FISSURE'),
+                     ),
+             MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+             FISSURE         =SIMP(statut='f',typ=(fiss_xfem) ),
+             RESULTAT        =SIMP(statut='f',typ=(resultat_sdaster) ),
+             TABLE           =SIMP(statut='f',typ=(table_sdaster),min=1,max=1),
+             b_extr_maillage =BLOC(condition = "MAILLAGE != None and TABLE == None",
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
+             ),
+
+             b_extr_fissure  = BLOC(condition = "FISSURE != None",
+                 NOM_CHAM=SIMP(statut='o',typ='TXM',into=("LTNO","LNNO","GRLTNO","GRLNNO","STNO","STNOR","BASLOC",
+                                                                  "GRI.LNNO","GRI.LTNO","GRI.GRLNNO","GRI.GRLTNO")),
+
+             ),
+
+             b_extr_table    =BLOC(condition = "TABLE != None",
+                      MODELE          =SIMP(statut='f',typ=(modele_sdaster),),
+                      PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                 ),
+             b_extr_resultat =BLOC(condition = "RESULTAT != None",
+                 regles=(DERIVABLE('RESULTAT'),),
+                 SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                   fr="Paramètre de sensibilité.",
+                                   ang="Sensitivity parameter"),
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+                 TYPE_MAXI       =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
+
+                 # si TYPE_MAXI, on spécifie en général plusieurs numéros d'ordre :
+                 b_type_maxi =BLOC(condition = "TYPE_MAXI != None",
+                      TYPE_RESU       =SIMP(statut='o',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
+
+                      regles=(EXCLUS('TOUT_ORDRE','LIST_INST','LIST_FREQ','NUME_ORDRE','INST',
+                                      'FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),),
+                      TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                      LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                      LIST_FREQ       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                      NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+                      INST            =SIMP(statut='f',typ='R',max='**'),
+                      FREQ            =SIMP(statut='f',typ='R',max='**'),
+                      NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+                      NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+                      NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+                      ANGL            =SIMP(statut='f',typ='R',max='**'),
+                 ),
+
+                 # si .not. TYPE_MAXI, on ne doit spécifier qu'un seul numéro d'ordre :
+                 b_non_type_maxi =BLOC(condition = "TYPE_MAXI == None",
+                      regles=(EXCLUS('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),),
+                      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=2),
+                      NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                      ANGL            =SIMP(statut='f',typ='R'),
+
+                      INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
+                 ),
+
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                 b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                     PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                 b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                     PRECISION       =SIMP(statut='o',typ='R',),),
+
+         ),  # fin bloc b_extr
+
+
+               ),
+# FIN DU CATALOGUE : INFO,TITRE ET TYPAGE DU RESULTAT :
+#-----------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2011   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+
+def crea_elem_ssd_prod(self,NUME_DDL,**args):
+    if NUME_DDL:
+        self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+    return macr_elem_dyna
+
+CREA_ELEM_SSD=MACRO(nom="CREA_ELEM_SSD",
+                    op=OPS('Macro.crea_elem_ssd_ops.crea_elem_ssd_ops'),
+                    sd_prod=crea_elem_ssd_prod,
+                    reentrant='n',
+                    fr="Creation de macro-element dynamique en enchainant les commandes : "\
+                       "CALC_MATR_ELEM, NUME_DDL, ASSE_MATRICE, MODE_ITER_SIMULT, "\
+                       "DEFI_INTERF_DYNA, DEFI_BASE_MODALE et MACR_ELEM_DYNA",
+                    UIinfo={"groupes":("Matrices/vecteurs",)},
+
+# pour CAL_MATR_ELEM + NUME_DDL + ASSE_MATRICE + MODE_ITER_SIMULT + MODE_STATIQUE
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=CO,defaut=None),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**'),
+
+# pour DEFI_INTERF_DYNA
+         INTERFACE       =FACT(statut='o',max='**',
+           regles=(ENSEMBLE('NOM','TYPE'),
+                   UN_PARMI('NOEUD','GROUP_NO'),),
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO",) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
+         ),
+
+# pour DEFI_BASE_MODALE
+         BASE_MODALE = FACT(statut='o',max = 1,
+           TYPE   =SIMP(statut='o',typ='TXM',max=1,into=('CLASSIQUE','RITZ',),),
+           b_ritz = BLOC(condition = "TYPE == 'RITZ' ",fr="Base de type Ritz",
+             TYPE_MODE  = SIMP(statut='f',typ='TXM',into=('STATIQUE','INTERFACE',),defaut='INTERFACE',),
+             b_intf = BLOC(condition = "TYPE_MODE == 'INTERFACE' ",
+                      NMAX_MODE_INTF  =SIMP(statut='f',typ='I',defaut=10,val_min=1),),
+           ),
+         ),
+
+         INFO          =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+#-------------------------------------------------------------------
+# Catalogue commun SOLVEUR (pour MODE_ITER_SIMULT, MODE_STATIQUE, DEFI_BASE_MODALE)
+         SOLVEUR         =C_SOLVEUR('CREA_ELEM_SSD'),
+#-------------------------------------------------------------------
+
+# pour le calcul modal
+         CALC_FREQ       =FACT(statut='d',min=0,
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","SANS"),
+                                   fr="Choix de l option et par consequent du shift du probleme 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 donnee",
+               FREQ            =SIMP(statut='o',typ='R',
+                                     fr="Frequence autour de laquelle on cherche les frequences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               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 donnee",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 9999,val_min=0 ),
+               FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max='**',
+                                     fr="Valeurs des frequences delimitant les bandes de recherche"),
+             ),
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
+                                   fr="Choix du pseudo-produit scalaire pour la resolution du probleme quadratique" ),
+           ),
+
+
+)  ;
+#& MODIF COMMANDE  DATE 10/05/2011   AUTEUR MEUNIER S.MEUNIER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
+            reentrant='n',fr="Crée un maillage à partir d'un maillage existant",
+            UIinfo={"groupes":("Maillage",)},
+         regles=(UN_PARMI('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
+                        'DETR_GROUP_MA', 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE',
+                        'QUAD_LINE', 'REPERE','RESTREINT','PENTA15_18','COPIE',),),
+
+
+
+         # le MAILLAGE est inutile si ECLA_PG
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
+
+         COPIE           =FACT(statut='f'),
+
+         CREA_POI1       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         ),
+         CREA_MAILLE     =FACT(statut='f',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  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         CREA_GROUP_MA   =FACT(statut='f',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  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         DETR_GROUP_MA   =FACT(statut='f',fr="Destruction de groupes de mailles",
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,
+                                 fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit",  ),
+         ),
+         RESTREINT   =FACT(statut='f',fr="Restreindre un maillage à des groupes de mailles",max=1,
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+         ),
+         COQU_VOLU   =FACT(statut='f',
+                           fr="Creation de mailles volumiques à partir de mailles surfaciques",
+           NOM             =SIMP(statut='o',typ='TXM'),
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max ='**'),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           PREF_MAILLE     =SIMP(statut='f',typ='TXM',defaut="MS" ),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS" ),
+           PREF_NUME       =SIMP(statut='f',typ='I'  ,defaut=1 ),
+           PLAN            =SIMP(statut='o',typ='TXM',into=("SUP","MOY","INF")),
+           b_MOY =BLOC(condition = "PLAN == 'MOY'",
+             TRANSLATION   =SIMP(statut='o',typ='TXM',into=("SUP","INF") ),
+           ),
+         ),
+         MODI_MAILLE     =FACT(statut='f',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=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4","QUAD_TRIA3"),
+                                 fr="Choix de la transformation" ),
+           b_NOS =BLOC(condition = "OPTION == 'TRIA6_7'  or  OPTION == 'QUAD8_9'  or  OPTION == 'SEG3_4'",
+             PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+             PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+           ),
+           b_QTR =BLOC(condition = "OPTION == 'QUAD_TRIA3'",
+             PREF_MAILLE     =SIMP(statut='f',typ='TXM',defaut="MS" ),
+             PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+           ),
+         ),
+         CREA_FISS = FACT(statut='f',max='**',fr="Creation d'une fissure potentielle avec elts de joint ou elts à disc",
+           NOM             =SIMP(statut='o',typ='TXM'),
+           GROUP_NO_1      =SIMP(statut='o',typ=grno),
+           GROUP_NO_2      =SIMP(statut='o',typ=grno),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM'),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut=1 ),
+         ),
+         LINE_QUAD     =FACT(statut='f',fr="Passage linéaire -> quadratique",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         HEXA20_27     =FACT(statut='f',fr="Passage HEXA20 -> HEXA27",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         PENTA15_18     =FACT(statut='f',fr="Passage PENTA15 -> PENTA18",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         QUAD_LINE     =FACT(statut='f',fr="Passage quadratique -> linéaire",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+         ),
+         REPERE          =FACT(statut='f',max='**',
+                               fr="changement de repère servant à déterminer les caractéristiques d'une section de poutre",
+           TABLE           =SIMP(statut='o',typ=table_sdaster,
+                                 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',
+                               fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
+           MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+           TAILLE_MIN      =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO('ELGA'),),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/09/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+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 == "MODE_MECA"    : return mode_meca
+  if TYPE_RESU == "DYNA_TRANS"   : return dyna_trans
+  if TYPE_RESU == "DYNA_HARMO"   : return dyna_harmo
+  if TYPE_RESU == "FOURIER_ELAS" : return fourier_elas
+  if TYPE_RESU == "FOURIER_THER" : return fourier_ther
+  if TYPE_RESU == "EVOL_VARC"    : return evol_varc
+  if TYPE_RESU == "EVOL_CHAR"    : return evol_char
+  raise AsException("type de concept resultat non prevu")
+
+CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+               fr="Créer ou enrichir une structure de donnees resultat à partir de champs aux noeuds",
+
+         OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",),
+                         fr="choix de la fonction a activer",),
+
+
+         # Création par affectation de champs :
+         #-------------------------------------
+         b_affe       =BLOC(condition = "OPERATION == 'AFFE'",
+
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=("MODE_MECA","MULT_ELAS","EVOL_ELAS","EVOL_NOLI",
+                              "DYNA_HARMO","DYNA_TRANS","FOURIER_ELAS","EVOL_THER","EVOL_VARC","EVOL_CHAR","FOURIER_THER") ),
+           b_type_resu    =BLOC(condition = "TYPE_RESU == 'EVOL_CHAR'",
+             NOM_CHAM     =SIMP(statut='o',typ='TXM',into=("PRES","FSUR_2D","FSUR_3D","FVOL_2D","FVOL_3D","VITE_VENT")),
+           ),
+
+           b_evol_char    =BLOC(condition = "TYPE_RESU != 'EVOL_CHAR'",
+             NOM_CHAM     =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+           ),
+
+           b_mode       =BLOC(condition = "TYPE_RESU == 'MODE_MECA'",
+             MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,),
+             MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,),
+           ),
+
+           AFFE         =FACT(statut='o',max='**',
+             CHAM_GD       =SIMP(statut='o',typ=(cham_gd_sdaster)),
+             MODELE        =SIMP(statut='f',typ=modele_sdaster),
+             CHAM_MATER    =SIMP(statut='f',typ=cham_mater),
+             CARA_ELEM     =SIMP(statut='f',typ=cara_elem),
+
+             b_mult_elas     =BLOC(condition = "TYPE_RESU == 'MULT_ELAS' ",
+                NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+                CHARGE          =SIMP(statut='f',typ=(char_meca),max='**'),
+             ),
+             b_evol          =BLOC(condition = "((TYPE_RESU=='EVOL_ELAS') or (TYPE_RESU=='EVOL_NOLI') or (TYPE_RESU=='EVOL_THER')\
+                                         or (TYPE_RESU=='EVOL_VARC') or (TYPE_RESU=='EVOL_CHAR') or (TYPE_RESU=='DYNA_TRANS'))",
+                regles=(UN_PARMI('INST','LIST_INST'),),
+                INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+                NUME_INIT       =SIMP(statut='f',typ='I', val_min=1),
+                NUME_FIN        =SIMP(statut='f',typ='I', val_min=1),
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 0.0 ),
+                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+             b_fourier_elas  =BLOC(condition = "(TYPE_RESU == 'FOURIER_ELAS') ",
+                NUME_MODE       =SIMP(statut='f',typ='I'),
+                TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+                CHARGE          =SIMP(statut='f',typ=(char_meca),max='**'),
+             ),
+             b_fourier_ther  =BLOC(condition = "(TYPE_RESU == 'FOURIER_THER') ",
+                NUME_MODE       =SIMP(statut='f',typ='I'),
+                TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+             ),
+             b_mode       =BLOC(condition = "TYPE_RESU == 'MODE_MECA'",
+                NUME_MODE       =SIMP(statut='f',typ='I'),
+                FREQ            =SIMP(statut='f',typ='R'),
+             ),
+             b_dyna_harmo       =BLOC(condition = "TYPE_RESU == 'DYNA_HARMO'",
+                regles=(UN_PARMI('FREQ','LIST_FREQ',),),
+                FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                PRECISION       =SIMP(statut='f',typ='R',defaut=0.0),
+             ),
+           ),
+         ),
+
+
+         # Création par assemblage d'evol_ther :
+         #-----------------------------------------
+         b_asse       =BLOC(condition = "OPERATION == 'ASSE'",
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=("EVOL_THER",) ),
+           ASSE         =FACT(statut='o',max='**',
+             RESULTAT       =SIMP(statut='o',typ=evol_ther),
+             TRANSLATION    =SIMP(statut='f',typ='R',defaut= 0. ),
+           ),
+         ),
+
+
+         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='o',
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO('ELGA'),),
+             MODELE_INIT     =SIMP(statut='o',typ=modele_sdaster),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             RESU_INIT       =SIMP(statut='o',typ=resultat_sdaster),
+             MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+         ),
+
+
+         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","STRX_ELGA"),
+                                 validators=NoRepeat(),max='**'),
+           RESU_INIT       =SIMP(statut='o',typ=evol_noli),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           MAILLAGE_INIT   =SIMP(statut='o',typ=maillage_sdaster,),
+           RESU_FINAL      =SIMP(statut='o',typ=evol_noli,),
+           MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage_sdaster,),
+           PERM_CHAM       =FACT(statut='o',max='**',
+              GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
+              GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
+              TRAN           =SIMP(statut='o',typ='R',min=3,max=3),
+              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='o',
+              regles=(EXCLUS('INST','LIST_INST'),),
+              MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage_sdaster,),
+              TABLE           =SIMP(statut='o',typ=table_sdaster,fr="Table issue de post_releve_t"),
+              INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+              LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+              b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                 b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                     PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                 b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                     PRECISION       =SIMP(statut='o',typ='R',),),
+              ),
+              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=3,max=3),
+              AXE_Z           =SIMP(statut='o',typ='R',min=3,max=3),
+           ),
+         ),
+
+         b_prep_vrc1      =BLOC(condition = "OPERATION == 'PREP_VRC1'",
+           # calculer la température dans les couches des coques multicouche à partir d'un champ de fonctions
+           # de fonctions du temps et de l'espace (épaisseur)
+
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=( "EVOL_THER",) ),
+
+           PREP_VRC1        =FACT(statut='o',max=1,
+             CHAM_GD       =SIMP(statut='o',typ=(cham_gd_sdaster)), # carte de fonctions du temps et de l'épaisseur
+             MODELE        =SIMP(statut='o',typ=modele_sdaster),    # modèle mécanique contenant les coques multicouche
+             CARA_ELEM     =SIMP(statut='o',typ=cara_elem),         # CARA_ELEM pour connaitre EPAIS et COQU_NCOU
+             INST          =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**'),
+           ),
+         ),
+
+         b_prep_vrc2      =BLOC(condition = "OPERATION == 'PREP_VRC2'",
+           # calculer la température dans les couches des coques multicouche à partir d'un evol_ther "coque"
+           # contenant TEMP/TEMP_INF/TEMP_SUP
+
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=( "EVOL_THER",) ),
+
+           PREP_VRC2        =FACT(statut='o',max=1,
+             EVOL_THER     =SIMP(statut='o',typ=(evol_ther)),       # evol_ther de type "coque" (TEMP/TEMP_INF/TEMP_SUP)
+             MODELE        =SIMP(statut='o',typ=modele_sdaster),    # modèle mécanique contenant les coques multicouche
+             CARA_ELEM     =SIMP(statut='o',typ=cara_elem),         # CARA_ELEM pour connaitre EPAIS et COQU_NCOU
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 26/07/2011   AUTEUR LABBE M.LABBE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def crea_table_prod(TYPE_TABLE, **args):
+   """Typage du concept résultat
+   """
+   if TYPE_TABLE == 'TABLE_FONCTION':
+      return table_fonction
+   elif TYPE_TABLE == 'TABLE_CONTENEUR':
+      return table_container
+   else:
+      return table_sdaster
+
+CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
+                fr="Création d'une table à partir d'une fonction ou de deux listes",
+                reentrant='f',
+                UIinfo={"groupes":("Tables",)},
+
+           regles=(EXCLUS('FONCTION','LISTE','RESU'),),
+
+           LISTE=FACT(statut='f',max='**',
+                 fr="Creation d'une table a partir de listes",
+                 regles=(UN_PARMI('LISTE_I','LISTE_R','LISTE_K')),
+                        PARA     =SIMP(statut='o',typ='TXM'),
+                        TYPE_K   =SIMP(statut='f',typ='TXM',defaut='K8',
+                                    into=('K8','K16','K24')),
+                        NUME_LIGN=SIMP(statut='f',typ='I',max='**'),
+                        LISTE_I  =SIMP(statut='f',typ='I',max='**'),
+                        LISTE_R  =SIMP(statut='f',typ='R',max='**'),
+                        LISTE_K  =SIMP(statut='f',typ='TXM', max='**'),
+           ),
+           FONCTION=FACT(statut='f',
+                    fr="Creation d'une table a partir d'une fonction",
+                        FONCTION=SIMP(statut='o',typ=(fonction_c,fonction_sdaster)),
+                        PARA=SIMP(statut='f',typ='TXM',min=2,max=2),
+           ),
+           b_fonction = BLOC(condition='FONCTION != None',
+               regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+                       DERIVABLE('FONCTION'),),
+               SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                    fr="Liste des paramètres de sensibilité.",
+                                    ang="List of sensitivity parameters"),
+           ),
+           RESU=FACT(statut='f',max=1,
+                fr="Creation d'une table a partir d'un resultat ou d'un champ",
+                regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                        UN_PARMI('TOUT_CMP','NOM_CMP'),
+                        PRESENT_ABSENT('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
+                        AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
+                        ),
+                        CHAM_GD  =SIMP(statut='f',typ=cham_gd_sdaster),
+                        RESULTAT =SIMP(statut='f',typ=(resultat_sdaster) ),
+                        b_resultat   =BLOC(condition = "RESULTAT != None",
+                               regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
+                                              'MODE','LIST_MODE','FREQ','LIST_FREQ'),),
+                               NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+                               TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+                               LIST_ORDRE      =SIMP(statut='f',typ=(listis_sdaster) ),
+                               INST            =SIMP(statut='f',typ='R',max='**'),
+                               LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                               MODE            =SIMP(statut='f',typ='I',max='**'),
+                               LIST_MODE       =SIMP(statut='f',typ=(listis_sdaster) ),
+                               FREQ            =SIMP(statut='f',typ='R',max='**'),
+                               LIST_FREQ       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                                       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                                       PRECISION       =SIMP(statut='o',typ='R',),),
+                            ),
+                        b_cham_gd   =BLOC(condition = "CHAM_GD != None",
+                               CARA_ELEM       =SIMP(statut='f',typ=cara_elem),),
+                      TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                      NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+                      TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                      GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                      GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                      MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                      NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                      ),
+
+           TYPE_TABLE = SIMP(statut='f', typ='TXM', defaut="TABLE",
+                             into=('TABLE', 'TABLE_FONCTION', 'TABLE_CONTENEUR'),),
+
+           TITRE=SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+
+
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+DEBUG=PROC(nom="DEBUG",op=137,
+            UIinfo={"groupes":("Utilitaires","CACHE")},
+               fr="Permettre de changer entre 2 commandes quelques variables globales de debug",
+
+     SDVERI          =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+                           statut='f',typ='TXM',into=('OUI','NON')),
+     JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                           statut='f',typ='TXM',into=('OUI','NON')),
+     JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                           statut='f',typ='TXM',into=('OUI','NON')),
+     IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+                           statut='f',typ='TXM',into=("OUI","NON")),
+ );
+#& MODIF COMMANDE  DATE 12/10/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+DEBUT=MACRO(nom="DEBUT",
+            op=OPS("ops.build_debut"),
+            repetable='n',
+            UIinfo={"groupes":("Gestion du travail",)},
+            fr="Ouverture d'une étude. Allocation des ressources mémoire et disque et fichiers",
+            sd_prod=ops.DEBUT,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+                           statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+#         FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+#                               typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=2,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE'),),
+           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'),
+         ),
+
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+
+         CODE            =FACT(fr="définition d'un nom pour l'ensemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           NIV_PUB_WEB     =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')),
+           VISU_EFICAS     =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI'),
+         ),
+
+         ERREUR          =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
+           ERREUR_F        =SIMP(statut='f',typ='TXM',into=('ABORT','EXCEPTION'),),
+         ),
+
+         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'),
+           SDVERI          =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+                                 statut='f',typ='TXM',into=('OUI','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',)),
+         ),
+
+         MESURE_TEMPS     =FACT(fr="Pour choisir les mesures de temps consommé dans les commandes",
+                               statut='d',min=1,max=1,
+           NIVE_DETAIL      =SIMP(fr="niveau de détail des impressions",
+                                 statut='f',typ='I',into=(0,1,2,3),defaut=1),
+                                 # 0 : rien
+                                 # 1 : impression en fin de commande des mesures principales
+                                 # 2 : impression en fin de commande des mesures principales et secondaires
+                                 # 3 : impression des mesures principales et secondaires pour chaque pas de temps
+         ),
+
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='d',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'),
+           DYNAMIQUE       =SIMP(statut='f',typ='I',defaut=1),
+         ),
+
+         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
+           regles=(EXCLUS('VALE','POURCENTAGE'),),
+#          par défaut VALE fixée à 10. dans le FORTRAN si CODE présent
+           VALE            =SIMP(statut='f',typ='I',val_min=0,),
+#          par défaut 10% dans le FORTRAN
+           POURCENTAGE     =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
+#          valeur en secondes de la réserve maximum bornée à 900 secondes
+           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=900),),
+
+         IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+         LANG = SIMP(statut='f', typ='TXM', into=('FR', 'EN',),
+                     fr="Permet de choisir la langue utilisée pour les messages (si disponible)",
+                     ang="Allows to choose the language used for messages (if available)"),
+
+         INFO     = SIMP(statut='f', typ='I', defaut=1, into=(1,2),),
+);
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=mode_meca,
+                     reentrant='f',
+                     fr="Définit la base d'une sous-structuration dynamique ou d'une recombinaison modale",
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
+         regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS','ORTHO_BASE'),),
+         CLASSIQUE       =FACT(statut='f',
+           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',max='**',
+           regles=(UN_PARMI('MODE_MECA','BASE_MODALE','MODE_INTF'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca,max='**'  ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',max='**'),
+           BASE_MODALE     =SIMP(statut='f',typ=mode_meca ),
+           MODE_INTF       =SIMP(statut='f',typ=(mode_meca,mult_elas), ),
+         ),
+         b_ritz          =BLOC(condition = "RITZ != None",
+           INTERF_DYNA     =SIMP(statut='f',typ=interf_dyna_clas ),
+           NUME_REF        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+           ORTHO           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                               fr="Reorthonormalisation de la base de Ritz" ),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           b_ortho          =BLOC(condition = "ORTHO == 'OUI' ",
+             MATRICE          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ) ),
+               ),
+         ),
+        DIAG_MASS        =FACT(statut='f',max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**'  ),
+           MODE_STAT       =SIMP(statut='o',typ=mode_meca ),
+         ),
+        ORTHO_BASE        =FACT(statut='f',max='**',
+           BASE       =SIMP(statut='o',typ=(mode_meca,mult_elas)),
+           MATRICE    =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ) ),
+         ),
+
+#-------------------------------------------------------------------
+#       Catalogue commun SOLVEUR
+        SOLVEUR         =C_SOLVEUR('DEFI_BASE_MODALE'),
+#-------------------------------------------------------------------
+
+
+
+        TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+        INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
+
+
+DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",
+                    op=OPS('Macro.defi_cable_bp_ops.defi_cable_bp_ops'),
+                    sd_prod=cabl_precont,
+                    fr="Calculer les profils initiaux de tension le long des cables " \
+                       "de précontrainte d'une structure en béton",
+                    reentrant='n',UIinfo={"groupes":("Modélisation","CACHE")},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma,max='**'),
+         DEFI_CABLE      =FACT(statut='o',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),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,
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+         ),
+         CONE            =FACT(statut='f',
+           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
+
+DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n',
+            fr="Définit les profils initiaux de tension d'une structure en béton le long des cables de précontrainte"
+               +" (utilisée par la macro DEFI_CABLE_BP)",
+            UIinfo={"groupes":("Modélisation",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma,max='**'),
+         DEFI_CABLE      =FACT(statut='o',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           GROUP_NO_FUT    =SIMP(statut='f',typ=grno,validators=NoRepeat(),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,
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         CONE            =FACT(statut='f',min=0,
+           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0, defaut=0.E+0 ),
+           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 10/10/2011   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
+                   fr="Définir le comportement d'un monocristal, d'un polycristal ou de groupes de fibres",
+                   reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+# on exclut MULTIFBRE de MONOCRISTAL ou POLYCRISTAL car la structure de données n'est pas organisée pareil pour ces cas
+                  regles=(UN_PARMI('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'),
+                 PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE','MATER_SECT'),
+                         ),
+          MONOCRISTAL    =FACT(statut='f', max=5,
+             MATER           =SIMP(statut='o', typ=mater_sdaster, max=1),
+             ECOULEMENT      =SIMP(statut='o', typ='TXM', max=1,
+                                into=('MONO_VISC1', 'MONO_VISC2', 'MONO_DD_KR', 'MONO_DD_CFC', 'MONO_DD_CC', 'MONO_DD_FAT',),
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écoulement viscoplastique"),
+             ELAS            =SIMP(statut='f', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le comportement élastique (un et un seul)"),
+             b_non_dd =BLOC(condition="ECOULEMENT=='MONO_VISC1' or ECOULEMENT=='MONO_VISC2'",
+                   ECRO_ISOT       =SIMP(statut='f', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage isotrope"),
+                   ECRO_CINE       =SIMP(statut='f', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"),
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,defaut=('OCTAEDRIQUE',),
+                                into=('OCTAEDRIQUE','BCC24','CUBIQUE1','CUBIQUE2','ZIRCONIUM','UNIAXIAL','UTILISATEUR'),
+                                ),
+                   b_util =BLOC(condition="FAMI_SYST_GLIS=='UTILISATEUR' ",
+                          TABL_SYST_GLIS =SIMP(statut='f', typ=table_sdaster, max=1,),
+                           ),
+                                ),
+             b_dd_kr =BLOC(condition="ECOULEMENT=='MONO_DD_KR' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,
+                                into=('BCC24','UTILISATEUR'),defaut=('BCC24',),),
+                   b_util =BLOC(condition="FAMI_SYST_GLIS=='UTILISATEUR' ",
+                          TABL_SYST_GLIS =SIMP(statut='f', typ=table_sdaster, max=1,),
+                           ),
+                                ),
+             b_ecp_cfc =BLOC(condition="ECOULEMENT=='MONO_DD_FAT' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,
+                                into=('OCTAEDRIQUE','UTILISATEUR',),defaut=('OCTAEDRIQUE',),),
+                                ),
+             b_dd_cfc =BLOC(condition="ECOULEMENT=='MONO_DD_CFC' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,
+                                into=('OCTAEDRIQUE','UTILISATEUR',),defaut=('OCTAEDRIQUE',),),
+                   b_util =BLOC(condition="FAMI_SYST_GLIS=='UTILISATEUR' ",
+                          TABL_SYST_GLIS =SIMP(statut='f', typ=table_sdaster, max=1,),
+                           ),
+                                ),
+             b_dd_cc =BLOC(condition="ECOULEMENT=='MONO_DD_CC' ",
+                   FAMI_SYST_GLIS  =SIMP(statut='f',typ='TXM', max=1,
+                                into=('CUBIQUE1','UTILISATEUR',),defaut=('CUBIQUE1',),),
+                   b_util =BLOC(condition="FAMI_SYST_GLIS=='UTILISATEUR' ",
+                          TABL_SYST_GLIS =SIMP(statut='f', typ=table_sdaster, max=1,),
+                           ),
+                                ),
+                                ),
+
+          MATR_INTER =SIMP(statut='f', typ=table_sdaster, max=1,),
+
+          ROTA_RESEAU =SIMP(statut='f', typ='TXM', max=1,into=('NON','POST','CALC'),defaut='NON',
+                   fr="rotation de reseau : NON, POST, CALC"),
+
+          POLYCRISTAL    =FACT(statut='f', max='**',
+           regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+             MONOCRISTAL     =SIMP(statut='o', typ=compor_sdaster, max=1),
+             FRAC_VOL  =SIMP(statut='o', typ='R', max=1,fr="fraction volumique de la phase correspondant au monocristal"),
+             ANGL_REP  =SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles nautiques en degrés"),
+             ANGL_EULER=SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles d'Euler   en degrés"),
+                                ),
+
+
+          b_poly      =BLOC( condition = "POLYCRISTAL!='None'",
+          LOCALISATION     =SIMP(statut='f', typ='TXM', max=1, into=('BZ', 'BETA', 'RL',),
+                fr="Donner le nom de la règle de localisation"),
+
+           b_beta      =BLOC( condition = "LOCALISATION=='BETA'",
+             DL            =SIMP(statut='o',typ='R',max=1),
+             DA            =SIMP(statut='o',typ='R',max=1),
+             ),
+             ),
+
+#####################################################################################
+          GEOM_FIBRE = SIMP(statut='f',max=1,typ=gfibre_sdaster,
+                   fr="Donner le nom du concept regroupant tous les groupes de fibres (issu de DEFI_GEOM_FIBRE)"),
+          MATER_SECT = SIMP(statut='f',max=1,typ=mater_sdaster,
+                   fr="Donner le nom du materiau pour les caracteristiques homogeneisees sur la section"),
+          MULTIFIBRE    = FACT(statut='f',max='**',
+          GROUP_FIBRE        =SIMP(statut='o', typ='TXM', max='**'),
+             MATER           =SIMP(statut='o', typ=mater_sdaster, max=1,
+                                   fr="Donner le nom du materiau pour le groupe de fibres"),
+             ALGO_1D         =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+             DEFORMATION      =SIMP(statut='f',typ='TXM',defaut="PETIT",
+                                     into=("PETIT","PETIT_REAC","GROT_GDEP")),
+             RELATION        =SIMP(statut='f', typ='TXM', max=1,defaut="ELAS",into=C_RELATION(),
+                                  fr="Donner le nom de la relation incrementale pour le groupe de fibres",
+                                  ),
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                                 into=(
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "VMIS_ISOT_PUIS",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_INDT",
+                                       "GRANGER_FP_V",
+                                       "BETON_UMLV_FP",
+                                       "ROUSS_PR",
+                                       "BETON_DOUBLE_DP",
+                                       ),),
+# on pourrait ajouter TOUT_GROUP_FIBRE
+
+                                ) );
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction_sdaster,
+                    fr="Définir la valeur d'une grandeur invariante",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='o',typ='R',),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 13/09/2011   AUTEUR MASSIN P.MASSIN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+#
+DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
+                  op        = 30,
+                  sd_prod   = char_contact,
+                  fr        = "Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
+                  #en        = "Allows the definition of contact surfaces as well as unilateral conditions",
+                  reentrant = 'n',
+                  UIinfo    = {"groupes":("Modélisation",)},
+
+# MODELE
+
+         MODELE          =SIMP(statut='o',typ=modele_sdaster,),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2),),
+
+# FORMULATION (UNIQUE PAR OCCURRENCE DE DEFI_CONTACT)
+
+         FORMULATION     =SIMP(statut='o',
+                               position='global',
+                               typ='TXM',
+                               fr="Choix d'une formulation de contact ou de liaisons unilatérales",
+                               defaut="DISCRETE",
+                               into=("DISCRETE","CONTINUE","XFEM","LIAISON_UNIL",),),
+
+# PARAMETRE GENERAL : FROTTEMENT
+
+         FROTTEMENT      =SIMP(statut='f',
+                               position='global',
+                               typ='TXM',
+                               fr="Choix d'un modèle de frottement (uniquement pour les formulations de contact)",
+                               defaut="SANS",
+                               into=("COULOMB","SANS",)),
+
+### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT MAILLE, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
+
+         b_contact_mail=BLOC(condition = "((FORMULATION == 'CONTINUE') or (FORMULATION == 'DISCRETE'))",
+#          ARRET DU CALCUL POUR LE MODE SANS RESOLUTION DU CONTACT
+           STOP_INTERP   = SIMP(statut='f',
+                                typ='TXM',
+                                fr="Arrête le calcul dès qu'une interpénétration est détectée en mode RESOLUTION='NON'",
+                                defaut="NON",
+                                into=("OUI","NON")),
+#          LISSAGE DES NORMALES PAR MOYENNATION AUX NOEUDS
+           LISSAGE       = SIMP(statut='f',
+                                typ='TXM',
+                                fr="Lissage des normales par moyennation aux noeuds",
+                                defaut="NON",
+                                into=("OUI","NON")),
+#          VERIFICATION DE L'ORIENTATION ET DE LA COHERENCE DES NORMALES
+           VERI_NORM       =SIMP(statut='f',
+                                 typ='TXM',
+                                 fr="Vérification de l'orientation (sortante) des normales aux surfaces",
+                                 defaut="OUI",
+                                 into=("OUI","NON"),),
+           ),
+
+### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
+
+         b_contact=BLOC(condition = "FORMULATION != 'LIAISON_UNIL' ",
+
+# PARAMETRE GENERAL : BOUCLE DE GEOMETRIE
+
+           b_bouc_geom_mail=BLOC(condition = "(FORMULATION == 'DISCRETE' or FORMULATION == 'CONTINUE')",
+                                 REAC_GEOM =SIMP(statut='f',
+                                                 typ='TXM',
+                                                 into=("AUTOMATIQUE","CONTROLE","SANS",),
+                                                 defaut="AUTOMATIQUE",
+                                                 ),
+                                 b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=10),
+                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.01),
+                                   ),
+                                 b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                   NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
+                                   ),
+                                 ),
+
+           b_bouc_geom_xfem=BLOC(condition = "FORMULATION == 'XFEM' ",
+                                 REAC_GEOM =SIMP(statut='f',
+                                                 typ='TXM',
+                                                 into=("AUTOMATIQUE","CONTROLE","SANS",),
+                                                 defaut="SANS",
+                                                 ),
+                                 b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=10),
+                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                   ),
+                                 b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                   NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
+                                   ),
+                                 ),
+
+
+# PARAMETRE GENERAL : BOUCLE DE CONTACT
+
+           b_bouc_cont_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
+                                 ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                 ),
+
+           b_bouc_cont_cont=BLOC(condition = "FORMULATION == 'CONTINUE' ",
+                                 ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
+                                                      into=("MULT","MAXI")),
+                                 b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
+                                   ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                   ),
+                                 b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
+                                   ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+                                   ),
+                                 ),
+
+           b_bouc_cont_xfem=BLOC(condition = "FORMULATION == 'XFEM' ",
+                                 ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
+                                                      into=("MULT","MAXI")),
+                                 b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
+                                                         ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                   ),
+                                 b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
+                                                         ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+                                   ),
+                                 ),
+
+# PARAMETRE GENERAL : BOUCLE DE FROTTEMENT
+
+           b_bouc_frot     = BLOC(condition = "FROTTEMENT=='COULOMB' and ((FORMULATION == 'CONTINUE') or (FORMULATION == 'XFEM')) ",
+                                  REAC_FROT =SIMP(statut='f',
+                                                  typ='TXM',
+                                                  defaut="AUTOMATIQUE",
+                                                  into=("AUTOMATIQUE","CONTROLE",),
+                                                  ),
+                                  b_automatique = BLOC(condition = "REAC_FROT == 'AUTOMATIQUE' ",
+                                                       ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=10),
+                                                       RESI_FROT      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                    ),
+                                  b_controle    = BLOC(condition = "REAC_FROT == 'CONTROLE' ",
+                                                       NB_ITER_FROT   = SIMP(statut='f',typ='I',defaut = 2),
+                                    ),
+                                  ),
+
+# PARAMETREs GENERAUX : METHODES DISCRETES
+
+           b_para_discret  = BLOC(condition = "FORMULATION == 'DISCRETE' ",
+#                                 ## METHODES DE DUALISATION ##
+                                  STOP_SINGULIER= SIMP(statut='f',
+                                                       typ='TXM',
+                                                       fr="Tient compte de la singularité de la matrice de contact",
+                                                       defaut="OUI",
+                                                       into=("OUI","NON"),),
+                                  NB_RESOL      = SIMP(statut='f',
+                                                       typ='I',
+                                  fr="Nombre de résolutions simultanées pour la construction du complément de Schur",
+                                                       defaut=10,),
+#                                 ## GCP ##
+                                  RESI_ABSO     = SIMP(statut='f',
+                                                       typ='R',
+                                  fr="Critère de convergence (niveau d'interpénétration autorisé pour 'GCP')",),
+                                  REAC_ITER     = SIMP(statut='f',
+                                                       typ='I',
+                                                       fr="Fréquence de réinitialisation de la conjugaison ('GCP')",
+                                                       defaut=3,),
+                                  ITER_GCP_MAXI = SIMP(statut='f',
+                                                       typ='I',
+                                                       fr="Nombre d'itérations maximal ('GCP')",
+                                                       defaut=0,),
+                                  PRE_COND      = SIMP(statut='f',
+                                                       typ='TXM',
+                                                       fr="Choix d'un préconditionneur (accélère la convergence de 'GCP')",
+                                                       defaut="SANS",
+                                                       into=("DIRICHLET","SANS"),),
+                                  ITER_PRE_MAXI = SIMP(statut='f',
+                                                       typ='I',
+                                                       fr="Nombre d'itérations maximal pour le préconditionneur ('GCP')",
+                                                       defaut=0,),
+                                  COEF_RESI     = SIMP(statut='f',
+                                                       typ='R',
+                                                       fr="Critère de convergence du préconditionneur (COEF_RESI*RESI_ABSO)",
+                                                       defaut = 1.,),
+                                  RECH_LINEAIRE = SIMP(statut='f',
+                                                       typ='TXM',
+                                  fr="Autorisation de sortie du domaine admissible lors de la recherche linéaire",
+                                                       defaut="ADMISSIBLE",
+                                                       into=("ADMISSIBLE","NON_ADMISSIBLE"),),
+                                  ),
+           ), #fin bloc b_contact
+
+## AFFECTATIONS (ZONES PAR ZONES)
+
+# AFFECTATION - CAS LIAISON_UNILATERALE
+
+         b_affe_unil     = BLOC(condition = "FORMULATION == 'LIAISON_UNIL'",
+                                ZONE=FACT(statut='o',
+                                          max='**',
+# -- Liaison unilatérale
+                                          regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+                                          GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+                                          MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+#
+                                          NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                                          COEF_IMPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+                                          COEF_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+# -- Incompatibilité avec CL
+                                          SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+
+                                          ),
+                                ), #fin bloc b_affe_unil
+
+# AFFECTATION - CAS DISCRET
+
+         b_affe_discret  = BLOC(condition = "FORMULATION == 'DISCRETE'",
+                                ZONE=FACT(statut='o',
+                                          max='**',
+# -- Appariement
+                                          APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                                                into=("NODAL","MAIT_ESCL"),),
+#
+                                          regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+                                                  UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+                                          GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+#
+                                          NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                                                into=("MAIT","MAIT_ESCL","ESCL"),),
+#
+                                          VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
+
+                                          b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+                                            MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+
+                                          b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+                                            MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
+
+                                          b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+                                            ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+
+                                          b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+                                            ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                                           into  =("PROCHE","FIXE")),
+
+                                          b_appa_fixe     =BLOC(condition = "TYPE_APPA == 'FIXE'",
+                                            DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+                                            ),
+#
+                                          DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+                                            CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
+                                            ),
+
+                                          DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                          DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                          TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+                                          TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+# -- Incompatibilité avec CL
+                                          SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          SANS_MAILLE     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_MA   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+# -- Mode sans calcul
+                                          RESOLUTION      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                                          b_verif=BLOC(condition = "RESOLUTION == 'NON' ",
+                                            TOLE_INTERP   = SIMP(statut='f',typ='R',defaut = 0.),
+                                            ),
+# -- Résolution
+                                          ALGO_CONT       =SIMP(statut='o',typ='TXM',defaut="CONTRAINTE",
+                                                                into=("CONTRAINTE","LAGRANGIEN","PENALISATION","GCP"),),
+
+                                          b_active=BLOC(condition = "ALGO_CONT == 'CONTRAINTE' ",
+                                                        fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                                                        GLISSIERE=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                                                        b_glissiere=BLOC(condition = "GLISSIERE == 'OUI' ",
+                                                                         ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
+                                                                        ),
+                                                        ),
+#
+                                          b_penal_contact=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                                               fr="Paramètres de la méthode pénalisée (contact)",
+                                                               E_N=SIMP(statut='o',typ='R'),
+                                                               ),
+#
+                                          b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
+                                                            fr="Paramètres du frottement de Coulomb",
+                                                            COULOMB       =SIMP(statut='o',typ='R',),
+                                                            COEF_MATR_FROT=SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                            ALGO_FROT     =SIMP(statut='o',typ='TXM',defaut="PENALISATION",
+                                                                                into=("PENALISATION","LAGRANGIEN"),),
+#
+                                                            b_penal_frot=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                              fr="Paramètres de la méthode pénalisée (frottement)",
+                                                                              E_T=SIMP(statut='o',typ='R'),
+                                                                              ),
+                                                           ),
+                                          ), #fin mot-clé facteur ZONE
+                                ), #fin bloc b_affe_discret
+
+# AFFECTATION - CAS CONTINUE
+
+         b_affe_continue = BLOC(condition = "FORMULATION == 'CONTINUE'",
+                                ZONE=FACT(statut='o',
+                                          max='**',
+# -- Appariement
+                                          APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                                                into=("MAIT_ESCL",)),
+#
+                                          regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+                                                  UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+                                          GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                          MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+#
+                                          NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                                                into=("MAIT","MAIT_ESCL","ESCL"),),
+#
+                                          VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
+
+                                          b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+                                            MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+
+                                          b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+                                            MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                into=("AUTO","FIXE","VECT_Y")),
+
+                                          b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+                                            ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+
+                                          b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+                                            ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                            ),
+#
+                                          TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                                           into  =("PROCHE","FIXE")),
+
+                                          b_appa_fixe=BLOC(condition = "TYPE_APPA == 'FIXE'",
+                                            DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+                                            ),
+#
+                                          DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                          b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+                                            CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
+                                            ),
+
+                                          DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                          DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                          TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+                                          TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+# -- Incompatibilité avec CL
+                                          SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                          SANS_MAILLE     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_MA   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+#
+                                          FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                          b_fond_fissure  =BLOC(condition = "FOND_FISSURE == 'OUI' ",
+                                                                fr="Traitement en fond de fissure",
+                                          regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+                                          NOEUD_FOND    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                          GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                          MAILLE_FOND   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                          GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                                                ),
+#
+                                          RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                          b_raccord_surf =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",
+                                                               fr="Traitement du raccord surfacique",
+                                                               regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+                                          NOEUD_RACC    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                          GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                                               ),
+#
+                                          EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+# -- Mode sans calcul
+                                          RESOLUTION       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                                          b_verif=BLOC(condition = "RESOLUTION == 'NON' ",
+                                                       TOLE_INTERP   = SIMP(statut='f',typ='R',defaut = 0.),
+                                                       ),
+# -- Fonctionnalités spécifiques 'CONTINUE'
+                                          INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",
+                                          into=("NOEUD","GAUSS","SIMPSON","NCOTES","SIMPSON1","SIMPSON2","NCOTES1","NCOTES2"),),
+                                          b_gauss   =BLOC(condition = "INTEGRATION == 'GAUSS' ",
+                                                          fr="Dégré du polynôme de Legendre donnant les points de Gauss",
+                                                          ORDRE_INT = SIMP(statut='f',typ='I',defaut=3,min=1,max=10),
+                                            ),
+                                          b_ncotes  =BLOC(condition = "INTEGRATION == 'NCOTES' ",
+                                                          fr="Dégré du polynôme interpolateur",
+                                                          ORDRE_INT = SIMP(statut='f',typ='I',defaut=3,min=3,max=10),
+                                            ),
+                                          b_simpson =BLOC(condition = "INTEGRATION == 'SIMPSON' ",
+                                                          fr="Nombre de partitions du domaine",
+                                                          ORDRE_INT = SIMP(statut='f',typ='I',defaut=1,min=1,max=4),
+                                            ),
+#
+                                          CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",
+                                                                into=("OUI","INTERPENETRE","NON"),),
+#
+                                          GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+#
+                                          ALGO_CONT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                into=("STANDARD","AVANCE","PENALISATION"),),
+
+                                          b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
+                                                          fr="Paramètres de la formulation Lagrangienne",
+                                                          COEF_CONT = SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          ),
+                                          b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
+                                                          fr="Paramètres du Lagrangien augmenté",
+                                                          COEF_REGU_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          COEF_STAB_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          COEF_PENA_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                          ),
+                                          b_cont_pena=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                                            fr="Paramètres de la méthode pénalisée",
+                                                            COEF_PENA_CONT  =SIMP(statut='o',typ='R'),
+                                                            ),
+#
+                                          COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                                          b_compliance=BLOC(condition = "COMPLIANCE == 'OUI' ",
+                                                            fr="Paramètres de la compliance",
+                                                            ASPERITE = SIMP(statut='o',typ='R',),
+                                                            E_N      = SIMP(statut='o',typ='R',),
+                                                            E_V      = SIMP(statut='f',typ='R',defaut=0.E+0),
+                                            ),
+#
+                                          b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
+                                                            fr="Paramètres du frottement de Coulomb",
+                                                            COULOMB    = SIMP(statut='o',typ='R',),
+                                                            SEUIL_INIT = SIMP(statut='f',typ='R',defaut=0.E+0),
+#
+                                          regles=(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
+                                          SANS_NOEUD_FR    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                          SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                                            b_sans_group_no_frot=BLOC(condition = " SANS_GROUP_NO_FR != None or \
+                                                                                                    SANS_NOEUD_FR != None ",
+                                                            fr="Direction de frottement à exclure (uniquement dans le cas 3D)",
+                                                            DIRE_EXCL_FROT=SIMP(statut='f',typ='R',min=3,max=3),
+                                                            ),
+
+                                            ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+                                            b_frot_std      =BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+                                                                  fr="Paramètres de la formulation Lagrangienne",
+                                                                  COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  ),
+                                            b_frot_avc      =BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+                                                                  fr="Paramètres du Lagrangien augmenté",
+                                                                  COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  ),
+                                            b_frot_pena     =BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                  fr="Paramètres de la méthode pénalisée",
+                                                                  COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
+                                                                  ),
+#
+                                            USURE           =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
+                                            b_usure         =BLOC(condition = "USURE == 'ARCHARD' ",
+                                                                  fr="Parametres de la loi d'usure d'Archard",
+                                                                  K =SIMP(statut='o',typ='R',),
+                                                                  H =SIMP(statut='o',typ='R',val_min=1E-8),
+                                                                  ),
+
+                                            ), #fin bloc b_frottement
+                                          ), #fin mot-clé facteur ZONE
+                                ), #fin bloc b_affe_continue
+
+
+# AFFECTATION - CAS XFEM
+
+           b_affe_xfem =BLOC(condition = "FORMULATION == 'XFEM'",
+                             ZONE=FACT(statut='o',
+                                       max='**',
+# -- Fissure
+                                       FISS_MAIT      = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                       TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+
+# -- Fonctionnalités spécifiques 'XFEM'
+                                       INTEGRATION    = SIMP(statut='f',
+                                                             typ='TXM',
+                                                             defaut="GAUSS",
+                                                             
+                                          into=("NOEUD","GAUSS","SIMPSON","NCOTES","SIMPSON1","SIMPSON2","NCOTES1","NCOTES2"),),
+                                          b_gauss   =BLOC(condition = "INTEGRATION == 'GAUSS' ",
+                                                          fr="Dégré du polynôme de Legendre donnant les points de Gauss",
+                                                          ORDRE_INT = SIMP(statut='f',typ='I',defaut=6,min=1,max=10),
+                                            ),
+                                          b_ncotes  =BLOC(condition = "INTEGRATION == 'NCOTES' ",
+                                                          fr="Dégré du polynôme interpolateur",
+                                                          ORDRE_INT = SIMP(statut='f',typ='I',defaut=3,min=3,max=10),
+                                            ),
+                                          b_simpson =BLOC(condition = "INTEGRATION == 'SIMPSON' ",
+                                                          fr="Nombre de partitions du domaine",
+                                                          ORDRE_INT = SIMP(statut='f',typ='I',defaut=1,min=1,max=4),
+                                            ),
+                                            
+                                       RELATION       = SIMP(statut='f',typ='TXM',defaut="NON",
+                                                             into=("CZM_EXP_REG","CZM_LIN_REG","NON"),),
+
+                                       ALGO_LAGR      = SIMP(statut='f',typ='TXM',defaut="VERSION1",
+                                                             into=("NON","VERSION1","VERSION2"),),
+                                       COEF_ECHELLE   = SIMP(statut='f',typ='R',defaut=1.E+6),
+
+                                       ALGO_CONT      = SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION","CZM"),),
+                                                                  
+                                       b_cont_nczm =BLOC(condition = "ALGO_CONT!='CZM'",
+                                                CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                                GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                                ),
+
+                                       b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD'",
+                                                fr="Parametres de la formulation Lagrangienne",
+                                                COEF_CONT    =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                ),
+             
+                                       b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
+                                                 fr="Parametres du Lagrangien augmenté",
+                                                 COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                 COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 ),
+
+                                       b_cont_pen=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                                 fr="Paramètre de la méthode pénalisée",
+                                                 COEF_PENA_CONT =SIMP(statut='o',typ='R'),
+                                                 ),
+
+                                       b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' and  ALGO_CONT != 'CZM' ",
+                                                 fr="Paramètres du frottement",
+                                                 COULOMB      =SIMP(statut='o',typ='R',),
+                                                 SEUIL_INIT   =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                 ALGO_FROT    =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                            into=("STANDARD","AVANCE","PENALISATION"),),
+
+                                                 b_frot_std=BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+                                                                  fr="Parametres de la formulation Lagrangienne",
+                                                                  COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  ),
+                                                 b_frot_avc=BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+                                                                  fr="Parametres du Lagrangien augmenté",
+                                                                  COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                  COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                                  COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                                                  ),
+                                                 b_frot_pen=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                  fr="Paramètre de la méthode pénalisée",
+                                                                  COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
+                                                                  ),
+                                                        ), #fin bloc b_frottement
+                                       ), #fin mot-clé facteur ZONE
+                             ), #fin bloc b_affe_xfem
+
+                  ) #fin OPER
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+                    fr="Déterminer les caractéristiques matériaux homogénéisées d'une coque multicouche à partir"
+                        +" des caractéristiques de chaque couche",
+         COUCHE          =FACT(statut='o',max='**',
+           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           ORIENTATION     =SIMP(statut='f',typ='R',defaut= 0.E+0,
+                                 val_min=-90.E+0,val_max=90.E+0   ),
+         ),
+         IMPRESSION      =FACT(statut='f',
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+def DEFIC_prod(self,ACTION,UNITE,**args):
+  if ACTION == "ASSOCIER" or ACTION == "RESERVER":
+    if UNITE != None :
+      return
+    else :
+      return entier
+  elif ACTION == "LIBERER"  :
+    return
+  else :
+    raise AsException("ACTION non prevue : %s" % ACTION)
+
+DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",
+                   op=OPS("ops.build_DEFI_FICHIER"),
+                   sd_prod=DEFIC_prod,
+                   reentrant='n',
+                   UIinfo={"groupes":("Gestion du travail",)},
+                   fr="Ouvre ou ferme un fichier associé à un numéro d'unité logique",
+
+            ACTION        =SIMP(statut='f',typ='TXM',into=("ASSOCIER","LIBERER","RESERVER"),defaut="ASSOCIER"),
+
+            b_associer    =BLOC(condition = "ACTION == 'ASSOCIER'",
+                                fr="Paramètres pour l'ouverture du fichier",
+                                regles=(AU_MOINS_UN('FICHIER','UNITE'),),
+               UNITE      =SIMP(statut='f',typ='I' ,val_min=1),
+               FICHIER    =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+               TYPE       =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
+
+               b_type_ascii  =BLOC(condition = "TYPE == 'ASCII'",fr="Paramètres pour le type ASCII",
+                  ACCES      =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
+               ),
+               b_type_autre  =BLOC(condition = "TYPE != 'ASCII'",fr="Paramètres pour les types BINARY et LIBRE",
+                  ACCES      =SIMP(statut='f',typ='TXM',into=("NEW","OLD"),defaut="NEW"),
+               ),
+            ),
+
+            b_reserver    =BLOC(condition = "ACTION == 'RESERVER'",
+                                fr="Paramètres pour la réservation de l'unité du fichier",
+                                regles=(AU_MOINS_UN('FICHIER','UNITE'),),
+               UNITE      =SIMP(statut='f',typ='I' ,val_min=1),
+               FICHIER    =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+               TYPE       =SIMP(statut='f',typ='TXM',into=("ASCII",),defaut="ASCII"),
+               ACCES      =SIMP(statut='f',typ='TXM',into=("APPEND",),defaut="APPEND"),
+            ),
+
+            b_liberer    =BLOC(condition = "ACTION == 'LIBERER'",
+                               fr="Paramètres pour la fermeture du fichier",
+                               regles=(UN_PARMI('FICHIER','UNITE'),),
+                  UNITE         =SIMP(statut='f',typ='I' ,val_min=1),
+                  FICHIER   =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+           ),
+
+           INFO          =SIMP(statut='f',typ='I',into=(1,2) ),
+           )
+#& MODIF COMMANDE  DATE 27/09/2011   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+               fr="Définition des caratéristiques d'une fissure ou d'une interface avec X-FEM",
+            regles = EXCLUS('MODELE_GRILLE','FISS_GRILLE'),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       modele sous-jacent
+# ------------------------------------------------------------------------------------------------------------------------
+
+    MODELE                =SIMP(statut='o',typ=modele_sdaster),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       grille auxiliaire
+# ------------------------------------------------------------------------------------------------------------------------
+
+    MODELE_GRILLE         =SIMP(statut='f',typ=modele_sdaster,max=1,position='global'),
+    FISS_GRILLE           =SIMP(statut='f',typ=fiss_xfem,max=1),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       fissure/interface
+# ------------------------------------------------------------------------------------------------------------------------
+
+      TYPE_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("FISSURE","INTERFACE",) ,defaut="FISSURE",position='global'),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       caracteristiques de la fissure/interface
+# ------------------------------------------------------------------------------------------------------------------------
+
+    DEFI_FISS             =FACT(statut='o',max=1,
+
+      regles              =UN_PARMI('GROUP_MA_FISS','FONC_LN','FORM_FISS','CHAM_NO_LSN'),
+
+# impossible de faire des regles dans des blocs condition, dommage
+#       b_fissure           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",fr="Regles pour les fissures",
+#                 regles    =(ENSEMBLE('FONC_LN','FONC_LT'),
+#                             ENSEMBLE('CHAM_NO_LSN','CHAM_NO_LST'),
+#                             ENSEMBLE('GROUP_MA_FISS','GROUP_MA_FOND')),
+#                                ),
+# 
+#       b_interface           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",fr="Regles pour les interfaces",
+#                 regles    =(PRESENT_ABSENT('FONC_LN','FONC_LT'),
+#                             PRESENT_ABSENT('CHAM_NO_LSN','CHAM_NO_LST'),
+#                             PRESENT_ABSENT('GROUP_MA_FISS','GROUP_MA_FOND')),
+#                                ),
+
+      FONC_LT             =SIMP(statut='f',typ=(fonction_sdaster,formule) ),
+      FONC_LN             =SIMP(statut='f',typ=(fonction_sdaster,formule) ),
+      CHAM_NO_LSN         =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
+      CHAM_NO_LST         =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
+      GROUP_MA_FISS       =SIMP(statut='f',typ=grma,min=1,max=1),
+      GROUP_MA_FOND       =SIMP(statut='f',typ=grma,min=1,max=1),
+      FORM_FISS   =SIMP(statut='f',typ='TXM',into=("ELLIPSE","RECTANGLE","CYLINDRE","DEMI_PLAN",
+                                                   "SEGMENT","DEMI_DROITE","DROITE","ENTAILLE") ),
+      b_ellipse           =BLOC(condition = "FORM_FISS == 'ELLIPSE' ",fr="Paramètres de la fissure/interface elliptique",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
+           COTE_FISS      =SIMP(statut='f',typ='TXM',defaut="IN",into=("IN","OUT",) ),    ),
+      b_rectangle         =BLOC(condition = "FORM_FISS == 'RECTANGLE' ",fr="Paramètres de la fissure/interface rectangulaire",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           RAYON_CONGE    =SIMP(statut='f',typ='R',val_min=0.,defaut=0.),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
+           COTE_FISS      =SIMP(statut='f',typ='TXM',defaut="IN",into=("IN","OUT",) ),    ),
+      b_entaille          =BLOC(condition = "FORM_FISS == 'ENTAILLE' ",fr="Paramètres de l'interface entaille",
+           DEMI_LONGUEUR  =SIMP(statut='o',typ='R',val_min=0.),
+           RAYON_CONGE    =SIMP(statut='o',typ='R',val_min=0.),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),  
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),  ),
+      b_cylindre          =BLOC(condition = "FORM_FISS == 'CYLINDRE' ",fr="Paramètres de la fissure cylindrique",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_demiplan          =BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",fr="Paramètres de la fissure plane à front droit",
+           PFON           =SIMP(statut='o',typ='R',min=3,max=3),
+           NORMALE        =SIMP(statut='o',typ='R',min=3,max=3),
+           DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_segment           =BLOC(condition = "FORM_FISS == 'SEGMENT' ",fr="Paramètres de la fissure 2D segment",
+           PFON_ORIG      =SIMP(statut='o',typ='R',min=3,max=3),
+           PFON_EXTR      =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_demidroite         =BLOC(condition = "FORM_FISS == 'DEMI_DROITE' ",fr="Paramètres de la fissure 2D demi-droite",
+           PFON           =SIMP(statut='o',typ='R',min=3,max=3),
+           DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_droite            =BLOC(condition = "FORM_FISS == 'DROITE' ",fr="Paramètres de l'interface 2D (fissure traversante)",
+           POINT          =SIMP(statut='o',typ='R',min=3,max=3),
+           DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
+                            ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       partie du maillage potentiellement enrichie
+# ------------------------------------------------------------------------------------------------------------------------
+
+    GROUP_MA_ENRI         =SIMP(statut='f',typ=grma,max=01),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       types d'enrichissement 
+# ------------------------------------------------------------------------------------------------------------------------
+
+    b_enri_inte           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",
+
+      CHAM_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("DEPL","SIGM"),defaut="DEPL" ),
+
+                          ),
+
+
+    b_enri_fiss           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",
+
+      CHAM_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("DEPL",),defaut="DEPL" ),
+      TYPE_ENRI_FOND      =SIMP(statut='f',typ='TXM',into=("TOPOLOGIQUE","GEOMETRIQUE"),defaut="TOPOLOGIQUE" ),
+
+        b_enri_geom       =BLOC(condition = "TYPE_ENRI_FOND == 'GEOMETRIQUE' ",fr="Paramètres de l enrichissement geometrique",
+           RAYON_ENRI     =SIMP(statut='f',typ='R',val_min=0.E+0),
+
+          b_enri_couches  =BLOC(condition = "(RAYON_ENRI == None) ",fr="Paramètres de l enrichissement à n couches",
+           NB_COUCHES     =SIMP(statut='f',typ='I',defaut=4,val_min=1),
+
+                               ),
+                             ),                        
+                          ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       orientation du fond de fissure
+# ------------------------------------------------------------------------------------------------------------------------
+
+    b_orie_fond           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",
+
+    ORIE_FOND             =FACT(statut='f',max=1,
+      PFON_INI            =SIMP(statut='o',typ='R',max=3),
+      VECT_ORIE           =SIMP(statut='o',typ='R',max=3),
+      POINT_ORIG          =SIMP(statut='o',typ='R',max=3),
+                               ),
+
+                             ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       branchement
+# ------------------------------------------------------------------------------------------------------------------------
+
+    b_jonction            =BLOC(condition = "(MODELE_GRILLE == None) and (FISS_GRILLE == None)",
+        JONCTION              =FACT(statut='f',max=1,
+          FISSURE             =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+          POINT               =SIMP(statut='o',typ='R',max=3,),
+                                   ),
+                               ),
+# ------------------------------------------------------------------------------------------------------------------------
+#                       info
+# ------------------------------------------------------------------------------------------------------------------------
+
+    INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
+                    reentrant='n',fr="Définit les caractéristiques nécessaires à l'étude dynamique d'une structure sous écoulement",
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
+         FAISCEAU_TRANS  =FACT(statut='f',max='**',
+           regles=(  ENSEMBLE('CSTE_CONNORS','NB_CONNORS','RHO_TUBE'),),
+           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_sdaster,nappe_sdaster,formule) ),
+           PROF_RHO_F_INT  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PROF_RHO_F_EXT  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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' ),
+           CSTE_CONNORS    =SIMP(statut='f',typ='R',min=2,max=2,val_min=0.E+00),
+           NB_CONNORS      =SIMP(statut='f',typ='I',val_min=2,),
+           RHO_TUBE        =SIMP(statut='f',typ='R' ),
+         ),
+         GRAPPE          =FACT(statut='f',
+           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_sdaster ),
+           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',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,validators=NoRepeat(),max='**'),
+           TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
+           VECT_X          =SIMP(statut='f',typ='R',max=3),
+           PROF_RHO_FLUI   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PROF_VISC_CINE  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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=4,max=4),
+           RUGO_TUBE       =SIMP(statut='f',typ='R' ),
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=5,
+                                 into=("YC","ZC","R","HY","HZ") ),
+           VALE_PAROI      =SIMP(statut='f',typ='R',max=5),
+           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',
+           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_sdaster ),
+           MATER_EXT       =SIMP(statut='o',typ=mater_sdaster ),
+           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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEVY S.LEVY
+
+
+DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",
+                     op=OPS('Macro.defi_fonc_elec_ops.defi_fonc_elec_ops'),
+                     sd_prod=fonction_sdaster,
+                     reentrant='n',
+                     UIinfo={"groupes":("Outils-métier",)},
+                     fr="Définir une fonction du temps intervenant dans le calcul 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',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',
+         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',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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
+                    reentrant='n',
+            fr="Définit un profil de vitesse d'écoulement fluide le long d'une poutre",
+            UIinfo={"groupes":("Modélisation","Fonctions",)},
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
+         NOEUD_INIT      =SIMP(statut='o',typ=no),
+         NOEUD_FIN       =SIMP(statut='o',typ=no),
+         VITE            =FACT(statut='o',
+           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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args):
+  if VALE       != None  : return fonction_sdaster
+  if VALE_C     != None  : return fonction_c
+  if VALE_PARA  != None  : return fonction_sdaster
+  if ABSCISSE   != None  : return fonction_sdaster
+  if NOEUD_PARA != None  : return fonction_sdaster
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+                    ,fr="Définit une fonction réelle ou complexe d'une variable réelle",
+                     reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA','ABSCISSE'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+         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)"),
+         ABSCISSE        =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Liste d abscisses d une fonction réelle"),
+         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_sdaster,
+                               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_sdaster ),
+         ),
+         b_abscisse      =BLOC(condition = "ABSCISSE != None",
+           ORDONNEE        =SIMP(statut='o',typ='R',min=2,max='**',
+                               fr ="Liste d ordonnées d une fonction réelle"),
+         ),
+         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_sdaster ),
+           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 06/09/2011   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",
+                    op=55,
+                    sd_prod=fond_fiss,
+                    reentrant='n',
+                    UIinfo={"groupes":("Modélisation",)},fr="Définition de lèvres et d'un fond de fissure",
+
+    MAILLAGE  = SIMP(statut='o',typ=maillage_sdaster ),
+    INFO      =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+
+    # definition du fond de fissure
+    FOND_FISS = FACT(statut='o',max=2,
+    
+                     TYPE_FOND = SIMP(statut='f',typ='TXM',into=("OUVERT","FERME","INF","SUP"),defaut="OUVERT"),
+
+                     NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                     GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1   ),
+                     GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1   ),
+                     MAILLE   = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                     regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+
+                     # possibilite d'ordonnencement automatique du fond si groupe de mailles
+                     b_grma = BLOC(condition = "(GROUP_MA != None or MAILLE != None) and TYPE_FOND != 'FERME'",
+                                   NOEUD_ORIG    =SIMP(statut='f',typ=no,  max=1),
+                                   GROUP_NO_ORIG =SIMP(statut='f',typ=grno,max=1),
+                                   regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+
+                                   # si ordo 
+                                   b_ordo = BLOC(condition = "NOEUD_ORIG != None or GROUP_NO_ORIG != None",
+                                                 NOEUD_EXTR    = SIMP(statut='f',typ=no,  max=1),
+                                                 GROUP_NO_EXTR = SIMP(statut='f',typ=grno,max=1),
+                                                 regles=(EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+                                                ),
+                                  ),
+                     # possibilite d'ordonnencement automatique du fond si groupe de mailles
+                     b_grma_ferme= BLOC(condition = "(GROUP_MA != None or MAILLE != None) and TYPE_FOND == 'FERME'",
+                                        NOEUD_ORIG    =SIMP(statut='f',typ=no,  max=1),
+                                        GROUP_NO_ORIG =SIMP(statut='f',typ=grno,max=1),
+                                        regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+
+                                        # si ordo 
+                                        b_ordo_ferme = BLOC(condition = "NOEUD_ORIG != None or GROUP_NO_ORIG != None",
+                                                            MAILLE_ORIG   = SIMP(statut='f',typ=ma,  max=1),
+                                                            GROUP_MA_ORIG = SIMP(statut='f',typ=grma,  max=1),
+                                                            regles=(UN_PARMI('MAILLE_ORIG','GROUP_MA_ORIG'),),
+                                                           ),
+                                       ),
+                    # definition des directions des tangentes aux bords (uniquement pour les fonds non fermes)
+                    b_dtan = BLOC(condition = "TYPE_FOND != 'FERME'",
+                                  DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+                                  DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+                                  VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+                                  VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+                                  regles=(EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
+                                             EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR'),),
+                                 ),
+                    ),
+
+    CONFIG_INIT  = SIMP(statut='f',typ='TXM',into=("COLLEE","DECOLLEE"), defaut="COLLEE",position='global'),
+
+    SYME         = SIMP(statut='f',typ='TXM',into=("OUI","NON"),         defaut="NON",   position='global'),
+
+#   remarque : dans le cas symetrique, il faut soit LEVRE_SUP, soit DTAN_ORIG
+#   mais impossible de faire une regle.
+
+    LEVRE_SUP =FACT(statut='f',max=1,
+                    regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+                    GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                    MAILLE   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                    ),
+    
+    b_levre_inf  = BLOC(condition = "SYME == 'NON'",
+
+                        LEVRE_INF =FACT(statut='f',max=1,
+                                        regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+                                        GROUP_MA =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                        MAILLE   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                        ),
+                        ),  
+
+    # dans le cas decolle
+    b_decolle    = BLOC(condition = "CONFIG_INIT == 'DECOLLEE' and SYME == 'NON'",
+                     NORMALE   =SIMP(statut='o',typ='R',max=3),),
+
+    PREC_NORM    = SIMP(statut='f',typ='R',defaut=0.1),
+
+)  
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FLEJOU J.L.FLEJOU
+#
+DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
+                    fr="Definition des groupes de fibres pour les elements multifibres",
+                    reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(AU_MOINS_UN('SECTION','FIBRE'),),
+
+         INFO       =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+#============================================================================
+         SECTION     =FACT(statut='f',max='**',
+              regles=(AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
+                      PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
+
+              GROUP_FIBRE       =SIMP(statut='o',typ='TXM',min=1,max=1),
+              TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_SECT       =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+              MAILLAGE_SECT     =SIMP(statut='o',typ=maillage_sdaster),
+              COOR_AXE_POUTRE   =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+#============================================================================
+         FIBRE     =FACT(statut='f',max='**',
+              GROUP_FIBRE       =SIMP(statut='o',typ='TXM',min=1,max=1),
+              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 11/01/2011   AUTEUR SFAYOLLE S.FAYOLLE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SFAYOLLE S.FAYOLLE
+DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f',
+               UIinfo={"groupes":("Modélisation",)},
+               fr="Déterminer les caractéristiques homogenéisées du béton armé à partir des propriétés du béton et des  "
+                        +" armatures",
+               reuse = SIMP(statut='f',typ=mater_sdaster),
+               RELATION = SIMP(statut='o',typ='TXM',defaut="GLRC_DAMAGE",
+                          into=("GLRC_DM","GLRC_DAMAGE"),),
+
+               b_glrc_dm=BLOC(condition = "RELATION == 'GLRC_DM'",
+                              fr="Paramètres de la loi GLRC_DM",
+                              BETON = FACT(statut='o',max=1,
+                                MATER = SIMP(statut='o',typ=(mater_sdaster),),
+                                EPAIS = SIMP(statut='o',typ='R',val_min=0.E+0 ),),
+                              NAPPE = FACT(statut='o',max=1,
+                                MATER = SIMP(statut='o',typ=(mater_sdaster),),
+                                OMY   = SIMP(statut='o',typ='R',val_min=0.E+0,),
+                                OMX   = SIMP(statut='o',typ='R',val_min=0.E+0,),
+                                RY    = SIMP(statut='o',typ='R',val_min=-1.0E+0,val_max=1.0E+0,),
+                                RX    = SIMP(statut='o',typ='R',val_min=-1.0E+0,val_max=1.0E+0),),
+                              RHO = SIMP(statut='f',typ='R',val_min=0.E+0,),
+                              AMOR_ALPHA = SIMP(statut='f',typ='R',val_min=0.E+0,),
+                              AMOR_BETA = SIMP(statut='f',typ='R',val_min=0.E+0,),
+                              COMPR = SIMP(statut='o',typ='TXM',defaut="GAMMA",
+                                           into=("GAMMA","SEUIL")),
+                   b_gamma=BLOC(condition = "COMPR == 'GAMMA'",
+                                fr="Paramètre d'endommagement en compression ",
+                                GC = SIMP(statut='o',typ='R',defaut=1.0E+0,val_min=0.0E+0, val_max=1.0E+0),),
+                   b_seuil=BLOC(condition = "COMPR == 'SEUIL'",
+                                fr="Seuil d'endommagement en compression ",
+                                SYC = SIMP(statut='o',typ='R'),),
+                   PENTE = SIMP(statut='o',typ='TXM',defaut="RIGI_ACIER",
+                                into=("PLAS_ACIER","UTIL","RIGI_ACIER")),
+                   b_util = BLOC(condition = "PENTE == 'UTIL'",
+                                 fr="Valeur de la déformation maximale de l'élément",
+                                  EPSI_MEMB = SIMP(statut='o',typ='R',defaut=0.E+0),
+                                  EPSI_FLEX = SIMP(statut='o',typ='R',defaut=0.E+0),),
+                   CISAIL = SIMP(statut='o',typ='TXM',defaut="NON",
+                                 into=("OUI","NON"),),
+                   METHODE_ENDO = SIMP(statut='o',typ='TXM',defaut="ENDO_INTER",
+                                  into=("ENDO_NAISS","ENDO_LIM","ENDO_INTER"),),
+                   INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2),),
+                           ),
+           b_glrc_damage=BLOC(condition = "RELATION == 'GLRC_DAMAGE'",
+                            fr="Paramètres de la loi GLRC_DAMAGE",
+                   BETON            =FACT(statut='o',max=1,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+                     GAMMA           =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+                     QP1             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+                     QP2             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+
+                     C1N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C1M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     C2M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+
+                     OMT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+                     EAT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+                     BT1             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+                     BT2             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+
+                     MP1X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+                     MP2X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+                     MP1Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+                     MP2Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+         ),
+                   NAPPE     =FACT(statut='o',max=10,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+                     RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+         ),
+                   CABLE_PREC   =FACT(statut='f',max=1,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+                     RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+                     PREX            =SIMP(statut='o',typ='R'),
+                     PREY            =SIMP(statut='o',typ='R'),
+         ),
+                   LINER           =FACT(statut='f',max=10,
+                     MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+                     OML             =SIMP(statut='o',typ='R',val_min=0.E+0),
+                     RLR             =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+         ),
+                   INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2),),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 08/03/2011   AUTEUR MASSIN P.MASSIN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+DEFI_GRILLE=OPER(nom="DEFI_GRILLE",op=82,sd_prod=grille_sdaster,reentrant='n',
+                UIinfo={"groupes":("Modélisation",)},
+                fr="Définition d'une grille",
+    
+    MAILLAGE       = SIMP(statut='o',typ=maillage_sdaster),
+
+    INFO           = SIMP(statut='f',typ='I',defaut= 0,into=(0,1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def defi_group_prod(MAILLAGE,**args):
+  if AsType(MAILLAGE) == maillage_sdaster : return maillage_sdaster
+  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",
+                reentrant='o',
+            UIinfo={"groupes":("Maillage",)},
+         regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO','DETR_GROUP_NO','DETR_GROUP_MA'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
+         DETR_GROUP_MA   =FACT(statut='f',max='**',
+           NOM             =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),),
+         DETR_GROUP_NO   =FACT(statut='f',max='**',
+           NOM             =SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**'),),
+
+
+         CREA_GROUP_MA   =FACT(statut='f',max='**',
+              regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+            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  ,validators=NoRepeat(),max='**'),
+            INTERSEC        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            UNION           =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            DIFFE           =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            TYPE_MAILLE     =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","1D","2D","3D"),max=1 ),
+
+            OPTION         =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE",
+                                                              "BANDE","APPUI_LACHE","APPUI","FISS_XFEM") ),
+                b_group_ma      =BLOC(condition = "GROUP_MA != None",
+                  regles=(EXCLUS('POSITION','NUME_INIT'),),
+                  NUME_INIT       =SIMP(statut='f',typ='I'),
+                  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=2),
+                  VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                  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','GROUP_NO_CENTRE'),),
+                  POINT           =SIMP(statut='f',typ='R',max=3),
+                  NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+                  GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+                  RAYON           =SIMP(statut='o',typ='R' ),
+                  CRIT_NOEUD      = SIMP(statut='f',typ='TXM',defaut="AU_MOINS_UN",
+                                  into=("TOUS","AU_MOINS_UN","MAJORITE"),),
+                ),
+                b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
+                  regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                          UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+                  POINT           =SIMP(statut='f',typ='R',max=3),
+                  NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+                  GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+                  RAYON           =SIMP(statut='o',typ='R' ),
+                  ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+                  VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                  CRIT_NOEUD      = SIMP(statut='f',typ='TXM',defaut="AU_MOINS_UN",
+                                  into=("TOUS","AU_MOINS_UN","MAJORITE"),),
+                ),
+                b_bande         =BLOC(condition = "OPTION == 'BANDE'",
+                  regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                          UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+                  POINT           =SIMP(statut='f',typ='R' ,max=3),
+                  NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+                  GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+                  DIST            =SIMP(statut='o',typ='R' ),
+                  ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+                  VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                  CRIT_NOEUD      = SIMP(statut='f',typ='TXM',defaut="AU_MOINS_UN",
+                                  into=("TOUS","AU_MOINS_UN","MAJORITE"),),
+                ),
+                b_app_lache         =BLOC(condition = "OPTION == 'APPUI_LACHE'",
+                  regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+                  NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                  GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                ),
+                b_appui            =BLOC(condition = "OPTION == 'APPUI'",
+                  regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+                  NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                  GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                  TYPE_APPUI      =SIMP(statut='o',typ='TXM',max=1, into=('AU_MOINS_UN','TOUT','SOMMET','MAJORITE')),
+                ),
+                b_fiss_xfem       =BLOC(condition = "OPTION == 'FISS_XFEM'",
+                  TYPE_GROUP      =SIMP(statut='o',typ='TXM',max=1,defaut='XFEM',
+                                          into=('HEAVISIDE','CRACKTIP','MIXTE','FISSUREE','XFEM',),),
+                  FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+                ),
+         ),
+
+
+         CREA_GROUP_NO   =FACT(statut='f',max='**',
+           OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
+                                               "SEGM_DROI_ORDO","NOEUD_ORDO","TUNNEL","INCLUSION","FISS_XFEM") ),
+
+           b_option =BLOC(condition = "OPTION == None" ,
+                          regles=(UN_PARMI('TOUT_GROUP_MA','GROUP_MA','GROUP_NO','NOEUD',
+                                                           'INTERSEC','UNION','DIFFE'),),
+              TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              INTERSEC        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              UNION           =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              DIFFE           =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+
+              b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
+                NOM           = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                CRIT_NOEUD    = SIMP(statut='f',typ='TXM',defaut="TOUS",
+                                  into=("TOUS","SOMMET","MILIEU","CENTRE"),),
+              ),
+              b_group_no      =BLOC(condition = "GROUP_NO != None",
+                                    regles=(EXCLUS('POSITION','NUME_INIT'),),
+                NUME_INIT       =SIMP(statut='f',typ='I'),
+                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_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
+                NOM             =SIMP(statut='o',typ=geom),
+              ),
+           ),
+
+           b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             POINT           =SIMP(statut='f',typ='R' ,max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+           ),
+           b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             POINT           =SIMP(statut='f',typ='R' ,max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+           ),
+           b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             POINT           =SIMP(statut='f',typ='R' ,max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             ANGL_NAUT       =SIMP(statut='f',typ='R' ,max=3),
+             VECT_NORMALE    =SIMP(statut='f',typ='R' ,max=3),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+           ),
+           b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
+             regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),
+                     UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             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='o',typ='R' ),
+             CRITERE         =SIMP(statut='o',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_noeud_ordo    =BLOC(condition = "OPTION == 'NOEUD_ORDO'",
+             regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+             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),
+           ),
+           b_tunnel    =BLOC(condition = "OPTION == 'TUNNEL'",
+             regles=(AU_MOINS_UN ('TOUT','GROUP_MA','MAILLE'),
+                     EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     AU_MOINS_UN ('GROUP_MA_AXE','MAILLE_AXE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_AXE    =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_AXE      =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             RAYON           =SIMP(statut='o',typ='R'),
+             LONGUEUR        =SIMP(statut='f',typ='R'),
+           ),
+           b_inclusion         =BLOC(condition = "OPTION == 'INCLUSION'",
+             fr="""crée le groupe des noeuds des mailles de GROUP_MA inclus géométriquement
+                   dans les mailles de GROUP_MA_INCL""",
+             NOM             =SIMP(statut='o',typ=geom),
+             CAS_FIGURE      =SIMP(statut='o',typ='TXM',into=("2D","3D","2.5D",)),
+             DISTANCE_MAX    =SIMP(statut='f',typ='R',),
+             GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+             GROUP_MA_INCL   =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLAGE_INCL   =SIMP(statut='f',typ=maillage_sdaster),
+           ),
+           b_fiss_xfem            =BLOC(condition = "OPTION == 'FISS_XFEM'",
+                  NOM             =SIMP(statut='o',typ=geom),
+                  TYPE_GROUP      =SIMP(statut='o',typ='TXM',max=1,into=('HEAVISIDE','CRACKTIP','MIXTE','XFEM',)),
+                  FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+           ),
+          ),
+         ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+
+DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",
+                     op=OPS('Macro.defi_inte_spec_ops.defi_inte_spec_ops'),
+                     sd_prod=table_fonction,
+                     reentrant='n',
+                     fr="Définit une matrice interspectrale",
+                     UIinfo={"groupes":("Fonctions",)},
+
+         DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
+
+         PAR_FONCTION    =FACT(statut='f',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',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',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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
+DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
+                      reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
+            fr="Définir les interfaces d'une structure et leur affecter un type",
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
+         INTERFACE       =FACT(statut='o',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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
+                    fr="Définir une liste d'entiers strictement croissante",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+
+         OPERATION    =SIMP(statut='o',typ='TXM',defaut='DEFI',into=('DEFI','NUME_ORDRE',)),
+
+
+         # définition d'une liste d'entiers
+         #----------------------------------
+         b_defi       =BLOC(condition = "OPERATION == 'DEFI'",
+             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',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,),
+             ),
+         ),
+
+
+         # extraction d'une liste de nume_ordre dans une sd_resultat :
+         #------------------------------------------------------------
+         b_extr       =BLOC(condition = "OPERATION == 'NUME_ORDRE'",
+             RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+             PARAMETRE       =SIMP(statut='o',typ='TXM',),
+             INTERV_R        =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 10/10/2011   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+
+
+# Bloc pour decoupe automatique
+bloc_auto   =BLOC(fr                = "Subdivision de type automatique",
+                  condition         = "SUBD_METHODE == 'AUTO'",
+                  SUBD_PAS_MINI     = SIMP(fr                = "Pas de temps en dessous duquel on ne subdivise plus",
+                                           statut            = 'f',
+                                           typ               = 'R',
+                                           val_min           = 0.0,
+                                           max               = 1,
+                                           defaut            = 0.,
+                                           ),                                            
+                  )
+                 
+# Bloc pour decoupe manuel
+bloc_manu   =BLOC(fr                = "Subdivision de type manuel",
+                  condition         = "SUBD_METHODE == 'MANUEL'",
+                  regles            = (AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+                  SUBD_PAS          = SIMP(fr                = "Nombre de subdivision d'un pas de temps",
+                                           statut            = 'f',
+                                           typ               = 'I',
+                                           val_min           = 2,
+                                           max               = 1,
+                                           defaut            = 4,
+                                           ),       
+                  SUBD_NIVEAU       = SIMP(fr                = "Nombre maximum de niveau de subdivision d'un pas de temps",
+                                           statut            = 'f',
+                                           typ               = 'I',
+                                           val_min           = 2,
+                                           max               = 1,
+                                           defaut            = 3,
+                                           ),
+                  SUBD_PAS_MINI     = SIMP(fr                = "Pas de temps en dessous duquel on ne subdivise plus",
+                                           statut            = 'f',
+                                           typ               = 'R',
+                                           val_min           = 0.0,
+                                           max               = 1,
+                                           defaut            = 0.,
+                                           ),               
+                 )
+                                        
+# Bloc pour decoupe du pas de temps
+bloc_deco   =BLOC(fr                = "Action de decoupe du pas temps",
+                  condition         = "ACTION == 'DECOUPE' or ACTION == 'AUTRE_PILOTAGE'",
+                  SUBD_METHODE      = SIMP(fr                = "Méthode de subdivision des pas de temps en cas de divergence",
+                                           statut            = 'f',
+                                           typ               = 'TXM',
+                                           max               = 1,
+                                           into              = ("MANUEL","AUTO"),
+                                           defaut            = "MANUEL",
+                                           ),
+                  b_deco_manu       = bloc_manu,
+                  b_deco_auto       = bloc_auto,
+                 )
+
+
+# Bloc pour decoupe du pas de temps - special pour collision
+bloc_deco2  =BLOC(fr                = "Action de decoupe du pas temps",
+                  condition         = "ACTION == 'DECOUPE'",
+                  SUBD_METHODE      = SIMP(fr                = "Méthode de subdivision des pas de temps en cas de collision",
+                                           statut            = 'f',
+                                           typ               = 'TXM',
+                                           max               = 1,
+                                           into              = ("MANUEL","AUTO"),
+                                           defaut            = "AUTO",
+                                           ),
+                  
+                  PREC_COLLISION    = SIMP(fr                = "Parametre de decoupe fine du pas de temps",
+                                           statut            = 'o',
+                                           typ               = 'R',
+                                           val_min           = 0.0,
+                                           max               = 1,
+                                           ),     
+                  b_deco_manu       = bloc_manu,
+                  b_deco_auto       = bloc_auto,
+                 )
+   
+# Bloc pour extrapolation du nombre d'iterations de Newton
+bloc_supp   =BLOC(fr                = "Action d'extrapolation du nombre d'iterations de Newton",
+                  condition         = "ACTION == 'ITER_SUPPL'",
+                  PCENT_ITER_PLUS   = SIMP(fr                = "Pourcentage d'itérations autorisées en plus",
+                                           statut            = 'f',
+                                           typ               = 'I',
+                                           val_min           = 20,
+                                           max               = 1,
+                                           defaut            = 50,
+                                           ),
+                  SUBD_METHODE      = SIMP(fr                = "Méthode de subdivision des pas de temps en cas de divergence",
+                                           statut            = 'f',
+                                           typ               = 'TXM',
+                                           max               = 1,
+                                           into              = ("MANUEL","AUTO"),
+                                           defaut            = "MANUEL",
+                                           ),
+                  b_deco_manu       = bloc_manu,
+                  b_deco_auto       = bloc_auto,
+                 )
+   
+# Bloc pour adaptation du coefficient de penalisation
+bloc_pene   =BLOC(fr                = "Action d' adaptation du coefficient de penalisation",
+                  condition         = "ACTION == 'ADAPT_COEF_PENA'",
+                  COEF_MAXI         = SIMP(fr                = "Coefficient multiplicateur maximum du coefficient de penalisation",
+                                           statut            = 'f',
+                                           typ               = 'R',
+                                           val_min           = 1.,
+                                           max               = 1,
+                                           defaut            = 1E12,
+                                           ),
+                 )
+                
+DEFI_LIST_INST = OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n',
+                      UIinfo={"groupes":("Fonctions",)},
+                      fr="Définition de la gestion de la liste d'instants",
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour la definition a priori de la liste d'instant
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+DEFI_LIST   =FACT(fr                = "Definition a priori de la liste d'instants",
+                  statut            = 'o',
+                  max               = 1,
+                  METHODE           = SIMP(fr                = "Methode de definition de la liste d'instants",
+                                           statut            = 'o',
+                                           typ               = 'TXM',
+                                           max               = 1,
+                                           position          = 'global',
+                                           into              = ("MANUEL","AUTO",),
+                                           defaut            = "MANUEL",
+                                           ),
+                  b_manuel          = BLOC(fr                = "Liste d'instants donnée par l'utilisateur",
+                                           condition         = "METHODE == 'MANUEL' ",
+                                           regles=(UN_PARMI('LIST_INST','VALE',),),
+                                           VALE              = SIMP(statut          = 'f',
+                                                                    typ             = 'R',
+                                                                    max             = '**'),
+                                           LIST_INST         = SIMP(statut          = 'f',
+                                                                    typ             = listr8_sdaster,
+                                                                    ),
+                                           ),
+                  b_auto            = BLOC(fr                = "Gestion automatique de la liste d'instants",
+                                           condition         = "(METHODE == 'AUTO') ",
+                                           regles=(UN_PARMI('LIST_INST','VALE',),),
+                                           VALE              = SIMP(statut          = 'f',
+                                                                    typ             = 'R',
+                                                                    max             = '**'),
+                                           LIST_INST         = SIMP(statut          = 'f',
+                                                                    typ             = listr8_sdaster,
+                                                                    ),
+                                           PAS_MINI          = SIMP(statut          = 'f',
+                                                                    typ             = 'R',
+                                                                    max             = 1,
+                                                                    val_min         = 1.e-12,
+                                                                    ),
+                                           PAS_MAXI          = SIMP(statut          = 'f',
+                                                                    typ             = 'R',
+                                                                    max             = 1,
+                                                                    ),
+                                           NB_PAS_MAXI       = SIMP(statut          = 'f',
+                                                                    typ             = 'I',
+                                                                    max             = 1,
+                                                                    val_max         = 1000000,
+                                                                    defaut          = 1000000,
+                                                                    ),
+                                           ),
+                 ),
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour le comportement en cas d'echec (on doit recommencer le meme instant)
+# ----------------------------------------------------------------------------------------------------------------------------------
+  
+ECHEC       =FACT(fr                = "Comportement en cas d'echec",
+                  statut            = 'd',
+                  max               = '**',
+                  EVENEMENT         = SIMP(fr                = "Type de l'evenement",
+                                           statut            = 'f',
+                                           typ               = 'TXM',
+                                           max               = 1,
+                                           into              = ("ERREUR","DELTA_GRANDEUR","COLLISION","INTERPENETRATION"),
+                                           defaut            = "ERREUR",
+                                           ),
+                  b_erreur          = BLOC(fr                = "Event: erreur ou iter_maxi",
+                                           condition         = "EVENEMENT == 'ERREUR' ",
+                                           ACTION            = SIMP(fr              = "Actions possibles",
+                                                                    statut          = 'f',
+                                                                    max             = 1,
+                                                                    typ             = 'TXM',
+                                                                    into            = ("ARRET","DECOUPE","ITER_SUPPL",
+                                                                                       "AUTRE_PILOTAGE"),
+                                                                    defaut          = "DECOUPE",
+                                                                    ),
+                                           b_deco            = bloc_deco,
+                                           b_supp            = bloc_supp,
+                                           ),
+                  b_edelta          = BLOC(fr                = "Event: l'increment d'une composante d'un champ depasse le seuil",
+                                           condition         = "EVENEMENT == 'DELTA_GRANDEUR' ",
+                                           VALE_REF          = SIMP(fr              = "Valeur du seuil",
+                                                                    statut          = 'o',
+                                                                    typ             = 'R',
+                                                                    max             = 1,
+                                                                    ),
+                                           NOM_CHAM          = SIMP(fr              = "Nom du champ",
+                                                                    statut          = 'o',
+                                                                    typ             = 'TXM',
+                                                                    max             = 1,
+                                                                    into            = ("DEPL","VARI_ELGA","SIEF_ELGA",),
+                                                                    ),
+                                           NOM_CMP           = SIMP(fr              = "Nom de la composante",
+                                                                    statut          = 'o',
+                                                                    typ             = 'TXM',
+                                                                    max             = 1,
+                                                                    ),
+                                           ACTION            = SIMP(fr              = "Actions possibles",
+                                                                    statut          = 'f',
+                                                                    max             = 1,
+                                                                    typ             = 'TXM',
+                                                                    into            = ("ARRET","DECOUPE",),
+                                                                    defaut          = "DECOUPE",
+                                                                    ),
+                                           b_deco            = bloc_deco,
+                                           ),
+                  b_colli           = BLOC(fr                = "Event: collision",
+                                           condition         = "EVENEMENT == 'COLLISION' ",
+                                           ACTION            = SIMP(fr              = "Actions possibles",
+                                                                    statut          = 'f',
+                                                                    max             = 1,
+                                                                    typ             = 'TXM',
+                                                                    into            = ("ARRET","DECOUPE",),
+                                                                    defaut          = "DECOUPE",
+                                                                    ),
+                                           b_deco2           = bloc_deco2,
+                                           ),
+                  b_penetration     = BLOC(fr                = "Event: interpenetration des surfaces en contact",
+                                           condition         = "EVENEMENT == 'INTERPENETRATION' ",
+                                           PENE_MAXI         = SIMP(fr              = "Valeur maxi de l'interpenetration",
+                                                                    statut          = 'o',
+                                                                    typ             = 'R',
+                                                                    max             = 1,
+                                                                    ),
+                                           
+                                           
+                                           ACTION            = SIMP(fr              = "Actions possibles",
+                                                                    statut          = 'f',
+                                                                    max             = 1,
+                                                                    typ             = 'TXM',
+                                                                    into            = ("ARRET","ADAPT_COEF_PENA",),
+                                                                    defaut          = "ADAPT_COEF_PENA",
+                                                                    ),
+                                           b_pene            = bloc_pene,
+                                           ),                         
+
+                 ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# Mot-cle pour le comportement en cas de succes (on a bien converge)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+b_adap  =   BLOC(condition="METHODE == 'AUTO'",
+
+ADAPTATION  =FACT(fr                = "Parametres de l'evenement declencheur de l'adaptation du pas de temps",
+                  statut            = 'd',
+                  max               = '**',
+                  EVENEMENT         = SIMP(fr                = "Nom de l'evenement declencheur de l'adaptation",
+                                           statut            = 'f',
+                                           max               = 1,
+                                           typ               = 'TXM',
+                                           into              = ("SEUIL","TOUT_INST","AUCUN"),
+                                           defaut            = "SEUIL",
+                                           ),
+                  b_adap_seuil      = BLOC(fr                = "Seuil d'adaptation",
+                                           condition         = "EVENEMENT == 'SEUIL' ",
+                                           regles            = (PRESENT_PRESENT('NB_INCR_SEUIL','NOM_PARA',),
+                                                                PRESENT_PRESENT('NB_INCR_SEUIL','CRIT_COMP',),
+                                                                PRESENT_PRESENT('NB_INCR_SEUIL','CRIT_COMP',),),
+                                           NB_INCR_SEUIL     = SIMP(statut          = 'f',
+                                                                    typ             = 'I',
+                                                                    defaut          =  2,
+                                                                   ),
+                                           NOM_PARA          = SIMP(statut          = 'f',
+                                                                    typ             = 'TXM',
+                                                                    into            = ("NB_ITER_NEWTON",),
+                                                                    defaut          = "NB_ITER_NEWTON",
+                                                                    ),
+                                           CRIT_COMP         = SIMP(statut          = 'f',
+                                                                    typ             = 'TXM',
+                                                                    into            = ("LT","GT","LE","GE"),
+                                                                    defaut          = "LE",
+                                                                    ),
+                                           b_vale_I          = BLOC(fr              = "Valeur entiere",
+                                                                    condition       = "NOM_PARA == 'NB_ITER_NEWTON' ",
+                                                                    VALE_I          = SIMP(statut='f',typ='I',),
+                                                                    ),
+                                           ),
+
+
+#
+#  Parametres du mode de calcul de dt+
+#      dans le cas FIXE            :(deltaT+) = (deltaT-)x(1+PCENT_AUGM/100)
+#      dans le cas DELTA_GRANDEUR : (deltaT+) = (deltaT-)x(VALREF/deltaVAL) : l'acceleration est inversement proportionnelle
+#                                                                             a la variation de la grandeur
+#      dans le cas ITER_NEWTON    : (deltaT+) = (deltaT-) x sqrt(VALREF/N)  : l'acceleration est inversement proportionnelle
+#                                                                             au nombre d'iterations de Newton precedent
+
+                  MODE_CALCUL_TPLUS = SIMP(fr                = "Parametres du mode de calcul de dt+",
+                                           statut            = 'f',
+                                           max               = 1,
+                                           typ               = 'TXM',
+                                           into              = ("FIXE","DELTA_GRANDEUR","ITER_NEWTON","IMPLEX"),
+                                           defaut            = 'FIXE',
+                                           ), 
+
+                  b_mfixe           = BLOC(fr                = "Mode de calcul de dt+: fixe",
+                                           condition         = "MODE_CALCUL_TPLUS == 'FIXE' ",
+                                           PCENT_AUGM        = SIMP(statut          = 'f',
+                                                                    max             = 1,
+                                                                    typ             = 'R',
+                                                                    defaut          = 100.,
+                                                                    val_min         = -100.,
+                                                                    ),
+                                           ),
+                  b_mdelta          = BLOC(fr                = "Mode de calcul de dt+: increment d'une grandeur",
+                                           condition         = "MODE_CALCUL_TPLUS == 'DELTA_GRANDEUR' ",
+                                           VALE_REF          = SIMP(statut          = 'o',
+                                                                    max             = 1,
+                                                                    typ             = 'R',
+                                                                    ),
+                                           NOM_CHAM          = SIMP(statut          = 'o',
+                                                                    max             = 1,
+                                                                    typ             = 'TXM',
+                                                                    into            = ("DEPL","VARI_ELGA","SIEF_ELGA",),
+                                                                    ),
+                                           NOM_CMP           = SIMP(statut          = 'o',
+                                                                    max             = 1,
+                                                                    typ             = 'TXM',),
+                                           ),
+                  b_mitnew          = BLOC(fr                = "Mode de calcul de dt+: nb iterations de Newton",
+                                           condition         = "MODE_CALCUL_TPLUS == 'ITER_NEWTON' ",
+                                           NB_ITER_NEWTON_REF= SIMP(statut          = 'o',
+                                                                    max             = 1,
+                                                                    typ             = 'I',
+                                                                    ),
+                                           ),
+                  
+# les schemas pre-definis :
+#  abaqus :
+#      EVENEMENT       ='SEUIL'
+#      NB_INCR_SEUIL     = 2
+#      NOM_PARA          ='NB_ITER_NEWTON'
+#      CRIT_COMP         ='LE'
+#      VALE_I            = 5
+#      MODE_CALCUL_TPLUS ='FIXE'
+#      PCENT_AUGM        = 50.
+#  Zebulon 1 :
+#      EVENEMENT       ='TOUT_INST'
+#      MODE_CALCUL_TPLUS ='DELTA_GRANDEUR'
+#      VALE_REF          = valref
+#      NOM_CHAM          ='VARI_ELGA'
+#      NOM_CMP           ='V1'
+#  Zebulon 2 :
+#      EVENEMENT       ='TOUT_INST'
+#      MODE_CALCUL_TPLUS ='ITER_NEWTON'
+#      NB_ITER_NEWTON_REF= nc
+#  Tough2 :
+#      EVENEMENT       ='SEUIL'
+#      NB_INCR_SEUIL     = 1
+#      NOM_PARA          ='NB_ITER_NEWTON'
+#      CRIT_COMP         ='LE'
+#      VALE_I            = n
+#      MODE_CALCUL_TPLUS ='FIXE'
+#      PCENT_AUGM        = 100.
+#  Oliver :
+#      EVENEMENT       ='TOUT_INST'
+#      MODE_CALCUL_TPLUS ='FORMULE'
+#      NOM_SCHEMA        ='OLIVER'
+
+             ),
+      ),
+#  b_adaplex  =   BLOC(condition = "METHODE == 'AUTO' and MODE_CALCUL_TPLUS == 'IMPLEX'",
+#
+#    ADAPTATION  =FACT(statut='d',max='**',
+#
+#     1 parametres de l'evenement declencheur
+#     ----------------------------------------
+#
+#      EVENEMENT       =SIMP(statut='f',typ='TXM',into=("TOUT_INST",),defaut="TOUT_INST",max=1 ),
+#
+#                           
+#     2 parametre du mode de calcul de dt+
+#     ----------------------------------------
+#
+#     MODE_CALCUL_TPLUS =SIMP(statut='f',typ='TXM',into=("IMPLEX",),defaut='IMPLEX',max=1,position='global' ),
+#
+#             ),
+#     ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
+                    fr="Définir une liste de réels strictement croissante",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+         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',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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
+                   fr="Définition d'un nouveau maillage à partir de macro-éléments",
+                   reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
+         DEFI_SUPER_MAILLE =FACT(statut='o',max='**',
+           MACR_ELEM       =SIMP(statut='o',typ=(macr_elem_stat,macr_elem_dyna),max='**' ),
+           SUPER_MAILLE    =SIMP(statut='f',typ=ma,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           b_angl_naut     =BLOC(condition = "ANGL_NAUT != None",
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
+           ),
+         ),
+         RECO_GLOBAL     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           SUPER_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_SUPER_MAILLE =FACT(statut='f',max='**',
+           SUPER_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',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",
+             SUPER_MAILLE    =SIMP(statut='o',typ=ma),
+             NOEUD_FIN       =SIMP(statut='o',typ=no),
+           ),
+         ),
+         DEFI_GROUP_NO   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','SUPER_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" ),
+           SUPER_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 10/10/2011   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
+                   fr="Définition des paramètres décrivant le comportement d un matériau",
+                   reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+       regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH',
+                      'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO',
+                      'ELAS_HYPER','ELAS_2NDG',),
+               EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+               EXCLUS('ECRO_LINE','ECRO_LINE_FO','ECRO_PUIS','ECRO_COOK',),
+               EXCLUS('ENDO_HETEROGENE'),
+               EXCLUS('TAHERI','TAHERI_FO'),
+               EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
+               EXCLUS('VISC_SINH','VISC_SINH_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('LEMAITRE','LEMAITRE_FO','VISC_IRRA_LOG',
+               'LEMA_SEUIL','LEMA_SEUIL_FO','LEMAITRE_IRRA','LMARC_IRRA',),
+               EXCLUS('META_LEMA_ANI','META_LEMA_ANI_FO'),
+               EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
+               EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+               EXCLUS('VISC_ENDO','VISC_ENDO_FO'),
+               PRESENT_PRESENT('BPEL_ACIER','ELAS'),
+               EXCLUS('RCCM','RCCM_FO'),
+               EXCLUS('WEIBULL','WEIBULL_FO'),
+               PRESENT_PRESENT('LAIGLE','ELAS'),
+               PRESENT_PRESENT('LETK','ELAS'),
+               PRESENT_PRESENT('DRUCK_PRAGER','ELAS'),
+               PRESENT_PRESENT('VISC_DRUC_PRAG','ELAS'),
+               PRESENT_PRESENT('ELAS_GONF','ELAS'),
+               PRESENT_PRESENT('HOEK_BROWN','ELAS'),
+               EXCLUS('MAZARS','MAZARS_FO'),
+               PRESENT_PRESENT('JOINT_BA','ELAS'),
+               PRESENT_PRESENT('CABLE','ELAS'),
+               ),
+           MATER      =SIMP(statut='f',typ=mater_sdaster),
+#
+# comportement élastique
+#
+           ELAS            =FACT(statut='f',
+             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',
+             regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),),
+             E               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             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_sdaster,nappe_sdaster,formule)),
+             AMOR_ALPHA      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_BETA       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_HYST       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K_DESSIC        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_ENDOGE        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FONC_DESORP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_FLUI       =FACT(statut='f',
+             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_sdaster,nappe_sdaster,formule)),
+             PROF_RHO_F_EXT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_MASS_AJOU  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_ISTR       =FACT(statut='f',
+             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',
+             regles=(
+                      PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
+                    ),
+             E_L             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LT           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LN           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_LN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             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_sdaster,nappe_sdaster,formule)),
+             ALPHA_N         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_ORTH       =FACT(statut='f',
+             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. ),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_ORTH_FO    =FACT(statut='f',
+             regles=(
+                      PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('ALPHA_T','TEMP_DEF_ALPHA'),
+                    ),
+             E_L             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_T             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LT           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LN           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_TN           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_LT            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_LN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_TN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             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_sdaster,nappe_sdaster,formule)),
+             ALPHA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA_N         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_ALPHA      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_BETA       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_HYST       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_HYPER      =FACT(statut='f',
+                                 regles=(UN_PARMI('K','NU'),),
+             C10             =SIMP(statut='o',typ='R',
+                                   fr="Si C10 est le seul coefficient fourni, alors le matériau est Néo-Hookéen."),
+             C01             =SIMP(statut='f',typ='R',defaut=0.0,
+                                   fr="Si l'on fournit C01 en plus de C10, on obtient un matériau de type Mooney-Rivlin."),
+             C20             =SIMP(statut='f',typ='R',defaut=0.0,
+                                   fr="Si l'on fournit C20 en plus de C10 et C01, on obtient un matériau de type Signorini."),
+             K               =SIMP(statut='f',typ='R',fr="Module de compressibilité."),
+             NU              =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=0.5E+0,fr="Coefficient de Poisson."),
+             RHO             =SIMP(statut='f',typ='R',defaut=0.0,fr="Masse volumique."),
+           ),
+           ELAS_COQUE      =FACT(statut='f',
+             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',
+             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_sdaster,nappe_sdaster,formule)),
+             MEMB_LT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEMB_T          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEMB_G_LT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_L          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_LT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_T          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_G_LT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CISA_L          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CISA_T          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LLLL          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LLTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LLLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_TTTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_TTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LLLL          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LLTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LLLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_TTTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_TTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LLLL         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LLTT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LLLT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_TTTT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_TTLT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LTLT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LLLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LLTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_TTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_TTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LLLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LLTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_TTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_TTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_LZLZ          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_LZTZ          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_TZTZ          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_2NDG        =FACT(statut='f',
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='f',typ='R'),
+             A3              =SIMP(statut='f',typ='R'),
+             A4              =SIMP(statut='f',typ='R'),
+             A5              =SIMP(statut='f',typ='R'),
+           ),
+           CABLE           =FACT(statut='f',
+             EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+           ),
+#
+# comportement mécanique non linéaire
+#
+           TRACTION        =FACT(statut='f',
+             SIGM            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_LINE       =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R',),
+             SY              =SIMP(statut='o',typ='R',),
+           ),
+           ENDO_HETEROGENE   =FACT(statut='f',
+             WEIBULL         =SIMP(statut='o',typ='R',),
+             SY              =SIMP(statut='o',typ='R',),
+             KI              =SIMP(statut='o',typ='R',),
+             EPAI            =SIMP(statut='o',typ='R',),
+             GR              =SIMP(statut='f',typ='R',defaut= 1.0),
+           ),
+           ECRO_LINE_FO    =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_PUIS       =FACT(statut='f',
+             SY              =SIMP(statut='o',typ='R',),
+             A_PUIS          =SIMP(statut='o',typ='R',val_min=0.0),
+             N_PUIS          =SIMP(statut='o',typ='R',val_min=1.E-6),
+           ),
+           ECRO_PUIS_FO    =FACT(statut='f',
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_PUIS          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N_PUIS          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_COOK       =FACT(statut='f',
+             regles=(PRESENT_PRESENT('C','EPSP0'),
+                     PRESENT_PRESENT('TROOM','TMELT','M_PUIS'),),
+             A               =SIMP(statut='o',typ='R',val_min=0.0),
+             B               =SIMP(statut='o',typ='R',val_min=0.0),
+             C               =SIMP(statut='f',typ='R',val_min=0.0),
+             N_PUIS          =SIMP(statut='o',typ='R',val_min=0.0),
+             M_PUIS          =SIMP(statut='f',typ='R',val_min=0.0),
+             EPSP0           =SIMP(statut='f',typ='R',val_min=1.E-6),
+             TROOM           =SIMP(statut='f',typ='R',val_min=0.0),
+             TMELT           =SIMP(statut='f',typ='R',val_min=0.0),
+           ),
+           BETON_ECRO_LINE =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SYT             =SIMP(statut='o',typ='R'),
+             SYC             =SIMP(statut='f',typ='R'),
+           ),
+           BETON_REGLE_PR =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SYT             =SIMP(statut='o',typ='R'),
+             SYC             =SIMP(statut='f',typ='R'),
+             EPSC            =SIMP(statut='f',typ='R'),
+             N               =SIMP(statut='f',typ='R'),
+           ),
+           ENDO_ORTH_BETON  =FACT(statut='f',
+             ALPHA            =SIMP(statut='f',typ='R',defaut=0.9),
+             K0               =SIMP(statut='o',typ='R'),
+             K1               =SIMP(statut='o',typ='R'),
+             K2               =SIMP(statut='f',typ='R',defaut=7.E-4),
+             ECROB            =SIMP(statut='o',typ='R'),
+             ECROD            =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER          =FACT(statut='f',
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER_FO       =FACT(statut='f',
+             C               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_FLEJOU     =FACT(statut='f',
+             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',
+             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',
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_INF           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ROUSSELIER      =FACT(statut='f',
+             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. ),
+             DP_MAXI         =SIMP(statut='f',typ='R',defaut= 0.1),
+             BETA            =SIMP(statut='f',typ='R',defaut=0.85),
+           ),
+           ROUSSELIER_FO   =FACT(statut='f',
+             D               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_1          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PORO_INIT       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             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. ),
+             DP_MAXI         =SIMP(statut='f',typ='R',defaut= 0.1),
+             BETA            =SIMP(statut='f',typ='R',defaut=0.85),
+           ),
+           VISC_SINH      =FACT(statut='f',
+             SIGM_0          =SIMP(statut='o',typ='R'),
+             EPSI_0          =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+           ),
+           VISC_SINH_FO      =FACT(statut='f',
+             SIGM_0          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             EPSI_0          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           CIN1_CHAB  =FACT(statut='f',
+             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',
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             W               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           CIN2_CHAB  =FACT(statut='f',
+             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',
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C1_I            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C2_I            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             W               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G1_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G2_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           MEMO_ECRO       =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+           ),
+           MEMO_ECRO_FO        =FACT(statut='f',
+             MU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ETA             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           VISCOCHAB       =FACT(statut='f',
+             K_0             =SIMP(statut='o',typ='R'),
+             A_K             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             A_R             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             K               =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             ALP             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B               =SIMP(statut='f',typ='R'),
+             M_R             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             G_R             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU              =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             QR_0            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ETA             =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+             C1              =SIMP(statut='o',typ='R'),
+             M_1             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             D1              =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             G_X1            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G1_0            =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+             M_2             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             D2              =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             G_X2            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           ),
+           VISCOCHAB_FO    =FACT(statut='f',
+             K_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_K             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_R             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALP             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_R             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_R             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             QR_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ETA             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_1             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_X1            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G1_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C2              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_2             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D2              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_X2            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G2_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           LEMAITRE        =FACT(statut='f',
+             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 ),
+           ),
+           LEMAITRE_IRRA    =FACT(statut='f',
+             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 ),
+             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 ),
+             GRAN_A          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LMARC_IRRA       =FACT(statut='f',
+             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'),
+             GRAN_A          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+          VISC_IRRA_LOG    =FACT(statut='f',
+             A               =SIMP(statut='f',typ='R',defaut= 1.28E-1),
+             B               =SIMP(statut='f',typ='R',defaut= 0.01159),
+             CSTE_TPS        =SIMP(statut='f',typ='R',defaut= 0.3540),
+             ENER_ACT        =SIMP(statut='f',typ='R',defaut= 5000.),
+             FLUX_PHI        =SIMP(statut='o',typ='R',),
+           ),
+          GRAN_IRRA_LOG    =FACT(statut='f',
+             A               =SIMP(statut='f',typ='R',defaut= 1.28E-1),
+             B               =SIMP(statut='f',typ='R',defaut= 0.01159),
+             CSTE_TPS        =SIMP(statut='f',typ='R',defaut= 0.3540),
+             ENER_ACT        =SIMP(statut='f',typ='R',defaut= 5000.),
+             FLUX_PHI        =SIMP(statut='o',typ='R',),
+             GRAN_A          =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+          LEMA_SEUIL   =FACT(statut='f',
+             A               =SIMP(statut='o',typ='R',),
+             S               =SIMP(statut='o',typ='R',),
+           ),
+          LEMA_SEUIL_FO=FACT(statut='f',
+             A               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+         IRRAD3M=FACT(statut='f',
+               R02      =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               EPSI_U   =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               RM       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               AI0      =SIMP(statut='o',typ='R',val_min=0.0),
+               ZETA_F   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               ETAI_S   =SIMP(statut='o',typ='R',val_min=0.0),
+               RG0      =SIMP(statut='o',typ='R',val_min=0.0),
+               ALPHA    =SIMP(statut='o',typ='R',val_min=0.0),
+               PHI0     =SIMP(statut='o',typ='R',val_min=0.0),
+               KAPPA    =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.8,val_max=1.0),
+               ZETA_G   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               TOLER_ET =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.15 ),
+         ),
+           LEMAITRE_FO     =FACT(statut='f',
+             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             UN_SUR_K        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             UN_SUR_M        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+             META_LEMA_ANI     =FACT(statut='f',
+             F1_A            =SIMP(statut='o',typ='R'),
+             F2_A            =SIMP(statut='o',typ='R'),
+             C_A             =SIMP(statut='o',typ='R'),
+             F1_M            =SIMP(statut='o',typ='R'),
+             F2_M            =SIMP(statut='o',typ='R'),
+             C_M             =SIMP(statut='o',typ='R'),
+             F1_N            =SIMP(statut='o',typ='R'),
+             F2_N            =SIMP(statut='o',typ='R'),
+             C_N             =SIMP(statut='o',typ='R'),
+             F1_Q            =SIMP(statut='o',typ='R'),
+             F2_Q            =SIMP(statut='o',typ='R'),
+             C_Q             =SIMP(statut='o',typ='R'),
+             F_MRR_RR        =SIMP(statut='o',typ='R'),
+             C_MRR_RR        =SIMP(statut='o',typ='R'),
+             F_MTT_TT        =SIMP(statut='o',typ='R'),
+             C_MTT_TT        =SIMP(statut='o',typ='R'),
+             F_MZZ_ZZ        =SIMP(statut='o',typ='R'),
+             C_MZZ_ZZ        =SIMP(statut='o',typ='R'),
+             F_MRT_RT        =SIMP(statut='o',typ='R'),
+             C_MRT_RT        =SIMP(statut='o',typ='R'),
+             F_MRZ_RZ        =SIMP(statut='o',typ='R'),
+             C_MRZ_RZ        =SIMP(statut='o',typ='R'),
+             F_MTZ_TZ        =SIMP(statut='o',typ='R'),
+             C_MTZ_TZ        =SIMP(statut='o',typ='R'),
+           ),
+             META_LEMA_ANI_FO  =FACT(statut='f',
+             F1_A            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_A            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_A             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_M            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_M            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_N            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_N            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_Q            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_Q            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_Q             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRR_RR        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRR_RR        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MTT_TT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MTT_TT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MZZ_ZZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MZZ_ZZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRT_RT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRT_RT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRZ_RZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRZ_RZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MTZ_TZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MTZ_TZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           VMIS_POUTRE     =FACT(statut='f',
+             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',
+             NP              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MPY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CAY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CBY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MPZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CAZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CBZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MPX             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ARME            =FACT(statut='f',
+             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',
+             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'),
+             R_P0            =SIMP(statut='f',typ='R',defaut= 1.E+4 ),
+           ),
+           DIS_CONTACT     =FACT(statut='f',
+             RIGI_NOR        =SIMP(statut='f',typ='R' ),
+             RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_NOR        =SIMP(statut='f',typ='R' ),
+             AMOR_TAN        =SIMP(statut='f',typ='R' ),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ENDO_SCALAIRE   =FACT(statut='f',
+             GAMMA           =SIMP(statut='o',typ='R',),
+             SY              =SIMP(statut='o',typ='R',),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R',defaut=1.E-5),
+             DD_MAXI         =SIMP(statut='f',typ='R',defaut= 1.),
+           ),
+           DIS_GRICRA    =FACT(statut='f',
+             KN_AX       =SIMP(statut='o',typ='R' ),
+             KT_AX       =SIMP(statut='o',typ='R' ),
+             COUL_AX     =SIMP(statut='o',typ='R' ),
+             F_SER       =SIMP(statut='f',typ='R' ),
+             F_SER_FO    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ET_AX       =SIMP(statut='f',typ='R',defaut=1.e-7 ),
+             ET_ROT      =SIMP(statut='f',typ='R',defaut=1.e-7 ),
+             ANG1        =SIMP(statut='f',typ='R' ),
+             ANG2        =SIMP(statut='f',typ='R' ),
+             PEN1        =SIMP(statut='f',typ='R' ),
+             PEN2        =SIMP(statut='f',typ='R' ),
+             PEN3        =SIMP(statut='f',typ='R' ),
+             ANG1_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ANG2_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PEN1_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PEN2_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PEN3_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             regles=(EXCLUS('ANG1','ANG1_FO',),
+                     UN_PARMI('ANG1','ANG1_FO',),
+                     EXCLUS('F_SER','F_SER_FO',),
+                     UN_PARMI('F_SER','F_SER_FO',),
+                     PRESENT_PRESENT('ANG1','ANG2','PEN1','PEN2','PEN3',),
+                     PRESENT_PRESENT('ANG1_FO','ANG2_FO','PEN1_FO','PEN2_FO','PEN3_FO',),
+                                     ),
+           ),
+           BETON_DOUBLE_DP =FACT(statut='f',
+             F_C             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_T             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_BIAX       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ENER_COMP_RUPT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ENER_TRAC_RUPT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_ELAS_COMP  =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=100.E+0),
+             LONG_CARA       =SIMP(statut='f',typ='R',val_min=0.E+0),
+             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") ),
+           ),
+           LABORD_1D=FACT(statut='f',min=0 ,
+             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'),
+           ),
+         MAZARS=FACT(statut='f',min=0 ,
+             EPSD0           =SIMP(statut='o',typ='R'),
+             BETA            =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ='R'),
+             BC              =SIMP(statut='o',typ='R'),
+             AT              =SIMP(statut='o',typ='R'),
+             BT              =SIMP(statut='o',typ='R'),
+             CHI             =SIMP(statut='f',typ='R',val_min=0.0E+0,val_max=1.0E+0),
+           ),
+         MAZARS_FO=FACT(statut='f',min=0 ,
+             EPSD0           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA            =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BC              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AT              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BT              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CHI             =SIMP(statut='f',typ='R'),
+           ),
+         JOINT_BA=FACT(statut='f',min=0 ,max=1,
+             HPEN            =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=0.E+0),
+             GTT             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             GAMD0           =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E-1),
+             AD1             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             BD1             =SIMP(statut='o',typ='R',defaut= 5.E-1,val_min=1.E-1),
+             GAMD2           =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E+0),
+             AD2             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             BD2             =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
+             VIFROT          =SIMP(statut='o',typ='R',val_min=0.E+0),
+             FA              =SIMP(statut='o',typ='R',val_min=0.E+0),
+             FC              =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSTR0          =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E+0),
+             ADN             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             BDN             =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
+           ),
+          VENDOCHAB       =FACT(statut='f',
+             SY              =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             ALPHA_D         =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             BETA_D          =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             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',
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA_D         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA_D          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           VISC_ENDO      =FACT(statut='f',
+             SY              =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             R_D             =SIMP(statut='o',typ='R'),
+             A_D             =SIMP(statut='o',typ='R'),
+           ),
+           VISC_ENDO_FO   =FACT(statut='f',
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           PINTO_MENEGOTTO =FACT(statut='f',
+             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',
+             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',
+            regles=(PRESENT_PRESENT('RELAX_1000','F_PRG',),
+                     PRESENT_PRESENT('MU0_RELAX','F_PRG',),),
+             RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             F_PRG           =SIMP(statut='f',typ='R'),
+             FROT_COURB      =SIMP(statut='f',typ='R',defaut=0.E+0),
+             FROT_LINE       =SIMP(statut='f',typ='R',defaut=0.E+0),
+           ),
+           CAM_CLAY      =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             KAPA            =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             PRES_CRIT       =SIMP(statut='o',typ='R'),
+             KCAM            =SIMP(statut='f',typ='R',val_min=0.E+0),
+             PTRAC           =SIMP(statut='f',typ='R',val_max=0.E+0),
+               regles=(PRESENT_PRESENT('PTRAC','KCAM',),),
+           ),
+           BARCELONE      =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             KAPA            =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             PRES_CRIT       =SIMP(statut='o',typ='R'),
+             PA            =SIMP(statut='o',typ='R'),
+             R             =SIMP(statut='o',typ='R'),
+             BETA          =SIMP(statut='o',typ='R'),
+             KC            =SIMP(statut='o',typ='R'),
+             PC0_INIT      =SIMP(statut='o',typ='R'),
+             KAPAS         =SIMP(statut='o',typ='R'),
+             LAMBDAS       =SIMP(statut='o',typ='R'),
+             ALPHAB        =SIMP(statut='f',typ='R'),
+           ),
+           CJS             =FACT(statut='f',
+             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 ),
+           ),
+           HUJEUX   =FACT(statut='f',
+             N      =SIMP(statut='o',typ='R' ),
+             BETA   =SIMP(statut='o',typ='R' ),
+             B      =SIMP(statut='o',typ='R' ),
+             D      =SIMP(statut='o',typ='R' ),
+             PHI    =SIMP(statut='o',typ='R' ),
+             ANGDIL =SIMP(statut='o',typ='R' ),
+             PCO    =SIMP(statut='o',typ='R' ),
+             PREF   =SIMP(statut='o',typ='R' ),
+             ACYC   =SIMP(statut='o',typ='R' ),
+             AMON   =SIMP(statut='o',typ='R' ),
+             CCYC   =SIMP(statut='o',typ='R' ),
+             CMON   =SIMP(statut='o',typ='R' ),
+             RD_ELA =SIMP(statut='o',typ='R' ),
+             RI_ELA =SIMP(statut='o',typ='R' ),
+             RHYS   =SIMP(statut='o',typ='R' ),
+             RMOB   =SIMP(statut='o',typ='R' ),
+             XM     =SIMP(statut='o',typ='R' ),
+             RD_CYC =SIMP(statut='o',typ='R' ),
+             RI_CYC =SIMP(statut='o',typ='R' ),
+             DILA   =SIMP(statut='o',typ='R' ),
+             PTRAC  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ECRO_ASYM_LINE  =FACT(statut='f',
+             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',
+             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'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+           ),
+           GRANGER_FP_INDT =FACT(statut='f',
+             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'),
+           ),
+           V_GRANGER_FP    =FACT(statut='f',
+             QSR_VEIL        =SIMP(statut='f',typ='R'),
+             FONC_V          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           BETON_UMLV_FP   =FACT(statut='f',min=0 ,
+             K_RS            =SIMP(statut='o',typ='R'),
+             ETA_RS          =SIMP(statut='o',typ='R'),
+             K_IS            =SIMP(statut='o',typ='R'),
+             ETA_IS          =SIMP(statut='o',typ='R'),
+             K_RD            =SIMP(statut='o',typ='R'),
+             ETA_RD          =SIMP(statut='o',typ='R'),
+             ETA_ID          =SIMP(statut='o',typ='R'),
+             ETA_FD          =SIMP(statut='f',typ='R'),
+           ),
+           BETON_RAG    =FACT(statut='f',
+             ACTIV_FL        =SIMP(statut='f',typ='R',defaut=1.0 ),
+             K_RS            =SIMP(statut='o',typ='R'),
+             K_IS            =SIMP(statut='o',typ='R'),
+             ETA_RS          =SIMP(statut='o',typ='R'),
+             ETA_IS          =SIMP(statut='o',typ='R'),
+             K_RD            =SIMP(statut='o',typ='R'),
+             K_ID            =SIMP(statut='o',typ='R'),
+             ETA_RD          =SIMP(statut='o',typ='R'),
+             ETA_ID          =SIMP(statut='o',typ='R'),
+             EPS_0           =SIMP(statut='o',typ='R'),
+             TAU_0           =SIMP(statut='o',typ='R'),
+             EPS_FL_L        =SIMP(statut='f',typ='R',defaut=3.0e-2 ),
+             ACTIV_LO        =SIMP(statut='f',typ='R',defaut=1.0 ),
+             F_C             =SIMP(statut='o',typ='R'),
+             F_T             =SIMP(statut='o',typ='R'),
+             ANG_CRIT        =SIMP(statut='f',typ='R',defaut=8.594367 ),
+             EPS_COMP        =SIMP(statut='o',typ='R'),
+             EPS_TRAC        =SIMP(statut='o',typ='R'),
+             LC_COMP         =SIMP(statut='o',typ='R',defaut=1.0  ),
+             LC_TRAC         =SIMP(statut='o',typ='R',defaut=1.0  ),
+             HYD_PRES        =SIMP(statut='f',typ='R',defaut=0.   ),
+             A_VAN_GE        =SIMP(statut='f',typ='R',defaut=0.0  ),
+             B_VAN_GE        =SIMP(statut='f',typ='R',defaut=1.9  ),
+             BIOT_EAU        =SIMP(statut='o',typ='R',defaut=0.3  ),
+             MODU_EAU        =SIMP(statut='o',typ='R',defaut=0.0  ),
+             W_EAU_0         =SIMP(statut='o',typ='R'),
+             BIOT_GEL        =SIMP(statut='o',typ='R'),
+             MODU_GEL        =SIMP(statut='o',typ='R'),
+             VOL_GEL         =SIMP(statut='o',typ='R'),
+             AVANC_LI        =SIMP(statut='o',typ='R'),
+             SEUIL_SR        =SIMP(statut='o',typ='R'),
+             PARA_CIN        =SIMP(statut='o',typ='R'),
+             ENR_AC_G        =SIMP(statut='o',typ='R'),
+           ),
+           GLRC_DM         =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('GAMMA_C','SYC'),),
+             GAMMA_T         =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+             GAMMA_C         =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=1.E+0),
+             GAMMA_F         =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+             SYT             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             SYC             =SIMP(statut='f',typ='R'),
+             SYF             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EF              =SIMP(statut='f',typ='R',val_min=0.E+0),
+             NUF             =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=0.5+0),
+           ),
+           GATT_MONERIE    =FACT(statut='f',min=0,max=1,
+             D_GRAIN         =SIMP(statut='o',typ='R',val_min=0.E+0),
+             PORO_INIT       =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSI_01         =SIMP(statut='o',typ='R',defaut= 2.7252E-10,val_min=0.E+0),
+             EPSI_02         =SIMP(statut='o',typ='R',defaut= 9.1440E-41,val_min=0.E+0),
+           ),
+           CORR_ACIER   =FACT(statut='f',min=0 ,max=1,
+             D_CORR           =SIMP(statut='o',typ='R'),
+             ECRO_K           =SIMP(statut='o',typ='R'),
+             ECRO_M           =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             ),
+# Discrets non-linéaires : début
+         DIS_ECRO_CINE  =FACT(statut='f',
+            fr="Loi pour les discrets avec écrouissage cinématique.",
+            regles=(PRESENT_PRESENT('LIMY_DX','KCIN_DX',),PRESENT_PRESENT('PUIS_DX','LIMU_DX',),
+                    PRESENT_PRESENT('LIMY_DY','KCIN_DY',),PRESENT_PRESENT('PUIS_DY','LIMU_DY',),
+                    PRESENT_PRESENT('LIMY_DZ','KCIN_DZ',),PRESENT_PRESENT('PUIS_DZ','LIMU_DZ',),
+                    PRESENT_PRESENT('LIMY_RX','KCIN_RX',),PRESENT_PRESENT('PUIS_RX','LIMU_RX',),
+                    PRESENT_PRESENT('LIMY_RY','KCIN_RY',),PRESENT_PRESENT('PUIS_RY','LIMU_RY',),
+                    PRESENT_PRESENT('LIMY_RZ','KCIN_RZ',),PRESENT_PRESENT('PUIS_RZ','LIMU_RZ',),),
+            LIMY_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite élastique suivant l'axe local x de l'élément."),
+            LIMY_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite élastique suivant l'axe local y de l'élément."),
+            LIMY_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite élastique suivant l'axe local z de l'élément."),
+            LIMY_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite élastique suivant l'axe local x de l'élément."),
+            LIMY_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite élastique suivant l'axe local y de l'élément."),
+            LIMY_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite élastique suivant l'axe local z de l'élément."),
+            KCIN_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local x de l'élément."),
+            KCIN_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local y de l'élément."),
+            KCIN_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local z de l'élément."),
+            KCIN_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local Rx de l'élément."),
+            KCIN_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local Ry de l'élément."),
+            KCIN_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local Rz de l'élément."),
+            LIMU_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite suivant l'axe local x de l'élément."),
+            LIMU_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite suivant l'axe local y de l'élément."),
+            LIMU_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite suivant l'axe local z de l'élément."),
+            LIMU_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite suivant l'axe local x de l'élément."),
+            LIMU_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite suivant l'axe local y de l'élément."),
+            LIMU_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite suivant l'axe local z de l'élément."),
+            PUIS_DX =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local x de l'élément."),
+            PUIS_DY =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local y de l'élément."),
+            PUIS_DZ =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local z de l'élément."),
+            PUIS_RX =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local Rx de l'élément."),
+            PUIS_RY =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local Ry de l'élément."),
+            PUIS_RZ =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local Rz de l'élément."),
+         ),
+         DIS_VISC  =FACT(statut='f',
+            fr="Loi pour un discret de type amortisseur visqueux.",
+            regles=(PRESENT_PRESENT('PUIS_DX','COEF_DX',),
+                    PRESENT_PRESENT('PUIS_DY','COEF_DY',),
+                    PRESENT_PRESENT('PUIS_DZ','COEF_DZ',),
+                    PRESENT_PRESENT('PUIS_RX','COEF_RX',),
+                    PRESENT_PRESENT('PUIS_RY','COEF_RY',),
+                    PRESENT_PRESENT('PUIS_RZ','COEF_RZ',),
+                    ),
+            PUIS_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance dans la direction locale Dx de l'élément."),
+            PUIS_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance dans la direction locale Dy de l'élément."),
+            PUIS_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance dans la direction locale Dz de l'élément."),
+            PUIS_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance autour de la direction locale Rx de l'élément."),
+            PUIS_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance autour de la direction locale Ry de l'élément."),
+            PUIS_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance autour de la direction locale Rz de l'élément."),
+            COEF_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C dans la direction locale Dx de l'élément."),
+            COEF_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C dans la direction locale Dy de l'élément."),
+            COEF_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C dans la direction locale Dz de l'élément."),
+            COEF_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C autour de la direction locale Rx de l'élément."),
+            COEF_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C autour de la direction locale Ry de l'élément."),
+            COEF_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C autour de la direction locale Rz de l'élément."),
+         ),
+         DIS_BILI_ELAS  =FACT(statut='f',
+            fr="Loi bi-linéaire pour les discrets.",
+            regles=(PRESENT_PRESENT('KDEB_DX','KFIN_DX','FPRE_DX',),
+                    PRESENT_PRESENT('KDEB_DY','KFIN_DY','FPRE_DY',),
+                    PRESENT_PRESENT('KDEB_DZ','KFIN_DZ','FPRE_DZ',),),
+            KDEB_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début suivant l'axe local x de l'élément."),
+            KDEB_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début suivant l'axe local y de l'élément."),
+            KDEB_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début  suivant l'axe local z de l'élément."),
+            KFIN_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local x de l'élément."),
+            KFIN_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local y de l'élément."),
+            KFIN_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local z de l'élément."),
+            FPRE_DX =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local x de l'élément."),
+            FPRE_DY =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local y de l'élément."),
+            FPRE_DZ =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local z de l'élément."),
+         ),
+# Discrets non-linéaires : fin
+#
+# comportement thermique
+#
+           THER_NL         =FACT(statut='f',
+             regles=(UN_PARMI('BETA','RHO_CP', ),),
+             LAMBDA          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO_CP          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           THER_HYDR       =FACT(statut='f',
+             LAMBDA          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AFFINITE        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CHALHYDR        =SIMP(statut='o',typ='R'),
+           ),
+           THER            =FACT(statut='f',
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_FO         =FACT(statut='f',
+             LAMBDA          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO_CP          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           THER_ORTH       =FACT(statut='f',
+             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',
+             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',
+             COND_LMM        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TMM        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_LMP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TMP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_LPP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TPP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_LSI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TSI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NMM        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NMP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NPP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NSI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_MM         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_MP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_PP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_SI         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           SECH_GRANGER    =FACT(statut='f',
+             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',
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+           ),
+           SECH_BAZANT     =FACT(statut='f',
+             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_sdaster,nappe_sdaster,formule)),
+           ),
+           SECH_NAPPE      =FACT(statut='f',
+             FONCTION        =SIMP(statut='o',typ=(nappe_sdaster,formule)),
+           ),
+#
+# comportement métallurgique
+#
+           META_ACIER      =FACT(statut='f',
+             TRC             =SIMP(statut='o',typ=(table_sdaster) ),
+             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',
+             TDEQ            =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             T1C             =SIMP(statut='o',typ='R'),
+             T2C             =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             T1R             =SIMP(statut='o',typ='R'),
+             T2R             =SIMP(statut='o',typ='R'),
+             AR              =SIMP(statut='o',typ='R'),
+             BR              =SIMP(statut='o',typ='R'),
+           ),
+           DURT_META       =FACT(statut='f',
+             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',
+             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'),
+             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_sdaster,nappe_sdaster,formule)),
+             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_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_META_FO    =FACT(statut='f',
+             regles=(
+                      PRESENT_PRESENT('F_ALPHA','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('C_ALPHA','TEMP_DEF_ALPHA'),
+                    ),
+             E               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_ALPHA         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_ALPHA         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             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_sdaster,nappe_sdaster,formule)),
+             F2_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_SY            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SY_MELANGE      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_S_VP          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S_VP_MELANGE    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_ECRO_LINE  =FACT(statut='f',
+             F1_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_D_SIGM_EPSI   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_TRACTION   =FACT(statut='f',
+             SIGM_F1         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_F2         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_F3         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_F4         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_VISC_FO    =FACT(statut='f',
+             F1_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_ETA           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_N             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_C             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_M             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_PT         =FACT(statut='f',
+             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_sdaster,nappe_sdaster,formule)),
+             F2_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_RE         =FACT(statut='f',
+             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',
+             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'),
+           ),
+# =================================================================================
+# COMPORTEMENT THERMO_HYDRO_MECANIQUE
+# LES DONNEES NECESSAIRES A LA DEFINITION DU MATERIAU SONT DEPENDANTES
+# DE LA LOI DE COUPLAGE THM DE LA RELATION
+# LE COMPORTEMENT DE COUPLAGE COMP_THM N EST VALABLE QUE POUR LES LOIS
+# DE COUPLAGE : LIQU_SATU,LIQU_GAZ,GAZ,LIQU_GAZ_ATM,LIQU_VAPE_GAZ,LIQU_VAPE
+# ET LIQU_AD_GAZ_VAPE
+# LA CORRESPONDANCE AVEC LES VARIABLES CACHEES EST LA SUIVANTE :
+# 1 -->  LIQU_SATU
+# 2 -->  GAZ
+# 3 -->  LIQU_VAPE
+# 4 -->  LIQU_VAPE_GAZ
+# 5 -->  LIQU_GAZ
+# 6 -->  LIQU_GAZ_ATM
+# 9 -->  LIQU_AD_GAZ_VAPE
+# 10 -->  LIQU_AD_GAZ
+# =================================================================================
+           COMP_THM        = SIMP(statut='f', typ='TXM',
+                                  into = ( "LIQU_SATU"     ,
+                                           "LIQU_GAZ"      ,
+                                           "GAZ"           ,
+                                           "LIQU_GAZ_ATM"  ,
+                                           "LIQU_VAPE_GAZ" ,
+                                           "LIQU_VAPE"     ,
+                                           "LIQU_AD_GAZ_VAPE" ,
+                                           "LIQU_AD_GAZ" ,
+                                          ) ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_SATU -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU -----------------------------------------------
+# =================================================================================
+           b_liqusatu      = BLOC(condition = "COMP_THM == 'LIQU_SATU' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_SATU",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1          = SIMP(statut='o',typ='R'),
+                                           PORO          = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP          = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2          = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE     = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU     = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 1.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO           = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF     = SIMP(statut='o',typ='R'),
+                                           PESA_X        = SIMP(statut='o',typ='R'),
+                                           PESA_Y        = SIMP(statut='o',typ='R'),
+                                           PESA_Z        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP            = SIMP(statut='f',typ='R'),
+                                           PERM_IN       = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ         = SIMP(statut='f',typ='R'),
+                                           EMMAG           = SIMP(statut='f',typ='R'),
+                                           SATU_PRES       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO           = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K      = SIMP(statut='o',typ='R'),
+                                           VISC          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP   = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA         = SIMP(statut='f',typ='R'),
+                                           CP            = SIMP(statut='f',typ='R'),
+                                         ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ --------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+           b_liqugaz      = BLOC(condition = "COMP_THM == 'LIQU_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 5.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N    = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR   = SIMP(statut='f',typ='R'),
+                                           VG_SMAX = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG           = SIMP(statut='f',typ='R'),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL        = SIMP(statut='o',typ='R'),
+                                           VISC            = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP     = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP              = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE GAZ -------------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_GAZ ------------------------------------------------
+# =================================================================================
+           b_gaz          = BLOC(condition = "COMP_THM == 'GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='o',typ='R'),
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 2.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG           = SIMP(statut='f',typ='R'),
+                                           SATU_PRES       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_LIQU        =FACT(statut='f',
+             RHO             =SIMP(statut='f',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_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),
+           ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ_ATM ----------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+           b_liqugazatm   = BLOC(condition = "COMP_THM == 'LIQU_GAZ_ATM' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ_ATM",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 6.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+             EMMAG           = SIMP(statut='f',typ='R'),
+             R_GAZ           =SIMP(statut='f',typ='R'),
+             PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='f',
+                                           MASS_MOL         = SIMP(statut='f',typ='R'),
+                                           VISC             = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_AD_GAZ -------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ,  THM_AIR_DISSOUS---------
+# =================================================================================
+           b_liquadgaz  = BLOC(condition = "COMP_THM == 'LIQU_AD_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_AD_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 10.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ),
+# =================================================================================
+# --- MOT-CLE FACULTATIF ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='f',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_AIR_DISS = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           COEF_HENRY       = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+                                 ),
+
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE_GAZ ---------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ ------------------------
+# =================================================================================
+           b_liquvapegaz  = BLOC(condition = "COMP_THM == 'LIQU_VAPE_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           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'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 4.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
+                                           FICKV_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVE   ----------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_AD_GAZ_VAPE -------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ THM_AIR_DISSOUS---------
+# =================================================================================
+           b_liquadvape  = BLOC(condition = "COMP_THM == 'LIQU_AD_GAZ_VAPE' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_AD_GAZ_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           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'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 9.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
+                                           FICKV_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_AIR_DISS = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           COEF_HENRY       = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_VAPE_GAZ ---------------------------------
+# =================================================================================
+           b_liquvape  = BLOC(condition = "COMP_THM == 'LIQU_VAPE' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 3.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N    = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR   = SIMP(statut='f',typ='R'),
+                                           VG_SMAX = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# courbes et coefficients associés à la fatigue et au dommage
+#
+           FATIGUE         =FACT(statut='f',
+             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_sdaster,nappe_sdaster,formule)),
+             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_sdaster,nappe_sdaster,formule)),
+             E_REFE          =SIMP(statut='f',typ='R'),
+             D0              =SIMP(statut='f',typ='R'),
+             TAU0            =SIMP(statut='f',typ='R'),
+           ),
+           DOMMA_LEMAITRE  =FACT(statut='f',
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             EPSP_SEUIL      =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             EXP_S           =SIMP(statut='f',typ='R',val_min=0.0E0,defaut=1.0),
+           ),
+           CISA_PLAN_CRIT  =FACT(statut='f',
+             CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE_MODI_AC",
+                                                            "DANG_VAN_MODI_AC",
+                                                            "DANG_VAN_MODI_AV",
+                                                            "MATAKE_MODI_AV",
+                                                            "FATESOCI_MODI_AV",
+                                                            ) ),
+
+             b_critere_matake =BLOC(condition="CRITERE=='MATAKE_MODI_AC' or CRITERE=='MATAKE_MODI_AV'",
+                         fr="Cisaillement plan critique critère de matake pour les cas amplitude constante et amplitude variable",
+               MATAKE_A         =SIMP(statut='o',typ='R'),
+               MATAKE_B         =SIMP(statut='o',typ='R'),
+               COEF_FLEX_TORS   =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+             ),
+
+             b_critere_dang_van =BLOC(condition="(CRITERE=='DANG_VAN_MODI_AC' or CRITERE=='DANG_VAN_MODI_AV')",
+                                 fr="Critère de Dang Van modifié pour les cas amplitude constante et amplitude variable",
+               D_VAN_A            =SIMP(statut='o',typ='R'),
+               D_VAN_B            =SIMP(statut='o',typ='R'),
+               COEF_CISA_TRAC     =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+             ),
+
+             b_critere_fate_soci =BLOC(condition="CRITERE=='FATESOCI_MODI_AV'",
+                               fr="Critère de Fatemi et Socie, en élasticité ou élastoplasticité, pour le cas amplitude variable",
+               FATSOC_A           =SIMP(statut='o',typ='R'),
+               COEF_CISA_TRAC     =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+             ),
+           ),
+
+
+           THM_RUPT       =FACT(statut='f',
+             OUV_FICT        =SIMP(statut='o',typ='R'),
+             UN_SUR_N        =SIMP(statut='f',typ='R',defaut= 0.),
+           ),
+#
+# autres comportements ...
+#
+           WEIBULL         =FACT(statut='f',
+             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',
+             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_sdaster,nappe_sdaster,formule)),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ),
+           NON_LOCAL       =FACT(statut='f',
+             regles=(AU_MOINS_UN('LONG_CARA','C_GONF','C_GRAD_VARI','PENA_LAGR',),),
+             LONG_CARA       =SIMP(statut='f',typ='R'),
+             C_GRAD_VARI     =SIMP(statut='f',typ='R'),
+             PENA_LAGR       =SIMP(statut='f',typ='R',defaut= 1.0E3),
+             C_GONF          =SIMP(statut='f',typ='R'),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
+           ),
+           RUPT_FRAG       =FACT(statut='f',
+             GC              =SIMP(statut='o',typ='R'),
+             SIGM_C          =SIMP(statut='f',typ='R'),
+             PENA_ADHERENCE  =SIMP(statut='f',typ='R',val_min=1.E-12,val_max=1.E+0),
+             PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.),
+             PENA_LAGR       =SIMP(statut='f',typ='R',defaut=1.0E2,val_min=1.01E+0),
+             RIGI_GLIS       =SIMP(statut='f',typ='R',defaut=1.0E1),
+           ),
+           RUPT_FRAG_FO   =FACT(statut='f',
+             GC              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PENA_ADHERENCE  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.),
+           ),
+           RUPT_DUCT       =FACT(statut='f',
+             GC              =SIMP(statut='o',typ='R'),
+             SIGM_C          =SIMP(statut='o',typ='R'),
+             COEF_EXTR       =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=9.99E-1),
+             COEF_PLAS       =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=9.99E-1),
+             PENA_LAGR       =SIMP(statut='f',typ='R',defaut=1.0E2,val_min=1.01E+0),
+             RIGI_GLIS       =SIMP(statut='f',typ='R',defaut=1.0E1),
+           ),
+           JOINT_MECA_RUPT  =FACT(statut='f',
+             regles=(EXCLUS('PRES_FLUIDE','PRES_CLAVAGE'),
+                     PRESENT_PRESENT('RHO_FLUIDE','VISC_FLUIDE','OUV_MIN'),
+                     PRESENT_ABSENT('PRES_FLUIDE','RHO_FLUIDE','VISC_FLUIDE','OUV_MIN'),
+                     PRESENT_ABSENT('PRES_CLAVAGE','RHO_FLUIDE','VISC_FLUIDE','OUV_MIN'),
+                     PRESENT_ABSENT('RHO_FLUIDE','PRES_FLUIDE','PRES_CLAVAGE'),
+                     PRESENT_ABSENT('VISC_FLUIDE','PRES_FLUIDE','PRES_CLAVAGE'),
+                     PRESENT_ABSENT('OUV_MIN','PRES_FLUIDE','PRES_CLAVAGE'),
+                     ),
+             K_N             =SIMP(statut='o',typ='R',val_min=1.E-12),
+             K_T             =SIMP(statut='f',typ='R',val_min=1.E-12),
+             SIGM_MAX        =SIMP(statut='o',typ='R',val_min=0.),
+             ALPHA           =SIMP(statut='f',typ='R',defaut=1., val_min=0., val_max=2.),
+             PENA_RUPTURE    =SIMP(statut='f',typ='R',val_min=1.E-12,val_max=10.E+0),
+             PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.,val_min=1.E-12),
+             PRES_FLUIDE     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PRES_CLAVAGE    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO_FLUIDE      =SIMP(statut='f',typ='R',val_min=0.),
+             VISC_FLUIDE     =SIMP(statut='f',typ='R',val_min=1.E-20),
+             OUV_MIN         =SIMP(statut='f',typ='R',val_min=1.E-15), 
+           ),
+           JOINT_MECA_FROT   =FACT(statut='f',
+             K_N             =SIMP(statut='o',typ='R',val_min=1.E-12),
+             K_T             =SIMP(statut='f',typ='R',val_min=1.E-12),
+             MU              =SIMP(statut='o',typ='R',val_min=1.E-3),             
+             PENA_TANG       =SIMP(statut='f',typ='R',val_min=0.),
+             ADHESION        =SIMP(statut='f',typ='R',defaut=0., val_min=0.),
+           ),           
+           RCCM            =FACT(statut='f',
+             regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
+             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'),
+             A_AMORC         =SIMP(statut='f',typ='R'),
+             B_AMORC         =SIMP(statut='f',typ='R'),
+             D_AMORC         =SIMP(statut='f',typ='R'),
+             R_AMORC         =SIMP(statut='f',typ='R'),
+           ),
+           RCCM_FO         =FACT(statut='f',
+             regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
+             SY_02           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SM              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SU              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S               =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N_KE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_KE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_AMORC         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B_AMORC         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_AMORC         =SIMP(statut='f',typ='R'),
+             R_AMORC         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           LAIGLE          =FACT(statut='f',
+             GAMMA_ULT       =SIMP(statut='o',typ='R'),
+             GAMMA_E         =SIMP(statut='o',typ='R'),
+             M_ULT           =SIMP(statut='o',typ='R'),
+             M_E             =SIMP(statut='o',typ='R'),
+             A_E             =SIMP(statut='o',typ='R'),
+             M_PIC           =SIMP(statut='o',typ='R'),
+             A_PIC           =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='o',typ='R'),
+             SIGMA_C         =SIMP(statut='o',typ='R'),
+             GAMMA           =SIMP(statut='o',typ='R'),
+             KSI             =SIMP(statut='o',typ='R'),
+             GAMMA_CJS       =SIMP(statut='o',typ='R'),
+             SIGMA_P1        =SIMP(statut='o',typ='R'),
+             PA              =SIMP(statut='o',typ='R'),
+           ),
+           LETK          =FACT(statut='f',
+             PA         =SIMP(statut='o',typ='R',fr="pression atmospherique"),
+             NELAS      =SIMP(statut='o',typ='R',fr="exposant de la loi de variation des modules K et G"),
+             SIGMA_C    =SIMP(statut='o',typ='R',fr="résistance en compression simple "),
+             H0_EXT     =SIMP(statut='o',typ='R',fr="parametre pilotant la résistance en extension"),
+             GAMMA_CJS  =SIMP(statut='o',typ='R',fr="parametre de forme du critere ds le plan déviatoire entre 0 et 1."),
+             XAMS       =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'écrouissage pre pic"),
+             ETA        =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'écrouissage post pic"),
+             A_0        =SIMP(statut='o',typ='R',fr="a de la limite d'élasticité initiale"),
+             A_E        =SIMP(statut='o',typ='R',fr="a de la limite de clivage ou seuil intermédiaire"),
+             A_PIC      =SIMP(statut='o',typ='R',fr="a du seuil de pic"),
+             S_0        =SIMP(statut='o',typ='R',fr="s de la limite d'élasticité initiale"),
+             M_0        =SIMP(statut='o',typ='R',fr="m de la limite d'élasticité initiale"),
+             M_E        =SIMP(statut='o',typ='R',fr="m de la limite de clivage ou seuil intermédiaire"),
+             M_PIC      =SIMP(statut='o',typ='R',fr="m du seuil de pic"),
+             M_ULT      =SIMP(statut='o',typ='R',fr="m du seuil residuel"),
+             XI_ULT     =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil résiduel"),
+             XI_E       =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil de clivage"),
+             XI_PIC     =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil de pic"),
+             MV_MAX     =SIMP(statut='o',typ='R',fr="m du seuil viscoplastique maximal"),
+             XIV_MAX    =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil viscoplastique maximal"),
+             A          =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+             N          =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+             SIGMA_P1   =SIMP(statut='o',typ='R',fr="SIG min de l intersection du seuil de pic et intermediaire "),
+             MU0_V      =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+             XI0_V      =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+             MU1        =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+             XI1        =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+           ),
+           DRUCK_PRAGER  =FACT(statut='f',
+             ALPHA           =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             P_ULTM          =SIMP(statut='o',typ='R'),
+             ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+             b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+                    H               =SIMP(statut='o',typ='R'),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 1.0,),
+             ),
+             b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+                    SY_ULTM         =SIMP(statut='o',typ='R'),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
+             ),
+             DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           ),
+
+           DRUCK_PRAGER_FO  =FACT(statut='f',
+             ALPHA           =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             P_ULTM          =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+             b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+                    H               =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 1.0,),
+             ),
+             b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+                    SY_ULTM         =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
+             ),
+            DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           ),
+
+           VISC_DRUC_PRAG          =FACT(statut='f',
+             PREF       =SIMP(statut='o',typ='R',fr="pression de reference"),
+             A          =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+             N          =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+             P_PIC      =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de pic"),
+             P_ULT      =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil utime"),
+             ALPHA_0    =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil d elasticite"),
+             ALPHA_PIC  =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil de pic"),
+             ALPHA_ULT  =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil ultime"),
+             R_0        =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil d'elasticite"),
+             R_PIC      =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil de pic"),
+             R_ULT      =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil ultime"),
+             BETA_0     =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil d elasticite"),
+             BETA_PIC   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil de pic"),
+             BETA_ULT   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil ultime"),
+           ),
+             HOEK_BROWN          =FACT(statut='f',
+             GAMMA_RUP       =SIMP(statut='o',typ='R'),
+             GAMMA_RES       =SIMP(statut='o',typ='R'),
+             S_END           =SIMP(statut='o',typ='R'),
+             S_RUP           =SIMP(statut='o',typ='R'),
+             M_END           =SIMP(statut='o',typ='R'),
+             M_RUP           =SIMP(statut='o',typ='R'),
+             BETA            =SIMP(statut='o',typ='R'),
+             ALPHAHB         =SIMP(statut='o',typ='R'),
+             PHI_RUP         =SIMP(statut='o',typ='R'),
+             PHI_RES         =SIMP(statut='o',typ='R'),
+             PHI_END         =SIMP(statut='f',typ='R'),
+           ),
+             ELAS_GONF             =FACT(statut='f',
+             BETAM           =SIMP(statut='o',typ='R'),
+             PREF            =SIMP(statut='o',typ='R'),
+           ),
+             JOINT_BANDIS         =FACT(statut='f',
+             K                =SIMP(statut='o',typ='R'),
+             DMAX             =SIMP(statut='o',typ='R'),
+             GAMMA            =SIMP(statut='o',typ='R'),
+             KT               =SIMP(statut='f',typ='R',defaut = 1.E12),
+           ),
+####  MONOCRISTAL
+
+           MONO_VISC1      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           MONO_VISC2      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             C               =SIMP(statut='o',typ='R'),
+             D               =SIMP(statut='o',typ='R'),
+             A               =SIMP(statut='o',typ='R'),
+           ),
+           MONO_ISOT1      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_ISOT",),),
+             R_0             =SIMP(statut='o',typ='R'),
+             Q               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+           ),
+           MONO_ISOT2      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_ISOT",),),
+             R_0             =SIMP(statut='o',typ='R'),
+             Q1              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+             Q2              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+           ),
+           MONO_CINE1      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
+             D               =SIMP(statut='o',typ='R'),
+           ),
+           MONO_CINE2      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
+             D               =SIMP(statut='o',typ='R'),
+             GM              =SIMP(statut='o',typ='R'),
+             PM              =SIMP(statut='o',typ='R'),
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           MONO_DD_KR      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+            # TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             K               =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
+             TAUR            =SIMP(statut='o',typ='R',fr="Contraintes de cisaillement à T=0K, en unite de contraintes"),
+             TAU0            =SIMP(statut='o',typ='R',fr="Contraintes critique initiale de cisaillement, en unite de contraintes"),
+             GAMMA0          =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
+             DELTAG0         =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
+             BSD             =SIMP(statut='o',typ='R',fr="fonction de la taille du grain B/D"),
+             GCB             =SIMP(statut='o',typ='R',fr="distance critique d'annihilation GC/B"),
+             KDCS            =SIMP(statut='o',typ='R',fr="Parametre relatif à la direction principale de la dislocation"),
+             P               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+             Q               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+           ),
+           MONO_DD_CFC      =FACT(statut='f',
+             regles=(UN_PARMI('H','H1'),
+                     PRESENT_PRESENT('H1','H2','H3','H4','H5'),
+                     PRESENT_ABSENT('H','H1','H2','H3','H4','H5'),
+                     ),
+             #TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             GAMMA0          =SIMP(statut='f',typ='R',defaut=0.001,fr="Vitesse d ecoulement initiale en s**-1"),
+             TAU_F           =SIMP(statut='o',typ='R',fr="Contraintes , en unite de contraintes ex 20 MPa"),
+             A               =SIMP(statut='f',typ='R',defaut=0.13,fr="paramètre A, sans unité"),
+             B               =SIMP(statut='f',typ='R',defaut=0.005,fr="paramètre B, sans unité"),
+             N               =SIMP(statut='f',typ='R',defaut=200.,fr="paramètre n, sans unité"),
+             Y               =SIMP(statut='o',typ='R',fr="paramète Y, en unité de longueur ex 2.5 A"),
+             ALPHA           =SIMP(statut='f',typ='R',defaut=0.35,fr="ecrouissage, paramètre alpha"),
+             BETA            =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre b, en unite de longueur"),
+             RHO_REF         =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre rho_ref, en unité de longueur **-2"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R',defaut=0.124,fr="matrice d'interaction, terme a*",),
+             H2              =SIMP(statut='f',typ='R',defaut=0.625,fr="matrice d'interaction, terme a_colineaire",),
+             H3              =SIMP(statut='f',typ='R',defaut=0.137,fr="matrice d'interaction, terme a_glissile",),
+             H4              =SIMP(statut='f',typ='R',defaut=0.122,fr="matrice d'interaction, terme a_Lomer",),
+             H5              =SIMP(statut='f',typ='R',defaut=0.07,fr="matrice d'interaction, terme a_Hirth",),
+           ),
+
+           MONO_DD_FAT      =FACT(statut='f',
+             regles=(UN_PARMI('H','H1'),
+                     PRESENT_PRESENT('H1','H2','H3','H4','H5'),
+                     PRESENT_ABSENT('H','H1','H2','H3','H4','H5'),
+                     ),
+             #TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             GAMMA0          =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale en s**-1"),
+             TAU_F           =SIMP(statut='o',typ='R',fr="Contraintes , en unite de contraintes ex 20 MPa"),
+             BETA            =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre b, en unite de longueur"),
+             N               =SIMP(statut='o',typ='R',fr="paramètre n, sans unite"),
+             UN_SUR_D        =SIMP(statut='o',typ='R',fr="paramètre 1/D, en unite de 1/longueur"),
+             GC0             =SIMP(statut='o',typ='R',fr="paramètre GC0, en unite de longueur"),
+             K               =SIMP(statut='o',typ='R',fr="paramètre K, sans unite"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R',defaut=0.124,fr="matrice d'interaction, terme a*",),
+             H2              =SIMP(statut='f',typ='R',defaut=0.625,fr="matrice d'interaction, terme a_colineaire",),
+             H3              =SIMP(statut='f',typ='R',defaut=0.137,fr="matrice d'interaction, terme a_glissile",),
+             H4              =SIMP(statut='f',typ='R',defaut=0.122,fr="matrice d'interaction, terme a_Lomer",),
+             H5              =SIMP(statut='f',typ='R',defaut=0.07,fr="matrice d'interaction, terme a_Hirth",),
+           ),
+
+           MONO_DD_CC      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4','H5','H6'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             #TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             GAMMA0          =SIMP(statut='f',typ='R',defaut=0.001,fr="Vitesse d ecoulement initiale en s**-1"),
+             TAU_F           =SIMP(statut='o',typ='R',fr="Contraintes , en unite de contraintes ex 20 MPa"),
+             A               =SIMP(statut='f',typ='R',defaut=0.13,fr="paramètre A, sans unité"),
+             B               =SIMP(statut='f',typ='R',defaut=0.005,fr="paramètre B, sans unité"),
+             N               =SIMP(statut='f',typ='R',defaut=200.,fr="paramètre n, sans unité"),
+             Y               =SIMP(statut='o',typ='R',fr="paramète Y, en unité de longueur ex 2.5 A"),
+             ALPHA           =SIMP(statut='f',typ='R',defaut=0.35,fr="ecrouissage, paramètre alpha"),
+             BETA            =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre b, en unite de longueur"),
+             RHO_REF         =SIMP(statut='o',typ='R',fr="ecrouissage, paramètre rho_ref, en unité de longueur **-2"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+           ),
+
+
+####  MONOCRISTAL
+
+### UMAT
+           UMAT   =FACT(statut='f',
+             C1 =SIMP(statut='f',typ='R'),
+             C2 =SIMP(statut='f',typ='R'),
+             C3 =SIMP(statut='f',typ='R'),
+             C4 =SIMP(statut='f',typ='R'),
+             C5 =SIMP(statut='f',typ='R'),
+             C6 =SIMP(statut='f',typ='R'),
+             C7 =SIMP(statut='f',typ='R'),
+             C8 =SIMP(statut='f',typ='R'),
+             C9 =SIMP(statut='f',typ='R'),
+             C10 =SIMP(statut='f',typ='R'),
+             C11 =SIMP(statut='f',typ='R'),
+             C12 =SIMP(statut='f',typ='R'),
+             C13 =SIMP(statut='f',typ='R'),
+             C14 =SIMP(statut='f',typ='R'),
+             C15 =SIMP(statut='f',typ='R'),
+             C16 =SIMP(statut='f',typ='R'),
+             C17 =SIMP(statut='f',typ='R'),
+             C18 =SIMP(statut='f',typ='R'),
+             C19 =SIMP(statut='f',typ='R'),
+             C20 =SIMP(statut='f',typ='R'),
+             C21 =SIMP(statut='f',typ='R'),
+             C22 =SIMP(statut='f',typ='R'),
+             C23 =SIMP(statut='f',typ='R'),
+             C24 =SIMP(statut='f',typ='R'),
+             C25 =SIMP(statut='f',typ='R'),
+             C26 =SIMP(statut='f',typ='R'),
+             C27 =SIMP(statut='f',typ='R'),
+             C28 =SIMP(statut='f',typ='R'),
+             C29 =SIMP(statut='f',typ='R'),
+             C30 =SIMP(statut='f',typ='R'),
+             C31 =SIMP(statut='f',typ='R'),
+             C32 =SIMP(statut='f',typ='R'),
+             C33 =SIMP(statut='f',typ='R'),
+             C34 =SIMP(statut='f',typ='R'),
+             C35 =SIMP(statut='f',typ='R'),
+             C36 =SIMP(statut='f',typ='R'),
+             C37 =SIMP(statut='f',typ='R'),
+             C38 =SIMP(statut='f',typ='R'),
+             C39 =SIMP(statut='f',typ='R'),
+             C40 =SIMP(statut='f',typ='R'),
+             C41 =SIMP(statut='f',typ='R'),
+             C42 =SIMP(statut='f',typ='R'),
+             C43 =SIMP(statut='f',typ='R'),
+             C44 =SIMP(statut='f',typ='R'),
+             C45 =SIMP(statut='f',typ='R'),
+             C46 =SIMP(statut='f',typ='R'),
+             C47 =SIMP(statut='f',typ='R'),
+             C48 =SIMP(statut='f',typ='R'),
+             C49 =SIMP(statut='f',typ='R'),
+             C50 =SIMP(statut='f',typ='R'),
+             C51 =SIMP(statut='f',typ='R'),
+             C52 =SIMP(statut='f',typ='R'),
+             C53 =SIMP(statut='f',typ='R'),
+             C54 =SIMP(statut='f',typ='R'),
+             C55 =SIMP(statut='f',typ='R'),
+             C56 =SIMP(statut='f',typ='R'),
+             C57 =SIMP(statut='f',typ='R'),
+             C58 =SIMP(statut='f',typ='R'),
+             C59 =SIMP(statut='f',typ='R'),
+             C60 =SIMP(statut='f',typ='R'),
+             C61 =SIMP(statut='f',typ='R'),
+             C62 =SIMP(statut='f',typ='R'),
+             C63 =SIMP(statut='f',typ='R'),
+             C64 =SIMP(statut='f',typ='R'),
+             C65 =SIMP(statut='f',typ='R'),
+             C66 =SIMP(statut='f',typ='R'),
+             C67 =SIMP(statut='f',typ='R'),
+             C68 =SIMP(statut='f',typ='R'),
+             C69 =SIMP(statut='f',typ='R'),
+             C70 =SIMP(statut='f',typ='R'),
+             C71 =SIMP(statut='f',typ='R'),
+             C72 =SIMP(statut='f',typ='R'),
+             C73 =SIMP(statut='f',typ='R'),
+             C74 =SIMP(statut='f',typ='R'),
+             C75 =SIMP(statut='f',typ='R'),
+             C76 =SIMP(statut='f',typ='R'),
+             C77 =SIMP(statut='f',typ='R'),
+             C78 =SIMP(statut='f',typ='R'),
+             C79 =SIMP(statut='f',typ='R'),
+             C80 =SIMP(statut='f',typ='R'),
+             C81 =SIMP(statut='f',typ='R'),
+             C82 =SIMP(statut='f',typ='R'),
+             C83 =SIMP(statut='f',typ='R'),
+             C84 =SIMP(statut='f',typ='R'),
+             C85 =SIMP(statut='f',typ='R'),
+             C86 =SIMP(statut='f',typ='R'),
+             C87 =SIMP(statut='f',typ='R'),
+             C88 =SIMP(statut='f',typ='R'),
+             C89 =SIMP(statut='f',typ='R'),
+             C90 =SIMP(statut='f',typ='R'),
+             C91 =SIMP(statut='f',typ='R'),
+             C92 =SIMP(statut='f',typ='R'),
+             C93 =SIMP(statut='f',typ='R'),
+             C94 =SIMP(statut='f',typ='R'),
+             C95 =SIMP(statut='f',typ='R'),
+             C96 =SIMP(statut='f',typ='R'),
+             C97 =SIMP(statut='f',typ='R'),
+             C98 =SIMP(statut='f',typ='R'),
+             C99 =SIMP(statut='f',typ='R'),
+             C100 =SIMP(statut='f',typ='R'),
+             C101 =SIMP(statut='f',typ='R'),
+             C102 =SIMP(statut='f',typ='R'),
+             C103 =SIMP(statut='f',typ='R'),
+             C104 =SIMP(statut='f',typ='R'),
+             C105 =SIMP(statut='f',typ='R'),
+             C106 =SIMP(statut='f',typ='R'),
+             C107 =SIMP(statut='f',typ='R'),
+             C108 =SIMP(statut='f',typ='R'),
+             C109 =SIMP(statut='f',typ='R'),
+             C110 =SIMP(statut='f',typ='R'),
+             C111 =SIMP(statut='f',typ='R'),
+             C112 =SIMP(statut='f',typ='R'),
+             C113 =SIMP(statut='f',typ='R'),
+             C114 =SIMP(statut='f',typ='R'),
+             C115 =SIMP(statut='f',typ='R'),
+             C116 =SIMP(statut='f',typ='R'),
+             C117 =SIMP(statut='f',typ='R'),
+             C118 =SIMP(statut='f',typ='R'),
+             C119 =SIMP(statut='f',typ='R'),
+             C120 =SIMP(statut='f',typ='R'),
+             C121 =SIMP(statut='f',typ='R'),
+             C122 =SIMP(statut='f',typ='R'),
+             C123 =SIMP(statut='f',typ='R'),
+             C124 =SIMP(statut='f',typ='R'),
+             C125 =SIMP(statut='f',typ='R'),
+             C126 =SIMP(statut='f',typ='R'),
+             C127 =SIMP(statut='f',typ='R'),
+             C128 =SIMP(statut='f',typ='R'),
+             C129 =SIMP(statut='f',typ='R'),
+             C130 =SIMP(statut='f',typ='R'),
+             C131 =SIMP(statut='f',typ='R'),
+             C132 =SIMP(statut='f',typ='R'),
+             C133 =SIMP(statut='f',typ='R'),
+             C134 =SIMP(statut='f',typ='R'),
+             C135 =SIMP(statut='f',typ='R'),
+             C136 =SIMP(statut='f',typ='R'),
+             C137 =SIMP(statut='f',typ='R'),
+             C138 =SIMP(statut='f',typ='R'),
+             C139 =SIMP(statut='f',typ='R'),
+             C140 =SIMP(statut='f',typ='R'),
+             C141 =SIMP(statut='f',typ='R'),
+             C142 =SIMP(statut='f',typ='R'),
+             C143 =SIMP(statut='f',typ='R'),
+             C144 =SIMP(statut='f',typ='R'),
+             C145 =SIMP(statut='f',typ='R'),
+             C146 =SIMP(statut='f',typ='R'),
+             C147 =SIMP(statut='f',typ='R'),
+             C148 =SIMP(statut='f',typ='R'),
+             C149 =SIMP(statut='f',typ='R'),
+             C150 =SIMP(statut='f',typ='R'),
+             C151 =SIMP(statut='f',typ='R'),
+             C152 =SIMP(statut='f',typ='R'),
+             C153 =SIMP(statut='f',typ='R'),
+             C154 =SIMP(statut='f',typ='R'),
+             C155 =SIMP(statut='f',typ='R'),
+             C156 =SIMP(statut='f',typ='R'),
+             C157 =SIMP(statut='f',typ='R'),
+             C158 =SIMP(statut='f',typ='R'),
+             C159 =SIMP(statut='f',typ='R'),
+             C160 =SIMP(statut='f',typ='R'),
+             C161 =SIMP(statut='f',typ='R'),
+             C162 =SIMP(statut='f',typ='R'),
+             C163 =SIMP(statut='f',typ='R'),
+             C164 =SIMP(statut='f',typ='R'),
+             C165 =SIMP(statut='f',typ='R'),
+             C166 =SIMP(statut='f',typ='R'),
+             C167 =SIMP(statut='f',typ='R'),
+             C168 =SIMP(statut='f',typ='R'),
+             C169 =SIMP(statut='f',typ='R'),
+             C170 =SIMP(statut='f',typ='R'),
+             C171 =SIMP(statut='f',typ='R'),
+             C172 =SIMP(statut='f',typ='R'),
+             C173 =SIMP(statut='f',typ='R'),
+             C174 =SIMP(statut='f',typ='R'),
+             C175 =SIMP(statut='f',typ='R'),
+             C176 =SIMP(statut='f',typ='R'),
+             C177 =SIMP(statut='f',typ='R'),
+             C178 =SIMP(statut='f',typ='R'),
+             C179 =SIMP(statut='f',typ='R'),
+             C180 =SIMP(statut='f',typ='R'),
+             C181 =SIMP(statut='f',typ='R'),
+             C182 =SIMP(statut='f',typ='R'),
+             C183 =SIMP(statut='f',typ='R'),
+             C184 =SIMP(statut='f',typ='R'),
+             C185 =SIMP(statut='f',typ='R'),
+             C186 =SIMP(statut='f',typ='R'),
+             C187 =SIMP(statut='f',typ='R'),
+             C188 =SIMP(statut='f',typ='R'),
+             C189 =SIMP(statut='f',typ='R'),
+             C190 =SIMP(statut='f',typ='R'),
+             C191 =SIMP(statut='f',typ='R'),
+             C192 =SIMP(statut='f',typ='R'),
+             C193 =SIMP(statut='f',typ='R'),
+             C194 =SIMP(statut='f',typ='R'),
+             C195 =SIMP(statut='f',typ='R'),
+             C196 =SIMP(statut='f',typ='R'),
+             C197 =SIMP(statut='f',typ='R'),
+             C198 =SIMP(statut='f',typ='R'),
+             C199 =SIMP(statut='f',typ='R'),
+             C200 =SIMP(statut='f',typ='R'),
+           ),
+           UMAT_FO   =FACT(statut='f',
+             C1 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C2 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C3 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C4 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C5 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C6 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C7 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C8 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C9 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C10 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C11 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C12 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C13 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C14 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C15 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C16 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C17 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C18 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C19 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C20 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C21 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C22 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C23 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C24 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C25 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C26 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C27 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C28 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C29 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C30 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C31 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C32 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C33 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C34 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C35 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C36 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C37 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C38 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C39 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C40 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C41 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C42 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C43 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C44 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C45 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C46 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C47 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C48 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C49 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C50 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C51 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C52 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C53 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C54 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C55 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C56 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C57 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C58 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C59 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C60 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C61 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C62 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C63 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C64 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C65 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C66 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C67 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C68 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C69 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C70 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C71 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C72 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C73 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C74 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C75 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C76 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C77 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C78 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C79 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C80 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C81 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C82 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C83 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C84 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C85 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C86 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C87 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C88 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C89 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C90 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C91 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C92 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C93 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C94 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C95 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C96 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C97 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C98 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C99 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C100 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C101 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C102 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C103 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C104 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C105 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C106 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C107 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C108 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C109 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C110 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C111 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C112 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C113 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C114 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C115 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C116 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C117 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C118 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C119 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C120 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C121 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C122 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C123 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C124 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C125 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C126 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C127 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C128 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C129 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C130 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C131 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C132 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C133 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C134 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C135 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C136 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C137 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C138 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C139 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C140 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C141 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C142 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C143 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C144 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C145 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C146 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C147 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C148 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C149 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C150 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C151 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C152 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C153 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C154 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C155 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C156 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C157 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C158 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C159 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C160 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C161 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C162 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C163 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C164 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C165 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C166 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C167 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C168 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C169 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C170 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C171 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C172 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C173 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C174 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C175 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C176 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C177 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C178 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C179 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C180 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C181 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C182 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C183 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C184 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C185 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C186 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C187 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C188 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C189 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C190 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C191 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C192 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C193 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C194 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C195 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C196 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C197 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C198 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C199 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+             C200 =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+           ),
+### UMAT
+
+
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
+                      reentrant='n',
+            fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique", 
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         SOUS_STRUC      =FACT(statut='o',max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           TRANS           =SIMP(statut='o',typ='R',max=3),
+         ),
+         LIAISON         =FACT(statut='o',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' ),
+           regles=(EXCLUS('GROUP_MA_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),
+                   EXCLUS('MAILLE_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),),
+           GROUP_MA_MAIT_1   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_1     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_MAIT_2   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_2     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           OPTION            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("REDUIT","CLASSIQUE") ),
+         ),
+         VERIF           =FACT(statut='f',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") ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=4,sd_prod=nappe_sdaster,
+                fr="Définir une fonction réelle de deux variables réelles",
+                reentrant='n',UIinfo={"groupes":("Fonctions",)},
+         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=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         PARA            =SIMP(statut='o',typ='R',max='**'),
+         FONCTION        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+         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"),
+                                 fr="Type d'interpolation pour les abscisses et les ordonnées de la fonction."),
+           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"),
+                               fr="Type d'interpolation pour le paramètre de la nappe"),
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE KHAM M.KHAM
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=table_fonction,
+                   fr="Définition d'un obstacle plan perpendiculaire à une structure filaire",
+                   reentrant='n',
+         UIinfo={"groupes":("Modélisation",)},
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# 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",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+         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',
+                               fr="Valeur du parametre",
+                               ang="Value of the parameter"),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+
+DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",
+                     op=OPS('Macro.defi_part_feti_ops.defi_part_feti_ops'),
+                     sd_prod=sd_feti_sdaster,
+                     reentrant='n',UIinfo={"groupes":("Modélisation",)},
+                     fr="Creation partitionnement en sous-domaines pour FETI",
+         regles=(UN_PARMI('MAILLAGE','MODELE'),PRESENT_PRESENT('MODELE','EXCIT'),),
+
+         NB_PART         =SIMP(statut='o',typ='I',val_min=2),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),),
+
+         # Methode de partitionnement
+         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="KMETIS" ),
+
+         LOGICIEL      =SIMP(statut='f',typ='TXM'),
+
+         # Corrige les problemes possibles de non-connexite des sous-domaines
+         CORRECTION_CONNEX    =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+
+         # Permet de grouper des mailles dans un meme sous-doamine
+         GROUPAGE        =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+                          ),
+         # Permet d'appliquer des poids sur certaines mailles
+         POIDS_MAILLES   =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+           POIDS          =SIMP(statut='f',typ='I',val_min=2),
+                          ),
+         # Prefixe pour le nom des group_ma definissant les sous-domaines
+         NOM_GROUP_MA    =SIMP(statut='f',typ='TXM',defaut='SD' ),
+
+         # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
+         TRAITER_BORDS   =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
+
+         # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
+         # Note : le calcul FETI sera impossible
+         b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
+           NOM_GROUP_MA_BORD  =SIMP(statut='f',typ='TXM'),
+             ),
+
+         INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster,
+                    fr="Creation partitionnement en sous-domaines pour FETI",
+                    docu="U4.23.05",reentrant='n',
+                    UIinfo={"groupes":("Modélisation",)},
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+         NOM             =SIMP(statut='f',typ='TXM',defaut='SD'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4) ),
+         DEFI          =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma),
+           GROUP_MA_BORD   =SIMP(statut='f',typ=grma),
+         ),
+         EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+         ),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
+                    fr="Creation partitionnement en sous-domaines pour FETI",
+                    docu="U4.00.00",
+                    UIinfo={"groupes":("Modélisation",)},
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
+         MODELE          =SIMP(statut='f',typ=(modele_sdaster)),
+         NB_PART         =SIMP(statut='o',typ='I',),
+
+         # Methode de partitionnement
+         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="KMETIS" ),
+
+         LOGICIEL      =SIMP(statut='f',typ='TXM'),
+
+         # Corrige les problemes possibles de non-connexite des sous-domaines
+         CORRECTION_CONNEX    =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+
+         # Permet de grouper des mailles dans un meme sous-doamine
+         GROUPAGE        =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+                          ),
+         # Permet d'appliquer des poids sur certaines mailles
+         POIDS_MAILLES   =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+           POIDS          =SIMP(statut='f',typ='I'),
+                          ),
+         # Prefixe pour le nom des group_ma definissant les sous-domaines
+         NOM_GROUP_MA    =SIMP(statut='f',typ='TXM',defaut='SD' ),
+
+         # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
+         TRAITER_BORDS   =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
+
+         # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
+         # Note : le calcul FETI sera impossible
+         b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
+           NOM_GROUP_MA_BORD  =SIMP(statut='f',typ='TXM'),
+             ),
+
+         INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
+
+);
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+DEFI_SOL_MISS = MACRO(nom="DEFI_SOL_MISS",
+                      op=OPS('Macro.defi_sol_miss_ops.defi_sol_miss_ops'),
+                      sd_prod=table_sdaster,
+                      fr="Définition des données de sol pour Miss",
+                      reentrant='n',
+                      UIinfo={"groupes":("Modélisation","Outils-métier",)},
+   MATERIAU = FACT(statut='o', max='**',
+            fr="Définition des matériaux",
+      E         = SIMP(statut='o', typ='R', fr="Module d'Young"),
+      NU        = SIMP(statut='o', typ='R', fr="Coefficient de Poisson"),
+      RHO       = SIMP(statut='o', typ='R', fr="Masse volumique"),
+      AMOR_HYST = SIMP(statut='o', typ='R', fr="Coefficient d'amortissement"),
+   ),
+   COUCHE = FACT(statut='o', max='**',
+                 fr="Définition des couches",
+      regles=(AU_MOINS_UN('EPAIS','SUBSTRATUM'),),
+      SUBSTRATUM= SIMP(statut='f', typ='TXM', into=("OUI","NON"),),
+      EPAIS     = SIMP(statut='f', typ='R', fr="Epaisseur de la couche"),
+      RECEPTEUR = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON"),),
+      SOURCE    = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON"),),
+      NUME_MATE = SIMP(statut='o', typ='I', fr="Numéro du matériau"),
+   ),
+   TITRE = SIMP(statut='f', typ='TXM', max='**',
+                fr="Titre de la table produite"),
+   INFO  = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+)
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
+                    fr="Définition d'un spectre d'excitation turbulente",
+                    reentrant='n',
+            UIinfo={"groupes":("Modélisation","Outils-métier",)},
+         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',
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+         ),
+         SPEC_LONG_COR_2 =FACT(statut='f',
+           regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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',
+           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_sdaster,nappe_sdaster,formule) ),
+           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',
+           regles=(ENSEMBLE('BETA','GAMMA'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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',
+           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',
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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',
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
+                   ENSEMBLE('INTE_SPEC','FONCTION'),),
+           INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+           FONCTION        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),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_sdaster ),
+         ),
+         SPEC_EXCI_POINT =FACT(statut='f',
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),
+           INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+           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_sdaster ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 25/01/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
+                    fr="Définit un maillage pour visualiser les résultats d'une sous-structuration dynamique",
+                    reentrant='n',
+            UIinfo={"groupes":("Maillage","Dynamique",)},
+         regles=(UN_PARMI('CYCLIQUE','MODELE_GENE','MAILLAGE'),
+                 PRESENT_PRESENT('CYCLIQUE','SECTEUR'),
+                 EXCLUS('SOUS_STRUC','SECTEUR'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','MODELE_GENE'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','SOUS_STRUC'),),
+         CYCLIQUE    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MODE_CYCL','MAILLAGE'),
+                   PRESENT_PRESENT('NB_SECTEUR','MAILLAGE'),),
+           MODE_CYCL       =SIMP(statut='f',typ=mode_cycl ),
+           NB_SECTEUR      =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+           MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
+         ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         RECO_GLOBAL     =FACT(statut='f',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',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_sdaster ),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),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',max='**',
+           regles=(UN_PARMI('TOUT','MAILLE','GROUP_MA'),),
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         SECTEUR         =FACT(statut='f',max='**',
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE CANO V.CANO
+DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Modélisation","Thermique",)},
+              fr="Définir d'un diagramme de transformations en refroidissement continu (TRC) de référence d'un acier"
+                +" pour les calculs métallurgiques.",
+         HIST_EXP        =FACT(statut='o',max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+         TEMP_MS         =FACT(statut='o',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',max='**',
+           DREF           =SIMP(statut='f',typ='R'),
+           A              =SIMP(statut='f',typ='R'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def depl_interne_prod(DEPL_GLOBAL,**args ):
+    if AsType(DEPL_GLOBAL)     == cham_no_sdaster: return cham_no_sdaster
+    if AsType(DEPL_GLOBAL)     == evol_elas      : return evol_elas
+    if AsType(DEPL_GLOBAL)     == dyna_trans     : return dyna_trans
+    if AsType(DEPL_GLOBAL)     == dyna_harmo     : return dyna_harmo
+    if AsType(DEPL_GLOBAL)     == mode_meca      : return mode_meca
+    if AsType(DEPL_GLOBAL)     == mode_meca_c    : return mode_meca_c
+    raise AsException("type de concept resultat non prevu")
+
+DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+                  fr="Calculer le champ de déplacement à l'intérieur d'une sous-structure statique",
+         DEPL_GLOBAL     =SIMP(statut='o',typ=(cham_no_sdaster,mode_meca,mode_meca_c,evol_elas,dyna_trans,dyna_harmo),),
+         SUPER_MAILLE    =SIMP(statut='o',typ=ma,),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+DETRUIRE=MACRO(nom="DETRUIRE",
+               op=-7,
+               UIinfo={"groupes":("Gestion du travail",)},
+               fr="Détruit des concepts utilisateurs dans la base GLOBALE ou des objets JEVEUX",
+               op_init=ops.build_detruire,
+    regles=(UN_PARMI('CONCEPT', 'OBJET',),),
+
+    CONCEPT = FACT(statut='f',max='**',
+        regles=(DERIVABLE('NOM'),),
+        NOM         = SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
+        SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),
+                           fr="Paramètre de sensibilité.",
+                           ang="Sensitivity parameter",max='**'),
+    ),
+    OBJET = FACT(statut='f',max='**',
+       CLASSE   = SIMP(statut='f', typ='TXM', into=('G', 'V', 'L'), defaut='G'),
+       CHAINE   = SIMP(statut='o', typ='TXM', validators=NoRepeat(), max='**'),
+       POSITION = SIMP(statut='f', typ='I', max='**'),
+    ),
+    ALARME = SIMP(statut='f', typ='TXM', into=('OUI', 'NON'), defaut='OUI',),
+    INFO   = SIMP(statut='f', typ='I', into=(1, 2), defaut=2, ),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
+                     fr="Calcul de la réponse spectrale d'une structure linéaire sous une excitation connue par sa DSP",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         BASE_MODALE     =FACT(statut='o',
+           regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           BANDE           =SIMP(statut='f',typ='R',validators=NoRepeat(),max=2),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),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='o',typ='R',max='**'),
+           ),
+         ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+# MODE_STAT devrait etre dans EXCIT car est utile et obligatoire que si NOM_CMP=depl_r, on pourrait
+# ainsi rajouter un bloc du genre  b_mod_stat= BLOC(condition = "(GRANDEUR == None) or (GRANDEUR == 'DEPL_R')",
+         EXCIT           =FACT(statut='o',
+           INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
+           MODAL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_modal_non = BLOC(condition = "(MODAL == None) or (MODAL == 'NON')",
+             regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'),),
+             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",
+               regles=(EXCLUS('CHAM_NO','NOEUD'),),
+# on devrait rajouter EXCLUS('GRANDEUR','CHAM_NO') pour eviter ambiguite car CHAM_NO => GRANDEUR='EFFO'
+# cela impliquerait d'enlever la valeur par defaut a GRANDEUR
+               NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+               CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
+               NOEUD           =SIMP(statut='f',typ=no,max='**'),
+               b_noeud         =BLOC(condition = "NOEUD != None",
+                  NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                ),
+               GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                           into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP
+               DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+             ),
+             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='**'),
+               NOEUD           =SIMP(statut='o',typ=no,max='**'),
+               NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+# ne serait-il pas bien que NOEUD et NOM_CMP soient facultatifs, car l'information peut etre contenue dans
+# NOEUD_I, NOM_CMP_I ...  => modif. du Fortran
+               GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                           into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP_I
+               DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+             ),
+           ),
+           b_modal_oui = BLOC(condition = "(MODAL == 'OUI')",
+# dans ce cas, y-a-t-il vraiment la possibilite d'une matrice interspectrale avec plusieurs termes
+             NUME_ORDRE_I    =SIMP(statut='o',typ='I',max='**'),
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+             GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                           into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+             DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+# dans le cas MODAL=OUI, GRANDEUR peut-il etre different de EFFO et doit il etre impose a EFFO   On devrait
+# pouvoir supprimer GRANDEUR et DERIVATION ici
+           ),
+
+         ),
+         REPONSE         =FACT(statut='f',
+           regles=( ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+           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' ),
+           b_defaut_freq   =BLOC(condition = "FREQ_MIN == NONE",
+              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 26/07/2011   AUTEUR ZENTNER I.ZENTNER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+
+def dyna_iss_vari_prod(self, FONC_SIGNAL,**args):
+   if FONC_SIGNAL !=None :
+       return tran_gene
+   else:
+      return  table_fonction
+   raise AsException("type de concept resultat non prevu")
+
+DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",
+                    op=OPS('Macro.dyna_iss_vari_ops.dyna_iss_vari_ops'),
+                    sd_prod=dyna_iss_vari_prod,
+                    fr="Calcul du spectre de réponse ou de la reponse temporelle " \
+                       "sismique incoherente par decomposition spectrale",
+                    reentrant='n',
+                    UIinfo={"groupes":("Outils métier",)},
+         regles=(UN_PARMI('FONC_SIGNAL','NB_FREQ'),),
+         FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster) ),
+         NB_FREQ       =SIMP(statut='f',typ='I' ),
+         NOM_CMP       =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+         PRECISION     =SIMP(statut='f',typ='R',defaut=0.999 ),
+         INTERF           =FACT(statut='o',
+              GROUP_NO_INTERF =SIMP(statut='o',typ=grno ,max='**'),
+              MODE_INTERF  =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")),
+         ),
+         MATR_COHE       =FACT(statut='o',
+              TYPE = SIMP(statut='o',typ='TXM' , into=("MITA_LUCO","ABRAHAMSON")   ),            
+              b_type_coh = BLOC(condition="TYPE=='MITA_LUCO' ",
+                 VITE_ONDE       =SIMP(statut='f',typ='R', defaut=600.),
+                 PARA_ALPHA     =SIMP(statut='f',typ='R',defaut=0.5),),
+         ),
+#        LIST_FREQ        =SIMP(statut='o',typ='liste' ),
+         UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=33),
+         UNITE_RESU_IMPE  = SIMP(statut='f',typ='I',defaut=32),
+         TYPE             = SIMP(statut='f',typ='TXM', into=("BINAIRE","ASCII"), defaut="ASCII"),
+#         NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE") , validators=NoRepeat(),max=3,defaut="DEPL" ),
+#
+         MATR_GENE         = FACT(statut='o',
+            MATR_MASS     = SIMP(statut='o',typ=(matr_asse_gene_r ) ),
+            MATR_RIGI     = SIMP(statut='o',typ=(matr_asse_gene_r,matr_asse_gene_c ) ),
+            MATR_AMOR     = SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c ) ),
+         ),
+#
+        INFO           =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)),
+#
+         b_type_trans = BLOC(condition="FONC_SIGNAL !=None",
+                        FREQ_MAX       =SIMP(statut='f',typ='R' ),
+                        FREQ_PAS       =SIMP(statut='f',typ='R' ),
+                        regles=( ENSEMBLE('FREQ_MAX','FREQ_PAS'),  )
+
+                        ),
+
+        b_type_spec = BLOC(condition="NB_FREQ != None",
+                       FREQ_INIT       =SIMP(statut='o',typ='R' ),
+                       FREQ_PAS     =SIMP(statut='o',typ='R' ),
+                       OPTION        = SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"),
+                       ),
+
+
+         )  ;
+#& MODIF COMMANDE  DATE 31/05/2011   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+def dyna_line_harm_prod(MATR_RIGI,**args):
+   if (AsType(MATR_RIGI) == matr_asse_depl_r) : return dyna_harmo
+   elif (AsType(MATR_RIGI) == matr_asse_depl_c) : return dyna_harmo
+   elif (AsType(MATR_RIGI) == matr_asse_pres_c) : return acou_harmo
+   elif (AsType(MATR_RIGI) == matr_asse_gene_r) : return harm_gene
+   elif (AsType(MATR_RIGI) == matr_asse_gene_c) : 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="Calcul de la réponse dynamique complexe d'un système à une excitation harmonique",
+                    reentrant='f',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(PRESENT_ABSENT('MATR_AMOR','AMOR_MODAL'),
+                 UN_PARMI('FREQ','LIST_FREQ'),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         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_MODAL      =FACT(statut='f', max=1,
+                    regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),        
+                AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+                LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+         ),
+         MATR_IMPE_PHI   =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : RESULTAT obligatoire",
+             RESULTAT      =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+         ),
+         EXCIT           =FACT(statut='o',max='**',
+           regles=(UN_PARMI('VECT_ASSE','CHARGE'),
+                   UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),
+                  ),
+           VECT_ASSE       =SIMP(statut='f',position='global',typ=(cham_no_sdaster,vect_asse_gene) ),
+           CHARGE          =SIMP(statut='f',position='global', typ=char_meca ),
+           FONC_MULT_C     =SIMP(statut='f',typ=(fonction_c,formule_c) ),
+           COEF_MULT_C     =SIMP(statut='f',typ='C' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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 ),
+         ),
+         b_modele_char =BLOC(condition = " CHARGE != None ",
+                       MODELE    =SIMP(statut='o',typ=modele_sdaster ),
+                       ),
+         b_modele_vect =BLOC(condition = " VECT_ASSE != None ",
+                       MODELE    =SIMP(statut='f',typ=modele_sdaster ),
+                       ),
+         EXCIT_RESU      =FACT(statut='f',max='**',
+           RESULTAT        =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+           COEF_MULT_C     =SIMP(statut='o',typ='C' ),
+         ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         b_matr_gene =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_gene_r,)",
+                           fr="Methode de resolution matrice generalisee",
+          SOLVEUR         =C_SOLVEUR('DYNA_LINE_HARM','GENE'),
+         ),
+
+         b_matr_phys =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_depl_r,matr_asse_pres_c,)",
+                           fr="Methode de resolution matrice sur ddl physique",
+          SOLVEUR         =C_SOLVEUR('DYNA_LINE_HARM','PHYS'),
+         ),
+#-------------------------------------------------------------------
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+)  ;
+# Rajouter test icompatibilite vect_asse et sensibilite
+# Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation
+#  presents dans le Fortran
+#& MODIF COMMANDE  DATE 31/05/2011   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
+                    fr="Calcul de la réponse dynamique transitoire à une excitation temporelle quelconque",
+                    reentrant='f',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+#         regles=(UN_PARMI('WILSON','DIFF_CENTRE','ADAPT'),),
+         #UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+         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 ),
+         
+         SCHEMA_TEMPS  =FACT(statut='d',
+                SCHEMA =SIMP(statut='f',typ='TXM',defaut="NEWMARK",
+                      into=("NEWMARK","WILSON","DIFF_CENTRE","ADAPT_ORDRE2")),
+                b_newmark       =BLOC(condition="SCHEMA=='NEWMARK'",
+                        BETA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+                        GAMMA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+                        ),
+                b_wilson        =BLOC(condition="SCHEMA=='WILSON'",
+                        THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
+                        ),
+         ),
+           
+         ETAT_INIT       =FACT(statut='f',
+           regles=(AU_MOINS_UN('RESULTAT', 'DEPL', 'VITE', 'ACCE'),
+                   PRESENT_ABSENT('RESULTAT', 'DEPL', 'VITE', 'ACCE'),),
+           RESULTAT     =SIMP(statut='f',typ=dyna_trans ),
+           b_dyna_trans    =BLOC(condition = "RESULTAT != None",
+             regles=(EXCLUS('NUME_ORDRE','INST_INIT' ),),
+             NUME_ORDRE       =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             b_inst_init     =BLOC(condition = "INST_INIT != None",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+           ),
+           DEPL         =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE         =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE         =SIMP(statut='f',typ=cham_no_sdaster),
+         ),
+         EXCIT           =FACT(statut='f',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_sdaster),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_mult_appui     =BLOC(condition = "MULT_APPUI == 'OUI'",
+           regles=(EXCLUS('NOEUD','GROUP_NO'),),
+           MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),),
+         EXCIT_RESU      =FACT(statut='f',max='**',
+           RESULTAT        =SIMP(statut='o',typ=dyna_trans ),
+           COEF_MULT       =SIMP(statut='o',typ='R' ),
+         ),
+         AMOR_MODAL      =FACT(statut='f',
+           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 ),
+         ),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('DYNA_LINE_TRAN'),
+#-------------------------------------------------------------------
+         INCREMENT       =FACT(statut='o',max='**',
+           regles=(UN_PARMI('LIST_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='o',typ='R' ),
+           ),
+           b_list_fonc     =BLOC(condition = "LIST_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_MINI         =SIMP(statut='f',typ='R' ),
+         ),
+ #        ARCHIVAGE       =FACT(statut='f',
+#           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
+#           LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster ),
+#           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+#           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE") ),
+#         ),
+         ARCHIVAGE       =FACT(statut='f',max=1,
+           regles         = (EXCLUS('PAS_ARCH','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                    PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                    PRECISION       =SIMP(statut='o',typ='R',),),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE") ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/09/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
+            fr="Calcul de l'évolution dynamique d'une structure dont le matériau ou la géométrie ont un comportement non linéaire",
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         MASS_DIAG       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+         EXCIT           =FACT(statut='f',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","SUIV","DIDI")),
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           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  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         EXCIT_GENE      =FACT(statut='f',max='**',
+           FONC_MULT       =SIMP(statut='f',typ=fonction_sdaster,max='**' ),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene,max='**' ),
+         ),
+         CONTACT         =SIMP(statut='f',typ=char_contact),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+              ),
+         AMOR_RAYL_RIGI = SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE"),),
+         AMOR_MODAL      =FACT(statut='f',
+           regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         PROJ_MODAL      =FACT(statut='f',max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           regles=(PRESENT_PRESENT('MASS_GENE','RIGI_GENE'),),
+           MASS_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           RIGI_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+           ACCE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+#-------------------------------------------------------------------
+         COMP_INCR       =C_COMP_INCR(),
+#-------------------------------------------------------------------
+         COMP_ELAS       =C_COMP_ELAS('DYNA_NON_LINE'),
+#-------------------------------------------------------------------
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+         ETAT_INIT       =FACT(statut='o',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                 #  EXCLUS('EVOL_NOLI','DEPL',),
+                 #  EXCLUS('EVOL_NOLI','VITE'),
+                 #  EXCLUS('EVOL_NOLI','ACCE'),
+                 #  EXCLUS('EVOL_NOLI','SIGM',),
+                 #  EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           STRX            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+         ETAT_INIT       =FACT(statut='f',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                 #  EXCLUS('EVOL_NOLI','DEPL',),
+                 #  EXCLUS('EVOL_NOLI','VITE'),
+                 #  EXCLUS('EVOL_NOLI','ACCE'),
+                 #  EXCLUS('EVOL_NOLI','SIGM',),
+                 #  EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+#-------------------------------------------------------------------
+         INCREMENT       =C_INCREMENT(),
+#-------------------------------------------------------------------
+         SCHEMA_TEMPS     =FACT(statut='o',
+            SCHEMA          =SIMP(statut='o',min=1,max=1,typ='TXM',
+            into=("DIFF_CENT","TCHAMWA","NEWMARK","HHT","THETA_METHODE","KRENK"),),
+            COEF_MASS_SHIFT =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+            b_tchamwa = BLOC(condition="SCHEMA=='TCHAMWA'",
+               PHI          =SIMP(statut='f',typ='R',defaut= 1.05),),
+
+            b_newmark = BLOC(condition="SCHEMA=='NEWMARK'",
+               BETA         =SIMP(statut='f',typ='R',defaut= 0.25),
+               GAMMA        =SIMP(statut='f',typ='R',defaut= 0.5),),
+
+            b_hht     = BLOC(condition="SCHEMA=='HHT'",
+               ALPHA        =SIMP(statut='f',typ='R',defaut= -0.3 ),
+               MODI_EQUI    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),),
+
+            b_theta   = BLOC(condition="SCHEMA=='THETA_METHODE'",
+               THETA         =SIMP(statut='f',typ='R',defaut= 1.,val_min=0.5,val_max=100. ),),
+
+            b_krenk   = BLOC(condition="SCHEMA=='KRENK'",
+               KAPPA         =SIMP(statut='f',typ='R',defaut= 1.0,val_min=1.0,val_max=100. ),),
+
+            b_explicit= BLOC(condition="SCHEMA=='TCHAMWA'or SCHEMA=='DIFF_CENT'",
+               STOP_CFL     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+               FORMULATION  =SIMP(statut='o',typ='TXM',into=("ACCELERATION",),),),
+
+            b_implicit= BLOC(condition="SCHEMA!='TCHAMWA'and SCHEMA!='DIFF_CENT'",
+               FORMULATION  =SIMP(statut='o',max=1,typ='TXM',into=("DEPLACEMENT","VITESSE","ACCELERATION"),),),
+         ),
+#-------------------------------------------------------------------
+         NEWTON          =C_NEWTON(),
+#-------------------------------------------------------------------
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+#-------------------------------------------------------------------
+         CONVERGENCE     =C_CONVERGENCE(),
+#-------------------------------------------------------------------
+         SOLVEUR         =C_SOLVEUR('DYNA_NON_LINE'),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#-------------------------------------------------------------------
+         SUIVI_DDL       =C_SUIVI_DDL(),
+#-------------------------------------------------------------------
+         AFFICHAGE       =C_AFFICHAGE(),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           RIGI_GEOM     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           bloc_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+              DDL_EXCLUS      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+                                    into=('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','LIAISON','DCX',
+                                          'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                          'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                          'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                          'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+           regles         = (EXCLUS('PAS_CALC','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_CALC       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+         ),
+         MODE_VIBR     =FACT(statut='f',min=1,max=1,
+           MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
+           NB_FREQ          =SIMP(statut='f',typ='I',max=1,defaut=3,
+                            fr="Nombre de fréquences propres à calculer"),
+           BANDE            =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Valeur des deux fréquences délimitant la bande de recherche",),
+           regles         = (EXCLUS('PAS_CALC','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_CALC       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+         ),
+#-------------------------------------------------------------------
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité",
+                               ang="List of sensitivity parameters"),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         b_info=BLOC(condition="(INFO==2)",
+               fr="filtre les messages émis dans le .mess selon le type de message demandé",
+               INFO_DBG = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               into=("CONTACT",
+                                     "MECA_NON_LINE",
+                                     "PILOTAGE",
+                                     "FACTORISATION",
+                                     "APPARIEMENT"),
+                             ),
+                    ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
+                     fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu_sdaster ),
+         EXCIT           =FACT(statut='o',
+           INTE_SPEC_GENE  =SIMP(statut='o',typ=table_fonction),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/08/2011   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
+                     fr="Calcul de la réponse dynamique transitoire d'un système amorti ou non en coordonées généralisées"
+                        +" par superposition modale ou par sous structuration",
+                     reentrant='f',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+      regles=(EXCLUS('AMOR_MODAL','MATR_AMOR'),),
+          SCHEMA_TEMPS  =FACT(statut='d',
+                SCHEMA  =SIMP(statut='f',typ='TXM',defaut="NEWMARK",
+  into=("NEWMARK","EULER","DEVOGE","ADAPT_ORDRE1","ADAPT_ORDRE2","ITMI")),
+                b_newmark     =BLOC(condition="SCHEMA=='NEWMARK'",
+                        BETA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+                        GAMMA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+                        ),                      
+                b_itmi          =BLOC(condition = "SCHEMA=='ITMI'",
+               regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+                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' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+         ),
+         ),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         AMOR_MODAL      =FACT(statut='f', max=1,
+                    regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),        
+                AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+                LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+         ),
+         COUPLAGE_EDYOS     =FACT(statut='f',max=1,         
+                             VITE_ROTA          = SIMP(statut='o',typ='R' ),
+                             PAS_TPS_EDYOS      = SIMP(statut='o',typ='R' ),
+         ),
+
+         PALIER_EDYOS      =FACT(statut='f',max='**',
+         regles=(PRESENT_ABSENT('UNITE','GROUP_NO'),
+                 PRESENT_ABSENT('UNITE','TYPE_EDYOS'),
+                 EXCLUS('GROUP_NO','NOEUD'),),
+                                     UNITE       = SIMP(statut='f',typ='I',),
+                                     GROUP_NO    = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                     NOEUD       = SIMP(statut='f',typ=no),
+                                     TYPE_EDYOS  = SIMP(statut='f',typ='TXM',
+                                     into=("PAPANL","PAFINL","PACONL","PAHYNL",),),
+         ),
+
+         ETAT_INIT       =FACT(statut='f',
+           regles=(EXCLUS('RESULTAT','DEPL'),
+                   EXCLUS('RESULTAT','VITE'),),
+           RESULTAT   =SIMP(statut='f',typ=tran_gene ),
+           b_resu     =BLOC(condition = "RESULTAT != None",
+           regles=(EXCLUS('NUME_ORDRE','INST_INIT' ),),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+           DEPL  =SIMP(statut='f',typ=vect_asse_gene ),
+           VITE  =SIMP(statut='f',typ=vect_asse_gene ),
+         ),
+         INCREMENT       =FACT(statut='o',max='**',
+           regles=(UN_PARMI('LIST_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           b_list_inst         =BLOC(condition = "LIST_INST != None",
+           regles=(EXCLUS('NUME_FIN','INST_FIN'),),
+               NUME_FIN       =SIMP(statut='f',typ='I' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),
+           ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='o',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 ),
+           PAS_MAXI         =SIMP(statut='f',typ='R' ),
+           PAS_MINI         =SIMP(statut='f',typ='R' ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',max=1,
+           regles         = (EXCLUS('PAS_ARCH','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                    PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                    PRECISION       =SIMP(statut='o',typ='R',),),
+         ),         
+
+         EXCIT           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   UN_PARMI('VECT_ASSE','NUME_ORDRE',),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),                   
+#                   PRESENT_ABSENT('NUME_ORDRE','VECT_ASSE','COEF_MULT'),
+                   EXCLUS('MULT_APPUI','CORR_STAT'),
+                   PRESENT_PRESENT('MULT_APPUI','ACCE'),),
+           VECT_ASSE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           b_mult_appui     =BLOC(condition = "MULT_APPUI == 'OUI'",
+           MODE_STAT       =SIMP(statut='f',typ=mode_meca ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+             regles=(EXCLUS('NOEUD','GROUP_NO'),),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           b_corr_stat     =BLOC(condition = "CORR_STAT == 'OUI'",
+           regles=(PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),),
+           MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_meca),),
+           D_FONC_DT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           D_FONC_DT2      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),),
+         CHOC            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD_1','GROUP_NO_1' ),
+                   EXCLUS('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('GROUP_MA','NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('MAILLE','NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           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=table_fonction),
+           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' ),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","COULOMB","COULOMB_STAT_DYNA") ),
+           b_coulomb       =BLOC(condition="FROTTEMENT=='COULOMB'",
+               COULOMB         =SIMP(statut='o',typ='R' ),),
+           b_coulomb_stat_dyna  =BLOC(condition="FROTTEMENT=='COULOMB_STAT_DYNA'",
+               COULOMB_STAT    =SIMP(statut='o',typ='R' ),
+               COULOMB_DYNA    =SIMP(statut='o',typ='R' ),),
+           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 ),
+               
+           ),
+         ),
+         PARA_LAME_FLUI =FACT(statut='d',
+           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. ),),
+         VERI_CHOC       =FACT(statut='f',
+           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',max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   EXCLUS('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=table_fonction),
+           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',max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('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',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_sdaster,nappe_sdaster,formule) ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+         RELA_EFFO_VITE  =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         IMPRESSION      =FACT(statut='f',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           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' ),
+         ),
+
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('DYNA_TRAN_MODAL'),
+#-------------------------------------------------------------------
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+ )  ;
+#& MODIF COMMANDE  DATE 26/09/2011   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+  
+# RESPONSABLE NISTOR I.NISTOR
+
+#choix de structure de donnees de sortie en fonction de BASE_CALCUL et TYPE_CALCUL
+def dyna_vibra_prod(self,BASE_CALCUL,TYPE_CALCUL,MATR_RIGI,**args):
+        if BASE_CALCUL == 'PHYS':  
+          if TYPE_CALCUL == 'TRAN': return dyna_trans
+          else: 
+              if (AsType(MATR_RIGI) == matr_asse_pres_c) : return acou_harmo   
+              else: return dyna_harmo
+        else: 
+          if TYPE_CALCUL == 'TRAN': return tran_gene
+          else: return harm_gene
+
+#from Macro.dyna_vibra_ops import dyna_vibra_ops
+
+DYNA_VIBRA=MACRO(nom="DYNA_VIBRA",
+                 op=OPS('Macro.dyna_vibra_ops.dyna_vibra_ops'),
+#                 op=dyna_vibra_ops,
+                 sd_prod=dyna_vibra_prod,
+                 reentrant='f',
+                 fr="Calcul dynamique",
+                 UIinfo={"groupes":("Resolution","Dynamique",)},
+        BASE_CALCUL     =SIMP(statut='o',typ='TXM',position='global',into=("PHYS","GENE") ),         
+        TYPE_CALCUL     =SIMP(statut='o',typ='TXM',position='global',into=("HARM","TRAN") ),
+
+#parametres de mise en donnees
+        b_donnees    =BLOC(condition = "TYPE_CALCUL=='HARM'or (TYPE_CALCUL=='TRAN' and BASE_CALCUL=='PHYS')",
+            MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+            CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+            CARA_ELEM       =SIMP(statut='f',typ=cara_elem ), 
+        ),
+        b_matr_tran_phys    =BLOC(condition = "TYPE_CALCUL=='TRAN' and BASE_CALCUL=='PHYS'",       
+            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),
+        ),
+        b_matr_tran_gene    =BLOC(condition = "TYPE_CALCUL=='TRAN' and BASE_CALCUL=='GENE'",       
+            MATR_MASS       =SIMP(statut='o',typ=matr_asse_gene_r),
+            MATR_RIGI       =SIMP(statut='o',typ=matr_asse_gene_r),
+            MATR_AMOR       =SIMP(statut='f',typ=matr_asse_gene_r),
+        ),    
+        b_reuse_harm =BLOC(condition = "reuse and TYPE_CALCUL == 'HARM'",fr="en mode concept reentrant : RESULTAT obligatoire",
+             RESULTAT      =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+            ),
+        b_matr_harm     =BLOC(condition="TYPE_CALCUL == 'HARM'",            
+            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) ),                
+            MATR_IMPE_PHI       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+        ),
+        
+        AMOR_MODAL      =FACT(statut='f',
+            AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+            LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           b_mode    =BLOC(condition = "BASE_CALCUL == 'PHYS' and TYPE_CALCUL == 'TRAN'",
+            MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+            NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+            ),            
+         ),
+#introduction parametres du calcul harmonique
+        b_param_harm      =BLOC(condition="TYPE_CALCUL == 'HARM'",
+           regles=(UN_PARMI('FREQ','LIST_FREQ'),
+                   EXCLUS('NOM_CHAM','TOUT_CHAM')),
+        FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+        LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+        NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+        TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),        
+        ),          
+
+#parametrage des calculs transitoires
+        b_tran = BLOC(condition = "TYPE_CALCUL == 'TRAN'", 
+#parametrage des schemas d'integration 
+        SCHEMA_TEMPS    =FACT(statut='d',
+        SCHEMA           =SIMP(statut='f',typ='TXM',defaut="NEWMARK",
+          into=("NEWMARK","WILSON","ADAPT_ORDRE2","DIFF_CENTRE","ADAPT_ORDRE1","DEVOGE","EULER","ITMI"),),
+          b_itmi         =BLOC(condition = "SCHEMA == 'ITMI'",
+regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+                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' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+            ),
+          b_newmark       =BLOC(condition = "SCHEMA == 'NEWMARK'",
+                BETA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+                GAMMA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+            ),
+          b_wilson        =BLOC(condition = "SCHEMA == 'WILSON'",
+                THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
+            ),
+          ),
+
+        INCREMENT       =FACT(statut='o',
+           regles=(UN_PARMI('LIST_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='o',typ='R' ),
+             ),
+           b_list     =BLOC(condition = "LIST_INST != None",
+               regles=(EXCLUS('INST_FIN','NUME_FIN'),),
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),
+             ),
+           b_veri_pas = BLOC(condition="BASE_CALCUL == 'GENE'",
+           VERI_PAS       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PAS_MAXI        =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.3333334 ),
+           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_MINI        =SIMP(statut='f',typ='R' ),
+         ),
+
+#declaration de l'etat initial
+       b_init_gene     =BLOC(condition="BASE_CALCUL == 'GENE'",
+        ETAT_INIT       =FACT(statut='f',
+               regles=(EXCLUS('RESULTAT','DEPL'), 
+                   EXCLUS('RESULTAT','VITE'),),
+             RESULTAT      =SIMP(statut='f',typ=tran_gene),
+                b_resu            =BLOC(condition = "RESULTAT != NONE",
+                   regles=( EXCLUS('NUME_ORDRE','INST_INIT' ),),
+             NUME_ORDRE =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+                        b_inst_init     =BLOC(condition = "INST_INIT != None",
+             CRITERE        =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION    =SIMP(statut='f',typ='R',defaut= 1.E-6,),
+                              ),
+                        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION     =SIMP(statut='o',typ='R',),
+                              ),
+                        ),
+                  ),
+             DEPL          =SIMP(statut='f',typ=vect_asse_gene),
+             VITE       =SIMP(statut='f',typ=vect_asse_gene),               
+              ),
+        ), 
+        b_init_phys     =BLOC(condition="BASE_CALCUL == 'PHYS'",
+        ETAT_INIT       =FACT(statut='f',
+              regles=(AU_MOINS_UN('RESULTAT', 'DEPL', 'VITE', 'ACCE'), 
+                   PRESENT_ABSENT('RESULTAT', 'DEPL', 'VITE', 'ACCE'),),
+             RESULTAT      =SIMP(statut='f',typ=dyna_trans),
+                b_resu            =BLOC(condition = "RESULTAT != NONE",
+                   regles=( EXCLUS('NUME_ORDRE','INST_INIT' ),),
+             NUME_ORDRE =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+                        b_inst_init     =BLOC(condition = "INST_INIT != None",
+             CRITERE        =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION    =SIMP(statut='f',typ='R',defaut= 1.E-6,),
+                              ),
+                        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION     =SIMP(statut='o',typ='R',),
+                              ),
+                        ),
+                  ),
+             DEPL          =SIMP(statut='f',typ=cham_no_sdaster),
+             VITE       =SIMP(statut='f',typ=cham_no_sdaster),  
+             ACCE       =SIMP(statut='f',typ=cham_no_sdaster),
+              ),
+        ),       
+
+#parametres d'archivage
+        ARCHIVAGE         =FACT(statut='f',
+            regles=( EXCLUS('LIST_INST','PAS_ARCH'),),
+                LIST_INST       = SIMP(statut='f',typ=(listr8_sdaster) ),
+                PAS_ARCH        =SIMP(statut='f',typ='I' ),
+                b_cham_exclu  =BLOC(condition="BASE_CALCUL == 'PHYS'",
+                        CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE") ),
+                ),
+        ),
+        ),
+        
+#definition du chargement
+        b_excit_harm    =BLOC(condition="TYPE_CALCUL == 'HARM'",
+          EXCIT           =FACT(statut='o',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_sdaster,vect_asse_gene) ),
+           CHARGE          =SIMP(statut='f', typ=char_meca ),
+           FONC_MULT_C     =SIMP(statut='f',typ=(fonction_c,formule_c) ),
+           COEF_MULT_C     =SIMP(statut='f',typ='C' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           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 ),
+           
+         ),
+          EXCIT_RESU       =FACT(statut='f',max='**',
+           RESULTAT     =SIMP(statut='o',typ=(dyna_harmo,harm_gene) ),
+           COEF_MULT_C     =SIMP(statut='o',typ='C' ),),
+
+         ),
+        b_excit_tran_mod=BLOC(condition="TYPE_CALCUL == 'TRAN' and BASE_CALCUL == 'GENE'",
+         EXCIT           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   UN_PARMI('VECT_ASSE','NUME_ORDRE',),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   EXCLUS('MULT_APPUI','CORR_STAT'),
+                   PRESENT_PRESENT('MULT_APPUI','ACCE'),
+                   ),
+           VECT_ASSE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           b_mult_appui     =BLOC(condition = "MULT_APPUI == 'OUI'",
+           regles=(EXCLUS('NOEUD','GROUP_NO'),),
+                  MODE_STAT       =SIMP(statut='f',typ=mode_meca ),           
+                  DIRECTION       =SIMP(statut='f',typ='R',max='**'),             
+                  NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                  GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           b_corr_stat     =BLOC(condition = "CORR_STAT == 'OUI'",
+           regles=(PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),),
+                  MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_meca),),
+                  D_FONC_DT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                  D_FONC_DT2      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+          ),
+         ),
+        ),
+        b_excit_line_tran =BLOC(condition="TYPE_CALCUL == 'TRAN' and BASE_CALCUL == 'PHYS'",
+         EXCIT           =FACT(statut='f',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_sdaster),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_mult_appui     =BLOC(condition = "MULT_APPUI == 'OUI'",
+            regles=(EXCLUS('NOEUD','GROUP_NO'),),
+                   MODE_STAT       =SIMP(statut='f',typ=mode_meca ),
+                   DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+                   NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                   GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+          ),
+        ),
+        EXCIT_RESU       =FACT(statut='f',
+           RESULTAT     =SIMP(statut='o',typ=dyna_trans ),
+           COEF_MULT       =SIMP(statut='o',typ='R' ),
+        ),       
+       ),
+        
+#definition des chocs
+        b_non_line_loca =BLOC(condition="TYPE_CALCUL == 'TRAN' and BASE_CALCUL=='GENE'",
+        CHOC            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD_1','GROUP_NO_1' ),
+                   EXCLUS('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('GROUP_MA','NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('MAILLE','NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           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=table_fonction),
+           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' ),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","COULOMB","COULOMB_STAT_DYNA") ),
+           b_coulomb       =BLOC(condition="FROTTEMENT=='COULOMB'",
+               COULOMB         =SIMP(statut='o',typ='R' ),),
+           b_coulomb_stat_dyna  =BLOC(condition="FROTTEMENT=='COULOMB_STAT_DYNA'",
+               COULOMB_STAT    =SIMP(statut='o',typ='R' ),
+               COULOMB_DYNA    =SIMP(statut='o',typ='R' ),),
+           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 ),
+            ),
+           ),
+        PARA_LAME_FLUI =FACT(statut='d',
+           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. ),),             
+        VERI_CHOC       =FACT(statut='f',
+           STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+
+#parametres flambage
+        FLAMBAGE        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   EXCLUS('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=table_fonction),
+           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' ),
+         ),
+
+#non-linearite si dispositif anti-sismique
+        ANTI_SISM       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('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. ),
+         ),
+#non-linearite effort-deplacement
+        RELA_EFFO_DEPL  =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+#non-linearite effort-vitesse         
+        RELA_EFFO_VITE  =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+        ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         b_solv_harm_gene =BLOC(condition = "BASE_CALCUL=='GENE' and TYPE_CALCUL=='HARM'",
+                           fr="Methode de resolution matrice generalisee",
+        SOLVEUR         =C_SOLVEUR('DYNA_LINE_HARM','GENE'),
+         ),
+         b_solv_harm_phys =BLOC(condition = "BASE_CALCUL=='PHYS' and TYPE_CALCUL=='HARM'",
+                           fr="Methode de resolution matrice sur ddl physique",
+        SOLVEUR         =C_SOLVEUR('DYNA_LINE_HARM','PHYS'),
+         ),
+         b_solv_line_tran      =BLOC(condition = "BASE_CALCUL=='PHYS' and TYPE_CALCUL=='TRAN'",
+        SOLVEUR         =C_SOLVEUR('DYNA_LINE_TRAN'),
+          ),
+         b_solv_tran_gene      =BLOC(condition = "BASE_CALCUL=='GENE' and TYPE_CALCUL=='TRAN'",
+        SOLVEUR         =C_SOLVEUR('DYNA_TRAN_MODAL'),
+          ), 
+#-------------------------------------------------------------------
+         b_sensibilite    =BLOC(condition = "TYPE_CALCUL=='HARM'or (TYPE_CALCUL=='TRAN' and BASE_CALCUL=='PHYS')",
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+        SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des parametres de sensibilite.",
+                               ang="List of sensitivity parameters",),
+         ),
+        TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+        INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+        b_impression = BLOC(condition = "BASE_CALCUL=='GENE' and TYPE_CALCUL=='TRAN'",
+        IMPRESSION      =FACT(statut='f',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           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' ),
+         ),
+         ),
+        );
+
+
+
+
+           
+
+
+                
+
+
+
+
+
+
+
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
+                   UIinfo={"groupes":("Impression","Utilitaires",)},
+                   fr="Engendre des tests pour la non régression du code (pour développeurs)",
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         FORMAT          =SIMP(statut='f',typ='TXM',into=("OBJET",) ),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE20.13"),
+         PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-10"),
+#============================================================================
+         b_aster     =BLOC( condition = "FORMAT==None",
+            CO              =SIMP(statut='o',typ=(cham_gd_sdaster,resultat_sdaster,table_sdaster),
+                                  validators=NoRepeat(),max='**'),
+            TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMM_ABS",into=("SOMME","SOMM_ABS","MAX","MIN") ),
+         ),
+#============================================================================
+         b_objet     =BLOC( condition = "FORMAT=='OBJET'",
+                            regles=(UN_PARMI('TOUT','CO'),),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            CO              =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'),
+            TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+# 
+#  ENVOI DES CHAMPS CINEMATIQUES VIA YACS POUR COUPLAGE IFS 
+#
+ENV_CINE_YACS=PROC(nom             = "ENV_CINE_YACS",
+                   op              = 111,
+                   UIinfo          = {"groupes":("Résultats et champs",)},
+                   fr              = "Envoi des champs de deplacement et vitesse via YACS pour Couplage de Code_Aster et Saturne",
+                   regles          = (EXCLUS('ETAT_INIT','RESULTAT',),),
+                   MATR_PROJECTION = SIMP(statut='o', typ=corresp_2_mailla,),
+                   VIS_A_VIS = FACT(statut='o', max='**',
+                                   GROUP_MA_1=SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                   GROUP_NO_2=SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+                   RESULTAT  = FACT(statut='f',
+                                   NUME_ORDRE=SIMP(statut='o', typ='I',              validators=NoRepeat()),
+                                   RESU      =SIMP(statut='o', typ=resultat_sdaster, validators=NoRepeat()),),
+                   ETAT_INIT = FACT(statut='f',
+                                    DEPL=SIMP(statut='f', typ=cham_no_sdaster,  validators=NoRepeat()),
+                                    VITE=SIMP(statut='f', typ=cham_no_sdaster,  validators=NoRepeat()),
+                                    ACCE=SIMP(statut='f', typ=cham_no_sdaster,  validators=NoRepeat()),),
+                   INST         = SIMP(statut='o',typ='R', ),
+                   PAS             = SIMP(statut='o',typ='R', ),
+                   NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                   INFO            = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+def exec_logiciel_prod(self, MAILLAGE, **args):
+   if MAILLAGE != None:
+      mcf = MAILLAGE[0]
+      self.type_sdprod(mcf['MAILLAGE'], maillage_sdaster)
+   return None
+
+EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",
+                      op=OPS('Macro.exec_logiciel_ops.exec_logiciel_ops'),
+                      sd_prod=exec_logiciel_prod,
+                      fr="Exécute un logiciel ou une commande système depuis Aster",
+                      UIinfo={"groupes":("Gestion du travail","Outils-métier",)},
+
+      regles = ( AU_MOINS_UN('LOGICIEL', 'MAILLAGE', 'SALOME'),
+                 EXCLUS('MACHINE_DISTANTE','MAILLAGE'),
+                 EXCLUS('MAILLAGE','SALOME'),
+                 ),
+
+      LOGICIEL = SIMP(statut='f', typ='TXM'),
+      ARGUMENT = SIMP(statut='f', max='**', typ='TXM'),
+
+
+      MACHINE_DISTANTE = FACT(statut='f',
+        SSH_ADRESSE  = SIMP(statut='o', typ='TXM', val_min=1, val_max=255,
+                           fr="Adresse IP ou nom de la machine sur laquelle le logiciel/script sera exécuté via SSH"),
+        SSH_LOGIN    = SIMP(statut='f', typ='TXM', val_min=1, val_max=255,
+                           fr="Nom d'utilisateur sur la machine distante"),
+        SSH_PORT     = SIMP(statut='f', typ='I', val_min=1, val_max=65535, defaut=22,
+                           fr="Port SSH de la machien distante"),
+      ),
+
+
+      MAILLAGE = FACT(statut='f',
+         FORMAT     = SIMP(statut='o', typ='TXM', into=("GMSH", "GIBI", "SALOME")),
+         UNITE_GEOM = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=16,
+                           fr="Unité logique définissant le fichier (fort.N) contenant les données géométriques (datg)"),
+         UNITE      = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=19,
+                           fr="Unité logique définissant le fichier (fort.N) produit par le mailleur"),
+         MAILLAGE   = SIMP(statut='o', typ=CO),
+      ),
+
+
+      SALOME = FACT(statut='f',
+           regles=(UN_PARMI('CHEMIN_SCRIPT', 'UNITE_SCRIPT'),
+                   PRESENT_PRESENT('NOM_PARA','VALE'),),
+         CHEMIN_SCRIPT     = SIMP(statut='f', typ='TXM',
+                               fr="Chemin du script Salome"),
+         UNITE_SCRIPT      = SIMP(statut='f', typ='I', val_min=80, val_max=99,
+                               fr="Unité logique du script Salome"),
+         SALOME_HOST       = SIMP(statut='f', typ='TXM', defaut='localhost',
+                               fr="Machine sur laquelle tourne Salome"),
+         SALOME_PORT       = SIMP(statut='f', typ='I', val_min=2800, val_max=2900, defaut=2810,
+                               fr="Port de l'instance Salome (2810 ou supérieur)"),
+         SALOME_RUNAPPLI   = SIMP(statut='f', typ='TXM',
+                               fr="Chemin vers le script de lancement runAppli de Salome"),
+         FICHIERS_ENTREE   = SIMP(statut='f', typ='TXM', validators=NoRepeat(),max='**',
+                               fr="Liste des fichiers d'entrée du script Salome"),
+         FICHIERS_SORTIE   = SIMP(statut='f', typ='TXM', validators=NoRepeat(),max='**',
+                               fr="Liste des fichiers générés par le script Salome"),
+         NOM_PARA          = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               fr="Liste des noms des paramètres à modifier dans le script Salome"),
+         VALE              = SIMP(statut='f',typ='TXM',max='**',
+                               fr="Valeur des paramètres à) modifier dans le script Salome"),
+      ),
+
+      CODE_RETOUR_MAXI = SIMP(statut='f', typ='I', defaut=0, val_min=-1,
+                              fr="Valeur maximale du code retour toléré (-1 pour l'ignorer)"),
+
+      INFO     = SIMP(statut='f', typ='I', defaut=2, into=(1,2),),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+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,
+               reentrant='n',fr="Extraire séléctivement des modes des structures de données modales",
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         FILTRE_MODE     =FACT(statut='o',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',validators=NoRepeat(),max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',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",
+             regles=(AU_MOINS_UN('SEUIL','SEUIL_X','SEUIL_Y','SEUIL_Z'),),
+             SEUIL           =SIMP(statut='f',typ='R'),
+             SEUIL_X         =SIMP(statut='f',typ='R'),
+             SEUIL_Y         =SIMP(statut='f',typ='R'),
+             SEUIL_Z         =SIMP(statut='f',typ='R'),
+           ),    
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         IMPRESSION      =FACT(statut='f',
+           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/10/2011   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+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) == evol_varc    : return evol_varc
+  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) == 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,reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+            fr="Extraire des champs au sein d'une SD Résultat",
+         regles=(CONCEPT_SENSIBLE('SEPARE'),
+                 #REUSE_SENSIBLE(),
+                 DERIVABLE('RESULTAT'),),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
+                                               mode_acou,evol_ther,evol_noli,evol_varc,
+                                               mult_elas,fourier_elas,fourier_ther ) ),
+
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),
+
+         ARCHIVAGE       =FACT(statut='o',
+           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',validators=NoRepeat(),max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                               ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def extr_table_prod(TYPE_RESU,**args):
+  defs = globals()
+  typ = TYPE_RESU.lower()
+  if defs.get(typ) is not None:
+     return defs[typ]
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_TABLE=OPER(nom="EXTR_TABLE",
+                op=173,
+                sd_prod=extr_table_prod,
+                reentrant='n',
+                UIinfo={"groupes":("Résultats et champs","Tables")},
+                fr="Extraire d'une table des concepts Code_Aster",
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',
+                               into=('MATR_ASSE_GENE_R', 'MATR_ELEM_DEPL_R',
+                                     'VECT_ELEM_DEPL_R',
+                                     'CHAM_GD_SDASTER', 'CHAM_NO_SDASTER',
+                                     'CARTE_SDASTER', 'CHAM_ELEM',
+                                     'MODE_MECA',
+                                     'FONCTION_SDASTER', 'FONCTION_C', 'NAPPE_SDASTER',
+                                     'ENTIER',),),
+
+         TABLE           =SIMP(statut='o',typ=(table_sdaster,table_container)),
+
+         NOM_PARA        =SIMP(statut='o',typ='TXM'),
+
+         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 ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+def factoriser_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")
+
+FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
+               fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires"+
+                  "ou construire une matrice de préconditionnement pour une résolution par gradient conjugué",
+               reentrant='f', UIinfo={"groupes":("Résolution",)},
+         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) ),
+
+         # mots clés pour solveur LDLT et MULT_FRONT et MUMPS:
+         STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NPREC           =SIMP(statut='f',typ='I',defaut=8),
+
+         # mots clés pour solveur LDLT :
+         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,),
+
+         # mots clés pour solveur MUMPS :
+         TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut='AUTO',into=('NONSYM','SYMGEN','SYMDEF','AUTO')),
+         PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+         PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+         ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         OUT_OF_CORE  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         LIBERE_MEMOIRE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+
+         # mots clés pour solveur GCPC et PETSc :
+         PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+         b_ldlt_inc     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+           NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+           REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+         ),
+         b_ldlt_sp      =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+           REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=30, ),
+         ),
+         b_jacobi_sor   =BLOC(condition = "PRE_COND == 'JACOBI' or PRE_COND == 'SOR'",
+                                                                         fr="Paramètres des préconditionneurs JACOBI et SOR",
+           RENUM               =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","RCMK") ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE",
+            UIinfo={"groupes":("Gestion du travail",)},
+#
+# FIN est appelé prématurément en cas d'exception ("SIGUSR1", ArretCPUError,
+# NonConvergenceError..., erreurs <S> ou erreurs <F> récupérées).
+# En cas d'ArretCPUError, on limite au maximum le travail à faire dans FIN.
+# Pour cela, on force certains mots-clés dans Execution/E_JDC.py.
+# 
+         FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+                               typ='TXM',defaut="NON",into=("OUI","NON",) ), 
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",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",) ),
+         UNITE           =SIMP(statut='f',typ='I',defaut=6),  
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
+                    reentrant='n',fr="Crée une fonction constante paramétrée par l'abscisse curviligne",
+            UIinfo={"groupes":("Fonctions",)},
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def formule_prod(self, VALE, VALE_C, **args):
+    if VALE != None:
+        return formule
+    elif VALE_C != None:
+        return formule_c
+
+FORMULE=FORM(nom="FORMULE",
+             op_init=ops.build_formule,
+             op=-5,
+             sd_prod=formule_prod,
+             UIinfo={"groupes":("Fonctions",)},
+             fr="Définit une formule réelle ou complexe à partir de son expression mathématique",
+    regles = (UN_PARMI('VALE', 'VALE_C',),),
+    VALE     = SIMP(statut='f', typ='TXM'),
+    VALE_C   = SIMP(statut='f', typ='TXM'),
+    NOM_PARA = SIMP(statut='o', typ='TXM', max='**'),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
+                    fr="Génération de la fonction temporelle à partir d une matrice interspectrale",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonctions",)},
+         INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+         b_interpol_oui    =BLOC(condition = "INTERPOL == 'OUI' ",fr="Parametres cas interpolation autorisee",
+           DUREE_TIRAGE    =SIMP(statut='f',typ='R' ),
+           FREQ_INIT       =SIMP(statut='f',typ='R' ),
+           FREQ_FIN        =SIMP(statut='f',typ='R' ),
+             ),
+         NB_POIN         =SIMP(statut='f',typ='I'),
+         NB_TIRAGE       =SIMP(statut='f',typ='I',defaut= 1 ),
+         INIT_ALEA       =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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+def gene_matr_alea_prod(MATR_MOYEN,**args ):
+  if (AsType(MATR_MOYEN) == matr_asse_gene_r )  : return matr_asse_gene_r
+  if (AsType(MATR_MOYEN) == macr_elem_dyna) : return macr_elem_dyna
+  raise AsException("type de concept resultat non prevu")
+
+GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op=  27,
+#sd_prod=matr_asse_gene_r,
+sd_prod=gene_matr_alea_prod,
+               fr="Générer une réalisation d'une matrice aléatoire réelle sym. déf. positive ou d'un macro élément dynamique",
+               reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+   MATR_MOYEN   = SIMP(statut='o', typ=(matr_asse_gene_r,macr_elem_dyna)),
+
+#    cas matrice generalisee 
+   b_matr =BLOC( condition = "AsType(MATR_MOYEN) in (matr_asse_gene_r,)",
+           COEF_VAR     = SIMP(statut='f', typ='R', defaut=0.1, val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice a generer" ),
+           ),
+#    cas macr_elem_dyna 
+   b_macr =BLOC( condition = "AsType(MATR_MOYEN) in (macr_elem_dyna,)",
+           fr="cas macr_elem_dyna (sous-structuratio)",
+           COEF_VAR_RIGI     = SIMP(statut='f', typ='R', defaut=0.1, val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice de raideur" ),
+           COEF_VAR_MASS     = SIMP(statut='f', typ='R', defaut=0., val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice de masse" ),
+           COEF_VAR_AMOR     = SIMP(statut='f', typ='R', defaut=0., val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice d'amortissement" ),),
+
+   INIT_ALEA    =SIMP(statut='f',typ='I'),
+) ;
+   
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+
+GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
+                     op_init=ops.build_gene_vari_alea,
+                     op=EMPTY_OPS,
+                     sd_prod=reel,
+                     reentrant='n',
+                     fr="Générer une réalisation d'une variable aléatoire réelle " \
+                        "de loi de probabilité donnée (Gamma ou Exponentielle)",
+                     UIinfo={"groupes":("Fonctions",)},
+   TYPE       = SIMP(statut='f', typ='TXM', into=("EXP_TRONQUEE", "EXPONENTIELLE", "GAMMA"), defaut="GAMMA"),
+   b_gamma    =BLOC(condition = "TYPE == 'GAMMA' ",fr="Parametres loi gamma",
+           VALE_MOY   = SIMP(statut='f', typ='R', defaut=1.),
+           BORNE_INF  = SIMP(statut='f', typ='R', defaut=0.),
+           COEF_VAR   = SIMP(statut='f', typ='R', defaut=0.1),
+             ),
+   b_expo    =BLOC(condition = "TYPE == 'EXPONENTIELLE' ",fr="Parametres loi exponentielle",
+           VALE_MOY   = SIMP(statut='f', typ='R', defaut=0.),
+           BORNE_INF  = SIMP(statut='f', typ='R', defaut=-1.),
+             ),
+   b_expo_tronq    =BLOC(condition = "TYPE == 'EXP_TRONQUEE' ",fr="Parametres loi exponentielle tronquee",
+           VALE_MOY   = SIMP(statut='f', typ='R', defaut=0.),
+           BORNE_INF  = SIMP(statut='f', typ='R', defaut=-1.),
+           BORNE_SUP  = SIMP(statut='f', typ='R', defaut=1.),
+             ),
+   INIT_ALEA       =SIMP(statut='f',typ='I'),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+IMPR_CO=PROC(nom="IMPR_CO",op=17,
+            UIinfo={"groupes":("Impression","Utilitaires",)},
+             fr="Imprimer tous les objets JEVEUX qui constituent un concept utilisateur existant (pour les développeurs)",
+         regles=(UN_PARMI('CONCEPT','CHAINE','TOUT' ),),
+
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         NIVEAU          =SIMP(statut='f',typ='I',defaut=2,into=(-1,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") ),
+         CONCEPT    =FACT(statut='f',max='**',
+             regles=(DERIVABLE('NOM'),),
+             NOM         =SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
+             SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter",max='**'),),        
+         CHAINE          =SIMP(statut='f',typ='TXM'),
+         POSITION        =SIMP(statut='f',typ='I',defaut=1),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE Mohamed TORKHANI
+
+
+IMPR_DIAG_CAMPBELL=MACRO(nom="IMPR_DIAG_CAMPBELL",
+                         op=OPS('Macro.impr_diag_campbell_ops.impr_diag_campbell_ops'),
+                         fr="Tracé du Diagramme de Campbell",
+                         UIinfo={"groupes":("Impression","Outils-métier",)},
+            MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+            MODES           =SIMP(statut='o',typ=table_container),
+            NFREQ_CAMP      =SIMP(statut='o',typ='I' ),
+            TYP_PREC        =SIMP(statut='f',typ='I',defaut= 1, into=(1,2) ),
+            TYP_TRI         =SIMP(statut='f',typ='I',defaut= 2, into=(0,1,2) ),
+            UNIT_FLE        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_TOR        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_LON        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_TOT        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_INT        =SIMP(statut='o',typ='I' ,val_min=1),
+            L_S             =SIMP(statut='f',typ='R', defaut= 1., max='**'),
+);
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",
+                    op=OPS('Macro.impr_fonction_ops.impr_fonction_ops'),
+                    sd_prod=None,
+                    fr="Imprime le contenu d'objets de type fonction ou liste de " \
+                       "réels dans un fichier destiné à un traceur de courbe",
+                    UIinfo={"groupes":("Impression","Fonctions",)},
+         FORMAT          =SIMP(statut='o',typ='TXM',position='global',defaut='TABLEAU',
+                               into=("TABLEAU","AGRAF","XMGRACE",),),
+         b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
+                        fr="Mots-clés propres à XMGRACE",
+           PILOTE          =SIMP(statut='f',typ='TXM',defaut='',
+                                 into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+                            fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+           UNITE           =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                                 fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+         ),
+         b_agraf = BLOC(condition = "FORMAT == 'AGRAF'",
+                        fr="Mots-clés propres à AGRAF",
+           UNITE           =SIMP(statut='o',typ='I',defaut=25,
+                                 fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+           UNITE_DIGR      =SIMP(statut='o',typ='I',defaut=26,
+                                 fr="Unité logique définissant le fichier dans lequel on écrit les directives Agraf"),
+         ),
+         # unite pour TABLEAU dans le bloc de mise en forme spécifique
+
+         COURBE          =FACT(statut='o',max='**',fr="Définition de la fonction à tracer",
+           regles=(UN_PARMI('FONCTION','LIST_RESU','FONC_X','ABSCISSE'),),
+           FONCTION        =SIMP(statut='f',typ=(fonction_sdaster, formule, fonction_c, nappe_sdaster),
+                                 fr="Fonction réelle ou complexe", ),
+           LIST_RESU       =SIMP(statut='f',typ=listr8_sdaster,
+                                 fr="Liste des ordonnees d'une fonction réelle définie par deux listes", ),
+           FONC_X          =SIMP(statut='f',typ=(fonction_sdaster,formule),
+                                 fr="Fonction abscisses d'une fonction paramétrique",),
+           ABSCISSE        =SIMP(statut='f',typ='R',max='**',
+                                 fr="Valeurs des abscisses", ),
+           b_fonction      =BLOC(condition = "FONCTION != None",
+             LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+           ),
+           b_fonction_c  =BLOC(condition = "AsType(FONCTION) in (fonction_c, formule_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_sdaster ),
+           ),
+           b_fonc_x        =BLOC(condition = "FONC_X != None",
+             FONC_Y          =SIMP(statut='o',typ=(fonction_sdaster,formule),fr="Fonction ordonnées d une fonction paramétrique" ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+           ),
+           b_vale_resu     =BLOC(condition = "ABSCISSE != None",
+             ORDONNEE      =SIMP(statut='o',typ='R',max='**',
+                                 fr="Valeurs des ordonnées"),
+           ),
+
+           # mots-clés utilisant uniquement aux formats autres que TABLEAU
+           # mais ce serait trop pénible de devoir les supprimer quand on change de format
+           # donc on ne les met pas dans un bloc
+           # "pseudo" bloc mise en forme :
+               LEGENDE         =SIMP(statut='f',typ='TXM',
+                                    fr="Légende associée à la fonction" ),
+               STYLE           =SIMP(statut='f',typ='I',val_min=0,
+                                    fr="Style de la ligne représentant la fonction",),
+               COULEUR         =SIMP(statut='f',typ='I',val_min=0,
+                                    fr="Couleur associée à la fonction",),
+               MARQUEUR        =SIMP(statut='f',typ='I',val_min=0,
+                                    fr="Type du marqueur associé à la fonction",),
+               FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut=0,
+                                    fr="Fréquence d impression du marqueur associé à la fonction", ),
+           # fin bloc mise en forme
+
+           TRI             =SIMP(statut='f',typ='TXM',defaut="N",
+                                 fr="Choix du tri effectué sur les abscisses ou sur les ordonnées",
+                                 into=("N","X","Y","XY","YX") ),
+         ),
+         # Mise en page du tableau ou du graphique
+         b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+                          fr="Mots-clés propres au format Tableau",
+           UNITE           =SIMP(statut='o',typ='I',defaut=8,
+                                 fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+           TITRE           =SIMP(statut='f',typ='TXM',
+                                 fr="Titre associé au graphique" ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',
+                                 fr="Sous-titre du graphique" ),
+           SEPARATEUR      =SIMP(statut='f',typ='TXM',defaut=' ',
+                                 fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+           COMMENTAIRE     =SIMP(statut='f',typ='TXM',defaut='#',
+                                 fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+           COMM_PARA       =SIMP(statut='f',typ='TXM',defaut='',
+                                 fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+           DEBUT_LIGNE     =SIMP(statut='f',typ='TXM',defaut='',
+                                 fr="Caractère de debut de ligne"),
+           FIN_LIGNE       =SIMP(statut='f',typ='TXM',defaut='\n',
+                                 fr="Caractère de fin de ligne"),
+         ),
+         b_graphique = BLOC(condition = "FORMAT != 'TABLEAU'",
+                        fr="Mise en page du graphique",
+           TITRE           =SIMP(statut='f',typ='TXM',
+                                 fr="Titre associé au graphique" ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',
+                                 fr="Sous-titre du graphique" ),
+           BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 fr="Intervalles de variation des abscisses"),
+           BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 fr="Intervalles de variation des ordonnées"),
+           ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                                 fr="Type d'échelle pour les abscisses" ),
+           ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                                 fr="Type d'échelle pour les ordonnées" ),
+           GRILLE_X        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                                 fr="Pas du quadrillage vertical" ),
+           GRILLE_Y        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                                 fr="Pas du quadrillage horizontal" ),
+           LEGENDE_X       =SIMP(statut='f',typ='TXM',
+                                 fr="Légende associée à l'axe des abscisses" ),
+           LEGENDE_Y       =SIMP(statut='f',typ='TXM',
+                                 fr="Légende associée à l'axe des ordonnées" ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
+            fr="Imprimer le résultat d'un calcul dynamique en variables généralisées au format RESULTAT",
+            UIinfo={"groupes":("Impression","Dynamique",)},
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+         GENE            =FACT(statut='o',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)),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           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='**',into=C_NOM_CHAM_INTO(),),
+           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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
+            UIinfo={"groupes":("Impression","Utilitaires",)},
+                 fr="Imprimer le contenu des objets créés par JEVEUX (pour développeur)",
+         ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
+                               into=("DISQUE","MEMOIRE","REPERTOIRE",    
+                                     "OBJET","ATTRIBUT","SYSTEME","ENREGISTREMENT") ),
+         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') ),  
+            NOMATR          =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',   
+                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$MARQ',
+                                      '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
+                                      '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
+                                      '$$TLEC','$$TECR','$$IADM','$$ACCE','$$USADI') ),
+         ),
+         b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
+            CLASSE          =SIMP(statut='f',typ='TXM',into=('G','V',' '),defaut=' '),  
+         ),
+         b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V',' '),defaut=' '),  
+         ),
+         b_enregist   =BLOC(condition = "(ENTITE=='ENREGISTREMENT')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V'),defaut='G'),  
+            NUMERO          =SIMP(statut='o',typ='I',val_min=1),  
+            INFO            =SIMP(statut='f',typ='I',into=(1,2),defaut=1),  
+         ),
+         IMPRESSION      =FACT(statut='f',
+           NOM             =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+         COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
+)  ;
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR CORUS M.CORUS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
+IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
+                    UIinfo={"groupes":("Impression","Outils-métier",)},
+         fr="Impression d'une structure de données MACR_ELEM_DYNA au format IDEAS MISS3D PLEXUS ou CADYRO",
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                               into=("MISS_3D","IDEAS") ),
+
+         b_ideas         =BLOC(condition = "FORMAT == 'IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+           VERSION          =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),             
+
+#         b_plexus         =BLOC(condition = "FORMAT == 'PLEXUS'",
+#           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+#           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+#         ),                      
+
+         b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
+           regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+           UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R'  ,max='**'),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           GROUP_MA_INTERF =SIMP(statut='o',typ=grma ,max='**'),
+           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='**'),
+           GROUP_MA_CONTROL=SIMP(statut='f',typ=grma,max='**'),
+           FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5",into=("1PE12.5","1PE16.9") ),
+           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 14/02/2011   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# RECUPERATION DES MAILLAGES IFS VENANT DE SATURNE VIA YACS
+#
+IMPR_MAIL_YACS=PROC(nom="IMPR_MAIL_YACS",op=43,
+            UIinfo={"groupes":("Maillage",)},
+               fr="Lecture d'un maillage via YACS lors du Couplage de Code_Aster et Saturne",
+         UNITE_MAILLAGE = SIMP(statut='f',typ='I',defaut=30),
+         TYPE_MAILLAGE = SIMP(statut='o',typ='TXM',into=("SOMMET","MILIEU")),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
+            UIinfo={"groupes":("Impression","Outils-métier",)},
+         fr="Impression des données d'entrée pour une étude sismique avec MISS3D",
+         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',max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+         ),
+         EXCIT_SOL       =FACT(statut='f',max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","FORC",),),
+         ),
+         SOURCE_SOL      =FACT(statut='f',max='**',
+           POINT           =SIMP(statut='o',typ='R',min=3,max=3),
+           DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","FORC",),),
+         ),
+         SOURCE_FLUIDE   =FACT(statut='f',max='**',
+           POINT           =SIMP(statut='o',typ='R',min=3,max=3),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","FORC",),),
+         ),
+         DIRE_ONDE       =SIMP(statut='f',typ='R',min=3,max=3),
+         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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FOURNIER I.FOURNIER
+#
+IMPR_OAR =MACRO(nom="IMPR_OAR",
+                op=OPS('Macro.impr_oar_ops.impr_oar_ops'),
+                sd_prod=None,
+                fr="Impression au format OAR",
+                UIinfo={"groupes":("Impression","Outils-métier",)},
+   TYPE_CALC = SIMP(statut='o', typ='TXM',into=('COMPOSANT', 'MEF', 'TUYAUTERIE')),
+   b_composant =BLOC(condition = "TYPE_CALC == 'COMPOSANT' ",
+      regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
+      DIAMETRE = SIMP(statut='o', typ='R'),
+      ORIGINE  = SIMP(statut='o', typ='TXM', defaut='INTERNE', into=('INTERNE', 'EXTERNE')),
+      COEF_U   = SIMP(statut='f', typ='R',   defaut=1.0),
+      ANGLE_C  = SIMP(statut='o', typ='R',   defaut=0.0),
+      REVET    = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
+      RESU_MECA = FACT(statut='f', max='**',
+         NUM_CHAR  = SIMP(statut='o', typ='I'),
+         TYPE      = SIMP(statut='o', typ='TXM', defaut='FX', into=('FX', 'FY', 'FZ', 'MX', 'MY', 'MZ', 'PRE')),
+         TABLE     = SIMP(statut='o', typ=table_sdaster),
+         TABLE_S   = SIMP(statut='f', typ=table_sdaster)),
+      RESU_THER = FACT(statut='f', max='**',
+         NUM_TRAN  = SIMP(statut='o', typ='I'),
+         TABLE_T   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_TEMP= SIMP(statut='o', typ=table_sdaster),
+         TABLE_S   = SIMP(statut='f', typ=table_sdaster),
+         TABLE_ST  = SIMP(statut='f', typ=table_sdaster)),
+         ),
+   b_mef = BLOC(condition = "TYPE_CALC == 'MEF' ",
+      regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
+      DIAMETRE = SIMP(statut='o', typ='R'),
+      ORIGINE  = SIMP(statut='o', typ='TXM', defaut='INTERNE', into=('INTERNE', 'EXTERNE')),
+      COEF_U   = SIMP(statut='f', typ='R',   defaut=1.0),
+      RESU_MECA = FACT(statut='f', max='**',
+         AZI       = SIMP(statut='o', typ='R'),
+         TABLE_T   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_F   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_P   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_CA  = SIMP(statut='o', typ=table_sdaster)),
+      RESU_THER=FACT(statut='f', max='**',
+         AZI       = SIMP(statut='o', typ='R'),
+         NUM_CHAR  = SIMP(statut='o', typ='I'),
+         TABLE_T   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_TI  = SIMP(statut='o', typ=table_sdaster)),
+      ),
+   b_tuyauterie = BLOC(condition = "TYPE_CALC == 'TUYAUTERIE' ",
+      RESU_MECA = FACT(statut='o', max='**',
+         NUM_CHAR  = SIMP(statut='o', typ='I'),
+         TABLE     = SIMP(statut='o', typ=table_sdaster),
+         MAILLAGE  = SIMP(statut='o', typ=maillage_sdaster)),
+         ),
+   UNITE = SIMP(statut='f',typ='I',defaut=38),
+   AJOUT = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
+   );
+#& MODIF COMMANDE  DATE 30/05/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
+            UIinfo={"groupes":("Impression","Résultats et champs",)},
+               fr="Imprimer un maillage et/ou les résultats d'un calcul (différents formats)",
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+
+         FORMAT          =SIMP(statut='f',typ='TXM',position='global',defaut="RESULTAT",
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
+
+         b_format_resultat  =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT",
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         ),
+
+         b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS",
+           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+         ),
+
+         b_format_aster  =BLOC(condition="FORMAT=='ASTER'",fr="unité logique d'impression au format ASTER",
+           UNITE           =SIMP(statut='f',typ='I',defaut=26),
+         ),
+
+         b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="unité logique d'impression et version CASTEM",
+           UNITE           =SIMP(statut='f',typ='I',defaut=37),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+
+         b_format_ensight  =BLOC(condition="FORMAT=='ENSIGHT'",fr="unité logique d'impression au format ENSIGHT",
+           UNITE           =SIMP(statut='f',typ='I',defaut=31),
+         ),
+
+         b_format_med  =BLOC(condition="FORMAT=='MED'",fr="unité logique d'impression au format MED",
+           UNITE           =SIMP(statut='f',typ='I',defaut=80),
+         ),
+
+         b_format_gmsh  =BLOC(condition="FORMAT=='GMSH'",fr="unité logique d'impression et version GMSH",
+           UNITE           =SIMP(statut='f',typ='I',defaut=37),
+           VERSION         =SIMP(statut='f',typ='R',defaut=1.2,into=(1.0,1.2)),
+         ),
+
+         regles=(AU_MOINS_UN('CONCEPT','RESU',),),
+
+         b_restreint  =BLOC(condition="FORMAT=='MED'",fr="Seulement pour les fichiers MED",
+            RESTREINT   =FACT(statut='f', max=1,
+            fr="Pour réduire une ou plusieurs sd_resultat sur un ensemble de mailles",
+            regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+            TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+            GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+            ),
+         ),
+
+         CONCEPT          =FACT(statut='f',max='**',
+           fr='Pour imprimer les champs de "données" à des fins de visualisation (controle des affectations).',
+           # (valide pour les format RESULTAT et MED)
+           regles=(UN_PARMI('CHAM_MATER','CARA_ELEM','CHARGE'),),
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+           CHARGE          =SIMP(statut='f',typ=char_meca),
+         ),
+
+         RESU            =FACT(statut='f',max='**',
+
+           regles=(AU_MOINS_UN('CHAM_GD','RESULTAT','MAILLAGE',),
+                   EXCLUS('CHAM_GD','RESULTAT'),),
+           MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster,squelette)),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd_sdaster),
+           RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+
+           b_info_med  =BLOC(condition="FORMAT=='MED'",
+             INFO_MAILLAGE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+
+           b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             regles=(DERIVABLE('RESULTAT'),),
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+
+           b_partie        =BLOC(condition="""(AsType(RESULTAT) in (dyna_harmo, acou_harmo) or
+                          AsType(CHAM_GD) != carte_sdaster) and FORMAT in ('CASTEM', 'GMSH', 'MED')""",
+             PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           ),
+           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',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             ANGL            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+
+             b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                     PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                     PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+           ),
+###
+           b_parametres    =BLOC(condition="""(RESULTAT != None)and(FORMAT == 'RESULTAT')""",
+             regles=(EXCLUS('TOUT_PARA','NOM_PARA'),),
+             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 == 'CASTEM')or(FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'ENSIGHT')or(FORMAT == 'MED'))""",
+                                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_med=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and(FORMAT == 'MED')""",
+                                fr="renommage du champ",
+             regles=(EXCLUS('NOM_CHAM_MED','NOM_RESU_MED'),),
+             NOM_CHAM_MED    =SIMP(statut='f',typ='TXM',validators=(LongStr(1,64),NoRepeat()),max='**'),
+             NOM_RESU_MED    =SIMP(statut='f',typ='TXM'),
+           ),
+###
+           b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
+                                fr="sélection des composantes et des entités toplogiques",
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             TYPE_CHAM       =SIMP(statut='f',typ='TXM',defaut="SCALAIRE",
+                                   into=("VECT_2D","VECT_3D","SCALAIRE","TENS_2D","TENS_3D"),),
+             b_scal          =BLOC(condition = "TYPE_CHAM=='SCALAIRE'",
+               NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),),
+             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_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 ),),
+           ),
+###
+           b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
+           ((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'MED'))""",
+                                fr="sélection des entités topologiques",
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),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='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 10/10/2011   AUTEUR BOITEAU O.BOITEAU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOITEAU
+
+IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un contour donné",
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r,matr_asse_gene_r,
+                                               matr_asse_depl_c,matr_asse_gene_c) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r,matr_asse_gene_r) ),
+         MATR_C          =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r,matr_asse_gene_r) ),
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE","MODE_COMPLEXE"),
+                               fr="Type d analyse" ),
+         b_dynamique  =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",fr="Recherche 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_complexe  =BLOC(condition = "TYPE_RESU == 'MODE_COMPLEXE'",fr="Recherche du nombre de fréquences propres",
+           FREQ_TYPE_CONTOUR     =SIMP(statut='f',typ='TXM',defaut="CERCLE",into=("CERCLE","CERCLE") ),
+           FREQ_RAYON_CONTOUR    =SIMP(statut='o',typ='R',val_min=1.E-2 ),
+           FREQ_CENTRE_CONTOUR   =SIMP(statut='f',typ='C',defaut= 0.0+0.0j),
+         ),
+         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" ),
+         ),         
+         COMPTAGE         =FACT(statut='d',
+           METHODE            =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("STURM","APM","AUTO")),                
+             SEUIL_FREQ       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),             
+             PREC_SHIFT       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+             NMAX_ITER_SHIFT  =SIMP(statut='f',typ='I',defaut= 5,val_min=0),
+             NBPOINT_CONTOUR  =SIMP(statut='f',typ='I',defaut= 40,val_min=10,val_max=1000),
+             NMAX_ITER_CONTOUR=SIMP(statut='f',typ='I',defaut= 3, val_min=1,val_max=5),
+         ),               
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('IMPR_STURM'),
+#-------------------------------------------------------------------
+
+
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+IMPR_TABLE=MACRO(nom="IMPR_TABLE",
+                 op=OPS('Macro.impr_table_ops.impr_table_ops'),
+                 sd_prod=None,
+                 UIinfo={"groupes":("Impression","Tables",)},
+                 fr="Impression du contenu d'une table dans un fichier",
+           regles=(DERIVABLE("TABLE"),),
+   TABLE          =SIMP(statut='o',typ=table_sdaster),
+   SENSIBILITE    =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                         fr="Liste des paramètres de sensibilité.",
+                         ang="List of sensitivity parameters"),
+   FORMAT         =SIMP(statut='f',typ='TXM',defaut="TABLEAU",
+                         into=("TABLEAU","ASTER","TABLEAU_CROISE","AGRAF","XMGRACE",),),
+   b_pilote       =BLOC(condition = "FORMAT == 'XMGRACE'",
+                        fr="Mots-clés propres à XMGRACE",
+      PILOTE         =SIMP(statut='f',typ='TXM',defaut='',
+                           into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+                      fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+      UNITE          =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                           fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+   ),
+   b_unite        =BLOC(condition = "FORMAT != 'XMGRACE'",
+      UNITE          =SIMP(statut='f',typ='I',defaut=8,
+                           fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+   ),
+   FILTRE         =FACT(statut='f',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',max='**'),
+         VALE_I         =SIMP(statut='f',typ='I',max='**'),
+         VALE_C         =SIMP(statut='f',typ='C',max='**'),
+         VALE_K         =SIMP(statut='f',typ='TXM',max='**'),
+      ),
+      b_crit         =BLOC(condition = "CRIT_COMP in ('EQ','NE')",
+         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',
+      NOM_PARA       =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+      ORDRE          =SIMP(statut='f',typ='TXM',defaut="CROISSANT", # max='**',
+                           into=("CROISSANT","DECROISSANT") ),
+   ),
+   PAGINATION     =SIMP(statut='f',typ='TXM',max='**'),
+   FORMAT_R       =SIMP(statut='f',typ='TXM',defaut="E12.5"),
+   FORMAT_C       =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
+                              into=("MODULE_PHASE","REEL_IMAG") ),
+   NOM_PARA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+   IMPR_FONCTION  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+   # Mise en page du tableau ou du graphique
+   b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+                    fr="Mots-clés propres au format Tableau",
+      SEPARATEUR      =SIMP(statut='f',typ='TXM',defaut=' ',
+                            fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+      COMMENTAIRE     =SIMP(statut='f',typ='TXM',defaut='#',
+                            fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+      COMM_PARA       =SIMP(statut='f',typ='TXM',defaut='',
+                            fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+      DEBUT_LIGNE     =SIMP(statut='f',typ='TXM',defaut='',
+                            fr="Caractère de debut de ligne"),
+      FIN_LIGNE       =SIMP(statut='f',typ='TXM',defaut='\n',
+                            fr="Caractère de fin de ligne"),
+    ),
+
+   # mise en forme pour les formats qui passent par Graph
+   b_forme         =BLOC(condition = "FORMAT == 'XMGRACE'",
+                         fr="Données de mise en forme du graphique",
+      # pour la courbe
+      LEGENDE         =SIMP(statut='f',typ='TXM',
+                            fr="Légende associée à la fonction" ),
+      STYLE           =SIMP(statut='f',typ='I',val_min=0,
+                            fr="Style de la ligne représentant la fonction",),
+      COULEUR         =SIMP(statut='f',typ='I',val_min=0,
+                            fr="Couleur associée à la fonction",),
+      MARQUEUR        =SIMP(statut='f',typ='I',val_min=0,
+                            fr="Type du marqueur associé à la fonction",),
+      FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut=0,
+                            fr="Fréquence d impression du marqueur associé à la fonction", ),
+      # format du graphique
+      BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Intervalles de variation des abscisses"),
+      BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Intervalles de variation des ordonnées"),
+      ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                            fr="Type d'échelle pour les abscisses" ),
+      ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                            fr="Type d'échelle pour les ordonnées" ),
+      GRILLE_X        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                            fr="Pas du quadrillage vertical" ),
+      GRILLE_Y        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                            fr="Pas du quadrillage horizontal" ),
+      LEGENDE_X       =SIMP(statut='f',typ='TXM',
+                            fr="Légende associée à l'axe des abscisses" ),
+      LEGENDE_Y       =SIMP(statut='f',typ='TXM',
+                            fr="Légende associée à l'axe des ordonnées" ),
+   ),
+
+   TITRE          =SIMP(statut='f',typ='TXM',max='**'),
+   INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+INCLUDE=MACRO(nom="INCLUDE",
+              op=OPS("ops.build_include"),
+              UIinfo={"groupes":("Gestion du travail",)},
+              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 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+INCLUDE_MATERIAU = MACRO(nom="INCLUDE_MATERIAU",
+                         op=OPS("Macro.include_materiau_ops.include_materiau_ops"),
+                         sd_prod=mater_sdaster,
+            UIinfo={"groupes":("Modélisation", "Gestion du travail", )},
+            fr="Récupérer les caractéristiques d'un matériau dans le Catalogue Materiaux d'Aster ",
+
+         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',
+           COMPOR       = SIMP(statut='o', typ='TXM', max='**',),
+           TEMP_EVAL    = SIMP(statut='o', typ='R',),
+         ),
+         UNITE_LONGUEUR = SIMP(statut='f', typ='TXM', into=("M", "MM"), defaut="M",),
+         INFO           = SIMP(statut='f', typ='I', defaut= 1, into=(1, 2),),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
+                    fr="Récupère différentes informations propres à l'exécution en cours",
+                    reentrant='n',
+                    UIinfo={"groupes":("Gestion du travail",)},
+
+         regles=(),
+         LISTE_INFO     =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=3,
+                              into=("CPU_RESTANT","UNITE_LIBRE","ETAT_UNITE"),),
+         b_etat_unite   =BLOC(condition = "'ETAT_UNITE' in LISTE_INFO", 
+            regles=(UN_PARMI('UNITE','FICHIER'),),
+            UNITE          =SIMP(statut='f',typ='I',val_min=1,val_max=99,max=1,
+                                 fr="Unité logique dont on veut obtenir l'état",),
+            FICHIER        =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),
+                                 fr="Nom du fichier dont on veut obtenir l'état",),
+         ),
+         TITRE          =SIMP(statut='f',typ='TXM',max='**'),
+         INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def info_fonction_prod(self,ECART_TYPE,RMS,NOCI_SEISME,MAX,NORME, **args):
+   if (RMS         != None): return table_sdaster
+   if (MAX         != None): return table_sdaster
+   if (NOCI_SEISME != None): return table_sdaster
+   if (ECART_TYPE  != None): return table_sdaster
+   if (NORME       != None): return table_sdaster
+   raise AsException("type de concept resultat non prevu")
+
+INFO_FONCTION=MACRO(nom="INFO_FONCTION",
+                    op=OPS('Macro.info_fonction_ops.info_fonction_ops'),
+                    sd_prod=info_fonction_prod,
+                    fr="Opérations mathématiques sur des concepts de type fonction, " \
+                       "fonction_c ou nappe",
+                    reentrant='n',
+                    UIinfo={"groupes":("Fonctions",)},
+         regles=(UN_PARMI('MAX','RMS','NOCI_SEISME','NORME','ECART_TYPE',),),
+         RMS             =FACT(statut='f',fr="Valeur RMS d'une fonction",max='**',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+           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",) ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R'),),
+         ),
+         NOCI_SEISME     =FACT(statut='f',
+           regles=(UN_PARMI('FONCTION','SPEC_OSCI',),),
+           FONCTION        =SIMP(statut='f',typ=fonction_sdaster ),
+           SPEC_OSCI       =SIMP(statut='f',typ=nappe_sdaster ),
+           b_option_f      =BLOC(condition="""FONCTION != None""",
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",validators=NoRepeat(),max='**',
+                                   into=("INTE_ARIAS","POUV_DEST","INTE_SPEC","VITE_ABSO_CUMU",
+                                         "DUREE_PHAS_FORT","MAXI","ACCE_SUR_VITE","TOUT",), ),
+             b_amor_red          =BLOC(condition="""au_moins_un(OPTION, ("TOUT", "INTE_SPEC")) """,
+                AMOR_REDUIT     =SIMP(statut='o',typ='R'),),
+             b_pesanteur         =BLOC(condition="""au_moins_un(OPTION, ("TOUT", "INTE_ARIAS", "POUV_DEST", "DUREE_PHAS_FORT")) """,
+                PESANTEUR       =SIMP(statut='o',typ='R'),),
+           ),
+           b_option_n      =BLOC(condition="""SPEC_OSCI !=None""",
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="INTE_SPEC",into=("INTE_SPEC",), ),
+             NATURE          =SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE") ),
+             AMOR_REDUIT     =SIMP(statut='o',typ='R'), ),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 4.E-1 ),
+           FREQ_FIN        =SIMP(statut='f',typ='R',defaut= 10.E+0 ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           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)",
+                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R'),),
+           ),
+         ),
+         MAX             =FACT(statut='f',fr="Extrémas locaux d'une fonction",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           INTERVALLE      =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="définition des bornes des intervalles sous forme de couples (xi_i1,xs_i1,xi_i2,xs_i2)"),
+         ),
+         NORME           =FACT(statut='f',fr="Norme L2 d'une fonction",
+            FONCTION      =SIMP(statut='o', typ=nappe_sdaster),
+         ),
+         ECART_TYPE      =FACT(statut='f',fr="Ecart-type d'une fonction",
+            METHODE       =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+            FONCTION      =SIMP(statut='o',typ=fonction_sdaster),
+            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",) ),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R'),),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+INFO_RESU=PROC(nom="INFO_RESU",op=40,
+               UIinfo={"groupes":("Impression","Utilitaires",)},
+               fr="Imprimer tous les champs présents dans une structure de données résultat",
+               RESULTAT=SIMP(statut='f',typ=resultat_sdaster),
+               UNITE=SIMP(statut='f',typ='I',defaut=6),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET
+INIT_COMPO=PROC(nom="INIT_COMPO",
+                op=  117,
+                UIinfo={"groupes":("Gestion du travail",)},
+                fr="Initialiser adresse component YACS",
+           COMPO           =SIMP(statut='o',typ='I',),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
+            UIinfo={"groupes":("Post-traitements",)},
+                  fr="Définition d'une courbe dans un maillage 2D",reentrant='n',
+
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
+
+         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,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+         DEFI_SEGMENT    =FACT(statut='f',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,),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',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,),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,),
+           RAYON           =SIMP(statut='f',typ='R',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,),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           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',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+
+         NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
+            UIinfo={"groupes":("Post-traitements",)},
+                  fr="Définir un chemin de type segment de droite dans un maillage 3D",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         DEFI_SEGMENT    =FACT(statut='o',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,),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def lire_champ_prod(TYPE_CHAM=None,**args):
+# Remarque : si cette liste évolue, il faut penser à mettre à jour son
+#            homologue dans macr_adap_mail
+  if TYPE_CHAM[0:5] == "NOEU_" : return cham_no_sdaster
+  if TYPE_CHAM[0:2] == "EL"    : return cham_elem
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+                UIinfo={"groupes":("Lecture","Résultats et champs",)},
+                fr="Lire un champ dans un fichier au format MED et le stocker dans un concept.",
+                reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster,),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 81,),  
+         b_format =BLOC(condition = "FORMAT == 'MED'",
+         regles=( UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
+                  PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),
+                  EXCLUS('NUME_ORDRE','INST'),
+                  EXCLUS('NUME_PT','INST'),),
+            NOM_MED      =SIMP(statut='o',typ='TXM', ),
+            NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+            NOM_CMP      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+            NOM_CMP_MED  =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+            PROL_ZERO    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+               fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+            NUME_PT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',),
+            NUME_ORDRE   =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',
+                           fr="Numero d ordre du champ à lire",ang="Rank of the field to be read" ),
+            INST         =SIMP(statut='f',typ='R',fr="Instant associé",ang="Instant" ),
+#
+            b_precision     =BLOC(condition="(INST != None)",
+                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+                  fr="Critère de précision sur le choix de l'instant associé",
+                  ang="Accuracy criterium over instant choice" ),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,
+                      fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R',
+                      fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),),),
+#
+            NOM_MAIL_MED =SIMP(statut='f',typ='TXM',),
+                  ),
+#        Remarque : si cette liste évolue, il faut penser à mettre à jour son
+#                   homologue dans macr_adap_mail
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
+         b_modele =BLOC(condition = "TYPE_CHAM!=None and TYPE_CHAM[0:2] == 'EL'",
+            MODELE      =SIMP(statut='o',typ=modele_sdaster, ),
+                  ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+def lire_fonction_prod(self,TYPE,**args):
+  if   (TYPE == 'FONCTION')  : return fonction_sdaster
+  elif (TYPE == 'FONCTION_C'): return fonction_c
+  elif (TYPE == 'NAPPE'   )  : return nappe_sdaster
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",
+                    op=OPS('Macro.lire_fonction_ops.lire_fonction_ops'),
+                    sd_prod=lire_fonction_prod,
+                    fr="Lit les valeurs réelles dans un fichier de données représentant une " \
+                       "fonction et crée un concept de type fonction ou nappe",
+                    reentrant='n',
+                    UIinfo={"groupes":("Lecture","Fonctions",)},
+         FORMAT          =SIMP(statut='f',typ='TXM',into=("LIBRE",),defaut="LIBRE"  ),
+         TYPE            =SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C","NAPPE"),defaut="FONCTION"  ),
+         SEPAR           =SIMP(statut='f',typ='TXM',into=("None",",",";","/"),defaut="None" ),
+         INDIC_PARA      =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,1]),
+         b_fonction      =BLOC(condition = "TYPE=='FONCTION' ",
+           INDIC_RESU      =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,2]), ),
+         b_fonction_c    =BLOC(condition = "TYPE=='FONCTION_C' ",
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="REEL_IMAG",into=("REEL_IMAG","MODULE_PHASE") ),
+           b_reel_imag     =BLOC(condition = "FORMAT_C=='REEL_IMAG' ",
+             INDIC_REEL      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,2]),
+             INDIC_IMAG      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,3]), ) ,
+           b_modu_phas     =BLOC(condition = "FORMAT_C=='MODULE_PHASE' ",
+             INDIC_MODU      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,2]),
+             INDIC_PHAS      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,3]), ), ),
+         b_nappe         =BLOC(condition = "TYPE=='NAPPE' ",
+           NOM_PARA_FONC   =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+           INDIC_ABSCISSE  =SIMP(statut='o',typ='I',min=2,max=2,),
+           INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG"),
+                                 fr="Type d'interpolation pour les abscisses et les ordonnées de la fonction"),
+           PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           DEFI_FONCTION   =FACT(statut='f',max='**',
+             INDIC_RESU      =SIMP(statut='o',typ='I',min=2,max=2,),),  ),
+         UNITE           =SIMP(statut='o',typ='I' ),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG"),
+                               fr="Type d'interpolation pour les abscisses et les ordonnées de la " \
+                                  "fonction ou bien pour le paramètre de la nappe."),
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
+                    fr="Création d'un vecteur assemblé à partir d'une base modale",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs","Outils-métier",)},           
+         BASE            =SIMP(statut='o',typ=mode_meca),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         FREQ_EXTR       =SIMP(statut='o',typ='R',max=1),
+         NOM_CMP         =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE"),defaut="DEPL"),
+         NUME_CHAR       =SIMP(statut='f',typ='I' ),
+         ISSF            =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),         
+         NOM_RESU_FORC   =SIMP(statut='f',typ='TXM' ),         
+)  ;
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
+                    fr="Création d une matrice assemblée à partir de base modale",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs","Outils-métier",)},           
+         BASE            =SIMP(statut='o',typ=mode_meca ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         FREQ_EXTR       =SIMP(statut='o',typ='R',max=1),
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+         ISSF            =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         TYPE            =SIMP(statut='f',typ='TXM',defaut="ASCII",into=("BINAIRE","ASCII") ),         
+         SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+)  ;
+
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+
+
+LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",
+                     op=OPS('Macro.lire_inte_spec_ops.lire_inte_spec_ops'),
+                     sd_prod=table_fonction,
+                     fr="Lecture sur un fichier externe de fonctions complexes pour " \
+                        "créer une matrice interspectrale",
+                     reentrant='n',
+            UIinfo={"groupes":("Lecture","Fonctions",)},
+         UNITE           =SIMP(statut='o',typ='I' ),
+         FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="FREQ",
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="DSP" ),
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
+                   fr="Crée un maillage par lecture d'un fichier au format Aster ou Med",
+                   ang="Readings of a mesh file",
+                   reentrant='n',
+            UIinfo={"groupes":("Lecture","Maillage",)},
+#
+         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=0,
+               TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#
+         VERI_MAIL       =FACT(statut='d',
+               VERIF         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),  
+               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,3) ),
+#
+            RENOMME = FACT(statut='f', max='**',
+                                 fr="Renommer un nom de groupe MED",
+                 NOM_MED     = SIMP(statut='o', typ=grma,
+                                    fr="Nom du groupe dans le fichier MED"),
+                 NOM         = SIMP(statut='o', typ=grma, validators=LongStr(1,8),
+                                    fr="Nom du groupe dans le maillage ASTER"),
+            ),
+         ),
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+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="Restituer sur base physique une réponse harmonique ou transitoire issue de MISS3D",
+                  reentrant='n',
+            UIinfo={"groupes":("Lecture","Outils-métier",)},
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 27 ),
+         NOM             =SIMP(statut='f',typ='TXM' ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE POTAPOV S.POTAPOV
+
+LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
+                 fr="Lire le fichier de résultats au format IDEAS produit par le logiciel EUROPLEXUS",
+                 reentrant='n',
+            UIinfo={"groupes":("Lecture","Outils-métier",)},
+         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_sdaster ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         b_prec_crit     =BLOC(condition = "LIST_INST != None or INST != None",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/10/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+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
+  if TYPE_RESU == "MODE_MECA" :  return mode_meca
+  if TYPE_RESU == "MODE_MECA_C" : return mode_meca_c
+  if TYPE_RESU == "EVOL_VARC" :  return evol_varc
+  raise AsException("type de concept resultat non prevu")
+
+# pour éviter d'écrire 3 fois cette liste :
+def l_nom_cham_pas_elga(): return (
+     "ACCE",
+     "ACCE_ABSOLU",
+     "CRIT_ELNO",
+     "DERA_ELNO",
+     "DERA_NOEU",
+     "DEDE_ELNO",
+     "DEDE_NOEU",
+     "DEGE_ELNO",
+     "DEGE_NOEU",
+     "DEPL",
+     "DEPL_ABSOLU",
+     "DESI_ELNO",
+     "DESI_NOEU",
+     "DETE_ELNO",
+     "DETE_NOEU",
+     "DURT_ELNO",
+     "DURT_NOEU",
+     "ECIN_ELEM",
+     "EFCA_ELNO",
+     "EFGE_ELNO",
+     "EFCA_NOEU",
+     "EFGE_NOEU",
+     "ENDO_ELNO",
+     "ENDO_NOEU",
+     "ENEL_ELNO",
+     "ENEL_NOEU",
+     "EPTQ_ELNO",
+     "EPGR_ELNO",
+     "EPME_ELNO",
+     "EPMG_ELNO",
+     "EPMG_NOEU",
+     "EPOT_ELEM",
+     "EPSA_ELNO",
+     "EPSA_NOEU",
+     "EPSG_ELNO",
+     "EPSG_NOEU",
+     "EPSI_ELNO",
+     "EPTU_ELNO",
+     "EPSI_NOEU",
+     "EPSP_ELNO",
+     "EPSP_NOEU",
+     "EPMQ_ELNO",
+     "EPEQ_ELNO",
+     "SIEQ_ELNO",
+     "EPMQ_NOEU",
+     "EPEQ_NOEU",
+     "SIEQ_NOEU",
+     "ERRE_ELEM_NOZ1",
+     "ERRE_ELEM_NOZ2",
+     "ERRE_ELNO_ELGA",
+     "ERRE_NOEU_ELGA",
+     "ERTH_ELEM_TEMP",
+     "ERTH_ELNO_ELEM",
+     "ETOT_ELEM",
+     "ETOT_ELNO",
+     "FLUX_ELNO",
+     "FLUX_NOEU",
+     "FORC_NODA",
+     "FSUR_2D",
+     "FSUR_3D",
+     "FVOL_2D",
+     "FVOL_3D",
+     "GRAD_NOEU_THETA",
+     "HYDR_ELNO",
+     "HYDR_NOEU",
+     "INTE_ELNO",
+     "INTE_NOEU",
+     "IRRA",
+     "META_ELNO",
+     "META_NOEU",
+     "PMPB_ELNO",
+     "PMPB_NOEU",
+     "PRES",
+     "PRME_ELNO",
+     "PRAC_ELNO",
+     "PRAC_NOEU",
+     "REAC_NODA",
+     "SIEF_ELNO",
+     "SIEF_ELNO",
+     "SIEF_NOEU",
+     "SIEF_NOEU",
+     "SITQ_ELNO",
+     "SICA_ELNO",
+     "SIGM_ELNO",
+     "SITU_ELNO",
+     "SICA_NOEU",
+     "SIGM_NOEU",
+     "SIZ1_NOEU",
+     "SIZ2_NOEU",
+     "SIPO_ELNO",
+     "SIPO_NOEU",
+     "TEMP",
+     "THETA",
+     "VALE_CONT",
+     "VARI_ELNO",
+     "VACO_ELNO",
+     "VARI_ELNO",
+     "VATU_ELNO",
+     "VARI_NOEU",
+     "VARI_NOEU",
+     "VITE",
+     "VITE_ABSOLU",
+     "VITE_VENT",
+                           )
+
+LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
+            UIinfo={"groupes":("Lecture","Resultats et champs",)},
+               fr="Lire dans un fichier, soit format IDEAS, soit au format ENSIGHT soit au format MED,"
+                 +" des champs et les stocker dans une SD résultat",
+
+
+# 0) mots cles generaux :
+#----------------------
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA",
+                                                          "MODE_MECA_C","DYNA_TRANS","DYNA_HARMO","HARM_GENE",
+                                                          "EVOL_CHAR","EVOL_VARC") ),
+
+         FORMAT          =SIMP(statut='o',typ='TXM',into=("IDEAS","IDEAS_DS58","ENSIGHT","MED") ),
+
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+
+         regles=(UN_PARMI('MAILLAGE','MODELE'),),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         COMP_INCR       =C_COMP_INCR(),
+         NB_VARI         =SIMP(statut='f',typ='I' ),
+
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater,),
+
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem,),
+
+          b_evol_elas  = BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+          EXCIT           =FACT(statut='f',max='**',
+            CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),),
+           ),
+
+          b_evol_ther  = BLOC(condition="TYPE_RESU=='EVOL_THER'",
+          EXCIT           =FACT(statut='f',max='**',
+            CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+           ),
+
+          b_evol_noli  = BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+          EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           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  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+         ),
+
+
+# 1) blocs selon le format choisi :
+#---------------------------------
+
+# 1-1 ideas dataset-58 :
+# ----------------------
+         b_dataset_58 = BLOC(condition="FORMAT=='IDEAS_DS58'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         ),
+         b_dataset_58_b = BLOC(condition="(FORMAT=='IDEAS_DS58') and ((TYPE_RESU=='DYNA_TRANS') or\
+                                        (TYPE_RESU=='DYNA_HARMO') or (TYPE_RESU=='HARM_GENE'))",
+           NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU","SIEF_NOEU",),max='**' ),
+           REDEFI_ORIENT=FACT(statut='f',max='**',
+                              regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
+                              CODE_DIR =SIMP(statut='f',typ='I',into=(1,2,3,) ),
+                              DIRECTION=SIMP(statut='f',typ='R',min=3,max=3,),
+                              NOEUD    =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),),
+         ),
+
+# 1-2 ideas  :
+# ---------
+         b_ideas         =BLOC(condition="FORMAT=='IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+#           TEST            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
+           PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+             fr="Affecte des valeurs nulles la ou le champ n'est pas defini"),
+           FORMAT_IDEAS    =FACT(statut='f',max='**',
+             regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()),
+             NUME_DATASET    =SIMP(statut='f',typ='I',into=(55,57,2414) ),
+             RECORD_3        =SIMP(statut='f',typ='I',max=10),
+             RECORD_6        =SIMP(statut='f',typ='I',max=10),
+             RECORD_9        =SIMP(statut='f',typ='I',max=10),
+             POSI_ORDRE      =SIMP(statut='o',typ='I',min=2,max=2),
+             POSI_NUME_MODE  =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_MASS_GENE  =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_AMOR_GENE  =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_INST       =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_FREQ       =SIMP(statut='f',typ='I',min=2,max=2),
+             NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),),
+         ),
+
+# 1-3 ensight :
+# -------------
+         b_ensight       =BLOC(condition="FORMAT=='ENSIGHT'",
+           NOM_FICHIER     =SIMP(statut='f',typ='TXM'),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
+         ),
+
+# 1-4 med :
+# ---------
+         b_med           =BLOC(condition = "FORMAT == 'MED'",fr="Nom du champ dans le fichier MED",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
+           FORMAT_MED      =FACT(statut='o',max='**',
+             regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),UN_PARMI('NOM_CHAM_MED','NOM_RESU'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),
+             NOM_CHAM_MED    =SIMP(statut='f',typ='TXM',               fr="Nom du champ dans le fichier MED.",  ),
+             NOM_RESU        =SIMP(statut='f',typ='TXM',               fr="Prefixe du nom de champ dans le fichier MED.",  ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans ASTER.", ),
+             NOM_CMP_MED     =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans MED.", ),
+           ),
+           PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",),
+            fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+         ),
+
+# 2) blocs selon le type du resultat :
+#---------------------------------
+         b_mode_meca     =BLOC(condition="(TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C')",
+           # Ces mots cles sont stockes dans l'objet .REFD des mode_meca
+           # Ces mots cles sont aussi utilises  pour imposer la numerotation des cham_no de DEPL_R
+           MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,max=1),
+           MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,max=1),
+         ),
+
+
+# 3) autres blocs :
+#---------------------------------
+         b_extrac        =BLOC(condition="1",fr="acces a un champ dans la structure de donnees resultat",
+           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',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+LIRE_TABLE=MACRO(nom="LIRE_TABLE",
+                 op=OPS('Macro.lire_table_ops.lire_table_ops'),
+                 sd_prod=table_sdaster,
+                 fr="Lecture d'un fichier contenant une table",
+                 UIinfo={"groupes":("Lecture","Tables",)},
+         UNITE           = SIMP(statut='o', typ='I' ),
+         FORMAT          = SIMP(statut='f', typ='TXM', into=("ASTER", "LIBRE"), defaut="ASTER"),
+         NUME_TABLE      = SIMP(statut='f', typ='I', defaut=1),
+         SEPARATEUR      = SIMP(statut='f', typ='TXM', defaut=' '),
+         RENOMME_PARA    = SIMP(statut='f', typ='TXM', into=("UNIQUE",),),
+         TITRE           = SIMP(statut='f', typ='TXM', max='**'),
+         INFO            = SIMP(statut='f', typ='I', into=(1, 2), ),
+         )  ;
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+
+MAC_MODES=OPER(nom="MAC_MODES",op=  141,sd_prod=table_sdaster,
+               fr="Critere orthogonalite de modes propres",
+               reentrant='n',
+               UIinfo={"groupes":("Résolution","Dynamique",)},
+               regles=(PRESENT_PRESENT('IERI','MATR_ASSE'),),
+         BASE_1     =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
+         BASE_2     =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
+         MATR_ASSE  =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+         IERI       =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2011   AUTEUR NICOLAS G.NICOLAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+
+
+def macr_adap_mail_prod(self, MAJ_CHAM, ADAPTATION, **args):
+#
+# 0. Typage des structures produites
+#
+  #print args
+  if ( args.has_key('MAILLAGE_NP1') ) :
+    if ( args['MAILLAGE_NP1'] is not None ) :
+      maillage_np1=args['MAILLAGE_NP1']
+      self.type_sdprod(maillage_np1, maillage_sdaster)
+#
+  if ( args.has_key('MAILLAGE_NP1_ANNEXE') ) :
+    if ( args['MAILLAGE_NP1_ANNEXE'] is not None ) :
+      maillage_np1_annexe=args['MAILLAGE_NP1_ANNEXE']
+      self.type_sdprod(maillage_np1_annexe, maillage_sdaster)
+#
+  if MAJ_CHAM == None:return None
+# Remarque : la liste qui suit doit etre conforme à son homologue de LIRE_CHAMP
+  for ch in MAJ_CHAM:
+    t=ch['TYPE_CHAM']
+    if t[0:5] == "NOEU_":self.type_sdprod(ch['CHAM_MAJ'],cham_no_sdaster)
+    if t[0:2] == "EL":   self.type_sdprod(ch['CHAM_MAJ'],cham_elem)
+  return None
+
+
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",
+                     op=OPS('Macro.macr_adap_mail_ops.macr_adap_mail_ops'),
+                     sd_prod=macr_adap_mail_prod,
+                     fr="Adapter un maillage avec le logiciel HOMARD.",
+                     ang="Mesh adaptation with the HOMARD software.",
+                     UIinfo={"groupes":("Maillage",)},
+#
+# 1. Le niveau d'information
+#
+  INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4)),
+#
+# 2. Version de HOMARD
+#
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V10_2",
+                        into=("V10_2", "V10_N", "V10_N_PERSO"),
+                        fr="Version de HOMARD",
+                        ang="HOMARD release"),
+#
+# 3. Langue des messages produits par HOMARD
+#
+  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",
+                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                fr="Langue des messages produits par HOMARD.",
+                ang="Language for the HOMARD messages." ),
+#
+# 4. Les maillages
+# 4.1. Quel que soit le type de traitement, il faut donner le concept du maillage initial (entree)
+#
+  MAILLAGE_N   = SIMP(statut='o',typ=maillage_sdaster,
+                      fr="Maillage avant adaptation",
+                      ang="Mesh before adaptation" ),
+#
+# 4.2. Si ce n'est pas une simple lecture :
+#
+  b_maillage = BLOC( condition = " (ADAPTATION != 'LECTURE') " ,
+                          fr="Lectures de champs aux points de Gauss ou aux noeuds par element.",
+                          ang="Readings of the fields over the Gauss points.",
+#
+# 4.2.1. Le concept du maillage final (sortie)
+#
+    MAILLAGE_NP1 = SIMP(statut='o',typ=CO,
+                        fr="Maillage après adaptation",
+                        ang="Mesh after adaptation" ),
+#
+# 4.2.2. Eventuellement, on peut produire un maillage annexe
+#      Actuellement, c'est le maillage n+1, mais de degré différent.
+#
+    MAILLAGE_NP1_ANNEXE = SIMP(statut='f',typ=CO,
+                              fr="Maillage annexe après adaptation",
+                              ang="Additional mesh after adaptation" ),
+#
+  ) ,
+#
+# 5. Le pilotage de l'adaptation, avec les variantes suivantes :
+#  . Raffinement et deraffinement, selon un champ
+#  . Raffinement seul, selon un champ
+#  . Deraffinement seul, selon un champ
+#  . Raffinement seul, selon des zones geometriques
+#  . Raffinement uniforme : toutes les mailles sont divisées
+#  . Deraffinement uniforme : toutes les mailles sont regroupées
+#  . Modification : le maillage subit des transformations specifiques
+#  . Rien : le maillage est le meme a la sortie et a l'entree
+#
+  ADAPTATION = SIMP(statut='o',typ='TXM',
+                    into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT","RAFFINEMENT_ZONE", \
+                          "RAFFINEMENT_UNIFORME","DERAFFINEMENT_UNIFORME", \
+                          "MODIFICATION", "LECTURE", "RIEN"),
+                    fr="Pilotage de l'adaptation : selon un champ ou uniforme.",
+                    ang="Adaptation control : either among an field or uniform" ),
+#
+# 6. Pour de l'adaptation libre, il faut un champ ou une zone
+#
+  b_champ = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                (ADAPTATION == 'RAFFINEMENT') or \
+                                (ADAPTATION == 'DERAFFINEMENT') " ,
+                  fr="Pour une adaptation libre, choix du champ ou d'une zone à raffiner",
+                  ang="For a free adaptation, selection of the field or of a zone",
+#
+    regles=(UN_PARMI('CHAM_GD','RESULTAT_N')),
+#
+# 6.1. Reperage de la zone a raffiner a l'aide d'un champ
+#
+# 6.1.1. Sous forme de champ de grandeur
+#
+    CHAM_GD    = SIMP(statut='f',typ=cham_gd_sdaster,
+                      fr="Champ de grandeur Code_Aster pilotant l'adaptation",
+                      ang="Code_Aster 'champ de grandeur' governing the adapatation" ),
+#
+# 6.1.2. Sous forme de concept resultat_sdaster
+#
+    RESULTAT_N = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ,
+                      fr="Concept résultat Code_Aster contenant le champ",
+                      ang="The Code_Aster result with the field" ),
+#
+    b_champ_adaptation = BLOC(condition="(RESULTAT_N != None)",
+      NOM_CHAM = SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),
+                        fr="Champ dans le résultat",
+                        ang="The field in the result structure" ),
+    ),
+#
+# 6.1.3. Est-ce un champ derive
+#
+    b_sensibilite = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                        fr="Est-ce un champ dérivé",
+                        ang="Is the field a derivative field",
+#
+      SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+                         fr="Paramètre de sensibilité.",
+                         ang="Sensitivity parameter")
+#
+    ),
+#
+# 6.1.4. La ou les composantes retenues
+#
+    b_composante = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                        fr="Choix de la composante ou des composantes pour le champ",
+                        ang="Selection of the component(s) for the field",
+#
+      NOM_CMP = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                            fr="Liste des composante(s) retenue(s) pour le champ.",
+                            ang="List of the selected component(s) for the field." ),
+#
+    ),
+#
+# 6.1.5. Le paramètre temporel pour le champ
+#
+    b_parametre_temporel = BLOC(condition="(RESULTAT_N != None)",
+                                fr="Choix éventuel du paramètre temporel pour le champ",
+                                ang="Time selection for the field (option)",
+#
+      regles=(EXCLUS('NUME_ORDRE','INST'),),
+#
+# 6.1.5.1. Soit le numero d'ordre
+#
+      NUME_ORDRE = SIMP(statut='f',typ='I',
+                        fr="Numéro d ordre",
+                        ang="Rank" ),
+#
+# 6.1.5.2. Soit l'instant
+# 6.1.5.2.1. Sa valeur
+#
+      INST       = SIMP(statut='f',typ='R',
+                        fr="Instant associé",
+                        ang="Instant" ),
+#
+# 6.1.5.2.2. La précision du choix de l'instant
+#
+      b_precision = BLOC(condition="(INST != None)",
+                         fr="Choix de la précision du choix de l'instant",
+                         ang="Precision for the choice of the instant",
+        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+                         fr="Critère de précision sur le choix de l'instant associé",
+                         ang="Accuracy criterium over the choice of the instant"),
+        b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,
+                             fr="Précision relative sur le choix de l'instant associé",
+                             ang="Relative accuracy over the choice of the instant"),),
+        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+            PRECISION       =SIMP(statut='o',typ='R',
+                             fr="Précision absolue sur le choix de l'instant associé",
+                             ang="Absolute accuracy over the choice of the instant"),),
+      ),
+#
+    ),
+#
+# 6.1.6. Usage des composantes : maximum, maximum de la valeur absolue, ou de la norme L2, ou de la norme infinie
+#
+    b_usage_cmp = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                       fr="Type d'usage de(s) composante(s)",
+                       ang="Type of the use for the component(s)",
+#
+      USAGE_CMP = SIMP(statut='f',typ='TXM',defaut="NORME_L2",
+                       into=("ABSOLU", "NORME_L2", "NORME_INFINIE", "RELATIF"),
+                       fr="Valeur absolue de la composante, ou norme du champ, ou valeur relative de la composante",
+                       ang="Absolute value of the component, or norm of the field, or relative value of the component" ),
+#
+    ),
+#
+# 6.1.7. Usage du champ : la valeur par maille ou le max du saut entre mailles
+#
+    b_usage_champ = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                         fr="Usage du champ : par maille ou saut entre mailles voisines",
+                         ang="Use type for the field : direct or jump",
+#
+      USAGE_CHAMP = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"),
+                         fr="Usage du champ : la valeur par maille ou le saut entre mailles voisines",
+                         ang="Use of the field : value over every mesh or jump between the neighbours" ),
+#
+    ),
+#
+  ) ,
+#
+# 7. Les criteres pour de l'adaptation libre avec un champ :
+#        absolu, relatif, en proportion d'entite
+# 7.1. Pour le raffinement :
+#
+  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 : fraction réelle entre 0. et 1.",
+                         ang="Relative threshold : ratio between 0. and 1." ),
+    CRIT_RAFF_PE  = SIMP(statut='f',typ='R',
+                         fr="Pourcentage de mailles : fraction réelle entre 0. et 1.",
+                         ang="Percentage of meshes : ratio between 0. and 1." ),
+  ) ,
+#
+# 7.2. Pour le deraffinement :
+#
+  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 : fraction réelle entre 0. et 1.",
+                         ang="Relative threshold : ratio between 0. and 1." ),
+    CRIT_DERA_PE  = SIMP(statut='f',typ='R',
+                         fr="Pourcentage de mailles : fraction réelle entre 0. et 1.",
+                         ang="Percentage of meshes : ratio between 0. and 1." ),
+  ) ,
+#
+# 8. Pour de l'adaptation par zone, définitions des zones
+#
+  b_zone = BLOC( condition = " (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+                 fr="Pour une adaptation selon une zone à raffiner",
+                 ang="For adaptation among a zone",
+#
+    ZONE = FACT(statut='o',min=1,max='**',
+                fr="Définition de zones à raffiner.",
+                ang="Refined zone definition.",
+#
+# 8.1. Type de la zone
+#
+      TYPE = SIMP(statut='o',typ='TXM',into=("RECTANGLE", "BOITE", "DISQUE", "SPHERE", "CYLINDRE", "DISQUE_PERCE", "TUYAU"),
+                  fr="Type de la zone",
+                  ang="Type of the zone" ),
+#
+# Ne sachant pas exploiter les blocs, je mets des regles
+#
+      regles=(AU_MOINS_UN('X_MINI','X_CENTRE','HAUTEUR'),
+              EXCLUS('X_MINI','X_CENTRE','HAUTEUR',),
+              EXCLUS('Z_MINI','X_CENTRE','HAUTEUR',),
+              EXCLUS('X_MINI','Z_CENTRE','HAUTEUR',),
+              EXCLUS('Z_MINI','Z_CENTRE','HAUTEUR',),
+              EXCLUS('X_MINI','RAYON',),
+              EXCLUS('Z_MINI','RAYON',),
+              EXCLUS('X_MINI','X_CENTRE','RAYON_INT',),
+              EXCLUS('Z_MINI','X_CENTRE','RAYON_INT',),
+              EXCLUS('X_MINI','X_CENTRE','RAYON_EXT',),
+              EXCLUS('Z_MINI','X_CENTRE','RAYON_EXT',),
+              EXCLUS('RAYON','RAYON_INT',),),
+#
+# 8.2. Une boite rectangulaire ou parallelepipedique
+# 8.2.1. Incontournables
+#
+##gn      b_z_boiteXY = BLOC( condition = " (TYPE == 'RECTANGLE') or (TYPE == 'BOITE') " ,
+##gn                          fr="X et Y mini/maxi pour un rectangle ou un parallelepipede.",
+##gn                          ang="X and Y min/max for a rectangle or a parallelepipedic box",
+      X_MINI = SIMP(statut='f',typ='R',
+                    fr="Abscisse minimum de la boite",
+                    ang="Minimum X for the box"),
+      X_MAXI = SIMP(statut='f',typ='R',
+                    fr="Abscisse maximum de la boite",
+                    ang="Maximum X for the box"),
+      Y_MINI = SIMP(statut='f',typ='R',
+                    fr="Ordonnée minimum de la boite",
+                    ang="Minimum Y for the box"),
+      Y_MAXI = SIMP(statut='f',typ='R',
+                      fr="Abscisse maximum de la boite",
+                      ang="Maximum Y for the box"),
+##gn      ) ,
+#
+# 8.2.2. Complement pour une boite parallelepipedique
+#
+##gn      b_z_boiteZ = BLOC( condition = " (TYPE == 'BOITE') " ,
+##gn                         fr="Z mini/maxi pour un parallelepipede.",
+##gn                         ang="Z min/max for a parallelepipedic box",
+      Z_MINI = SIMP(statut='f',typ='R',
+                    fr="Cote minimum de la boite",
+                    ang="Minimum Z for the box"),
+      Z_MAXI = SIMP(statut='f',typ='R',
+                    fr="Cote maximum de la boite",
+                    ang="Maximum Z for the box"),
+##gn      ) ,
+#
+# 8.3. Rayon pour un disque, une sphere ou un cylindre
+#
+##gn      b_z_rayon = BLOC( condition = " (TYPE == 'DISQUE') or (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
+##gn                        fr="Le rayon d'un disque, d'une sphere ou d'un cylindre.",
+##gn                        ang="The radius of a disk or of a sphere or of a cylinder.",
+      RAYON = SIMP(statut='f',typ='R',
+                   fr="Rayon",
+                   ang="Radius"),
+##gn      ) ,
+#
+# 8.4. Pour un disque plein ou perce, une sphere
+# 8.4.1. Incontournables
+#
+##gn      b_z_di_sp_XY = BLOC( condition = " (TYPE == 'DISQUE') or (TYPE == 'SPHERE') or (TYPE == 'DISQUE_PERCE') " ,
+##gn                           fr="X et Y du centre d'un disque plein ou perce, d'une sphere.",
+##gn                           ang="X and Y of the centre of a disk or of a sphere.",
+      X_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Abscisse du centre du disque ou de la sphère",
+                      ang="X for the center of the disk or of the sphere"),
+      Y_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Ordonnée du centre du disque ou de la sphère",
+                      ang="Y for the center of the disk or of the sphere"),
+##gn      ) ,
+#
+# 8.4.2. Complement pour une sphere
+#
+##gn      b_z_sp_Z = BLOC( condition = " (TYPE == 'SPHERE') " ,
+##gn                       fr="Cote du centre de la sphere.",
+##gn                       ang="Z for the center of the sphere.",
+       Z_CENTRE = SIMP(statut='f',typ='R',
+                       fr="Cote du centre de la sphère",
+                       ang="Z for the center of the sphere"),
+##gn      ) ,
+#
+# 8.5. Rayons interieur et exterieur pour un disque perce ou un tuyau
+#
+##gn      b_z_rayon_int_ext = BLOC( condition = " (TYPE == 'DISQUE_PERCE') or (TYPE == 'TUYAU') " ,
+##gn                                fr="Le rayon d'un disque perce ou d'un tuyau.",
+##gn                                ang="The radius of a holed disk or of a pipe.",
+      RAYON_INT = SIMP(statut='f',typ='R',
+                       fr="Rayon intérieur",
+                       ang="Internal radius"),
+      RAYON_EXT = SIMP(statut='f',typ='R',
+                       fr="Rayon extérieur",
+                       ang="External radius"),
+##gn      ) ,
+#
+# 8.6. Un cylindre ou un tuyau
+#
+##gn      b_z_cylindre_tuyau = BLOC( condition = " (TYPE == 'CYLINDRE') or (TYPE == 'TUYAU') " ,
+##gn                                 fr="Pour un cylindre ou un tuyau.",
+##gn                                 ang="For a cylinder or a pipe.",
+      X_AXE = SIMP(statut='f',typ='R',
+                   fr="Abscisse du vecteur directeur de l'axe",
+                   ang="X for the axial vector"),
+      Y_AXE = SIMP(statut='f',typ='R',
+                   fr="Ordonnée du vecteur directeur de l'axe",
+                   ang="Y for the axial vector"),
+      Z_AXE = SIMP(statut='f',typ='R',
+                   fr="Cote du vecteur directeur de l'axe",
+                   ang="Z for the axial vector"),
+      X_BASE = SIMP(statut='f',typ='R',
+                    fr="Abscisse d'un point de la base, sur l'axe",
+                    ang="X for the basis, on the axis"),
+      Y_BASE = SIMP(statut='f',typ='R',
+                    fr="Ordonnée d'un point de la base, sur l'axe",
+                    ang="Y for the basis, on the axis"),
+      Z_BASE = SIMP(statut='f',typ='R',
+                    fr="Cote d'un point de la base, sur l'axe",
+                    ang="Z for the basis, on the axis"),
+      HAUTEUR = SIMP(statut='f',typ='R',
+                     fr="Hauteur",
+                     ang="Height"),
+##gn     ) ,
+#
+    ) ,
+#
+  ) ,
+#
+# 9. Les niveaux extremes pour le maillage adapte
+# 9.1. Pour le raffinement :
+#
+  b_niveau_maximum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                         (ADAPTATION == 'RAFFINEMENT') or \
+                                         (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+                                         (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+                           fr="Profondeur maximale de raffinement",
+                           ang="Maximum depth for the refinement",
+#
+    NIVE_MAX = SIMP(statut='f',typ='I',
+                    fr="Niveau maximum de profondeur de raffinement",
+                    ang="Maximum level for the refinement"),
+#
+    DIAM_MIN = SIMP(statut='f',typ='R',
+                    fr="Diamètre minimal de maille",
+                    ang="Minimal diameter for the mesh" ),
+#
+  ) ,
+#
+# 9.2. Pour le deraffinement :
+#
+  b_niveau_minimum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                         (ADAPTATION == 'DERAFFINEMENT') or \
+                                         (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+                           fr="Niveau minimum de profondeur de déraffinement",
+                           ang="Minimum level for the unrefinement",
+    NIVE_MIN = SIMP(statut='f',typ='I',
+                    fr="Niveau minimum de profondeur de déraffinement",
+                    ang="Minimum level for the unrefinement"),
+  ) ,
+#
+# 10. Filtrage de l'adaptation par des groupes
+#
+  b_filtrage_par_des_groupes = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                   (ADAPTATION == 'RAFFINEMENT') or \
+                                                   (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+                                                   (ADAPTATION == 'RAFFINEMENT_ZONE') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+                                fr="Filtrage de l'adaptation par des groupes.",
+                                ang="Filtering of adaptation by the groups.",
+#
+    GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles pour le filtrage de l'adaptation.",
+                    ang="List of the groups of meshes for filtering of the adaptation." ),
+#
+    GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de noeuds pour le filtrage de l'adaptation.",
+                    ang="List of the groups of nodes for filtering of the adaptation." ),
+  ) ,
+#
+# 11. Suivi d'une frontière
+#
+# 11.1. Definition d'une frontière par un maillage (valable seulement pour des frontières 1D)
+#
+  MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+                           fr="Maillage de la frontière discrète à suivre",
+                           ang="Discrete boundary mesh" ),
+#
+  b_FRONTIERE = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière discrète",
+                      ang="Further information about discrete boundary",
+#
+    GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                          fr="Liste des groupes de mailles définissant la frontière discrète",
+                          ang="Mesh groups which define the discrete boundary" ),
+#
+  ) ,
+#
+# 11.2. Definition analytique d'une frontière
+#
+  FRONTIERE_ANALYTIQUE = FACT(statut='f',max='**',
+                              fr="Definition analytique de frontières a suivre.",
+                              ang="Analytical definition of a boundary.",
+#
+# 11.2.1. Nom de la frontière
+#
+    NOM = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+               fr="Nom de la frontière analytique",
+               ang="Name of the analytic boundary" ),
+#
+# 11.2.2. Type de la frontière
+#
+    TYPE = SIMP(statut='o',typ='TXM',into=("SPHERE", "CYLINDRE"),
+                fr="Type de la frontière analytique",
+                ang="Type of the analytic boundary" ),
+#
+# 11.2.3. Pour une sphere ou un cylindre : rayon et centre
+#
+    b_fr_rayon = BLOC( condition = " (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
+                       fr="Le rayon et le centre d'une sphère ou d'un cylindre.",
+                       ang="The radius and the centre of a sphere or of a cylinder.",
+      RAYON = SIMP(statut='o',typ='R',
+                   fr="Rayon",
+                   ang="Radius"),
+      X_CENTRE = SIMP(statut='o',typ='R',
+                      fr="Abscisse du centre",
+                      ang="X for the center"),
+      Y_CENTRE = SIMP(statut='o',typ='R',
+                      fr="Ordonneée du centre",
+                      ang="Y for the center"),
+      Z_CENTRE = SIMP(statut='o',typ='R',
+                      fr="Cote du centre",
+                      ang="Z for the center"),
+    ) ,
+#
+# 11.2.4. Complement pour un cylindre
+#
+    b_fr_cylindre = BLOC( condition = " (TYPE == 'CYLINDRE') " ,
+                          fr="Pour un cylindre.",
+                          ang="For a cylinder.",
+      X_AXE = SIMP(statut='o',typ='R',
+                   fr="Abscisse du vecteur directeur de l'axe",
+                   ang="X for the axial vector"),
+      Y_AXE = SIMP(statut='o',typ='R',
+                   fr="Ordonnée du vecteur directeur de l'axe",
+                   ang="Y for the axial vector"),
+      Z_AXE = SIMP(statut='o',typ='R',
+                   fr="Cote du vecteur directeur de l'axe",
+                   ang="Z for the axial vector"),
+    ) ,
+#
+# 11.2.5. Groupe(s) lie(s) a la frontière
+#
+    GROUP_MA = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles placées sur la frontière",
+                    ang="Groups of meshes which are located on the boundary" ),
+#
+  ) ,
+#
+# 12. mise à jour de champs sur le nouveau maillage
+#
+  MAJ_CHAM = FACT(statut='f',max='**',
+                  fr="Mise à jour de champs sur le nouveau maillage.",
+                  ang="Updating of the fields over the new mesh.",
+#
+# 12.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour
+#
+    CHAM_MAJ = SIMP(statut='o',typ=CO,
+                    fr="Nom du champ de grandeur qui contiendra le champ mis à jour",
+                    ang="Name of the field for the updated field"),
+#
+# 12.2. Le type du champ qui contiendra le resultat de la mise a jour
+#
+    TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO( ('NOEU', 'ELEM', 'ELNO', 'ELGA') ),
+                     fr="Type du champ qui contiendra le champ mis à jour",
+                     ang="Type of the field for the updated field" ),
+#
+# 12.3. Le champ a interpoler
+#
+    regles=(UN_PARMI('CHAM_GD','RESULTAT')),
+#
+# 12.3.1. Sous forme de champ de grandeur
+#
+    CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster,
+                   fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour",
+                   ang="Champ de grandeur with the field to be updated" ),
+#
+# 12.3.2. Sous forme de champ dans un resultat
+#
+    RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
+                    fr="Résultat contenant le champ à mettre à jour",
+                    ang="Result with the field to be updated" ),
+#
+    b_nom_du_champ = BLOC(condition="(RESULTAT != None)",
+                          fr="Choix éventuel du nom du champ à interpoler",
+                          ang="Selection for the name of the field (option)",
+#
+      NOM_CHAM = SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),
+                      fr="Nom du champ à mettre à jour",
+                      ang="Name of the field to be updated" ),
+#
+    ),
+#
+# 12.4. Les composantes
+#
+    NOM_CMP = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                   fr="Liste des composante(s) retenue(s) pour le champ.",
+                   ang="List of the selected component(s) for the field." ),
+#
+# 12.5. Le paramètre temporel pour le champ a interpoler
+#
+    b_parametre_temporel = BLOC(condition="(RESULTAT != None)",
+                                fr="Choix éventuel du paramètre temporel pour le champ à interpoler",
+                                ang="Time selection for the field (option)",
+#
+      regles=(EXCLUS('NUME_ORDRE','INST'),),
+#
+# 12.5.1. Soit le numero d'ordre
+#
+      NUME_ORDRE = SIMP(statut='f',typ='I',
+                        fr="Numéro d ordre du champ à mettre à jour",
+                        ang="Rank of the field to be updated" ),
+#
+# 12.5.2. Soit l'instant
+# 12.5.2.1. Sa valeur
+#
+      INST = SIMP(statut='f',typ='R',
+                  fr="Instant associé",
+                  ang="Instant" ),
+#
+# 12.5.2.2. La précision du choix de l'instant
+#
+      b_precision = BLOC(condition="(INST != None)",
+                         fr="Choix de la précision du choix de l'instant",
+                         ang="Selection for the choice of the instant",
+#
+        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+                         fr="Critère de précision sur le choix de l'instant associé",
+                         ang="Accuracy criterium over the choice of the instant"),
+        b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,
+                             fr="Précision relative sur le choix de l'instant associé",
+                             ang="Relative accuracy over the choice of the instant"),),
+        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+            PRECISION       =SIMP(statut='o',typ='R',
+                             fr="Précision absolue sur le choix de l'instant associé",
+                             ang="Absolute accuracy over the choice of the instant"),),
+#
+      ),
+#
+    ),
+#
+# 12.6. Type d'interpolation
+#
+    TYPE_MAJ = SIMP(statut='f',typ='TXM',defaut="AUTO",
+                    into=("AUTO", "ISOP2"),
+                    fr="Type de mise à jour : automatique ou iso-P2",
+                    ang="Type of the updating" ),
+#
+# 12.7. Est-ce un champ dérivé
+#
+    SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+                       fr="Paramètre de sensibilité.",
+                       ang="Sensitivity parameter"),
+  ),
+#
+# 13. Les Modifications
+#
+  b_modifications = BLOC( condition = " (ADAPTATION == 'MODIFICATION') " ,
+                          fr="Modification de maillage.",
+                          ang="Modification of the mesh.",
+#
+      #regles=(AU_MOINS_UN('DEGRE','JOINT'),),
+#
+# 13.1. Changement de degre
+#
+      DEGRE         = SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Changement de degré du maillage",
+                          ang="Modification of the degree of the mesh" ),
+#
+# 13.2. Création des joints
+#
+      #JOINT         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          #fr="Creations des joints",
+                          #ang="Creation of the junctions" ),
+#
+  ) ,
+#
+# 14. Le modele pour les lectures de champs aux points de Gauss ou aux noeuds par element
+#
+  b_lectures = BLOC( condition = " (ADAPTATION == 'LECTURE') " ,
+                          fr="Lectures de champs aux points de Gauss.",
+                          ang="Readings of the fields over the Gauss points.",
+#
+      MODELE        = SIMP(statut='o',typ=modele_sdaster,
+                          fr="Modèle",
+                          ang="Model" ),
+#
+  ) ,
+#
+# 15. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
+# 15.1. Nombre de noeuds et mailles
+#
+  NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Nombre de noeuds et de mailles du maillage",
+                        ang="Number of nodes and meshes in the mesh" ),
+#
+# 15.2. Determination de la qualité des mailles du maillage
+#
+  QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Qualité du maillage",
+                        ang="Quality of the mesh" ),
+#
+# 15.3. Connexite du maillage
+#
+  CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Connexité du maillage.",
+                        ang="Connexity of the mesh." ),
+#
+# 15.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." ),
+#
+# 15.5. Controle de la non-interpenetration des mailles
+#
+  INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Controle de la non interpénétration des mailles.",
+                        ang="Overlapping checking." ),
+#
+# 15.6. Propriétés du maillage de calcul
+#
+  PROP_CALCUL    = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Propriétés du maillage de calcul.",
+                        ang="Properties of the calculation mesh." ),
+#
+# 16. Unite logique d'un fichier a ajouter a HOMARD.Configuration
+#
+  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V10_N') or \
+                                (VERSION_HOMARD == 'V10_N_PERSO') " ,
+                                fr="Fichier supplémentaire.",
+                                ang="Additional file.",
+#
+  UNITE = SIMP(statut='f',typ='I',
+               fr="Unite logique du fichier à ajouter à HOMARD.Configuration",
+               ang="Additional file to HOMARD.Configuration" ),
+#
+  ) ,
+#
+# 17. Gestion des mailles autres que celles compatibles avec HOMARD
+#       "REFUSER" : elles sont refusées (defaut)
+#       "IGNORER" : elles sont ignorées
+#
+  ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+                             fr="Acceptation de mailles incompatibles avec HOMARD",
+                             ang="Incompatible meshes for HOMARD" ),
+#
+) ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,RESU_THER,**args):
+  self.type_sdprod(MODELE,modele_sdaster)
+  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 RESU_THER  != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",
+                       op=OPS('Macro.macr_ascouf_calc_ops.macr_ascouf_calc_ops'),
+                       sd_prod=macr_ascouf_calc_prod,
+                       fr="Réalise l'analyse thermomécanique du coude dont le maillage a " \
+                          "été concu par MACR_ASCOUF_MAIL",
+                       reentrant='n',
+                       UIinfo={"groupes":("Résolution","Outils-métier",)},
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN",
+                                     "FISS_COUDE",
+                                     "FISS_AXIS_DEB",
+                                     "SOUS_EPAIS_COUDE"
+                                     ) ),
+
+         CL_BOL_P2_GV    =FACT(statut='f',
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+         ),
+
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+         MODELE          =SIMP(statut='o',typ=CO,),
+         CHAM_MATER      =SIMP(statut='f',typ=CO,),
+         CARA_ELEM       =SIMP(statut='f',typ=CO,),
+         FOND_FISS       =SIMP(statut='f',typ=CO,),
+         RESU_THER       =SIMP(statut='f',typ=CO,),
+
+         AFFE_MATERIAU   =FACT(statut='o',max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,into=("COUDE","BOL") ),
+           MATER           =SIMP(statut='o',typ=mater_sdaster ),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         PRES_REP        =FACT(statut='f',
+           PRES            =SIMP(statut='o',typ='R' ),
+           EFFE_FOND_P1    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRES_LEVRE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         ECHANGE         =FACT(statut='f',
+           COEF_H          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         TORS_P1         =FACT(statut='f',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_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+         COMP_ELAS       =C_COMP_ELAS('MACR_ASCOUF_CALC'),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MACR_ASCOUF_CALC'),
+#-------------------------------------------------------------------
+
+         CONVERGENCE     =C_CONVERGENCE(),
+
+         NEWTON          =C_NEWTON(),
+
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+
+         INCREMENT       =C_INCREMENT(),
+
+         THETA_3D        =FACT(statut='f',max='**',
+           R_INF           =SIMP(statut='o',typ='R' ),
+           R_SUP           =SIMP(statut='o',typ='R' ),
+         ),
+
+         IMPR_TABLE      =FACT(statut='f',
+           regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
+            PRESENT_PRESENT('TOUT_PARA','ANGLE',    ),
+            PRESENT_PRESENT('TOUT_PARA','R_CINTR',  ),
+                   UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=4,
+                                 into=("TRESCA_MEMBRANE",
+                                       "TRESCA_MFLE",
+                                       "TRESCA",
+                                       "SI_LONG"
+                                       "SI_RADI"
+                                       "SI_CIRC"
+                                       ) ),
+           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='**' ),
+           TRANSFORMEE     =SIMP(statut='f',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+         ),
+
+         IMPRESSION      =FACT(statut='f',
+           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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",
+                       op=OPS('Macro.macr_ascouf_mail_ops.macr_ascouf_mail_ops'),
+                       sd_prod=maillage_sdaster,
+                       fr="Engendre le maillage d'un coude sain ou comportant une fissure ou une (ou plusieurs) sous-épaisseur(s)",
+                       UIinfo={"groupes":("Maillage","Outils-métier",)},
+                       reentrant='n',
+
+         regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
+
+         EXEC_MAILLAGE   =FACT(statut='o',
+           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',
+           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="ENTIER",into=("ENTIER","QUART","DEMI") ),
+           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',
+           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',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',
+           regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
+           AXIS            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+           b_axis_non    =BLOC(condition = "AXIS == 'NON' ",
+                   LONGUEUR        =SIMP(statut='o',typ='R' ),
+           ),
+           b_axis_oui    =BLOC(condition = "AXIS == 'OUI' ",
+                   LONGUEUR        =SIMP(statut='f',typ='R' ),
+           ),
+           PROFONDEUR      =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',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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,RESU_THER,**args):
+  if MODELE      != None:self.type_sdprod(MODELE,modele_sdaster)
+  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 RESU_THER   != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",
+                      op=OPS('Macro.macr_aspic_calc_ops.macr_aspic_calc_ops'),
+                      sd_prod=macr_aspic_calc_prod,
+                      fr="Réalise un calcul prédéfini de piquages sains ou fissurés " \
+                         "ainsi que les post-traitements associés ",
+                      UIinfo={"groupes":("Résolution","Outils-métier",)},
+                      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='o',
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2") ),
+         ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=CO,),
+         CHAM_MATER      =SIMP(statut='f',typ=CO,),
+         CARA_ELEM       =SIMP(statut='f',typ=CO,),
+         FOND_FISS_1     =SIMP(statut='f',typ=CO,),
+         FOND_FISS_2     =SIMP(statut='f',typ=CO,),
+         RESU_THER       =SIMP(statut='f',typ=CO,),
+
+         AFFE_MATERIAU   =FACT(statut='o',max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ=grma,into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
+           MATER           =SIMP(statut='o',typ=mater_sdaster),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RCCM            =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+         ),
+
+         EQUILIBRE       =FACT(statut='o',
+           NOEUD           =SIMP(statut='o',typ=no),
+         ),
+
+         PRES_REP        =FACT(statut='o',
+           PRES            =SIMP(statut='o',typ='R'),
+           NOEUD           =SIMP(statut='f',typ=no),
+           EFFE_FOND       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           PRES_LEVRE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+
+         ECHANGE         =FACT(statut='f',
+           COEF_H_TUBU     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           COEF_H_CORP     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+
+         TORS_CORP       =FACT(statut='f',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_sdaster,nappe_sdaster,formule)),
+         ),
+
+         TORS_TUBU       =FACT(statut='f',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_sdaster,nappe_sdaster,formule)),
+         ),
+
+         COMP_ELAS       =C_COMP_ELAS('MACR_ASPIC_CALC'),
+
+         THETA_3D        =FACT(statut='f',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',max='**',
+           NUME_ORDRE      =SIMP(statut='o',typ='I'),
+           VALE_MIN        =SIMP(statut='o',typ='R'),
+           VALE_MAX        =SIMP(statut='o',typ='R'),
+         ),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MACR_ASPIC_CALC'),
+#-------------------------------------------------------------------
+
+         CONVERGENCE     =C_CONVERGENCE(),
+
+         NEWTON          =C_NEWTON(),
+
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+
+         INCREMENT       =C_INCREMENT(),
+
+         PAS_AZIMUT      =SIMP(statut='f',typ='I',defaut=1),
+
+         IMPRESSION      =FACT(statut='f',
+           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',validators=NoRepeat(),max=3,into=("DEPL","SIEQ_ELNO","TEMP")),
+
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         TITRE           =SIMP(statut='f',typ='TXM'),
+)
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+
+MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",
+                      op=OPS('Macro.macr_aspic_mail_ops.macr_aspic_mail_ops'),
+                      sd_prod=maillage_sdaster,
+                      reentrant='n',
+                      fr="Engendre le maillage d'un piquage sain ou avec fissure (longue ou courte)",
+                      UIinfo={"groupes":("Maillage","Outils-métier",)},
+
+         EXEC_MAILLAGE   =FACT(statut='o',
+           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',
+           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',
+           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',
+           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',
+           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',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 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FLEJOU J.L.FLEJOU
+
+
+MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",
+                       op=OPS('Macro.macr_cara_poutre_ops.macr_cara_poutre_ops'),
+                       sd_prod=table_sdaster,
+                       reentrant='n',
+                       UIinfo={"groupes":("Modélisation",)},
+                       fr="Calculer les 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'),
+                ),
+
+         MAILLAGE       =SIMP(statut='f',typ=maillage_sdaster,
+                           fr="Nom du concept maillage"),
+         b_maillage=BLOC( condition = "MAILLAGE == None",
+            regles=( PRESENT_PRESENT('FORMAT','UNITE') ),
+            FORMAT         =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                              fr="Format du fichier"),
+            UNITE          =SIMP(statut='f',typ='I',defaut= 20,
+                              fr="Unite correspondant au format du fichier maillage"),
+         ),
+
+         ORIG_INER      =SIMP(statut='f',typ='R',max=3,defaut=(0.E+0,0.E+0),
+                           fr="Point par rapport auquel sont calculées les inerties"),
+         INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         SYME_X         =SIMP(statut='f',typ='TXM',into=("OUI",),
+                           fr="demi maillage par rapport a x=0"),
+         SYME_Y         =SIMP(statut='f',typ='TXM',into=("OUI",),
+                           fr="demi maillage par rapport a y=0"),
+
+         GROUP_MA       =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                              fr="Calcul des caractéristiques équivalentes a plusieurs "
+                                 "sections disjointes"),
+
+         GROUP_MA_BORD  =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="Groupe(s) de mailles linéiques, bord(s) de(s) section(s)"),
+
+            b_gma_bord  =BLOC( condition = "GROUP_MA_BORD != None",
+               fr=" calcul des carac. mecaniques",
+               regles=(UN_PARMI('NOEUD','GROUP_NO')),
+               NOEUD           =SIMP(statut='f',typ=no,max='**',
+                                     fr="Simplement pour empecher des pivots nuls le cas echeant. "
+                                        "Fournir un noeud quelconque"),
+               GROUP_NO        =SIMP(statut='f',typ=grno,max='**',
+                                     fr="Simplement pour empecher des pivots nuls le cas echeant. "
+                                        "Fournir un noeud quelconque par GROUP_MA"),
+               GROUP_MA_INTE   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                                 fr="groupes de mailles linéiques bordant des trous dans la section"),
+            ),
+
+            b_reseau = BLOC( condition ="""(GROUP_MA_BORD != None) and (GROUP_MA != None)""",
+               fr=" calcul des coef de cisaillement équivalents a un reseau de poutres",
+               regles=(ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
+               LONGUEUR        =SIMP(statut='f',typ='R',
+                                 fr="Longueur du réseau de poutres"),
+               MATERIAU        =SIMP(statut='f',typ=mater_sdaster,
+                                 fr="Materiau elastique lineaire du reseau"),
+               LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT"),
+                                 fr="type de conditions aux limites sur le plancher supérieur" ),
+            ),
+)
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+
+def macr_ecla_pg_prod(self,RESULTAT,MAILLAGE,RESU_INIT,**args):
+  self.type_sdprod(RESULTAT,AsType(RESU_INIT))
+  self.type_sdprod(MAILLAGE,maillage_sdaster)
+  return None
+
+
+MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",
+                   op=OPS('Macro.macr_ecla_pg_ops.macr_ecla_pg_ops'),
+                   sd_prod=macr_ecla_pg_prod,
+                   reentrant='n',
+                   UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+                   fr="Permettre la visualisation des champs aux points de Gauss d'une " \
+                      "SD_RESULTAT sans lissage ni interpolation",
+
+             # SD résultat ,modèle et champs à "éclater" :
+             RESU_INIT       =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à éclater",),
+             MODELE_INIT     =SIMP(statut='o',typ=modele_sdaster,fr="MODELE à éclater"),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO('ELGA'),),
+
+             # paramètres numériques de la commande :
+             SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+             TAILLE_MIN      =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
+
+             # concepts produits par la commande :
+             RESULTAT        =SIMP(statut='o',typ=CO,fr="SD_RESULTAT résultat de la commande"),
+             MAILLAGE        =SIMP(statut='o',typ=CO,fr="MAILLAGE associé aux cham_no de la SD_RESULTAT"),
+
+             # Sélection éventuelle d'un sous-ensemble des éléments à visualiser :
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+
+             # Sélection des numéros d'ordre :
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+            )
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+
+def macr_ecre_calc_prod(self,TABLE,DEBIT,**args):
+
+  self.type_sdprod(TABLE,table_sdaster)
+  self.type_sdprod(DEBIT,table_sdaster)
+  return None
+
+MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",
+                     op=OPS('Macro.macr_ecre_calc_ops.macr_ecre_calc_ops'),
+                     sd_prod=macr_ecre_calc_prod,
+                     reentrant='n',
+                     UIinfo={"groupes":("Résolution","Outils-métier",)},
+                     fr="Procedure de couplage avec Ecrevisse",
+
+                     regles = (UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPTS SORTANT : 2 TABLES POUR LE POST-TRAITEMENT
+#      ********************************************
+         TABLE              =SIMP(statut='o',typ=CO),
+         DEBIT              =SIMP(statut='o',typ=CO),
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+
+         FISSURE            =FACT(statut='o',min=1,max=1,
+           LONGUEUR            =SIMP(statut='o',typ='R',val_min=0.E+0,fr="Longueur de la fissure [zl]"),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]"),
+           ANGLE               =SIMP(statut='o',typ='R',fr="Angle par rapport a l'ascendante verticale (degres)"),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]"),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]"),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_AH      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le grand axe de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_AH        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le grand axe de la section",),
+             LISTE_COTES_BL      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section",),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_AH      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la hauteur de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_AH        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la hauteur de la section",),
+             LISTE_COTES_BL      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section",),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+
+         ECOULEMENT         =FACT(statut='f',min=1,max=1,
+           PRES_ENTREE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+#      *************************************************************
+
+         TEMPERATURE        =FACT(statut='f',min=1,max=1,
+           GRADIENT            =SIMP(statut='o',typ='TXM',into=("FOURNI","IMPOSE","CALCULE"),
+                                     fr="Modele de calcul du gradient de temperature [imograd]" ),
+           b_gradient_fourni   =BLOC(condition="GRADIENT=='FOURNI'",fr="Distribution de temperature fournie [imograd=-1]",
+             LISTE_COTES_TEMP    =SIMP(statut='o',typ='R',max='**',fr="Liste des cotes pour les temperatures",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_TEMP      =SIMP(statut='o',typ='R',max='**',fr="Liste des valeurs de temperature", ),
+           ),
+           b_gradient_impose   =BLOC(condition="GRADIENT=='IMPOSE'",fr="Distribution imposee de temperature [imograd=0]",
+             TEMP1               =SIMP(statut='o',typ='R',
+                                       fr="Gradient de temperature de la paroi le long de l'ecoulement (degC/m) [tm1]", ),
+             TEMP2               =SIMP(statut='o',typ='R',fr="Temperature de la paroi a l'entree (degC) [tm2]", ),
+           ),
+           b_gradient_calcule  =BLOC(condition="GRADIENT=='CALCULE'",fr="Profil de temperature calcule [imograd=1]",
+             EPAISSEUR_PAROI     =SIMP(statut='o',typ='R',fr="Epaisseur de la paroi (m) [epp]", ),
+             CONVECTION_AMONT    =SIMP(statut='o',typ='R',
+                                       fr="Coefficient de convection a la surface de la paroi cote amont (W/degC/m2) [alphe]", ),
+             CONVECTION_AVAL     =SIMP(statut='o',typ='R',
+                                       fr="Coefficient de convection a la surface de la paroi cote aval (W/degC/m2) [alphs]", ),
+             LAMBDA              =SIMP(statut='o',typ='R',fr="Conduction thermique de la paroi (W/degC/m) [lambd]", ),
+             TEMP_FLUIDE_AVAL    =SIMP(statut='o',typ='R',fr="Temperature du fluide cote aval (degC) [ts]", ),
+           ),
+         ),
+
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='f',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION    =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]"),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]"),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]"),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]"),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]"),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE        =FACT(statut='f',min=1,max=1,
+           KGTEST              =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                     fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI      =SIMP(statut='f',typ='I',defaut= 400,
+                                     fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI      =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                     fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+
+#      GENERAL
+#      *******
+
+         COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',into = ("3.1.1","3.1.2","3.2")),
+         ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+
+def macr_ecrevisse_prod(self,TABLE,TEMPER,DEBIT,**args):
+    # On definit ici les concepts produits
+    self.type_sdprod(TABLE,table_sdaster)
+    self.type_sdprod(TEMPER,evol_ther)
+    self.type_sdprod(DEBIT,table_sdaster)
+    # concept retourne
+    return evol_noli
+
+
+
+MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",
+                     op=OPS('Macro.macr_ecrevisse_ops.macr_ecrevisse_ops'),
+                     sd_prod=macr_ecrevisse_prod,
+                     reentrant='f',
+                     UIinfo={"groupes":("Résolution","Outils-métier",)},
+                     fr="Procedure de couplage avec Ecrevisse",
+
+       reuse  = SIMP(statut='f',typ='evol_noli'),
+       regles = (EXCLUS('TEMPER','ETAT_INIT'),
+                 UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPT SORTANT
+#      ********************************************
+         TABLE              =SIMP(statut='f',typ=CO),
+         DEBIT              =SIMP(statut='f',typ=CO),
+         TEMPER             =SIMP(statut='f',typ=CO),
+
+#      ETAT_INITIAL
+#      ********************************************
+         ETAT_INIT       =FACT(statut='f',
+             EVOL_NOLI       =SIMP(statut='o',typ=evol_noli),
+             EVOL_THER       =SIMP(statut='o',typ=evol_ther),
+             NUME_ORDRE      =SIMP(statut='o',typ='I'),
+         ),
+
+
+#      MODELES MECANIQUES
+#      ********************************************
+         MODELE_MECA        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_THER        =SIMP(statut='o',typ=modele_sdaster),
+
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+         FISSURE            =FACT(statut='o',min=1,max='**',
+           PREFIXE_FICHIER     =SIMP(statut='f',typ='TXM',validators=LongStr(1,8)),
+           GROUP_MA            =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+                                     fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+           GROUP_NO_ORIG       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           GROUP_NO_EXTR       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+           TORTUOSITE          =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+                                       fr="Coefficient de tortuosite de la fissure" ),
+           OUVERT_REMANENTE    =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section", ),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section", ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+         ECOULEMENT         =FACT(statut='o',min=1,max=1,
+                                  regles=(UN_PARMI('PRES_ENTREE','PRES_ENTREE_FO'),
+                                          UN_PARMI('PRES_SORTIE','PRES_SORTIE_FO'),
+                                          ),
+           PRES_ENTREE         =SIMP(statut='f',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                     fr="Evolution de la pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='f',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           PRES_SORTIE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                     fr="Evolution de la pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",
+                                     regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO')),
+                                     fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             TITR_MASS_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO'),
+                                             UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+                                     fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+             PRES_PART_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",
+                                     regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO'),
+                                             UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+                                     fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             TITR_MASS_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+             PRES_PART_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+         LIST_INST =SIMP(statut='f',typ=(listr8_sdaster), fr="Liste des instants de calcul imposes" ),
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='o',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION  =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      CRITERE DE CONVERGENCE
+#      **********************
+
+         CONV_CRITERE       =FACT(statut='o',min=1,max=1,
+           TEMP_REF            =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Temperature de reference pour le calcul du critere"),
+           PRES_REF            =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Pression de reference pour le calcul du critere"),
+           CRITERE             =SIMP(statut='o',typ='TXM',defaut="TEMP_PRESS",into=("TEMP_PRESS","EXPLICITE","TEMP","PRESS"),
+                                     fr="La nature du critere pour la convergence"),
+           b_critere_autre     =BLOC(condition="CRITERE=='TEMP_PRESS' or CRITERE=='TEMP' or CRITERE=='PRESS'",
+                                     fr="Critere de convergence temp_press, temp, ou press",
+             SUBD_NIVEAU         =SIMP(statut='f',typ='I',val_min=2,defaut=3,
+                                       fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI       =SIMP(statut='f',typ='R',val_min=0.0, fr="Pas de temps en dessous duquel on ne subdivise plus"),
+             NUME_ORDRE_MIN      =SIMP(statut='f',typ='I',val_min=-1,defaut=-1,
+                                       fr="Numero d'ordre a partir duquel le critere est pris en compte"),
+             PREC_CRIT           =SIMP(statut='f',typ='R',val_min=1.0E-2,defaut=1.0,
+                                       fr="Valeur du critere pour l'erreur de convergence"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE_ECREVISSE =FACT(statut='f',min=1,max=1,
+           KGTEST                 =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                        fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI         =SIMP(statut='f',typ='I',defaut= 400,
+                                        fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI         =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                        fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+
+#      GENERAL
+#      *******
+
+         COURBES            = SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           = SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',into = ("3.1.1","3.1.2","3.2")),
+         ENTETE             = SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         = SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               = SIMP(statut='f',typ='I',defaut="1",into=(1,2) ),
+
+#      DONNEES POUR STAT_NON_LINE ET THER_NON_LINE
+#      *******************************************
+
+         # copie de stat_non_line.capy des options des mots cles qui nous interessent
+
+         # donnees communes
+
+         CHAM_MATER         =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM          =SIMP(statut='f',typ=cara_elem),
+
+         # donnees specifiques a stat_non_line
+
+         EXCIT_MECA         =FACT(statut='o',max='**',
+           CHARGE              =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE         =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                     into=("FIXE_CSTE","SUIV","DIDI")),
+         ),
+
+         CONTACT            = SIMP(statut='o',typ=char_contact),
+
+         COMP_INCR          =C_COMP_INCR(),
+         NEWTON             =FACT(statut='d',
+           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),
+           REAC_ITER_ELAS      =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI           =SIMP(statut='f',typ=evol_noli),
+         ),
+         CONVERGENCE        =FACT(statut='d',regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
+           b_refe_rela         =BLOC(condition = "RESI_REFE_RELA != None",
+                                     regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+                                                         'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),
+                                            ),
+             SIGM_REFE           =SIMP(statut='f',typ='R'),
+             EPSI_REFE           =SIMP(statut='f',typ='R'),
+             FLUX_THER_REFE      =SIMP(statut='f',typ='R'),
+             FLUX_HYD1_REFE      =SIMP(statut='f',typ='R'),
+             FLUX_HYD2_REFE      =SIMP(statut='f',typ='R'),
+             VARI_REFE           =SIMP(statut='f',typ='R'),
+           ),
+           RESI_REFE_RELA   =SIMP(statut='f',typ='R'),
+           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",into=("OUI","NON")),
+         ),
+
+         # donnees specifiques a ther_lineaire
+
+         EXCIT_THER         =FACT(statut='o',max='**',
+           CHARGE              =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         PARM_THETA         =SIMP(statut='f',typ='R',defaut= 0.57),
+
+)
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
+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",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
+         regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),
+                 PRESENT_ABSENT('MATR_IMPE','MATR_RIGI','MATR_MASS'),),
+         BASE_MODALE     =SIMP(statut='o',typ=mode_meca ),
+         MATR_RIGI       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c),),
+         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='**'), 
+         SANS_GROUP_NO   =SIMP(statut='f',typ=grno ),
+         MATR_IMPE       =SIMP(statut='f',typ=matr_asse_gene_c ),
+         b_matr_impe     =BLOC(condition = "MATR_IMPE != None",
+             FREQ_EXTR       =SIMP(statut='o',typ='R' ),
+             AMOR_SOL        =SIMP(statut='f',typ='R',defaut=0.E+0 ),
+             MATR_IMPE_INIT  =SIMP(statut='f',typ=matr_asse_gene_c ),
+           ),
+         CAS_CHARGE      =FACT(statut='f',max='**',
+           NOM_CAS         =SIMP(statut='o',typ='TXM'),
+           VECT_ASSE_GENE  =SIMP(statut='o',typ=vect_asse_gene ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant='f',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+                    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',
+           regles=(PRESENT_PRESENT('PROJ_MESU','MODE_MESURE'),),
+           MODELE          =SIMP(statut='o',typ=modele_sdaster),
+           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),
+           PROJ_MESU       =SIMP(statut='f',typ=(mode_gene,tran_gene,harm_gene),max=1),
+#           MODE_MESURE     =SIMP(statut='f',typ=( mode_meca,base_modale) ),
+           MODE_MESURE     =SIMP(statut='f',typ= mode_meca ), 
+         ),
+         EXTERIEUR       =FACT(statut='f',
+           regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         RIGI_MECA       =FACT(statut='f',
+         ),
+         MASS_MECA       =FACT(statut='f',
+         ),
+         AMOR_MECA       =FACT(statut='f',
+         ),
+         CAS_CHARGE      =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 12/09/2011   AUTEUR NICOLAS G.NICOLAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",
+                     op=OPS('Macro.macr_adap_mail_ops.macr_adap_mail_ops'),
+                     docu="U7.03.02",UIinfo={"groupes":("Maillage",)},
+                     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,3,4)),
+#
+# 2. Version de HOMARD
+#
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V10_2",
+                        into=("V10_2", "V10_N", "V10_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_sdaster,
+                  fr="Maillage à analyser.",
+                  ang="Mesh to be checked." ),
+#
+# 5. Suivi d'une frontiere
+#
+  MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+                           fr="Maillage de la frontiere à suivre",
+                           ang="Boundary mesh" ),
+#
+  b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière",
+                      ang="Further information about boundary",
+#
+    GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                          fr="Groupes de mailles définissant la frontière",
+                          ang="Mesh groups which define the boundary" ),
+#
+                    ) ,
+#
+# 6. Les options ; par defaut, on controle tout, sauf l'interpénétration
+# 6.1. Nombre de noeuds et mailles
+#
+  NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Nombre de noeuds et de mailles du maillage",
+                        ang="Number of nodes and meshes in the mesh" ),
+#
+# 6.2. Determination de la qualite des mailles du maillage
+#
+  QUALITE        = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Qualité du maillage",
+                        ang="Quality of the mesh" ),
+#
+# 6.3. Connexite du maillage
+#
+  CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Connexité du maillage.",
+                        ang="Connexity of the mesh." ),
+#
+# 6.4. Taille des sous-domaines du maillage
+#
+  TAILLE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Tailles des sous-domaines du maillage.",
+                        ang="Sizes of mesh sub-domains." ),
+#
+# 6.5. Controle de la non-interpénétration des mailles
+#
+  INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Controle de la non interpénétration des mailles.",
+                        ang="Overlapping checking." ),
+#
+# 6.6. Propriétés du maillage de calcul
+#
+  PROP_CALCUL    = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Propriétés du maillage de calcul.",
+                        ang="Properties of the calculation mesh." ),
+#
+# 7. Unite logique d'un fichier à ajouter a HOMARD.Configuration
+#
+  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V10_N') or \
+                                (VERSION_HOMARD == 'V10_N_PERSO') " ,
+                                fr="Fichier supplementaire.",
+                                ang="Additional file.",
+#
+  UNITE = SIMP(statut='f',typ='I',
+               fr="Unite logique a ajouter a HOMARD.Configuration",
+               ang="Additional file to HOMARD.Configuration" ),
+#
+  ) ,
+#
+# 8. Gestion des mailles autres que celles compatibles avec HOMARD
+#       "REFUSER" : elles sont refusées (defaut)
+#       "IGNORER" : elles sont ignorées
+#
+  ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+                             fr="Acceptation de mailles incompatibles avec HOMARD",
+                             ang="Incompatible meshes for HOMARD" ),
+)  ;
+
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+
+
+MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",
+                      op=OPS('Macro.macr_lign_coupe_ops.macr_lign_coupe_ops'),
+                      sd_prod=table_sdaster,
+                      reentrant='n',
+                      UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+                      fr="Extraction des valeurs d'un résultat dans une ou plusieurs tables sur " \
+                         "des lignes de coupe définies par deux points et un intervalle",
+            regles=(UN_PARMI("RESULTAT","CHAM_GD"),),
+
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_gd_sdaster)),
+
+         b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+                                 regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+
+# extraction des résultats
+         b_meca        =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique",
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU',into=C_NOM_CHAM_INTO(),),
+         ),
+         b_ther        =BLOC(condition = "AsType(RESULTAT) in (evol_ther,)",fr="résultat thermique",
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='TEMP',into=("TEMP",
+                                 "FLUX_ELGA","FLUX_ELNO","FLUX_NOEU",
+                                 "META_ELNO","META_NOEU",
+                                 "DURT_ELNO","DURT_NOEU",
+                                 "HYDR_ELNO","HYDR_NOEU",
+                                 "DETE_ELNO","DETE_NOEU",
+                                 "SOUR_ELGA","COMPORTHER",
+                                 "ERTH_ELEM","ERTH_ELNO","ERTH_NOEU",),),),
+         b_cham       =BLOC(condition = "CHAM_GD!=None",
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO(),),),
+
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=25),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+
+         VIS_A_VIS       =FACT(statut='f',max='**',
+                             regles=(EXCLUS('GROUP_MA_1','MAILLE_1'),),
+           GROUP_MA_1        =SIMP(statut='f',typ=grma),
+           MAILLE_1          =SIMP(statut='f',typ=ma,max='**'),),
+
+         LIGN_COUPE     =FACT(statut='o',max='**',
+            regles=(EXCLUS("NOM_CMP","INVARIANT","ELEM_PRINCIPAUX","RESULTANTE"),
+                    PRESENT_PRESENT("TRAC_DIR","DIRECTION"),
+                    EXCLUS("TRAC_DIR","TRAC_NOR"),
+                    PRESENT_PRESENT("TRAC_DIR","NOM_CMP"),
+                    PRESENT_PRESENT("TRAC_NOR","NOM_CMP"),),
+
+           INTITULE        =SIMP(statut='f',typ='TXM',),
+           TYPE            =SIMP(statut='o',typ='TXM',max=1,
+                                 into=("GROUP_NO","SEGMENT","ARC","GROUP_MA"),defaut="SEGMENT"),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+                                into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+           OPERATION       =SIMP(statut='f',typ='TXM',into=("EXTRACTION","MOYENNE",),defaut="EXTRACTION",),
+
+           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='**'),
+           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='**'),
+
+
+           b_local        =BLOC(condition = "REPERE=='LOCAL' ",
+             VECT_Y          =SIMP(statut='f',typ='R',min=2,max=3),),
+
+           b_utili        =BLOC(condition = "REPERE=='UTILISATEUR'",
+             ANGL_NAUT       =SIMP(statut='o',typ='R',min=3,max=3),),
+
+           b_grno          =BLOC(condition = "TYPE=='GROUP_NO'",
+             GROUP_NO        =SIMP(statut='o',typ=grno, max=1),),
+
+           b_grma          =BLOC(condition = "TYPE=='GROUP_MA'",
+             GROUP_MA        =SIMP(statut='o',typ=grma, max=1),
+             MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),),
+
+           b_segment       =BLOC(condition = "TYPE=='SEGMENT'",
+             NB_POINTS       =SIMP(statut='o',typ='I',max=1),
+             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),
+             COOR_EXTR       =SIMP(statut='o',typ='R',min=2,max=3),),
+
+           b_arc           =BLOC(condition = "TYPE=='ARC'",
+             NB_POINTS       =SIMP(statut='o',typ='I',max=1),
+             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),
+             CENTRE          =SIMP(statut='o',typ='R',min=2,max=3),
+             ANGLE           =SIMP(statut='o',typ='R',max=1),
+             DNOR            =SIMP(statut='f',typ='R',min=2,max=3),),
+
+           b_cylind       =BLOC(condition = ("REPERE=='CYLINDRIQUE' and TYPE!='ARC'"),
+             ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),
+             AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),),
+
+           DISTANCE_MAX    =SIMP(statut='f',typ='R',defaut=0.,
+                fr="Si la distance entre un noeud de la ligne de coupe et le maillage coupé "
+                +"est > DISTANCE_MAX, ce noeud sera ignoré."),
+
+         ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+
+def macr_recal_prod(self,**args ):
+  return listr8_sdaster
+
+MACR_RECAL = MACRO(nom="MACR_RECAL",
+                   op=OPS('Macro.macr_recal_ops.macr_recal_ops'),
+                   sd_prod=macr_recal_prod,
+                   UIinfo={"groupes":("Résolution","Résultats et champs",)},
+                   fr="Réalise le recalage des calculs Aster sur des résultats expérimentaux" \
+                      " ou sur d'autres résultats de calculs",
+            regles=(UN_PARMI('PARA_OPTI','LIST_PARA'),
+                    PRESENT_PRESENT('PARA_OPTI','COURBE'),
+                    PRESENT_PRESENT('LIST_PARA','RESU_EXP'),
+                    PRESENT_PRESENT('LIST_PARA','RESU_CALC'),
+                    EXCLUS('LIST_POIDS','COURBE'),),
+
+         UNITE_ESCL      =SIMP(statut='o',typ='I'),
+         RESU_EXP        =SIMP(statut='f',typ=not_checked,max='**'),
+         COURBE          =FACT(statut='f',max='**',
+              FONC_EXP        =SIMP(statut='o',typ=(fonction_sdaster),),
+              NOM_FONC_CALC   =SIMP(statut='o',typ='TXM',),
+              PARA_X          =SIMP(statut='o',typ='TXM',),
+              PARA_Y          =SIMP(statut='o',typ='TXM',),
+              POIDS           =SIMP(statut='f',typ='R',),
+         ),
+         RESU_CALC       =SIMP(statut='f',typ=not_checked,max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=not_checked,max='**'),
+         PARA_OPTI       =FACT(statut='f',max='**',
+             NOM_PARA = SIMP(statut='o',typ='TXM'),
+             VALE_INI = SIMP(statut='o',typ='R'),
+             VALE_MIN = SIMP(statut='o',typ='R'),
+             VALE_MAX = SIMP(statut='o',typ='R'),
+         ),
+         LIST_POIDS      =SIMP(statut='f',typ=not_checked,max='**'),
+
+         UNITE_RESU      =SIMP(statut='f',typ='I',defaut=91),
+         PARA_DIFF_FINI  =SIMP(statut='f',typ='R',defaut=0.001),
+
+         GRAPHIQUE       =FACT(statut='f',
+             FORMAT          =SIMP(statut='f',typ='TXM',defaut='XMGRACE',into=("XMGRACE","GNUPLOT"),),
+             AFFICHAGE       =SIMP(statut='f',typ='TXM',defaut='TOUTE_ITERATION',into=("TOUTE_ITERATION","ITERATION_FINALE"),),
+             b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'", fr="Mots-clés propres à XMGRACE",
+                 PILOTE          =SIMP(statut='f',typ='TXM',defaut='',
+                                       into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+                            fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+                 UNITE           =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                            fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+             ),
+         ),
+
+
+         # Methodes d'optimisation
+         # -----------------------
+         METHODE         =SIMP(statut='f',typ='TXM',defaut='LEVENBERG',into=("LEVENBERG", "FMIN", "FMINBFGS", "FMINNCG",
+                                                                             "GENETIQUE","HYBRIDE")),
+
+         b_genetique_options=BLOC(condition = "METHODE == 'GENETIQUE' or METHODE == 'HYBRIDE'" ,
+             NB_PARENTS       =SIMP(statut='f',typ='I',defaut=10),
+             NB_FILS          =SIMP(statut='f',typ='I',defaut=5),
+             ECART_TYPE       =SIMP(statut='f',typ='R',defaut=1.),
+             GRAINE           =SIMP(statut='f',typ='I'),
+             ITER_ALGO_GENE   =SIMP(statut='f',typ='I',defaut=10),
+             RESI_ALGO_GENE   =SIMP(statut='f',typ='R',defaut=1.E-3),
+         ),
+
+
+         # Criteres d'arret globaux
+         # -------------------------
+         ITER_MAXI       =SIMP(statut='f',typ='I',defaut=10,    fr="Nombre maximum d'iterations d'optimisation"),
+         ITER_FONC_MAXI  =SIMP(statut='f',typ='I',defaut=1000,  fr="Nombre maximum d'evaluations de la focntionnelle"),
+         RESI_GLOB_RELA  =SIMP(statut='f',typ='R',defaut=1.E-3, fr="Critere d'arret sur la valeur du residu"),
+         TOLE_PARA       =SIMP(statut='f',typ='R',defaut=1.E-8, fr="Critere d'arret sur la valeur des parametres"),
+         TOLE_FONC       =SIMP(statut='f',typ='R',defaut=1.E-8, fr="Critere d'arret sur la valeur de la fonctionnelle"),
+
+
+         # Calculs des gradients
+         # ---------------------
+         b_gradient =BLOC(condition = "METHODE == 'FMINBFGS' or METHODE == 'FMINNCG'" ,
+             GRADIENT        =SIMP(statut='f',typ='TXM',defaut='NON_CALCULE', into=("NON_CALCULE", "NORMAL", "ADIMENSIONNE" )),
+         ),
+
+         b_gradient_levenberg =BLOC(condition = "METHODE == 'LEVENBERG'" ,
+             GRADIENT        =SIMP(statut='f',typ='TXM',defaut='NORMAL', into=( "NORMAL", "ADIMENSIONNE" )),
+         ),
+
+
+         # Mode d'evaluation de l'esclave
+         # ------------------------------
+         CALCUL_ESCLAVE       =FACT(statut='d',
+            LANCEMENT         =SIMP(statut='f', typ='TXM', defaut='INCLUSION',into=("DISTRIBUTION","INCLUSION"),),
+
+            b_eval_distrib =BLOC(condition = "LANCEMENT == 'DISTRIBUTION'",
+                UNITE_SUIVI   =SIMP(statut='f', typ='I',val_min=10,val_max=99,defaut=29,
+                                  fr="Affichage de l'output et/ou error des jobs esclaves dans ce fichier"),
+                MODE          =SIMP(statut='f', typ='TXM',      into=("INTERACTIF","BATCH"),),
+                MEMOIRE       =SIMP(statut='f', typ='I',        fr="Memoire demandee pour les calculs esclaves (Mo)"),
+                TEMPS         =SIMP(statut='f', typ='I',        fr="Temps demandee pour les calculs esclaves (secondes)"),
+                CLASSE        =SIMP(statut='f', typ='TXM',      fr="Classe demandee pour les calculs en batch"),
+                NMAX_SIMULT   =SIMP(statut='f', typ='I',
+                               fr="Nombre de calculs esclaves lances en paralle en mode distribution (non precise = automatique)"),
+            ),
+         ),
+
+         DYNAMIQUE       =FACT(statut='f',
+               MODE_EXP           =SIMP(statut='o',typ='TXM'),
+               MODE_CALC          =SIMP(statut='o',typ='TXM'),
+               APPARIEMENT_MANUEL =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON")),
+                               ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1, into=( 1, 2 ) ),
+);
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE VOLDOIRE F.VOLDOIRE
+
+
+MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",
+                   op=OPS('Macro.macr_spectre_ops.macr_spectre_ops'),
+                   sd_prod=table_sdaster,
+                   reentrant='n',
+                   UIinfo={"groupes":("Post-traitements","Outils-métier",)},
+                   fr="Calcul de spectre, post-traitement de séisme",
+         MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster,),
+         PLANCHER      =FACT(statut='o',max='**',
+            regles=(AU_MOINS_UN('NOEUD','GROUP_NO' ),),
+            NOM           =SIMP(statut='o',typ='TXM',),
+            GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'), ),
+         NOM_CHAM      =SIMP(statut='o',typ='TXM' ,into=('ACCE','DEPL')),
+         CALCUL        =SIMP(statut='o',typ='TXM' ,into=('ABSOLU','RELATIF'),position='global'),
+         b_acce  =BLOC( condition = "NOM_CHAM=='ACCE'",
+           regles=(UN_PARMI('LIST_FREQ','FREQ'),),
+           AMOR_SPEC     =SIMP(statut='o',typ='R',max='**'),
+           LIST_INST     =SIMP(statut='f',typ=listr8_sdaster ),
+           LIST_FREQ     =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ          =SIMP(statut='f',typ='R',max='**'),
+           NORME         =SIMP(statut='o',typ='R'),
+           RESU          =FACT(statut='o',max='**',
+                regles=(UN_PARMI('RESU_GENE','RESULTAT'),),
+                RESU_GENE     =SIMP(statut='f',typ=tran_gene),
+                RESULTAT      =SIMP(statut='f',typ=(dyna_trans,evol_noli)),
+                b_calc  =BLOC( condition = "CALCUL=='RELATIF'",
+                   ACCE_X        =SIMP(statut='o',typ=fonction_sdaster),
+                   ACCE_Y        =SIMP(statut='o',typ=fonction_sdaster),
+                   ACCE_Z        =SIMP(statut='o',typ=fonction_sdaster),), ),
+           IMPRESSION    =FACT(statut='f',
+                TRI           =SIMP(statut='f',typ='TXM',defaut='AMOR_SPEC',into=("AMOR_SPEC","DIRECTION",),),
+                FORMAT        =SIMP(statut='f',typ='TXM',defaut='TABLEAU',into=("TABLEAU","XMGRACE",),),
+                UNITE         =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                                    fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+                b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
+                   PILOTE        =SIMP(statut='f',typ='TXM',defaut='',
+                                 into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),),),
+                TOUT          =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON",),),
+                              ),
+         ),
+         b_depl  =BLOC( condition = "NOM_CHAM=='DEPL'",
+           LIST_INST     =SIMP(statut='f',typ=listr8_sdaster),
+           RESU          =FACT(statut='o',max=3,
+                regles=(UN_PARMI('RESU_GENE','RESULTAT'),),
+                RESU_GENE     =SIMP(statut='f',typ=tran_gene),
+                RESULTAT      =SIMP(statut='f',typ=(dyna_trans,evol_noli)),
+                b_calc  =BLOC( condition = "CALCUL=='ABSOLU'",
+                   DEPL_X        =SIMP(statut='o',typ=fonction_sdaster),
+                   DEPL_Y        =SIMP(statut='o',typ=fonction_sdaster),
+                   DEPL_Z        =SIMP(statut='o',typ=fonction_sdaster),),),
+         ),
+)
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+
+
+def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
+  if isinstance(NUME_DDL,CO) :
+    self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+  else:
+    self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
+  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=OPS('Macro.macro_elas_mult_ops.macro_elas_mult_ops'),
+                      sd_prod=macro_elas_mult_prod,
+                      reentrant='f',
+                      UIinfo={"groupes":("Résolution",)},
+                      fr="Calculer les réponses statiques linéaires pour différents cas " \
+                         "de charges ou modes de Fourier",
+         regles=(UN_PARMI('CHAR_MECA_GLOBAL','LIAISON_DISCRET', ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster,CO)),
+         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=(char_meca),validators=NoRepeat(),max='**'),
+         LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         CAS_CHARGE      =FACT(statut='o',max='**',
+           regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
+                   UN_PARMI('CHAR_MECA','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),validators=NoRepeat(),max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("EFGE_ELNO","EPOT_ELEM","SIGM_ELNO","SIEF_ELGA",
+                                       "SICA_ELNO","EFCA_ELNO","DEGE_ELNO","EPSI_ELNO",
+                                       "EPSI_ELGA","EPSG_ELNO","EPSG_ELGA","EPSP_ELNO","EPSP_ELGA",
+                                       "ECIN_ELEM","FLUX_ELGA","FLUX_ELNO","SOUR_ELGA",
+                                       "PRAC_ELNO","INTE_ELNO",
+                                       "SIZ1_NOEU","ERZ1_ELEM","SIZ2_NOEU",
+                                       "ERZ2_ELEM","VNOR_ELEM_DEPL","ERME_ELNO",
+                                       "ERME_ELEM","SIEQ_ELNO","SIEQ_ELGA","EPEQ_ELNO",
+                                       "QIRE_ELEM","QIRE_ELNO","QIZ1_ELEM","QIZ2_ELEM",
+                                       "EPEQ_ELGA","FORC_NODA","REAC_NODA","EPSI_NOEU","SIGM_NOEU",
+                                       "EFGE_NOEU","SIEQ_NOEU","EPEQ_NOEU","FLUX_NOEU") ),
+           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_sdaster),
+         ),
+         SOLVEUR         =FACT(statut='d',
+           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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+
+
+def macro_expans_prod(self, MODELE_MESURE, RESU_NX, RESU_EX, RESU_ET, RESU_RD, **args):
+    RESU_EXP = MODELE_MESURE['MESURE']
+    self.type_sdprod(RESU_NX, mode_meca)
+    for res in (RESU_EX, RESU_ET, RESU_RD):
+        if isinstance(res, CO):
+            if AsType(RESU_EXP) == mode_meca:
+                self.type_sdprod(res, mode_meca)
+            else:
+                self.type_sdprod(res, dyna_harmo)
+        else:
+            self.type_sdprod(res,res.__class__)
+    return None
+
+MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
+                   op=OPS('Macro.macro_expans_ops.macro_expans_ops'),
+                   sd_prod=macro_expans_prod,
+                   reentrant='n',
+                   UIinfo={"groupes":("Outils-métier","Dynamique",)},
+                   fr="Outil d'expansion de resultats exprimentaux sur une base definie sur un modele numerique",
+                        MODELE_CALCUL   = FACT(statut='o',
+                           MODELE          = SIMP(statut='o',typ=(modele_sdaster) ),
+                           BASE            = SIMP(statut='o',typ=(mode_meca,) ), 
+                           NUME_MODE       = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+                           NUME_ORDRE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+
+                                             ),
+                        MODELE_MESURE   = FACT(statut='o',
+                           MODELE          = SIMP(statut='o',typ=(modele_sdaster) ),
+                           MESURE          = SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
+                           NOM_CHAM        = SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                                  into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU",) ),
+                           NUME_MODE       = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+                           NUME_ORDRE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+
+                                             ),
+                        NUME_DDL       = SIMP(statut='f',typ=(nume_ddl_sdaster)),
+                        RESU_NX        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESU_EX        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESU_ET        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESU_RD        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESOLUTION     = FACT(statut='f',
+                           METHODE =SIMP(statut='f',typ='TXM',defaut="LU",into=("LU","SVD",) ),
+                           b_svd   =BLOC(condition="METHODE=='SVD'",
+                                         EPS=SIMP(statut='f',typ='R',defaut=0. ),
+                                        ),
+                           REGUL   =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
+                           b_regul =BLOC(condition="REGUL!='NON'",
+                                         regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
+                                         COEF_PONDER   =SIMP(statut='f',typ='R',defaut=0.     ,max='**' ),
+                                         COEF_PONDER_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+                                        ),
+                                             ),
+                   )
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+
+
+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_gene_r)
+  self.type_sdprod(MATR_MASS_AJOU,matr_asse_gene_r)
+  self.type_sdprod(MATR_RIGI_AJOU,matr_asse_gene_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=OPS('Macro.macro_matr_ajou_ops.macro_matr_ajou_ops'),
+                      sd_prod=macro_matr_ajou_prod,
+                      UIinfo={"groupes":("Résolution","Matrices et vecteurs",)},
+                      fr="Calculer de facon plus condensée qu'avec CALC_MATR_AJOU des " \
+                         "matrices de masse, d'amortissement ou de rigidité ajoutés",
+      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_sdaster),
+         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',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',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',
+           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_sdaster),
+         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_RIGI_AJOU  =SIMP(statut='f',typ=CO,),
+         MATR_AMOR_AJOU  =SIMP(statut='f',typ=CO,),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca,),
+         FORC_AJOU       =FACT(statut='f',max='**',
+           DIRECTION     =SIMP(statut='o',typ='R',max=3),
+           NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           VECTEUR       =SIMP(statut='o',typ=CO),
+         ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MACRO_MATR_AJOU'),
+#-------------------------------------------------------------------
+         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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET 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")
+  if isinstance(NUME_DDL,CO) :
+    self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+  else:
+    self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
+  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","MECA_GYRO" ) : 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",) : 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=OPS('Macro.macro_matr_asse_ops.macro_matr_asse_ops'),
+                      UIinfo={"groupes":("Matrices et vecteurs",)},
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (rigidité, masse, amortissement,...) ",
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         INST            =SIMP(statut='f',typ='R',defaut=0.),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**'),
+         CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+         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_mumps         =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+           RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+         ),
+         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"  ),
+         ),
+         b_petsc         =BLOC(condition = "METHODE == 'PETSC'",fr="Paramètres de la méthode PETSC",
+           RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+         ),
+         ),
+
+         MATR_ASSE       =FACT(statut='o',max='**',
+             MATRICE         =SIMP(statut='o',typ=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","MECA_GYRO",
+                                         "RIGI_THER","MASS_THER",
+                                         "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",)
+                                   ),
+
+             b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+               MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0),
+             ),
+
+             b_rigi_geom = BLOC( condition = "OPTION=='RIGI_GEOM'",
+               SIEF_ELGA       =SIMP(statut='o',typ=cham_elem),
+               MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0),
+             ),
+
+             b_rigi_meca_lagr = BLOC( condition = "OPTION=='RIGI_MECA_LAGR'",
+               THETA           =SIMP(statut='o',typ=theta_geom),
+               PROPAGATION     =SIMP(statut='f',typ='R'),
+             ),
+
+             b_rigi_ther = BLOC( condition = "OPTION=='RIGI_THER'",
+               MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0),
+             ),
+
+         ), # fin MATR_ASSE
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+
+
+MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",
+                    op=OPS('Macro.macro_miss_3d_ops.macro_miss_3d_ops'),
+                    fr="Préparation des données puis exécution du logiciel MISS3D",
+                    UIinfo={"groupes":("Résolution","Outils-métier",)},
+         OPTION          =FACT(statut='o',
+           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'),
+         VERSION         =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4","V1_5",),defaut="V1_4"),
+         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),
+         TABLE_SOL       =SIMP(statut='f',typ=table_sdaster, fr="Caractéristiques du sol"),
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+         UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=0),
+         PARAMETRE       =FACT(statut='f',
+           regles=(PRESENT_PRESENT('FREQ_MIN','FREQ_MAX','FREQ_PAS'),
+                   PRESENT_PRESENT('CONTR_NB','CONTR_LISTE'),
+                   PRESENT_PRESENT('LFREQ_NB','LFREQ_LISTE'),
+                   PRESENT_PRESENT('OFFSET_MAX','OFFSET_NB'),
+                   PRESENT_PRESENT('SPEC_MAX','SPEC_NB'),),
+           FREQ_MIN        =SIMP(statut='f',typ='R'),
+           FREQ_MAX        =SIMP(statut='f',typ='R'),
+           FREQ_PAS        =SIMP(statut='f',typ='R'),
+           Z0              =SIMP(statut='f',typ='R'),
+           SURF            =SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+           RFIC            =SIMP(statut='f',typ='R'),
+           FICH_RESU_IMPE  =SIMP(statut='f',typ='TXM'),
+           FICH_RESU_FORC  =SIMP(statut='f',typ='TXM'),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII",),defaut="ASCII"),
+           DREF            =SIMP(statut='f',typ='R'),
+           ALGO            =SIMP(statut='f',typ='TXM',into=("DEPL","REGU")),
+           OFFSET_MAX      =SIMP(statut='f',typ='R'),
+           OFFSET_NB       =SIMP(statut='f',typ='I'),
+           SPEC_MAX        =SIMP(statut='f',typ='R'),
+           SPEC_NB         =SIMP(statut='f',typ='I'),
+           ISSF            =SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+           FICH_POST_TRAI  =SIMP(statut='f',typ='TXM'),
+           CONTR_NB        =SIMP(statut='f',typ='I'),
+           CONTR_LISTE     =SIMP(statut='f',typ='R',max='**'),
+           LFREQ_NB        =SIMP(statut='f',typ='I'),
+           LFREQ_LISTE     =SIMP(statut='f',typ='R',max='**'),
+           DIRE_ONDE       =SIMP(statut='f',typ='R',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+
+MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",
+                     op=OPS('Macro.macro_mode_meca_ops.macro_mode_meca_ops'),
+                     sd_prod=mode_meca,
+                     reentrant='n',fr="Lancer une succession de calculs de modes propres réels",
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         MATR_A          =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_B          =SIMP(statut='o',typ=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",) ),
+         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 ),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",
+                               into=("MODE_RIGIDE","SANS") ),
+         CALC_FREQ       =FACT(statut='d',min=0,
+           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',min=2,validators=NoRepeat(),max='**', ),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),
+           NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),
+           DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+           COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+           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 ),
+           STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=0,
+           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',max='**',
+           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',
+           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',
+           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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+
+
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,STOCKAGE,**args ):
+  if MATR_ASSE_GENE != None:
+    for m in MATR_ASSE_GENE:
+      self.type_sdprod(m['MATRICE'],matr_asse_gene_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=OPS('Macro.macro_proj_base_ops.macro_proj_base_ops'),
+                      regles=(AU_MOINS_UN('MATR_ASSE_GENE','VECT_ASSE_GENE')),
+                      UIinfo={"groupes":("Matrices et vecteurs","Dynamique",)},
+                      sd_prod=macro_proj_base_prod,
+         fr="Projection des matrices et/ou vecteurs assemblés sur une base (modale ou de RITZ)",
+         BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
+         STOCKAGE        =SIMP(statut='f',typ='TXM',defaut="PLEIN",into=("PLEIN","DIAG") ),
+         MATR_ASSE_GENE  =FACT(statut='f',max='**',
+           MATRICE         =SIMP(statut='o',typ=CO,),
+           regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE',),),
+           MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
+           MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
+         ),
+         VECT_ASSE_GENE  =FACT(statut='f',max='**',
+           VECTEUR         =SIMP(statut='o',typ=CO,),
+           regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE',),),
+           TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+           VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 01/03/2011   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+#
+MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
+              UIinfo={"groupes":("Gestion du travail",)},
+              fr="Compilation des catalogues d'éléments et couverture des calculs élémentaires",
+              regles=(UN_PARMI('ELEMENT','TYPE_ELEM', ),),
+
+              ELEMENT     =FACT(statut='f',),
+
+              UNITE       =SIMP(statut='f',typ='I',defaut=8),       
+              TYPE_ELEM   =FACT(statut='f',),
+);
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
+                   fr="Résoudre un problème de mécanique statique linéaire",reentrant='f',
+            UIinfo={"groupes":("Résolution","Mécanique",)},
+         regles=(EXCLUS("INST","LIST_INST"),
+                 AU_MOINS_UN('CHAM_MATER','CARA_ELEM',),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         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',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           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_sdaster),
+         INST_FIN        =SIMP(statut='f',typ='R'),
+         OPTION          =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA","SANS"),defaut="SIEF_ELGA",max=1,
+             fr="seule option : contraintes aux points de Gauss. Utiliser CALC_ELEM pour les autres.",
+                          ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MECA_STATIQUE'),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
+                    fr="Calcul des modes propres d'une structure à répétitivité cyclique à partir"
+                        +" d'une base de modes propres réels",
+                    reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         BASE_MODALE     =SIMP(statut='o',typ=mode_meca ),
+         NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
+         NB_SECTEUR      =SIMP(statut='o',typ='I' ),
+         LIAISON         =FACT(statut='o',
+           DROITE          =SIMP(statut='o',typ='TXM' ),
+           GAUCHE          =SIMP(statut='o',typ='TXM' ),
+           AXE             =SIMP(statut='f',typ='TXM' ),
+         ),
+         VERI_CYCL       =FACT(statut='f',
+           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',
+           regles=(UN_PARMI('TOUT_DIAM','NB_DIAM'),),
+           TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NB_DIAM         =SIMP(statut='f',typ='I',validators=NoRepeat(),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',),
+           ),
+           b_bande       =BLOC(condition = "OPTION == 'BANDE'",
+             FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2),
+           ),
+#  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 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE O.BOITEAU
+
+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="Calcul des modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         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',typ='TXM',defaut="DYNAMIQUE",
+                               into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
+         b_dynam         =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='o',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 ),
+
+             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',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',validators=NoRepeat(),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, ),
+
+             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, ),
+             ),
+           ),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MODE_ITER_INV'),
+#-------------------------------------------------------------------
+
+         CALC_MODE       =FACT(statut='d',min=0,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,
+           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"  ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des param\350tres de sensibilit\351.",
+                               ang="List of sensitivity parameters",
+         ),
+         b_sensibilite   =BLOC(condition = "SENSIBILITE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             EXCIT           =FACT(statut='f',max='**',),  # que pour NMDOME
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE O.BOITEAU
+
+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_depl_c : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  if AsType(MATR_A) == matr_asse_gene_c : 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="Calcul des modes propres par itérations simultanées ; valeurs propres et"
+                         +" modes propres réels ou complexes",
+                      reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,
+                               matr_asse_gene_r,matr_asse_gene_c,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,matr_asse_gene_r) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
+         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 ),
+         ),
+         b_qz =BLOC(condition = "METHODE == 'QZ'",
+           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),
+         ),
+         TYPE_RESU       =SIMP(statut='f',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,
+             OPTION       =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+                                   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',
+                                     fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+               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",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),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' ),
+             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,
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+                                   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',
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               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,validators=NoRepeat(),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","COMPLEXE"),
+                                   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' ),
+             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 ),
+             ),
+           ),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MODE_ITER_SIMULT'),
+#-------------------------------------------------------------------
+
+         VERI_MODE       =FACT(statut='d',min=0,
+           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") ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des param\350tres de sensibilit\351.",
+                               ang="List of sensitivity parameters",
+         ),
+         b_sensibilite   =BLOC(condition = "SENSIBILITE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             EXCIT           =FACT(statut='f',max='**',),  # que pour NMDOME
+         ),
+         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 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
+                   fr="Calcul de déformées statiques pour un déplacement, une force ou une accélération unitaire imposé",
+                   reentrant='n',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+
+         regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE','MODE_INTERF'),
+                 PRESENT_PRESENT('MODE_INTERF','MATR_MASS'),
+                 PRESENT_PRESENT('PSEUDO_MODE','MATR_MASS'),
+                 ),
+
+
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+
+
+
+         MODE_STAT       =FACT(statut='f',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',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',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='**'),
+           ),
+         ),
+         MODE_INTERF    =FACT(statut='f',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='**'),
+           NBMOD           =SIMP(statut='o',typ='I',defaut= 1),
+           FREQ            =SIMP(statut='o',typ='R',defaut= 1.0),
+
+         ),
+
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('MODE_STATIQUE'),
+#-------------------------------------------------------------------
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
+                      reentrant='f',
+            fr="Définir la base modale d'une structure sous écoulement",
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+#  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_sdaster ),
+         NUME_VITE_FLUI  =SIMP(statut='o',typ='I' ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),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 14/02/2011   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+#  RECUPERATION DES EFFORTS VIA YACS POUR COUPLAGE IFS
+#
+MODI_CHAR_YACS=OPER(nom            = "MODI_CHAR_YACS",
+                   op              = 112,
+                   sd_prod         = char_meca,
+                   reentrant       = 'o',
+                   UIinfo          = {"groupes":("Résultats et champs",)},
+                   fr              = "Reception des forces nodales via YACS lors du couplage de  Code_Aster et Saturne",
+                   CHAR_MECA       = SIMP(statut ='o', typ = char_meca),
+                   MATR_PROJECTION = SIMP(statut ='o', typ = corresp_2_mailla,),
+                   NOM_CMP_IFS     = SIMP(statut ='o', typ = 'TXM',validators = NoRepeat(), max = '**'),
+                   VIS_A_VIS       = FACT(statut ='o', max = '**',
+                                   GROUP_MA_1 = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+                                   GROUP_NO_2 = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**'),),
+                   INST            = SIMP(statut='o',typ='R', ),
+                   PAS             = SIMP(statut='o',typ='R', ),
+                   NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                   INFO            = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
+                   fr="Effectuer des modifications sur un maillage existant: réorienter des mailles servant,"
+                      +" à l'application d'une pression, à la modélisation du contact,...",
+                   reentrant='o',
+            UIinfo={"groupes":("Maillage",)},
+      regles=(AU_MOINS_UN('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'TRANSLATION','ROTATION','MODI_BASE','ECHELLE','ORIE_SHB','SYMETRIE',
+                       'ORIE_LIGNE',),
+              PRESENT_ABSENT('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('DEFORME','ORIE_FISSURE','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('EQUE_PIQUA','ORIE_FISSURE','DEFORME','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_FISSURE','DEFORME','EQUE_PIQUA',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'PLAQ_TUBE','MODI_MAILLE','ORIE_LIGNE'),
+              PRESENT_ABSENT('PLAQ_TUBE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE','ORIE_LIGNE'),
+              PRESENT_ABSENT('MODI_MAILLE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','ORIE_LIGNE'),
+              EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
+              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),
+              EXCLUS('ROTATION','MODI_BASE'),
+              EXCLUS('SYMETRIE','ROTATION'),
+              EXCLUS('SYMETRIE','TRANSLATION'),
+              EXCLUS('SYMETRIE','MODI_BASE'),
+              EXCLUS('SYMETRIE','ECHELLE'),
+              ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+
+         ORIE_FISSURE    =FACT(statut='f',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+
+         DEFORME         =FACT(statut='f',
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRAN","TRAN_APPUI") ),
+           DEPL            =SIMP(statut='o',typ=cham_no_sdaster ),
+        b_deform        =BLOC(condition = "OPTION=='TRAN_APPUI'",
+           GROUP_NO_APPUI = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),
+           GROUP_NO_STRU  = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),),
+         ),
+
+         EQUE_PIQUA      =FACT(statut='f',
+           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' ),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+           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',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA_SURF   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         ORIE_PEAU_3D    =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA_VOLU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         ORIE_SHB       =FACT(statut='f',max=1,
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         ORIE_NORM_COQUE =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           VECT_NORM       =SIMP(statut='f',typ='R',max=3),
+           b_vect_norm     =BLOC(condition = "VECT_NORM != None",
+             regles=UN_PARMI('NOEUD','GROUP_NO'),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+           ),
+         ),
+         ORIE_LIGNE =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           VECT_TANG       =SIMP(statut='f',typ='R',max=3),
+           b_vect_tang     =BLOC(condition = "VECT_TANG != None",
+             regles=UN_PARMI('NOEUD','GROUP_NO'),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+           ),
+         ),
+         PLAQ_TUBE       =FACT(statut='f',
+           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',
+           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',max=1,
+           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,validators=NoRepeat(),max=1),
+           MAILLE_FOND     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max=1),
+           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+           NOEUD_FOND      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+         ),
+         MODI_BASE       =FACT(statut='f',
+           VECT_X          =SIMP(statut='o',typ='R',min=2,max=3),
+           VECT_Y          =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+         ECHELLE         =SIMP(statut='f',typ='R',),
+         TRANSLATION     =SIMP(statut='f',typ='R',min=2,max=3),
+         ROTATION        =FACT(statut='f',max='**',
+           POIN_1           =SIMP(statut='o',typ='R',min=2,max=3),
+           ANGL             =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+           regles=(EXCLUS('DIR','POIN_2'),),
+           POIN_2           =SIMP(statut='f',typ='R',min=2,max=3),
+           DIR              =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+         SYMETRIE        =FACT(statut='f',max='**',
+                          fr = "Symétrie du maillage par rapport à un plan en 3D ou à une droite en 2D.",
+           POINT           =SIMP(statut='o',typ='R',min=2,max=3,
+                            fr="Point appartenant à la droite ou au plan."),
+           AXE_1           =SIMP(statut='o',typ='R',min=2,max=3,
+                            fr="Vecteur directeur de la droite ou 1er vecteur appartenant au plan."),
+           AXE_2           =SIMP(statut='f',typ='R',min=3,max=3,
+                            fr="2nd vecteur appartenant du plan."),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+MODI_MODELE=OPER(nom="MODI_MODELE",op= 103,sd_prod=modele_sdaster,reentrant='o',
+         UIinfo={"groupes":("Modélisation",)},
+         fr="Modifier la partition d'un modèle (parallélisme) ",
+
+         MODELE          =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
+
+         PARTITION         =FACT(statut='d',
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="GROUP_ELEM",
+                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE","GROUP_ELEM")),
+             b_dist_maille          =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
+                 CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
+             ),
+             b_dist_sd          =BLOC(condition = "PARALLELISME == 'SOUS_DOMAINE'",
+                 PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
+                 CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 27/06/2011   AUTEUR MASSIN P.MASSIN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu="U4.44.12-e",reentrant='f',
+            UIinfo={"groupes":("Modélisation","Rupture",)},
+                           fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
+                           
+    MODELE_IN       =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
+    FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+    CRITERE         =SIMP(statut='f',typ='R',defaut=1.1E-9),
+    INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,)),
+    CONTACT        
+     =SIMP(statut='f',typ='TXM',defaut='SANS',into=("P1P1","P1P1A","P2P1","SANS"),min=1,max=1,),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE KHAM M.KHAM
+MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
+            fr="Calculer les obstacles dans les systèmes guidage-tube après usure",
+            reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+      regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),
+              PRESENT_PRESENT('V_USUR_TUBE','V_USUR_OBST'),),
+         OBSTACLE        =SIMP(statut='f',typ=table_fonction),
+         GUIDE           =SIMP(statut='o',typ=table_sdaster),
+         CRAYON          =SIMP(statut='f',typ=table_sdaster),
+         TABL_USURE      =SIMP(statut='f',typ=table_sdaster),
+         INST            =SIMP(statut='f',typ='R'),  
+         R_MOBILE        =SIMP(statut='f',typ='R'),  
+         PERCEMENT       =SIMP(statut='f',typ='R',defaut=1),  
+         V_USUR_TUBE     =SIMP(statut='f',typ='R',max='**'),
+         V_USUR_OBST     =SIMP(statut='f',typ='R',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 23/08/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+def modi_repere_prod(RESULTAT,**args):
+  if AsType(RESULTAT) != None : return AsType(RESULTAT)
+
+MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+                    fr="Calcule des résultats dans le repère cylindrique",
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+
+         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',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+
+         MODI_CHAM       =FACT(statut='o',max='**',
+           TYPE_CHAM       =SIMP(statut='o',typ='TXM',
+              into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D","COQUE_GENE"),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+           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 ),),
+           b_coque_gene    =BLOC(condition = "TYPE_CHAM=='COQUE_GENE'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=8,max=8 ),),
+         ),
+         REPERE          =SIMP(statut='f',typ='TXM',defaut="UTILISATEUR",position='global',
+                                 into=("UTILISATEUR","CYLINDRIQUE","COQUE"),),
+         AFFE     =FACT(statut='o',max='**',
+           b_cyl      =BLOC(condition = "REPERE == 'CYLINDRIQUE'",            
+             ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),
+             AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),),
+           b_uti      =BLOC(condition = "REPERE == 'UTILISATEUR'",             
+                            regles=(UN_PARMI('ANGL_NAUT','VECT_X'),
+                                    UN_PARMI('ANGL_NAUT','VECT_Y'),
+                            ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             VECT_X          =SIMP(statut='f',typ='R',min=3,max=3 ),
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3 ),),
+           b_coq      =BLOC(condition = "REPERE == 'COQUE'",             
+                            regles=(UN_PARMI('ANGL_REP','VECTEUR'),),
+             ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
+             VECTEUR         =SIMP(statut='f',typ='R',min=3,max=3),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+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="Normer des modes propres en fonction d'un critère choisi par l'utilisateur",
+               reentrant='f',
+            UIinfo={"groupes":("Résolution","Dynamique",)},
+         regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),
+                 CONCEPT_SENSIBLE('SEPARE'),
+                 DERIVABLE('MODE'),),
+         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',validators=NoRepeat(),max='**'),
+         SANS_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         MODE_SIGNE =FACT(statut='f',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" ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des param\350tres de sensibilit\351.",
+                               ang="List of sensitivity parameters",
+         ),
+#         b_base    =BLOC(condition = "AsType(MODE) == base_modale",
+#              MASSE = SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ), ),
+#              RAIDE = SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ), ),
+#              AMOR  = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+#         ),
+         MASSE = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ), ),
+         RAIDE = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ), ),
+         AMOR  = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 18/01/2011   AUTEUR BOITEAU O.BOITEAU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+              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',validators=NoRepeat(),max=100,
+                               typ=(matr_elem_depl_r ,matr_elem_depl_c,matr_elem_temp_r ,matr_elem_pres_c) ),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+         b_modele        =BLOC(condition = "MODELE != None",
+           CHARGE     =SIMP(statut='f',validators=NoRepeat(),max='**',typ=(char_meca,char_ther,char_acou, ),),
+         ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","PETSC","MUMPS") ),
+         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_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+           RENUM        =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","SCOTCH","AUTO")),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC' or METHODE=='PETSC'",fr="paramètres associés à la GCPC ou PETSc",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+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 etabli en coordonnées généralisees",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         regles=UN_PARMI('MODELE_GENE','BASE'),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+             b_modele_gene     =BLOC(condition = "MODELE_GENE != None",
+               STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
+               METHODE            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("INITIAL","CLASSIQUE","ELIMINE") ),
+                                    ),
+         BASE     =SIMP(statut='f',typ=(mode_meca,mode_gene ) ),
+             b_base     =BLOC(condition = "BASE != None",
+               STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="PLEIN",into=("DIAG","PLEIN") ),
+               NB_VECT     =SIMP(statut='f',typ='I',defaut= 9999 ),
+                             ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+
+def observation_prod(self, RESULTAT, **args):
+    if  AsType(RESULTAT) == mode_meca :
+        return mode_meca
+    elif AsType(RESULTAT) == evol_elas :
+        return evol_elas
+    elif AsType(RESULTAT) == dyna_harmo :
+        return dyna_harmo
+    elif AsType(RESULTAT) == dyna_trans :
+        return dyna_trans
+    else :
+        return None
+
+OBSERVATION=MACRO(nom="OBSERVATION",
+                  op=OPS('Macro.observation_ops.observation_ops'),
+                  UIinfo={"groupes":("Matrices et vecteurs",)},
+                  sd_prod=observation_prod,
+                  fr="Calcul de l'observabilite d'un champ aux noeuds ",
+#
+         MODELE_1        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_2        =SIMP(statut='o',typ=modele_sdaster),
+         RESULTAT        =SIMP(statut='o',typ=(mode_meca,evol_elas,dyna_harmo,dyna_trans,) ),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO(),),
+
+#        ------------------------------------------------------------------
+
+         regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','FREQ','LIST_FREQ','NUME_MODE','INST','LIST_INST' ),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+#        ------------------------------------------------------------------
+#        OPTIONS DE PROJ_CHAMP (SANS MC FACTEUR PARTICULIER)
+#        ------------------------------------------------------------------
+         PROJECTION     =SIMP(statut='f',max=1,typ='TXM',into=("OUI","NON"),defaut="OUI"),
+         CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+         DISTANCE_MAX    =SIMP(statut='f',typ='R',
+                fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+         ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
+                fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+#           PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+#                fr="Si le résultat est un mode_xxx ou une base_xxx, on peut prolonger"
+#                   +" les champs par zéro la ou la projection ne donne pas de valeurs."),
+
+         MATR_A          =SIMP(statut='f',typ=(matr_asse_depl_r) ),
+         MATR_B          =SIMP(statut='f',typ=(matr_asse_depl_r) ),
+         VIS_A_VIS       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+             ),
+
+#        ------------------------------------------------------------------
+#        MODI_REPERE
+#        ------------------------------------------------------------------
+         MODI_REPERE     =FACT(statut='f',max='**',
+         regles=(UN_PARMI('REPERE'),
+                 AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+#
+           TYPE_CHAM       =SIMP(statut='f',typ='TXM',
+                                 into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),
+                                       defaut="VECT_3D"),
+           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='f',typ='TXM',min=3,max=3,defaut=('DX','DY','DZ') ),),
+           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='f',typ='TXM',min=4,max=4,defaut=('EPXX','EPYY','EPZZ','EPXY',) ),),
+           b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+              NOM_CMP         =SIMP(statut='f',typ='TXM',min=6,max=6,defaut=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',),),),
+
+           REPERE          =SIMP(statut='o',typ='TXM',
+                                 into=("UTILISATEUR","CYLINDRIQUE","NORMALE","DIR_JAUGE"),),
+           b_normale       =BLOC(condition = "REPERE=='NORMALE'",
+             regles=(UN_PARMI('VECT_X','VECT_Y')),
+             VECT_X          =SIMP(statut='f',typ='R',min=3,max=3),
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3), ),
+           b_utilisateur   =BLOC(condition = "REPERE=='UTILISATEUR'",
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3)),
+           b_cylindrique   =BLOC(condition = "REPERE=='CYLINDRIQUE'",
+             ORIGINE         =SIMP(statut='o',typ='R',min=2,max=3),
+             AXE_Z           =SIMP(statut='o',typ='R',min=3,max=3)),
+           b_dir_jauge       =BLOC(condition = "REPERE=='DIR_JAUGE'",
+             VECT_X          =SIMP(statut='f',typ='R',min=3,max=3),
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3), ),
+         ),
+
+#        ------------------------------------------------------------------
+#        EPSI_MOYENNE
+#        ------------------------------------------------------------------
+         EPSI_MOYENNE     =FACT(statut='f',max='**',
+                       regles=(AU_MOINS_UN('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           NOEUD       = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO     = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           SEUIL_VARI      =SIMP(statut='f',typ='R',validators=NoRepeat(),defaut=0.1,),
+           MASQUE          =SIMP(statut='f',typ='TXM',max=6),
+         ),
+
+#        ------------------------------------------------------------------
+#        FILTRE DES DDL
+#        ------------------------------------------------------------------
+         FILTRE     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('DDL_ACTIF'),
+#                           'MASQUE'),
+           AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),into=C_NOM_CHAM_INTO(),),
+
+#
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max=6),
+# TODO : mettre en place le systeme de masques
+#           MASQUE          =SIMP(statut='f',typ='TXM',max=6),
+         ),
+#        ------------------------------------------------------------------
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+      )  ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BARGELLINI R.BARGELLINI
+
+POST_BORDET =MACRO(nom="POST_BORDET",
+                   op=OPS('Macro.post_bordet_ops.post_bordet_ops'),
+                   sd_prod=table_sdaster,
+                   UIinfo={"groupes":("Outils-métier","Rupture",)},
+                   reentrant='n',
+                   fr="calcul de la probabilite de clivage via le modele de Bordet",
+         regles=(UN_PARMI('TOUT','GROUP_MA'),
+                 UN_PARMI('INST','NUME_ORDRE'),
+                 ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles"),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),),
+         PRECISION =SIMP(statut='f',typ='R',validators=NoRepeat(),val_min=0.,val_max=1E-3,defaut=1E-6),
+         CRITERE   =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU") ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),),
+         PROBA_NUCL      =SIMP(statut='f',typ='TXM',into=("NON","OUI"), defaut="NON",
+                      fr="prise en compte du facteur exponentiel"),
+         b_nucl          =BLOC( condition = "PROBA_NUCL=='OUI'",
+                          PARAM =FACT(statut='o',
+                                 M                =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIGM_REFE         =SIMP(statut='o',typ=(fonction_sdaster),val_min=0.E+0),
+                                 VOLU_REFE        =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIG_CRIT         =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_REFE       =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_CALC       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster)),
+                                 DEF_PLAS_REFE    =SIMP(statut='o',typ='R'),),),
+
+         b_prop          =BLOC( condition = "PROBA_NUCL=='NON'",
+                          PARAM =FACT(statut='o',
+                                 M                =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIGM_REFE         =SIMP(statut='o',typ=fonction_sdaster,val_min=0.E+0),
+                                 VOLU_REFE        =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SIG_CRIT         =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_REFE       =SIMP(statut='o',typ='R',val_min=0.E+0),
+                                 SEUIL_CALC       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),),
+                                 ),
+                                 ),
+
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Resultat d'une commande globale STAT_NON_LINE"),
+         TEMP            =SIMP(statut='o',typ=(fonction_sdaster,'R')),
+         COEF_MULT       =SIMP(statut='f',typ='R', defaut=1.),
+           )
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR MICOL A.MICOL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+def post_cham_xfem_prod(RESULTAT,**args ):
+  if AsType(RESULTAT) == evol_noli  : return evol_noli
+  if AsType(RESULTAT) == mode_meca : return mode_meca
+  if AsType(RESULTAT) == evol_elas  : return evol_elas
+
+  raise AsException("type de concept resultat non prevu")
+
+POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=post_cham_xfem_prod,
+                    reentrant='n',UIinfo={"groupes":("Post-traitements","Rupture",)},
+            fr="Calcul des champs DEPL, SIEF_ELGA et VARI_ELGA sur le maillage de visualisation (fissuré)",
+    MAILLAGE_SAIN = SIMP(statut='f',typ=maillage_sdaster),
+    RESULTAT      = SIMP(statut='o',typ=resultat_sdaster),
+    MODELE_VISU   = SIMP(statut='o',typ=modele_sdaster,),
+    INFO          = SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+);                     
+#& MODIF COMMANDE  DATE 11/10/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+def post_champ_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+
+POST_CHAMP=OPER(nom="POST_CHAMP",op=155,sd_prod=post_champ_prod, reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Eléments de structure",)},
+                 fr="extraction de champs sur un sous-point. ",
+
+         regles=(UN_PARMI('EXTR_COQUE','EXTR_TUYAU','EXTR_PMF','MIN_MAX_SP','COQU_EXCENT'),
+                 UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_harmo,mult_elas) ),
+
+
+#====
+# Sélection des numéros d'ordre pour lesquels on fait le calcul :
+#====
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+         b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+         ),
+
+
+#====
+# Sélection de la zone géométrique:
+#====
+         TOUT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE     =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+
+
+
+#====
+# Extraction sur un sous-point d'une coque :
+#====
+         EXTR_COQUE  =FACT(statut='f', max=1, fr="extraction sur un sous-point d'une coque",
+           NOM_CHAM     =SIMP(statut='o',typ='TXM',into=("SIEF_ELGA","SIGM_ELGA","SIGM_ELNO",),),
+           NUME_COUCHE  =SIMP(statut='o',typ='I',val_min=1,
+                             fr="numero de couche dans l'épaisseur de la coque" ),
+           NIVE_COUCHE  =SIMP(statut='o',typ='TXM',into=("SUP","INF","MOY"),
+                             fr="position dans l'épaisseur de la couche" ),
+           ),
+
+
+#====
+# Extraction sur un sous-point d'un tuyau :
+#====
+         EXTR_TUYAU  =FACT(statut='f', max=1, fr="extraction sur un sous-point d'un tuyau",
+           NOM_CHAM     =SIMP(statut='o',typ='TXM',into=("SIGM_ELGA","SIGM_ELNO",),),
+           NUME_COUCHE  =SIMP(statut='o',typ='I',val_min=1,
+                             fr="numero de couche dans l'épaisseur du tuyau" ),
+           NIVE_COUCHE  =SIMP(statut='o',typ='TXM',into=("SUP","INF","MOY"),
+                             fr="position dans l'épaisseur de la couche" ),
+           ANGLE        =SIMP(statut='o',typ='I',val_min=0,val_max=360,
+                             fr="angle de dépouillement pour les tuyaux, en degrés à partir de la génératrice" ),
+           ),
+
+
+#====
+# Extraction sur un sous-point d'une poutre multi-fibre :
+#====
+         EXTR_PMF  =FACT(statut='f', max=1, fr="extraction sur un sous-point d'une poutre multi-fibre",
+           NOM_CHAM    =SIMP(statut='o',typ='TXM',into=("SIGM_ELGA","SIGM_ELNO",),),
+           NUME_FIBRE  =SIMP(statut='o',typ='I',val_min=1,
+                             fr="numéro de la fibre dans la poutre multi-fibre" ),
+           ),
+
+
+#====
+# Extraction des min / max sur les sous-points :
+#====
+         MIN_MAX_SP  =FACT(statut='f', max='**', fr="extraction du min/max d'une composante pour un champ",
+           NOM_CHAM       =SIMP(statut='o',typ='TXM',into=("SIGM_ELGA","SIGM_ELNO",
+                                "SIEF_ELGA","SIEF_ELNO","SIEQ_ELGA","SIEQ_ELNO",
+                                "EPSI_ELGA","EPEQ_ELGA","VARI_ELGA","VARI_ELNO"),),
+           NOM_CMP        =SIMP(statut='o',typ='TXM',fr="nom de la composante",  ),
+           TYPE_MAXI      =SIMP(statut='o',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS",) ),
+           NUME_CHAM_RESU = SIMP(statut='o', typ='I', val_min=1, val_max=20,
+                          fr="Numéro du champ produit. Exemple: 6 produit le champ UT06",),
+           ),
+
+
+#====
+# Calcul des efforts des coques "excentrées" sur le feuillet moyen de la coque :
+#====
+         COQU_EXCENT  =FACT(statut='f', max=2, fr="Calcul des efforts d'une coque 'excentrée' sur le feuillet moyen de la coque",
+           NOM_CHAM       =SIMP(statut='o',typ='TXM',into=("EFGE_ELNO","EFGE_ELGA",),),
+           MODI_PLAN      =SIMP(statut='o',typ='TXM',into=("OUI",),),
+           ),
+      )
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+
+POST_COQUE=MACRO(nom="POST_COQUE",
+                 op=OPS('Macro.post_coque_ops.post_coque_ops'),
+                 sd_prod=table_sdaster,
+                 reentrant='n',
+                 UIinfo={"groupes":("Post-traitements",)},
+                 fr="Calcul des efforts et déformations en un point et une cote " \
+                    "quelconque de la coque",
+
+             regles=(EXCLUS('INST','NUME_ORDRE'),),
+
+             # SD résultat et champ à posttraiter :
+             RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à posttraiter",),
+             CHAM            =SIMP(statut='o',typ='TXM',into=("EFFORT","DEFORMATION",)),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+
+             # points de post-traitement :
+             COOR_POINT      =FACT(statut='o',max='**',fr="coordonnées et position dans l'épaisseur",
+                                   COOR=SIMP(statut='o',typ='R',min=3,max=4),),
+
+            )
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+
+
+POST_DECOLLEMENT=MACRO(nom="POST_DECOLLEMENT",
+                       op=OPS('Macro.post_decollement_ops.post_decollement_ops'),
+                       sd_prod=table_sdaster,
+                       fr="calcul du rapport de surfaces de contact radier/sol",
+                       reentrant='n',
+                       UIinfo={"groupes":("Post-traitements",)},
+         RESULTAT   =SIMP(statut='o',typ=(evol_noli) ),
+         NOM_CHAM   =SIMP(statut='f',typ='TXM',defaut='DEPL',into=C_NOM_CHAM_INTO(),max=1),
+         NOM_CMP    =SIMP(statut='f',typ='TXM',defaut='DZ',max=1),
+         GROUP_MA   =SIMP(statut='o',typ=grma,max=1),
+         INFO       =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",
+                     op=OPS('Macro.post_dyna_alea_ops.post_dyna_alea_ops'),
+                     sd_prod=table_sdaster,
+                     fr="Traitements statistiques de résultats de type interspectre " \
+                        "et impression sur fichiers",
+                     reentrant='n',
+                     UIinfo={"groupes":("Post-traitements","Dynamique",)},
+         regles=(UN_PARMI('FRAGILITE','INTE_SPEC'),),
+         FRAGILITE  =FACT(statut='f',fr="donnees pour courbe de fragilite",max='**',
+                    TABL_RESU  =SIMP(statut='o',typ=table_sdaster),
+                    regles=(UN_PARMI('VALE','LIST_PARA'),),
+                    VALE       = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**' ),
+                    LIST_PARA  = SIMP(statut='f',typ=listr8_sdaster),
+                    AM_INI     =  SIMP(statut='f',typ='R',defaut= 0.4 ),
+                    BETA_INI   = SIMP(statut='f',typ='R',defaut= 0.3 ),
+                    FRACTILE   = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**'),
+                    b_inte_spec_f  = BLOC(condition="""FRACTILE !=None""",
+                        NB_TIRAGE =SIMP(statut='f',typ='I' ),),
+                 ),
+         INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+         b_inte_spec_f      =BLOC(condition="""INTE_SPEC !=None""",
+            regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+            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='**' ),
+                                ),
+            MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ),
+            DUREE          =SIMP(statut='f',typ='R',  fr="durée de la phase forte pour facteur de peak" ),
+            ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
+                      fr="Post-traiter les résultats en coordonnées généralisées produit par DYNA_TRAN_MODAL",
+                      reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Dynamique",)},
+        regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         CHOC            =FACT(statut='f',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',
+                               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 22/08/2011   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+               fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
+
+         regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT','MINMAX',
+                          'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE','NORME',
+                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL','VOLUMOGRAMME',
+                          'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE','ENER_DISS','INTEGRALE'),
+                ),
+
+         MASS_INER      = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               ORIG_INER    = SIMP(statut='f',typ='R',min=3,max=3 ),
+                              ),
+         b_mass_iner = BLOC(condition = "( MASS_INER != None )",
+                       fr="calcul de la masse, les inerties et le centre de gravité",
+                       regles=(EXCLUS('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                                      'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                                        char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       GEOMETRIE      = SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE")),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_noli,mult_elas,
+                                                             fourier_elas,dyna_trans) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                       FREQ           = SIMP(statut='f',typ='R',),
+                       LIST_FREQ      = SIMP(statut='f',typ=listr8_sdaster),
+                       NUME_MODE      = SIMP(statut='f',typ='I',),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',min=2,validators=NoRepeat(),max=2),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',),
+         ),
+
+         ENER_POT       = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_pot = BLOC(condition = "( ENER_POT  != None )",
+                       fr="calcul de l'énergie potentielle de déformation",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                                      'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       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),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,dyna_trans,mult_elas) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                       FREQ           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_FREQ      = SIMP(statut='f',typ=listr8_sdaster),
+                       NUME_MODE      = SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         ),
+
+         ENER_CIN       = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('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  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_cin = BLOC(condition = "( ENER_CIN != None )",
+                       fr="calcul de l'énergie cinétique",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                                      'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       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),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,dyna_trans) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                       FREQ           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_FREQ      = SIMP(statut='f',typ=listr8_sdaster),
+                       NUME_MODE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         ),
+
+         ENER_DISS      = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_diss = BLOC(condition = "( ENER_DISS != None )",
+                       fr="calcul de l'énergie dissipée",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+
+         ENER_ELAS      = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_elas = BLOC(condition = "( ENER_ELAS != None )",
+                       fr="calcul de l'énergie de déformation élastique",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         ENER_TOTALE    = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_totale = BLOC(condition = "( ENER_TOTALE != None )",
+                       fr="calcul de l'énergie de déformation totale",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         INTEGRALE  = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               NOM_CHAM     = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                               NOM_CMP      = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+                               DEJA_INTEGRE = SIMP(statut='f',typ='TXM',into=("OUI","NON",),),
+                              ),
+         b_integrale = BLOC(condition = "( INTEGRALE != None )",
+                       fr="calcul de la moyenne d'une composante",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_ORDRE','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas,evol_char) ),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         VOLUMOGRAMME  = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max=1),
+                               TYPE_MAILLE  = SIMP(statut='f',typ='TXM',into=('2D','3D',)),
+                               NOM_CHAM     = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                               NOM_CMP      = SIMP(statut='o',typ='TXM'),
+                               NB_INTERV    = SIMP(statut='f',typ='I',defaut=5),
+                               BORNES       = SIMP(statut='f',typ='R',validators=NoRepeat(),min=2,max=2),
+                               NORME        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+                              ),
+         b_volumogramme = BLOC(condition = "( VOLUMOGRAMME != None )",
+                       fr="calcul de la distribution du volume d'une structure vis-à-vis d'une composante",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_ORDRE','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas,evol_char) ),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         NORME  = FACT(statut='f',max=1,
+                       fr="calcul des extrema en espace d'une CMP d'un champ, pour tous les instants spécifiés",
+                       regles=(UN_PARMI('TOUT','GROUP_MA'),
+                               UN_PARMI('CHAM_GD','RESULTAT'),
+                               PRESENT_PRESENT('CHAM_GD','MODELE'),
+                               PRESENT_PRESENT('RESULTAT','NOM_CHAM'),),
+                       TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                       TYPE_MAILLE  = SIMP(statut='f',typ='TXM',into=('2D','3D',)),
+                       TYPE_NORM    = SIMP(statut='f',typ='TXM',into=('L2',)),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas) ),
+                       NOM_CHAM       = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+
+                       b_norme = BLOC(condition = "( RESULTAT != None )",
+                               regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                                  PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                                  PRECISION       =SIMP(statut='o',typ='R',),),
+                              TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                              NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                              LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                              INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                              LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                              ),
+                       ),
+
+
+         MINMAX  = FACT(statut='f',max=1,
+                       fr="calcul des extrema en espace d'une CMP d'un champ, pour tous les instants spécifiés",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               PRESENT_PRESENT('CHAM_GD','MODELE'),
+                               PRESENT_PRESENT('RESULTAT','NOM_CHAM'),
+                               UN_PARMI('TOUT','GROUP_MA'),),
+                       TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas) ),
+                       NOM_CHAM       = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       NOM_CMP        = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+              b_minmax = BLOC(condition = "( RESULTAT != None )",
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                                  PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                                  PRECISION       =SIMP(statut='o',typ='R',),),
+                              TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                              NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                              LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                              INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                              LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                              ),
+         ),
+
+         WEIBULL        = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               OPTION       = SIMP(statut='f',typ='TXM',
+                                                   into=("SIGM_ELGA","SIGM_ELMOY"),
+                                                   defaut="SIGM_ELGA"),
+                               CORR_PLAST   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                               COEF_MULT    = SIMP(statut='f',typ='R',defaut=1.),
+                              ),
+         b_weibull = BLOC(condition = "( WEIBULL != None )",
+                       fr="calcul du champ élémentaire de la puissance m-ième de la contrainte de Weibull",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         RICE_TRACEY    = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               OPTION       = SIMP(statut='f',typ='TXM',
+                                                   into=("SIGM_ELGA","SIGM_ELMOY"),
+                                                   defaut="SIGM_ELGA"),
+                               LOCAL        = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                              ),
+         b_rice_tracey = BLOC(condition = "( RICE_TRACEY != None )",
+                       fr="calcul du taux de croissance d'une cavité sphérique par rapport à un domaine",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         INDIC_ENER     = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_indic_ener = BLOC(condition = "( INDIC_ENER != None )",
+                       fr="calcul un indicateur global de perte de proportionnalité du chargement",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                           PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         INDIC_SEUIL    = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_indic_seuil = BLOC(condition = "( INDIC_SEUIL != None )",
+                       fr="calcul un indicateur global de perte de proportionnalité du chargement",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         CHAR_LIMITE    = FACT(statut='f',min=0,
+                               CHAR_CSTE = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON")
+                              ),
+         b_char_limite = BLOC(condition = "( CHAR_LIMITE != None )",
+                       fr="post-traitement du calcul de la charge limite",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         CARA_GEOM      = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),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),
+                              ),
+         b_cara_geom = BLOC(condition = "( CARA_GEOM != None )",
+                       fr="calcul des caractéristiques géométriques d'un section de poutre",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+         ),
+
+         CARA_POUTRE    = FACT(statut='f',max='**',
+                               regles=(UN_PARMI('TOUT','GROUP_MA'),
+                                       ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
+                               TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               GROUP_MA      = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               GROUP_MA_INTE = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               CARA_GEOM     = SIMP(statut='o',typ=table_sdaster),
+                               RT            = SIMP(statut='f',typ='R'),
+                               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_sdaster),
+                               OPTION        = SIMP(statut='f',typ='TXM',
+                                                    into=("CARA_TORSION","CARA_CISAILLEMENT","CARA_GAUCHI") ),
+                             ),
+         b_cara_poutre = BLOC(condition = "( CARA_POUTRE != None )",
+                       fr="calcul des caractéristiques mécaniques d'un section de poutre",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+         ),
+
+          AIRE_INTERNE   = FACT(statut='f',max='**',
+                                GROUP_MA_BORD  = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+                               ),
+         b_aire_interne = BLOC(condition = "( AIRE_INTERNE != None )",
+                       fr="calcul de l'aire d'un trou dans un maillage 2D",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+         ),
+
+         TRAV_EXT       = FACT(statut='f',),
+         b_trav_ext = BLOC(condition = "( TRAV_EXT != None )",
+                       fr="calcul du travail des efforts extérieurs",
+                       RESULTAT       = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                           PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+ )  ;
+#& MODIF COMMANDE  DATE 05/09/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+# ---------------------------------------------------------------------------
+#                  POST_ENDO_FISS
+# RECHERCHE DU TRAJET DE FISSURATION SUR UN
+#  CHAMP SCALAIRE 2D
+
+
+
+
+def post_endo_fiss_prod(self,TABLE,**args) :
+    self.type_sdprod(TABLE,table_sdaster)
+    return maillage_sdaster
+
+POST_ENDO_FISS=MACRO(nom="POST_ENDO_FISS",
+                     op=OPS('Macro.post_endo_fiss_ops.post_endo_fiss_ops'),
+                     sd_prod=post_endo_fiss_prod,
+                     reentrant='n',
+                     UIinfo={"groupes":("Post-traitements","Outils-métier",)},
+                     fr="Individuation du trace d'une fissure a partir d'un champ scalaire pertinant",
+
+            TABLE  = SIMP(statut = 'o', typ = CO,),
+
+            regles = (UN_PARMI("RESULTAT","CHAM_GD"),
+                      ),
+
+            b_resultat = BLOC(condition  = "RESULTAT != None",
+                              regles     = (UN_PARMI('NUME_ORDRE','INST'),),
+                              NUME_ORDRE = SIMP(statut = 'f', typ = 'I', validators = NoRepeat(), ),
+                              INST       = SIMP(statut = 'f', typ = 'R', validators = NoRepeat(), ),
+                              MODELE     = SIMP(statut = 'f', typ = modele_sdaster,
+                                                fr = "nom du modele a associer au champ",),),
+
+            b_champ    = BLOC(condition = "CHAM_GD != None",
+                              MODELE    = SIMP(statut = 'o', typ = modele_sdaster,
+                                               fr = "nom du modele a associer au champ",),),
+
+            CHAM_GD         = SIMP(statut = 'f',typ = (cham_gd_sdaster)),
+            RESULTAT        = SIMP(statut = 'f',typ = (evol_noli)),
+            NOM_CMP         = SIMP(statut = 'o',typ='TXM',),
+            NOM_CHAM        = SIMP(statut = 'o', typ = 'TXM',
+                                   fr = "nom du champ a post-traiter",),
+
+            RECHERCHE = FACT(statut = 'o',min=1,max='**',
+                           regles = (
+                                       PRESENT_ABSENT('TOUT','GROUP_MA',),
+                                    ),
+                              LONG_ORTH  = SIMP(statut='o', typ='R'),
+                              NB_POINT   = SIMP(statut='f', typ='I', defaut = 500),
+                              PAS        = SIMP(statut='o', typ='R', ),
+                              LONG_REG   = SIMP(statut='o', typ='R'),
+                              SEUIL      = SIMP(statut='o', typ='R'),
+                              ANGL_MAX   = SIMP(statut='f', typ='R', defaut=180.),
+                              TOUT       = SIMP(statut='f', typ='TXM', into=("OUI",) ),
+                              GROUP_MA   = SIMP(statut='f', typ=grma,  validators=NoRepeat(), ),
+                              ),
+                   )
+
+
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+                    fr="Calculer le dommage de fatigue subi par une structure soumise à une sollicitation 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=table_sdaster),
+         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_sdaster),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANGLES J.ANGLES
+POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+                  fr="Calculer en un point, le dommage de fatigue 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',
+                                 regles=(UN_PARMI('SIGM','EPSI'),),
+                                 SIGM  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 EPSI  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+             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',
+                                 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_sdaster),
+             CORR_SIGM_MOYE = SIMP(statut='f',typ='TXM',into=("GOODMAN","GERBER")),
+             TAHERI_NAPPE   = SIMP(statut='f',typ=(nappe_sdaster,formule)),
+             TAHERI_FONC    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         b_periodique = BLOC( condition = "CHARGEMENT=='PERIODIQUE'",
+             HISTOIRE       = FACT(statut='o',
+                                 SIGM_XX  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+             CRITERE        = SIMP(statut='o',typ='TXM',into=("CROSSLAND","PAPADOPOULOS")),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER",)),
+             MATER          = SIMP(statut='o',typ=mater_sdaster),
+             COEF_CORR      = SIMP(statut='f',typ='R'),
+         ),
+
+         b_quelconque = BLOC( condition = "CHARGEMENT=='QUELCONQUE'",
+             HISTOIRE       = FACT(statut='o',
+                                 SIGM_XX  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 EPSP     = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 TEMP     = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("LEMAITRE",),),
+             MATER          = SIMP(statut='o',typ=mater_sdaster),
+             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 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE WADIER Y.WADIER
+
+
+def post_gp_prod(self, TABL_GPMAX,TABL_GP, **kargs):
+   """Typage des sd_prod
+   """
+   if TABL_GPMAX != None:
+      self.type_sdprod(TABL_GPMAX, table_sdaster)
+   if TABL_GP != None :
+      if TABL_GPMAX != None:
+         self.type_sdprod(TABL_GPMAX, table_sdaster)
+         self.type_sdprod(TABL_GP, table_sdaster)
+   return table_sdaster
+
+
+POST_GP=MACRO(nom="POST_GP",
+              op=OPS('Macro.post_gp_ops.post_gp_ops'),
+              sd_prod=post_gp_prod,
+              fr="Calcul du critère énergétique Gp suite à un calcul thermo-mécanique",
+              reentrant='n',
+              UIinfo={"groupes":("Post-traitements","Rupture",)},
+              regles=(UN_PARMI('IDENTIFICATION', 'PREDICTION'),
+                      UN_PARMI('THETA_2D','THETA_3D'),),
+
+      # Résultat, modèle, comportement, chargement
+      RESULTAT     = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),),
+      RESU_THER    = SIMP(statut='f',typ=evol_ther,),
+      MODELE       = SIMP(statut='o',typ=modele_sdaster),
+      MATER        = SIMP(statut='o',typ=mater_sdaster),
+
+      COMP_ELAS    = C_COMP_ELAS('POST_GP'),
+
+      LIST_INST    = SIMP(statut='o',typ=listr8_sdaster),
+
+      TYPE_DEF = SIMP(statut='f',typ='TXM', defaut="PETIT", into=("PETIT","GRAND")),
+      EXCIT        = FACT(statut='f', max='**',
+            CHARGE      = SIMP(statut='o', typ=(char_meca,char_cine_meca)),
+            FONC_MULT   = SIMP(statut='f', typ=(fonction_sdaster,nappe_sdaster,formule)),
+            TYPE_CHARGE = SIMP(statut='f', typ='TXM', defaut="FIXE", into=("FIXE",)),
+      ),
+      SYME_CHAR    = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS")),
+
+      b_direction     =BLOC(condition = "(THETA_2D != None) ",
+          DIRECTION    = SIMP(statut='o', typ='R', max=3),),
+
+      THETA_2D     = FACT(statut='f', max='**',
+                          fr="paramètres de définition des champs theta",
+            GROUP_NO    = SIMP(statut='o', typ=grno, validators=NoRepeat(), max='**'),
+            R_INF       = SIMP(statut='o', typ='R'),
+            R_SUP       = SIMP(statut='o', typ='R'),),
+
+      b_theta_2d=BLOC(condition="(THETA_2D != None)",
+           # correction axisymétrie
+            RAYON_AXIS   = SIMP(statut='f', typ='R', val_min=0., defaut=1.),
+            TRANCHE = FACT(statut='o', max=1,
+
+                           GROUP_MA  = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+                           ),),
+
+      THETA_3D        =FACT(statut='f',max='**',
+            GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+            R_INF           =SIMP(statut='o',typ='R'),
+            R_SUP           =SIMP(statut='o',typ='R'),
+                         ),
+         b_theta_3d     =BLOC(condition="THETA_3D != None",
+            LISSAGE         =FACT(statut='d',
+                DEGRE            =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+                LISSAGE_THETA    =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+                                  into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+                LISSAGE_G        =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+                                  into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+                             ),
+
+            FOND_FISS       =SIMP(statut='o',typ=fond_fiss,max=1,),
+            TRANCHE = FACT(statut='o', max='**',
+                           GROUP_MA  = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+                           ),),
+
+      # prise en compte de la traction compression
+      TRAC_COMP    = SIMP(statut='f',typ='TXM',into=("OUI",),
+                          fr="prise en compte de la traction-compression (plus lent)",
+                         ),
+
+      # critère sur Gp
+      CRIT_MAXI_GP = SIMP(statut='f', typ='TXM', defaut="ABSOLU",
+                          into=("RELATIF","ABSOLU")),
+
+      # identification
+      IDENTIFICATION = FACT(statut='f', max=1,
+            KJ_CRIT     = SIMP(statut='o', typ='R', val_min=0., max='**'),
+            TEMP        = SIMP(statut='o', typ='R', val_min=0., max='**'),
+      ),
+
+      # prédiction
+      PREDICTION   = FACT(statut='f', max=1,
+            GP_CRIT     = SIMP(statut='o', typ='R', val_min=0., max='**'),
+            TEMP        = SIMP(statut='o', typ='R', val_min=0., max='**'),
+      ),
+
+      # table résultat
+      TABL_GPMAX    = SIMP(statut='o', typ=CO,),
+      TABL_GP       = SIMP(statut='f', typ=CO,),
+      INFO         = SIMP(statut='f', typ='I', defaut=1, into=(1, 2),),
+)
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",
+                    op=OPS('Macro.post_k1_k2_k3_ops.post_k1_k2_k3_ops'),
+                    sd_prod=table_sdaster,
+                    fr="Calcul des facteurs d'intensité de contraintes en 2D et en 3D par "\
+                       "extrapolation des sauts de déplacements sur les lèvres de la fissure",
+                    reentrant='n',
+                    UIinfo={"groupes":("Post-traitements","Rupture",)},
+
+           regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'),
+                   EXCLUS('FISSURE','FOND_FISS'),
+                   PRESENT_PRESENT('FISSURE','RESULTAT'),
+                   PRESENT_PRESENT('FOND_FISS','VECT_K1'),
+                   PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'),
+                   #PRESENT_PRESENT('RESULTAT','FOND_FISS'),
+                   ),
+
+         MODELISATION  =SIMP(statut='o',typ='TXM',
+                             into=("3D","AXIS","D_PLAN","C_PLAN"),position='global',
+                             fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
+         FOND_FISS     =SIMP(statut='f',typ=fond_fiss),
+         FISSURE       =SIMP(statut='f',typ=fiss_xfem),
+         NB_NOEUD_COUPE=SIMP(statut='f',typ='I',defaut=5,val_min = 3),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS")),
+
+#        bloc correspondant a la donnee du fond de fissure pour les fissures maillees
+         b_fond_fiss_res   =BLOC (condition="((FOND_FISS!= None)and(RESULTAT!= None))",
+
+              b_ref_3d     =BLOC (condition="MODELISATION=='3D'",
+                                  TYPE_MAILLAGE = SIMP(statut='f',typ='TXM',into=("LIBRE","REGLE"),defaut="REGLE"),
+                                ),
+
+                         NOEUD         = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                         EVOL_THER     = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
+                         ),
+
+         b_fond_fiss_tab   =BLOC (condition="((FOND_FISS!= None)and(TABL_DEPL_SUP!= None)and(RESULTAT== None))",
+
+                         MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
+                         NOEUD         = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                         EVOL_THER     = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
+                         ),
+#        bloc correspondant a la donnee de la fissure pour les fissures X-FEM
+         b_fissure_res     =BLOC (condition="((FISSURE!= None)and(RESULTAT!= None))",
+                         NB_POINT_FOND = SIMP(statut='f',typ='I' ,),
+                         NUME_FOND     = SIMP(statut='f',typ='I',defaut=1),
+                         DTAN_ORIG     = SIMP(statut='f',typ='R',max='**'),
+                         DTAN_EXTR     = SIMP(statut='f',typ='R',max='**'),
+                         ),
+
+         b_fissure_tab     =BLOC (condition="((FISSURE!= None)and(TABL_DEPL_SUP!= None)and(RESULTAT== None))",
+                         MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
+                         NB_POINT_FOND = SIMP(statut='f',typ='I' ,),
+                         NUME_FOND     = SIMP(statut='f',typ='I',defaut=1),
+                         DTAN_ORIG     = SIMP(statut='f',typ='R',max='**'),
+                         DTAN_EXTR     = SIMP(statut='f',typ='R',max='**'),
+                         ),
+
+         MATER         =SIMP(statut='o',typ=mater_sdaster,
+                             fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
+         RESULTAT      =SIMP(statut='f',typ=(evol_elas,evol_noli),
+                             fr="Déplacement des noeuds de la lèvre supérieure et inférieure"),
+         TABL_DEPL_SUP =SIMP(statut='f',typ=table_sdaster,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre supérieure"),
+         TABL_DEPL_INF =SIMP(statut='f',typ=table_sdaster,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
+         ABSC_CURV_MAXI=SIMP(statut='o',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.1),
+         TOUT_ORDRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE    =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         LIST_ORDRE    =SIMP(statut='f',typ=listis_sdaster),
+         INST          =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST     =SIMP(statut='f',typ=listr8_sdaster),
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+         INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         VECT_K1       =SIMP(statut='f',typ='R',max=3,min=3,
+                             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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE C.MESSELIER-GOUZE
+#
+POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
+                   fr="Calcul des facteurs d'intensité de contraintes par la méthode K_BETA",
+                   reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+         MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
+         MATER_REV     = SIMP(statut='o',typ=mater_sdaster),
+         EPAIS_REV     = SIMP(statut='o',typ='R'),
+         FISSURE       = FACT(statut='o',
+            DECALAGE       = SIMP(statut='f',typ='R',defaut=-2.e-04),
+            PROFONDEUR     = SIMP(statut='o',typ='R'),
+            LONGUEUR       = SIMP(statut='o',typ='R'),
+            ORIENTATION    = SIMP(statut='o',typ='TXM',
+                                 into=("CIRC","LONGI"),),
+         ),
+         K1D           = FACT(statut='o',max='**',
+            TABL_MECA_REV  = SIMP(statut='o',typ=(table_sdaster)),
+            TABL_MECA_MDB  = SIMP(statut='o',typ=(table_sdaster)),
+            TABL_THER      = SIMP(statut='o',typ=(table_sdaster)),
+            INTITULE       = SIMP(statut='o',typ='TXM' ), 
+         ),
+         TITRE         = SIMP(statut='f',typ='TXM',max='**'),  
+);
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+
+POST_K_TRANS=MACRO(nom="POST_K_TRANS",
+                   op=OPS('Macro.post_k_trans_ops.post_k_trans_ops'),
+                   sd_prod=table_sdaster,
+                   fr="Calcul des facteurs d intensite des contrainte par recombinaison modale",
+                   reentrant='n',
+                   UIinfo={"groupes":("Post-traitements","Rupture",)},
+        RESU_TRANS      =SIMP(statut='o',typ=tran_gene),
+        K_MODAL         =FACT(statut='o',
+           TABL_K_MODA     =SIMP(statut='f',typ=table_sdaster,),
+           RESU_MODA       =SIMP(statut='f',typ=mode_meca,),
+           FOND_FISS       =SIMP(statut='f',typ=fond_fiss,),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,),
+           THETA           =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster)),
+           R_INF           =SIMP(statut='f',typ='R'),
+           R_SUP           =SIMP(statut='f',typ='R'),
+           MODULE          =SIMP(statut='f',typ='R'),
+           DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           MODULE_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DEGRE           =SIMP(statut='f',typ='I',into=(0,1,2,3,4,5,6,7) ),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+
+
+           regles=(UN_PARMI('TABL_K_MODA','RESU_MODA'),
+                   UN_PARMI('FISSURE','FOND_FISS'),
+                   EXCLUS('MODULE','MODULE_FO'),
+                   PRESENT_PRESENT('R_INF','R_SUP'),
+                   PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+         ),
+        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+        TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+        NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+        LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+        INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+        LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+        b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+           PRECISION       =SIMP(statut='o',typ='R'),),
+        INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+        TITRE           =SIMP(statut='f',typ='TXM'),
+)
+
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FERNANDES R.FERNANDES
+
+POST_MAC3COEUR = MACRO(nom="POST_MAC3COEUR",
+                       op=OPS("Mac3coeur.post_mac3coeur_ops.post_mac3coeur_ops"),
+
+           TYPE_COEUR   = SIMP(statut='o',typ='TXM',into=("TEST","900","1300","N4","EPR") ),
+           RESULTAT     = SIMP(statut='o',typ=evol_noli),                             # SD_RESULTAT
+           INST         = SIMP(statut='o',typ='R', max=1),                            # INSTANT
+           
+           LAME    = FACT(statut='f',max='**',
+                          fr="Post-traitement des lames d'eau, par grille ou valeurs min/max",
+                          regles = UN_PARMI('NUME_GRILLE','TYPE_RESU',),
+                 NUME_GRILLE  = SIMP(statut='f',typ='I', max=1),                      # NUMERO DE LA GRILLE A POST-TRAITER
+                 TYPE_RESU    = SIMP(statut='f',typ='TXM',into=("MINI","MAXI")),      # EXTREMA POUR LE POST
+                 FORMAT       = SIMP(statut='o',typ='TXM',into=("GRACE","TABLE")),
+                 UNITE        = SIMP(statut='o',typ='I', max=1),                   # NUMERO DE L'UNITE LOGIQUE POUR LE POST
+           ),
+
+           DEFORMATION = FACT(statut='f',max='**',
+                              fr="Post-traitement des deformations, par grille ou valeurs min/max",
+                              regles=UN_PARMI('NUME_GRILLE','TYPE_RESU','POSITION','NOM_CMP'),
+       
+                 UNITE        = SIMP(statut='o',typ='I', max=1),   
+                 FORMAT       = SIMP(statut='o',typ='TXM',into=("GRACE","TABLE")),
+                 NOM_CMP      = SIMP(statut='f',typ='TXM',into=("DY","DZ","NORME")),
+                 
+                 TYPE_VISU = SIMP(statut='f',typ='TXM',into=("AMPLITUDE","MODULE","VECTEUR","DEFORME")),
+                 NUME_GRILLE  = SIMP(statut='f',typ='I', max=1), # NUMERO DE LA GRILLE A POST-TRAITER
+                 TYPE_RESU    = SIMP(statut='f',typ='TXM',into=("MINI","MAXI")),
+                 POSITION     = SIMP(statut='f',typ='TXM', max=1),  
+                 CONCEPTION   = SIMP(statut='f',typ='TXM', max=1),
+           ),
+)
+
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
+                    reentrant='n',UIinfo={"groupes":("Maillage","Rupture",)},
+            fr="Crée un maillage se conformant à la fissure pour le post-traitement des éléments XFEM",
+    MODELE        = SIMP(statut='o',typ=modele_sdaster),
+    MAILLAGE_SAIN = SIMP(statut='f',typ=maillage_sdaster),
+    PREF_NOEUD_X   =SIMP(statut='f',typ='TXM',defaut="NX",validators=LongStr(1,2),),
+    PREF_NOEUD_M   =SIMP(statut='f',typ='TXM',defaut="NM",validators=LongStr(1,2),),
+    PREF_NOEUD_P   =SIMP(statut='f',typ='TXM',defaut="NP",validators=LongStr(1,2),),
+    PREF_MAILLE_X  =SIMP(statut='f',typ='TXM',defaut="MX",validators=LongStr(1,2),),
+    PREF_GROUP_CO  =SIMP(statut='f',typ=geom ,defaut="NFISSU",),
+    TITRE         = SIMP(statut='f',typ='TXM',max='**'),
+    INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+
+);                     
+#& MODIF COMMANDE  DATE 02/02/2011   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTIC               
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
+               fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
+               reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Rupture",)},
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","DETAILS") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         TYPE_RESU_MECA  =SIMP(statut='o',typ='TXM',into=("EVOLUTION","UNITAIRE","TUYAUTERIE") ),
+
+# ======================================================================
+     b_evolution  =BLOC(condition="(TYPE_RESU_MECA == 'EVOLUTION')",
+
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                               into=("PM_PB","SN","FATIGUE_ZH210","AMORCAGE") ),
+         MATER           =SIMP(statut='o',typ=mater_sdaster ),
+         SY_MAX          =SIMP(statut='f',typ='R',
+                               fr="limite élastique utilisée pour le calcul du rochet thermique" ),
+         TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+                               fr="Ke meca seul ou partition mecanique + thermique" ),
+                               
+         TRANSITOIRE     =FACT(statut='o',max='**',fr="transitoire à dépouiller",
+           regles=(EXCLUS('TOUT_ORDRE','INST','LIST_INST'),
+                   UN_PARMI('TABL_RESU_MECA','TABL_SIGM_THETA'),),
+           NB_OCCUR        =SIMP(statut='f',typ='I',defaut= 1,
+                                 fr="nombre d occurences réelles de ce transitoire" ),
+           TABL_RESU_MECA  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="relevé des contraintes sur le chemin"),
+           TABL_SIGM_THER  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="résultat sous chargement thermique seul" ),
+           TABL_RESU_PRES  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes sous chargement de pression" ),
+           TABL_SIGM_THETA =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes a la distance d de la singularité pour chacun des angles THETA" ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),),
+           ),
+         ),
+
+# ======================================================================
+     b_unitaire  =BLOC(condition="(TYPE_RESU_MECA == 'UNITAIRE')",
+
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                               into=("PM_PB","SN","FATIGUE") ),
+         MATER           =SIMP(statut='o',typ=mater_sdaster ),
+         SY_MAX          =SIMP(statut='f',typ='R',
+                               fr="limite élastique utilisée pourle calcul du rochet thermique" ),
+         TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+                               fr="Ke meca seul ou partition mecanique + thermique" ),
+         CHAR_MECA   =FACT(statut='o',max='**',fr="Chargements mécaniques",
+                           regles=(UN_PARMI('MX','MX_TUBU'),),
+           NUME_CHAR     =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
+           NOM_CHAR      =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
+           MX            =SIMP(statut='f',typ='R',fr="moment suivant x", ),
+           MX_TUBU       =SIMP(statut='f',typ='R',fr="moment suivant x, tubulure", ),
+           b_1_tenseur     =BLOC( condition = "MX != None",
+             FX            =SIMP(statut='f',typ='R',fr="effort suivant x", ),
+             FY            =SIMP(statut='f',typ='R',fr="effort suivant y", ),
+             FZ            =SIMP(statut='f',typ='R',fr="effort suivant z", ),
+             MY            =SIMP(statut='o',typ='R',fr="moment suivant y", ),
+             MZ            =SIMP(statut='o',typ='R',fr="moment suivant z", ),
+           ),
+           b_2_tenseurs    =BLOC( condition = "MX_TUBU != None",
+             FX_TUBU       =SIMP(statut='f',typ='R',fr="effort suivant x, tubulure", ),
+             FY_TUBU       =SIMP(statut='f',typ='R',fr="effort suivant y, tubulure", ),
+             FZ_TUBU       =SIMP(statut='f',typ='R',fr="effort suivant z, tubulure", ),
+             MY_TUBU       =SIMP(statut='o',typ='R',fr="moment suivant y, tubulure", ),
+             MZ_TUBU       =SIMP(statut='o',typ='R',fr="moment suivant z, tubulure", ),
+             FX_CORP       =SIMP(statut='f',typ='R',fr="effort suivant x, corps du piquage", ),
+             FY_CORP       =SIMP(statut='f',typ='R',fr="effort suivant y, corps du piquage", ),
+             FZ_CORP       =SIMP(statut='f',typ='R',fr="effort suivant z, corps du piquage", ),
+             MX_CORP       =SIMP(statut='o',typ='R',fr="moment suivant x, corps du piquage", ),
+             MY_CORP       =SIMP(statut='o',typ='R',fr="moment suivant y, corps du piquage", ),
+             MZ_CORP       =SIMP(statut='o',typ='R',fr="moment suivant z, corps du piquage", ),
+           ),
+
+                         ),
+         RESU_MECA_UNIT =FACT(statut='o',fr="resultats mécaniques unitaires",
+                              regles=(UN_PARMI('TABL_MX','TABL_MX_TUBU'),),
+           TABL_MX       =SIMP(statut='f',typ=table_sdaster,
+                               fr="table relevé des contraintes pour chargement unitaire MX"),
+           TABL_MX_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                               fr="table relevé des contraintes pour chargement unitaire MX_TUBU"),
+           b_1_tenseur     =BLOC( condition = "TABL_MX != None",
+             TABL_FX       =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FX"),
+             TABL_FY       =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FY"),
+             TABL_FZ       =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FZ"),
+             TABL_MY       =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MY"),
+             TABL_MZ       =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MZ"),
+           ),
+           b_2_tenseurs    =BLOC( condition = "TABL_MX_TUBU != None",
+             TABL_FX_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FX_TUBU"),
+             TABL_FY_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FY_TUBU"),
+             TABL_FZ_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FZ_TUBU"),
+             TABL_MY_TUBU  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MY_TUBU"),
+             TABL_MZ_TUBU  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MZ_TUBU"),
+             TABL_FX_CORP  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FX_CORP"),
+             TABL_FY_CORP  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FY_CORP"),
+             TABL_FZ_CORP  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FZ_CORP"),
+             TABL_MX_CORP  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MX_CORP"),
+             TABL_MY_CORP  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MY_CORP"),
+             TABL_MZ_CORP  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MZ_CORP"),
+           ),
+           TABL_PRES     =SIMP(statut='o',typ=table_sdaster,
+                               fr="table relevé des contraintes pour chargement unitaire de pression"),
+                         ),
+
+          RESU_THER   =FACT(statut='f',max='**',fr="resultats thermiques",
+           NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
+           TABL_RESU_THER =SIMP(statut='o',typ=table_sdaster,
+                              fr="table relevé des contraintes sous chargement thermique seul" ),
+                           ),
+         SEISME         =FACT(statut='f',max='**',fr="Situation séisme",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NB_CYCL_SEISME   =SIMP(statut='o',typ='I',fr="nombre de cycles associé au séisme" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéros du groupe de la situation" ),
+              CHAR_ETAT        =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+                               ),
+         SITUATION         =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',
+                                     fr="numéros des groupes de la situation" ),
+              NUME_PASSAGE     =SIMP(statut='f',typ='I',min=2,max=2,
+                                     fr="numéro des situations de passage" ),
+              NUME_RESU_THER   =SIMP(statut='f',typ='I',max=1,fr="numeros de transitoires thermiques" ),
+              CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+              CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
+              PRES_A           =SIMP(statut='o',typ='R',fr="pression etat A"),
+              PRES_B           =SIMP(statut='o',typ='R',fr="pression etat B"),
+              TEMP_REF_A       =SIMP(statut='f',typ='R',fr="temperature référence etat A"),
+              TEMP_REF_B       =SIMP(statut='f',typ='R',fr="temperature référence etat B"),
+                               ),
+                      ),
+# ======================================================================
+     b_tuyauterie  =BLOC(condition="(TYPE_RESU_MECA == 'TUYAUTERIE')",
+
+         OPTION          =SIMP(statut='o',typ='TXM',into=("FATIGUE",) ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+                               fr="Ke meca seul ou partition mecanique + thermique" ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem),
+         ZONE_ANALYSE =FACT(statut='o',fr="liste des mailles ou des noeuds analysés",
+            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            ),
+         RESU_MECA   =FACT(statut='o',max='**',fr="Chargements mécaniques",
+           regles=(UN_PARMI('CHAM_GD','RESULTAT'),),
+           NUME_CHAR     =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
+           NOM_CHAR      =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd_sdaster),
+           RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+           b_extrac        =BLOC(condition="RESULTAT != None",
+                                 fr="extraction d un champ de grandeur",
+             regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','NOEUD_CMP'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("EFGE_ELNO","SIEF_ELNO"),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',),
+             INST            =SIMP(statut='f',typ='R',),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             b_acce_reel     =BLOC(condition="(INST != None)",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+           ),
+                          ),
+         INDI_SIGM =FACT(statut='o',max='**',fr="indices de contraintes",
+            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+            C1              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C1 du RCCM"),
+            K1              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K1 du RCCM"),
+            C2              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C2 du RCCM"),
+            K2              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K2 du RCCM"),
+            C3              =SIMP(statut='f',typ='R',defaut=0.5,fr="indice de contraintes C3 du RCCM"),
+            K3              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K3 du RCCM"),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                             fr="groupe(s) de mailles ou sont affectés les indices de contraintes"),
+            MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',
+                             fr="liste des mailles ou sont affectés les indices de contraintes"),
+            b_grma     =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+               GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            ),
+            TYPE_ELEM_STANDARD =SIMP(statut='f',typ='TXM',into=("DRO","COU","TRN","TEE"),
+                              fr="type d'élément de tuyauterie ou sont affectés les indices de contraintes"),
+                         ),
+          RESU_THER   =FACT(statut='f',max='**',fr="resultats thermiques",
+            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+            NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
+            TABL_RESU_THER =SIMP(statut='o',typ=table_sdaster,
+                              fr="table relevé des températures sur la section"),
+            TABL_MOYE_THER =SIMP(statut='o',typ=table_sdaster,
+                              fr="table relevé des moyennes sur la section"),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            b_grma     =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+               GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            ),
+                           ),
+         SEISME         =FACT(statut='f',max='**',fr="Situation séisme",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NB_CYCL_SEISME   =SIMP(statut='o',typ='I',fr="nombre de cycles associé au séisme" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéros du groupe de la situation" ),
+              CHAR_ETAT        =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+              TEMP_REF         =SIMP(statut='f',typ='R',fr="temperature référence"),
+                               ),
+         SITUATION         =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',
+                                     fr="numéros des groupes de la situation" ),
+              NUME_PASSAGE     =SIMP(statut='f',typ='I',min=2,max=2,
+                                     fr="numéro des situations de passage" ),
+              NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
+              CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+              CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
+              PRES_A           =SIMP(statut='o',typ='R',fr="pression etat A"),
+              PRES_B           =SIMP(statut='o',typ='R',fr="pression etat B"),
+              TEMP_REF_A       =SIMP(statut='f',typ='R',fr="temperature référence etat A"),
+              TEMP_REF_B       =SIMP(statut='f',typ='R',fr="temperature référence etat B"),
+                               ),
+               ),
+)  ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+# ======================================================================
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f',
+            fr="Extraire des valeurs de composantes de champs de grandeurs pour y effectuer des calculs (moyenne,invariants,..)"
+               +" ou pour les exprimer dans d'autres repères",
+            docu="U4.81.21",UIinfo={"groupes":("Post-traitements","Résultats et champs",)},
+
+         ACTION          =FACT(statut='o',max='**',
+                               regles=(UN_PARMI('RESULTAT','CHAM_GD'),),
+
+           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE","MOYENNE_ARITH","EXTREMA"),
+                                 validators=NoRepeat(), max=2),
+           INTITULE        =SIMP(statut='o',typ='TXM'),
+
+           CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,
+                                                 cham_elem,),),
+           RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+#
+#  1. Sensibilité
+#  1.1. Cas d'un résultat réel
+#       Cas d'un résultat harmonique dont on veut partie réelle ou imaginaire
+#
+           b_sensibilite   =BLOC(condition=" (RESULTAT != None) and \
+                                      (   AsType(RESULTAT) in (evol_elas,evol_ther,evol_noli,dyna_trans, \
+                                                               mode_meca,mode_flamb,mode_acou, \
+                                                               mult_elas,fourier_elas,fourier_ther) or \
+                                        ( AsType(RESULTAT) in (dyna_harmo,acou_harmo) and FORMAT_C != 'MODULE' ) )",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             regles=(CONCEPT_SENSIBLE("SEPARE"), REUSE_SENSIBLE(),
+                     DERIVABLE('RESULTAT'),),
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),
+
+           ),
+#
+#  1.2. Cas d'un résultat harmonique dont on veut le module
+#
+           b_sensibilite_harmo =BLOC(condition=" (RESULTAT != None) and \
+                                      ( AsType(RESULTAT) in (dyna_harmo,acou_harmo) and FORMAT_C == 'MODULE' )",
+                                     fr="Définition des paramètres de sensibilité",
+                                     ang="Definition of sensitivity parameters",
+             regles=(CONCEPT_SENSIBLE("SEPARE"), REUSE_SENSIBLE(),
+                     DERIVABLE('RESULTAT'),),
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),
+               b_sensibilite_harmo =BLOC(condition=" SENSIBILITE != None",
+                                         fr="Option pour la sensibilite",
+                                         ang="Option for sensitivity",
+               SENSIBILITE_OPTION =SIMP(statut='o',typ='TXM',into=("MODULE_SENSIBILITE","SENSIBILITE_MODULE",),
+                                        fr="Option : module de la dérivée ou dérivée du module",
+                                        ang="Option : modulus of derivative or derivative of modulus"),
+               ),
+           ),
+
+           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',into=C_NOM_CHAM_INTO(),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+
+           b_extrema   =BLOC(condition="'EXTREMA' in OPERATION",
+                             fr="recherche de MIN MAX",
+                             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+
+           b_MOYENNE_ARITH   =BLOC(condition="'MOYENNE_ARITH' in OPERATION",
+                             fr="moyenne sur des groupes",
+                             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+
+           b_autre   =BLOC(condition="aucun(OPERATION, ('EXTREMA', 'MOYENNE_ARITH'))",
+                           fr="extraction et moyenne",
+                           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                                   EXCLUS('CHEMIN','GROUP_NO'),
+                                   EXCLUS('CHEMIN','NOEUD'),
+                                   PRESENT_ABSENT('CHEMIN','GROUP_MA','MAILLE'),
+                                   UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
+                                   PRESENT_PRESENT('TRAC_DIR','DIRECTION'),
+                                   ENSEMBLE('MOMENT','POINT'),
+                                   PRESENT_PRESENT('MOMENT','RESULTANTE'),
+                                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
+                                   EXCLUS('TRAC_DIR','TRAC_NOR'),
+                                   PRESENT_PRESENT('ORIGINE','AXE_Z'),),
+
+              CHEMIN          =SIMP(statut='f',typ=(courbe_sdaster,surface_sdaster) ),
+              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+              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='**'),
+
+              VECT_Y          =SIMP(statut='f',typ='R',max='**'),
+              MOYE_NOEUD      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           ),
+
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
+
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+POST_RUPTURE=MACRO(nom="POST_RUPTURE",
+                   op=OPS("Macro.post_rupture_ops.post_rupture_ops"),
+                   sd_prod=table_sdaster,
+                   fr="post-traitements en Rupture",
+                   reentrant='f',
+                   UIinfo={"groupes":("Résultats et champs","Rupture",)},
+
+      TABLE     = SIMP(statut='o',typ=table_sdaster,max='**'),
+
+#     rq : il est impossible de proposer le bon choix pour OPERATION suivant la valeur de reuse...
+      OPERATION = SIMP(statut='o',typ='TXM',into=(
+                                                  'ABSC_CURV_NORM',
+                                                  'ANGLE_BIFURCATION',
+                                                  'K_EQ',
+                                                  'DELTA_K_EQ',
+                                                  'COMPTAGE_CYCLES',
+                                                  'LOI_PROPA',
+                                                  'CUMUL_CYCLES',
+                                                  'PILO_PROPA',
+                                                 )
+                       ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'ABSC_CURV_NORM'
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+
+      b_absc = BLOC(condition="OPERATION == 'ABSC_CURV_NORM'",fr="normalise l'abscisse curviligne",
+
+                    NOM_PARA = SIMP(statut='f',typ='TXM',max=1,defaut="ABSC_CURV_NORM",fr="Nom de la nouvelle colonne"),
+
+                   ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'ANGLE_BIFURCATION'
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+      b_angle = BLOC(condition="OPERATION == 'ANGLE_BIFURCATION'  ",fr="Angle de bifurcation",
+
+                     NOM_PARA = SIMP(statut='f',typ='TXM',max=1,defaut="BETA",fr="Nom de la nouvelle colonne"),
+#                     CRITERE  = SIMP(statut='f',typ='TXM',max=1,defaut="SITT_MAX",into=('SITT_MAX','K1_MAX','K2_NUL','G_MAX'),),
+                     CRITERE  = SIMP(statut='f',typ='TXM',max=1,defaut="SITT_MAX",into=('SITT_MAX','K1_MAX','K2_NUL'),),
+                     b_mate = BLOC(condition="CRITERE == 'G_MAX'  ",fr="info pour le calcul du critere en G",
+                                   MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                   MODELISATION  =SIMP(statut='o',typ='TXM',into=("AXIS","D_PLAN","C_PLAN"),),
+                                   ),
+                     ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'K_EQ'
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+      b_Keq = BLOC(condition="OPERATION == 'K_EQ'  ",fr="Cumul sur les modes : calcul du K equivalent",
+
+                   NOM_PARA = SIMP(statut='f',typ='TXM',max=1,defaut="K_EQ",fr="Nom de la nouvelle colonne"),
+                   CUMUL    = SIMP(statut='f',typ='TXM',max=1,defaut="CUMUL_G",fr="Formule de cumul des modes",
+                                   into=('LINEAIRE','QUADRATIQUE','CUMUL_G','MODE_I'),),
+
+                   b_mater = BLOC(condition="CUMUL in ('QUADRATIQUE','CUMUL_G')",fr="materiau du fond de fissure",
+                                  MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                 ),
+                   ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'DELTA_K_EQ'
+#-----------------------------------------------------------------------------------------------------------------------------------
+                  
+      b_DeltaKeq = BLOC(condition="OPERATION == 'DELTA_K_EQ'  ",fr="Cumul sur les modes : calcul du DeltaK equivalent",
+
+                       NOM_PARA = SIMP(statut='f',typ='TXM',max=1,defaut="DELTA_K_EQ",fr="Nom de la nouvelle colonne"),
+                       CUMUL    = SIMP(statut='f',typ='TXM',max=1,defaut="CUMUL_G",fr="Formule de cumul des modes",
+                                       into=('QUADRATIQUE','CUMUL_G','MODE_I'),),
+
+                       b_mater = BLOC(condition="CUMUL in ('QUADRATIQUE','CUMUL_G')",fr="materiau du fond de fissure",
+                                      MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                      ),
+                  
+                       ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'COMPTAGE_CYCLES'
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+      b_Comptage = BLOC(condition="OPERATION == 'COMPTAGE_CYCLES'  ",fr="Comptage des cycles",
+
+                     NOM_PARA   = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                                     fr="Nom des quantités sur lesquelles s'effectuent le comptage"),
+                     COMPTAGE   = SIMP(statut='o',typ='TXM',into=("RAINFLOW","RCCM","NATUREL","UNITAIRE")),
+                     DELTA_OSCI = SIMP(statut='f',typ='R',defaut= 0.0E+0),
+
+                     b_Comptage_Unitaire = BLOC(condition="COMPTAGE=='UNITAIRE'",
+                                                fr="comptage unitaire pour les amplitudes constantes",
+
+                                                COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+                                                COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+
+                                               ),
+
+                        ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'LOI_PROPA'
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+      b_Loi_Propa   = BLOC(condition="OPERATION == 'LOI_PROPA'  ",fr="calcul de l'incrément d'avancée de fissure par cycle",
+
+         NOM_PARA       = SIMP(statut='f',typ='TXM',defaut="DELTA_A"   ,max=1,fr="Nom de la nouvelle colonne"),
+         NOM_DELTA_K_EQ = SIMP(statut='f',typ='TXM',defaut="DELTA_K_EQ",max=1,fr="Nom de la quantité correspondant au Delta_K_eq"),
+         LOI            = SIMP(statut='o',typ='TXM',into=("PARIS",)),
+
+         b_paris = BLOC(condition = "LOI=='PARIS'",
+                        C = SIMP(statut='o',typ='R',),
+                        M = SIMP(statut='o',typ='R',),
+         ),
+
+      ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'CUMUL_CYCLES'
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+      b_cumul = BLOC(condition="OPERATION == 'CUMUL_CYCLES'  ",fr="Cumul sur les cycles",
+
+                     NOM_PARA = SIMP(statut='f',typ='TXM',max=1,defaut="DELTA_A",fr="Nom de la colonne à traiter"),
+                     CUMUL    = SIMP(statut='f',typ='TXM',max=1,defaut="LINEAIRE",into=('LINEAIRE',)),
+
+                     ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+#                 'PILO_PROPA'
+#-----------------------------------------------------------------------------------------------------------------------------------
+                  
+      b_pilo_propa = BLOC(condition="OPERATION == 'PILO_PROPA'  ",fr="Pilotage de la propagation",
+
+                          regles      = UN_PARMI('DELTA_A_MAX','DELTA_N'),
+                          DELTA_A_MAX = SIMP(statut='f',typ='R',max=1,val_min=0.,fr="Pilotage en incrément d'avancée max"),
+                          DELTA_N     = SIMP(statut='f',typ='R',max=1,val_min=1 ,fr="Pilotage en incrément de nombre de blocs"),
+                  
+                     ),
+
+#-----------------------------------------------------------------------------------------------------------------------------------
+
+)  ;
+#& MODIF COMMANDE  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
+            UIinfo={"groupes":("Post-traitements",)},
+                fr="Calcul des volumes d'usure et des profondeurs d'usure d'après la puissance d'usure",
+         regles=(UN_PARMI('TUBE_NEUF','RESU_GENE','PUIS_USURE'),
+                 PRESENT_PRESENT('RESU_GENE','NOEUD','LOI_USURE'),
+                 PRESENT_PRESENT('PUIS_USURE','LOI_USURE'),),
+         TUBE_NEUF       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ETAT_INIT       =FACT(statut='f',
+           TABL_USURE      =SIMP(statut='f',typ=table_sdaster),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+                         ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+         NOEUD           =SIMP(statut='f',typ=no,),
+         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='f',typ='TXM',into=("ARCHARD","KWU_EPRI","EDF_MZ")),
+         b_archard       =BLOC(condition = "LOI_USURE == 'ARCHARD'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE','SECTEUR'),
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',
+             COEF_USURE      =SIMP(statut='o',typ='R'),
+           ),
+           OBSTACLE        =FACT(statut='f',
+             COEF_USURE      =SIMP(statut='o',typ='R'),
+           ),
+           SECTEUR         =FACT(statut='f',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'),
+           ),
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),
+           USURE_OBST      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         ),
+         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',
+             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',
+             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',into=("OUI",)),
+           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',
+             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',
+             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',into=("OUI",)),
+         ),
+         b_tube_neuf       =BLOC(condition = "TUBE_NEUF == 'OUI'",
+            TABL_USURE      =SIMP(statut='o',typ=table_sdaster),
+         ),
+         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',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         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 12/10/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+POURSUITE=MACRO(nom="POURSUITE",
+                op=OPS("ops.build_poursuite"),
+                repetable='n',
+                fr="Poursuite d'une étude à partir de la sauvegarde au format JEVEUX " \
+                   "ou HDF de sa base globale",
+                sd_prod = ops.POURSUITE,
+                UIinfo={"groupes":("Gestion du travail",)},
+                op_init=ops.POURSUITE_context,
+                fichier_ini=1,
+         FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+                               typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+                           statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=2,
+           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'),
+         ),
+
+# Le mot cle CATALOGUE n'est jamais utilise en POURSUITE mais sa presence est necessaire au bon fonctionnement
+# de la commande, le code source etant commun aux commandes DEBUT et POURSUITE.
+#
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+
+         ERREUR          =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
+           ERREUR_F        =SIMP(statut='f',typ='TXM',into=('ABORT','EXCEPTION'),defaut='ABORT'),
+         ),
+
+         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'),
+           SDVERI          =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+                                 statut='f',typ='TXM',into=('OUI','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',)),
+         ),
+
+         MESURE_TEMPS     =FACT(fr="Pour choisir les mesures de temps consommé dans les commandes",
+                               statut='d',min=1,max=1,
+           NIVE_DETAIL      =SIMP(fr="niveau de détail des impressions",
+                                 statut='f',typ='I',into=(0,1,2,3),defaut=1),
+                                 # 0 : rien
+                                 # 1 : impression en fin de commande des mesures principales
+                                 # 2 : impression en fin de commande des mesures principales et secondaires
+                                 # 3 : impression des mesures principales et secondaires pour chaque pas de temps
+         ),
+
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='d',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' ),
+           DYNAMIQUE       =SIMP(statut='f',typ='I',defaut=1),
+         ),
+
+         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
+           regles=(EXCLUS('VALE','POURCENTAGE'),),
+           VALE            =SIMP(statut='f',typ='I',val_min=0),
+#                            valeur par défaut fixée à 10. dans le FORTRAN si CODE présent
+           POURCENTAGE     =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
+#                           valeur par défaut fixée à 10% dans le FORTRAN
+           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=900) ),
+#          valeur en pourcentage du temps maximum bornée à 900 secondes
+
+         CODE            =FACT("définition d'un nom pour l'ensemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+         ),
+
+
+         IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+         LANG = SIMP(statut='f', typ='TXM', into=('FR', 'EN',),
+                     fr="Permet de choisir la langue utilisée pour les messages (si disponible)",
+                     ang="Allows to choose the language used for messages (if available)"),
+
+         INFO     = SIMP(statut='f', typ='I', defaut=1, into=(1,2),),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+PRE_GIBI=PROC(nom="PRE_GIBI",op=49,
+            UIinfo={"groupes":("Gestion du travail",)},
+              fr="Conversion d'un fichier de maillage GIBI au format Aster",
+         UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
+            UIinfo={"groupes":("Gestion du travail",)},
+               fr="Conversion d'un fichier de maillage 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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE MIKCHEVITCH A.MIKCHEVITCH
+PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
+            UIinfo={"groupes":("Gestion du travail",)},
+               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),  
+         CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
+                    fr="Effectuer le produit d'une matrice par un vecteur",
+                    reentrant='n',
+            UIinfo={"groupes":("Post-traitements","Matrices et vecteurs",)},
+         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_sdaster),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def proj_champ_prod(RESULTAT=None,CHAM_GD=None,**args ):
+    if (RESULTAT == None and CHAM_GD == None) : return corresp_2_mailla
+    if  RESULTAT != None                      : return AsType(RESULTAT)
+    if  CHAM_GD  != None                      : return AsType(CHAM_GD)
+    raise AsException("type de concept resultat non prevu")
+
+
+
+
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
+        UIinfo={"groupes":("Résultats et champs",)},
+            fr="Projeter des champs d'un maillage sur un autre",
+
+     # faut-il projeter les champs ?
+     PROJECTION      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",),),
+
+     # pour projeter avec une sd_corresp_2_mailla deja calculée :
+     MATR_PROJECTION   =SIMP(statut='f',typ=corresp_2_mailla,),
+
+
+
+     #-----------------------------------------------------------------------------------------------------------
+     # 1er cas : on fait tout d'un coup : creation de la sd_corresp_2_mailla + projection des champs
+     #-----------------------------------------------------------------------------------------------
+     b_1_et_2   =BLOC(condition= "PROJECTION == 'OUI' and MATR_PROJECTION == None",
+         regles=(UN_PARMI('RESULTAT','CHAM_GD'),
+                 UN_PARMI('MODELE_1','MAILLAGE_1'),
+                 UN_PARMI('MODELE_2','MAILLAGE_2'),
+                 ),
+         RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem)),
+
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                               into=("NUAGE_DEG_0","NUAGE_DEG_1","AUTO","COLLOCATION","ECLA_PG",) ),
+
+
+         MODELE_1        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_1      =SIMP(statut='f',typ=maillage_sdaster),
+
+         MODELE_2        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_2      =SIMP(statut='f',typ=maillage_sdaster),
+
+         # Cas de la projection NUAGE_DEG_0/1 :
+         #--------------------------------------------
+         b_nuage         =BLOC(condition="METHODE in ('NUAGE_DEG_0','NUAGE_DEG_1')",
+             CHAM_NO_REFE    =SIMP(statut='o',typ=cham_no_sdaster),
+         ),
+
+
+         # Cas de la projection COLLOCATION :
+         #--------------------------------------------
+         b_elem          =BLOC(condition="METHODE in ('COLLOCATION','ECLA_PG','AUTO')",
+             CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
+                  fr="Pour indiquer au programme le type de projection souhaité"),
+             DISTANCE_MAX    =SIMP(statut='f',typ='R',
+                  fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+
+             TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_1 avant la projection."),
+             TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_2 avant la projection."),
+
+             ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+             TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
+                  fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                  fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."),
+         ),
+
+
+         # Cas de la projection d'une sd_resultat :
+         #--------------------------------------------
+         b_resultat      =BLOC(condition="RESULTAT != None",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM',),
+                   CONCEPT_SENSIBLE('SEPARE'),
+                   REUSE_SENSIBLE(),
+                   DERIVABLE('RESULTAT'),),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramétres de sensibilité.",
+                               ang="List of sensitivity parameters",),
+
+           NOM_PARA        =SIMP(statut='f',typ='TXM', max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO(),),
+
+           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
+                fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."),
+
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+           b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+         ),
+
+
+         VIS_A_VIS       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+           # les mots clés suivants ne sont actifs que si METHODE='COLLOCATION' mais on ne peut pas le vérifier:
+               CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+               TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_1 avant la projection."),
+               TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_2 avant la projection."),
+         ),
+     ), # fin bloc b_1_et_2
+
+
+
+     #-----------------------------------------------------------------------------------------------------------
+     # 2eme cas : on s'arrete apres la creation de la sd_corresp_2_mailla
+     #-----------------------------------------------------------------------------------------------
+     b_1   =BLOC(condition="PROJECTION == 'NON'",
+
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="COLLOCATION",
+                               into=("COLLOCATION","COUPLAGE",) ),
+
+         regles=(UN_PARMI('MODELE_1','MAILLAGE_1'),
+                 UN_PARMI('MODELE_2','MAILLAGE_2'),
+                 ),
+         MODELE_1        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_1      =SIMP(statut='f',typ=maillage_sdaster),
+
+         MODELE_2        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_2      =SIMP(statut='f',typ=maillage_sdaster),
+
+
+         # Cas de la projection COLLOCATION :
+         #--------------------------------------------
+         b_elem          =BLOC(condition="METHODE in ('COLLOCATION',)",
+             CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
+                  fr="Pour indiquer au programme le type de projection souhaité"),
+             DISTANCE_MAX    =SIMP(statut='f',typ='R',
+                  fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+
+             TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_1 avant la projection."),
+             TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_2 avant la projection."),
+
+             ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         ),
+
+         VIS_A_VIS       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+           # les mots clés suivants ne sont actifs que si METHODE='COLLOCATION' mais on ne peut pas le vérifier:
+               CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+               TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_1 avant la projection."),
+               TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_2 avant la projection."),
+         ),
+     ), # fin bloc b_1
+
+
+
+     #-----------------------------------------------------------------------------------------------------------
+     # 3eme cas : on projette les champs avec une sd_corresp_2_mailla déjé calculée
+     #-----------------------------------------------------------------------------------------------
+     b_2   =BLOC(condition="MATR_PROJECTION != None",
+         regles=(UN_PARMI('RESULTAT','CHAM_GD'),),
+         RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem)),
+
+         TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
+              fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
+              fr="Parfois utile en dynamique pour pouvoir imposer la numérotation des cham_no."),
+
+         # nécessaire si l'on projette des cham_elem :
+         MODELE_2        =SIMP(statut='f',typ=modele_sdaster),
+
+         PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+              fr="Pour prolonger les champs par zéro là où la projection ne donne pas de valeurs."),
+
+
+
+         # Cas de la projection d'une sd_resultat :
+         #--------------------------------------------
+         b_resultat      =BLOC(condition="RESULTAT != None",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM',),
+                   CONCEPT_SENSIBLE('SEPARE'),
+                   REUSE_SENSIBLE(),
+                   DERIVABLE('RESULTAT'),),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramétres de sensibilité.",
+                               ang="List of sensitivity parameters",),
+
+           NOM_PARA        =SIMP(statut='f',typ='TXM', max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO(),),
+
+
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+           b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+
+         ),
+     ), # fin bloc b_2
+
+
+
+     TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+     INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+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)",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
+         BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         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 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+def proj_mesu_modal_prod(MODELE_MESURE,**args):
+     vale=MODELE_MESURE['MESURE']
+     if  AsType(vale) == dyna_trans   : return tran_gene
+     if  AsType(vale) == dyna_harmo   : return harm_gene
+     if  AsType(vale) == mode_meca    : return mode_gene
+     if  AsType(vale) == mode_meca_c  : return mode_gene
+#     if  AsType(vale) == base_modale  : return mode_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,
+                     reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+                     fr="Calcul des coordonnees généralisees de mesure experimentale relatives a une base de projection",
+
+         MODELE_CALCUL   =FACT(statut='o',
+           MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+#           BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,) ),          
+           BASE            =SIMP(statut='o',typ= mode_meca, ),
+                         ),
+         MODELE_MESURE   =FACT(statut='o',
+           MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+#           MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,base_modale,mode_meca,mode_meca_c,) ),
+           MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE",
+                                 "SIEF_NOEU","EPSI_NOEU",),max='**'),
+                         ),
+         CORR_MANU       =FACT(statut='f',max='**',
+           regles=(PRESENT_PRESENT('NOEU_CALCUL','NOEU_MESURE'),),
+           NOEU_CALCUL     =SIMP(statut='f',typ=no),
+           NOEU_MESURE     =SIMP(statut='f',typ=no),
+                         ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+         RESOLUTION      =FACT(statut='f',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="LU",into=("LU","SVD",) ),
+           b_svd =BLOC(condition="METHODE=='SVD'",
+                       EPS=SIMP(statut='f',typ='R',defaut=0. ),
+                      ),
+           REGUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
+           b_regul =BLOC(condition="REGUL!='NON'",
+                         regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
+                         COEF_PONDER   =SIMP(statut='f',typ='R',defaut=0.     ,max='**' ),  
+                         COEF_PONDER_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+                        ),
+             ),
+
+          ); 
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+            fr="Projecter un ou plusieurs spectres de turbulence sur une (ou plusieurs) base(s) modale(s) ",
+      regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),),
+         SPEC_TURB       =SIMP(statut='o',typ=spectre_sdaster,validators=NoRepeat(),max='**' ),
+         TOUT_CMP        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
+         FREQ_INIT       =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         FREQ_FIN        =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         NB_POIN         =SIMP(statut='o',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_sdaster),
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+
+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)",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
+         BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+         VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+)  ;
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR COLOMBO D.COLOMBO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+
+
+def propa_fiss_prod(self,**args):
+  if  args.has_key('MAIL_TOTAL')  :
+      MAIL_TOTAL = args['MAIL_TOTAL']
+      self.type_sdprod(MAIL_TOTAL,maillage_sdaster)
+  if  args.has_key('MAIL_FISS')  :
+      MAIL_FISS = args['MAIL_FISS']
+      self.type_sdprod(MAIL_FISS,maillage_sdaster)
+  if args.has_key('FISSURE') :
+      FISSURE = args['FISSURE']
+      for numfis in FISSURE :
+        if (args['METHODE_PROPA']=='MAILLAGE') :
+          self.type_sdprod(numfis['MAIL_PROPAGE'],maillage_sdaster)
+        else :
+          self.type_sdprod(numfis['FISS_PROPAGEE'],fiss_xfem)
+  return None
+
+PROPA_FISS=MACRO(nom="PROPA_FISS",
+                 op=OPS('Macro.propa_fiss_ops.propa_fiss_ops'),
+                 sd_prod=propa_fiss_prod,
+                 fr="Propagation de fissure avec X-FEM",reentrant='n',
+                 UIinfo={"groupes":("Post-traitements","Rupture",)},
+
+        METHODE_PROPA = SIMP(statut='o',typ='TXM',
+                               into=("SIMPLEXE","UPWIND","MAILLAGE","INITIALISATION","GEOMETRIQUE") ),
+
+        b_hamilton = BLOC(condition="(METHODE_PROPA=='SIMPLEXE') or (METHODE_PROPA=='UPWIND') or (METHODE_PROPA=='GEOMETRIQUE') ",
+              MODELE        = SIMP(statut='o',typ=modele_sdaster),
+              TEST_MAIL     = SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
+              DA_MAX        = SIMP(statut='o',typ='R',max=1),
+              RAYON         = SIMP(statut='o',typ='R',),
+              ZONE_MAJ      = SIMP(statut='f',typ='TXM',into=("TOUT","TORE"),defaut="TORE"),
+              b_tore        = BLOC(condition = "ZONE_MAJ == 'TORE' ",
+                                   RAYON_TORE    = SIMP(statut='f',typ='R',max=1,val_min=0.0),
+                                  ),
+              b_propagation = BLOC(condition = "TEST_MAIL == 'NON' ",
+                                   FISSURE   = FACT(statut='o',min=1,max='**',
+                                                    FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                                    FISS_PROPAGEE  = SIMP(statut='o',typ=CO,max=1),
+                                                    NB_POINT_FOND  = SIMP(statut='f',typ='I',max='**'),
+                                                    TABLE          = SIMP(statut='o',typ=table_sdaster,max=1),
+                                                    ),
+                                   LOI_PROPA = FACT(statut='o',max=1,
+                                                    LOI     = SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+                                                    b_paris = BLOC(condition = "LOI=='PARIS'",
+                                                                   C = SIMP(statut='o',typ='R',),
+                                                                   N = SIMP(statut='o',typ='R',),
+                                                                   M = SIMP(statut='o',typ='R',),
+                                                                  ),
+                                                    MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                                   ),
+                                   COMP_LINE = FACT(statut='f',max=1,
+                                                    COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+                                                    COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+                                                   ),
+                                   ),
+
+              b_test_const  = BLOC(condition = "TEST_MAIL == 'OUI' ",
+                                   FISSURE   = FACT(statut='o',min=1,max='**',
+                                                    FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                                    FISS_PROPAGEE  = SIMP(statut='o',typ=CO,max=1),
+                                                    ),
+                                   ITERATIONS     = SIMP(statut='f',typ='I',max=1,val_min=3,defaut=5),
+                                   TOLERANCE      = SIMP(statut='f',typ='R',max=1,val_min=0.0,val_max=100.0,defaut=5.0),
+                                  ),
+
+                         ),
+
+        b_maillage    =BLOC(condition="(METHODE_PROPA=='MAILLAGE')",
+               MAIL_STRUC       = SIMP(statut='o',typ=maillage_sdaster),
+               ITERATION      = SIMP(statut='o',typ='I',max=1),
+               DA_MAX        = SIMP(statut='o',typ='R',max=1),
+
+               FISSURE   = FACT(statut='o',min=1,max='**',
+                                MAIL_ACTUEL    = SIMP(statut='o',typ=maillage_sdaster,max=1),
+                                GROUP_MA_FOND    = SIMP(statut='f',typ=grma,defaut="FOND"),
+                                GROUP_MA_FISS    = SIMP(statut='f',typ=grma,defaut="FISS"),
+                                FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                MAIL_PROPAGE  = SIMP(statut='f',typ=CO,max=1),
+                                TABLE          = SIMP(statut='o',typ=table_sdaster,max=1),
+                                DTAN_ORIG      = SIMP(statut='f',typ='R',max=3),
+                                DTAN_EXTR      = SIMP(statut='f',typ='R',max=3),
+                                                    ),
+               MAIL_TOTAL        = SIMP(statut='o',typ=CO),
+               COMP_LINE = FACT(statut='f',max=1,
+                                COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+                                COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+                                                   ),
+                                ),
+
+        b_init    =BLOC(condition="(METHODE_PROPA=='INITIALISATION')",
+               MAIL_STRUC    = SIMP(statut='o',typ=maillage_sdaster),
+               FORM_FISS   = SIMP(statut='o',typ='TXM', into=("DEMI_DROITE","DEMI_PLAN","ELLIPSE"), ),
+               GROUP_MA_FOND    = SIMP(statut='f',typ=grma,defaut="FOND"),
+               GROUP_MA_FISS    = SIMP(statut='f',typ=grma,defaut="FISS"),
+               MAIL_TOTAL     = SIMP(statut='o',typ=CO),
+               MAIL_FISS       = SIMP(statut='f',typ=CO),
+
+               b_droite = BLOC(condition = "FORM_FISS == 'DEMI_DROITE' ",
+                  PFON        = SIMP(statut='o',typ='R',max=3),
+                  DTAN        = SIMP(statut='o',typ='R',min=3,max=3),
+               ),
+
+               b_plan = BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",
+                  DTAN        = SIMP(statut='o',typ='R',min=3,max=3),
+                  POINT_ORIG        = SIMP(statut='o',typ='R',min=3,max=3),
+                  POINT_EXTR        = SIMP(statut='o',typ='R',min=3,max=3),
+                  NB_POINT_FOND     = SIMP(statut='o',typ='I',),
+               ),
+
+               b_ellipse = BLOC(condition = "FORM_FISS == 'ELLIPSE' ",
+                  CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+                  DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+                  DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+                  VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+                  VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
+                  ANGLE_ORIG        = SIMP(statut='o',typ='R',),
+                  ANGLE_EXTR        = SIMP(statut='o',typ='R',),
+                  NB_POINT_FOND     = SIMP(statut='o',typ='I',)
+               ),
+             ),
+
+        b_loi_et_comp_line=BLOC(condition="(METHODE_PROPA=='MAILLAGE')  ",
+                             LOI_PROPA = FACT(statut='o',max=1,
+                                                    LOI     = SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+                                                    b_paris = BLOC(condition = "LOI=='PARIS'",
+                                                                   C = SIMP(statut='o',typ='R',),
+                                                                   N = SIMP(statut='o',typ='R',),
+                                                                   M = SIMP(statut='o',typ='R',),
+                                                                  ),
+                                                    MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                                   ),
+                              ),
+
+        INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+)
+
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR COLOMBO D.COLOMBO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
+                UIinfo={"groupes":("Post-traitements","Rupture",)},
+                fr="Propagation de fissure avec X-FEM",
+    
+    MODELE        =SIMP(statut='o',typ=modele_sdaster),
+
+    TEST_MAIL     =SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
+
+    DA_MAX        =SIMP(statut='o',typ='R'),
+
+    FISS_PROP     =SIMP(statut='o',typ=fiss_xfem),
+
+    ZONE_MAJ      =SIMP(statut='f',typ='TXM',into=("TOUT","TORE"),defaut="TORE"),
+
+    RAYON_TORE    =SIMP(statut='f',typ='R'),
+
+    LISTE_FISS    =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+        
+    b_propa =BLOC( condition = "TEST_MAIL == 'NON' ",
+                   NB_POINT_FOND =SIMP(statut='f',typ='I',min=1,max='**'),
+                   TABLE         =SIMP(statut='o',typ=table_sdaster,min=1,max='**'),
+                   LOI_PROPA     =FACT(statut='o',max=1,
+                   LOI            =SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+                   b_paris        =BLOC( condition = "LOI=='PARIS'",
+                     C            =SIMP(statut='o',typ='R',),
+                     N            =SIMP(statut='o',typ='R',),
+                     M            =SIMP(statut='o',typ='R',),
+                     E            =SIMP(statut='o',typ='R',),
+                     NU           =SIMP(statut='o',typ='R',),),
+                       ),
+
+                   COMP_LINE      =FACT(statut='f',max=1, 
+                     COEF_MULT_MINI        =SIMP(statut='o',typ='R',),
+                     COEF_MULT_MAXI        =SIMP(statut='o',typ='R',),
+                       ),
+         ),
+
+    b_test_mail_const =BLOC( condition = "TEST_MAIL == 'OUI' ",
+                             FISS_INITIALE =SIMP(statut='o',typ=fiss_xfem,max=1),
+                             DISTANCE      =SIMP(statut='o',typ='R',max=1),
+                             TOLERANCE     =SIMP(statut='o',typ='R',max=1),
+                           ),
+            
+    RAYON          =SIMP(statut='o',typ='R',),
+          
+    METHODE =SIMP(statut='f',typ='TXM',into=("SIMPLEXE","UPWIND","GEOMETRIQUE"),defaut="UPWIND"),
+
+    INFO           =SIMP(statut='f',typ='I',defaut= 0,into=(0,1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+RAFF_XFEM=MACRO(nom="RAFF_XFEM",
+                op=OPS('Macro.raff_xfem_ops.raff_xfem_ops'),
+                sd_prod=cham_no_sdaster,
+                fr="Calcul de la distance au fond de fissure le plus proche",
+                reentrant='n',
+                UIinfo={"groupes":("Résultats et champs","Rupture",)},
+
+    FISSURE       =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+    INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PARROT A.PARROT
+RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
+                     fr="Recaler les paramètres du modèle de WEIBULL sur des données expérimentales",reentrant='n',
+            UIinfo={"groupes":("Post-traitements",)},
+         LIST_PARA       =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("SIGM_REFE","M",) ),
+         RESU            =FACT(statut='o',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_sdaster) ),
+           CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+           TEMPE           =SIMP(statut='f',typ='R' ),
+           LIST_INST_RUPT  =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def recu_fonction_prod(RESULTAT=None,TABLE=None,RESU_GENE=None,
+                       BASE_ELAS_FLUI=None,CHAM_GD=None,NAPPE=None,
+                       NOM_PARA_TABL=None,**args):
+   if AsType(RESULTAT)  == dyna_harmo or \
+      AsType(RESU_GENE) == harm_gene or \
+      (TABLE != None and NOM_PARA_TABL == "FONCTION_C"):
+      return fonction_c
+   else:
+      return fonction_sdaster
+
+RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
+                   fr="Extraire sous forme d'une fonction, l'évolution d'une grandeur en fonction d'une autre",
+                   reentrant='f',
+            UIinfo={"groupes":("Résultats et champs","Fonctions",)},
+         regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','NAPPE'),),
+
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem,),),
+         RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene, mode_gene, harm_gene)),
+         TABLE           =SIMP(statut='f',typ=(table_sdaster,table_fonction)),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster),
+         NAPPE           =SIMP(statut='f',typ=nappe_sdaster),
+
+# ======= SENSIBILITE =================================================
+         b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+           regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+                   DERIVABLE('RESULTAT'),),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+# ======= ACCES A LA SD RESULTAT =================================================
+         b_acces = BLOC ( condition = "(RESULTAT != None) or (RESU_GENE != None)",
+                          fr="acces a une SD résultat",
+# on ne peut pas mettre de regles, le défaut TOUT_ORDRE est pris en compte dans le fortran
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',into=("NON","LIN") ),
+           ),
+         ),
+# ======= BASE_ELAS_FLUI =================================================
+         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',validators=NoRepeat(),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") ),
+         ),
+
+# ======= TABLE =================================================
+         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", ),
+           #b_tabl_fonc = BLOC(condition = "AsType(TABLE) == table_fonction",
+           NOM_PARA_TABL = SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C"),
+                                fr="Nom du paramètre de la table contenant la fonction" ),
+           #),
+
+           FILTRE        = FACT(statut='f',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=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+           NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           b_cham = BLOC ( condition = "NOM_CHAM != None",
+                           regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD'),
+                                   PRESENT_ABSENT('POINT','NOEUD','GROUP_NO'),
+                                   PRESENT_ABSENT('SOUS_POINT','NOEUD','GROUP_NO'),
+                                   EXCLUS('GROUP_MA','MAILLE'),
+                                   EXCLUS('GROUP_NO','NOEUD'),),
+             NOM_CMP         =SIMP(statut='o',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' ),
+           ),
+         ),
+
+# ======= RESU_GENE =================================================
+         b_tran_gene = BLOC ( condition = "AsType(RESU_GENE) == tran_gene",
+                              fr="Récupération d'une fonction à partir d un concept TRAN_GENE",
+                              regles=(UN_PARMI('NOM_CHAM','NOEUD_CHOC','GROUP_NO_CHOC'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+           b_cham = BLOC ( condition = "(NOM_CHAM=='DEPL') or (NOM_CHAM=='VITE') or (NOM_CHAM=='ACCE')",
+                           regles=(UN_PARMI('GROUP_NO','NOEUD','NUME_CMP_GENE',),
+                                   UN_PARMI('NOM_CMP','NUME_CMP_GENE',),
+                                   EXCLUS('MULT_APPUI','CORR_STAT'),),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I' ),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+             MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+           ),
+           b_choc = BLOC ( condition = "(NOEUD_CHOC != None) or (GROUP_NO_CHOC != None)",
+                           regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),),
+             PARA_X          =SIMP(statut='o',typ='TXM',
+                              into=("INST","FN","FT1","FT2","VN","VT1","VT2","DXLOC","DYLOC","DZLOC") ),
+             PARA_Y          =SIMP(statut='o',typ='TXM',
+                              into=("INST","FN","FT1","FT2","VN","VT1","VT2","DXLOC","DYLOC","DZLOC") ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         b_harm_gene = BLOC ( condition = "AsType(RESU_GENE)==harm_gene",
+                              fr="Récupération d'une fonction à partir d un concept HARM_GENE",
+                              regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           b_cham = BLOC ( condition = "NOM_CHAM != None",
+                           regles=(UN_PARMI('NUME_CMP_GENE','NOM_CMP'),),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I' ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+             b_cmp = BLOC ( condition = "NOM_CMP != None",
+                            regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+               NOEUD         =SIMP(statut='f',typ=no),
+               GROUP_NO      =SIMP(statut='f',typ=grno),
+             ),
+           ),
+         ),
+         b_mode_gene = BLOC ( condition = "AsType(RESU_GENE)==mode_gene",
+                              fr="Récupération d'une fonction à partir d un concept MODE_GENE",
+                              regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           b_cham = BLOC ( condition = "NOM_CHAM != None",
+                           regles=(UN_PARMI('NUME_CMP_GENE','NOM_CMP'),),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I' ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+             b_cmp = BLOC ( condition = "NOM_CMP != None",
+                            regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                                    UN_PARMI('SQUELETTE','SOUS_STRUC'),),
+               NOEUD         =SIMP(statut='f',typ=no),
+               GROUP_NO      =SIMP(statut='f',typ=grno),
+               SQUELETTE     =SIMP(statut='f',typ=squelette ),
+               SOUS_STRUC    =SIMP(statut='f',typ='TXM' ),  
+             ),
+           ),
+         ),
+
+# ======= 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'),
+                                    PRESENT_ABSENT('POINT','NOEUD','GROUP_NO'),
+                                    PRESENT_ABSENT('SOUS_POINT','NOEUD','GROUP_NO'),
+                                    EXCLUS('GROUP_MA','MAILLE'),
+                                    EXCLUS('GROUP_NO','NOEUD'),),
+           NOM_CMP         =SIMP(statut='o',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' ),
+         ),
+
+# ======= NAPPE =================================================
+         b_nappe = BLOC ( condition = "(NAPPE != None)", fr="Opérandes en cas de NAPPE",
+         VALE_PARA_FONC  =SIMP(statut='o',typ='R' ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+# ======= SURCHARGE DES ATTRIBUTS =================================================
+         NOM_PARA        =SIMP(statut='f',typ='TXM', into=C_PARA_FONCTION() ),
+         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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+               fr="Extraire d'un champ de grandeur (déplacements, vitesses ou accélérations) à partir de résultats"
+                  +" 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=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+)  ;
+#& MODIF COMMANDE  DATE 14/02/2011   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+# RECUPERATION DE PARAMETRES DE COUPLAGE VIA YACS
+# 
+RECU_PARA_YACS=OPER(nom="RECU_PARA_YACS",op=114,sd_prod=listr8_sdaster,
+                   reentrant = 'n',
+                    UIinfo={"groupes":("Fonction",)},
+                   fr        = "Gestion des scalaires via YACS pour le coupleur IFS",
+          DONNEES = SIMP(statut='o',typ='TXM',into=("INITIALISATION","CONVERGENCE","FIN","PAS",) ),
+          b_init   = BLOC(condition= "DONNEES=='INITIALISATION'",
+                     PAS             = SIMP(statut='o',typ='R', ),),
+          b_noinit = BLOC(condition= "(DONNEES=='CONVERGENCE')or(DONNEES=='FIN')",
+                     NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                     INST         = SIMP(statut='o',typ='R', ),
+                     PAS             = SIMP(statut='o',typ='R', ),),
+          b_pastps = BLOC(condition= "(DONNEES=='PAS')",
+                     NUME_ORDRE_YACS = SIMP(statut='o', typ='I',),
+                     INST         = SIMP(statut='o',typ='R', ),
+                     PAS             = SIMP(statut='o',typ='R', ),),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+);
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster,
+         fr="Récupérer dans une table les valeurs d'un paramètre d'une SD Résultat ou d'extraire une table contenue"
+            +" dans une autre SD pour celles qui le permettent",
+         UIinfo={"groupes":("Résultats et champs","Tables",)},reentrant='n',
+         CO              =SIMP(statut='o',typ=assd),
+         regles=(UN_PARMI('NOM_TABLE','NOM_PARA')),
+         NOM_TABLE       =SIMP(statut='f',typ='TXM' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 02/05/2011   AUTEUR DESOZA T.DESOZA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f',
+               fr="Résolution par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT"+
+                  "ou Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné",
+               UIinfo={"groupes":("Résolution",)},
+         MATR           =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_sdaster),
+         CHAM_CINE       =SIMP(statut='f',typ=cham_no_sdaster),
+
+         # mot-clé commun aux solveurs MUMPS, GCPC et PETSc:
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+         
+         # mot-clé pour les posttraitements de la phase de solve de MUMPS
+         POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+         
+         # mot-clé commun aux solveurs GCPC et PETSc:
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+         MATR_PREC       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+
+         # mots-clés pour solveur PETSc:
+         ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="GMRES" ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def rest_cond_tran_prod(RESULTAT,TYPE_RESU,**args ):
+  if AsType(RESULTAT) == dyna_trans  : return dyna_trans
+  if (AsType(RESULTAT) == evol_noli and TYPE_RESU == "DYNA_TRANS") : return dyna_trans
+  if (AsType(RESULTAT) == evol_noli and TYPE_RESU == "EVOL_NOLI") : return evol_noli
+
+  raise AsException("type de concept resultat non prevu")
+
+REST_COND_TRAN=OPER(nom="REST_COND_TRAN",op=  78,sd_prod=rest_cond_tran_prod,
+                    fr="Restituer dans la base physique des résultats issus d'un calcul" 
+                        +"non-lineaire avec projection modale ou d'un calcul transitoire linear"
+                        +"avec condensation dynamique",
+                    reentrant='f',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+        regles=(
+                EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
+                EXCLUS('MACR_ELEM_DYNA','BASE_MODALE'),),
+         RESULTAT        =SIMP(statut='f',typ=(evol_noli,dyna_trans) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNA_TRANS",
+                          into=("DYNA_TRANS","EVOL_NOLI") ),
+         BASE_MODALE     =SIMP(statut='f',typ=mode_meca),
+#         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+         MACR_ELEM_DYNA  =SIMP(statut='f',typ=macr_elem_dyna),
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,defaut="ACCE",into=("DEPL",
+                                   "VITE","ACCE",),),),
+         b_base_moda=BLOC(condition="BASE_MODALE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem),),
+             RESU_FINAL      =SIMP(statut='f',typ=(evol_noli,dyna_trans) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE BOYERE E.BOYERE
+
+def rest_gene_phys_prod(RESU_GENE,**args ):
+  if AsType(RESU_GENE) == tran_gene : return dyna_trans
+  if AsType(RESU_GENE) == mode_gene : return mode_meca
+  if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+  
+  raise AsException("type de concept resultat non prevu")
+
+REST_GENE_PHYS=OPER(nom="REST_GENE_PHYS",op=  75,sd_prod=rest_gene_phys_prod,
+                    fr="Restituer dans la base physique des résultats en coordonnées généralisées",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+        regles=(
+                EXCLUS('INST','LIST_INST','TOUT_INST',
+                       'TOUT_ORDRE','NUME_ORDRE','NUME_MODE',),
+                EXCLUS('FREQ','LIST_FREQ'),
+                EXCLUS('MULT_APPUI','CORR_STAT'),
+                EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
+                EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),             
+                EXCLUS('NOEUD','GROUP_NO'),
+                EXCLUS('MAILLE','GROUP_MA'),
+                PRESENT_PRESENT('ACCE_MONO_APPUI','DIRECTION'),),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,harm_gene) ), 
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ), 
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ), 
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",into=("DEPL",
+                                   "VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO","SIPO_ELNO","SIGM_ELNO","FORC_NODA",),),),
+         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3 ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE CORUS M.CORUS
+def rest_sous_struc_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)  == evol_noli      : return evol_noli
+  if AsType(RESULTAT)  == dyna_trans     : return dyna_trans
+  if AsType(RESULTAT)  == mode_meca      : return mode_meca
+  raise AsException("type de concept resultat non prevu")
+
+REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
+          fr="Restituer dans la base physique des résultats obtenus par sous-structuration",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+        regles=(UN_PARMI('RESU_GENE','RESULTAT'),
+# ajout d'une regle de Ionel et Nicolas:
+#                UN_PARMI('NOM_CHAM','TOUT_CHAM'),
+#
+              EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST','NUME_MODE',
+                     'FREQ', 'LIST_FREQ'),
+#  Doc U à revoir
+              EXCLUS('NOEUD','GROUP_NO'),
+              EXCLUS('MAILLE','GROUP_MA'),
+              PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+              UN_PARMI('SQUELETTE','SOUS_STRUC','SECTEUR'),
+
+                ),
+         RESULTAT        =SIMP(statut='f',typ=(evol_noli,dyna_trans,
+                                            mode_meca) ),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,mode_cycl,harm_gene) ),
+         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",into=("DEPL",
+                                   "VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO","SIPO_ELNO","SIGM_ELNO","FORC_NODA",) ),),
+         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         CYCLIQUE    =FACT(statut='f',max='**',
+           NB_SECTEUR      =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+           NUME_DIAMETRE    =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+           RESULTAT2       =SIMP(statut='f',typ=(evol_elas,evol_noli,dyna_trans,evol_char,
+                                               mode_meca) ),
+         ),
+
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
+         SECTEUR         =SIMP(statut='f',typ='I'),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 29/03/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
+                    reentrant='n',
+            fr="Calculer la réponse d'une structure dans la base physique",
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),        
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca,),
+         BANDE           =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max=2    ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I'      ,validators=NoRepeat(),max='**' ),
+         TOUT_ORDRE       =SIMP(statut='f',typ='TXM',defaut="NON",  into=("OUI","NON")  ),
+         INTE_SPEC_GENE  =SIMP(statut='o',typ=table_fonction),
+         NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
+         NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),  
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=7,into=("DEPL",
+                               "VITE","ACCE","EFGE_ELNO","SIPO_ELNO","SIGM_ELNO","FORC_NODA") ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca ),
+         EXCIT           =FACT(statut='f',
+           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 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def rest_spec_temp_prod(RESU_GENE,RESULTAT,**args):
+  if AsType(RESULTAT) == dyna_harmo    : return dyna_trans
+  if AsType(RESU_GENE) == harm_gene    : return tran_gene
+  if AsType(RESULTAT) == dyna_trans    : return dyna_harmo
+  if AsType(RESU_GENE) == tran_gene    : return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+
+REST_SPEC_TEMP=OPER(nom="REST_SPEC_TEMP",op=181,sd_prod=rest_spec_temp_prod,
+              fr="Transformée de Fourier d'un résultat",
+              reentrant='n',
+            UIinfo={"groupes":("Matrices et vecteurs",)},
+         regles=UN_PARMI('RESU_GENE','RESULTAT'),
+         RESU_GENE       =SIMP(statut='f',typ=(harm_gene,tran_gene,) ),
+         RESULTAT        =SIMP(statut='f',typ=(dyna_harmo,dyna_trans,) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE") ),
+         SYMETRIE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+);
+#& MODIF COMMANDE  DATE 20/09/2011   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+# -*- coding: iso-8859-1 -*-
+
+
+SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT",
+                     op=OPS('Macro.simu_point_mat_ops.simu_point_mat_ops'),
+                     sd_prod=table_sdaster,
+                     UIinfo={"groupes":("Résolution",)},
+                     fr="Calcul de l'évolution mécanique, en quasi-statique," \
+                        " d'un point matériel en non linéaire",
+   COMP_INCR       =C_COMP_INCR(),
+   COMP_ELAS       =C_COMP_ELAS('SIMU_POINT_MAT'),
+   MATER           =SIMP(statut='o',typ=mater_sdaster,max=30),
+
+## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
+   ANGLE      =SIMP(statut='f',typ='R',max=1, defaut=0.),
+# --MASSIF : orientation du materiau (monocristal, orthotropie)
+   MASSIF          =FACT(statut='f',max='**',
+     regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+     ANGL_REP        =SIMP(statut='f',typ='R',min=1,max=3),
+     ANGL_EULER      =SIMP(statut='f',typ='R',min=1,max=3),
+   ),
+   INCREMENT       =C_INCREMENT(),
+   NEWTON          =C_NEWTON(),
+   CONVERGENCE     =C_CONVERGENCE(),
+
+   SUPPORT= SIMP(statut='f',typ='TXM',max=1,into=("POINT","ELEMENT",),defaut=("POINT"),),
+
+   b_PM = BLOC(condition="SUPPORT ==  'POINT'",fr="Simulation sans élément fini",
+      FORMAT_TABLE  =SIMP(statut='f',typ='TXM',max=1,into=("CMP_COLONNE","CMP_LIGNE",),defaut=("CMP_COLONNE"),),
+      NB_VARI_TABLE  =SIMP(statut='f',typ='I',max=1,),
+      OPER_TANGENT  =SIMP(statut='f',typ='TXM',max=1,into=("OUI","NON",),defaut="NON",),
+       ARCHIVAGE    =FACT(statut='f',
+       LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+       INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+       PAS_ARCH        =SIMP(statut='f',typ='I' ),
+       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+                           ),
+               ),
+   b_EF = BLOC(condition="SUPPORT ==  'ELEMENT'",fr="Simulation sur un élément fini",
+      MODELISATION  =SIMP(statut='f',typ='TXM',max=1,into=("3D","C_PLAN","D_PLAN",)),
+      RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+      ARCHIVAGE       =C_ARCHIVAGE(),
+                 ),
+   # on permet certaines variables de commandes scalaires, définies par une fonction du temps
+   b_EFV = BLOC(condition="SUPPORT ==  'ELEMENT'",fr="variables de commande sur un élément fini",
+         # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
+         LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP","CORR","IRRA","HYDR","SECH","EPSA",
+                                                           "M_ACIER","M_ZIRC","NEUT1","NEUT2")),
+
+         AFFE_VARC    = FACT(statut='f',max='**',
+          NOM_VARC        =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
+                                                            "EPSA","NEUT1","NEUT2")),
+          VALE_FONC   = SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+          VALE_REF    = SIMP(statut='f',typ='R'),
+         ),
+
+        SIGM_IMPOSE=FACT(statut='f',
+              SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                         ),
+        EPSI_IMPOSE=FACT(statut='f',
+              EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+              EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                         ),
+               ),
+   b_COEF = BLOC(condition="SUPPORT ==  'POINT'",fr="matrice de coefficients",
+     regles = (PRESENT_ABSENT('SIGM_IMPOSE','MATR_C1','MATR_C2','VECT_IMPO'),
+               PRESENT_ABSENT('EPSI_IMPOSE','MATR_C1','MATR_C2','VECT_IMPO'),
+               PRESENT_ABSENT('MATR_C1','SIGM_IMPOSE','EPSI_IMPOSE'),
+               PRESENT_ABSENT('MATR_C2','SIGM_IMPOSE','EPSI_IMPOSE'),
+               PRESENT_ABSENT('VECT_IMPO', 'SIGM_IMPOSE','EPSI_IMPOSE'),
+               EXCLUS('EPSI_IMPOSE','GRAD_IMPOSE'),
+               EXCLUS('SIGM_IMPOSE','GRAD_IMPOSE'),
+     ),
+
+     SIGM_IMPOSE=FACT(statut='f',
+           SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                      ),
+     EPSI_IMPOSE=FACT(statut='f',
+           EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                      ),
+     GRAD_IMPOSE=FACT(statut='f',
+           regles = ( ENSEMBLE('F11','F12','F13','F21','F22','F23','F31','F32','F33',),),
+           F11 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F12 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F13 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F21 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F22 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F23 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F31 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F32 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F33 = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                      ),
+     MATR_C1=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     MATR_C2=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ='R',max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+           NUME_COLONNE  =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=12 ),
+                              ),
+     VECT_IMPO=FACT(statut='f',max='**',
+           VALE          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max=1, ),
+           NUME_LIGNE    =SIMP(statut='o',typ='I',max=1,val_min=1,val_max=6 ),
+                              ),
+                    ),
+   SIGM_INIT=FACT(statut='f',
+          SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIZZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIXY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIXZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIYZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+                     ),
+   EPSI_INIT=FACT(statut='f',
+          EPXX = SIMP(statut='o',typ='R',max=1),
+          EPYY = SIMP(statut='o',typ='R',max=1),
+          EPZZ = SIMP(statut='o',typ='R',max=1),
+          EPXY = SIMP(statut='o',typ='R',max=1),
+          EPXZ = SIMP(statut='o',typ='R',max=1),
+          EPYZ = SIMP(statut='o',typ='R',max=1),
+                     ),
+   VARI_INIT=FACT(statut='f',
+          VALE = SIMP(statut='o',typ='R',max='**'),
+                     ),
+   INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+
+STANLEY=MACRO(nom="STANLEY",
+              op=OPS('Macro.stanley_ops.stanley_ops'),
+              sd_prod=None,
+              reentrant='n',
+              UIinfo={"groupes":("Post-traitements",)},
+              fr="Outil de post-traitement interactif Stanley ",
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther,mode_meca,dyna_harmo,dyna_trans) ),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         DISPLAY         =SIMP(statut='f',typ='TXM'),
+         UNITE_VALIDATION=SIMP(statut='f',typ='I',val_min=10,val_max=90,
+                               fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"),
+
+)  ;
+#& MODIF COMMANDE  DATE 12/10/2011   AUTEUR BARGELLI R.BARGELLINI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+#
+STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
+                   fr="Calcul de l'évolution mécanique ou thermo-hydro-mécanique couplée, en quasi-statique,"
+                      +" d'une structure en non linéaire",
+                   reentrant='f',
+            UIinfo={"groupes":("Résolution","Mécanique",)},
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+         ),
+         CONTACT         =SIMP(statut='f',typ=char_contact),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+              ),
+#-------------------------------------------------------------------
+         COMP_INCR       =C_COMP_INCR(),
+#-------------------------------------------------------------------
+         COMP_ELAS       =C_COMP_ELAS('STAT_NON_LINE'),
+#-------------------------------------------------------------------
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+           ETAT_INIT       =FACT(statut='o',
+             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+                  #   EXCLUS('EVOL_NOLI','DEPL',),
+                  #   EXCLUS('EVOL_NOLI','SIGM',),
+                  #   EXCLUS('EVOL_NOLI','VARI',),
+                     EXCLUS('NUME_ORDRE','INST'), ),
+             DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+             SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+             VARI            =SIMP(statut='f',typ=cham_elem),
+             STRX            =SIMP(statut='f',typ=cham_elem),
+             EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+             NUME_DIDI       =SIMP(statut='f',typ='I'),
+             INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+           ETAT_INIT       =FACT(statut='f',
+             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+                   #  EXCLUS('EVOL_NOLI','DEPL',),
+                   #  EXCLUS('EVOL_NOLI','SIGM',),
+                   #  EXCLUS('EVOL_NOLI','VARI',),
+                     EXCLUS('NUME_ORDRE','INST'), ),
+             DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+             SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+             VARI            =SIMP(statut='f',typ=cham_elem),
+             STRX            =SIMP(statut='f',typ=cham_elem),
+             EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+             NUME_DIDI       =SIMP(statut='f',typ='I'),
+             INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+#-------------------------------------------------------------------
+         INCREMENT       =C_INCREMENT(),
+#-------------------------------------------------------------------
+         METHODE         =SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPLEX")),
+             b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
+                                  NEWTON = C_NEWTON(),
+                                  ),
+#-------------------------------------------------------------------
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+#-------------------------------------------------------------------
+         PILOTAGE        =C_PILOTAGE(),
+#-------------------------------------------------------------------
+         CONVERGENCE     =C_CONVERGENCE(),
+#-------------------------------------------------------------------
+         SOLVEUR         =C_SOLVEUR('STAT_NON_LINE'),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#-------------------------------------------------------------------
+         SUIVI_DDL       =C_SUIVI_DDL(),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         AFFICHAGE      = C_AFFICHAGE(),
+#-------------------------------------------------------------------
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           RIGI_GEOM   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           b_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+              DDL_EXCLUS      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+                                    into=('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','LIAISON','DCX',
+                                          'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                          'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                          'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                          'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+           regles         = (EXCLUS('PAS_CALC','LIST_INST','INST'),),
+           LIST_INST      = SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_CALC       = SIMP(statut='f',typ='I' ),
+           CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+         ),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité",
+                               ang="List of sensitivity parameters"),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         b_info=BLOC(condition="INFO==2",
+               fr="filtre les messages émis dans le .mess selon le type de message demandé",
+               INFO_DBG = SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                               into=("CONTACT",
+                                     "MECA_NON_LINE",
+                                     "PILOTAGE",
+                                     "FACTORISATION",
+                                     "APPARIEMENT"),
+                             ),
+                    ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+ )
+
+#& MODIF COMMANDE  DATE 12/10/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE PROIX J.M.PROIX
+
+
+#              MACRO "TEST_THERMOPLASTIQUE"
+#           ----------------------------
+def test_compor_sdprod(self, COMP_INCR, **kwargs):
+    """Ne produit une table qu'en présence de COMP_INCR."""
+    if COMP_INCR:
+        return table_sdaster
+    return None
+
+
+TEST_COMPOR =MACRO(nom="TEST_COMPOR",
+                   op=OPS('Macro.test_compor_ops.test_compor_ops'),
+                   sd_prod=test_compor_sdprod,
+                   docu="",reentrant='n',
+                   fr="macro de test des comportements incrementaux dependant de la temperature",
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),),
+
+         OPTION         =SIMP(statut='f',typ='TXM',into=("THER","MECA"),defaut="THER"),
+
+         COMP_INCR       =C_COMP_INCR(),
+         COMP_ELAS       =C_COMP_ELAS('SIMU_POINT_MAT'),
+         NEWTON          =C_NEWTON(),
+         CONVERGENCE     =C_CONVERGENCE(),
+
+         b_ther          =BLOC(condition = "OPTION == 'THER'",
+            regles=(EXCLUS('C_PRAG','D_SIGM_EPSI'),),
+            MATER           =SIMP(statut='o',typ=mater_sdaster,max=1,fr="materiau dependant de la temperature"),
+            ALPHA           =SIMP(statut='o',typ=fonction_sdaster,
+                                  fr="coefficient de dilatation fonction de la temperature"),
+            YOUNG           =SIMP(statut='o',typ=fonction_sdaster,
+                                  fr="module d'Young fonction de la temperature"),
+            LIST_MATER      =SIMP(statut='o',typ=mater_sdaster,max='**',
+                                          fr="liste des materiaux constants interpolés à chaque température"),
+            TEMP_INIT       =SIMP(statut='o',typ='R', fr="temperature initiale et de reference"),
+            TEMP_FIN        =SIMP(statut='o',typ='R', fr="temperature finale"),
+            INST_FIN        =SIMP(statut='f',typ='R',defaut=1.,fr="instant final"),
+            NB_VARI         =SIMP(statut='o',typ='I', fr="nombre de variables internes - 0 en elasticité"),
+            VARI_TEST       =SIMP(statut='f',typ='TXM',max='**',
+                                  fr="liste de variables internes à tester - par defaut, toutes"),
+
+#           special ecrouissage cinematique
+            D_SIGM_EPSI     =SIMP(statut='f',typ=fonction_sdaster,
+                                  fr="module tangent fonction de la temperature- VMIS_CINE_LINE"),
+            C_PRAG          =SIMP(statut='f',typ=fonction_sdaster,
+                                  fr="constante de Prager fonction de la temperature- VMIS_ECMI_*"),
+                        ),
+         b_meca          =BLOC(condition = "OPTION == 'MECA'",
+            LIST_MATER      =SIMP(statut='o',typ=mater_sdaster,max=2,min=2,
+                                          fr="liste des materiaux en Pa puis MPa "),
+            YOUNG           =SIMP(statut='o',typ='R',fr="module d'Young"),
+            POISSON         =SIMP(statut='o',typ='R',fr="coef de Poisson"),
+            LIST_NPAS       =SIMP(statut='f',typ='I',max='**',
+                                  fr="nombre de pas de temps pour chaque discretisation"),
+            LIST_TOLE       =SIMP(statut='f',typ='R',max='**',),
+            PREC_ZERO       =SIMP(statut='f',typ='R',max='**',),
+            VARI_TEST       =SIMP(statut='f',typ='TXM',max='**',defaut=('V1','VMIS','TRACE'),
+                                  fr="liste des CMP à tester "),
+            SUPPORT         =SIMP(statut='f',typ='TXM',max=1,into=("POINT","ELEMENT",)),
+            MODELISATION    =SIMP(statut='f',typ='TXM',max=1,into=("3D","C_PLAN"),defaut="3D",),
+            ANGLE           =SIMP(statut='f',typ='R',max=1, defaut=0.,
+             fr='Rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées',),
+            MASSIF          =FACT(statut='f',max='**',fr='orientation du materiau (monocristal, orthotropie)',
+              regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+              ANGL_REP        =SIMP(statut='f',typ='R',min=1,max=3),
+              ANGL_EULER      =SIMP(statut='f',typ='R',min=1,max=3),
+                                 ),
+            VERI_MATR_OPTION  =FACT(statut='f',max=1,fr='options pour le test de la matrice tangente',
+              VALE_PERT_RELA  =SIMP(statut='f',typ='R',defaut=1.E-5),
+              PRECISION       =SIMP(statut='f',typ='R',defaut=1.E-4 ),
+              PREC_ZERO       =SIMP(statut='f',typ='R',defaut=1.E-12 ),
+                                 ),
+                               ),
+            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+                 )
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+TEST_FICHIER=MACRO(nom="TEST_FICHIER",
+                   op=OPS('Macro.test_fichier_ops.test_fichier_ops'),
+                   UIinfo={"groupes":("Utilitaires",)},
+                   fr="Tester la non régression de fichiers produits par des commandes aster",
+   FICHIER          =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
+   EXPR_IGNORE      =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
+
+   TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut='SOMM',into=("SOMM_ABS","SOMM","MAXI","MINI","MAXI_ABS","MINI_ABS")),
+   NB_VALE         =SIMP(statut='o',typ='I',),
+   VALE            =SIMP(statut='f',typ='R',max='**'),
+   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),
+
+   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' ),
+   ),
+
+   INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+
+TEST_FONCTION=MACRO(nom="TEST_FONCTION",
+                    op=OPS('Macro.test_fonction_ops.test_fonction_ops'),
+                    sd_prod=None,
+            fr="Extraction d'une valeur numérique ou d'un attribut de fonction pour comparaison à une valeur de référence",
+            UIinfo={"groupes":("Fonctions","Utilitaires",)},
+         TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         VALEUR          =FACT(statut='f',max='**',
+                               fr="Tester la valeur d une fonction ou d une nappe",
+           regles=(UN_PARMI('VALE_REFE','VALE_REFE_C',),
+                   UN_PARMI('VALE_PARA','INTERVALLE'),
+                   DERIVABLE('FONCTION'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster,formule) ),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter"),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2),
+           VALE_PARA       =SIMP(statut='f',typ='R'  ,validators=NoRepeat(),max=2),
+           INTERVALLE      =SIMP(statut='f',typ='R'  ,validators=NoRepeat(),min=2,max=2),
+           VALE_REFE       =SIMP(statut='f',typ='R',max='**' ),
+           VALE_REFE_C     =SIMP(statut='f',typ='C',max='**' ),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+           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',max='**',
+                               fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster,formule) ),
+           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',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=table_fonction),
+           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',max='**' ),
+           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 ),
+           LEGENDE         =SIMP(statut='f',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' ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+TEST_RESU=PROC(nom="TEST_RESU",op=23,
+            UIinfo={"groupes":("Résultats et champs","Utilitaires",)},
+         fr="Extraction d'une valeur d'une structure de donnée et comparaison à une valeur de référence",
+         regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','GENE','OBJET','TEST_NAN',)),
+
+         CHAM_NO         =FACT(statut='f',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_sdaster),
+           NOEUD           =SIMP(statut='f',typ=no   ),
+           GROUP_NO        =SIMP(statut='f',typ=grno ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max=1),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           VALE_I          =SIMP(statut='f',typ='I',max='**'),
+           VALE_C          =SIMP(statut='f',typ='C',max='**'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           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'),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         CHAM_ELEM       =FACT(statut='f',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),
+           MAILLE          =SIMP(statut='f',typ=ma),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max=1),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+           VALE            =SIMP(statut='f',typ='R',max='**' ),
+           VALE_I          =SIMP(statut='f',typ='I',max='**' ),
+           VALE_C          =SIMP(statut='f',typ='C',max='**' ),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           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' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         RESU            =FACT(statut='f',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'),
+                   DERIVABLE('RESULTAT'),),
+           RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter"),
+           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',min=2,max=2),
+           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',into=C_NOM_CHAM_INTO()),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max=1),
+           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',max='**'),
+           VALE_I          =SIMP(statut='f',typ='I',max='**'),
+           VALE_C          =SIMP(statut='f',typ='C',max='**'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=2),
+           PRECISION       =SIMP(statut='f',typ='R',max=2),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         GENE            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('VALE','VALE_I','VALE_C') ,),
+           RESU_GENE       =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+           b_vect_asse     =BLOC(condition = "AsType(RESU_GENE) == vect_asse_gene",
+             NUME_CMP_GENE   =SIMP(statut='o',typ='I'),
+           ),
+           b_mode          =BLOC(condition = "(AsType(RESU_GENE) == harm_gene) or (AsType(RESU_GENE) == mode_gene)",
+                            regles=(UN_PARMI('NUME_ORDRE','FREQ','NUME_MODE'),
+                                    UN_PARMI('NOM_CHAM','PARA'),
+                                    PRESENT_PRESENT('NOM_CHAM','NUME_CMP_GENE'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I'),
+             PARA            =SIMP(statut='f',typ='TXM'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             NUME_MODE       =SIMP(statut='f',typ='I'),
+             FREQ            =SIMP(statut='f',typ='R'),
+           ),
+           b_tran          =BLOC(condition = "AsType(RESU_GENE) == tran_gene",
+                            regles=(UN_PARMI('NUME_ORDRE','INST') ,),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NUME_CMP_GENE   =SIMP(statut='o',typ='I'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+           ),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           VALE_I          =SIMP(statut='f',typ='I',max='**'),
+           VALE_C          =SIMP(statut='f',typ='C',max='**'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=2),
+           PRECISION       =SIMP(statut='f',typ='R',max=2),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         OBJET           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('S_I','S_R',),
+                   UN_PARMI('VALE','VALE_I','VALE_C','S_R','S_I'),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           S_R             =SIMP(statut='f',typ='R'),
+           S_I             =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'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           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' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         TEST_NAN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2010   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
+                UIinfo={"groupes":("Tables","Utilitaires",)},
+                fr="Tester une cellule ou une colonne d'une table",
+                regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),
+                DERIVABLE('TABLE'),),
+#  concept table_sdaster à tester
+         TABLE           =SIMP(statut='o',typ=table_sdaster),
+
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter"),
+         FILTRE          =FACT(statut='f',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',max='**' ),
+         VALE_I          =SIMP(statut='f',typ='I',max='**' ),
+         VALE_C          =SIMP(statut='f',typ='C',max='**' ),
+         VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         LEGENDE         =SIMP(statut='f',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' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+
+TEST_TEMPS=MACRO(nom="TEST_TEMPS",
+                 op=OPS('Macro.test_temps_ops.test_temps_ops'),
+                 sd_prod=None,
+                 UIinfo={"groupes":("Utilitaires",)},
+                 fr="Permet de vérifier le temps passé dans les commandes",
+                 reentrant='n',
+
+   RESU = FACT(statut='o',max='**',
+      COMMANDE   = SIMP(statut='o', typ='TXM',
+            fr="Nom de la commande testee"),
+      NUME_ORDRE = SIMP(statut='f', typ='I', defaut=1, val_min=1,
+            fr="Numero de l'occurrence de la commande testee"),
+      MACHINE    = SIMP(statut='o', typ='TXM', max='**',
+            fr="Liste des machines dont on a la référence"),
+      VALE       = SIMP(statut='o', typ='R', max='**',
+            fr="Temps CPU sur les machines listees en secondes"),
+      CRITERE    = SIMP(statut='f', typ='TXM', defaut='RELATIF', into=('ABSOLU', 'RELATIF')),
+      PRECISION  = SIMP(statut='f', typ='R', defaut=0.01, max='**',
+            fr="Ecart admissible pour chaque machine"),
+      TYPE_TEST  = SIMP(statut='o', typ='TXM', into=('USER', 'SYSTEM', 'USER+SYS', 'ELAPSED'),
+            defaut='USER+SYS',
+            fr="Valeur testee parmi 'USER', 'SYSTEM', 'USER+SYS', 'ELAPSED'"),
+   ),
+
+   INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
+            UIinfo={"groupes":("Résolution","Thermique",)},
+                   fr="Résoudre un problème thermique linéaire stationnaire ou transitoire",
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         INCREMENT       =FACT(statut='f',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+           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-6 ),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           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_sdaster),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+           SENS_INIT       =FACT(statut='f',
+             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'),
+           ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('THER_LINEAIRE'),
+#-------------------------------------------------------------------
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 20/06/2011   AUTEUR ABBAS M.ABBAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
+            UIinfo={"groupes":("Résolution","Thermique",)},
+                   fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
+                      +" stationnaire ou transitoire" ,
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+         CARA_ELEM       =SIMP(statut='c',typ=(cara_elem) ),
+         COMP_THER_NL    =FACT(statut='d',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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         ),
+         EVOL_THER_SECH  =SIMP(statut='f',typ=evol_ther),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         INCREMENT       =FACT(statut='f',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+           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-6 ),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           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_sdaster),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+         NEWTON          =FACT(statut='d',
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ,val_min=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',
+           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 ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('THER_NON_LINE'),
+#-------------------------------------------------------------------
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =C_ARCHIVAGE(),
+#-------------------------------------------------------------------
+         OBSERVATION     =C_OBSERVATION(),
+#------------------------------------------------------------------- 
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,
+                               into=("FLUX_ELGA","FLUX_ELNO") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2011   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
+                     fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
+                        +" stationnaire avec chargement mobile",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution","Thermique",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther ),
+           FONC_MULT       =SIMP(statut='c',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',
+           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") ),
+         ),
+#-------------------------------------------------------------------
+#        Catalogue commun SOLVEUR
+         SOLVEUR         =C_SOLVEUR('THER_NON_LINE_MO'),
+#-------------------------------------------------------------------
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+
+
+
+#& MODIF COMMANDE  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+# Vérification des imports et définitions non autorisés dans le catalogue
+UNAUTHORIZED = ("numpy", "UTMESS", "Table", "Graph")
+
+for _name in UNAUTHORIZED:
+    _obj = globals().get(_name, None)
+    assert _obj is None, "Definition de '%s' interdite dans le catalogue." % _name
+
+assert aster_exists or aster is None
+
diff --git a/Aster/Cata/cataSTA11/ops.py b/Aster/Cata/cataSTA11/ops.py
new file mode 100644 (file)
index 0000000..75518a8
--- /dev/null
@@ -0,0 +1,478 @@
+#@ MODIF ops Cata  DATE 31/10/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+# Modules Python
+import os
+import traceback
+import cPickle as pickle
+import re
+from math import sqrt, pi, atan2, tan, log, exp
+
+# Modules Eficas
+import Accas
+from Accas import ASSD
+from Noyau.ascheckers     import CheckLog
+from Noyau.N_info import message, SUPERV
+
+try:
+   import aster
+   aster_exists = True
+   # Si le module aster est présent, on le connecte
+   # au JDC
+   import Build.B_CODE
+   Build.B_CODE.CODE.codex=aster
+
+   from Utilitai.Utmess   import UTMESS
+   from Build.B_SENSIBILITE_MEMO_NOM_SENSI import MEMORISATION_SENSIBILITE
+   from Execution.E_Global import MessageLog
+except:
+   aster_exists = False
+
+
+
+def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, LANG, INFO):
+   """Fonction sdprod partie commune à DEBUT et POURSUITE.
+   (on stocke un entier au lieu du logique)
+   """
+   jdc.par_lot    = PAR_LOT
+   jdc.impr_macro = int(IMPR_MACRO == 'OUI')
+   jdc.jxveri     = int(CODE != None or (DEBUG != None and DEBUG['JXVERI'] == 'OUI'))
+   jdc.sdveri     = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI')
+   jdc.fico       = None
+   jdc.sd_checker = CheckLog()
+   jdc.info_level = INFO
+   if CODE != None:
+      jdc.fico = CODE['NOM']
+   if LANG:
+       from Execution.i18n import localization
+       localization.install(LANG)
+   if aster_exists:
+      # pb en cas d'erreur dans FIN : appeler reset_print_function dans traiter_fin_exec ?
+      #from functools import partial
+      #asprint = partial(aster.affiche, 'MESSAGE')
+      #message.register_print_function(asprint)
+      # en POURSUITE, ne pas écraser la mémorisation existante.
+      if not hasattr(jdc, 'memo_sensi'):
+         jdc.memo_sensi = MEMORISATION_SENSIBILITE()
+      jdc.memo_sensi.reparent(jdc)
+      # ne faire qu'une fois
+      if not hasattr(jdc, 'msg_init'):
+         # messages d'alarmes désactivés
+         if IGNORE_ALARM:
+            if not type(IGNORE_ALARM) in (list, tuple):
+               IGNORE_ALARM = [IGNORE_ALARM]
+            for idmess in IGNORE_ALARM:
+               MessageLog.disable_alarm(idmess)
+      # en POURSUITE, conserver le catalogue de comportement picklé
+      if not hasattr(jdc, 'catalc'):
+         from Comportement import catalc
+         jdc.catalc = catalc
+      jdc.msg_init = True
+
+
+def DEBUT(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, LANG, INFO, **args):
+   """
+       Fonction sdprod de la macro DEBUT
+   """
+   # La commande DEBUT ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, LANG, INFO)
+
+
+def build_debut(self,**args):
+   """
+   Fonction ops pour la macro DEBUT
+   """
+   self.jdc.UserError=self.codex.error
+
+   if self.jdc.par_lot == 'NON' :
+      self.jdc._Build()
+   # On execute la fonction debut pour initialiser les bases
+   # Cette execution est indispensable avant toute autre action sur ASTER
+   # op doit être un entier car la fonction debut appelle GCECDU qui demande
+   # le numéro de l'operateur associé (getoper)
+   self.definition.op=0
+   self.set_icmd(1)
+   lot,ier=self.codex.debut(self,1)
+   # On remet op a None juste apres pour eviter que la commande DEBUT
+   # ne soit executée dans la phase d'execution
+   self.definition.op=None
+   return ier
+
+def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, LANG, INFO, **args):
+   """
+       Fonction sdprod de la macro POURSUITE
+   """
+   # La commande POURSUITE ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
+
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, LANG, INFO)
+
+   if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")):
+     # Le module d'execution est accessible et glob.1 est present
+     # Pour eviter de rappeler plusieurs fois la sequence d'initialisation
+     # on memorise avec l'attribut fichier_init que l'initialisation
+     # est réalisée
+     if hasattr(self,'fichier_init'):return
+     self.fichier_init='glob.1'
+     self.jdc.initexec()
+     # le sous programme fortran appelé par self.codex.poursu demande le numéro
+     # de l'operateur (GCECDU->getoper), on lui donne la valeur 0
+     self.definition.op=0
+     lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+     # Par la suite pour ne pas executer la commande pendant la phase
+     # d'execution on le remet à None
+     self.definition.op=None
+     # On demande la numérotation de la commande POURSUITE avec l'incrément
+     # lonuti pour qu'elle soit numérotée à la suite des commandes existantes.
+     # self.set_icmd(lonuti)    Non : on repart à zéro
+     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]
+       message.info(SUPERV, '%s %s %s %s', nomres, concep, nomcmd, statut)
+       if nomres[0] not in (' ', '.', '&') and statut != '&DETRUIT':
+          exec nomres+'='+concep.lower()+'()' in self.parent.g_context,d
+       elif statut == '&DETRUIT':
+          self.jdc.nsd = self.jdc.nsd+1
+       pos=pos+80
+     # ces ASSD seront écrasées par le pick.1,
+     # on vérifiera la cohérence de type entre glob.1 et pick.1
+     for k,v in d.items():
+       self.parent.NommerSdprod(v,k)
+     self.g_context=d
+
+     # Il peut exister un contexte python sauvegardé sous forme  pickled
+     # On récupère ces objets après la restauration des concepts pour que
+     # la récupération des objets pickled soit prioritaire.
+     # On vérifie que les concepts relus dans glob.1 sont bien tous
+     # presents sous le même nom et du même type dans pick.1
+     # Le contexte est ensuite updaté (surcharge) et donc enrichi des
+     # variables qui ne sont pas des concepts.
+     # On supprime du pickle_context les concepts valant None, ca peut
+     # être le cas des concepts non executés, placés après FIN.
+     UTMESS('I', 'SUPERVIS2_1', valk='pick.1')
+     pickle_context = get_pickled_context()
+     if pickle_context == None:
+        UTMESS('F', 'SUPERVIS_86')
+        return
+     self.jdc.restore_pickled_attrs(pickle_context)
+     from Cata.cata  import entier
+     from Noyau.N_CO import CO
+     for elem in pickle_context.keys():
+         if isinstance(pickle_context[elem], ASSD):
+            pickle_class = pickle_context[elem].__class__
+            # on rattache chaque assd au nouveau jdc courant (en poursuite)
+            pickle_context[elem].jdc = self.jdc
+            pickle_context[elem].parent = self.jdc
+            # le marquer comme 'executed'
+            pickle_context[elem].executed = 1
+            # pour que sds_dict soit cohérent avec g_context
+            self.jdc.sds_dict[elem] = pickle_context[elem]
+            if elem != pickle_context[elem].nom:
+               name = re.sub('_([0-9]+)$', '[\\1]', pickle_context[elem].nom)
+               if self.jdc.info_level > 1:
+                  UTMESS('I', 'SUPERVIS2_3',
+                         valk=(elem, type(pickle_context[elem]).__name__.upper()))
+               UTMESS('A', 'SUPERVIS_93', valk=(elem, "del %s" % name))
+               del pickle_context[elem]
+               continue
+            # détecte les incohérences
+            if elem in self.g_context.keys():
+               poursu_class = self.g_context[elem].__class__
+               if poursu_class != pickle_class :
+                  UTMESS('F','SUPERVIS_87',valk=[elem])
+                  return
+            elif pickle_class not in (CO, entier) :
+            # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal
+            # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base
+            # même situation pour le type 'entier' produit uniquement par DEFI_FICHIER
+               UTMESS('F','SUPERVIS_88', valk=[elem,str(pickle_class)])
+               return
+         if pickle_context[elem]==None:
+            del pickle_context[elem]
+     self.g_context.update(pickle_context)
+     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
+     if aster_exists:
+        UTMESS('F','SUPERVIS_89')
+     self.make_poursuite()
+
+def get_pickled_context():
+    """
+       Cette fonction permet de réimporter dans le contexte courant du jdc (jdc.g_context)
+       les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une
+       précédente étude. Un fichier pick.1 doit être présent dans le répertoire de travail
+    """
+    fpick = 'pick.1'
+    if not os.path.isfile(fpick):
+       return None
+
+    # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés
+    context={}
+    try:
+       file=open(fpick,'r')
+       # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement
+       # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère
+       # aucun objet.
+       context=pickle.load(file)
+       file.close()
+    except:
+       # En cas d'erreur on ignore le contenu du fichier
+       traceback.print_exc()
+       return None
+
+    return context
+
+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 build_poursuite(self,**args):
+   """
+   Fonction ops pour la macro POURSUITE
+   """
+   # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE
+   # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans
+   # la fonction sdprod de la commande (ops.POURSUITE))
+   self.set_icmd(1)
+   self.jdc.UserError = self.codex.error
+   return 0
+
+def INCLUDE(self,UNITE,**args):
+   """
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   if not UNITE : return
+   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 appelle la methode speciale
+      self.Execute_alone()
+
+   self.make_include(unite=UNITE)
+
+def INCLUDE_context(self,d):
+   """
+       Fonction op_init pour macro INCLUDE
+   """
+   ctxt = self.g_context
+   d.update(ctxt)
+
+def build_include(self,**args):
+   """
+   Fonction ops de la macro INCLUDE appelée lors de la phase de Build
+   """
+   # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+   # le numéro de la commande n est pas utile en phase de construction
+   # La macro INCLUDE ne sera pas numérotée (incrément=None)
+   ier=0
+   self.set_icmd(None)
+   icmd=0
+   # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien.
+   #ier=self.codex.opsexe(self,icmd,-1,1)
+   return ier
+
+def build_detruire(self,d):
+   """Fonction op_init de DETRUIRE."""
+   list_co = set()
+   sd = []
+   # par nom de concept (typ=assd)
+   if self["CONCEPT"] != None:
+      for mc in self["CONCEPT"]:
+         mcs = mc["NOM"]
+         if type(mcs) not in (list, tuple):
+            mcs = [mcs]
+         list_co.update(mcs)
+   # par chaine de caractères (typ='TXM')
+   if self["OBJET"] != None:
+      for mc in self["OBJET"]:
+         mcs = mc["CHAINE"]
+         if type(mcs) not in (list, tuple):
+            mcs = [mcs]
+         # longueur <= 8, on cherche les concepts existants
+         for nom in mcs:
+            assert type(nom) in (str, unicode), 'On attend une chaine de caractères : %s' % nom
+            if len(nom.strip()) <= 8:
+               if self.jdc.sds_dict.get(nom) != None:
+                  list_co.add(self.jdc.sds_dict[nom])
+               elif d.get(nom) != None:
+                  list_co.add(d[nom])
+            #else uniquement destruction des objets jeveux
+
+   for co in list_co:
+      assert isinstance(co, ASSD), 'On attend un concept : %s (type=%s)' % (co, type(co))
+      nom = co.nom
+      # traitement particulier pour les listes de concepts, on va mettre à None
+      # le terme de l'indice demandé dans la liste :
+      # nomconcept_i est supprimé, nomconcept[i]=None
+      i = nom.rfind('_')
+      if i > 0 and not nom.endswith('_'):
+         concept_racine = nom[:i]
+         if d.has_key(concept_racine) and type(d[concept_racine]) is list:
+            try:
+               num = int(nom[i+1:])
+               d[concept_racine][num] = None
+            except (ValueError, IndexError):
+               # cas : RESU_aaa ou (RESU_8 avec RESU[8] non initialisé)
+               pass
+      # pour tous les concepts :
+      if d.has_key(nom):
+         del d[nom]
+      if self.jdc.sds_dict.has_key(nom):
+         del self.jdc.sds_dict[nom]
+      #XXX/memoire suppression du concept et de sa partie SD
+      #co.supprime()
+      # On signale au parent que le concept n'existe plus après l'étape self
+      self.parent.delete_concept_after_etape(self, co)
+      # marque comme détruit == non executé
+      co.executed = 0
+
+
+def build_procedure(self,**args):
+    """
+    Fonction ops de la macro PROCEDURE appelée lors de la phase de Build
+    """
+    ier=0
+    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+    # le numéro de la commande n est pas utile en phase de construction
+    # On ne numérote pas une macro PROCEDURE (incrément=None)
+    self.set_icmd(None)
+    icmd=0
+    #ier=self.codex.opsexe(self,icmd,-1,3)
+    return ier
+
+def build_DEFI_FICHIER(self,**args):
+    """
+    Fonction ops de la macro DEFI_FICHIER
+    """
+    ier=0
+    self.set_icmd(1)
+    icmd=0
+    ier=self.codex.opsexe(self,icmd,-1,26)
+    return ier
+
+def build_formule(self, d):
+    """Fonction ops de FORMULE."""
+    NOM_PARA = self.etape['NOM_PARA']
+    VALE = self.etape['VALE']
+    VALE_C = self.etape['VALE_C']
+    if type(NOM_PARA) not in (list, tuple):
+        NOM_PARA = [NOM_PARA, ]
+    for para in NOM_PARA:
+        if para.strip() != para:
+            raise Accas.AsException("nom de paramètre invalide (contient des blancs)" \
+               " : %s" % repr(para))
+    if self.sd == None:
+        return
+    if VALE     != None :
+        texte = ''.join(VALE.splitlines())
+    elif VALE_C != None :
+        texte = ''.join(VALE_C.splitlines())
+    self.sd.setFormule(NOM_PARA, texte.strip())
+
+def build_gene_vari_alea(self, d):
+    """Fonction ops de la macro GENE_VARI_ALEA."""
+    from Utilitai.Utmess import UTMESS
+    a = self.etape['BORNE_INF']
+    moyen = self.etape['VALE_MOY' ]
+    TYPE = self.etape['TYPE']
+    if self['INIT_ALEA'] is not None:
+        jump = self.etape['INIT_ALEA' ]
+        self.iniran(jump)
+    if TYPE == 'EXP_TRONQUEE':
+        b = self.etape['BORNE_SUP']
+        if a >= b:
+            UTMESS('F', 'PROBA0_1', valr=[a, b])
+        elif moyen <= a or moyen >= b:
+            UTMESS('F', 'PROBA0_2', valr=[a, moyen, b])
+        k = 1. / (moyen - a)
+        if exp(-b * k) < 1.e-12:
+            UTMESS('F', 'PROBA0_3')
+        # résolution par point fixe
+        eps = 1.E-4
+        nitmax = 100000
+        test = 0.
+        while abs((test - k) / k) > eps:
+            test = k
+            k = 1. / (moyen - (a * exp(-a * k) - b * exp(-b * k)) / \
+                               (exp(-a * k) - exp(-b * k)))
+        # génération de la variable aléatoire
+        alpha = exp(-a * k) - exp(-b * k)
+        self.sd.valeur = -(log(exp(-a * k) - alpha * self.getran()[0])) / k
+    elif TYPE == 'EXPONENTIELLE':
+       if moyen <= a:
+          UTMESS('F', 'PROBA0_4', valr=[moyen, a])
+       v = moyen - a
+       u = self.getran()[0]
+       x = -log(1 - u)
+       self.sd.valeur = a + v * x
+    elif TYPE == 'GAMMA':
+       delta = self.etape['COEF_VAR' ]
+       if moyen <= a:
+          UTMESS('F', 'PROBA0_4', valr=[moyen, a])
+       v = moyen - a
+       alpha = 1. / delta**2
+       if alpha <= 1.:
+          UTMESS('F', 'PROBA0_5')
+       gamma2 = alpha - 1.
+       gamm1 = 1. / gamma2
+       beta = sqrt(2. * alpha - 1.)
+       beta2 = 1. / beta**2
+       f0 = 0.5 + (1. / pi) * atan2(-gamma2 / beta, 1.)
+       c1 = 1. - f0
+       c2 = f0 - 0.5
+       vref = 0.
+       vv     = -1.
+       while -vv > vref:
+          u = self.getran()[0]
+          gamdev = beta * tan(pi * (u * c1 + c2)) + gamma2
+          unif = self.getran()[0]
+          if unif < 0.:
+             UTMESS('F', 'PROBA0_6')
+          vv = -log(unif)
+          vref = log(1 + beta2 * ((gamdev - gamma2)**2)) \
+               + gamma2 * log(gamdev * gamm1) - gamdev + gamma2
+       if vv <= 0.:
+          UTMESS('F', 'PROBA0_7')
+       self.sd.valeur = a + v * delta**2 * gamdev
index 10ce4d8a8b07189af26c00f306c1ae520f51b7da..f9b042ca010ca24da7eb2925011efa1c1c15aecc 100644 (file)
@@ -11,4 +11,4 @@ POURSUITE.itemeditor=pre74.compomacro.POURSUITETreeItem
 import os,sys
 import prefs
 import sys
-rep_macro = os.path.join(prefs.REPINI,'Cata/cataSTA6')
+rep_macro = os.path.join(prefs.repIni,'Cata/cataSTA6')
index 38b937db9a454ab5d3702cfcd57d4d496c23111f..17b64ff990ef4adc922d6216d9fae80f76fa3668 100644 (file)
@@ -1,6 +1,6 @@
 import os,sys
 import prefs
 import sys
-rep_macro = os.path.join(prefs.REPINI,'Cata/cataSTA74')
+rep_macro = os.path.join(prefs.repIni,'Cata/cataSTA74')
 sys.path.insert(0,rep_macro)
 from cata import *
index 61b51b48ff7aa1b4933694a5acaedc9923bdc97f..7218d9453e9cd407f9172ef1eac9376346e2661f 100644 (file)
@@ -1,6 +1,6 @@
 import os,sys
 import prefs
 import sys
-rep_macro = os.path.join(prefs.REPINI,'Cata/cataSTA76')
+rep_macro = os.path.join(prefs.repIni,'Cata/cataSTA76')
 sys.path.insert(0,rep_macro)
 from cata import *
index dabeeb7b11688ba3a1d163cfec1d8f1057870329..4e2be5e76394b8acf4ff34c8b651dc65148a1a40 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_table_ops Macro  DATE 05/01/2010   AUTEUR MACOCCO K.MACOCCO 
+#@ MODIF calc_table_ops Macro  DATE 07/09/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -21,6 +21,7 @@
 # RESPONSABLE MCOURTOI M.COURTOIS
 from types import *
 EnumTypes = (ListType, TupleType)
+import os
 
 def calc_table_ops(self, TABLE, ACTION, INFO, **args):
    """
@@ -52,7 +53,6 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
    DETRUIRE      = self.get_cmd('DETRUIRE')
 
    # 0. faut-il utiliser une table dérivée
-   form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
    if args['SENSIBILITE']:
       ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, args['SENSIBILITE'].nom)
       sdtab = table_jeveux(ncomp)
@@ -136,7 +136,8 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
          tab.fromfunction(occ['NOM_PARA'], occ['FORMULE'])
          if INFO == 2:
             vectval = getattr(tab, occ['NOM_PARA']).values()
-            aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' % (occ['NOM_PARA']+repr(vectval))+'\n')
+            aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' \
+                % (occ['NOM_PARA'], repr(vectval)))
 
       #----------------------------------------------
       # 6. Traitement de AJOUT
@@ -155,13 +156,12 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
 
    dprod = tab.dict_CREA_TABLE()
    if INFO == 2:
-      echo_mess = []
-      echo_mess.append( '@-'*30+'\n' )
-      echo_mess.append( tab )
+      echo_mess = ['']
+      echo_mess.append( repr(tab) )
       from pprint import pformat
       echo_mess.append( pformat(dprod) )
-      echo_mess.append( '@-'*30+'\n' )
-      texte_final = ' '.join(echo_mess)
+      echo_mess.append('')
+      texte_final = os.linesep.join(echo_mess)
       aster.affiche('MESSAGE', texte_final)
 
    # surcharge par le titre fourni
index 684df91c2f28c4a13eec9bd346e96b3e897ec903..c720d92387aef93b26202d474cbd2e4f88801c13 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF recal Macro  DATE 29/08/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF recal Macro  DATE 29/09/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
diff --git a/Aster/Cata/cataSTA9/Numeric.py b/Aster/Cata/cataSTA9/Numeric.py
new file mode 100644 (file)
index 0000000..185019e
--- /dev/null
@@ -0,0 +1 @@
+from numpy.oldnumeric import *
index 193a3b19295e88dfd789b0f729fc1fbe86f1773e..dc031de87a6226880203acba8279b34123ad4bed 100644 (file)
@@ -23,7 +23,7 @@
    Utilitaire sur le catalogue des structures de données.
 """
 
-__revision__ = "$Id: utilsd.py,v 1.7.4.2 2010-06-03 08:51:16 pnoyret Exp $"
+__revision__ = "$Id: utilsd.py,v 1.8.4.3 2010-12-06 13:14:01 pnoyret Exp $"
 
 import sys
 import os
index 30a1ffef6202074ea6fa732f62dcba072eae9ccb..95cf14f0b5a3ba723b6f469133ff45842d75254f 100644 (file)
@@ -23,7 +23,7 @@
 from __future__ import division
 
 __version__ = "$Name:  $"
-__Id__ = "$Id: cata.py,v 1.7.4.2 2010-06-03 08:50:35 pnoyret Exp $"
+__Id__ = "$Id: cata.py,v 1.8.4.3 2010-12-06 13:13:33 pnoyret Exp $"
 
 import Accas
 from Accas import *
@@ -12929,7 +12929,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 12/11/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12951,12 +12951,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
 DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
                       reentrant='n',
             fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique", 
-            UIinfo={"groupes":("Matrices/vecteurs",)},
+            UIinfo={"groupes":("Matrices et vecteurs",)},
          SOUS_STRUC      =FACT(statut='o',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=3),
-           TRANS           =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           TRANS           =SIMP(statut='o',typ='R',max=3),
          ),
          LIAISON         =FACT(statut='o',max='**',
            SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
@@ -14048,7 +14048,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2009   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 12/11/2010   AUTEUR MICOL A.MICOL 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14401,7 +14401,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                       "MATR_ASSE",
                                       "ITER_DEBO",
                                       "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
-                                      "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
+                                      "BOUC_GEOM","BOUC_FROT","BOUC_CONT",
                                       "SUIV_1","SUIV_2","SUIV_3","SUIV_4",
                                      ),
                                ),
@@ -15133,7 +15133,7 @@ FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
             UIinfo={"groupes":("Fonction",)},
          TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 02/08/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15158,12 +15158,15 @@ def formule_prod(self,VALE,VALE_C,**args):
    elif VALE_C != None:
       return formule_c
 
-def form_pyth_ops(self,d):
-   NOM_PARA=self.etape['NOM_PARA']
+def form_pyth_ops(self, d):
+   NOM_PARA = self.etape['NOM_PARA']
    VALE    =self.etape['VALE']
    VALE_C  =self.etape['VALE_C']
    if type(NOM_PARA) not in (list, tuple):
       NOM_PARA = [NOM_PARA,]
+   for para in NOM_PARA:
+       if para.strip() != para:
+           raise AsException("nom de paramètre invalide (contient des blancs) : %s" % repr(para))
    if self.sd == None:
       return
    if VALE     != None :
@@ -24768,7 +24771,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
                                into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 06/10/2008   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 17/11/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24787,11 +24790,9 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
 # RESPONSABLE DEVESA G.DEVESA
-def rest_spec_temp_prod(RESU_GENE,RESULTAT,**args):
+def rest_spec_temp_prod(RESULTAT,**args):
   if AsType(RESULTAT) == dyna_harmo    : return dyna_trans
-  if AsType(RESU_GENE) == harm_gene    : return tran_gene
   if AsType(RESULTAT) == dyna_trans    : return dyna_harmo
-  if AsType(RESU_GENE) == tran_gene    : return harm_gene
   raise AsException("type de concept resultat non prevu")
 
 
@@ -24799,9 +24800,7 @@ REST_SPEC_TEMP=OPER(nom="REST_SPEC_TEMP",op=181,sd_prod=rest_spec_temp_prod,
               fr="Transformée de Fourier d'un résultat",
               reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
-         regles=UN_PARMI('RESU_GENE','RESULTAT'),
-         RESU_GENE       =SIMP(statut='f',typ=(harm_gene,tran_gene,) ),
-         RESULTAT        =SIMP(statut='f',typ=(dyna_harmo,dyna_trans,) ),
+         RESULTAT        =SIMP(statut='o',typ=(dyna_harmo,dyna_trans,) ),
          METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE") ),
          SYMETRIE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
@@ -25050,7 +25049,7 @@ STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
                                fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"),
 
 )  ;
-#& MODIF COMMANDE  DATE 07/04/2009   AUTEUR ABBAS M.ABBAS 
+#& MODIF COMMANDE  DATE 12/11/2010   AUTEUR MICOL A.MICOL 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25403,7 +25402,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                                       "MATR_ASSE",
                                       "ITER_DEBO",
                                       "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
-                                      "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
+                                      "BOUC_GEOM","BOUC_FROT","BOUC_CONT",
                                       "SUIV_1","SUIV_2","SUIV_3","SUIV_4","ITER_FETI",
                                      ),
                                ),
index c9488eb6b3a11191a17c71d012ecd2832c3f5f34..880efb583d3b22534f6c7368b4e7c9dfa14f0ca0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 06/10/2009   AUTEUR MACOCCO K.MACOCCO 
+#@ MODIF ops Cata  DATE 12/11/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -212,6 +212,8 @@ def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
      # POURSUITE
      if hasattr(self,'fichier_init'):
         return
+     if aster_exists:
+        UTMESS('F','SUPERVIS_94')
      self.make_poursuite()
 
 def get_pickled_context():
diff --git a/Aster/Include.com b/Aster/Include.com
new file mode 100644 (file)
index 0000000..78fdda8
--- /dev/null
@@ -0,0 +1,2 @@
+
+MAAA=LIRE_MAILLAGE(UNITE=20,);
diff --git a/Aster/a.dat b/Aster/a.dat
new file mode 100644 (file)
index 0000000..1122ebc
--- /dev/null
@@ -0,0 +1,3 @@
+1,2
+3,7
+8,9
index 9a7273d43c4580395cee9f0bb6bab9d956383489..379a7b4554d2b5e5dac72274c987ad072d28542f 100644 (file)
@@ -22,6 +22,7 @@
     Ce module sert pour charger les paramètres de configuration d'EFICAS
 """
 # Modules Python
+print "dans Aster"
 import os, sys, string, types, re
 import traceback
 
@@ -53,6 +54,7 @@ class CONFIGbase:
       self.lecture_catalogues_standard()
       self.lecture_fichier_ini_utilisateur()
       self.init_liste_param()
+      
 
   #--------------------------------------
   def lecture_fichier_ini_standard(self):
index f7b3b7243b820145f62b76a046a2f96d256e6c15..9ce15b533febcfed0572d3f67b4ec9301ea6b4db 100644 (file)
@@ -22,12 +22,12 @@ import os
 
 # Répertoire initial
 import prefs_ASTER 
-initialdir=prefs_ASTER.REPINI
+initialdir=prefs_ASTER.repIni
 rep_cata = os.path.join(initialdir,'Cata')
 rep_Pmw = os.path.join(initialdir,'../Pmw')
 
 # Accès à la documentation Aster
-path_doc              = os.path.join(rep_cata,'..','Doc')
+path_doc              = os.path.abspath(os.path.join(rep_cata,'..','Doc'))
 exec_acrobat    =       "acroread"
 
 # Utilisateur/Développeur
@@ -37,11 +37,13 @@ path_cata_dev   =       "/tmp/cata"
 rep_travail     =   "/tmp"
 
 # Choix des catalogues
-rep_mat_v88=os.path.join(rep_cata,'cataSTA8','materiau')
-rep_mat_v96=os.path.join(rep_cata,'cataSTA9','materiau')
-rep_mat_v10=os.path.join(rep_cata,'cataSTA10','materiau')
+rep_mat_STA88=os.path.join(rep_cata,'cataSTA8','materiau')
+rep_mat_STA98=os.path.join(rep_cata,'cataSTA9','materiau')
+rep_mat_STA103=os.path.join(rep_cata,'cataSTA10','materiau')
 #
 catalogues=(
-('ASTER','v9.6',os.path.join(rep_cata,'cataSTA9'),'python'),
-('ASTER','v10.0',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
+('ASTER','STA8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
+('ASTER','STA9.8',os.path.join(rep_cata,'cataSTA9'),'python'),
+('ASTER','STA10.3',os.path.join(rep_cata,'cataSTA10'),'python'),
+('ASTER','STA11',os.path.join(rep_cata,'cataSTA11'),'python','defaut'),
 )
index ac88a1efad1e68c27278c4c034395e66a92872b5..356b91d306bcd3de06b0dfc1c8cc64e77060142f 100644 (file)
@@ -22,8 +22,8 @@ import os
 
 import prefs
 
-rep_cata = os.path.join(prefs.REPINI,'Cata')
-rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+rep_cata = os.path.join(prefs.repIni,'Cata')
+rep_Pmw = os.path.join(prefs.repIni,'../Pmw')
 
 # Accès à la documentation Aster
 path_doc              = os.path.join(rep_cata,'..','Doc')
index 25ce39b9f5c05cf02c3c1e46d371b672bbc763ff..398dc653432af5d28928fb9f7afbca331b06df4a 100644 (file)
@@ -21,9 +21,8 @@
 import os
 
 # Répertoire initial
-#initialdir=os.curdir
-from prefs_ASTER import REPINI
-initialdir=REPINI
+import prefs_ASTER 
+initialdir=prefs_ASTER.repIni
 rep_cata = os.path.join(initialdir,'Cata')
 rep_Pmw = os.path.join(initialdir,'../Pmw')
 
@@ -38,11 +37,12 @@ path_cata_dev   =       "/tmp/cata"
 rep_travail     =   "/tmp"
 
 # Choix des catalogues
-rep_mat_v88=os.path.join(rep_cata,'cataSTA8','materiau')
-rep_mat_v95=os.path.join(rep_cata,'cataSTA9','materiau')
+rep_mat_STA88=os.path.join(rep_cata,'cataSTA8','materiau')
+rep_mat_STA98=os.path.join(rep_cata,'cataSTA9','materiau')
+rep_mat_STA103=os.path.join(rep_cata,'cataSTA10','materiau')
 #
 catalogues=(
-#('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
-('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python'),
-('ASTER','v10.0',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
+('ASTER','STA8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
+('ASTER','STA9.8',os.path.join(rep_cata,'cataSTA9'),'python'),
+('ASTER','STA10.3',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
 )
index 484e857c76efc763b71c0988eed45f01b330f5c8..51af86f3e63f1defbd855442f9f9656ec023ac93 100644 (file)
@@ -1 +1,4 @@
 code="ASTER" 
+import sys, os
+if os.path.dirname(os.path.abspath(__file__)) not in sys.path :
+   sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
index 1ffe88923fc3ea09f861d2c6d02f99779aab7f51..c70c90febd3e1442c9aac1cea162755f4124f8dc 100644 (file)
 
 import os,sys
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+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')
+#CODE_PATH = os.path.join(repIni,'../../Superv')
 
 # la variable code donne le nom du code a selectionner
 code="ASTER" 
index 46c9e9c89c470988a04d1c5374f8361c5c9d5821..eb0beef334f3ba8cd654271a0fe13cef6b29bf60 100644 (file)
 #
 # ======================================================================
 
-import os,sys
+import os
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
-repIni=REPINI
+repIni=os.path.dirname(os.path.abspath(__file__))
+INSTALLDIR=os.path.abspath(os.path.join(repIni,'..'))
 
-# 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
@@ -36,6 +33,7 @@ INSTALLDIR=os.path.join(REPINI,'..')
 # Peut valoir None (defaut)
 CODE_PATH = None
 
+
 # lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
 
@@ -43,11 +41,6 @@ lang='fr'
 encoding='iso-8859-1'
 
 
-EditeurDir=INSTALLDIR+"/Editeur"
-sys.path[:0]=[INSTALLDIR]
-
-ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
-
 # Preference
 if os.name == 'nt':
    userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
@@ -60,7 +53,6 @@ if os.path.isfile(userprefs):
    except:
       pass
 
-
 #-------------------------------------------------------------------
 # Partie pour TK
 #-------------------------------------------------------------------
index a779bfcb299ac8f7973298d30fd002bb9b073b86..299b7f647123b4911c810617324f31d7cc575005 100755 (executable)
    Ce module sert à lancer EFICAS configuré pour Code_Aster
 """
 # Modules Python
-
 # Modules Eficas
-import prefs
-name='prefs_'+prefs.code
-__import__(name)
 
-import sys
-from InterfaceQT4 import eficas_go
+import sys,os
+sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..'))
 
+import prefs
+from InterfaceQT4 import eficas_go
 eficas_go.lance_eficas(code=prefs.code)
index 930d1cfba7725dfb218e14bbc6b98a961cd77da5..0cf40bcca641a4ed94415b423114165cf3296692 100755 (executable)
@@ -32,4 +32,4 @@ __import__(name)
 
 from InterfaceQT4 import eficas_go
 
-eficas_go.lance_eficas_ssIhm(code=prefs.code,fichier="/local/noyret/Eficas_Aster/cable.comm",version='v10.0')
+eficas_go.lance_eficas_ssIhm(code=prefs.code,fichier="/local/noyret/Eficas_Aster/cable.comm",version='v10.2')
index 4576e99d95b4f1c00eefc455ca0e4d408cde96e9..66c40a9dd4ad70a90fecfea75908b480528e18b9 100755 (executable)
@@ -21,7 +21,7 @@
 # ======================================================================
 
 """
-   Ce module sert à lancer EFICAS configuré pour Code_Aster
+   Ce module sert à lancer EFICAS configuré pour Code_Aster
 """
 # Modules Python
 import sys
@@ -36,7 +36,8 @@ if hasattr(prefs,'encoding'):
    del sys.setdefaultencoding
    # Fin hack
 
-sys.path[:0]=[prefs.INSTALLDIR]
+import prefs_ASTER
+sys.path[:0]=[prefs_ASTER.INSTALLDIR]
 
 import InterfaceTK
 from InterfaceTK import eficas_test
index 0f2d52b875f53264e8ba56811e07ad5286e3fb30..b2259d1e961bcb4ac2c8eb13bfca005caca233f1 100644 (file)
@@ -83,6 +83,7 @@ option ( WITH_OPENTURNS    "Install Open TURNS files"  OFF )
 option ( WITH_ASTER        "Install Aster files"       OFF )
 option ( WITH_MAP          "Install MAP files"         OFF )
 option ( WITH_SEP          "Install SEP files"         OFF )
+option ( IN_SALOME_CONTEXT "Configure Eficas for use in Salome" OFF )
 
 set ( _OPTIONLIST
   WITH_OPENTURNS 
@@ -97,6 +98,7 @@ set ( _SALOME_MECA_LIST
   WITH_OPENTURNS 
   WITH_ASTER
   WITH_SEP
+  IN_SALOME_CONTEXT
   )
 
 if (WITH_ALL_PACKAGES)
@@ -126,7 +128,11 @@ endif ( NOT ${_VALIDOPT} )
 
 # Detection des prerequis lies aux options
 if (WITH_OPENTURNS)
-  find_package ( OpenTURNS REQUIRED )
+  if (IN_SALOME_CONTEXT)
+    SET(OpenTURNS_PYTHON_MODULE_DIR "")
+  else (IN_SALOME_CONTEXT)
+    find_package ( OpenTURNS REQUIRED )
+  endif (IN_SALOME_CONTEXT)
 endif (WITH_OPENTURNS)
 
 #if (WITH_ASTER)
@@ -173,7 +179,7 @@ endif (WITH_TK)
 
 # Installation des fichiers : MAP
 if (WITH_MAP)
-  add_subdirectory ( Map )
+  add_subdirectory ( MAP )
 endif (WITH_MAP)
 
 # Installation des fichiers : Sep
diff --git a/Carmel3D/Carmel3D_cata_etendu.py b/Carmel3D/Carmel3D_cata_etendu.py
new file mode 100644 (file)
index 0000000..2b1d6c9
--- /dev/null
@@ -0,0 +1,672 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import os
+import sys
+from Accas import *
+
+# --------------------------------------------------
+# definition d une classe pour les materiaux
+# definition d une classe pour les groupes de mailles
+# definition d une classe pour les lois non lineaires
+# --------------------------------------------------
+class materiau ( ASSD ) : pass
+class grmaille ( ASSD ) : pass
+class loiNL    ( ASSD ) : pass
+
+#CONTEXT.debug = 1
+# --------------------------------------------------
+# déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
+#---------------------------------------------------
+
+JdC = JDC_CATA ( code = 'CARMEL3D',
+#                execmodul = None,
+                 regles = ( 
+#                           AU_MOINS_UN ('MATERIALS'),
+                            AU_MOINS_UN ('SOURCES'),
+#                          A_CLASSER ('VERSION','SOURCES'),
+#                          A_CLASSER ('MATERIALS','SOURCES'),
+                           ),
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# --------------------------------------------------
+# definition de groupe de mailles
+# et association du nom du materiau au groupe de mailles
+#---------------------------------------------------
+
+MESH_GR     = OPER (nom = "MESH_GR",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   fr= "definition du groupe de mailles", 
+                   ang = " mesh group definition", 
+                    sd_prod= grmaille,
+
+              Material    =  SIMP (statut="o",
+                                  typ=(materiau,),
+                                   ang="name of the linked material",
+                                  fr ="nom du materiau associe",
+                                  ), 
+             )
+
+# 
+# --------------------------------------------------
+# le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
+# 
+#================================
+# 1er bloc : bloc VERSION
+# ce bloc est volontairement cache dans l IHM 
+#================================
+
+VERSION = PROC ( nom = "VERSION",
+                        op = None,
+                       repetable = 'n',
+                       UIinfo= {"groupes":("CACHE",)},
+                        ang= "version block definition", 
+
+#----------------------
+# Liste des parametres
+#----------------------
+               
+   NUM      = SIMP (statut="o",
+                    typ="I",
+                   defaut=1, 
+                    ang="version number of the physical model", 
+                    into=( 1,),
+                   ),
+   FILETYPE = SIMP (statut="o",
+                    typ="TXM",
+                   defaut="PHYS", 
+                    ang="file type",
+                    into=( "PHYS",),
+                   ),
+
+) # Fin PROC VERSION
+
+#================================
+# 2eme bloc : bloc MATERIALS
+#================================
+# definition des 3 types de matériaux isotropiques et homogenes 
+#-----------------------------------------
+# sous bloc niveau 1 : materiau CONDUCTOR
+#-----------------------------------------
+#
+CONDUCTOR = OPER (nom = "CONDUCTOR",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+                   ang= "CONDUCTOR block definition", 
+                   fr= "definition du bloc CONDUCTOR", 
+                    sd_prod= materiau,
+
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+  CONDUCTIVITY = FACT ( statut="o", 
+                        ang ="Conductivity properties",
+                        fr  ="proprietes du bloc CONDUCTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                ),                     
+                
+                LAW             = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="LINEAR",
+                                        into = ("LINEAR","NONLINEAR"),
+                                         ang = "type of law",
+                                         fr = "type de loi",
+                                       ),
+                HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT CONDUCTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+  PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                ),                     
+                
+                LAW             = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="LINEAR",
+                                        into = ("LINEAR","NONLINEAR"),
+                                         ang = "type of law",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+                ), # fin FACT PERMEABILITY
+
+
+             ) # fin OPER conductor
+#------------------------------------------
+# sous bloc niveau 1 : materiau DIELECTRIC
+#------------------------------------------
+DIELECTRIC = OPER (nom = "DIELECTRIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+                   ang= "DIELECTRIC block definition", 
+                   fr= "definition du bloc DIELECTRIC", 
+                    sd_prod= materiau,
+
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMITTTIVITY
+#------------------------------------------------
+  PERMITTIVITY = FACT ( statut="o", 
+                        ang ="Permittivity properties",
+                        fr  ="proprietes du bloc PERMITTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                ),                     
+                
+                LAW             = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="LINEAR",
+                                        into = ("LINEAR","NONLINEAR"),
+                                         ang = "type of law",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMITTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+  PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                ),                     
+                
+                LAW             = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="LINEAR",
+                                        into = ("LINEAR","NONLINEAR"),
+                                         ang = "type of law",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+#------------------------------------------------
+# sous bloc niveau 3 : NONLINEAR
+#------------------------------------------------
+                 NonLinearLaw   = BLOC (condition="LAW=='NONLINEAR'",
+
+                                  NATURE       =  SIMP (statut="o",
+                                                        typ="TXM",
+                                                        defaut="SPLINE",
+                                                        into=("SPLINE","MARROCCO","MARROCCO+SATURATION"),
+                                                        ang="nature of the law",
+                                                        fr ="nature de la loi",
+                                                        ), 
+
+                                   SplineParam  =  BLOC (condition="NATURE=='SPLINE'",
+
+                                                  FILENAME = SIMP (statut="o", 
+                                                                   typ=("Fichier",'All Files (*)',),
+                                                                   ang="data file name",
+                                                                   fr ="nom du fichier",
+                                                                  ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="spline applied to",
+                                                                    fr ="spline appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC SplineParam
+
+                                   MarroccoParam= BLOC (condition="NATURE=='MARROCCO'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                       ), # fin BLOC MarroccoParam
+                                   
+                                  MarroSatuParam= BLOC (condition="NATURE=='MARROCCO+SATURATION'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                  BMAX     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="intersection B",
+                                                                   fr ="intersection B" ,
+                                                                   ),
+                                                  HSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="H value",
+                                                                   fr ="valeur H" ,
+                                                                   ),
+                                                  BSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="B value",
+                                                                   fr ="valeur B" ,
+                                                                   ),
+                                                  JOIN     = SIMP (statut="o", 
+                                                                   typ="TXM",
+                                                                   defaut="SPLINE",
+                                                                   into= ("SPLINE","PARABOLIC","LINEAR"),
+                                                                   ang="type of join between laws",
+                                                                   fr ="type de jointure entre les 2 lois" ,
+                                                                   ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="join applied to",
+                                                                    fr ="jointure appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC MarroSatuParam
+
+                              ), # fin BLOC NonLinearLaw
+                ), # fin FACT PERMEABILITY
+
+            ) # fin OPER DIELECTRIC
+
+#------------------------------------
+# sous bloc niveau 1 : ZSURFACIC
+#------------------------------------
+ZSURFACIC  = OPER (nom = "ZSURFACIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+                   ang= "ZSURFACIC block definition", 
+                   fr= "definition du bloc ZSURFACIC", 
+                    sd_prod= materiau,
+             
+  
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+  CONDUCTIVITY = FACT ( statut="o", 
+                        ang ="Conductivity properties",
+                        fr  ="proprietes du bloc CONDUCTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                ),                     
+                
+                LAW             = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="LINEAR",
+                                        into = ("LINEAR","NONLINEAR"),
+                                         ang = "type of law",
+                                         fr = "type de loi",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+                
+
+                ), # fin FACT CONDUCTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+  PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                ),                     
+                
+                LAW             = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="LINEAR",
+                                        into = ("LINEAR","NONLINEAR"),
+                                         ang = "type of law",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMEABILITY
+
+            ) # fin OPER ZSURFACIC
+
+
+#===================================
+# 1 type de matériau fictif 
+#---------------------------------------
+# sous bloc niveau 1 : materiau NILMAT   
+#---------------------------------------
+NILMAT     = OPER (nom = "NILMAT",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Fictitious Materials",)},
+                   ang= "NILMAT block definition", 
+                   fr= "definition du bloc NILMAT", 
+                    sd_prod= materiau,
+             
+            ) # fin OPER NILMAT
+
+
+#============================================
+# 1 type de matériau isotropique non homogene 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ISOTROPIC_FILES   
+#----------------------------------------
+EM_ISOTROPIC = PROC (nom = "EM_ISOTROPIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Inhomogeneous Materials",)},
+                   ang= "EM_ISOTROPIC block definition", 
+                   fr= "definition du bloc EM_ISOTROPIC", 
+             
+              CONDUCTIVITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'MED Files (*.med)',),
+                                        ang="CONDUCTIVITY MED data file name",
+                                        fr ="nom du fichier MED CONDUCTIVITY",
+                                       ),
+              PERMEABILITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'MED Files (*.med)',),
+                                        ang="PERMEABILITY MED data file name",
+                                        fr ="nom du fichier MED PERMEABILITY",
+                                       ),
+             ) # fin PROC EM_ISOTROPIC
+
+#============================================
+# 1 type de matériau  non isotropique 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ANISOTROPIC_FILES   
+#----------------------------------------
+EM_ANISOTROPIC = PROC (nom = "EM_ANISOTROPIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Anisotropic Materials",)},
+                   ang= "EM_ANISOTROPIC block definition", 
+                   fr= "definition du bloc EM_ANISOTROPIC", 
+             
+              CONDUCTIVITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="CONDUCTIVITY .mater data file name",
+                                        fr ="nom du fichier .mater CONDUCTIVITY",
+                                       ),
+              PERMEABILITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="PERMEABILITY .mater data file name",
+                                        fr ="nom du fichier .mater PERMEABILITY",
+                                       ),
+             ) # fin PROC EM_ANISOTROPIC
+
+#================================
+# 3eme bloc : bloc SOURCES
+#================================
+
+SOURCES = PROC ( nom = "SOURCES",
+                 op = None,
+                repetable = 'n',
+                 ang = "sources block definition", 
+
+ STRANDED_INDUCTOR  = FACT (statut="f",
+                            fr="stranded inductor source",
+               
+                      NAME     = SIMP (statut="o",
+                                      typ="TXM",
+                                       fr="name of the source",
+                                      ),
+                      NTURNS   = SIMP (statut="o",
+                                      typ="I",
+                                      defaut=1,
+                                       fr="number of tuns in the inductor",
+                                      ),
+                      CURJ     = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="intensity",
+                                      ),
+                     POLAR    = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="polarization",
+                                      ),
+
+                      ), # fin FACT 
+                           
+ EPORT = FACT (statut="f",
+               fr="eport source",
+               
+         NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of eport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT eport
+
+ HPORT = FACT (statut="f",
+               fr="hport source",
+         
+        NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of hport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT hport
+               
+
+) # Fin PROC sources
+
diff --git a/Carmel3D/Carmel3D_cata_fact.py b/Carmel3D/Carmel3D_cata_fact.py
new file mode 100644 (file)
index 0000000..f766b8f
--- /dev/null
@@ -0,0 +1,686 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# --------------------------------------------------
+
+import os
+import sys
+from Accas import *
+import types
+
+# --------------------------------------------------
+# definition d une classe pour les materiaux
+# definition d une classe pour les groupes de mailles
+# definition d une classe pour les lois non lineaires
+# --------------------------------------------------
+class materiau ( ASSD ) : pass
+class grmaille ( ASSD ) : pass
+class loi      ( ASSD ) : pass
+
+#CONTEXT.debug = 1
+# --------------------------------------------------
+# déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
+#---------------------------------------------------
+
+JdC = JDC_CATA ( code = 'CARMEL3D',
+#                execmodul = None,
+                  regles =(
+#                 regles = ( AU_MOINS_UN ('VERSION'),
+#                           AU_MOINS_UN ('MATERIALS'),
+                            AU_MOINS_UN ('SOURCES'),
+#                          A_CLASSER ('MATERIALS','SOURCES'),
+                           ),
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# definition de groupe de mailles
+# et association du nom du materiau au groupe de mailles
+#---------------------------------------------------
+
+MESH_GR     = OPER (nom = "MESH_GR",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   fr= "definition du groupe de mailles", 
+                   ang = " mesh group definition", 
+                    sd_prod= grmaille,
+
+              Material    =  SIMP (statut="o",
+                                  typ=(materiau,),
+                                   ang="name of the linked material",
+                                  fr ="nom du materiau associe",
+                                  ), 
+             )
+
+
+#=========================================================
+# le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
+# 
+#================================
+# 1er bloc : bloc VERSION
+# ce bloc est volontairement cache dans l IHM 
+#================================
+
+VERSION = PROC ( nom = "VERSION",
+                        op = None,
+                       repetable = 'n',
+                        UIinfo= {"groupes":("CACHE",)},
+                        ang= "version block definition", 
+
+#----------------------
+# Liste des parametres
+#----------------------
+               
+   NUM      = SIMP (statut="o",
+                    typ="I",
+                   defaut=1, 
+                    ang="version number of the physical model", 
+                    into=( 1,),
+                   ),
+   FILETYPE = SIMP (statut="o",
+                    typ="TXM",
+                   defaut="PHYS", 
+                    ang="file type",
+                    into=( "PHYS",),
+                   ),
+
+) # Fin PROC VERSION
+
+#================================
+# 2eme bloc : bloc MATERIALS
+#================================
+#definition des 3 types de matériaux isotropiques et homogenes 
+#------------------------------------
+# sous bloc niveau 1 : CONDUCTOR
+#------------------------------------
+#
+CONDUCTOR = OPER (nom = "CONDUCTOR",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+                   ang= "CONDUCTOR block definition", 
+                   fr= "definition du bloc CONDUCTOR", 
+                    sd_prod= materiau,
+
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+  CONDUCTIVITY = FACT ( statut="o", 
+                        ang ="Conductivity properties",
+                        fr  ="proprietes du bloc CONDUCTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+
+                LAW             = SIMP (statut="o",
+                                        typ= (loi,),
+                                         ang = "Choice of law",
+                                         fr  = "Choix d une loi",
+                                       ),
+                
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+        
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT CONDUCTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+  PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ= (loi,),
+                                         ang = "Choice of law",
+                                         fr  = "Choix d une loi",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMEABILITY
+
+
+             ) # fin OPER conductor
+#------------------------------------
+# sous bloc niveau 1 : DIELECTRIC
+#------------------------------------
+DIELECTRIC = OPER (nom = "DIELECTRIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+                   ang= "DIELECTRIC block definition", 
+                   fr= "definition du bloc DIELECTRIC", 
+                    sd_prod= materiau,
+
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMITTTIVITY
+#------------------------------------------------
+  PERMITTIVITY = FACT ( statut="o", 
+                        ang ="Permittivity properties",
+                        fr  ="proprietes du bloc PERMITTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ= (loi,),
+                                         ang = "Choice of law",
+                                         fr  = "Choix d une loi",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMITTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+  PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ= (loi,),
+                                         ang = "Choice of law",
+                                         fr  = "Choix d une loi",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+
+                ), # fin FACT PERMEABILITY
+
+
+            ) # fin OPER DIELECTRIC
+
+
+#------------------------------------
+# sous bloc niveau 1 : ZSURFACIC
+#------------------------------------
+ZSURFACIC  = OPER (nom = "ZSURFACIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+                   ang= "ZSURFACIC block definition", 
+                   fr= "definition du bloc ZSURFACIC", 
+                    sd_prod= materiau,
+                   
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+  CONDUCTIVITY = FACT ( statut="o", 
+                        ang ="Conductivity properties",
+                        fr  ="proprietes du bloc CONDUCTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ= (loi,),
+                                         ang = "Choice of law",
+                                         fr  = "Choix d une loi",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+                
+
+                ), # fin FACT CONDUCTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+  PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ= (loi,),
+                                         ang = "Choice of law",
+                                         fr  = "Choix d une loi",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMEABILITY
+             
+            ) # fin OPER ZSURFACIC
+
+
+#===================================
+# definition d un type de matériau fictif 
+#------------------------------------
+# sous bloc niveau 1 : NILMAT   
+#------------------------------------
+NILMAT     = OPER (nom = "NILMAT",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Fictitious Materials",)},
+                   ang= "NILMAT block definition", 
+                   fr= "definition du bloc NILMAT", 
+                    sd_prod= materiau,
+             
+            ) # fin OPER NILMAT
+
+
+#============================================
+# 1 type de matériau isotropique non homogene 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ISOTROPIC_FILES   
+#----------------------------------------
+EM_ISOTROPIC = PROC (nom = "EM_ISOTROPIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Isotropic Inhomogeneous Materials",)},
+                   ang= "EM_ISOTROPIC block definition", 
+                   fr= "definition du bloc EM_ISOTROPIC", 
+             
+              CONDUCTIVITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'MED Files (*.med)',),
+                                        ang="CONDUCTIVITY MED data file name",
+                                        fr ="nom du fichier MED CONDUCTIVITY",
+                                       ),
+              PERMEABILITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'MED Files (*.med)',),
+                                        ang="PERMEABILITY MED data file name",
+                                        fr ="nom du fichier MED PERMEABILITY",
+                                       ),
+                                       
+            ) # fin PROC EM_ISOTROPIC
+            
+#============================================
+# 1 type de matériau  non isotropique 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ANISOTROPIC_FILES   
+#----------------------------------------
+EM_ANISOTROPIC = PROC (nom = "EM_ANISOTROPIC",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Anisotropic Materials",)},
+                   ang= "EM_ANISOTROPIC block definition", 
+                   fr= "definition du bloc EM_ANISOTROPIC", 
+             
+              CONDUCTIVITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="CONDUCTIVITY .mater data file name",
+                                        fr ="nom du fichier .mater CONDUCTIVITY",
+                                       ),
+              PERMEABILITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="PERMEABILITY .mater data file name",
+                                        fr ="nom du fichier .mater PERMEABILITY",
+                                       ),
+             ) # fin PROC EM_ANISOTROPIC
+
+#=========================================================
+# definition des parametres d une loi avec si besoin la constitution du sous bloc NONLINEAR
+#
+# produit un objet de la class  loi 
+#------------------------------------------------
+LAW = OPER (nom = "LAW",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   ang= "NONLINEAR block definition", 
+                    fr  = "definition des parametres de la loi",
+                    sd_prod= loi,
+                  
+                LINEAR         = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="YES",
+                                        into = ("YES","NO"),
+                                         ang = "linear law or not",
+                                         fr = "loi lineaire ou non",
+                                       ),
+                 
+                 NonLinearLaw  = BLOC (condition="LINEAR=='NO'",
+
+                                  NATURE       =  SIMP (statut="o",
+                                                        typ="TXM",
+                                                        defaut="SPLINE",
+                                                        into=("SPLINE","MARROCCO","MARROCCO+SATURATION"),
+                                                        ang="nature of the law",
+                                                        fr ="nature de la loi",
+                                                        ), 
+
+                                   SplineParam  =  BLOC (condition="NATURE=='SPLINE'",
+
+                                                  FILENAME = SIMP (statut="o", 
+                                                                   typ=("Fichier",'All Files (*)',),
+                                                                   ang="data file name",
+                                                                   fr ="nom du fichier",
+                                                                  ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="spline applied to",
+                                                                    fr ="spline appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC SplineParam
+
+                                   MarroccoParam= BLOC (condition="NATURE=='MARROCCO'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                       ), # fin BLOC MarroccoParam
+                                   
+                                  MarroSatuParam= BLOC (condition="NATURE=='MARROCCO+SATURATION'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                  BMAX     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="intersection B",
+                                                                   fr ="intersection B" ,
+                                                                   ),
+                                                  HSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="H value",
+                                                                   fr ="valeur H" ,
+                                                                   ),
+                                                  BSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="B value",
+                                                                   fr ="valeur B" ,
+                                                                   ),
+                                                  JOIN     = SIMP (statut="o", 
+                                                                   typ="TXM",
+                                                                   defaut="SPLINE",
+                                                                   into= ("SPLINE","PARABOLIC","LINEAR"),
+                                                                   ang="type of join between laws",
+                                                                   fr ="type de jointure entre les 2 lois" ,
+                                                                   ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="join applied to",
+                                                                    fr ="jointure appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC MarroSatuParam
+                                       ),# fin BLOC NonLinearLaw 
+ ) # fin OPER 
+#================================
+# 3eme bloc : bloc SOURCES
+#================================
+
+SOURCES = PROC ( nom = "SOURCES",
+                 op = None,
+                repetable = 'n',
+                 ang = "sources block definition", 
+
+ STRANDED_INDUCTOR  = FACT (statut="f",
+                            fr="stranded inductor source",
+               
+                      NAME     = SIMP (statut="o",
+                                      typ="TXM",
+                                       fr="name of the source",
+                                      ),
+                      NTURNS   = SIMP (statut="o",
+                                      typ="I",
+                                      defaut=1,
+                                       fr="number of tuns in the inductor",
+                                      ),
+                      CURJ     = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="intensity",
+                                      ),
+                     POLAR    = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="polarization",
+                                      ),
+
+                      ), # fin FACT 
+                           
+ EPORT = FACT (statut="f",
+               fr="eport source",
+               
+         NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of eport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT eport
+
+ HPORT = FACT (statut="f",
+               fr="hport source",
+         
+        NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of hport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT hport
+               
+
+) # Fin PROC sources
+
diff --git a/Carmel3D/Carmel3D_cata_mat.py b/Carmel3D/Carmel3D_cata_mat.py
new file mode 100644 (file)
index 0000000..19a13c0
--- /dev/null
@@ -0,0 +1,613 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# --------------------------------------------------
+
+import os
+import sys
+from Accas import *
+import types
+
+# --------------------------------------------------
+# definition d une classe pour les materiaux
+# definition d une classe pour les groupes de mailles
+# definition d une classe pour les lois non lineaires
+# --------------------------------------------------
+class materiau ( ASSD ) : pass
+class grmaille ( ASSD ) : pass
+class loi      ( ASSD ) : pass
+
+#CONTEXT.debug = 1
+# --------------------------------------------------
+# déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
+#---------------------------------------------------
+
+JdC = JDC_CATA ( code = 'CARMEL3D',
+#                execmodul = None,
+                  regles =(
+#                            AU_MOINS_UN ('MATERIALS'),
+                            AU_MOINS_UN ('SOURCES'),
+#                          A_CLASSER ('MATERIALS','SOURCES'),
+                           ),
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# definition de groupe de mailles
+# et association du nom du materiau au groupe de mailles
+#---------------------------------------------------
+
+MESH_GR     = OPER (nom = "MESH_GR",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   fr= "definition du groupe de mailles", 
+                   ang = " mesh group definition", 
+                    sd_prod= grmaille,
+
+              Material    =  SIMP (statut="o",
+                                  typ=(materiau,),
+                                   ang="name of the linked material",
+                                  fr ="nom du materiau associe",
+                                  ), 
+             )
+
+
+#=========================================================
+# le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
+# 
+#================================
+# 1er bloc : bloc VERSION
+# ce bloc est volontairement cache dans l IHM 
+#================================
+
+VERSION = PROC ( nom = "VERSION",
+                        op = None,
+                       repetable = 'n',
+                        UIinfo= {"groupes":("CACHE",)},
+                        ang= "version block definition", 
+
+               
+   NUM      = SIMP (statut="o",
+                    typ="I",
+                   defaut=1, 
+                    ang="version number of the physical model", 
+                    into=( 1,),
+                   ),
+   FILETYPE = SIMP (statut="o",
+                    typ="TXM",
+                   defaut="PHYS", 
+                    ang="file type",
+                    into=( "PHYS",),
+                   ),
+
+) # Fin PROC VERSION
+
+#================================
+# 2eme bloc : bloc MATERIALS
+#================================
+# definition de matériau non fictif 
+#------------------------------------
+
+MATERIAU  = OPER (nom = "MATERIAU",
+                    op = None,
+                   repetable = 'n',
+#                    UIinfo= {"groupes":("Materials",)},
+                   ang= "non fictitious material definition", 
+                   fr= "definition de materiau non fictif", 
+                    sd_prod= materiau,
+
+            ISOTROPIC     = SIMP (statut="f",
+                                 typ="TXM",
+                                 defaut="TRUE",
+                                 into = ("TRUE","FALSE"),
+                                  ang = "the material is isotropic",
+                                  fr  = "le materiau est isotrope",
+                                ),
+            b_ISOTROPIC   = BLOC (condition = "ISOTROPIC=='TRUE'",
+       
+                 HOMOGENEOUS   = SIMP (statut="f",
+                                      typ="TXM",
+                                      defaut="TRUE",
+                                      into = ("TRUE","FALSE"),
+                                       ang = "the material is homogeneous",
+                                       fr  = "le materiau est homogene",
+                                     ),
+                 b_HOMOGENEOUS = BLOC (condition = "HOMOGENEOUS=='TRUE'",
+         
+
+#definition des 3 types de matériaux isotropiques et homogenes 
+#------------------------------------
+# sous bloc niveau 1 : CONDUCTOR
+#------------------------------------
+#
+                     CONDUCTOR = FACT  ( statut = "f",
+                                        ang= "CONDUCTOR block definition", 
+                                        fr= "definition du bloc CONDUCTOR", 
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+                          CONDUCTIVITY = FACT ( statut="o", 
+                                                ang ="Conductivity properties",
+                                                fr  ="proprietes du bloc CONDUCTIVITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT CONDUCTIVITY
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+                          PERMEABILITY = FACT ( statut="o", 
+                                                ang ="Permeability properties",
+                                                fr  ="proprietes du bloc PERMEABILITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMEABILITY
+
+                             ), # fin FACT CONDUCTOR
+
+#------------------------------------
+# sous bloc niveau 1 : DIELECTRIC
+#------------------------------------
+             DIELECTRIC = FACT (statut="f",
+                               ang= "DIELECTRIC block definition", 
+                               fr= "definition du bloc DIELECTRIC", 
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMITTTIVITY
+#------------------------------------------------
+                          PERMITTIVITY = FACT ( statut="o", 
+                                                ang ="Permittivity properties",
+                                                fr  ="proprietes du bloc PERMITTIVITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMITTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+                          PERMEABILITY = FACT ( statut="o", 
+                                                ang ="Permeability properties",
+                                                fr  ="proprietes du bloc PERMEABILITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMEABILITY
+
+                             ), # fin FACT DIELECTRIC
+                
+
+#------------------------------------
+# sous bloc niveau 1 : ZSURFACIC
+#------------------------------------
+             ZSURFACIC  = FACT (statut="f",
+                               ang= "ZSURFACIC block definition", 
+                               fr= "definition du bloc ZSURFACIC", 
+                   
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+                          CONDUCTIVITY = FACT ( statut="o", 
+                                                ang ="Conductivity properties",
+                                                fr  ="proprietes du bloc CONDUCTIVITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT CONDUCTIVITY
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+                          PERMEABILITY = FACT ( statut="o", 
+                                                ang ="Permeability properties",
+                                                fr  ="proprietes du bloc PERMEABILITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMEABILITY
+             
+                              ), # fin FACT ZSURFACIC
+
+                             ), # fin BLOC homogene
+
+#============================================
+# 1 type de matériau isotropique non homogene 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ISOTROPIC_FILES   
+#----------------------------------------
+         b_INHOMOGENEOUS= BLOC (condition='HOMOGENEOUS=="FALSE"',
+               EM_ISOTROPIC = FACT (statut="f",
+                                   ang= "EM_ISOTROPIC block definition", 
+                                   fr= "definition du bloc EM_ISOTROPIC", 
+             
+                       CONDUCTIVITY_File = SIMP (statut="o", 
+                                                 typ=("Fichier",'MED Files (*.med)',),
+                                                 ang="CONDUCTIVITY MED data file name",
+                                                 fr ="nom du fichier MED CONDUCTIVITY",
+                                                ),
+                       PERMEABILITY_File = SIMP (statut="o", 
+                                                 typ=("Fichier",'MED Files (*.med)',),
+                                                 ang="PERMEABILITY MED data file name",
+                                                 fr ="nom du fichier MED PERMEABILITY",
+                                                ),
+                                       
+                               ) # fin FACT EM_ISOTROPIC
+                             ), # fin BLOC inhomogene
+                             ), # fin BLOC isotropique
+
+#============================================
+# 1 type de matériau  non isotropique 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ANISOTROPIC_FILES   
+#----------------------------------------
+     b_ANISOTROPIC= BLOC (condition='ISOTROPIC=="FALSE"',
+            EM_ANISOTROPIC = FACT (statut="f",
+                                  ang= "EM_ANISOTROPIC block definition", 
+                                  fr= "definition du bloc EM_ANISOTROPIC", 
+             
+              CONDUCTIVITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="CONDUCTIVITY .mater data file name",
+                                        fr ="nom du fichier .mater CONDUCTIVITY",
+                                       ),
+              PERMEABILITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="PERMEABILITY .mater data file name",
+                                        fr ="nom du fichier .mater PERMEABILITY",
+                                       ),
+                                 ) # fin FACT EM_ANISOTROPIC
+                         ), # fin BLOC anisotropique
+ ) # fin OPER materiau
+#===================================
+# definition d un type de matériau fictif 
+#------------------------------------
+# sous bloc niveau 1 : NILMAT   
+#------------------------------------
+
+NILMAT  = OPER (nom = "NILMAT",
+                    op = None,
+                   repetable = 'n',
+                   ang= "NILMAT block definition", 
+                   fr= "definition du bloc NILMAT", 
+                    sd_prod= materiau,
+
+ ) # fin OPER nilmat
+#================================
+# 3eme bloc : bloc SOURCES
+#================================
+
+SOURCES = PROC ( nom = "SOURCES",
+                 op = None,
+                repetable = 'n',
+                 ang = "sources block definition", 
+
+ STRANDED_INDUCTOR  = FACT (statut="f",
+                            fr="stranded inductor source",
+               
+                      NAME     = SIMP (statut="o",
+                                      typ="TXM",
+                                       fr="name of the source",
+                                      ),
+                      NTURNS   = SIMP (statut="o",
+                                      typ="I",
+                                      defaut=1,
+                                       fr="number of tuns in the inductor",
+                                      ),
+                      CURJ     = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="intensity",
+                                      ),
+                     POLAR    = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="polarization",
+                                      ),
+
+                      ), # fin FACT 
+                           
+ EPORT = FACT (statut="f",
+               fr="eport source",
+               
+         NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of eport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT eport
+
+ HPORT = FACT (statut="f",
+               fr="hport source",
+         
+        NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of hport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT hport
+               
+
+) # Fin PROC sources
+
+#=========================================================
+# definition des parametres d une loi avec si besoin la constitution du sous bloc NONLINEAR
+#
+# produit un objet de la class  loi 
+#------------------------------------------------
+LAW = OPER (nom = "LAW",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   ang= "NONLINEAR block definition", 
+                    fr  = "definition des parametres de la loi",
+                    sd_prod= loi,
+                  
+                LINEAR         = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="YES",
+                                        into = ("YES","NO"),
+                                         ang = "linear law or not",
+                                         fr = "loi lineaire ou non",
+                                       ),
+                 
+                 NonLinearLaw  = BLOC (condition="LINEAR=='NO'",
+
+                                  NATURE       =  SIMP (statut="o",
+                                                        typ="TXM",
+                                                        defaut="SPLINE",
+                                                        into=("SPLINE","MARROCCO","MARROCCO+SATURATION"),
+                                                        ang="nature of the law",
+                                                        fr ="nature de la loi",
+                                                        ), 
+
+                                   SplineParam  =  BLOC (condition="NATURE=='SPLINE'",
+
+                                                  FILENAME = SIMP (statut="o", 
+                                                                   typ=("Fichier",'All Files (*)',),
+                                                                   ang="data file name",
+                                                                   fr ="nom du fichier",
+                                                                  ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="spline applied to",
+                                                                    fr ="spline appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC SplineParam
+
+                                   MarroccoParam= BLOC (condition="NATURE=='MARROCCO'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                       ), # fin BLOC MarroccoParam
+                                   
+                                  MarroSatuParam= BLOC (condition="NATURE=='MARROCCO+SATURATION'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                  BMAX     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="intersection B",
+                                                                   fr ="intersection B" ,
+                                                                   ),
+                                                  HSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="H value",
+                                                                   fr ="valeur H" ,
+                                                                   ),
+                                                  BSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="B value",
+                                                                   fr ="valeur B" ,
+                                                                   ),
+                                                  JOIN     = SIMP (statut="o", 
+                                                                   typ="TXM",
+                                                                   defaut="SPLINE",
+                                                                   into= ("SPLINE","PARABOLIC","LINEAR"),
+                                                                   ang="type of join between laws",
+                                                                   fr ="type de jointure entre les 2 lois" ,
+                                                                   ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="join applied to",
+                                                                    fr ="jointure appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC MarroSatuParam
+                                       ),# fin BLOC NonLinearLaw 
+ ) # fin OPER 
diff --git a/Carmel3D/Carmel3D_cata_matloi.py b/Carmel3D/Carmel3D_cata_matloi.py
new file mode 100644 (file)
index 0000000..48efd0c
--- /dev/null
@@ -0,0 +1,625 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# --------------------------------------------------
+
+import os
+import sys
+from Accas import *
+import types
+
+# --------------------------------------------------
+# definition d une classe pour les materiaux
+# definition d une classe pour les groupes de mailles
+# definition d une classe pour les lois non lineaires
+# --------------------------------------------------
+class materiau ( ASSD ) : pass
+class grmaille ( ASSD ) : pass
+class loi      ( ASSD ) : pass
+
+#CONTEXT.debug = 1
+# --------------------------------------------------
+# déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
+#---------------------------------------------------
+
+JdC = JDC_CATA ( code = 'CARMEL3D',
+#                execmodul = None,
+                  regles =(
+#                            AU_MOINS_UN ('MATERIALS'),
+                            AU_MOINS_UN ('SOURCES'),
+#                          A_CLASSER ('MATERIALS','SOURCES'),
+                           ),
+                 ) # Fin JDC_CATA
+
+#=========================================================
+# definition des parametres d une loi avec si besoin la constitution du sous bloc NONLINEAR
+#
+# produit un objet de la class  loi 
+#------------------------------------------------
+L_LAW = OPER (nom = "L_LAW",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   ang= "LINEAR block definition", 
+                    fr  = "definition des parametres de la loi",
+                    sd_prod= loi,
+              )
+
+NL_LAW = OPER (nom = "NL_LAW",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   ang= "NONLINEAR block definition", 
+                    fr  = "definition des parametres de la loi",
+                    sd_prod= loi,
+                  
+                 
+                                  NATURE       =  SIMP (statut="o",
+                                                        typ="TXM",
+                                                        defaut="SPLINE",
+                                                        into=("SPLINE","MARROCCO","MARROCCO+SATURATION"),
+                                                        ang="nature of the law",
+                                                        fr ="nature de la loi",
+                                                        ), 
+
+                                   SplineParam  =  BLOC (condition="NATURE=='SPLINE'",
+
+                                                  FILENAME = SIMP (statut="o", 
+                                                                   typ=("Fichier",'All Files (*)',),
+                                                                   ang="data file name",
+                                                                   fr ="nom du fichier",
+                                                                  ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="spline applied to",
+                                                                    fr ="spline appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC SplineParam
+
+                                   MarroccoParam= BLOC (condition="NATURE=='MARROCCO'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                       ), # fin BLOC MarroccoParam
+                                   
+                                  MarroSatuParam= BLOC (condition="NATURE=='MARROCCO+SATURATION'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                  BMAX     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="intersection B",
+                                                                   fr ="intersection B" ,
+                                                                   ),
+                                                  HSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="H value",
+                                                                   fr ="valeur H" ,
+                                                                   ),
+                                                  BSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="B value",
+                                                                   fr ="valeur B" ,
+                                                                   ),
+                                                  JOIN     = SIMP (statut="o", 
+                                                                   typ="TXM",
+                                                                   defaut="SPLINE",
+                                                                   into= ("SPLINE","PARABOLIC","LINEAR"),
+                                                                   ang="type of join between laws",
+                                                                   fr ="type de jointure entre les 2 lois" ,
+                                                                   ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="join applied to",
+                                                                    fr ="jointure appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC MarroSatuParam
+ ) # fin OPER
+
+ #==============================================
+ # création d objet de type L_LAW 
+ #----------------------------------
+LINEAR = L_LAW()
+# --------------------------------------------------
+# definition de groupe de mailles
+# et association du nom du materiau au groupe de mailles
+#---------------------------------------------------
+
+MESH_GR     = OPER (nom = "MESH_GR",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   fr= "definition du groupe de mailles", 
+                   ang = " mesh group definition", 
+                    sd_prod= grmaille,
+
+              Material    =  SIMP (statut="o",
+                                  typ=(materiau,),
+                                   ang="name of the linked material",
+                                  fr ="nom du materiau associe",
+                                  ), 
+             )
+
+
+#=========================================================
+# le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
+# 
+#================================
+# 1er bloc : bloc VERSION
+# ce bloc est volontairement cache dans l IHM 
+#================================
+
+VERSION = PROC ( nom = "VERSION",
+                        op = None,
+                       repetable = 'n',
+                        UIinfo= {"groupes":("CACHE",)},
+                        ang= "version block definition", 
+
+               
+   NUM      = SIMP (statut="o",
+                    typ="I",
+                   defaut=1, 
+                    ang="version number of the physical model", 
+                    into=( 1,),
+                   ),
+   FILETYPE = SIMP (statut="o",
+                    typ="TXM",
+                   defaut="PHYS", 
+                    ang="file type",
+                    into=( "PHYS",),
+                   ),
+
+) # Fin PROC VERSION
+
+#================================
+# 2eme bloc : bloc MATERIALS
+#================================
+# definition de matériau non fictif 
+#------------------------------------
+
+MATERIAU  = OPER (nom = "MATERIAU",
+                    op = None,
+                   repetable = 'n',
+#                    UIinfo= {"groupes":("Materials",)},
+                   ang= "non fictitious material definition", 
+                   fr= "definition de materiau non fictif", 
+                    sd_prod= materiau,
+
+            ISOTROPIC     = SIMP (statut="f",
+                                 typ="TXM",
+                                 defaut="TRUE",
+                                 into = ("TRUE","FALSE"),
+                                  ang = "the material is isotropic",
+                                  fr  = "le materiau est isotrope",
+                                ),
+            b_ISOTROPIC   = BLOC (condition = "ISOTROPIC=='TRUE'",
+       
+                 HOMOGENEOUS   = SIMP (statut="f",
+                                      typ="TXM",
+                                      defaut="TRUE",
+                                      into = ("TRUE","FALSE"),
+                                       ang = "the material is homogeneous",
+                                       fr  = "le materiau est homogene",
+                                     ),
+                 b_HOMOGENEOUS = BLOC (condition = "HOMOGENEOUS=='TRUE'",
+                                 regles =( AU_MOINS_UN ('CONDUCTOR','DIELECTRIC','ZSURFACIC'),
+                                         ),
+         
+
+#definition des 3 types de matériaux isotropiques et homogenes 
+#------------------------------------
+# sous bloc niveau 1 : CONDUCTOR
+#------------------------------------
+#
+                     CONDUCTOR = FACT  ( statut = "f",
+                                        ang= "CONDUCTOR block definition", 
+                                        fr= "definition du bloc CONDUCTOR", 
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+                          CONDUCTIVITY = FACT ( statut="o", 
+                                                ang ="Conductivity properties",
+                                                fr  ="proprietes du bloc CONDUCTIVITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                    defaut=LINEAR,
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT CONDUCTIVITY
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+                          PERMEABILITY = FACT ( statut="o", 
+                                                ang ="Permeability properties",
+                                                fr  ="proprietes du bloc PERMEABILITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                    defaut=LINEAR,
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMEABILITY
+
+                             ), # fin FACT CONDUCTOR
+
+#------------------------------------
+# sous bloc niveau 1 : DIELECTRIC
+#------------------------------------
+             DIELECTRIC = FACT (statut="f",
+                               ang= "DIELECTRIC block definition", 
+                               fr= "definition du bloc DIELECTRIC", 
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMITTTIVITY
+#------------------------------------------------
+                          PERMITTIVITY = FACT ( statut="o", 
+                                                ang ="Permittivity properties",
+                                                fr  ="proprietes du bloc PERMITTIVITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                    defaut=LINEAR,
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMITTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+                          PERMEABILITY = FACT ( statut="o", 
+                                                ang ="Permeability properties",
+                                                fr  ="proprietes du bloc PERMEABILITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                    defaut=LINEAR,
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMEABILITY
+
+                             ), # fin FACT DIELECTRIC
+                
+
+#------------------------------------
+# sous bloc niveau 1 : ZSURFACIC
+#------------------------------------
+             ZSURFACIC  = FACT (statut="f",
+                               ang= "ZSURFACIC block definition", 
+                               fr= "definition du bloc ZSURFACIC", 
+                   
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+                          CONDUCTIVITY = FACT ( statut="o", 
+                                                ang ="Conductivity properties",
+                                                fr  ="proprietes du bloc CONDUCTIVITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                    defaut=LINEAR,
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT CONDUCTIVITY
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+                          PERMEABILITY = FACT ( statut="o", 
+                                                ang ="Permeability properties",
+                                                fr  ="proprietes du bloc PERMEABILITY",
+                                                regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                                         ),
+                
+                             LAW            = SIMP (statut="o",
+                                                    typ= (loi,),
+                                                    defaut=LINEAR,
+                                                     ang = "Choice of law",
+                                                     fr  = "Choix d une loi",
+                                                   ),
+                
+                             VALUE_REAL     = SIMP (statut="f",
+                                                    typ="R", 
+                                                     ang = "enter a real value",
+                                                     fr  = "entrer un reel",
+                                                   ),
+                             VALUE_COMPLEX  = SIMP (statut="f",
+                                                    typ="C", 
+                                                     ang = "enter a complex value",
+                                                     fr  = "entrer un complexe",
+                                                   ),
+
+                                            ), # fin FACT PERMEABILITY
+             
+                              ), # fin FACT ZSURFACIC
+
+                             ), # fin BLOC homogene
+
+#============================================
+# 1 type de matériau isotropique non homogene 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ISOTROPIC_FILES   
+#----------------------------------------
+         b_INHOMOGENEOUS= BLOC (condition='HOMOGENEOUS=="FALSE"',
+               EM_ISOTROPIC = FACT (statut="f",
+                                   ang= "EM_ISOTROPIC block definition", 
+                                   fr= "definition du bloc EM_ISOTROPIC", 
+             
+                       CONDUCTIVITY_File = SIMP (statut="o", 
+                                                 typ=("Fichier",'MED Files (*.med)',),
+                                                 ang="CONDUCTIVITY MED data file name",
+                                                 fr ="nom du fichier MED CONDUCTIVITY",
+                                                ),
+                       PERMEABILITY_File = SIMP (statut="o", 
+                                                 typ=("Fichier",'MED Files (*.med)',),
+                                                 ang="PERMEABILITY MED data file name",
+                                                 fr ="nom du fichier MED PERMEABILITY",
+                                                ),
+                                       
+                               ) # fin FACT EM_ISOTROPIC
+                             ), # fin BLOC inhomogene
+                             ), # fin BLOC isotropique
+
+#============================================
+# 1 type de matériau  non isotropique 
+#----------------------------------------
+# sous bloc niveau 1 : EM_ANISOTROPIC_FILES   
+#----------------------------------------
+     b_ANISOTROPIC= BLOC (condition='ISOTROPIC=="FALSE"',
+            EM_ANISOTROPIC = FACT (statut="f",
+                                  ang= "EM_ANISOTROPIC block definition", 
+                                  fr= "definition du bloc EM_ANISOTROPIC", 
+             
+              CONDUCTIVITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="CONDUCTIVITY .mater data file name",
+                                        fr ="nom du fichier .mater CONDUCTIVITY",
+                                       ),
+              PERMEABILITY_File = SIMP (statut="o", 
+                                        typ=("Fichier",'.mater Files (*.mater)',),
+                                        ang="PERMEABILITY .mater data file name",
+                                        fr ="nom du fichier .mater PERMEABILITY",
+                                       ),
+                                 ) # fin FACT EM_ANISOTROPIC
+                         ), # fin BLOC anisotropique
+ ) # fin OPER materiau
+#===================================
+# definition d un type de matériau fictif 
+#------------------------------------
+# sous bloc niveau 1 : NILMAT   
+#------------------------------------
+
+NILMAT  = OPER (nom = "NILMAT",
+                    op = None,
+                   repetable = 'n',
+                   ang= "NILMAT block definition", 
+                   fr= "definition du bloc NILMAT", 
+                    sd_prod= materiau,
+
+ ) # fin OPER nilmat
+#================================
+# 3eme bloc : bloc SOURCES
+#================================
+
+SOURCES = PROC ( nom = "SOURCES",
+                 op = None,
+                repetable = 'n',
+                 ang = "sources block definition", 
+
+ STRANDED_INDUCTOR  = FACT (statut="f",
+                            fr="stranded inductor source",
+               
+                      NAME     = SIMP (statut="o",
+                                      typ="TXM",
+                                       fr="name of the source",
+                                      ),
+                      NTURNS   = SIMP (statut="o",
+                                      typ="I",
+                                      defaut=1,
+                                       fr="number of tuns in the inductor",
+                                      ),
+                      CURJ     = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="intensity",
+                                      ),
+                     POLAR    = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="polarization",
+                                      ),
+
+                      ), # fin FACT 
+                           
+ EPORT = FACT (statut="f",
+               fr="eport source",
+               
+         NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of eport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT eport
+
+ HPORT = FACT (statut="f",
+               fr="hport source",
+         
+        NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of hport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT hport
+               
+
+) # Fin PROC sources
+
diff --git a/Carmel3D/Carmel3D_cata_pa.py b/Carmel3D/Carmel3D_cata_pa.py
new file mode 100644 (file)
index 0000000..35e198d
--- /dev/null
@@ -0,0 +1,702 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# --------------------------------------------------
+
+import os
+import sys
+from Accas import *
+import types
+
+# --------------------------------------------------
+# definition d une classe pour les materiaux
+# definition d une classe pour les groupes de mailles
+# definition d une classe pour les laws non lineaires
+# --------------------------------------------------
+class materiau ( ASSD ) : pass
+class grmaille ( ASSD ) : pass
+class law    ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+# --------------------------------------------------
+# déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
+#---------------------------------------------------
+
+JdC = JDC_CATA ( code = 'CARMEL3D',
+#                execmodul = None,
+                  regles =(
+#                           AU_MOINS_UN ('MATERIALS'),
+#                           AU_MOINS_UN ('SOURCES'),
+#                          A_CLASSER ('MATERIALS','SOURCES'),
+                           ),
+                 ) # Fin JDC_CATA
+##=========================================================
+## definition des parametres d une law 
+##
+## Constitution de sous bloc NONLINEAR
+## produit un objet "bloc NONLINEAR" de type (classe) lawNL 
+##------------------------------------------------
+
+L_LAW = OPER (nom = "L_LAW",
+                    op = None,
+                   repetable = 'n',
+                   ang= "", 
+                   fr= "", 
+                    sd_prod= law,
+                    UIinfo= {"groupes":("CACHE",)},
+)
+NL_LAW = OPER (nom = "NL_LAW",
+                    op = None,
+                   repetable = 'n',
+                   ang= "", 
+                   fr= "", 
+                    sd_prod= law,
+
+                              NATURE       =  SIMP (statut="o",
+                                                    typ="TXM",
+                                                    defaut="SPLINE",
+                                                    into=("SPLINE","MARROCCO","MARROCCO+SATURATION"),
+                                                    ang="nature of the law",
+                                                    fr ="nature de la law",
+                                                     ), 
+
+                                   SplineParam  =  BLOC (condition="NATURE=='SPLINE'",
+
+                                                  FILENAME = SIMP (statut="o", 
+                                                                   typ=("Fichier",'All Files (*)',),
+                                                                   ang="data file name",
+                                                                   fr ="nom du fichier",
+                                                                  ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="spline applied to",
+                                                                    fr ="spline appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC SplineParam
+
+                                   MarroccoParam= BLOC (condition="NATURE=='MARROCCO'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                       ), # fin BLOC MarroccoParam
+                                   
+                                  MarroSatuParam= BLOC (condition="NATURE=='MARROCCO+SATURATION'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                  BMAX     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="intersection B",
+                                                                   fr ="intersection B" ,
+                                                                   ),
+                                                  HSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="H value",
+                                                                   fr ="valeur H" ,
+                                                                   ),
+                                                  BSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="B value",
+                                                                   fr ="valeur B" ,
+                                                                   ),
+                                                  JOIN     = SIMP (statut="o", 
+                                                                   typ="TXM",
+                                                                   defaut="SPLINE",
+                                                                   into= ("SPLINE","PARABOLIC","LINEAR"),
+                                                                   ang="type of join between laws",
+                                                                   fr ="type de jointure entre les 2 law" ,
+                                                                   ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="join applied to",
+                                                                    fr ="jointure appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC MarroSatuParam
+ ) # fin OPER LAW
+LINEAR=L_LAW(),
+
+# --------------------------------------------------
+# definition de groupe de mailles
+# et association du nom du materiau au groupe de mailles
+#---------------------------------------------------
+
+MESH_GROUPE     = OPER (nom = "MESH_GROUPE",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   fr= "definition du groupe de mailles", 
+                   ang = " mesh group definition", 
+                    sd_prod= grmaille,
+
+              Material    =  SIMP (statut="f",
+                                  typ=(materiau,),
+                                   ang="name of the linked material",
+                                  fr ="nom du materiau associe",
+                                  ), 
+             )
+
+
+#=========================================================
+# le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
+# 
+#================================
+# 1er bloc : bloc VERSION
+# ce bloc est volontairement cache dans l IHM 
+#================================
+
+VERSION = PROC ( nom = "VERSION",
+                        op = None,
+                       repetable = 'n',
+                        UIinfo= {"groupes":("CACHE",)},
+                        ang= "version block definition", 
+
+#----------------------
+# Liste des parametres
+#----------------------
+               
+   NUM      = SIMP (statut="o",
+                    typ="I",
+                   defaut=1, 
+                    ang="version number of the physical model", 
+                    into=( 1,),
+                   ),
+   FILETYPE = SIMP (statut="o",
+                    typ="TXM",
+                   defaut="PHYS", 
+                    ang="file type",
+                    into=( "PHYS",),
+                   ),
+
+) # Fin PROC VERSION
+
+#================================
+# 2eme bloc : bloc MATERIALS
+#================================
+#definition des 3 types de matériaux isotropiques et homogenes 
+#------------------------------------
+# sous bloc niveau 1 : CONDUCTOR
+#------------------------------------
+#
+MATERIAU = OPER (nom = "MATERIAU",
+                    op = None,
+                   repetable = 'n',
+                   ang= "CONDUCTOR block definition", 
+                   fr= "definition d un materiau", 
+                    sd_prod= materiau,
+  TYPE = SIMP(statut='o',typ='TXM',into=("CONDUCTOR","DIELECTRIC","ZSURFACIC","NILMAT","EM_ISOTROPIC_FILES","EM_ANISOTROPIC_FILES") ),
+
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+  b_conductor=BLOC(condition="TYPE=='CONDUCTOR'",
+  
+     CONDUCTIVITY = FACT ( statut="o", 
+                        ang ="Conductivity properties",
+                        fr  ="proprietes du bloc CONDUCTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+
+                LAW             = SIMP (statut="o",
+                                        typ=law,
+                                         defaut=LINEAR,
+                                         ang = "type of law",
+                                         fr = "type de law",
+                                       ),
+                
+                 HOMOGENEOUS     = SIMP (statut="o",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+        
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT CONDUCTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+     PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ=law,
+                                        defaut=LINEAR,
+                                         ang = "type of law",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMEABILITY
+
+
+             ) # fin BLOC conductor
+    ) # fin OPER Materiau
+# 
+##------------------------------------
+## sous bloc niveau 1 : DIELECTRIC
+##------------------------------------
+#DIELECTRIC = OPER (nom = "DIELECTRIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+#                  ang= "DIELECTRIC block definition", 
+#                  fr= "definition du bloc DIELECTRIC", 
+#                    sd_prod= materiau,
+#
+#
+##------------------------------------------------
+## sous bloc niveau 2 : PERMITTTIVITY
+##------------------------------------------------
+#  PERMITTIVITY = FACT ( statut="o", 
+#                        ang ="Permittivity properties",
+#                        fr  ="proprietes du bloc PERMITTIVITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#
+#               ), # fin FACT PERMITTIVITY
+#
+##------------------------------------------------
+## sous bloc niveau 2 : PERMEABILITY
+##------------------------------------------------
+#  PERMEABILITY = FACT ( statut="o", 
+#                        ang ="Permeability properties",
+#                        fr  ="proprietes du bloc PERMEABILITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#
+#                 NonLinearCond  = BLOC (condition="LAW=='NONLINEAR'",
+#                                  NONLINEAR   = SIMP (statut="o",
+#                                                    typ= (law,),
+#                                                      ang = "enter a complex value",
+#                                                      fr  = "parametres de la law non lineaire",
+#                                                           ),
+#                                       ), 
+#
+#               ), # fin FACT PERMEABILITY
+#
+#
+#           ) # fin OPER DIELECTRIC
+#
+#
+##------------------------------------
+## sous bloc niveau 1 : ZSURFACIC
+##------------------------------------
+#ZSURFACIC  = OPER (nom = "ZSURFACIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+#                  ang= "ZSURFACIC block definition", 
+#                  fr= "definition du bloc ZSURFACIC", 
+#                    sd_prod= materiau,
+#                  
+##------------------------------------------------
+## sous bloc niveau 2 : CONDUCTIVITY
+##------------------------------------------------
+#  CONDUCTIVITY = FACT ( statut="o", 
+#                        ang ="Conductivity properties",
+#                        fr  ="proprietes du bloc CONDUCTIVITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                         fr = "type de law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#               
+#
+#               ), # fin FACT CONDUCTIVITY
+#
+##------------------------------------------------
+## sous bloc niveau 2 : PERMEABILITY
+##------------------------------------------------
+#  PERMEABILITY = FACT ( statut="o", 
+#                        ang ="Permeability properties",
+#                        fr  ="proprietes du bloc PERMEABILITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                         fr = "type de law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#
+#               ), # fin FACT PERMEABILITY
+#             
+#           ) # fin OPER ZSURFACIC
+#
+#
+##===================================
+## definition d un type de matériau fictif 
+##------------------------------------
+## sous bloc niveau 1 : NILMAT   
+##------------------------------------
+#NILMAT     = OPER (nom = "NILMAT",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Fictitious Materials",)},
+#                  ang= "NILMAT block definition", 
+#                  fr= "definition du bloc NILMAT", 
+#                    sd_prod= materiau,
+#             
+#           ) # fin OPER NILMAT
+#
+#
+##============================================
+## 1 type de matériau isotropique non homogene 
+##----------------------------------------
+## sous bloc niveau 1 : EM_ISOTROPIC_FILES   
+##----------------------------------------
+#EM_ISOTROPIC = PROC (nom = "EM_ISOTROPIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Isotropic Inhomogeneous Materials",)},
+#                  ang= "EM_ISOTROPIC block definition", 
+#                  fr= "definition du bloc EM_ISOTROPIC", 
+#             
+#             CONDUCTIVITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'MED Files (*.med)',),
+#                                       ang="CONDUCTIVITY MED data file name",
+#                                       fr ="nom du fichier MED CONDUCTIVITY",
+#                                      ),
+#             PERMEABILITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'MED Files (*.med)',),
+#                                       ang="PERMEABILITY MED data file name",
+#                                       fr ="nom du fichier MED PERMEABILITY",
+#                                      ),
+#                                      
+#           ) # fin PROC EM_ISOTROPIC
+#           
+##============================================
+## 1 type de matériau  non isotropique 
+##----------------------------------------
+## sous bloc niveau 1 : EM_ANISOTROPIC_FILES   
+##----------------------------------------
+#EM_ANISOTROPIC = PROC (nom = "EM_ANISOTROPIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Anisotropic Materials",)},
+#                  ang= "EM_ANISOTROPIC block definition", 
+#                  fr= "definition du bloc EM_ANISOTROPIC", 
+#             
+#             CONDUCTIVITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'.mater Files (*.mater)',),
+#                                       ang="CONDUCTIVITY .mater data file name",
+#                                       fr ="nom du fichier .mater CONDUCTIVITY",
+#                                      ),
+#             PERMEABILITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'.mater Files (*.mater)',),
+#                                       ang="PERMEABILITY .mater data file name",
+#                                       fr ="nom du fichier .mater PERMEABILITY",
+#                                      ),
+#            ) # fin PROC EM_ANISOTROPIC
+#
+#================================
+# 3eme bloc : bloc SOURCES
+#================================
+
+SOURCES = PROC ( nom = "SOURCES",
+                 op = None,
+                repetable = 'n',
+                 ang = "sources block definition", 
+
+ STRANDED_INDUCTOR  = FACT (statut="f",
+                            fr="stranded inductor source",
+               
+                      NAME     = SIMP (statut="o",
+                                      typ="TXM",
+                                       fr="name of the source",
+                                      ),
+                      NTURNS   = SIMP (statut="o",
+                                      typ="I",
+                                      defaut=1,
+                                       fr="number of tuns in the inductor",
+                                      ),
+                      CURJ     = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="intensity",
+                                      ),
+                     POLAR    = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="polarization",
+                                      ),
+
+                      ), # fin FACT 
+                           
+ EPORT = FACT (statut="f",
+               fr="eport source",
+               
+         NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of eport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT eport
+
+ HPORT = FACT (statut="f",
+               fr="hport source",
+         
+        NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of hport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT hport
+               
+
+) # Fin PROC sources
+
diff --git a/Carmel3D/Carmel3D_cata_pn.py b/Carmel3D/Carmel3D_cata_pn.py
new file mode 100644 (file)
index 0000000..84b6b59
--- /dev/null
@@ -0,0 +1,702 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# --------------------------------------------------
+
+import os
+import sys
+from Accas import *
+import types
+
+# --------------------------------------------------
+# definition d une classe pour les materiaux
+# definition d une classe pour les groupes de mailles
+# definition d une classe pour les laws non lineaires
+# --------------------------------------------------
+class materiau ( ASSD ) : pass
+class grmaille ( ASSD ) : pass
+class law    ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+# --------------------------------------------------
+# déclaration du jeu de commandes : 1ere instruction du catalogue obligatoire 
+#---------------------------------------------------
+
+JdC = JDC_CATA ( code = 'CARMEL3D',
+#                execmodul = None,
+                  regles =(
+#                           AU_MOINS_UN ('MATERIALS'),
+#                           AU_MOINS_UN ('SOURCES'),
+#                          A_CLASSER ('MATERIALS','SOURCES'),
+                           ),
+                 ) # Fin JDC_CATA
+##=========================================================
+## definition des parametres d une law 
+##
+## Constitution de sous bloc NONLINEAR
+## produit un objet "bloc NONLINEAR" de type (classe) lawNL 
+##------------------------------------------------
+
+L_LAW = OPER (nom = "L_LAW",
+                    op = None,
+                   repetable = 'n',
+                   ang= "", 
+                   fr= "", 
+                    sd_prod= law,
+                    UIinfo= {"groupes":("CACHE",)},
+)
+LAW = OPER (nom = "LAW",
+                    op = None,
+                   repetable = 'n',
+                   ang= "", 
+                   fr= "", 
+                    sd_prod= law,
+
+                              NATURE       =  SIMP (statut="o",
+                                                    typ="TXM",
+                                                    defaut="SPLINE",
+                                                    into=("SPLINE","MARROCCO","MARROCCO+SATURATION"),
+                                                    ang="nature of the law",
+                                                    fr ="nature de la law",
+                                                     ), 
+
+                                   SplineParam  =  BLOC (condition="NATURE=='SPLINE'",
+
+                                                  FILENAME = SIMP (statut="o", 
+                                                                   typ=("Fichier",'All Files (*)',),
+                                                                   ang="data file name",
+                                                                   fr ="nom du fichier",
+                                                                  ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="spline applied to",
+                                                                    fr ="spline appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC SplineParam
+
+                                   MarroccoParam= BLOC (condition="NATURE=='MARROCCO'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                       ), # fin BLOC MarroccoParam
+                                   
+                                  MarroSatuParam= BLOC (condition="NATURE=='MARROCCO+SATURATION'",
+
+                                                  ALPHA    = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="alpha parameter",
+                                                                   fr ="parametre alpha" ,
+                                                                  ),
+                                                  TAU      = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="tau parameter",
+                                                                   fr ="parametre tau" ,
+                                                                   ),
+                                                  C        = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="c parameter",
+                                                                   fr ="parametre c" ,
+                                                                   ),
+                                                  EPSILON  = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="epsilon parameter",
+                                                                   fr ="parametre epsilon" ,
+                                                                   ),
+                                                  BMAX     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="intersection B",
+                                                                   fr ="intersection B" ,
+                                                                   ),
+                                                  HSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="H value",
+                                                                   fr ="valeur H" ,
+                                                                   ),
+                                                  BSAT     = SIMP (statut="o", 
+                                                                   typ="R",
+                                                                   defaut=0,
+                                                                   val_min=0,
+                                                                   ang="B value",
+                                                                   fr ="valeur B" ,
+                                                                   ),
+                                                  JOIN     = SIMP (statut="o", 
+                                                                   typ="TXM",
+                                                                   defaut="SPLINE",
+                                                                   into= ("SPLINE","PARABOLIC","LINEAR"),
+                                                                   ang="type of join between laws",
+                                                                   fr ="type de jointure entre les 2 law" ,
+                                                                   ),
+                                                  APPLIEDTO = SIMP (statut="o",        
+                                                                    typ="TXM",   
+                                                                    into=("B(H)&H(B)","B(H)","H(B)"),
+                                                                    defaut="B(H)&H(B)",
+                                                                    ang="join applied to",
+                                                                    fr ="jointure appliquee a ",
+                                                                   ),
+                                                       ), # fin BLOC MarroSatuParam
+ ) # fin OPER LAW
+LINEAR=L_LAW(),
+
+# --------------------------------------------------
+# definition de groupe de mailles
+# et association du nom du materiau au groupe de mailles
+#---------------------------------------------------
+
+MESH_GROUPE     = OPER (nom = "MESH_GROUPE",
+                    op = None,
+                   repetable = 'n',
+                    UIinfo= {"groupes":("Definition",)},
+                   fr= "definition du groupe de mailles", 
+                   ang = " mesh group definition", 
+                    sd_prod= grmaille,
+
+              Material    =  SIMP (statut="f",
+                                  typ=(materiau,),
+                                   ang="name of the linked material",
+                                  fr ="nom du materiau associe",
+                                  ), 
+             )
+
+
+#=========================================================
+# le fichier .PHYS contient 3 blocs et jusqu'a 3 niveaux de sous-blocs
+# 
+#================================
+# 1er bloc : bloc VERSION
+# ce bloc est volontairement cache dans l IHM 
+#================================
+
+VERSION = PROC ( nom = "VERSION",
+                        op = None,
+                       repetable = 'n',
+                        UIinfo= {"groupes":("CACHE",)},
+                        ang= "version block definition", 
+
+#----------------------
+# Liste des parametres
+#----------------------
+               
+   NUM      = SIMP (statut="o",
+                    typ="I",
+                   defaut=1, 
+                    ang="version number of the physical model", 
+                    into=( 1,),
+                   ),
+   FILETYPE = SIMP (statut="o",
+                    typ="TXM",
+                   defaut="PHYS", 
+                    ang="file type",
+                    into=( "PHYS",),
+                   ),
+
+) # Fin PROC VERSION
+
+#================================
+# 2eme bloc : bloc MATERIALS
+#================================
+#definition des 3 types de matériaux isotropiques et homogenes 
+#------------------------------------
+# sous bloc niveau 1 : CONDUCTOR
+#------------------------------------
+#
+MATERIAU = OPER (nom = "MATERIAU",
+                    op = None,
+                   repetable = 'n',
+                   ang= "CONDUCTOR block definition", 
+                   fr= "definition d un materiau", 
+                    sd_prod= materiau,
+  TYPE = SIMP(statut='o',typ='TXM',into=("CONDUCTOR","DIELECTRIC","ZSURFACIC","NILMAT","EM_ISOTROPIC_FILES","EM_ANISOTROPIC_FILES") ),
+
+#------------------------------------------------
+# sous bloc niveau 2 : CONDUCTIVITY
+#------------------------------------------------
+  b_conductor=BLOC(condition="TYPE=='CONDUCTOR'",
+  
+     CONDUCTIVITY = FACT ( statut="o", 
+                        ang ="Conductivity properties",
+                        fr  ="proprietes du bloc CONDUCTIVITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+
+                LAW             = SIMP (statut="o",
+                                        typ=law,
+                                         defaut=LINEAR,
+                                         ang = "type of law",
+                                         fr = "type de law",
+                                       ),
+                
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+        
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="f",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT CONDUCTIVITY
+
+#------------------------------------------------
+# sous bloc niveau 2 : PERMEABILITY
+#------------------------------------------------
+     PERMEABILITY = FACT ( statut="o", 
+                        ang ="Permeability properties",
+                        fr  ="proprietes du bloc PERMEABILITY",
+                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+                                 ),
+                
+                LAW             = SIMP (statut="o",
+                                        typ=law,
+                                        defaut="LINEAR",
+                                         ang = "type of law",
+                                       ),
+                 HOMOGENEOUS     = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is homogeneous",
+                                         fr  = "le materiau est homogene",
+                                       ),
+                ISOTROPIC       = SIMP (statut="f",
+                                        typ="TXM",
+                                        defaut="TRUE",
+                                        into = ("TRUE","FALSE"),
+                                         ang = "the material is isotropic",
+                                         fr  = "le materiau est isotrope",
+                                       ),
+                VALUE_REAL     = SIMP (statut="f",
+                                       typ="R", 
+                                        ang = "enter a real value",
+                                        fr  = "entrer un reel",
+                                      ),
+                VALUE_COMPLEX  = SIMP (statut="o",
+                                       typ="C", 
+                                        ang = "enter a complex value",
+                                        fr  = "entrer un complexe",
+                                      ),
+
+                ), # fin FACT PERMEABILITY
+
+
+             ) # fin BLOC conductor
+    ) # fin OPER Materiau
+# 
+##------------------------------------
+## sous bloc niveau 1 : DIELECTRIC
+##------------------------------------
+#DIELECTRIC = OPER (nom = "DIELECTRIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+#                  ang= "DIELECTRIC block definition", 
+#                  fr= "definition du bloc DIELECTRIC", 
+#                    sd_prod= materiau,
+#
+#
+##------------------------------------------------
+## sous bloc niveau 2 : PERMITTTIVITY
+##------------------------------------------------
+#  PERMITTIVITY = FACT ( statut="o", 
+#                        ang ="Permittivity properties",
+#                        fr  ="proprietes du bloc PERMITTIVITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#
+#               ), # fin FACT PERMITTIVITY
+#
+##------------------------------------------------
+## sous bloc niveau 2 : PERMEABILITY
+##------------------------------------------------
+#  PERMEABILITY = FACT ( statut="o", 
+#                        ang ="Permeability properties",
+#                        fr  ="proprietes du bloc PERMEABILITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#
+#                 NonLinearCond  = BLOC (condition="LAW=='NONLINEAR'",
+#                                  NONLINEAR   = SIMP (statut="o",
+#                                                    typ= (law,),
+#                                                      ang = "enter a complex value",
+#                                                      fr  = "parametres de la law non lineaire",
+#                                                           ),
+#                                       ), 
+#
+#               ), # fin FACT PERMEABILITY
+#
+#
+#           ) # fin OPER DIELECTRIC
+#
+#
+##------------------------------------
+## sous bloc niveau 1 : ZSURFACIC
+##------------------------------------
+#ZSURFACIC  = OPER (nom = "ZSURFACIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Isotropic Homogeneous Materials",)},
+#                  ang= "ZSURFACIC block definition", 
+#                  fr= "definition du bloc ZSURFACIC", 
+#                    sd_prod= materiau,
+#                  
+##------------------------------------------------
+## sous bloc niveau 2 : CONDUCTIVITY
+##------------------------------------------------
+#  CONDUCTIVITY = FACT ( statut="o", 
+#                        ang ="Conductivity properties",
+#                        fr  ="proprietes du bloc CONDUCTIVITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                         fr = "type de law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#               
+#
+#               ), # fin FACT CONDUCTIVITY
+#
+##------------------------------------------------
+## sous bloc niveau 2 : PERMEABILITY
+##------------------------------------------------
+#  PERMEABILITY = FACT ( statut="o", 
+#                        ang ="Permeability properties",
+#                        fr  ="proprietes du bloc PERMEABILITY",
+#                        regles = ( UN_PARMI ('VALUE_REAL','VALUE_COMPLEX'),
+#                                 ),
+#                
+#               LAW             = SIMP (statut="o",
+#                                       typ="TXM",
+#                                       defaut="LINEAR",
+#                                       into = ("LINEAR","NONLINEAR"),
+#                                         ang = "type of law",
+#                                         fr = "type de law",
+#                                      ),
+#                 HOMOGENEOUS     = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is homogeneous",
+#                                         fr  = "le materiau est homogene",
+#                                      ),
+#               ISOTROPIC       = SIMP (statut="f",
+#                                       typ="TXM",
+#                                       defaut="TRUE",
+#                                       into = ("TRUE","FALSE"),
+#                                         ang = "the material is isotropic",
+#                                         fr  = "le materiau est isotrope",
+#                                      ),
+#               VALUE_REAL     = SIMP (statut="f",
+#                                      typ="R", 
+#                                        ang = "enter a real value",
+#                                        fr  = "entrer un reel",
+#                                     ),
+#               VALUE_COMPLEX  = SIMP (statut="o",
+#                                      typ="C", 
+#                                        ang = "enter a complex value",
+#                                        fr  = "entrer un complexe",
+#                                     ),
+#
+#               ), # fin FACT PERMEABILITY
+#             
+#           ) # fin OPER ZSURFACIC
+#
+#
+##===================================
+## definition d un type de matériau fictif 
+##------------------------------------
+## sous bloc niveau 1 : NILMAT   
+##------------------------------------
+#NILMAT     = OPER (nom = "NILMAT",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Fictitious Materials",)},
+#                  ang= "NILMAT block definition", 
+#                  fr= "definition du bloc NILMAT", 
+#                    sd_prod= materiau,
+#             
+#           ) # fin OPER NILMAT
+#
+#
+##============================================
+## 1 type de matériau isotropique non homogene 
+##----------------------------------------
+## sous bloc niveau 1 : EM_ISOTROPIC_FILES   
+##----------------------------------------
+#EM_ISOTROPIC = PROC (nom = "EM_ISOTROPIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Isotropic Inhomogeneous Materials",)},
+#                  ang= "EM_ISOTROPIC block definition", 
+#                  fr= "definition du bloc EM_ISOTROPIC", 
+#             
+#             CONDUCTIVITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'MED Files (*.med)',),
+#                                       ang="CONDUCTIVITY MED data file name",
+#                                       fr ="nom du fichier MED CONDUCTIVITY",
+#                                      ),
+#             PERMEABILITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'MED Files (*.med)',),
+#                                       ang="PERMEABILITY MED data file name",
+#                                       fr ="nom du fichier MED PERMEABILITY",
+#                                      ),
+#                                      
+#           ) # fin PROC EM_ISOTROPIC
+#           
+##============================================
+## 1 type de matériau  non isotropique 
+##----------------------------------------
+## sous bloc niveau 1 : EM_ANISOTROPIC_FILES   
+##----------------------------------------
+#EM_ANISOTROPIC = PROC (nom = "EM_ANISOTROPIC",
+#                    op = None,
+#                  repetable = 'n',
+#                    UIinfo= {"groupes":("Anisotropic Materials",)},
+#                  ang= "EM_ANISOTROPIC block definition", 
+#                  fr= "definition du bloc EM_ANISOTROPIC", 
+#             
+#             CONDUCTIVITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'.mater Files (*.mater)',),
+#                                       ang="CONDUCTIVITY .mater data file name",
+#                                       fr ="nom du fichier .mater CONDUCTIVITY",
+#                                      ),
+#             PERMEABILITY_File = SIMP (statut="o", 
+#                                       typ=("Fichier",'.mater Files (*.mater)',),
+#                                       ang="PERMEABILITY .mater data file name",
+#                                       fr ="nom du fichier .mater PERMEABILITY",
+#                                      ),
+#            ) # fin PROC EM_ANISOTROPIC
+#
+#================================
+# 3eme bloc : bloc SOURCES
+#================================
+
+SOURCES = PROC ( nom = "SOURCES",
+                 op = None,
+                repetable = 'n',
+                 ang = "sources block definition", 
+
+ STRANDED_INDUCTOR  = FACT (statut="f",
+                            fr="stranded inductor source",
+               
+                      NAME     = SIMP (statut="o",
+                                      typ="TXM",
+                                       fr="name of the source",
+                                      ),
+                      NTURNS   = SIMP (statut="o",
+                                      typ="I",
+                                      defaut=1,
+                                       fr="number of tuns in the inductor",
+                                      ),
+                      CURJ     = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="intensity",
+                                      ),
+                     POLAR    = SIMP (statut="o",
+                                      typ="R",
+                                      defaut=0,
+                                       fr="polarization",
+                                      ),
+
+                      ), # fin FACT 
+                           
+ EPORT = FACT (statut="f",
+               fr="eport source",
+               
+         NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of eport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT eport
+
+ HPORT = FACT (statut="f",
+               fr="hport source",
+         
+        NAME     = SIMP (statut="o",
+                         typ="TXM",
+                          fr="name of the source",
+                         ),
+         TYPE     = SIMP (statut="o",
+                         typ="TXM",
+                         into=("VOLTAGE","CURRENT"),
+                          fr="type of hport source",
+                         ),
+         AMP      = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="amplitude",
+                         ),
+         POLAR    = SIMP (statut="o",
+                         typ="R",
+                         defaut=0,
+                          fr="polarization",
+                         ),
+
+               ), # fin FACT hport
+               
+
+) # Fin PROC sources
+
diff --git a/Carmel3D/__init__.py b/Carmel3D/__init__.py
new file mode 100644 (file)
index 0000000..40a96af
--- /dev/null
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/Carmel3D/configuration_CARMEL3D.py b/Carmel3D/configuration_CARMEL3D.py
new file mode 100644 (file)
index 0000000..8b632ed
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import configuration\r
+import os\r
+\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+  #-----------------------------------\r
+  def __init__(self,appli,repIni):\r
+  #-----------------------------------\r
+\r
+      configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_Carmel3D')\r
+      self.INSTALLDIR =os.path.dirname(__file__)\r
+      self.REPINI =os.path.dirname(__file__)\r
+\r
+      self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc',]\r
+      self.labels_eficas=["rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+      self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
+      self.cataFile="editeur.ini"\r
+      self.setValeurs()\r
+\r
+  #---------------------------------------\r
+  def lecture_fichier_ini_standard(self):\r
+  #---------------------------------------\r
+       configuration.CONFIG_BASE.lecture_fichier_ini_standard(self)\r
+\r
+  #---------------------------------------\r
+  def lecture_fichier_ini_utilisateur(self):\r
+  #---------------------------------------\r
+       configuration.CONFIG_BASE.lecture_fichier_ini_utilisateur(self)\r
+\r
+def make_config(appli,rep):\r
+    return CONFIG(appli,rep)\r
+\r
diff --git a/Carmel3D/editeur.ini b/Carmel3D/editeur.ini
new file mode 100644 (file)
index 0000000..6096b49
--- /dev/null
@@ -0,0 +1,18 @@
+# Choix des catalogues
+import os
+import prefs_CARMEL3D
+rep_cata=prefs_CARMEL3D.repIni
+
+catalogues = (
+# (code,version,catalogue,formatIn,formatOut)
+# catalogue entier et etendu : tout est decrit avec les repetitions qui en decoulent 
+ ('CARMEL3D','V1',os.path.join(rep_cata,'Carmel3D_cata_etendu.py'),'python','python'),
+# catalogue avec essai de mise en commun de certains blocs (loi) 
+ ('CARMEL3D','V2',os.path.join(rep_cata,'Carmel3D_cata_fact.py'),'python','python'),
+# catalogue avec materiau en tete 
+ ('CARMEL3D','V3',os.path.join(rep_cata,'Carmel3D_cata_mat.py'),'python','python'),
+ ('CARMEL3D','V4',os.path.join(rep_cata,'Carmel3D_cata_matloi.py'),'python','python'),
+ ('CARMEL3D','V5',os.path.join(rep_cata,'Carmel3D_cata_pa.py'),'python','python'),
+ ('CARMEL3D','V6',os.path.join(rep_cata,'Carmel3D_cata_pn.py'),'python','python'),
+)
+
diff --git a/Carmel3D/jdc_e1.comm b/Carmel3D/jdc_e1.comm
new file mode 100644 (file)
index 0000000..7357fb5
--- /dev/null
@@ -0,0 +1,64 @@
+
+cuivre1=CONDUCTOR(CONDUCTIVITY=_F(LAW='LINEAR',
+                                  VALUE_COMPLEX=('RI',1.0,4.0,),),
+                  PERMEABILITY=_F(LAW='NONLINEAR',
+                                  VALUE_REAL=2,),);
+
+diel1=DIELECTRIC(PERMITTIVITY=_F(LAW='LINEAR',
+                                 VALUE_COMPLEX=('MP',2.0,90.0,),),
+                 PERMEABILITY=_F(LAW='LINEAR',
+                                 VALUE_COMPLEX=(2+8j),),);
+
+diel_nl1=DIELECTRIC(PERMITTIVITY=_F(LAW='LINEAR',
+                                    VALUE_REAL=4,),
+                    PERMEABILITY=_F(LAW='NONLINEAR',
+                                    VALUE_REAL=0,
+                                    NATURE='SPLINE',
+                                    FILENAME='/home/G17214/.Eficas_Openturns/jdc1.comm',
+                                    APPLIEDTO='B(H)&H(B)',),);
+
+diel_nl2=DIELECTRIC(PERMITTIVITY=_F(LAW='LINEAR',
+                                    VALUE_REAL=5,),
+                    PERMEABILITY=_F(LAW='NONLINEAR',
+                                    VALUE_REAL=6.5,
+                                    NATURE='MARROCCO',
+                                    ALPHA=0,
+                                    TAU=0,
+                                    C=0,
+                                    EPSILON=0,),);
+
+diel_nl3=DIELECTRIC(PERMITTIVITY=_F(LAW='LINEAR',
+                                    VALUE_COMPLEX=('RI',3.4,2.1,),),
+                    PERMEABILITY=_F(LAW='NONLINEAR',
+                                    VALUE_REAL=5.34789,
+                                    NATURE='MARROCCO+SATURATION',
+                                    ALPHA=0,
+                                    TAU=0,
+                                    C=0,
+                                    EPSILON=0,
+                                    BMAX=0,
+                                    HSAT=0,
+                                    BSAT=0,
+                                    JOIN='SPLINE',
+                                    APPLIEDTO='B(H)&H(B)',),);
+
+zf1=ZSURFACIC(CONDUCTIVITY=_F(LAW='LINEAR',
+                              VALUE_REAL=0.25638,),
+              PERMEABILITY=_F(LAW='LINEAR',
+                              VALUE_COMPLEX=(3.1200000000000001+5.8959999999999999j),),);
+
+nil1=NILMAT();
+
+arete1=MESH_GR(Material=diel_nl1,);
+
+mesh3=MESH_GR(Material=diel_nl1,);
+
+mesh2=MESH_GR(Material=cuivre1,);
+
+nilmesh1=MESH_GR(Material=nil1,);
+
+SOURCES(STRANDED_INDUCTOR=_F(NAME='iiiiii',
+                             NTURNS=1,
+                             CURJ=0,
+                             POLAR=0,),);
+#CHECKSUM:557b11cc62f29372c2f1c59266e33885  -:FIN CHECKSUM
\ No newline at end of file
diff --git a/Carmel3D/jdc_e2.comm b/Carmel3D/jdc_e2.comm
new file mode 100644 (file)
index 0000000..badcd46
--- /dev/null
@@ -0,0 +1,23 @@
+
+cond1=CONDUCTOR(CONDUCTIVITY=_F(LAW='LINEAR',
+                                VALUE_REAL=2,),
+                PERMEABILITY=_F(LAW='LINEAR',
+                                VALUE_COMPLEX=('RI',2.0,4.0,),),);
+
+diel1=DIELECTRIC(PERMITTIVITY=_F(LAW='LINEAR',
+                                 VALUE_REAL=2,),
+                 PERMEABILITY=_F(LAW='LINEAR',
+                                 HOMOGENEOUS='TRUE',
+                                 ISOTROPIC='TRUE',
+                                 VALUE_REAL=2,),);
+
+EM_ANISOTROPIC(CONDUCTIVITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.mater',
+               PERMEABILITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.mater',);
+
+grm1=MESH_GR(Material=cond1,);
+
+SOURCES(STRANDED_INDUCTOR=_F(NAME='jjjjjjjj',
+                             NTURNS=1,
+                             CURJ=0,
+                             POLAR=0,),);
+#CHECKSUM:a6d4c56783d1d09d6b54c996663cef00  -:FIN CHECKSUM
\ No newline at end of file
diff --git a/Carmel3D/jdc_f1.comm b/Carmel3D/jdc_f1.comm
new file mode 100644 (file)
index 0000000..44fa468
--- /dev/null
@@ -0,0 +1,83 @@
+
+loi_l1=LAW(LINEAR='YES',);
+
+loi_nl1=LAW(LINEAR='NO',
+            NATURE='SPLINE',
+            FILENAME='/home/G17214/.Eficas_Openturns/jdc-sansjdc.comm',
+            APPLIEDTO='B(H)&H(B)',);
+
+loi_nl2=LAW(LINEAR='NO',
+            NATURE='MARROCCO',
+            ALPHA=0,
+            TAU=0,
+            C=0,
+            EPSILON=0,);
+
+loi_nl3=LAW(LINEAR='NO',
+            NATURE='MARROCCO+SATURATION',
+            ALPHA=0,
+            TAU=0,
+            C=0,
+            EPSILON=0,
+            BMAX=0,
+            HSAT=0,
+            BSAT=0,
+            JOIN='PARABOLIC',
+            APPLIEDTO='B(H)',);
+
+cd3=CONDUCTOR(CONDUCTIVITY=_F(LAW=loi_l1,
+                              VALUE_REAL=2,),
+              PERMEABILITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=1,),);
+
+cd4=CONDUCTOR(CONDUCTIVITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=('RI',1.0,3.0,),),
+              PERMEABILITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=1,),);
+
+diel1=DIELECTRIC(PERMITTIVITY=_F(LAW=loi_l1,
+                                 VALUE_COMPLEX=1,),
+                 PERMEABILITY=_F(LAW=loi_nl3,
+                                 VALUE_REAL=2,),);
+
+diel2=DIELECTRIC(PERMITTIVITY=_F(LAW=loi_l1,
+                                 VALUE_REAL=2,),
+                 PERMEABILITY=_F(LAW=loi_nl1,
+                                 VALUE_REAL=5,),);
+
+cd2=CONDUCTOR(CONDUCTIVITY=_F(LAW=loi_l1,
+                              VALUE_REAL=0,),
+              PERMEABILITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=1,),);
+
+cd10=CONDUCTOR(CONDUCTIVITY=_F(LAW=loi_l1,
+                               HOMOGENEOUS='TRUE',
+                               VALUE_REAL=8,),
+               PERMEABILITY=_F(LAW=loi_l1,
+                               VALUE_COMPLEX=(2+5j),),);
+
+cd1=CONDUCTOR(CONDUCTIVITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=1,),
+              PERMEABILITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=1,),);
+
+zf1=ZSURFACIC(CONDUCTIVITY=_F(LAW=loi_l1,
+                              VALUE_REAL=3,),
+              PERMEABILITY=_F(LAW=loi_l1,
+                              VALUE_COMPLEX=('RI',2.0,0.22323232,),),);
+
+EM_ISOTROPIC(CONDUCTIVITY_File='/home/G17214/.Eficas_Openturns/jdc1.med',
+             PERMEABILITY_File='/home/G17214/.Eficas_Openturns/jdc1.med',);
+
+EM_ANISOTROPIC(CONDUCTIVITY_File='/home/G17214/.Eficas_Openturns/jdc1.mater',
+               PERMEABILITY_File='/home/G17214/.Eficas_Openturns/jdc1.mater',);
+
+SOURCES(STRANDED_INDUCTOR=_F(NAME='vvvvvvv',
+                             NTURNS=1,
+                             CURJ=0,
+                             POLAR=0,),);
+
+arete1=MESH_GR(Material=diel1,);
+
+surf1=MESH_GR(Material=zf1,);
+#CHECKSUM:3d23a16f6fd8628580590ab55ffeca01  -:FIN CHECKSUM
\ No newline at end of file
diff --git a/Carmel3D/jdc_m1.comm b/Carmel3D/jdc_m1.comm
new file mode 100644 (file)
index 0000000..957536c
--- /dev/null
@@ -0,0 +1,40 @@
+
+loiL1=LAW(LINEAR='YES',);
+
+loiNL1=LAW(LINEAR='NO',
+           NATURE='SPLINE',
+           FILENAME='/home/G17214/.Eficas_Carmel3D/carmel2.comm',
+           APPLIEDTO='B(H)&H(B)',);
+
+mat1=MATERIAU(DIELECTRIC=_F(PERMITTIVITY=_F(LAW=loiL1,
+                                            VALUE_REAL=2,),
+                            PERMEABILITY=_F(LAW=loiL1,
+                                            VALUE_REAL=3,),),);
+
+mat2=MATERIAU(CONDUCTOR=_F(CONDUCTIVITY=_F(LAW=loiL1,
+                                           VALUE_REAL=5,),
+                           PERMEABILITY=_F(LAW=loiNL1,
+                                           VALUE_REAL=2,),),);
+
+mat3=MATERIAU(ZSURFACIC=_F(CONDUCTIVITY=_F(LAW=loiL1,
+                                           VALUE_REAL=3,),
+                           PERMEABILITY=_F(LAW=loiNL1,
+                                           VALUE_REAL=3,),),);
+
+mat_emi1=MATERIAU(HOMOGENEOUS='FALSE',
+                  EM_ISOTROPIC=_F(CONDUCTIVITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.med',
+                                  PERMEABILITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.med',),);
+
+mat_ema1=MATERIAU(ISOTROPIC='FALSE',
+                  EM_ANISOTROPIC=_F(CONDUCTIVITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.mater',
+                                    PERMEABILITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.mater',),);
+
+nilmat1=NILMAT();
+
+mesh1=MESH_GR(Material=mat1,);
+
+SOURCES(STRANDED_INDUCTOR=_F(NAME='ttttttt',
+                             NTURNS=1,
+                             CURJ=0,
+                             POLAR=0,),);
+#CHECKSUM:7d08ffb0b9773bb5b80682ed5238792d  -:FIN CHECKSUM
\ No newline at end of file
diff --git a/Carmel3D/jdc_ml1.comm b/Carmel3D/jdc_ml1.comm
new file mode 100644 (file)
index 0000000..853a5a8
--- /dev/null
@@ -0,0 +1,17 @@
+
+SOURCES(STRANDED_INDUCTOR=_F(NAME='llllllllll',
+                             NTURNS=1,
+                             CURJ=0,
+                             POLAR=0,),);
+
+LINEAR=L_LAW();
+
+diel1=MATERIAU(DIELECTRIC=_F(PERMITTIVITY=_F(LAW=LINEAR,
+                                             VALUE_REAL=1,),
+                             PERMEABILITY=_F(LAW=LINEAR,
+                                             VALUE_REAL=4,),),);
+
+em1=MATERIAU(ISOTROPIC='FALSE',
+             EM_ANISOTROPIC=_F(CONDUCTIVITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.mater',
+                               PERMEABILITY_File='/home/G17214/.Eficas_Carmel3D/jdc1.mater',),);
+#CHECKSUM:5e3593b9a5a59bcea70190f481125e1e  -:FIN CHECKSUM
\ No newline at end of file
diff --git a/Carmel3D/jdc_pa1.comm b/Carmel3D/jdc_pa1.comm
new file mode 100644 (file)
index 0000000..2de56fa
--- /dev/null
@@ -0,0 +1,17 @@
+
+cond2=MATERIAU(TYPE='CONDUCTOR',
+               CONDUCTIVITY=_F(LAW=LINEAR,
+                               HOMOGENEOUS='TRUE',
+                               VALUE_REAL=2.3,),
+               PERMEABILITY=_F(LAW=LINEAR,
+                               VALUE_REAL=5,),);
+
+LINEAR=L_LAW();
+
+cond1=MATERIAU(TYPE='CONDUCTOR',
+               CONDUCTIVITY=_F(LAW=LINEAR,
+                               HOMOGENEOUS='TRUE',
+                               VALUE_REAL=2,),
+               PERMEABILITY=_F(LAW=LINEAR,
+                               VALUE_COMPLEX=('RI',2.0,3.0,),),);
+#CHECKSUM:ffb8e67edcb117fb4d6872eb08de66cf  -:FIN CHECKSUM
\ No newline at end of file
diff --git a/Carmel3D/prefs.py b/Carmel3D/prefs.py
new file mode 100644 (file)
index 0000000..e1d52ad
--- /dev/null
@@ -0,0 +1,4 @@
+code="CARMEL3D" 
+import sys, os
+if os.path.dirname(os.path.abspath(__file__)) not in sys.path :
+   sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
diff --git a/Carmel3D/prefs_CARMEL3D.py b/Carmel3D/prefs_CARMEL3D.py
new file mode 100644 (file)
index 0000000..eca54ea
--- /dev/null
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os
+
+# repIni sert à localiser le fichier editeur.ini
+# Obligatoire
+repIni=os.path.dirname(os.path.abspath(__file__))
+REPINI=os.path.dirname(os.path.abspath(__file__))
+INSTALLDIR=os.path.abspath(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
+
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+# Preference
+if os.name == 'nt':
+   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+   userprefs=os.path.expanduser("~/.Eficas_install/prefs.py")
+
+if os.path.isfile(userprefs):
+   try:
+      execfile(userprefs)
+   except:
+      pass
+
+#-------------------------------------------------------------------
+# Partie pour TK
+#-------------------------------------------------------------------
+
+labels= ('Fichier','Edition','Jeu de commandes',
+                'Options',
+                'Aide',
+                 'Traduction',
+           )
+
+appli_composants=['readercata','bureau',
+                   'options',
+           ]
+
+menu_defs={ 'bureau': [
+              ('Fichier',[
+                           ('Nouveau','newJDC','<Control-n>','Ctrl+N'),
+                           ('Nouvel INCLUDE','newJDC_include'),
+                           ('Ouvrir','openJDC','<Control-o>','Ctrl+O'),
+                           ('Enregistrer','saveJDC','<Control-s>','Ctrl+S'),
+                           ('Enregistrer sous','saveasJDC','<Control-e>','Ctrl+E'),
+                           None,
+                           ('Fermer','closeJDC','<Control-w>','Ctrl+W'),
+                           ('Quitter','exitEFICAS','<Control-q>','Ctrl+Q'),
+                         ]
+              ),
+              ('Edition',[
+                           ('Copier','copy','<Control-c>','Ctrl+C'),
+                           ('Couper','cut','<Control-x>','Ctrl+X'),
+                           ('Coller','paste','<Control-v>','Ctrl+V'),
+                         ]
+              ),
+              ('Jeu de commandes',[
+               ('Rapport de validation','visuCRJDC','<Control-r>','Ctrl+R'),
+               ('Fichier source','visu_txt_brut_JDC','<Control-b>','Ctrl+B'),
+               #('Paramètres Eficas','affichage_fichier_ini'),
+                                  ]
+              ),
+              ('Traduction',[
+               ('Traduction v7 en v8','TraduitFichier7'),
+               ('Traduction v8 en v9','TraduitFichier8','<Control-t>','Ctrl+T'),
+                            ]
+              ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS','<Control-a>','Ctrl+A'),
+                      ]
+              ),
+             ]
+           }
diff --git a/Carmel3D/properties.py b/Carmel3D/properties.py
new file mode 100644 (file)
index 0000000..3db8254
--- /dev/null
@@ -0,0 +1,25 @@
+#@ MODIF properties Accas DATE 02/06/2010 AUTEUR aster M.ADMINISTRATEUR
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+#     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+#     DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "10.1.27"
+date = "02/06/2010"
+exploit = False
diff --git a/Carmel3D/qtEficas_Carmel3D.py b/Carmel3D/qtEficas_Carmel3D.py
new file mode 100755 (executable)
index 0000000..299b7f6
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+"""
+   Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+# Modules Eficas
+
+import sys,os
+sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..'))
+
+import prefs
+from InterfaceQT4 import eficas_go
+eficas_go.lance_eficas(code=prefs.code)
diff --git a/Carmel3D/style.py b/Carmel3D/style.py
new file mode 100644 (file)
index 0000000..d485572
--- /dev/null
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+"""
+Pour modifier le style d'EFICAS  il faut ajouter un fichier style.py qui contiendra les
+informations sur le style voulu dans son repertoire Eficas_install.
+
+La methode la plus simple consiste à modifier directement les attributs de l'objet style dans le 
+fichier style.py d'Eficas_install. Exemple::
+
+    style.background='yellow'
+
+pour modifier la couleur du background.
+
+Il existe une autre méthode qui peut être utilisée quand on veut modifier plusieurs propriétés à la fois.
+
+Le fichier style.py doit définir une nouvelle classe qui dérive de la classe de base STYLE avec des attributs
+de classe qui définiront le nouveau style (par exemple, si on veut modifier le background)::
+
+   class STYLE(STYLE):
+       background='yellow'
+
+Il faut ensuite instancier cette classe, dans ce meme fichier, en donnant le nom style à l'objet cree::
+
+   style=STYLE()
+
+Tous les attributs de classe possibles sont visibles dans le module Editeur/basestyle.py::
+
+    background='gray90'
+    foreground='black'
+    entry_background='white'
+    list_background='white'
+    list_select_background='#00008b'
+    list_select_foreground='grey'
+    tooltip_background="yellow"
+
+    standard = ("Helvetica",12)
+    standard_italique = ("Helvetica",12,'italic')
+    standard_gras = ("Helvetica",12,'bold')
+    standard_gras_souligne = ("Helvetica",12,'bold','underline')
+
+    canvas = ('Helvetica',10)
+    canvas_italique = ('Helvetica',10,'italic')
+    canvas_gras = ("Helvetica",10,'bold')
+    canvas_gras_italique = ("Helvetica",12,'bold','italic')
+
+    standard12 = ("Helvetica",14)
+    standard12_gras = ("Helvetica",14,'bold')
+    standard12_gras_italique = ( "Helvetica",14,'bold','italic')
+
+
+Le fichier style.py contenu dans le répertoire Aster permet de spécifier des propriétés globales pour une installation.
+Les modifications de style contenues dans ce fichier et dans le fichier style.py d'Eficas_install
+sont prises en compte dans cet ordre.
+"""
+
+p1=10
+p2=14
+f1="Helvetica"
+
+style.background='gray90'
+style.foreground='black'
+style.standard = (f1,p1)
+style.standard_italique = (f1,p1,'italic')
+style.standard_gras = (f1,p1,'bold')
+style.canvas_italique = (f1,p1,'italic')
+style.canvas_gras = (f1,p1,'bold')
+style.statusfont = (f1,p2)
index 9398a330a3ce8ab3c52e39a0de2edc899772cdc4..2252bb33d5c7653f0485db47d96f91d1e7c858c8 100644 (file)
@@ -25,14 +25,14 @@ import os, sys
 print "import des prefs de CUVE2DG"
 
 
-# REPINI sert à localiser le fichier 
+# repIni sert à localiser le fichier 
 # initialdir sert comme directory initial des QFileDialog
 # positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
+repIni=os.path.dirname(os.path.abspath(__file__))
+initialdir=repIni 
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
+INSTALLDIR=os.path.join(repIni,'..')
 
 
 # Codage des strings qui accepte les accents (en remplacement de 'ascii')
index 99f4d6395fcd4a7c6edaf9233ca2ce77c1ef2e0d..0b6172c324726a190b0de43309fea8e6c06a617b 100644 (file)
@@ -2,7 +2,7 @@ import os
 
 import prefs
 
-rep_cata = prefs.REPINI
+rep_cata = prefs.repIni
 
 # Accès à la documentation 
 path_doc              = os.path.join(rep_cata,'..','Doc')
index d0cd9255f8e537ee5dcb56ea50dbb2688da5adc5..57d38586b4111235b4070fe1e9b5b3744c399341 100644 (file)
@@ -1,20 +1,20 @@
 # -*- coding: utf-8 -*-
 import os
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+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')
+#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
index ede006198d4ba73a422eb0b76d239f6ded1afabe..752d394864cebb05964c10e169597717efa51805 100644 (file)
@@ -24,7 +24,7 @@ import re,string,cPickle,os
 from Noyau.N_CR import CR
 
 #
-__Id__="$Id: analyse_catalogue.py,v 1.7.4.1 2008-11-13 10:35:11 cchris Exp $"
+__Id__="$Id: analyse_catalogue.py,v 1.9.8.1 2010-12-06 13:22:07 pnoyret Exp $"
 __version__="$Name:  $"
 #
 l_noms_commandes = ['OPER','PROC','MACRO','FORM']
index 298eac7e843f69bbb18937232965eda5b2fdb1b9..0bedf1d82a2ac752f023d031df3cbc74396847a4 100644 (file)
@@ -23,8 +23,8 @@ import re,string,os
 
 
 #
-__Id__="$Id: analyse_catalogue_initial.py,v 1.1.2.2 2010-03-17 15:49:19 pnoyret Exp $"
-__version__="$Name: V2_0 $"
+__Id__="$Id: analyse_catalogue_initial.py,v 1.2.4.1 2010-12-06 13:22:07 pnoyret Exp $"
+__version__="$Name:  $"
 #
 
                 
index a9650f06a3d81cdaee133e96ad18eba4f95ab98c..69ac18881d526910d095a291b41b893827115461 100644 (file)
@@ -43,7 +43,7 @@ def traite_entite(entite,liste_simp_reel):
        Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
        qui est une liste contenant le nom des sous entites dans l'ordre 
        de leur apparition dans le catalogue.
-       L'ordre d'apparition dans le catalogue est donné par l'attribut _no
+       L'ordre d'apparition dans le catalogue est donné par l'attribut _no
        de l'entite
        La fonction active le meme type de traitement pour les sous entites
        de entite
@@ -55,10 +55,22 @@ def traite_entite(entite,liste_simp_reel):
       else:
          traite_reel(v,liste_simp_reel)
          traite_entite(v,liste_simp_reel)
+         traite_cache(v)
       l.append((v._no,k))
    l.sort()
    entite.ordre_mc=[ item for index, item in l ]
 
+def traite_cache(objet):
+    if not hasattr(objet, "cache"): return
+    if objet.cache == 0 :return
+    clef=objet.nom
+    if objet.equiv != None : clef=objet.equiv
+    if hasattr(objet.pere,"mcOblig"):
+      objet.pere.mcOblig[clef]=objet.defaut
+    else :
+      objet.pere.mcOblig={}
+      objet.pere.mcOblig[clef]=objet.defaut
+
 def traite_reel(objet,liste_simp_reel):
     if objet.__class__.__name__ == "SIMP":
        if ( 'R' in objet.type):
@@ -81,10 +93,10 @@ def analyse_niveau(cata_ordonne_dico,niveau,liste_simp_reel):
 def analyse_catalogue(cata):
    """
       Cette fonction analyse le catalogue cata pour construire avec l'aide
-      de traite_entite la structure de données ordre_mc qui donne l'ordre
-      d'apparition des mots clés dans le catalogue
+      de traite_entite la structure de données ordre_mc qui donne l'ordre
+      d'apparition des mots clés dans le catalogue
       Elle retourne un dictionnaire qui contient toutes les commandes
-      du catalogue indexées par leur nom
+      du catalogue indexées par leur nom
    """
    cata_ordonne_dico={}
    liste_simp_reel=[]
index ad5d099a77f49ba309fa498b73b0b48737241b94..bf54b9eeb6d7bb4b4db4bdd662ded37501aa2729 100644 (file)
@@ -75,13 +75,9 @@ class CatalogDescription:
                                   identifier = cata_tuple[1],
                                   cata_file_path = cata_tuple[2],
                                   file_format = cata_tuple[3])
-        if len(cata_tuple) == 5 :
-           if cata_tuple[4] == "defaut":
-            desc.default = True
-           else:
-             desc = CatalogDescription(code = cata_tuple[0],
-                                       identifier = cata_tuple[1],
-                                       cata_file_path = cata_tuple[2],
-                                       file_format = cata_tuple[3],
-                                       file_format_in = cata_tuple[4])
+        if len(cata_tuple) == 5:
+            if cata_tuple[4] == "defaut":
+                desc.default = True
+            else:
+                desc.file_format_in = cata_tuple[4]
         return desc
diff --git a/Editeur/icons/delete.png b/Editeur/icons/delete.png
new file mode 100644 (file)
index 0000000..c2a313e
Binary files /dev/null and b/Editeur/icons/delete.png differ
diff --git a/Editeur/icons/image240.png b/Editeur/icons/image240.png
new file mode 100644 (file)
index 0000000..c0562e3
Binary files /dev/null and b/Editeur/icons/image240.png differ
index b4c24b706f298e71c6b604615402fffc0d613a15..2e8790f98de91ca76e2ba9866d0fa021c9f2c26c 100644 (file)
@@ -28,14 +28,7 @@ import os
 import prefs
 name='prefs_'+prefs.code
 prefs_Code=__import__(name)
-
 INSTALLDIR=prefs_Code.INSTALLDIR
-sys.path.append(INSTALLDIR)
-sys.path.append(INSTALLDIR+"/UiQT4")
-sys.path.append(INSTALLDIR+"/InterfaceQT4")
-#sys.path.append(INSTALLDIR+"/Ui")
-#sys.path.append(INSTALLDIR+"/InterfaceQT")
-sys.path.append(INSTALLDIR+"/Editeur")
 
 # Ce chemin permet d'importer les modules Noyau et Validation
 # représentant le code utilisé (si fourni)
@@ -47,9 +40,4 @@ if hasattr(prefs_Code,'CODE_PATH'):
       del sys.path[0]
 sys.path[:0]=[prefs_Code.INSTALLDIR]
 
-# Ensuite on surcharge eventuellement
-#if hasattr(prefs_Code,'CODE_PATH_SURCHARGE'):
-#   if prefs_Code.CODE_PATH_SURCHARGE:
-#       sys.path.insert(0,prefs_Code.CODE_PATH_SURCHARGE)
-
 import Accas
index 872f290bcf8b88487846795083028659d7679f00..3de4e4f9c9abaab9e00e0d9febf1897a76259d8d 100644 (file)
@@ -1,7 +1,7 @@
 import os
 import re
 
-sous_menus={"ASTER" : {0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}},
+sous_menus={
            "OPENTURNS_STUDY" : {0:{"Anne":"Std.comm"}},
             "OPENTURNS_WRAPPER" : {0:{"Anne":"wrapper_exemple.comm"}},
            }
index 235e9a4d4b5dec848d16af9df55653582f6d4df6..e74df5de5e0aa8a615ef5b0b914d88ba6892fb0e 100644 (file)
@@ -203,7 +203,7 @@ def print_d_env():
 
 def create_parser():
     # creation du parser des options de la ligne de commande
-    import prefs
+    #import prefs
     parser=optparse.OptionParser(usage="usage: %prog [options]",version="%prog 1.13")
 
     parser.add_option("-j","--jdc",dest="comm",type='string',
@@ -226,7 +226,7 @@ def create_parser():
                   help="version de catalogue a utiliser")
 
     parser.add_option("-k","--kode", action="store", type="string",dest="code",
-                  help="nom du code a utiliser",default=prefs.code)
+                  help="nom du code a utiliser")
 
     parser.add_option("-d","--debug", action="store", type="int",dest="debug",
                   help="niveau de debug")
index 9d1265a35e08f6a9de15f31cdab4bac3fc56e17a..8a66384b97bf09bf875fc124e6e37ef8b9a7eca2 100644 (file)
@@ -6,7 +6,7 @@ prefsCode=__import__(name)
 import basestyle
 from basestyle import STYLE,style
 
-inistylefile=os.path.join(prefsCode.REPINI,"style.py")
+inistylefile=os.path.join(prefsCode.repIni,"style.py")
 if os.path.isfile(inistylefile):
    execfile(inistylefile)
 
index 799728d867c521bb171770e8b720b360dd238da2..3a42c632d4a2ee230704cc5ca595fd95d596cd35 100644 (file)
@@ -53,15 +53,15 @@ def traite_commande(commande,niveau):
     uiinfo=commande.UIinfo or {}
     UI=UIINFO(commande,**uiinfo)
     commande.UI=UI
-    if "CACHE" in UI.groupes:
+    #if "CACHE" in UI.groupes:
         # La commande est cachee aux utilisateurs
         #niveau.dict_groupes["CACHE"].append(commande.nom)
-        pass
-    else:
+        #pass
+    #else:
         # On ajoute la commande dans tous les groupes specifies
-        for grp in UI.groupes:
-            if not niveau.dict_groupes.has_key(grp): niveau.dict_groupes[grp]=[]
-            niveau.dict_groupes[grp].append(commande.nom)
+    for grp in UI.groupes:
+        if not niveau.dict_groupes.has_key(grp): niveau.dict_groupes[grp]=[]
+        niveau.dict_groupes[grp].append(commande.nom)
 
 def traite_niveau(niveau):
    if niveau.l_niveaux == ():
index bae03e079d9d6de26aa10c46120544dda5feb983..46c5bc7b42090438077d2fdcbaebb2ad5335ee54 100644 (file)
@@ -1,14 +1,14 @@
 # -*- coding: utf-8 -*-
 import os
 
-# REPINI sert à localiser le fichier editeur.ini
-REPINI=os.path.dirname(os.path.abspath(__file__))
+# 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')
+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,'..')
+#CODE_PATH = os.path.join(repIni,'..')
 
 # INSTALLDIR sert à localiser faqs.txt et les modules Eficas
-#INSTALLDIR=os.path.join(REPINI,'..','Editeur')
+#INSTALLDIR=os.path.join(repIni,'..','Editeur')
index 796e625f13465e9b7b8124c5d4c06121a8786ce6..dd475d0ec5ec0de9cef96f1ab8f212b3de5b2076 100644 (file)
@@ -1,17 +1,17 @@
 # -*- coding: utf-8 -*-
 import os
 
-# REPINI sert à localiser le fichier editeur.ini
-REPINI=os.path.dirname(os.path.abspath(__file__))
+# 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')
+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,'..')
+#CODE_PATH = os.path.join(repIni,'..')
 
 # INSTALLDIR sert à localiser faqs.txt et les modules Eficas
-#INSTALLDIR=os.path.join(REPINI,'..','Editeur')
+#INSTALLDIR=os.path.join(repIni,'..','Editeur')
 
 # lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
index 1914abe7600bb17ad82260e750ef4f72322a7edf..634be9d7cb68618ce3fda4abbb31e7fc75cd6aae 100644 (file)
 
 import os
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+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')
+#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
index 2c3ed69898900c7745192eb02d1d8e0aaae33979..a97a52c605fcdb7d3ec3901b8157b800e5dc0e08 100644 (file)
@@ -78,6 +78,18 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
     #if not val : return None
     valeur = None
 
+    if type(val) == types.ListType:
+    # Un premier traitement a ete fait lors de la saisie
+    # permet de tester les parametres qui sont des listes
+       l_new_val = []
+       for v in val :
+           try :
+               valeur=eval(str(v))
+               l_new_val.append(v)
+           except :
+               return None
+       return l_new_val
+
     if type(val) == types.StringType:
        # on tente l'evaluation dans un contexte fourni par le parent s'il existe
        if self.parent:
@@ -272,6 +284,12 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
          else:
             return self.nom+' = '+ repr(self.valeur)
     else:
+       if type(self.valeur) == types.ListType :
+          aRetourner=self.nom+' = ['
+          for l in self.valeur :
+            aRetourner=aRetourner+str(l) +","
+          aRetourner=aRetourner[0:-1]+']'
+          return aRetourner
        return self.nom+' = '+ str(self.valeur)
 
   def __str__(self):
index fb10e20e10cf3a478452e3279cba1f4f546b508b..30e40733b5c9e376d6880b54402a0e89d90fe033 100644 (file)
@@ -2,7 +2,7 @@ import os
 
 import prefs
 
-rep_cata = prefs.REPINI
+rep_cata = prefs.repIni
 
 # Accès à la documentation 
 path_doc              = os.path.join(rep_cata,'Doc')
index f79fe6efb15cd5e8af3e678c74db9c13ee5cb7e1..61cb1f7a0449017406177824887bb88c06f8fd5a 100644 (file)
@@ -25,14 +25,14 @@ print "import des prefs de Homard"
 
 code = "Homard"
 
-# REPINI sert à localiser le fichier 
+# repIni sert à localiser le fichier 
 # initialdir sert comme directory initial des QFileDialog
 # positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
+repIni=os.path.dirname(os.path.abspath(__file__))
+initialdir=repIni 
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
+INSTALLDIR=os.path.join(repIni,'..')
 sys.path[:0]=[INSTALLDIR]
 
 
index 600e8d0a941c64da084c5503abd112ef5500f192..a4e2930e67fe617cccada027dba38054212f482c 100644 (file)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -852,7 +852,7 @@ class JDC(I_OBJECT.OBJECT):
           Retourne le nom du fichier correspondant à un numero d'unité
           logique (entier) ainsi que le source contenu dans le fichier
       """
-      if self.appli :
+      if self.appli is not None:
          # Si le JDC est relié à une application maitre, on délègue la recherche
          file,text= self.appli.get_file(unite,fic_origine)
       else:
index 8770ce39a2319ab81de6564fe75029e10d8eca8a..b8e6238957eb575c75bb5e95589059f4122265e1 100644 (file)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -536,7 +536,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
     except:
        # Impossible de construire le jdc auxiliaire (sortie par exception)
        l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
-       if self.jdc.appli:
+       if self.jdc.appli is not None:
           self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
                                         message="Ce fichier ne sera pas pris en compte\n"+string.join(l)
                                        )
@@ -863,7 +863,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
 
   def make_incl2_except(self,mess=None):
          l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
-         if self.jdc.appli:
+         if self.jdc.appli is not None:
              if mess == None :
                      self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
                                             message="Le contenu de ce fichier ne sera pas pris en compte\n"+string.join(l)
index f9b03c339ca81e128781062d4bc9419340d702c7..8d76911f6ca087c10bdf4488d84072965909c92b 100644 (file)
@@ -60,6 +60,14 @@ class MCCOMPO(I_OBJECT.OBJECT):
     for arg in liste:
         objet_cata = dico[arg]
         dico=objet_cata.entites
+        l=[]
+        specifique=0
+        for obj in dico.keys() :
+            if not(hasattr(dico[obj],'cache')) or dico[obj].cache==0 :
+               l.append(obj)
+            else :
+               specifique=1
+        if specifique == 1 : return l    
     return objet_cata.ordre_mc
 
   def filtre_liste_mc(self,liste_brute):
index a5b9df3e5887317c0115b74b5399dee8c3c61619..d9bd8154a8fc429b2d94c53d3ac95e75b78f2346 100644 (file)
@@ -41,11 +41,11 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
   def getlabeltext(self):
     """
        Retourne le label de self suivant qu'il s'agit d'un MCFACT
-       isolé ou d'un MCFACT appartenant à une MCList :
-       utilisée pour l'affichage dans l'arbre
+       isole ou d'un MCFACT appartenant a une MCList :
+       utilisee pour l'affichage dans l'arbre
     """
     objet = self.parent.get_child(self.nom)
-    # objet peut-être self ou une MCList qui contient self ...
+    # objet peut-etre self ou une MCList qui contient self ...
     if objet is None or objet is self:
       return "Erreur - mclist inexistante: "+self.nom
 
index 3c4052a31b0fe598c357f69a797d54390dedab3a..614d41ce02e3ee183159150463964d2ba1f5de47 100644 (file)
@@ -53,6 +53,7 @@ from I_VALIDATOR import ValError,listProto
 
 class MCSIMP(I_OBJECT.OBJECT):
 
+
   def isvalid(self,cr='non'):
       if self.state == 'unchanged':
         return self.valid
@@ -79,7 +80,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def GetText(self):
     """
-        Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+        Retourne le texte a afficher dans l'arbre représentant la valeur de l'objet
         pointé par self
     """
 
@@ -380,7 +381,7 @@ class MCSIMP(I_OBJECT.OBJECT):
         Inputs :
            - sd=concept detruit
         Fonction :
-        Met a jour la valeur du mot cle simple suite à la disparition 
+        Met a jour la valeur du mot cle simple suite a la disparition 
         du concept sd
         Attention aux matrices
     """
@@ -442,7 +443,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def set_valeur_co(self,nom_co):
       """
-          Affecte à self l'objet de type CO et de nom nom_co
+          Affecte a self l'objet de type CO et de nom nom_co
       """
       #print "set_valeur_co",nom_co
       step=self.etape.parent
@@ -482,7 +483,7 @@ class MCSIMP(I_OBJECT.OBJECT):
   def verif_existence_sd(self):
      """
         Vérifie que les structures de données utilisées dans self existent bien dans le contexte
-        avant étape, sinon enlève la référence à ces concepts
+        avant étape, sinon enlève la référea ces concepts
      """
      #print "verif_existence_sd"
      # Attention : possible probleme avec include
@@ -552,7 +553,7 @@ class MCSIMP(I_OBJECT.OBJECT):
      return 0
 
   def valide_item(self,item):
-      """Valide un item isolé. Cet item est candidat à l'ajout à la liste existante"""
+      """Valide un item isolé. Cet item est candidata l'ajout a la liste existante"""
       valid=1
       try:
           #on verifie le type
index d7d7c164c3d797909b254ff0448a8de2675ba81f..0687c4b7a76f955d1722299b1d1f5386dd15436c 100644 (file)
@@ -38,13 +38,13 @@ class OBJECT:
 
   def isMCList(self):
     """ 
-        Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut) 
+        Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut) 
     """
     return 0
 
   def get_regles(self):
     """ 
-       Retourne les règles de self 
+       Retourne les regles de self 
     """
     if hasattr(self,'definition'):
       return self.definition.regles
@@ -55,7 +55,7 @@ class OBJECT:
 
   def init_modif(self):
     """
-       Met l'état de l'objet à modified et propage au parent
+       Met l'etat de l'objet a modified et propage au parent
        qui vaut None s'il n'existe pas
     """
     self.state = 'modified'
@@ -64,11 +64,11 @@ class OBJECT:
 
   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
+      Methode appelee apres qu'une modification a ete faite afin de declencher
+      d'eventuels traitements post-modification
       """
       #print "fin_modif",self
-      # pour les objets autres que les commandes, aucun traitement spécifique 
+      # pour les objets autres que les commandes, aucun traitement specifique 
       # on remonte l'info de fin de modif au parent
       CONNECTOR.Emit(self,"valid")
       if self.parent:
@@ -76,13 +76,13 @@ class OBJECT:
 
   def isrepetable(self):
     """
-         Indique si l'objet est répétable
+         Indique si l'objet est repetable
     """
     return 0
 
   def liste_mc_presents(self):
     """
-         Retourne la liste des noms des mots clés présents
+         Retourne la liste des noms des mots cles presents
     """
     return []
 
@@ -91,14 +91,14 @@ class OBJECT:
 
   def get_liste_mc_inconnus(self):
      """
-     Retourne la liste des mots-clés inconnus dans self
+     Retourne la liste des mots-cles 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 
+        Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+        en fonction de la liste des mots-cles presents 
     """
     liste=[]
     for regle in self.definition.regles:
@@ -108,17 +108,17 @@ class OBJECT:
   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
+        (en fonction du catalogue donc de la definition) de self et
         retourne deux listes :
-          - la première contient les noms des blocs à rajouter
-          - la seconde contient les noms des blocs à supprimer
+          - la premiere contient les noms des blocs a rajouter
+          - la seconde contient les noms des blocs a supprimer
     """
     return [],[]
 
   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é
+        ou ETAPE) de self jusqu'au premier objet etape rencontre
     """
     if self.parent:
        l=self.parent.get_genealogie()
@@ -141,9 +141,9 @@ class OBJECT:
      pass
 
   def normalize(self):
-     """ Retourne l'objet normalisé. En général self sauf si
-         pour etre inséré dans l'objet père il doit etre 
-         wrappé dans un autre objet (voir mot cle facteur).
+     """ Retourne l'objet normalise. En general self sauf si
+         pour etre insere dans l'objet pere il doit etre 
+         wrappe dans un autre objet (voir mot cle facteur).
      """
      return self
 
index 31329b42262fa5c82b45acdb73e6c8a9a0a26a67..ca6972b02d295d1b02d588e33bb50b3b69da4088 100644 (file)
@@ -1,8 +1,8 @@
 # -*- coding: iso-8859-1 -*-
 
 import os, sys
-REPINI=os.path.dirname(os.path.abspath(__file__))
-INSTALLDIR=os.path.join(REPINI,'..')
+repIni=os.path.dirname(os.path.abspath(__file__))
+INSTALLDIR=os.path.join(repIni,'..')
 from Editeur import import_code
 
 from qt import *
@@ -52,8 +52,8 @@ class Appli(Eficas):
            del sys.setdefaultencoding
 
         self.top=self
-        self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
-        self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
+        self.CONFIGURATION = configuration.make_config(self,prefs.repIni)
+        self.CONFIGStyle = configuration.make_config_style(self,prefs.repIni)
 
         self.viewmanager = MyTabview(self, self) #MyTabview, MyWorkspace, Listspace
         self.setCentralWidget(self.viewmanager)
@@ -167,7 +167,7 @@ class Appli(Eficas):
         self.recentMenu.insertItem(self.trUtf8('&Clear'), self.handleClearRecent)
         
     def handleOpenPatrons(self, idx):
-        fichier=REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
+        fichier=repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
         self.viewmanager.handleOpen(fn=fichier, patron = 1)
 
 
index 8c102b66f57bdf51ba7b8da93e742e3dc330c51e..ed15ed14b8587ce11e6eafd3078dc5fcd9f1b5e9 100644 (file)
@@ -35,6 +35,7 @@ install ( FILES browser.py compobase.py compobloc.py compocommandecomm.py compoc
                 monUniqueSDCOIntoPanel.py monUniqueSDCOPanel.py monVisu.py
                 politiquesValidation.py qtCommun.py qtEficas.py
                 qtSaisie.py readercata.py typeNode.py utilIcons.py viewManager.py
+                configuration.py monSelectImage.py
           DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
        )
 
index 1a97d5c7e4a12f21e48a943a1d55373f965f41a2..7782eb1b530125756d74ba8b55b2e988600154b8 100644 (file)
@@ -80,13 +80,11 @@ class JDCTree( QTreeWidget ):
             
     def handleOnItem(self,item,int):
         self.itemCourrant=item
-        #try :
-        if 1 :
+        try :
            fr = item.item.get_fr()
            if self.editor:
               self.editor.affiche_infos(QString.toUtf8(QString(fr)))
-        #except:
-        else:
+        except:
             pass
         item.affichePanneau()
 
@@ -121,6 +119,7 @@ class JDCNode(QTreeWidgetItem):
         self.item.connect("supp" ,self.onSupp,())
         self.item.connect("add"  ,self.onAdd,())
         self.state=""
+       
 
 
     def build_children(self,posInsertion=10000):
@@ -340,9 +339,17 @@ class JDCNode(QTreeWidgetItem):
         labeltext,fonte,couleur = self.item.GetLabelText()
         self.setText(0, labeltext)        
     
+    def update_node_label_in_blue(self):
+        if hasattr(self.appliEficas,'noeudColore'):
+           self.appliEficas.noeudColore.setTextColor( 0,Qt.black)
+           self.appliEficas.noeudColore.update_node_label()
+        self.setTextColor( 0,Qt.blue )
+        labeltext,fonte,couleur = self.item.GetLabelText()
+        self.setText(0, labeltext)        
+        self.appliEficas.noeudColore=self
+
     def update_node_texte(self):
         """ Met a jour les noms des SD et valeurs des mots-cles """
-        #print "NODE update_node_texte", self.item.GetLabelText()
         value = self.item.GetText()
         self.setText(1, value)
 
index 961be5be1a5e30af9e60f6e5a0a433746a368162..aec67efe30042886c05712f3e8bbf549de3024ca 100644 (file)
@@ -53,7 +53,6 @@ class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):
 
     def createPopUpMenu(self):
       typeNode.PopUpMenuNode.createPopUpMenu(self)
-      #self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit )
       
     def makeEdit(self):    #,appli,node
         if self.item.object.text_converted == 0:
@@ -85,7 +84,6 @@ class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):
 
     def createPopUpMenu(self):
       typeNode.PopUpMenuNode.createPopUpMenu(self)
-      self.menu.insertItem( qApp.translate('Browser','Edit'), self.makeEdit )
 
     def makeEdit(self):    #,appli,node
         if self.item.object.text_converted == 0:
@@ -118,7 +116,6 @@ class MATERIAUNode(MACRONode):
 
     def createPopUpMenu(self):
       typeNode.PopUpMenuNode.createPopUpMenu(self)
-      self.menu.insertItem( qApp.translate('Browser','View'), self.makeView )
 
     def makeView(self) :
       if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
index a32274d87e78d0c5bb3d3e57b5ed9657f1a3fc66..7993545ac1fdecda8bbe8e4079c08db35e22cb35 100644 (file)
@@ -98,7 +98,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
   def GetIconName(self):
       """
       Retourne le nom de l'icone a afficher dans l'arbre
-      Ce nom dépend de la validité de l'objet
+      Ce nom depend de la validite de l'objet
       """
       if not self.object.isactif():
          return "ast-white-square"
index 914132b18d7ea53b3b361392f5cf387515e7f2bf..372aa36426fea160a9e3f687452390eecda29af9 100644 (file)
@@ -6,7 +6,7 @@
 """
 
 # import modules Python
-import string
+import string, types
 
 # import modules EFICAS
 from Editeur     import Objecttreeitem
@@ -72,6 +72,11 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
       Ce texte est tronqué à 25 caractêres
       """
       texte=self.object.nom+"="+str(self.object.valeur)
+      if type(self.object.valeur) == types.ListType :
+          texte=self.nom+' = ['
+          for l in self.object.valeur :
+            texte=texte+str(l) +","
+          texte=texte[0:-1]+']'
       texte = string.split(texte,'\n')[0]
       if len(texte) < 25 :
           return texte
index fbbf61b4de05c8c247d61186d5d50c2438757021..a2d6e9abbbb0226e9293bfdf5f1f0167625e95f9 100644 (file)
@@ -230,7 +230,6 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
   def get_liste_param_possible(self):
       liste_param=[]
-      print self.object.jdc.params
       for param in self.object.jdc.params:
           encorevalide=self.valide_item(param.valeur)
           if encorevalide:
index f3fa809658de6be2918247fc4643f454b6e28722..a9934a05f3bd14905923c5478eaeeb91686bdcce 100644 (file)
@@ -50,7 +50,6 @@ class CONFIG_BASE:
       self.code    = appli.code\r
       self.salome  = appli.salome\r
       self.repIni  = repIni\r
-      self.REPINI  = repIni\r
       self.rep_user   = os.path.join(os.environ['HOME'],nomDir)\r
      \r
       if self.appli: \r
@@ -72,6 +71,8 @@ class CONFIG_BASE:
  \r
       #Lecture des fichiers utilisateurs\r
       self.lecture_fichier_ini_standard()\r
+      if hasattr(self,'make_ssCode'):\r
+         self.make_ssCode(self.ssCode)\r
       self.lecture_fichier_ini_utilisateur()\r
       self.lecture_catalogues()\r
 \r
@@ -80,8 +81,7 @@ class CONFIG_BASE:
   #--------------------------------------\r
   # Verifie l'existence du fichier "standard"\r
   # appelle la lecture de ce fichier\r
-      import prefs\r
-      name='prefs_'+prefs.code\r
+      name='prefs_'+self.appli.code\r
       prefsCode=__import__(name)\r
       self.prefsUser=name+".py"\r
       for k in self.labels_eficas :\r
@@ -90,9 +90,6 @@ class CONFIG_BASE:
             setattr(self,k,valeur)\r
          except :\r
             pass\r
-      if hasattr(self,'map_path') :\r
-         oldPath=self.map_path\r
-              \r
 \r
   #--------------------------------------\r
   def lecture_fichier_ini_utilisateur(self):\r
@@ -155,7 +152,6 @@ class CONFIG_BASE:
              valeur=getattr(self,clef)\r
              texte= texte + clef+"     = " + repr(valeur) +"\n"\r
       f=open(self.fic_ini_utilisateur,'w+')\r
-      print self.fic_ini_utilisateur\r
       f.write(texte) \r
       f.close()\r
 #\r
index e1351b90ae1f5d3d21114cfa4415f45f186e9a34..eacadef0b9e47c906cf55b9327ef1f6ab0192e6e 100644 (file)
 #
 # ======================================================================
 
-import types,sys,os
+import types,sys,os, re
 import traceback
 from PyQt4 import *
 from PyQt4.QtGui  import *
 from PyQt4.QtCore import *
+import time
+from datetime import date
+
 
 # Modules Eficas
 
-import convert,generator
+import convert, generator
 from Editeur     import session
 from Editeur     import comploader
 from Editeur     import Objecttreeitem
@@ -47,7 +50,6 @@ class JDCEditor(QSplitter):
     def __init__ (self,appli,fichier = None, jdc = None, QWParent=None, units = None, include=0 , vm=None):          
     #----------------------------------------------------------------------------------------------------------#
 
-        #print "fichier", fichier,"jdc",jdc,"units",units,"include",include
         QSplitter.__init__(self, QWParent)
        self.appliEficas = appli
        self.appli       = appli  #---- attendu par IHM
@@ -56,25 +58,31 @@ class JDCEditor(QSplitter):
         self.jdc         = jdc
         self.QWParent    = QWParent
 
-        self.test=0
-        VERSION_CODE    = session.d_env.cata
         if appli != None :
            self.salome =  self.appliEficas.salome
-           self.format =  self.appliEficas.format_fichier
         else :
            self.salome=0
            print "dans JDC pas d appli ????????"
 
+        # ces attributs sont mis a jour par definitCode appelee par newEditor
         self.code = self.appliEficas.CONFIGURATION.code
-        self.version_code = VERSION_CODE
+        self.version_code = session.d_env.cata
+
+        if not hasattr ( self.appliEficas, 'readercata') or  self.appliEficas.multi==True:
+           self.readercata  = readercata.READERCATA( self, self.appliEficas )
+           self.appliEficas.readercata=self.readercata
+        else :
+           self.readercata=self.appliEficas.readercata
+        if self.readercata.fic_cata == None : return    #Sortie Salome
+
+        self.format =  self.appliEficas.format_fichier
         self.titre=self.appliEficas.VERSION_EFICAS + ' pour '+ self.code
 
         self.dict_reels={}
         self.liste_simp_reel=[]        
         self.ihm="QT"
         
-        import prefs
-        nameConf='configuration_'+prefs.code
+        nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
         self.CONFIGURATION = self.appliEficas.CONFIGURATION
         self.CONFIGStyle =   self.appliEficas.CONFIGStyle
@@ -108,15 +116,6 @@ class JDCEditor(QSplitter):
         self.node_selected = None
         self.message=''
         
-        #if not hasattr( readercata, 'reader' ) :
-        #    readercata.reader = readercata.READERCATA( self, self.appliEficas )
-        #self.readercata = readercata.reader
-        if not hasattr ( self.appliEficas, 'readercata'):
-           self.readercata  = readercata.READERCATA( self, self.appliEficas )
-           self.appliEficas.readercata=self.readercata
-        else :
-           self.readercata=self.appliEficas.readercata
-        if self.readercata.fic_cata == None : return    #Sortie Salome
         self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
         
         #------- construction du jdc --------------
@@ -132,7 +131,7 @@ class JDCEditor(QSplitter):
                self.jdc = self.readFile(self.fichier)
             else :
                self.jdc=jdc
-            if units is not None:
+            if self.jdc is not None and units is not None:
                self.jdc.recorded_units=units
                self.jdc.old_recorded_units=units
         else: 
@@ -147,7 +146,19 @@ class JDCEditor(QSplitter):
             self.jdc.appli = self
             txt_exception  = None
             if not jdc:
-                self.jdc.analyse()            
+                if self.appli.code == "CARMEL3D"  and self.jdc.procedure == "" :
+                   try :
+                       self.jdc.procedure="LINEAR=L_LAW()"
+                       self.jdc.analyse()            
+                       print self.jdc.cr.get_mess_exception()
+                       if  self.jdc.cr.get_mess_exception()!="" :
+                           self.jdc = self._newJDC(units=units)
+                           self.jdc.analyse()            
+                   except :
+                       self.jdc = self._newJDC(units=units)
+                       self.jdc.analyse()            
+                else :
+                   self.jdc.analyse()            
                 txt_exception = self.jdc.cr.get_mess_exception()            
             if txt_exception:
                 self.jdc = None
@@ -170,7 +181,8 @@ class JDCEditor(QSplitter):
         Initialise un nouveau JDC vierge
         """
         CONTEXT.unset_current_step()        
-        jdc=self.readercata.cata[0].JdC( procedure="",
+
+        jdc=self.readercata.cata[0].JdC( procedure ="",
                                          appli=self,
                                          cata=self.readercata.cata,
                                          cata_ord_dico=self.readercata.cata_ordonne_dico,
@@ -213,7 +225,7 @@ class JDCEditor(QSplitter):
            J.old_recorded_units=units
         return J
 
-    #-----------------------#
+    #-------------------------------#
     def readFile(self, fn):
     #--------------------------------#
         """
@@ -232,13 +244,17 @@ class JDCEditor(QSplitter):
              # Le convertisseur existe on l'utilise
              #appli = self 
              p=convert.plugins[self.appliEficas.format_fichier_in]()
-             p.readfile(fn)         
+             p.readfile(fn)
+             pareil,texteNew=self.verifieCHECKSUM(p.text)
+             if pareil == False :
+                QMessageBox.warning( self, "fichier modifie","Attention! fichier change hors EFICAS")
+             p.text=texteNew
              text=p.convert('exec',self.appliEficas)
              if not p.cr.estvide():                 
                 self.affiche_infos("Erreur à la conversion",Qt.red)
         else :
             self.affiche_infos("Type de fichier non reconnu",Qt.red)
-            QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")            
+            QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir le type de fichier %s" % self.appliEficas.format_fichier_in)            
             return None
         
         CONTEXT.unset_current_step()
@@ -265,12 +281,11 @@ class JDCEditor(QSplitter):
     #-----------------------#
     def get_source(self,file):
     #-----------------------#
-        format=self.appliEficas.format_fichier
 
         # Il faut convertir le contenu du fichier en fonction du format
-        if convert.plugins.has_key(format):
+        if convert.plugins.has_key(self.format):
             # Le convertisseur existe on l'utilise
-            p=convert.plugins[format]()
+            p=convert.plugins[self.format]()
             p.readfile(file)
             text=p.convert('execnoparseur')
             if not p.cr.estvide():
@@ -293,7 +308,6 @@ class JDCEditor(QSplitter):
     #-----------------------#
     def viewJdcSource(self):        
     #-----------------------#
-        format = self.appliEficas.format_fichier
         f=open(self.fichier,'r')
         texteSource=f.read()
         f.close()
@@ -302,8 +316,7 @@ class JDCEditor(QSplitter):
     #-----------------------#
     def viewJdcPy(self):        
     #-----------------------#
-        format = self.appliEficas.format_fichier
-        strSource = str( self.get_text_JDC(format) )       
+        strSource = str( self.get_text_JDC(self.format) )       
         self._viewText(strSource, "JDC_RESULTAT")
                  
     #-----------------------#
@@ -388,8 +401,8 @@ class JDCEditor(QSplitter):
       """
       Stocke dans Eficas.noeud_a_editer le noeud a copier
       """
-      #print "handleEditCut"
       self.chercheNoeudSelectionne()
+      self.node_selected.update_node_label_in_blue()
       self.QWParent.edit="copier"
       self.QWParent.noeud_a_editer = self.node_selected
     
@@ -445,6 +458,7 @@ class JDCEditor(QSplitter):
 
       # on rend la copie a nouveau possible en liberant le flag edit
       self.QWParent.edit="copier"
+      self.QWParent.noeud_a_editer=child
           
     #---------------------#
     def getFileName(self):
@@ -478,13 +492,15 @@ class JDCEditor(QSplitter):
         fn = unicode(fn)
 
         if txt == None :
-            txt = self.get_text_JDC(self.appliEficas.format_fichier)
+            txt = self.get_text_JDC(self.format)
             eol = '\n'        
             if len(txt) >= len(eol):
                if txt[-len(eol):] != eol:
                   txt += eol
             else:
                 txt += eol        
+            checksum=self.get_checksum(txt)
+            txt=txt+checksum
         try:
             f = open(fn, 'wb')
             f.write(txt)
@@ -511,82 +527,98 @@ class JDCEditor(QSplitter):
             return jdc_formate
       else:         
          # Il n'existe pas c'est une erreur
-         self.affiche_infos("Format %s non reconnu" % format,Qt.red)
-         QMessageBox.critical( self, "Format "+format+" non reconnu","EFICAS ne sait pas convertir le JDC selon le format "+format)
+         self.affiche_infos("Format %s non reconnu" % self.format,Qt.red)
+         QMessageBox.critical( self, "Format "+self.format+" non reconnu","EFICAS ne sait pas convertir le JDC selon le format "+self.format)
          return ""
 
     #-----------------------------#
     def run(self,execution="oui"):
     #-----------------------------#
-      format=self.appliEficas.format_fichier
       self.textePython=""
-      if generator.plugins.has_key(format):
+      if generator.plugins.has_key(self.format):
          # Le generateur existe on l'utilise
-         self.generator=generator.plugins[format]()
+         self.generator=generator.plugins[self.format]()
          self.textePython =self.generator.generRUN(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
       if execution=="oui" :
-         os.system(self.textePython)
+         exec self.textePython
       else:
          return self.textePython
 
     #------------------------------------------------#
     def runYACS(self,execution="oui",nomFichier=None):
     #------------------------------------------------#
-      format=self.appliEficas.format_fichier
-      if generator.plugins.has_key(format):
+      if generator.plugins.has_key(self.format):
          # Le generateur existe on l'utilise
-         self.generator=generator.plugins[format]()
+         self.generator=generator.plugins[self.format]()
          self.generator.generRUNYACS(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION,nomFichier=nomFichier)
       if execution=="oui" :
          print "il faut faire le run dans Salome"
     
-    #-----------------------------#
-    def saveRun(self):
-    #-----------------------------#
-        texte=self.run(execution="non")
-        path=self.CONFIGURATION.savedir
-        fn = QFileDialog.getSaveFileName( self,
+    
+    #-----------------------------------------------------#
+    def determineNomFichier(self,path,extension):
+    #-----------------------------------------------------#
+      if DictExtensions.has_key(self.appli.code) :
+         chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
+         extensions= self.trUtf8(chaine1+ "All Files (*)")
+      else :
+         extensions= self.trUtf8("JDC (*.comm);;" "All Files (*)")
+
+      if self.appli.code == "MAP" :
+         extensions = extensions + ";;Schema Yacs (*.xml);; Run (*.py);;"
+
+      fn = QFileDialog.getSaveFileName( self,
              self.trUtf8("sauvegarde"), path,
-             self.trUtf8("JDC (*.sh);;" "All Files (*)"),None,
+             extensions,None,
              QFileDialog.DontConfirmOverwrite)
-        if fn.isNull(): return 
-        ext = QFileInfo(fn).suffix()
-        if ext.isEmpty(): fn.append(".xml")
-
-        if QFileInfo(fn).exists():
-                abort = QMessageBox.warning(self,
-                       self.trUtf8("Sauvegarde du Fichier"),
-                       self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
-                       self.trUtf8("&Ecraser"),
-                       self.trUtf8("&Abandonner"))
-                if abort == 1 :  return
-
-        fn = unicode(QDir.convertSeparators(fn))
-        self.writeFile( fn, txt = texte)
+      if fn.isNull(): return (0, None)
+      ext = QFileInfo(fn).suffix()
+      if ext.isEmpty(): fn.append(extension)
+
+      if QFileInfo(fn).exists():
+           abort = QMessageBox.warning(self,
+                   self.trUtf8("Sauvegarde du Fichier"),
+                   self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
+                   self.trUtf8("&Ecraser"),
+                   self.trUtf8("&Abandonner"))
+           if abort == 1 :  return (0, "")
+      return (1,fn)
+
+    def saveRun(self):
+    #-----------------#
+        texte=self.run(execution="non")
+        extension=".py"
+
+        if hasattr(self,'fichierRun'):
+           self.writeFile( self.fichierRun, txt = texte)
+           return
+
+        if self.fichier == None :
+           path=self.CONFIGURATION.savedir
+        else :
+          path=QFileInfo(self.fichier).absolutePath()+"/"+QFileInfo(self.fichier).baseName()+".py"
+        bOK, fn=self.determineNomFichier(path,extension)
+        if fn == "" : return
+        self.fichierRun = unicode(QDir.convertSeparators(fn))
+        self.writeFile( self.fichierRun, txt = texte)
     
     #-----------------------------#
     def saveYACS(self):
     #-----------------------------#
-        path=self.CONFIGURATION.savedir
-        fn = QFileDialog.getSaveFileName( self,
-             self.trUtf8("sauvegarde"), path,
-             self.trUtf8("JDC (*.xml);;" "All Files (*)"),None,
-             QFileDialog.DontConfirmOverwrite)
-        if fn.isNull(): return 
-        ext = QFileInfo(fn).suffix()
-        if ext.isEmpty(): fn.append(".xml")
-
-        if QFileInfo(fn).exists():
-                abort = QMessageBox.warning(self,
-                       self.trUtf8("Sauvegarde du Fichier"),
-                       self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
-                       self.trUtf8("&Ecraser"),
-                       self.trUtf8("&Abandonner"))
-                if abort == 1 :  return
-        fn = unicode(QDir.convertSeparators(fn))
-
-        texte=self.runYACS(execution="non",nomFichier=fn)
-        #self.writeFile( fn, txt = texte)
+        if hasattr(self,'fichierYACS'):
+           self.runYACS(execution="non",nomFichier=self.fichierYACS)
+           return
+
+        today = str(date.today())
+        today = today.replace('-', '')
+        today+="-"+time.strftime("%H%M%S", time.localtime())
+        path=self.CONFIGURATION.PATH_STUDY+"/"+self.CONFIGURATION.NAME_SCHEME+"_"+today+".xml"
+        extension=".xml"
+
+        bOK, fn=self.determineNomFichier(path,extension)
+        if fn == "" : return
+        self.runYACS(execution="non",nomFichier=fn)
+
       
     #-----------------------------------------#
     def cherche_Groupes(self):
@@ -594,6 +626,16 @@ class JDCEditor(QSplitter):
         listeMA,listeNO=self.get_text_JDC("GroupMA")
         return listeMA,listeNO
 
+    #-----------------------------------------#
+    def handleAjoutGroup(self,listeGroup):
+    #-----------------------------------------#
+         dernier=self.tree.racine.children[-1]
+         for groupe in listeGroup :
+             new_node = dernier.append_brother("MESH_GROUPE",'after')
+             test,mess = new_node.item.nomme_sd(groupe)
+             new_node.append_child('Material')
+             dernier=new_node
+
     #-----------------------------------------#
     def saveFile(self, path = None, saveas= 0):
     #-----------------------------------------#
@@ -608,88 +650,44 @@ class JDCEditor(QSplitter):
         if not self.modified and not saveas:
             return (0, None)      # do nothing if text wasn't changed
             
+        extension='.py'
+        if DictExtensions.has_key(self.appli.code) :
+           extension=DictExtensions[self.appli.code]
+        else :
+           extension='.comm'
+
         newName = None
+        fn = self.fichier
         if self.fichier is None or saveas:
           if path is None: 
              path=self.CONFIGURATION.savedir
-          selectedFilter = QString('')
-          if DictExtensions.has_key(self.appli.code) :
-               chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
-               extensions= self.trUtf8(chaine1+ "All Files (*)")
-          else :
-               extensions= self.trUtf8("JDC (*.comm);;" "All Files (*)")
-          fn = QFileDialog.getSaveFileName( self,
-               self.trUtf8("sauvegarde"), path,
-               extensions,None,
-               QFileDialog.DontConfirmOverwrite)
+          bOK, fn=self.determineNomFichier(path,extension)
+          if fn == None : return (0, None)
           if fn.isNull(): return (0, None)
+
           ulfile = os.path.abspath(unicode(fn))
           self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
-
-          ext = QFileInfo(fn).suffix()
-          if ext.isEmpty():
-             if DictExtensions.has_key(self.appli.code) :
-                fn.append(DictExtensions[self.appli.code])
-             else :
-                fn.append(".comm")
-
-          if QFileInfo(fn).exists():
-                abort = QMessageBox.warning(self,
-                       self.trUtf8("Sauvegarde du Fichier"),
-                       self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
-                       self.trUtf8("&Ecraser"),
-                       self.trUtf8("&Abandonner"))
-                if abort == 1 :  return (0, None)
-
           fn = unicode(QDir.convertSeparators(fn))
           newName = fn
 
-        else:
-            fn = self.fichier
-        
-        if self.writeFile(fn):
-            self.fichier = fn
-            self.modified  = False                        
-            if self.fileInfo is None or saveas:
-                self.fileInfo = QFileInfo(self.fichier)
-                self.fileInfo.setCaching(0)
-            self.lastModified = self.fileInfo.lastModified()
-            if newName is not None:
-                self.appliEficas.addToRecentList(newName)
-                self.tree.racine.item.getObject().nom=os.path.basename(newName)
-                self.tree.racine.update_node_label()
-               
-            if self.jdc.isvalid() != 0 :
-               try : 
-                  fileXML = fn[:fn.rfind(".")] + '.xml'
-                  self.generator.writeOpenturnsXML( fileXML )
-               except :
-                  pass
+        if not (self.writeFile(fn)): return (0, None)
+        self.fichier = fn
+        self.modified  = False                        
+        if self.fileInfo is None or saveas:
+           self.fileInfo = QFileInfo(self.fichier)
+           self.fileInfo.setCaching(0)
+        self.lastModified = self.fileInfo.lastModified()
+        if newName is not None:
+           self.appliEficas.addToRecentList(newName)
+           self.tree.racine.item.getObject().nom=os.path.basename(newName)
+           self.tree.racine.update_node_label()
                
-               try : 
-                  fileSTD = fn[:fn.rfind(".")] + '.py'
-                  self.generator.writeOpenturnsSTD( fileSTD )
-               except :
-                  pass
+        if self.jdc.isvalid() != 0 and hasattr(self.generator, "writeDefault"):
+            self.generator.writeDefault(fn)
 
-               try:
-                 self.generator.writeDefault(fn)
-               except:
-                 pass
-
-               try : 
-                  fileCuve2DG = fn[:fn.rfind(".")] + '.don'
-                  self.generator.writeCuve2DG(fileCuve2DG)
-               except :
-                  pass
-
-
-            if self.salome : 
+        if self.salome : 
                self.appliEficas.addJdcInSalome( self.fichier)
-
-            return (1, self.fichier)
-        else:
-            return (0, None)
+        return (1, self.fichier)
 #
     #---------------------------------#
     def saveFileAs(self, path = None):
@@ -746,9 +744,33 @@ class JDCEditor(QSplitter):
             jdcText = ''
         return ulfile, jdcText
 
+
+     
+    #------------------------------#
+    def verifieCHECKSUM(self,text):
+    #------------------------------#
+        indexDeb=text.find("#CHECKSUM:")
+        if indexDeb < 0 :
+           return 1, text
+        indexFin=text.find(":FIN CHECKSUM")
+        checkAvant=text[indexDeb:indexFin+13]
+        textJDC=text[0:indexDeb]+text[indexFin+13:-1]
+        checksum=self.get_checksum(textJDC)
+        pareil=(checkAvant==checksum)
+        return pareil, textJDC
+    #---------------------------#
+    def get_checksum(self,texte):
+    #---------------------------#
+        newtexte=texte.replace('"','\\"')
+        commande='echo "'+newtexte+'"|md5sum'
+        a=os.popen(commande)
+        checksum=a.read()
+        a.close()
+        ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+        return ligne
         
 if __name__=='__main__':    
-    import prefs # dans main
+    self.code='ASTER'
     name='prefs_'+prefs.code
     prefsCode=__import__(name)
 
index 97709247599f82a8d11739efaf1a2a8cae533438..d281e90722d3fa28a3ca6107c66643ccc6576e8b 100644 (file)
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 #
 #
 # ======================================================================
-"""
-    Ce module permet de lancer l'application EFICAS en affichant
-    un ecran Splash pour faire patienter l'utilisateur
-"""
 # Modules Python
-import sys
-from PyQt4.QtGui import *
 
-from Editeur  import import_code
-from Editeur  import session
-from qtEficas import Appli
+import sys,os
+repIni=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
+ihmQTDir=os.path.join(repIni,"UiQT4")
+editeurDir=os.path.join(repIni,"Editeur")
+ihmDir=os.path.join(repIni,"InterfaceQT4")
+if ihmDir not in sys.path : sys.path.append(ihmDir)
+if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
+if editeurDir not in sys.path :sys.path.append(editeurDir)
+
+from PyQt4.QtGui import *
 
-def lance_eficas(code=None,fichier=None,ssCode=None):
+def lance_eficas(code=None,fichier=None,ssCode=None,multi=False):
     """
         Lance l'appli EFICAS
     """
     # Analyse des arguments de la ligne de commande
+    from Editeur  import session
     options=session.parse(sys.argv)
-    code=options.code
+    if options.code!= None : code=options.code
 
+    from qtEficas import Appli
     app = QApplication(sys.argv)
-    Eficas=Appli(code=code,ssCode=ssCode)
+    Eficas=Appli(code=code,ssCode=ssCode,multi=multi)
     Eficas.show()
 
     res=app.exec_()
     sys.exit(res)
 
 
-def lance_eficas_ssIhm(code=None,fichier=None,version='v9.5'):
+def lance_eficas_ssIhm(code=None,fichier=None,ssCode=None,version=None):
     """
         Lance l'appli EFICAS pour trouver les noms des groupes
     """
@@ -54,15 +58,14 @@ def lance_eficas_ssIhm(code=None,fichier=None,version='v9.5'):
     options=session.parse(sys.argv)
     code=options.code
 
+    from qtEficas import Appli
     app = QApplication(sys.argv)
-    Eficas=Appli(code=code)
+    Eficas=Appli(code=code,ssCode=ssCode)
 
     from ssIhm  import QWParentSSIhm
     parent=QWParentSSIhm(code,Eficas,version)
 
     import readercata
-    #if not hasattr( readercata, 'reader' ) :
-    #   readercata.reader = readercata.READERCATA( parent, Eficas )
     if not hasattr ( Eficas, 'readercata'):
            monreadercata  = readercata.READERCATA( parent, Eficas )
            Eficas.readercata=monreadercata
@@ -71,3 +74,33 @@ def lance_eficas_ssIhm(code=None,fichier=None,version='v9.5'):
     from editor import JDCEditor
     monEditeur=JDCEditor(Eficas,fichier)
     print monEditeur.cherche_Groupes()
+
+def lance_MapToSh(code=None,fichier=None,ssCode='s_polymers_st_1_V1'):
+     
+    options=session.parse(sys.argv)
+    code=options.code
+    fichier=options.comm[0]
+
+    from qtEficas import Appli
+    app = QApplication(sys.argv)
+    Eficas=Appli(code=code,ssCode=ssCode)
+
+    from ssIhm  import QWParentSSIhm
+    parent=QWParentSSIhm(code,Eficas,None,ssCode)
+
+    import readercata
+    if not hasattr ( Eficas, 'readercata'):
+           monreadercata  = readercata.READERCATA( parent, Eficas )
+           Eficas.readercata=monreadercata
+
+    from editor import JDCEditor
+    monEditeur=JDCEditor(Eficas,fichier)
+    texte=monEditeur.run("non")
+    print texte
+
+if __name__ == "__main__":
+    import sys
+    sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
+    lance_eficas(code=None,fichier=None,ssCode=None,multi=True)
+    
+
index c93edcb0b38b6937146ce0c89fa4d635f39eb754..2efbdda2c1de240b4f26dfeb69f3bbf8aca04373 100644 (file)
@@ -11,6 +11,9 @@ def traduction(directPath,editor,version):
     if version == "V8V9" : 
        from Traducteur import traduitV8V9 
        suffixe="v9.comm"
+    if version == "V9V10" : 
+       from Traducteur import traduitV9V10 
+       suffixe="v10.comm"
     fn = QFileDialog.getOpenFileName( 
                        editor.appliEficas,
                         editor.appliEficas.trUtf8('Traduire Fichier'),
@@ -28,11 +31,11 @@ def traduction(directPath,editor,version):
     log=directLog+"/convert.log"
     os.system("rm -rf "+log)
     os.system("rm -rf "+FichierTraduit)
-    print "hhhhhhhhhhhhhhhhhhhhhhhhhhhh"
 
     qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
     if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
     if version == "V8V9" : traduitV8V9.traduc(FichieraTraduire,FichierTraduit,log)
+    if version == "V9V10" : traduitV9V10.traduc(FichieraTraduire,FichierTraduit,log)
     qApp.setOverrideCursor(QCursor(Qt.ArrowCursor))
 
     Entete="Fichier Traduit : "+FichierTraduit +"\n\n"
diff --git a/InterfaceQT4/monChoixCode.py b/InterfaceQT4/monChoixCode.py
new file mode 100644 (file)
index 0000000..0a81b98
--- /dev/null
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+import os,sys
+from desChoixCode import Ui_ChoixCode
+from PyQt4.QtGui import * 
+from PyQt4.QtCore import * 
+
+
+    
+# Import des panels
+
+class MonChoixCode(Ui_ChoixCode,QDialog):
+  """
+  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 __init__(self,  parentAppli=None):
+      QDialog.__init__(self,parentAppli)
+      self.setModal(True)
+      self.setupUi(self)
+      self.parentAppli=parentAppli
+      self.verifieInstall()
+      self.code=None
+      self.connect(self.pB_OK,SIGNAL("clicked()"),self.choisitCode)
+
+  def verifieInstall(self):
+      self.groupCodes=QButtonGroup(self)
+      for code in ('Aster','Cuve2dg','Openturns_Study','Openturns_Wrapper','Carmel3D'):
+          nom='rB_'+code
+          bouton=getattr(self,nom)
+          dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
+          print dirCode
+          try :
+             l=os.listdir(dirCode)
+             self.groupCodes.addButton(bouton)
+          except :
+             bouton.close()
+          
+
+  def choisitCode(self):
+      bouton=self.groupCodes.checkedButton()
+      code=str(bouton.text())
+      codeUpper=code.upper()
+      self.parentAppli.code=codeUpper
+      sys.path.insert(0,os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code)))
+      self.close()
index c0d12fb527da9d524cbf91c451b5a64b8c40a2cf..0cdbac6b93a733207e139bacc81b7a6b45a4a8cc 100644 (file)
@@ -35,8 +35,9 @@ labels = {
 "s_scc_st_1"    : "Analyse morphologique et mécanique d'une couche d'oxydes",
 "s_scc_st_2"    : "Analyse statistique de données locales et expérimentales \nou numériques",
 "s_scc_st_3"     : "taux de couverture des joints de grains par des précipités",
-"s_poly_st_1"   : "Estimation numérique 3D de la diffusion effective des gaz dans les polymères chargés",
-
+"s_polymers_st_1"   : "Estimation numérique 3D de la diffusion effective des gaz dans les polymères chargés",
+"s_rpv2"   : "Essai Pascale",
+"s_DIC"   : "Essai Felix",
          }
 
 dico={"oxides" : {"irradiation"            : "s_oxides_st_1",
@@ -46,13 +47,15 @@ dico={"oxides" : {"irradiation"            : "s_oxides_st_1",
                "analyse statistique"   : "s_scc_st_2",
                "taux de couverture"    : "s_scc_st_3"},
       "concrete" : {},
-      "polycristals" : {},
-      "polymers" : {"numerique 3D" : "s_poly_st_1"},
+      "polycristals" : {"essai Pascale" : "s_rpv2",},
+      "polymers" : {"numerique 3D" : "s_polymers_st_1"},
       "micro" : {},
       "seal" : {},
       "mox" : {},
       "nano" : {},
-      "insulator" : {}}
+      "insulator" : {},
+      "images" : {"Felix" : "s_DIC"}
+}
     
 # Import des panels
 
@@ -96,6 +99,7 @@ class MonChoixMap(Ui_ChoixMap,QtGui.QDialog):
         self.groupModules.addButton(self.RBM8)
         self.groupModules.addButton(self.RBM9)
         self.groupModules.addButton(self.RBM10)
+        self.groupModules.addButton(self.RBM11)
         self.groupScheme=QButtonGroup(self.groupBoxScheme)
         self.connect(self.groupModules,SIGNAL("buttonClicked (QAbstractButton*)"),self.modifieModule)
         self.connect(self.groupScheme,SIGNAL("buttonClicked (QAbstractButton*)"),self.choisitSchema)
index 210ffe594d1c5db5484a464b9c34bcca6401eae9..2f0102118d1f9d6a5deb8f887b2a3a54e42fde1c 100644 (file)
@@ -52,9 +52,9 @@ class DComm(Ui_DComm,QDialog):
 
 class MonCommandePanel(DComm,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
   """
-  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
+  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 __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonCommandePanel"
@@ -66,7 +66,7 @@ class MonCommandePanel(DComm,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
         self.connecterSignaux()
 
   def connecterSignaux(self):
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
index f31efe18abba0bd2a0a653ccda72056cf185c4f8..aa9424a794cc4c87ec500b31692a94e2f0ebc73e 100644 (file)
@@ -53,9 +53,9 @@ class DComment(Ui_DComment,QDialog):
 
 class MonCommentairePanel(DComment,QTPanelTBW2,QTPanel):
   """
-  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
+  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 __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonCommentairePanel"
@@ -67,7 +67,7 @@ class MonCommentairePanel(DComment,QTPanelTBW2,QTPanel):
         self.textCommentaire.setFocus()
 
   def connecterSignaux(self) :
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
index c35b457af40634abbf04a17839e003e0c2023743..5c3558fbf424ce8f6527f144e1910c94ce95e1e5 100644 (file)
@@ -87,7 +87,6 @@ class MonFonctionPanel(MonPlusieursBasePanel):
                        for val in valeur :
                            TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
                        TupleEnTexte = TupleEnTexte[0:-2] +")"
-                       print TupleEnTexte
                        self.LBValeurs.addItem(TupleEnTexte)
                    else :
                        self.LBValeurs.addItem(QString(str(valeur)))
@@ -174,7 +173,9 @@ class MonFonctionPanel(MonPlusieursBasePanel):
   def Sup1Valeur(self):
         index=self.LBValeurs.currentRow()
         if index == None : return
-        self.LBValeurs.takeItem(index)
+        removed_item = self.LBValeurs.takeItem(index)
+        text = removed_item.text()[1:-1] # Remove the parenthesis
+        self.LEValeur.setText(text)
         listeVal=[]
         indexInterdit=[]
         for i in range(self.nbValeurs):
index 4bc87d5f43ad92e903b0ef36d36813f3de7b074b..ff8ed1d994701555d7bdc38045f78a6bc902b620 100644 (file)
@@ -74,7 +74,7 @@ class MonFormulePanel(DFormule,QTPanelTBW2):
         self.parent=parent
 
   def connecterSignaux(self):
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
index 94cd999f6eaf67cb4a568d6719f2545e0f302fc7..d497136bd53b430aeecc01535e1fc4a1e845de72 100644 (file)
@@ -16,7 +16,7 @@ class PanelInactif( QTPanel, Ui_DInactif,QDialog ):
         #print "PanelInactif"
         QDialog.__init__(self,parent)
         QTPanel.__init__(self,node,parent)
-        Ui_DInactif.__init__(self,parent)
+        Ui_DInactif.__init__(self)
         if hasattr(parent,"leLayout"):
            parent.leLayout.removeWidget(parent.leLayout.widgetActive)
            parent.leLayout.widgetActive.close()
index 142f9d3daf39affbdae8f0a2d362d31915376793..2262e4aeff461ae15ada772903da5b404182d0f5 100644 (file)
@@ -148,12 +148,12 @@ class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
 
       fn = os.path.abspath((unicode(fn)))
       ulfile = os.path.abspath(unicode(fn))
-      self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+      self.node.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
       self.LENomFichier.setText(fn)
       self.LENomFichReturnPressed()
 
   def connecterSignaux(self):
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
index 857714b48d4582d1a40b54a368248b620265a747..8f22a19d8a228f3f89b641cbba596db96ec87e48 100644 (file)
@@ -47,7 +47,8 @@ class MonListeParamPanel(DLisParam):
         self.connecterSignaux()
 
   def connecterSignaux(self) :
-        self.connect(self.LBParam,SIGNAL("itemPressed(QListWidgetItem*)"),self.LBParamItemPressed)
+  #     self.connect(self.LBParam,SIGNAL("itemPressed(QListWidgetItem*)"),self.LBParamItemPressed)
+        self.connect(self.BOk,SIGNAL("clicked()"),self.valideParam)
 
   def initVal(self):
         self.LBParam.clear()
@@ -55,12 +56,19 @@ class MonListeParamPanel(DLisParam):
             self.LBParam.addItem(QString(repr(param)))
             self.dictListe[QString(repr(param))] = param
 
-  def LBParamItemPressed(self):
-        #print self.LBParam.selectedItems()
+  def valideParam(self):
         if self.LBParam.selectedItems()== None : return
-        i=self.LBParam.selectedItems()[0].text()
-        self.panel.Ajout1Valeur(self.dictListe[i])
-
-  def on_BOk_clicked(self):
-        self.LBParamItemPressed()
+        lParam=[]
+        for indice in range(len(self.LBParam.selectedItems())):
+            i=self.LBParam.selectedItems()[indice].text()
+            param=self.dictListe[i]
+            lParam.append(param)
+           
+        try :
+          self.panel.AjoutNValeur(lParam)
+        except :
+          for p in lParam :
+             self.panel.Ajout1Valeur(p)
         self.close()
+
+
index 19f9f87195586aaeac7d4483d6b4545f7e36d36d..089fa84425767866b44637ee8e1320f9ad0e2d7a 100644 (file)
@@ -51,9 +51,9 @@ class DMacro(Ui_DComm,QDialog):
 
 class MonMacroPanel(DMacro,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
   """
-  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
+  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 __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonMacroPanel"
@@ -68,7 +68,7 @@ class MonMacroPanel(DMacro,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
            self.TWChoix.removeTab(1)
            
   def connecterSignaux(self):
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
index eff040ad1ebc50cb35f98a5a541bee9570982331..5dc7d941ab27ae6ca6253e0c40dbb0fbc1ed574e 100644 (file)
@@ -16,6 +16,7 @@ class desOptions(Ui_desOptions,QDialog):
 
 class Options(desOptions):
    def __init__(self,parent = None,modal = 0,configuration=None):
+       self.code='ASTER'
        desOptions.__init__(self,parent,modal)
        self.configuration=configuration
        self.viewMan=parent
@@ -151,14 +152,12 @@ class Options(desOptions):
        old_fic_ini_util=fic_ini_util+"_old"
        commande="mv "+fic_ini_util+" "+old_fic_ini_util
        os.system(commande)
-       import prefs
-       name='prefs_'+prefs.code
+       name='prefs_ASTER'+self.code
        prefsCode=__import__(name)
-       repIni=prefsCode.REPINI
-       nameConf='configuration_'+prefs.code
+       nameConf='configuration_'+self.code
        configuration=__import__(nameConf)
 
-       configNew=configuration.CONFIG(appli,repIni)
+       configNew=configuration.CONFIG(appli,prefsCode.repIni)
        self.configuration=configNew
        appli.CONFIGURATION=configNew
        self.configuration.save_params()
index 9cd85253e5301ac34ac972f185759b7daf98ced8..435f877660f5a6c6e8058417d2fb48e1ba7032fc 100644 (file)
@@ -23,6 +23,7 @@ class Options(desOptions):
        self.dRepCat={}
        self.connecterSignaux()
        self.initAll()
+       self.code='CUVE2DG'
   
    def connecterSignaux(self) :
        self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
@@ -84,9 +85,7 @@ class Options(desOptions):
           item[2]=self.dRepCat[version]
           self.dVersion[version]=tuple(item)
        else :
-          import prefs
-          code=prefs.code
-          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          self.dVersion[version]=(self.code,version,self.dRepCat[version],self.code.lower())
           
        lItem=[]
        for version in self.dVersion.keys() :
@@ -152,11 +151,10 @@ class Options(desOptions):
        old_fic_ini_util=fic_ini_util+"_old"
        commande="mv "+fic_ini_util+" "+old_fic_ini_util
        os.system(commande)
-       import prefs
-       name='prefs_'+prefs.code
+       name='prefs_'+self.code
        prefsCode=__import__(name)
-       repIni=prefsCode.REPINI
-       nameConf='configuration_'+prefs.code
+       repIni=prefsCode.repIni
+       nameConf='configuration_'+self.code
        configuration=__import__(nameConf)
 
        configNew=configuration.CONFIG(appli,repIni)
index 2dc9e49cc62ea392f649e780694ed7c1a3812b30..207241271b13bdc41eb0420410513072b0122eb9 100644 (file)
@@ -22,6 +22,7 @@ class Options(desOptions):
        self.dVersion={}
        self.dRepCat={}
        self.connecterSignaux()
+       self.code='MAP'
        self.initAll()
   
    def connecterSignaux(self) :
@@ -74,7 +75,7 @@ class Options(desOptions):
                 self.LERepAster.setText(self.configuration.PATH_MAP)
              return
        self.configuration.PATH_MAP=str(self.LERepMAP.text())
-       self.configuration.PATH_PYGMEE=self.configuration.PATH_MAP+"/components/pygmee_v1"
+       self.configuration.PATH_PYGMEE=self.configuration.PATH_MAP+"/components/pygmee_v2"
        self.configuration.PATH_BENHUR=self.configuration.PATH_MAP+"/components/benhur"
        self.configuration.PATH_FDVGRID=self.configuration.PATH_MAP+"components/fdvgrid/ther2d/bin"
        self.configuration.PATH_MODULE=self.configuration.PATH_MODULE+"components/fdvgrid/ther2d/bin"
@@ -126,9 +127,7 @@ class Options(desOptions):
           item[2]=self.dRepCat[version]
           self.dVersion[version]=tuple(item)
        else :
-          import prefs
-          code=prefs.code
-          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          self.dVersion[version]=(self.code,version,self.dRepCat[version],self.code.lower())
           
        lItem=[]
        for version in self.dVersion.keys() :
@@ -194,14 +193,12 @@ class Options(desOptions):
        old_fic_ini_util=fic_ini_util+"_old"
        commande="mv "+fic_ini_util+" "+old_fic_ini_util
        os.system(commande)
-       import prefs
-       name='prefs_'+prefs.code
+       name='prefs_'+self.code
        prefsCode=__import__(name)
-       repIni=prefsCode.REPINI
        nameConf='configuration_'+prefs.code
        configuration=__import__(nameConf)
 
-       configNew=configuration.CONFIG(appli,repIni)
+       configNew=configuration.CONFIG(appli,prefsCode.repIni)
        self.configuration=configNew
        appli.CONFIGURATION=configNew
        self.configuration.save_params()
index 95db943aab8783d25dd9b72da751263f38a7ce0f..f5d6bcdea4cd5c8fdf7dcea09113976665f22219 100644 (file)
@@ -22,6 +22,7 @@ class Options(desOptions):
        self.dVersion={}
        self.dRepCat={}
        self.connecterSignaux()
+       self.code='OPENTURNS_STUDY'
        self.initAll()
   
    def connecterSignaux(self) :
@@ -87,9 +88,7 @@ class Options(desOptions):
           item[2]=self.dRepCat[version]
           self.dVersion[version]=tuple(item)
        else :
-          import prefs
-          code=prefs.code
-          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          self.dVersion[version]=(self.code,version,self.dRepCat[version],self.code.lower())
           
        lItem=[]
        for version in self.dVersion.keys() :
@@ -155,14 +154,12 @@ class Options(desOptions):
        old_fic_ini_util=fic_ini_util+"_old"
        commande="mv "+fic_ini_util+" "+old_fic_ini_util
        os.system(commande)
-       import prefs
-       name='prefs_'+prefs.code
+       name='prefs_'+self.code
        prefsCode=__import__(name)
-       repIni=prefsCode.REPINI
-       nameConf='configuration_'+prefs.code
+       nameConf='configuration_'+self.code
        configuration=__import__(nameConf)
 
-       configNew=configuration.CONFIG(appli,repIni)
+       configNew=configuration.CONFIG(appli,prefsCode.repIni)
        self.configuration=configNew
        appli.CONFIGURATION=configNew
        self.configuration.save_params()
index 95db943aab8783d25dd9b72da751263f38a7ce0f..9e94fa0b6725cffdde42e4c9e80fb19d0b2f4743 100644 (file)
@@ -22,6 +22,7 @@ class Options(desOptions):
        self.dVersion={}
        self.dRepCat={}
        self.connecterSignaux()
+       self.code='OPENTURNS_WRAPPER'
        self.initAll()
   
    def connecterSignaux(self) :
@@ -87,9 +88,7 @@ class Options(desOptions):
           item[2]=self.dRepCat[version]
           self.dVersion[version]=tuple(item)
        else :
-          import prefs
-          code=prefs.code
-          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          self.dVersion[version]=(self.code,version,self.dRepCat[version],self.code.lower())
           
        lItem=[]
        for version in self.dVersion.keys() :
@@ -155,14 +154,12 @@ class Options(desOptions):
        old_fic_ini_util=fic_ini_util+"_old"
        commande="mv "+fic_ini_util+" "+old_fic_ini_util
        os.system(commande)
-       import prefs
-       name='prefs_'+prefs.code
+       name='prefs_'+self.code
        prefsCode=__import__(name)
-       repIni=prefsCode.REPINI
-       nameConf='configuration_'+prefs.code
+       nameConf='configuration_'+self.code
        configuration=__import__(nameConf)
 
-       configNew=configuration.CONFIG(appli,repIni)
+       configNew=configuration.CONFIG(appli,prefsCode.repIni)
        self.configuration=configNew
        appli.CONFIGURATION=configNew
        self.configuration.save_params()
index dc8390472ca15021d83e323edc2ac0bab7bea16d..903ac3a8819ea004d741a597fdd70e2e2c7c94ce 100644 (file)
@@ -62,7 +62,7 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
         self.lineEditNom.setFocus()
 
   def connecterSignaux(self) :
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkParamPressed)
@@ -75,11 +75,17 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
         nom=self.node.item.get_nom()
         self.lineEditNom.setText(nom)
         valeur=self.node.item.get_valeur()
-        if valeur != None:
-           #str=QString("").setNum(valeur)
-           self.lineEditVal.setText(str(valeur))
-        else :
+        texte="["
+        if valeur == None :
            self.lineEditVal.clear()
+           return
+        if type(valeur) == types.ListType :
+           for l in valeur :
+                texte=texte+str(l) +","
+           texte=texte[0:-1]+"]"
+           self.lineEditVal.setText(texte)
+        else :
+             self.lineEditVal.setText(str(valeur))
 
   def BOkParamPressed(self):
         val=self.LEValeurPressed() 
@@ -90,8 +96,8 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
            self.Commentaire.setText(QString(commentaire))
            self.editor.affiche_infos(commentaire,Qt.red)
            return
-        if str(val) == "" :
-           return
+        if str(val) == "" : return
+        if val == None : return
         self.node.item.set_nom(nom)
         self.node.item.set_valeur(val)
         self.node.update_texte()
@@ -102,35 +108,29 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
 
   def LEValeurPressed(self):
         self.Commentaire.setText(QString(""))
-        commentaire="Valeur incorrecte"
         qtVal=self.lineEditVal.text()
         valString=str(self.lineEditVal.text())
-        if (valString.find(' ') > -1) or (valString.find(',') > -1) :
-           commentaire="Valeur incorrecte"
-           self.Commentaire.setText(QString(commentaire))
-           self.editor.affiche_infos(commentaire,Qt.red)
-           return None
-        boul=2
+            
+        contexte={}
+        exec "from math import *" in contexte
+        jdc=self.node.item.get_jdc()
+        for p in jdc.params :
+           try:
+              tp=p.nom+'='+str(p.val)
+              exec tp  in contexte
+           except :
+              pass
+
+        monTexte="monParam="+valString
         try :
-            val,boul=QString.toInt(qtVal)
-            if boul : valString=val
+          exec monTexte in contexte
         except :
-            pass
-        if boul == 0 :
-            try :
-                val,boul=QString.toDouble(qtVal)
-                if boul : valString=val
-            except :
-                pass
-        if boul == 0 :
-            try :
-                val=str(qtVal)
-                boul=1
-            except :
-                pass
-        if boul: commentaire="Valeur correcte"
-        self.Commentaire.setText(QString(commentaire))
-        self.editor.affiche_infos(commentaire)
+          self.Commentaire.setText("Valeur incorrecte")
+          self.editor.affiche_infos("Valeur incorrecte",Qt.red)
+          return None
+
+        self.Commentaire.setText("Valeur correcte")
+        self.editor.affiche_infos("Valeur correcte")
         return valString
 
   def LENomPressed(self):
index 91aaf46df861936b6727601144f3a1c13c840b5a..2d56011bb0c340c77cbc9d975789b1a95fcc843d 100644 (file)
@@ -66,12 +66,20 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
   def InitValeursCourantes(self):
         self.listNomsValeurs=[]
         for i in self.listeValeursCourantes :
+           #pour resoudre le typ= not_checked
+           try :
               self.listNomsValeurs.append(i.get_name())
+           except :
+              self.listNomsValeurs.append(i)
 
   def BOkPourListePressed(self):
         if self.listeValeursCourantes == [] :
           self.editor.affiche_infos("Pas de Validation d un groupe vide",Qt.red)
            return
+        try :
+          if  len(self.listeValeursCourantes) == 1 : self.listeValeursCourantes=self.listeValeursCourantes[0]
+        except :
+          pass
         self.node.item.set_valeur(self.listeValeursCourantes)
        self.editor.affiche_infos("Valeur Acceptée")
        pass
index b1a7da7bc81877fa523c263823a5649fa5e4650b..b3dbf92ce6f87a67f04c5dcf9d5242e5f3007df0 100644 (file)
@@ -55,7 +55,7 @@ class DPlusInto(Ui_DPlusInto,QDialog):
 class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
   """
   Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
   discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
@@ -67,6 +67,7 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
         SaisieValeur.BuildLBValeurs(self)
         self.listeValeursCourantes=self.node.item.GetListeValeurs()
         SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
+        self.alpha=0
         self.connecterSignaux()
 
   def connecterSignaux(self) :
@@ -75,7 +76,16 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed)
         self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur)
         self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
+        self.connect(self.BAlpha,SIGNAL("clicked()"),self.BAlphaPressed)
 
+  def BAlphaPressed(self):
+      if self.alpha==1 :
+         self.alpha=0
+         self.BAlpha.setText(QApplication.translate("DPlusInto", "Tri Alpha",None,QApplication.UnicodeUTF8))
+      else :
+         self.alpha=1
+         self.BAlpha.setText(QApplication.translate("DPlusInto", "Tri Cata",None,QApplication.UnicodeUTF8))
+      SaisieValeur.RemplitPanel(self,self.listeValeursCourantes, self.alpha)
 
   def BOkPourListePressed(self):
         if self.listeValeursCourantes == [] :
index 23480ab769a76ccbaaf53a7757c4db51a095f580..daa1e903c7245dfca2bfc334a29606b1556e7741 100644 (file)
@@ -51,9 +51,9 @@ class DRac(Ui_DRac,QWidget):
 
 class MonRacinePanel(DRac,QTPanelTBW2):
   """
-  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
+  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 __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonRacinePanel"
@@ -65,7 +65,7 @@ class MonRacinePanel(DRac,QTPanelTBW2):
 
 
   def connecterSignaux(self):
-        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
+        self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListWidgetItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
diff --git a/InterfaceQT4/monSelectImage.py b/InterfaceQT4/monSelectImage.py
new file mode 100644 (file)
index 0000000..9daff32
--- /dev/null
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desImage import Ui_DSelImage
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+class DSelImage(Ui_DSelImage,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+
+class MonImage (QWidget):
+  def __init__(self,file,parent):
+       QWidget.__init__(self,parent)
+       self.file=file
+       self.QtParent=parent
+       self.monRectangle=None
+       self.dessine=0
+       self.readImage()
+       
+
+  def readImage(self):
+        if self.file == "" : return
+        self.image=QPixmap(self.file)
+
+  def paintEvent(self,paintEvent):
+        self.p= QPainter(self);
+        self.resize(self.image.width(),self.image.height())
+        if self.monRectangle != None:
+           self.p.eraseRect(self.monRectangle)
+        self.p.drawPixmap(0,0,self.image.width(),self.image.height(),self.image)
+        if self.dessine==1:
+           self.monRectangle=QRect(QPoint(self.xdeb,self.ydeb),QPoint(self.xfin,self.yfin))
+           self.p.drawRect(self.monRectangle)
+
+  def changedEvent(self,e):
+      QWidget.changedEvent(self,e)
+
+  def mousePressEvent(self,e):
+      self.xdeb=e.x()
+      self.ydeb=e.y()
+      self.dessine=0
+      self.update()
+      QWidget.mousePressEvent(self,e)
+      
+  def mouseMoveEvent(self,e):
+      self.xfin=e.x()
+      self.yfin=e.y()
+      self.dessine=1
+      self.update()
+      QWidget.mouseMoveEvent(self,e)
+
+class MonSelectImage(DSelImage):
+  """
+  """
+  def __init__(self,file,parent,name = None,fl = 0):
+        DSelImage.__init__(self,parent,0)
+        self.file=file 
+        self.parentQT=parent
+        self.image=MonImage(self.file,self)
+        
+
+  def accept(self) :
+        if (not hasattr(self.image,'xdeb')) :self.close()
+        name='RECT'
+        self.parentQT.editor.init_modif()
+        child=self.parentQT.node.append_brother(name)
+        child.item.set_valeur((self.image.xdeb,self.image.ydeb,self.image.xfin,self.image.yfin))
+        child.affichePanneau()
+        self.close()
index f85909166d10a3cb894e1de3087f29168abf453b..4a4f30734fa8acae8f491d83394a959d2b05b7d2 100644 (file)
@@ -29,6 +29,9 @@ from desUniqueBase import Ui_DUnBase
 from qtCommun      import QTPanel
 from qtSaisie      import SaisieValeur
 from politiquesValidation import PolitiqueUnique
+listeSuffixe= ('bmp','png','jpg' )
+
+
 
 class DUnBase(Ui_DUnBase,QDialog):
    def __init__(self,parent ,modal ) :
@@ -83,7 +86,7 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
         self.BSalome.setIcon(icon)
         mc = self.node.item.get_definition()
         #if ( (self.node.item.get_nom() != "FileName" ) and ( mc.type[0]!="Fichier")) :
-        if ( mc.type[0]!="Fichier") :
+        if mc.type[0]!="Fichier" and mc.type[0]!="FichierNoAbs":
            self.BFichier.close()
         else :
           self.bParametres.close()
@@ -109,6 +112,17 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
                except :
                    str=QString(valeurTexte)
            self.lineEditVal.setText(str)
+           mc = self.node.item.get_definition()
+           if hasattr(self,"BSelectInFile"): return
+           if (( mc.type[0]=="Fichier") and (QFileInfo(str).suffix() in listeSuffixe )):
+             self.BSelectInFile = QPushButton(self.Widget8)
+             self.BSelectInFile.setMinimumSize(QSize(140,40))
+             self.BSelectInFile.setObjectName("BSelectInFile")
+             self.gridLayout.addWidget(self.BSelectInFile,1,1,1,1)
+             self.BSelectInFile.setText("Selection")
+             self.image=str
+             self.connect(self.BSelectInFile,SIGNAL("clicked()"),self.BSelectInFilePressed)
+
 
 
   def InitCommentaire(self):
@@ -117,7 +131,8 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
                   'R'   : "Un réel est attendu",
                   'I'   : "Un entier est attendu",
                   'Matrice' : 'Une Matrice est attendue',
-                  'Fichier' : 'Un fichier est attendu'}
+                  'Fichier' : 'Un fichier est attendu',
+                  'FichierNoAbs' : 'Un fichier est attendu'}
       mctype = mc.type[0]
 
       if type(mctype) == types.ClassType:
@@ -152,6 +167,24 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
          ulfile = os.path.abspath(unicode(fichier))
          self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
          self.lineEditVal.setText(fichier)
+         if (QFileInfo(fichier).suffix() in listeSuffixe ):
+             self.image=fichier
+             if (not hasattr(self,"BSelectInFile")):
+               self.BSelectInFile = QPushButton(self.Widget8)
+               self.BSelectInFile.setMinimumSize(QSize(140,40))
+               self.BSelectInFile.setObjectName("BSelectInFile")
+               self.gridLayout.addWidget(self.BSelectInFile,1,1,1,1)
+               self.BSelectInFile.setText("Selection")
+               self.connect(self.BSelectInFile,SIGNAL("clicked()"),self.BSelectInFilePressed)
+             else :
+               self.BSelectInFile.setVisible(1)
+         elif hasattr(self, "BSelectInFile"):
+             self.BSelectInFile.setVisible(0)
+
+          
+  def BSelectInFilePressed(self):
+      from monSelectImage import MonSelectImage
+      MonSelectImage(file=self.image,parent=self).show()
 
           
   def LEValeurPressed(self):
index 017ae9fe7db62c966f00fc72e1aabf6933be4c22..d89c4f31a0d2b6d0057be114d8b5089ee381c264 100644 (file)
@@ -55,6 +55,7 @@ class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur):
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonUniqueIntoPanel"
+        self.alpha=0
         QTPanel.__init__(self,node,parent)
         DUnIn.__init__(self,parent,fl)
         SaisieValeur.RemplitPanel(self)
@@ -64,6 +65,7 @@ class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur):
   def connecterSignaux(self) :
         self.connect(self.listBoxVal, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicValeur )
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.BAlpha,SIGNAL("clicked()"),self.BAlphaPressed)
 
   def ClicValeur(self):
         SaisieValeur.ClicValeur(self)
@@ -72,3 +74,12 @@ class MonUniqueIntoPanel(DUnIn,QTPanel,SaisieValeur):
   def BOkPressed(self):
         SaisieValeur.BOkPressed(self)
 
+  def BAlphaPressed(self):
+       if self.alpha==1 :
+         self.alpha=0
+         self.BAlpha.setText(QApplication.translate("DPlusInto", "Tri Alpha",None,QApplication.UnicodeUTF8))
+       else :
+         self.alpha=1
+         self.BAlpha.setText(QApplication.translate("DPlusInto", "Tri Cata",None,QApplication.UnicodeUTF8))
+       SaisieValeur.RemplitPanel(self,alpha=self.alpha)
+
index 3c89ba3c6ac3a999a517d327df226d35b5839013..20ded381b7b4351f269634d533f5efa66d5b25e5 100644 (file)
@@ -30,6 +30,7 @@ class Validation  :
          self.parent=parent
 
   def TesteUneValeur(self,valeurentree):
+         commentaire = None
          valeur,validite=self.node.item.eval_valeur(valeurentree)
          if not validite :
                   commentaire = "impossible d'évaluer : %s " %`valeurentree`
@@ -46,7 +47,7 @@ class Validation  :
                  validite=valide
                  commentaire=" "
 
-         if not validite :
+         if not validite and commentaire is None:
                   commentaire = "impossible d'évaluer : %s " %`valeurentree`
          return valeur, validite, commentaire
 
@@ -160,7 +161,6 @@ class PolitiquePlusieurs(Validation):
              # On teste le type de la valeur
              valeurScientifique=valeur
              valide=self.node.item.valide_item(valeur)
-             print valeur
              if not valide :
                 try :
                    valeur,valide=self.node.item.eval_valeur(valeur)
index f1c41839a56b4cc7b7e52a625e831639d80e8708..8b0197560bd6232990909fdeee9a3a9d4eef95da 100644 (file)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -42,7 +42,17 @@ class QTPanel:
   def __init__(self,node, parent = None):
         self.editor    = parent
         self.node      = node
-        
+        if hasattr(self,'TWChoix'):
+           self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.GestionBALpha)
+
+  def GestionBALpha(self,fenetre):
+        if self.TWChoix.currentIndex()!=0:
+           if hasattr(self,'BAlpha'): #pour include materiau
+              self.BAlpha.hide()
+        else :
+           self.BAlpha.setVisible(True)
+           self.BuildLBMCPermis()
+
   def BOkPressed(self):
         """ Impossible d utiliser les vrais labels avec designer ?? """
         label=self.TWChoix.tabText(self.TWChoix.currentIndex())
@@ -103,19 +113,33 @@ class QTPanelTBW1(QTPanel):
   def __init__(self,node, parent = None):
         self.editor    = parent
         self.node      = node
+        if not(hasattr(self.node,'alpha')): self.node.alpha  = 0
         self.BuildLBMCPermis()
         self.AppelleBuildLBRegles()
+        if hasattr(self,'BAlpha'):
+           self.connect(self.BAlpha,SIGNAL("clicked()"),self.BAlphaPressed)
 
+  def BAlphaPressed (self):
+        if self.node.alpha == 0 :
+           self.node.alpha=1
+           self.BAlpha.setText("Tri Cata")
+        else :
+           self.node.alpha=0
+           self.BAlpha.setText("Tri Alpha")
+        self.BuildLBMCPermis()
+
+           
   def BuildLBMCPermis(self):
         self.LBMCPermis.clear()
         QObject.connect(self.LBMCPermis,SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefMC)
         jdc = self.node.item.get_jdc()
         genea =self.node.item.get_genealogie()
         liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
-        for aMc in liste_mc:
-           self.LBMCPermis.addItem( aMc)
-        if len(liste_mc) !=0:
-           self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
+        if ((len(liste_mc) < 10) and (hasattr(self,'BAlpha'))):
+           self.BAlpha.hide()
+        if self.node.alpha == 1 : liste_mc.sort()
+        for aMc in liste_mc: self.LBMCPermis.addItem( aMc)
+        if len(liste_mc) !=0: self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
 
 
   def DefMC(self,item):
@@ -170,12 +194,19 @@ class QTPanelTBW2(QTPanel):
         self.LBNouvCommande.clear()
 
         jdc=self.node.item.object.get_jdc_root()
+
+        listeGroupes,dictGroupes=jdc.get_groups()
+        if "CACHE" in dictGroupes.keys():
+           aExclure=dictGroupes["CACHE"]
+        else:
+           aExclure=()
         if self.editor.mode_nouv_commande == "alpha":
            self.RBalpha.setChecked(True)
            self.RBGroupe.setChecked(False)
            listeCmd = jdc.get_liste_cmd()
            for aCmd in listeCmd:
-              self.LBNouvCommande.addItem( aCmd )
+              if aCmd not in aExclure :
+                 self.LBNouvCommande.addItem( aCmd )
         elif self.editor.mode_nouv_commande== "groupe" :
            self.RBGroupe.setChecked(True)
            self.RBalpha.setChecked(False)
@@ -188,6 +219,7 @@ class QTPanelTBW2(QTPanel):
               self.LBNouvCommande.addItem( texte )
               self.LBNouvCommande.addItem( " " )
               for aCmd in listeCmd:
+                if aCmd not in aExclure :
                  self.LBNouvCommande.addItem( aCmd)
               self.LBNouvCommande.addItem( " " )
         elif self.editor.mode_nouv_commande== "initial" :
@@ -196,7 +228,8 @@ class QTPanelTBW2(QTPanel):
            if len(listeCmd) != len(listeCmd2):
                listeCmd        = listeCmd2
            for aCmd in listeCmd:
-              self.LBNouvCommande.addItem( aCmd )
+              if aCmd not in aExclure :
+                 self.LBNouvCommande.addItem( aCmd )
         #QObject.connect( self.LBNouvCommande, SIGNAL("itemClicked(QListWidgetItem*)"),self.DefCmd )
         QObject.connect( self.LBNouvCommande, SIGNAL("itemDoubleClicked(QListWidgetItem*)"),self.DefCmd )
 
@@ -319,9 +352,9 @@ class ViewText(Ui_dView,QDialog):
     """
     Classe permettant la visualisation de texte
     """
-    def __init__(self,parent):
+    def __init__(self,parent,editor=None):
         QDialog.__init__(self,parent)
-        self.parent=parent
+        self.editor=editor
         self.setupUi(self)
 
         self.resize( QSize(600,600).expandedTo(self.minimumSizeHint()) )
@@ -333,12 +366,16 @@ class ViewText(Ui_dView,QDialog):
         
     def saveFile(self):
         #recuperation du nom du fichier
+        if self.editor != None :
+           dir=elf.editor.appliEficas.CONFIGURATION.savedir
+        else:
+           dir='/tmp'
         fn = QFileDialog.getSaveFileName(None,
                 self.trUtf8("Save File"),
-                self.appliEficas.CONFIGURATION.savedir)
+                dir)
         if fn.isNull() : return
         ulfile = os.path.abspath(unicode(fn))
-        self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+        self.editor.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
         try:
            f = open(fn, 'wb')
            f.write(str(self.view.toPlainText()))
index e25b0626fda5044af8869325b03038e4cfad82bd..95828f169411721d26cdead0fa0c2586efee417c 100644 (file)
@@ -15,27 +15,53 @@ class Appli(Ui_Eficas,QMainWindow):
     """
     Class implementing the main user interface.
     """
-    def __init__(self,code="ASTER",salome=0,parent=None,ssCode=None):
+    def __init__(self,code=None,salome=0,parent=None,ssCode=None,multi=False):
         """
         Constructor
         """
-        self.VERSION_EFICAS="Eficas QT4 V2.0"
+        QMainWindow.__init__(self,parent)
+        Ui_Eficas.__init__(self)
+        self.setupUi(self)
 
-        self.ihm="QT"
-        self.code=code
-        self.ssCode=ssCode
+        self.VERSION_EFICAS="Eficas QT4 V6.4"
         self.salome=salome
-       self.top = self #(pour CONFIGURATION)
+        self.ihm="QT"
+       self.top = self    #(pour CONFIGURATION)
         self.QWParent=None #(Pour lancement sans IHM)
         self.indice=0
         self.dict_reels={}
 
-        import prefs
-        prefs.code=code
-        name='prefs_'+prefs.code
+        self.multi=multi
+        if self.multi == False :self.definitCode(code,ssCode)
+        self.RepIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'../Editeur/icons')
+        eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+        self.ajoutIcones()
+
+
+        self.viewmanager = MyTabview(self) 
+        self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents'))
+        self.connecterSignaux() 
+
+        self.recent =  QStringList()
+        self.ficPatrons={}
+        self.initRecents()
+
+        self.ouvreFichiers()
+        self.setWindowTitle(self.VERSION_EFICAS)
+        
+    def definitCode(self,code,ssCode) :
+        self.code=code
+        self.ssCode=ssCode
+        self.cleanPath()
+        if self.code==None :
+           from monChoixCode import MonChoixCode
+           widgetChoix = MonChoixCode(self)
+           ret=widgetChoix.exec_()
+        import sys
+        name='prefs_'+self.code
         prefsCode=__import__(name)
-        self.REPINI=prefsCode.REPINI
-        self.RepIcon=prefsCode.INSTALLDIR+"/Editeur/icons"
+
+        self.repIni=prefsCode.repIni
         self.INSTALLDIR=prefsCode.INSTALLDIR
         if ssCode != None :
            self.format_fichier= ssCode #par defaut
@@ -43,70 +69,82 @@ class Appli(Ui_Eficas,QMainWindow):
         else :
            self.format_fichier="python"        #par defaut
 
-        if salome :
-           import sys
-        nameConf='configuration_'+prefs.code
+        nameConf='configuration_'+self.code
         configuration=__import__(nameConf)
-        self.CONFIGURATION = configuration.make_config(self,prefsCode.REPINI)
+        self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
         self.CONFIGStyle = None
         if hasattr(configuration,'make_config_style'):
-           self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
+           self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
         if hasattr(prefsCode,'encoding'):
            import sys
            reload(sys)
            sys.setdefaultencoding(prefsCode.encoding)
-
-        QMainWindow.__init__(self,parent)
-        Ui_Eficas.__init__(self)
-        self.setupUi(self)
-        self.ajoutIcones()
-        if code in Appli.__dict__.keys():
-          listeTexte=apply(Appli.__dict__[code],(self,))
-
-        self.viewmanager = MyTabview(self) 
-        self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents'))
-        self.connecterSignaux() 
-
-
-        #if self.salome :
-        #   from Editeur import session
-        #   self.ouvreFichiers()
-
-        self.recent =  QStringList()
-        self.ficPatrons={}
+        if self.code in Appli.__dict__.keys():
+          listeTexte=apply(Appli.__dict__[self.code],(self,))
         self.initPatrons()
         self.ficRecents={}
-        self.initRecents()
 
-        self.ouvreFichiers()
-        self.setWindowTitle(self.VERSION_EFICAS)
-        
     def ASTER(self) :
         self.menuTraduction = self.menubar.addMenu("menuTraduction")
         self.actionTraduitV7V8 = QAction(self)
         self.actionTraduitV7V8.setObjectName("actionTraduitV7V8")
         self.actionTraduitV8V9 = QAction(self)
         self.actionTraduitV8V9.setObjectName("actionTraduitV8V9")
+        self.actionTraduitV9V10 = QAction(self)
+        self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
         self.menuTraduction.addAction(self.actionTraduitV7V8)
         self.menuTraduction.addAction(self.actionTraduitV8V9)
+        self.menuTraduction.addAction(self.actionTraduitV9V10)
         self.menuTraduction.setTitle(QApplication.translate("Eficas", "Traduction", None, QApplication.UnicodeUTF8))
         self.actionTraduitV7V8.setText(QApplication.translate("Eficas","TraduitV7V8", None, QApplication.UnicodeUTF8))
         self.actionTraduitV8V9.setText(QApplication.translate("Eficas","TraduitV8V9", None, QApplication.UnicodeUTF8))
+        self.actionTraduitV9V10.setText(QApplication.translate("Eficas","TraduitV9V10", None, QApplication.UnicodeUTF8))
         self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
         self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
+        self.connect(self.actionTraduitV9V10,SIGNAL("activated()"),self.traductionV9V10)
+
+
+
+    def CARMEL3D(self):
+        if self.salome == 0 : return
+        self.menuMesh = self.menubar.addMenu("menuMesh")
+        self.menuMesh.setObjectName("Mesh")
+        self.actionChercheGrpMesh = QAction(self)
+        self.actionChercheGrpMesh.setText("Acquiert SubMeshes")
+        self.menuMesh.addAction(self.actionChercheGrpMesh)
+        self.connect(self.actionChercheGrpMesh,SIGNAL("activated()"),self.ChercheGrpMesh)
+        self.actionChercheGrpMaille = QAction(self)
+        self.actionChercheGrpMaille.setText("Acquiert Groupe Maille")
+        self.menuMesh.addAction(self.actionChercheGrpMaille)
+        self.connect(self.actionChercheGrpMaille,SIGNAL("activated()"),self.ChercheGrpMaille)
+
+    def ChercheGrpMesh(self):
+        Msg,listeGroup=self.ChercheGrpMeshInSalome()
+        if Msg == None :
+           self.viewmanager.handleAjoutGroup(listeGroup)
+        else :
+           print "il faut gerer les erreurs"
 
+    def ChercheGrpMaille(self):
+        Msg,listeGroup=self.ChercheGrpMailleInSalome()
+        if Msg == None :
+           self.viewmanager.handleAjoutGroup(listeGroup)
+        else :
+           print "il faut gerer les erreurs"
 
-    def Map(self): 
-        self.MAP()
 
     def MAP(self): 
+        self.menuExecution = self.menubar.addMenu(QApplication.translate("Eficas", "Execution", None, QApplication.UnicodeUTF8))
+        self.menuExecution.setObjectName("menuExecution")
+        self.menuJdC.setTitle(QApplication.translate("Eficas", "Rapports", None, QApplication.UnicodeUTF8))
+
         self.actionExecution = QAction(self)
         icon6 = QIcon(self.RepIcon+"/compute.png")
         self.actionExecution.setIcon(icon6)
         self.actionExecution.setObjectName("actionExecution")
-        self.menuJdC.addAction(self.actionExecution)
+        self.menuExecution.addAction(self.actionExecution)
         self.toolBar.addAction(self.actionExecution)
-        self.actionExecution.setText(QApplication.translate("Eficas", "Execution", None, QApplication.UnicodeUTF8))
+        self.actionExecution.setText(QApplication.translate("Eficas", "Execution Python", None, QApplication.UnicodeUTF8))
         self.connect(self.actionExecution,SIGNAL("activated()"),self.run)
 
         self.actionEnregistrer_Python = QAction(self)
@@ -125,11 +163,17 @@ class Appli(Ui_Eficas,QMainWindow):
         icon7 = QIcon(self.RepIcon+"/application.gif")
         self.actionExecutionYACS.setIcon(icon7)
         self.actionExecutionYACS.setObjectName("actionExecutionYACS")
-        self.menuJdC.addAction(self.actionExecutionYACS)
+        self.menuExecution.addAction(self.actionExecutionYACS)
         self.toolBar.addAction(self.actionExecutionYACS)
         self.actionExecutionYACS.setText(QApplication.translate("Eficas", "Execution YACS", None, QApplication.UnicodeUTF8))
         self.connect(self.actionExecutionYACS,SIGNAL("activated()"),self.runYACS)
 
+    def OPENTURNS_STUDY(self):
+        self.menuOptions.setDisabled(True)
+    
+    def OPENTURNS_WRAPPER(self):
+        self.menuOptions.setDisabled(True)
+    
     def ajoutIcones(self) :
         # Pour pallier les soucis de repertoire d icone
         icon = QIcon(self.RepIcon+"/New24.png")
@@ -199,6 +243,12 @@ class Appli(Ui_Eficas,QMainWindow):
     def initPatrons(self) :
     # Mise à jour du menu des fichiers recemment ouverts
         from Editeur import listePatrons
+        if not(self.code in listePatrons.sous_menus.keys()) :
+           return
+        self.menuPatrons = QMenu(self.menubar)
+        self.menuPatrons.setObjectName("menuPatrons")
+        self.menubar.addAction(self.menuPatrons.menuAction())
+        self.menuPatrons.setTitle(QApplication.translate("Eficas", "Patrons", None, QApplication.UnicodeUTF8))
         self.listePatrons = listePatrons.listePatrons(self.code)
         idx = 0
         for nomSsMenu in self.listePatrons.liste.keys():
@@ -267,6 +317,10 @@ class Appli(Ui_Eficas,QMainWindow):
         from gereTraduction import traduction
         traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V8V9")
 
+    def traductionV9V10(self):
+        from gereTraduction import traduction
+        traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V9V10")
+
     def version(self) :
         from monVisu import DVisu
         titre = "version "
@@ -279,19 +333,21 @@ class Appli(Ui_Eficas,QMainWindow):
     def aidePPal(self) :
         maD=self.INSTALLDIR+"/Aide"
         docsPath = QDir(maD).absolutePath()
-        monAssistant=QAssistantClient(QString(""), self)
-        arguments=QStringList()
-        arguments << "-profile" <<docsPath+QDir.separator()+QString("eficas_")+QString(self.code)+QString(".adp");
-        monAssistant.setArguments(arguments);
-        monAssistant.showPage(docsPath+QDir.separator()+QString("fichiers_"+QString(self.code)+QString("/index.html")))
+        try :
+          monAssistant=QAssistantClient(QString(""), self)
+          arguments=QStringList()
+          arguments << "-profile" <<docsPath+QDir.separator()+QString("eficas_")+QString(self.code)+QString(".adp");
+          monAssistant.setArguments(arguments);
+          monAssistant.showPage(docsPath+QDir.separator()+QString("fichiers_"+QString(self.code)+QString("/index.html")))
+        except:
+           QMessageBox.warning( self, "Aide Indisponible", "QT Assistant n est pas installe ")
+
 
     def optionEditeur(self) :
         name='monOptions_'+self.code
         try :
-        #if 1 :
            optionCode=__import__(name)
         except :
-        #else :
            QMessageBox.critical( self, "Parametrage", "Pas de possibilite de personnalisation de la configuration ")
            return
         monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
@@ -317,7 +373,7 @@ class Appli(Ui_Eficas,QMainWindow):
         
     def handleOpenPatrons(self):
         idx=self.sender()
-        fichier=self.REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
+        fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
         self.viewmanager.handleOpen(fichier=fichier, patron = 1)
 
     def handleOpenRecent(self):
@@ -336,16 +392,16 @@ class Appli(Ui_Eficas,QMainWindow):
         self.viewmanager.handleOpen()        
         
     def fileSave(self):
-        self.viewmanager.saveCurrentEditor()
+        return self.viewmanager.saveCurrentEditor()
         
     def fileSaveAs(self):
-        self.viewmanager.saveAsCurrentEditor()
+        return self.viewmanager.saveAsCurrentEditor()
         
     def fileClose(self):
-        self.viewmanager.handleClose()
+        self.viewmanager.handleClose(texte='&Fermer')
         
     def fileCloseAll(self):
-        self.viewmanager.handleCloseAll()
+        self.viewmanager.handleCloseAll(texte='&Fermer')
         
     def fileExit(self):
         # On peut sortir sur Abort
@@ -398,6 +454,15 @@ class Appli(Ui_Eficas,QMainWindow):
         texte="tempo"+str(self.indice)
         return texte
         
+    def cleanPath(self):
+        for pathCode in ('Aster','Carmel3D','Cuve2dg','Openturns_Study','Openturns_Wrapper','MAP'):
+            try:
+              aEnlever=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..',pathCode)))
+              sys.path.remove(aEnlever)
+            except :
+              pass
+              
+
 
 if __name__=='__main__':
 
index b82e1190c9702fc570a86fe9fd68eeaf4b7a1c82..8355973cb5696056a8295d7bcbd05f7f09069191 100644 (file)
@@ -32,13 +32,13 @@ class SaisieValeur:
   permettant de choisir des valeurs 
   """
   def __init__(self):
-        pass
+       pass
 
   def InitListBoxASSD(self):
        listeNomsSD = self.node.item.get_sd_avant_du_bon_type()
        for aSD in listeNomsSD:
             self.listBoxASSD.addItem( aSD)
-            QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListBoxItem*)" ), self.ClicASSD )
+            QObject.connect(self.listBoxASSD, SIGNAL("doubleClicked(QListWidgetItem*)" ), self.ClicASSD )
        min,max =  self.node.item.GetMinMax()
        l= self.node.item.GetListeValeurs()
        
@@ -61,7 +61,7 @@ class SaisieValeur:
             self.LBValeurs.setCurrentRow(len(listeValeurs) - 1)
        
 
-  def RemplitPanel(self,listeDejaLa=[]):
+  def RemplitPanel(self,listeDejaLa=[],alpha=0):
         self.listBoxVal.clear()
         # Traitement particulier pour le validator VerifExistence
         # dont les valeurs possibles peuvent changer : into variable
@@ -79,12 +79,17 @@ class SaisieValeur:
                    self.editor.affiche_infos("Attention, valeurs modifiees", Qt.red)
                listeDejaLa=liste
         lChoix=self.node.item.get_liste_possible(listeDejaLa)
+        if ((len(lChoix) < 10 ) and (hasattr (self,'BAlpha'))) :
+            self.BAlpha.close()
+        if alpha==1 :
+            lChoix.sort()
         for valeur in lChoix :
             self.listBoxVal.addItem( str(valeur) ) 
         if len(lChoix) == 1 :
             self.listBoxVal.setCurrentRow(0)
             self.listBoxVal.item(0).setSelected(1)
             self.bOk.setFocus()
+            
 
   def ClicASSD(self):
          if self.listBoxASSD.currentItem()== None : return
index d6119edb8b1aad698c10d85250fb823bfb996751..faa27690b999415537c763f55d8a66b22f4e66b9 100644 (file)
@@ -84,15 +84,23 @@ class READERCATA:
           else:
               print "Catalog description cannot be interpreted: ", catalogue
 
-      # TODO: Remove this filter. Normally, CONFIGURATION should only define the catalogs for this code anyway.
-      # Non pas pour Map qui a une notion de sscode
-      for catalogue in all_cata_list:
-          if catalogue.code == self.code :
-             if (self.ssCode == None) or (self.ssCode == catalogue.file_format):
-                 liste_cata_possibles.append(catalogue)
+      # This filter is only useful for codes that have subcodes (like MAP).
+      # Otherwise, the "code" attribute of the catalog description can (should) be None.
+      if self.ssCode is None:
+          liste_cata_possibles = all_cata_list
+      else:
+          for catalogue in all_cata_list:
+              #print catalogue.code
+              #print catalogue.file_format
+              if catalogue.code == self.code and catalogue.file_format == self.ssCode:
+                  liste_cata_possibles.append(catalogue)
 
+      #print "___________"
+      #print self.ssCode
+      #print self.code
       if len(liste_cata_possibles)==0:          
-          QMessageBox.critical( self.QWParent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
+          QMessageBox.critical(self.QWParent, "Import du catalogue",
+                               u"Pas de catalogue défini pour le code %s" % self.code)
           self.appliEficas.close()
           if self.appliEficas.salome == 0 :
              sys.exit(1)
@@ -186,6 +194,7 @@ class READERCATA:
       if self.appliEficas.top:
         self.appliEficas.setWindowTitle(titre)
       self.appliEficas.titre=titre
+      self.QWParent.titre=titre
 
    def determineMater(self) :
       # Determinination du repertoire materiau
@@ -248,7 +257,12 @@ class READERCATA:
       Ouvre une fenetre de sélection du catalogue dans le cas où plusieurs
       ont été définis dans Accas/editeur.ini
       """      
-      title = getattr(self.appliEficas.CONFIGURATION, "cata_choice_window_title", None)
+      code = getattr(self.appliEficas.CONFIGURATION, "code", None)
+      if code != None : 
+          title="Choix d une version du code "+str(code)
+      else :
+          title="Choix d une version "
+    
       widgetChoix = MonChoixCata(self.appliEficas, [cata.user_name for cata in cata_choice_list], title)
       ret=widgetChoix.exec_()
       
index 3ef88eb9ff17648fb30e19cb8a5b73ac4b293313..ea71100c73eca5b784a37ff5ce5859eda8bbc4bc 100644 (file)
 #    permet de lancer  EFICAS en n affichant rien
 
 class QWParentSSIhm:
-   def __init__(self,code,appliEficas,version_code):
+   def __init__(self,code,appliEficas,version_code,ssCode=None):
         self.ihm="QT"
         self.code=code
         self.version_code=version_code
-        print self.version_code
+        self.ssCode=ssCode
+        if ssCode != None :
+           self.format_fichier= ssCode  #par defaut
+           #prefsCode.NAME_SCHEME=ssCode
+        else :
+           self.format_fichier="python" #par defaut
         self.appliEficas=appliEficas
 
index 5d1fbe6d75527a3b94fd9175218e9c91a032b796..d9eb541daf6d6c853939ead4643ecabd8e15804a 100644 (file)
@@ -41,14 +41,10 @@ class PopUpMenuNodeMinimal :
     def viewDoc(self):
         self.node=self.tree.currentItem()
         cle_doc = self.node.item.get_docu()
-        print self.node.item.get_docu
         if cle_doc == None :
             QMessageBox.information( self.editor, "Documentation Vide", \
                                     "Aucune documentation Aster n'est associée à ce noeud")
             return
-        #cle_doc = string.replace(cle_doc,'.','')
-        #cle_doc = string.replace(cle_doc,'-','')
-        #print dir(self)
         commande = self.editor.appliEficas.CONFIGURATION.exec_acrobat
         try :
             f=open(commande,"rb")
index 4ab1b299e0082662257c372068edc0f8e8e29d41..70b50f533cf9dec1e2a8c9ea2c3e43bc9a0f3d5a 100644 (file)
@@ -38,26 +38,41 @@ class MyTabview:
        self.gridLayout = QGridLayout(self.appliEficas.centralWidget())
        self.myQtab = QTabWidget(self.appliEficas.centralWidget())
        self.gridLayout.addWidget(self.myQtab)
+       if self.appliEficas.multi== True:
+          self.myQtab.connect(self.myQtab,SIGNAL("currentChanged(int)"),self.indexChanged)
         
+   def indexChanged(self):
+       index=self.myQtab.currentIndex()
+       if  self.dict_editors.has_key(index):
+           editor=self.dict_editors[index]
+           self.appliEficas.CONFIGURATION=editor.CONFIGURATION
+           self.appliEficas.setWindowTitle(editor.titre)
 
    def handleOpen(self,fichier=None,patron=0,units=None):
+       result = None
        if fichier is None:
+            if self.appliEficas.multi==True : 
+               self.appliEficas.definitCode(None,None)
             fichier = QFileDialog.getOpenFileName(self.appliEficas,
                         self.appliEficas.trUtf8('Ouvrir Fichier'),
                         self.appliEficas.CONFIGURATION.savedir,
                         self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
-            if fichier.isNull(): return
+            if fichier.isNull(): 
+              return result
        fichier = os.path.abspath(unicode(fichier))
        ulfile = os.path.abspath(unicode(fichier))
        self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
        self.appliEficas.addToRecentList(fichier)
        maPage=self.getEditor( fichier,units=units)
+       if maPage:
+         result = maPage
+       return result
 
-   def handleClose(self,doitSauverRecent = 1):
+   def handleClose(self,doitSauverRecent = 1,texte='&Quitter'):
        if doitSauverRecent : self.appliEficas.sauveRecents()
        index=self.myQtab.currentIndex()
        if index < 0 : return
-       res=self.checkDirty(self.dict_editors[index])
+       res=self.checkDirty(self.dict_editors[index],texte)
        if res == 2 : return 2             # l utilisateur a annule
        index=self.myQtab.currentIndex()
        idx=index
@@ -97,12 +112,12 @@ class MyTabview:
        editor=self.dict_editors[index]
        editor.saveYACS()
 
-   def handleCloseAll(self):
+   def handleCloseAll(self,texte='Quitter'):
        res=0
        self.appliEficas.sauveRecents()
        while len(self.dict_editors) > 0 :
              self.myQtab.setCurrentIndex(0)
-             res=self.handleClose(0)
+             res=self.handleClose(0,texte)
              if res==2 : return res   # l utilsateur a annule
        return res
         
@@ -130,6 +145,8 @@ class MyTabview:
        editor.handleSupprimer()
 
    def newEditor(self,include=0):
+       if self.appliEficas.multi==True : 
+           self.appliEficas.definitCode(None,None)
        maPage=self.getEditor(include=include)
 
    def newIncludeEditor(self):
@@ -153,9 +170,6 @@ class MyTabview:
    def saveCurrentEditor(self):
        index=self.myQtab.currentIndex()
        if index < 0 : return
-       print self
-       print index
-       print self.dict_editors
        editor=self.dict_editors[index]
        if editor in self.doubles.keys() :
            QMessageBox.warning(
@@ -168,6 +182,7 @@ class MyTabview:
        if ok :
            fileName=os.path.basename(unicode(newName))
            self.myQtab.setTabText(index,fileName)
+       return ok
 
    def saveAsCurrentEditor(self):
        index=self.myQtab.currentIndex()
@@ -180,7 +195,7 @@ class MyTabview:
        if editor in self.doubles.keys():
           if oldName != newName :
              del self.doubles[editor]
-
+       return ok
 
    def displayJDC(self,jdc,fn=None):
         """
@@ -259,7 +274,7 @@ class MyTabview:
     return 0
 
 
-   def checkDirty(self, editor):
+   def checkDirty(self, editor,texte):
         """
         Private method to check dirty status and open a message window.
         
@@ -272,10 +287,10 @@ class MyTabview:
                      None,
                      self.appliEficas.trUtf8("Fichier Duplique"),
                      self.appliEficas.trUtf8("Le fichier ne sera pas sauvegarde."),
-                     self.appliEficas.trUtf8("&Quitter"), 
+                     self.appliEficas.trUtf8(texte), 
                      self.appliEficas.trUtf8("&Annuler"))
             if res == 0 : return 1
-            return 0
+            return 2
         if editor.modified:
             fn = editor.getFileName()
             if fn is None:
@@ -284,7 +299,7 @@ class MyTabview:
                 self.appliEficas.trUtf8("Fichier Modifie"),
                 self.appliEficas.trUtf8("Le fichier <b>%1</b> n a pas ete sauvegarde.") .arg(fn),
                 self.appliEficas.trUtf8("&Sauvegarder"),
-                self.appliEficas.trUtf8("&Quitter "),
+                self.appliEficas.trUtf8(texte),
                 self.appliEficas.trUtf8("&Annuler") )
             if res == 0:
                 (ok, newName) = editor.saveFile()
@@ -294,3 +309,8 @@ class MyTabview:
                     self.myQtab.setTabText(index,fileName)
                 return ok
         return res
+
+   def handleAjoutGroup(self,listeGroup):
+       index=self.myQtab.currentIndex()
+       editor=self.dict_editors[index]
+       editor.handleAjoutGroup(listeGroup)
index 9a220ba5e5d9e4c29aa9a27b9dc3bebd1c0f1137..7293863e9b253b8f817fc4d7139d5637da77e1e7 100644 (file)
@@ -57,7 +57,7 @@ import listePatronsTK
 REPTK=os.path.dirname(os.path.abspath(__file__))
 sys.path[:0]=[REPTK]
 
-VERSION="EFICAS v1.17"
+VERSION="EFICAS v2.1"
 
 class APPLI: 
   def __init__ (self,master,code=prefs.code,fichier=None,test=0,ihm="TK",salome=0) :
@@ -141,8 +141,8 @@ class APPLI:
       if (self.test == 0):
          splash._splash.configure(text = "Chargement des paramètres utilisateur")
       import configuration_ASTER
-      self.CONFIGURATION = configuration_ASTER.make_config(self,prefsCode.REPINI)
-      self.CONFIGStyle = configuration_ASTER.make_config_style(self,prefsCode.REPINI)
+      self.CONFIGURATION = configuration_ASTER.make_config(self,prefsCode.repIni)
+      self.CONFIGStyle = configuration_ASTER.make_config_style(self,prefsCode.repIni)
 
   def cree_composants_graphiques(self):
       """
index de2a6511ae19be272d1f8040214d5f85065104c3..c2f5d3835d2c7bda07c283b4479511b84ef6222e 100755 (executable)
@@ -50,7 +50,7 @@ class DUP :
        self.test=2
        import configuration_ASTER
 
-       self.CONFIGURATION=configuration_ASTER.make_config(self,prefsCode.REPINI)
+       self.CONFIGURATION=configuration_ASTER.make_config(self,prefsCode.repIni)
 
        self.load_readercata()
        self.cata=self.readercata.cata
index 5b4a27fcf3681a9dc208e525e677d16c2de9b1b5..c1fccf34292e290317cf7eb79bf5f2fcbaea76ca 100644 (file)
@@ -6,7 +6,7 @@ prefsCode=__import__(name)
 import basestyle
 from basestyle import STYLE,style
 
-inistylefile=os.path.join(prefsCode.REPINI,"style.py")
+inistylefile=os.path.join(prefsCode.repIni,"style.py")
 if os.path.isfile(inistylefile):
    execfile(inistylefile)
 
index f46497eee89979426b143c5281560208b08a24b0..a0df0797f7d241b51816870296a330ef45f83041 100644 (file)
@@ -2,7 +2,7 @@ import os
 
 import prefs
 
-rep_cata = prefs.REPINI
+rep_cata = prefs.repIni
 
 # Accès à la documentation 
 path_doc              = os.path.join(rep_cata,'Doc')
index 7349c667def53186fd291038cfc384c98e075ac7..fb687b228429d3265c2245e16af7f7c36535c9ab 100644 (file)
@@ -1,21 +1,20 @@
 # -*- coding: utf-8 -*-
 import os,sys
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+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')
-#CODE_PATH = "/home01/chris/projet_Eficas/Devel/SUPER6_3/Aster6_3/bibpyt"
+#CODE_PATH = os.path.join(repIni,'../../Superv')
 
 # la variable code donne le nom du code a selectionner
 code="MINICODE"
index 6a6ccf94c2afbd67318569526c702cb5690daeba..89266a11d328e34a721d85fc9f005a5cfaf4e9be 100644 (file)
@@ -1,31 +1,31 @@
-#@ MODIF N_ASSD Noyau  DATE 14/12/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ASSD Noyau  DATE 25/10/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
-
 """
 
 """
 
+from N_utils import import_object
+from N_info import message, SUPERV
+
 class ASSD(object):
    """
       Classe de base pour definir des types de structures de donnees ASTER
@@ -33,52 +33,75 @@ class ASSD(object):
    """
    idracine="SD"
 
-   def __init__(self,etape=None,sd=None,reg='oui'):
+   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
+      self.etape = etape
+      self.sd = sd
+      self.nom = None
       if etape:
-        self.parent=etape.parent
+        self.parent = etape.parent
       else:
-        self.parent=CONTEXT.get_current_step()
+        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
+        self.id = None
       elif reg == 'oui' :
         self.id = self.parent.reg_sd(self)
       else :
         self.id = self.parent.o_register(self)
       # permet de savoir si le concept a été calculé (1) ou non (0)
       self.executed = 0
-      
+      # permet de savoir si le catalogue de SD a déjà été supprimé (1) ou non (0)
+      self.sd_deleted = 0
+      # attributs pour le Catalogue de Structure de Données Jeveux
+      # "self.cata_sdj" est un attribut de classe
+      #XXX si on nomme ces attributs _sdj/_class_sdj, pb en poursuite :
+      #XXX dans rebuild_sd, self n'a pas ces attributs qui ne sont donc
+      #XXX pas recopiés... !?
+      self.ptr_class_sdj = None
+      self.ptr_sdj = None
+
+   def _get_sdj(self):
+       """Retourne le catalogue de SD associé au concept."""
+       if self.ptr_sdj is None:
+           cata_sdj = getattr(self, 'cata_sdj', None)
+           assert cata_sdj, "L'attribut 'cata_sdj' doit être défini pour la classe %s" \
+                % self.__class__.__name__
+           assert self.nom, "L'attribut 'nom' n'a pas été renseigné !"
+           if self.ptr_class_sdj is None:
+               self.ptr_class_sdj = import_object(cata_sdj)
+           self.ptr_sdj = self.ptr_class_sdj(nomj=self.nom)
+       return self.ptr_sdj
+
+   def _del_sdj(self):
+       """Suppression du catalogue de SD."""
+       if self.ptr_sdj is not None:
+           self.ptr_sdj.supprime(True)
+           self.ptr_sdj = None
+       self.ptr_class_sdj = None
+
+   sdj = property(_get_sdj, None, _del_sdj)
+
+
    def __getitem__(self,key):
       return self.etape[key]
-   
+
    def set_name(self, nom):
       """Positionne le nom de self (et appelle sd_init)
       """
       self.nom = nom
-      # initialise la partie "sd" (pas pour entier, reel, formule)
-      sup = super(ASSD, self)
-      if hasattr(sup, 'nomj'):   # == AsBase
-         sup.__init__(nomj=nom)
-      self.reparent_sd()
-   
-   def reparent_sd(self):
-      """Repositionne le parent des attributs de la SD associée.
-      """
-      sup = super(ASSD, self)
-      if hasattr(sup, 'nomj'):   # == AsBase
-         sup.reparent(None, None)
+
+   def change_type(self, new_type):
+      """Type connu a posteriori (type CO)."""
+      self.__class__ = new_type
 
    def get_name(self):
       """
@@ -86,22 +109,31 @@ class ASSD(object):
       """
       if not self.nom :
          try:
-            self.nom=self.parent.get_name(self) or self.id
+            self.nom = self.parent.get_name(self) or self.id
          except:
-            self.nom=""
+            self.nom = ""
       if self.nom.find('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 
       """
+          Cassage des boucles de références pour destruction du JDC
+      """
+      self.supprime_sd()
       self.etape = None
       self.sd = None
       self.jdc = None
       self.parent = None
 
+   def supprime_sd(self):
+      """Supprime la partie du catalogue de SD."""
+      # 'del self.sdj' appellerait la méthode '_get_sdj()'...
+      self._del_sdj()
+
+   def __del__(self):
+       message.debug(SUPERV, "__del__ ASSD %s <%s>", getattr(self, 'nom', 'unknown'), self)
+
    def accept(self,visitor):
       """
          Cette methode permet de parcourir l'arborescence des objets
@@ -113,17 +145,19 @@ class ASSD(object):
       """
           Cette methode permet de pickler les objets ASSD
           Ceci est possible car on coupe les liens avec les objets
-          parent, etape et jdc qui conduiraient à pickler de nombreux 
+          parent, etape et jdc qui conduiraient à pickler de nombreux
           objets inutiles ou non picklables.
+          En sortie, l'objet n'est plus tout à fait le même !
       """
-      d=self.__dict__.copy()
-      for key in ('parent','etape','jdc'):
-          if d.has_key(key):del d[key]
+      d = self.__dict__.copy()
+      for key in ('parent', 'etape', 'jdc'):
+          if d.has_key(key):
+              del d[key]
       for key in d.keys():
-          if key[0]=='_':del d[key]
+          if key[0] == '_':
+              del d[key]
       return d
 
-
    def accessible(self):
       """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD.
       """
@@ -134,8 +168,7 @@ class ASSD(object):
 
 
    def par_lot(self):
-      """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas.
-      """
+      """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas."""
       #XXX eficas
       if not hasattr(self, 'jdc') or self.jdc == None:
          val = None
@@ -143,8 +176,22 @@ class ASSD(object):
          val = self.jdc.par_lot
       return val == 'OUI'
 
+   def rebuild_sd(self):
+      """Conserver uniquement pour la compatibilite avec le catalogue v10 dans eficas."""
+
 
 class assd(ASSD):
-   def __convert__(cls,valeur):
-      return valeur
-   __convert__=classmethod(__convert__)
+    def __convert__(cls, valeur):
+        # On accepte les vraies ASSD et les objets 'entier' et 'reel'
+        # qui font tout pour se faire passer pour de vrais entiers/réels.
+        if isinstance(valeur, ASSD) or type(valeur) in (int, float):
+            return valeur
+        raise ValueError("On attend un objet concept.")
+    __convert__ = classmethod(__convert__)
+
+
+class not_checked(ASSD):
+    def __convert__(cls, valeur):
+        return valeur
+    __convert__ = classmethod(__convert__)
+
index 65617612e301aab0412b96b8806023df92e57139..93340df88c048045920ee9a187d0f5eafa8a459d 100644 (file)
@@ -1,30 +1,30 @@
-#@ MODIF N_BLOC Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_BLOC Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce module contient la classe de definition BLOC
-    qui permet de spécifier les caractéristiques des blocs de mots clés 
+    qui permet de spécifier les caractéristiques des blocs de mots clés
 """
 
 import types,string,sys
@@ -33,6 +33,7 @@ import traceback
 import N_ENTITE
 import N_MCBLOC
 from N_Exception import AsException
+from N_types import force_list
 
 class BLOC(N_ENTITE.ENTITE):
    """
@@ -40,8 +41,8 @@ class BLOC(N_ENTITE.ENTITE):
 
     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 
+      - 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)
 
@@ -51,7 +52,7 @@ class BLOC(N_ENTITE.ENTITE):
 
    def __init__(self,fr="",ang="",docu="",regles=(),statut='f',condition=None,
                      **args):
-     
+
       """
           Un bloc est caractérisé par les attributs suivants :
 
@@ -60,9 +61,9 @@ class BLOC(N_ENTITE.ENTITE):
             - 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 
+            - 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__
 
       """
@@ -109,24 +110,25 @@ class BLOC(N_ENTITE.ENTITE):
    def verif_presence(self,dict,globs):
       """
          Cette méthode vérifie si le dictionnaire passé en argument (dict)
-         est susceptible de contenir un bloc de mots-clés conforme à la 
+         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()
+      # On recopie le dictionnaire pour protéger l'original
+      dico = bloc_utils()
+      dico.update(dict)
       if self.condition != None :
         try:
           test = eval(self.condition,globs,dico)
           return test
         except NameError:
-          # erreur 'normale' : un mot-clé n'est pas présent et on veut l'évaluer dans la condition
+          # erreur 'normale' : un mot-cle n'est pas present et on veut l'evaluer dans la condition
           if CONTEXT.debug:
              l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
              print "WARNING : Erreur a l'evaluation de la condition "+string.join(l)
@@ -143,3 +145,21 @@ class BLOC(N_ENTITE.ENTITE):
       else :
         return 0
 
+
+def bloc_utils():
+    """Définit un ensemble de fonctions utilisables pour écrire les
+    conditions de BLOC."""
+    def au_moins_un(mcsimp, valeurs):
+        """Valide si la (ou une) valeur de 'mcsimp' est au moins une fois dans
+        la ou les 'valeurs'. Similaire à la règle AU_MOINS_UN, 'mcsimp' peut
+        contenir plusieurs valeurs."""
+        test = set(force_list(mcsimp))
+        valeurs = set(force_list(valeurs))
+        return not test.isdisjoint(valeurs)
+
+    def aucun(mcsimp, valeurs):
+        """Valide si aucune des valeurs de 'mcsimp' n'est dans 'valeurs'."""
+        return not au_moins_un(mcsimp, valeurs)
+
+    return locals()
+
index 5db7f21661d4bd4e39d10153ee66ffcff1994b6e..eafce7ad2808ca7750dba6f66f92b0cc9ee7a98b 100644 (file)
@@ -1,32 +1,33 @@
-#@ MODIF N_ENTITE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ENTITE Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce module contient la classe ENTITE qui est la classe de base
     de toutes les classes de definition d'EFICAS.
 """
 
+import re
 import N_CR
 import N_VALIDATOR
 
@@ -41,14 +42,14 @@ class ENTITE:
 
    def __init__(self,validators=None):
       """
-         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
+         Initialise les deux attributs regles et entites d'une classe derivee
+          : pas de regles et pas de sous-entites.
+
+         L'attribut regles doit contenir la liste des regles qui s'appliquent
+         sur ses sous-entites
 
-         L'attribut entités doit contenir le dictionnaires des sous-entités 
-         (clé = nom, valeur=objet)
+         L'attribut entites doit contenir le dictionnaires des sous-entites
+         (cle = nom, valeur=objet)
       """
       self.regles=()
       self.entites={}
@@ -60,9 +61,9 @@ class ENTITE:
    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 
+          sous entites qui n'ont aucun moyen pour atteindre leur parent
           directement
-          Il s'agit principalement des mots cles 
+          Il s'agit principalement des mots cles
       """
       for k,v in self.entites.items():
         v.pere = self
@@ -70,39 +71,39 @@ class ENTITE:
 
    def verif_cata(self):
       """
-          Cette methode sert à valider les attributs de l'objet de définition
+          Cette methode sert a valider les attributs de l'objet de definition
       """
-      raise "La méthode verif_cata de la classe %s doit etre implémentée" % self.__class__.__name__
+      raise "La methode verif_cata de la classe %s doit etre implementee" % self.__class__.__name__
 
    def __call__(self):
       """
-          Cette methode doit retourner un objet dérivé de la classe OBJECT
+          Cette methode doit retourner un objet derive de la classe OBJECT
       """
-      raise "La méthode __call__ de la classe %s doit etre implémentée" % self.__class__.__name__
+      raise "La methode __call__ de la classe %s doit etre implementee" % 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
+         Cette methode construit pour tous les objets derives de ENTITE un
+         rapport de validation de la definition portee 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.debut = "Debut "+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
+            print "pere =",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 
+         Cette methode verifie pour tous les objets derives de ENTITE que
+         les objets REGLES associes ne portent que sur des sous-entites
          existantes
       """
       for regle in self.regles :
@@ -112,6 +113,35 @@ class ENTITE:
             l.append(mc)
         if l != [] :
           txt = str(regle)
-          self.cr.fatal("Argument(s) non permis : %s pour la règle : %s" %(`l`,txt))
+          self.cr.fatal("Argument(s) non permis : %s pour la regle : %s" %(`l`,txt))
 
+   def check_definition(self, parent):
+      """Verifie la definition d'un objet composite (commande, fact, bloc)."""
+      args = self.entites.copy()
+      mcs = set()
+      for nom, val in args.items():
+         if val.label == 'SIMP':
+            mcs.add(nom)
+            #XXX
+            #if val.max != 1 and val.type == 'TXM':
+                #print "#CMD", parent, nom
+         elif val.label == 'FACT':
+            val.check_definition(parent)
+            #PNPNPN surcharge
+            # CALC_SPEC !
+            #assert self.label != 'FACT', \
+            #   'Commande %s : Mot-clef facteur present sous un mot-clef facteur : interdit !' \
+            #   % parent
+         else:
+            continue
+         del args[nom]
+      # seuls les blocs peuvent entrer en conflit avec les mcs du plus haut niveau
+      for nom, val in args.items():
+         if val.label == 'BLOC':
+            mcbloc = val.check_definition(parent)
+            #XXX
+            #print "#BLOC", parent, re.sub('\s+', ' ', val.condition)
+            #assert mcs.isdisjoint(mcbloc), "Commande %s : Mot(s)-clef(s) vu(s) plusieurs fois : %s" \
+            #   % (parent, tuple(mcs.intersection(mcbloc)))
+      return mcs
 
index baf39a40a7281e9a1bd9d0e761b7b0fa99c2428f..5031451be55cd2a9786347a9568d6c723bd0cbf8 100644 (file)
@@ -1,29 +1,29 @@
-#@ MODIF N_ETAPE Noyau  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ETAPE Noyau  DATE 12/10/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
-    Ce module contient la classe ETAPE qui sert à vérifier et à exécuter
+"""
+    Ce module contient la classe ETAPE qui sert a verifier et a executer
     une commande
 """
 
@@ -39,29 +39,30 @@ from N_Exception import AsException
 import N_utils
 from N_utils import AsType
 from N_ASSD import ASSD
+from N_info import message, SUPERV
 
 class ETAPE(N_MCCOMPO.MCCOMPO):
    """
-      Cette classe hérite de MCCOMPO car ETAPE est un OBJECT composite
+      Cette classe herite 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é
+   # L'attribut de classe codex est utilise pour rattacher le module de calcul eventuel (voir Build)
+   # On le met a None pour indiquer qu'il n'y a pas de module de calcul rattache
    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.
+          - definition : objet portant les attributs de definition d'une etape de type operateur. Il
+                         est initialise 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
+          - reuse : indique le concept d'entree reutilise. Il se trouvera donc en sortie
+                    si les conditions d'execution de l'operateur l'autorise
 
-          - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
+          - valeur : arguments d'entree de type mot-cle=valeur. Initialise avec l'argument args.
 
       """
       self.definition=oper
@@ -80,8 +81,8 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
 
    def make_register(self):
       """
-         Initialise les attributs jdc, id, niveau et réalise les 
-         enregistrements nécessaires
+         Initialise les attributs jdc, id, niveau et realise les
+         enregistrements necessaires
       """
       if self.parent :
          self.jdc = self.parent.get_jdc_root()
@@ -94,8 +95,8 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
 
    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.
+         Cette methode a pour fonction de retirer tous les arguments egaux a None
+         de la liste des arguments. Ils sont supposes non presents et donc retires.
       """
       for k in self.valeur.keys():
          if self.valeur[k] == None:del self.valeur[k]
@@ -109,28 +110,29 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
 
    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 
+         Construit le concept produit de l'operateur. Deux cas
+         peuvent se presenter :
+
+           - le parent n'est pas defini. Dans ce cas, l'etape prend en charge la creation
              et le nommage du concept.
 
-           - le parent est défini. Dans ce cas, l'étape demande au parent la création et 
+           - le parent est defini. Dans ce cas, l'etape demande au parent la creation et
              le nommage du concept.
 
       """
+      message.debug(SUPERV, "Build_sd %s", self.nom)
       self.sdnom=nom
       try:
          if self.parent:
             sd= self.parent.create_sdprod(self,nom)
-            if type(self.definition.op_init) == types.FunctionType: 
+            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 
+            # 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 
+               # On ne nomme le concept que dans le cas de non reutilisation
                # d un concept
                sd.set_name(nom)
       except AsException,e:
@@ -157,15 +159,15 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
 
    def get_sd_prod(self):
       """
-          Retourne le concept résultat de l'étape
+          Retourne le concept resultat de l'etape
           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
+                     on construit le sd a 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
+                     on l'evalue avec les mots-cles de l'etape (mc_liste)
+                     on construit le sd a partir de la classe obtenue
                      et on le retourne
       """
       if type(self.definition.sd_prod) == types.FunctionType:
@@ -183,23 +185,23 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
           #         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
+      # on teste maintenant si la SD est reutilisee ou s'il faut la creer
       if self.definition.reentrant != 'n' and self.reuse:
         # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale.
         # Elle sera traitee ulterieurement.
         self.sd=self.reuse
       else:
         self.sd= sd_prod(etape=self)
-        # Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur. 
+        # Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur.
         # On ne fait rien ici. L'erreur sera traiter par la suite.
-      # précaution
+      # precaution
       if self.sd is not None and not isinstance(self.sd, ASSD):
          raise AsException("""
-Impossible de typer le résultat !
+Impossible de typer le resultat !
 Causes possibles :
-   Utilisateur : Soit la valeur fournie derrière "reuse" est incorrecte,
-                 soit il y a une "," à la fin d'une commande précédente.
-   Développeur : La fonction "sd_prod" retourne un type invalide.""")
+   Utilisateur : Soit la valeur fournie derriere "reuse" est incorrecte,
+                 soit il y a une "," a la fin d'une commande precedente.
+   Developpeur : La fonction "sd_prod" retourne un type invalide.""")
       return self.sd
 
    def get_type_produit(self):
@@ -210,14 +212,14 @@ Causes possibles :
 
    def get_type_produit_brut(self):
       """
-          Retourne le type du concept résultat de l'étape
+          Retourne le type du concept resultat de l'etape
           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
+              on l'evalue avec les mots-cles de l'etape (mc_liste)
+              et on retourne son resultat
       """
       if type(self.definition.sd_prod) == types.FunctionType:
         d=self.cree_dict_valeurs(self.mc_liste)
@@ -228,26 +230,30 @@ Causes possibles :
 
    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
+         Retourne l'etape a laquelle appartient self
+         Un objet de la categorie etape doit retourner self pour indiquer que
+         l'etape a ete trouvee
          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
-         etre correctement détruit par le garbage collector
+         Methode qui supprime toutes les references arrieres afin que l'objet puisse
+         etre correctement detruit par le garbage collector
       """
       N_MCCOMPO.MCCOMPO.supprime(self)
-      self.jdc=None
-      self.appel=None
-      if self.sd : self.sd.supprime()
+      self.jdc = None
+      self.appel = None
+      for name in dir(self):
+         if name.startswith( '_cache_' ):
+             setattr(self, name, None)
+      if self.sd:
+         self.sd.supprime()
 
    def isactif(self):
-      """ 
-         Indique si l'étape est active (1) ou inactive (0)
+      """
+         Indique si l'etape est active (1) ou inactive (0)
       """
       return self.actif
 
@@ -256,27 +262,30 @@ Causes possibles :
           Methode utilisee pour que l etape self se declare etape
           courante. Utilise par les macros
       """
+      message.debug(SUPERV, "call etape.set_current_step", stack_id=-1)
       cs= CONTEXT.get_current_step()
       if self.parent != cs :
-         raise "L'étape courante %s devrait etre le parent de self : %s" % (cs,self)
+         raise AsException("L'etape courante", cs.nom, cs,
+                           "devrait etre le parent de", self.nom, 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 
+      """
+            Methode utilisee par l'etape self qui remet son etape parent comme
+            etape courante
       """
       cs= CONTEXT.get_current_step()
       if self != cs :
-         raise "L'étape courante %s devrait etre self : %s" % (cs,self)
+         raise AsException("L'etape courante", cs.nom, cs,
+                           "devrait etre", self.nom, 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
@@ -286,7 +295,7 @@ Causes possibles :
       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
       """
@@ -296,9 +305,9 @@ Causes possibles :
          if unite != None:
             if os.path.exists("fort."+str(unite)):
                file= "fort."+str(unite)
-         if file == None : 
+         if file == None :
             raise AsException("Impossible de trouver le fichier correspondant a l unite %s" % unite)
-         if not os.path.exists(file): 
+         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')
@@ -325,7 +334,7 @@ Causes possibles :
 
    def copy(self):
       """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
-          et sans sd 
+          et sans sd
       """
       etape = copy(self)
       etape.sd = None
@@ -341,13 +350,13 @@ Causes possibles :
       return etape
 
    def copy_reuse(self,old_etape):
-      """ Méthode qui copie le reuse d'une autre étape. 
+      """ Méthode qui copie le reuse d'une autre étape.
       """
       if hasattr(old_etape,"reuse") :
         self.reuse = old_etape.reuse
 
    def copy_sdnom(self,old_etape):
-      """ Méthode qui copie le sdnom d'une autre étape. 
+      """ Méthode qui copie le sdnom d'une autre étape.
       """
       if hasattr(old_etape,"sdnom") :
         self.sdnom = old_etape.sdnom
@@ -410,7 +419,7 @@ Causes possibles :
 
 
    def is_include(self):
-      """Permet savoir si on a affaire à une commande de type INCLUDE/INCLUDE_MATERIAU
+      """Permet savoir si on a affaire à la commande INCLUDE
       car le comportement de ces macros est particulier.
       """
       return self.nom.startswith('INCLUDE')
@@ -427,6 +436,4 @@ Causes possibles :
       """
       # pourrait être appelée par une commande fortran faisant appel à des fonctions python
       # on passe la main au parent
-      return self.parent.get_concept()
-
-
+      return self.parent.get_concept(nomsd)
index a7cb87088e9b113a0887e92b6782281c195f3d23..ef431a752133ce0b366462a96587f02ec18c64a6 100644 (file)
@@ -1,9 +1,9 @@
-#@ MODIF N_FACT Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_FACT Noyau  DATE 22/03/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
@@ -32,6 +32,7 @@ import N_ENTITE
 import N_MCFACT
 import N_MCLIST
 from N__F import _F
+from N_types import is_enum
 
 import N_OBJECT 
 
@@ -105,7 +106,7 @@ class FACT(N_ENTITE.ENTITE):
             - Si defaut != None, on utilise cette valeur pour calculer la valeur 
               par defaut du mot cle facteur
       """
-      if val == None:
+      if val is None:
         if self.defaut == None:
           val={}
         elif type(self.defaut) == types.TupleType:
@@ -117,6 +118,11 @@ class FACT(N_ENTITE.ENTITE):
           # On ne devrait jamais passer par la
           print "On ne devrait jamais passer par la"
           return None
+      elif is_enum(val) and len(val) == 0 and self.statut == 'o':
+          # On est dans le cas où le mcfact est présent mais est une liste/tuple
+          # vide. Il est obligatoire donc on l'initialise. Les règles, mots-clés
+          # obligatoires diront si un mcfact vide est accepté.
+          val = {}
 
       # On cree toujours une liste de mcfact
       l=self.list_instance()
index 83d00e3b4da1a2313e5b3672cf093a1b9f79038a..971af63625f244b3cc36ce71d77f8092d4295e8e 100644 (file)
-#@ MODIF N_FONCTION Noyau  DATE 10/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_FONCTION Noyau  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
-# attention ! cet import permet d'avoir, dans les formules, le comportement
+# Attention : cet import permet d'avoir, en Python, le comportement
 # de la division réelle pour les entiers, et non la division entière
-# 1/2=0.5 (et non 0)
+# 1/2=0.5 (et non 0). Comportement par défaut dans Python 3.0.
 from __future__ import division
 
 from N_ASSD import ASSD
-from asojb import AsBase
+from N_info import message, SUPERV
 
-class FONCTION(ASSD):pass
+class FONCTION(ASSD):
+    pass
 
-class formule(ASSD,AsBase):
-   def __init__(self,**args):
-      ASSD.__init__(self,**args)
-      self.nompar    =None
-      self.expression=None
+class formule(ASSD):
+    def __init__(self, *args, **kwargs):
+        ASSD.__init__(self, *args, **kwargs)
+        self.nompar = None
+        self.expression = None
 
-   def __call__(self,*val):
-      context = {}
-      # cas de INCLUDE (ou POURSUITE dans Eficas)
-      context.update(getattr(self.parent, 'contexte_fichier_init', {}))
-      # récupération des constantes locales en cas de MACRO
-      context.update(getattr(self.parent, 'macro_const_context', {}))
-      i=0
-      for param in self.nompar : 
-         context[param]=val[i]
-         i=i+1
-      try :
-       res=eval(self.expression,self.jdc.const_context, context)
-      except :
-       print 75*'!'
-       print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!'
-       print 75*'!'
-       raise
-      return res
+    def __call__(self, *val):
+        context = {}
+        # cas de INCLUDE (ou POURSUITE dans Eficas)
+        context.update(getattr(self.parent, 'contexte_fichier_init', {}))
+        # récupération des constantes locales en cas de MACRO
+        context.update(getattr(self.parent, 'macro_const_context', {}))
+        for param, value in zip(self.nompar, val):
+            context[param] = value
+        try:
+            res = eval(self.expression, self.jdc.const_context, context)
+        except Exception, exc:
+            message.error(SUPERV, "ERREUR LORS DE L'ÉVALUATION DE LA FORMULE '%s' " \
+                          ":\n>> %s",self.nom, str(exc))
+            raise
+        return res
 
-   def setFormule(self,nom_para,texte):
-      """
-         Cette methode sert a initialiser les attributs
-         nompar, expression et code qui sont utilisés
-         dans l'évaluation de la formule
-      """
-      self.nompar     = nom_para
-      self.expression = texte
-      try :
-        self.code=compile(texte,texte,'eval')
-      except SyntaxError :
-        print 75*'!'
-        print '! ' + '%-72s' % ('Erreur evaluation formule '+self.nom) + '!'
-        print 75*'!'
-        raise
+    def setFormule(self, nom_para, texte):
+        """Cette methode sert a initialiser les attributs
+        nompar, expression et code qui sont utilisés
+        dans l'évaluation de la formule."""
+        self.nompar = nom_para
+        self.expression = texte
+        try :
+            self.code = compile(texte, texte, 'eval')
+        except SyntaxError, exc:
+            message.error(SUPERV, "ERREUR LORS DE LA CREATION DE LA FORMULE '%s' " \
+                          ":\n>> %s", self.nom, str(exc))
+            raise
 
-   def __setstate__(self,state):
-      """
-         Cette methode sert a restaurer l'attribut code
-         lors d'un unpickle
-      """
-      self.__dict__.update(state)                  # update attributes
-      self.setFormule(self.nompar,self.expression) # restore code attribute
-      
-   def __getstate__(self):
-      """
-         Pour les formules, il faut enlever l'attribut code
-         qui n'est pas picklable
-      """
-      d=ASSD.__getstate__(self)
-      del d['code']
-      return d
+    def __setstate__(self,state):
+        """Cette methode sert a restaurer l'attribut code lors d'un unpickle."""
+        self.__dict__.update(state)                   # update attributes
+        self.setFormule(self.nompar, self.expression) # restore code attribute
 
-   def Parametres(self):
-      """Equivalent de fonction.Parametres pour pouvoir utiliser des formules
-      à la place de fonctions dans certaines macro-commandes.
-      """
-      from SD.sd_fonction  import sd_formule
-      from Utilitai.Utmess import UTMESS
-      if self.accessible():
-        TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' }
-        sd = sd_formule(self.get_name())
-        prol = sd.PROL.get()
-        nova = sd.NOVA.get()
-        if prol is None or nova is None:
-           UTMESS('F', 'SDVERI_2', valk=[objev])
-        dico={
-         'INTERPOL'    : ['LIN','LIN'],
-         'NOM_PARA'    : [s.strip() for s in nova],
-         'NOM_RESU'    : prol[3][0:16].strip(),
-         'PROL_DROITE' : TypeProl['E'],
-         'PROL_GAUCHE' : TypeProl['E'],
-        }
-      else:
-         raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
-      return dico
+    def __getstate__(self):
+        """Pour les formules, il faut enlever l'attribut code qui n'est
+        pas picklable."""
+        d = ASSD.__getstate__(self)
+        del d['code']
+        return d
 
+    def Parametres(self):
+        """Equivalent de fonction.Parametres pour pouvoir utiliser des formules
+        à la place de fonctions dans certaines macro-commandes.
+        """
+        from SD.sd_fonction import sd_formule
+        from Utilitai.Utmess import UTMESS
+        if self.accessible():
+            TypeProl={ 'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' }
+            sd = sd_formule(self.get_name())
+            prol = sd.PROL.get()
+            nova = sd.NOVA.get()
+            if prol is None or nova is None:
+                UTMESS('F', 'SDVERI_2', valk=[objev])
+            dico={
+                'INTERPOL'    : ['LIN','LIN'],
+                'NOM_PARA'    : [s.strip() for s in nova],
+                'NOM_RESU'    : prol[3][0:16].strip(),
+                'PROL_DROITE' : TypeProl['E'],
+                'PROL_GAUCHE' : TypeProl['E'],
+            }
+        else:
+            raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
+        return dico
 
-class formule_c(formule):
-   pass
 
+class formule_c(formule):
+    pass
 
 
index 94c462398a73f70f21f4c8d962467e91921ea3f5..e5b967e20534d9e520ac71e715bfe071a2cda502 100644 (file)
@@ -1,24 +1,24 @@
-#@ MODIF N_JDC Noyau  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_JDC Noyau  DATE 25/10/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
@@ -35,8 +35,7 @@ import N_OBJECT
 import N_CR
 from N_Exception import AsException
 from N_ASSD import ASSD
-
-
+from N_info import message, SUPERV
 
 
 MemoryErrorMsg = """MemoryError :
@@ -87,19 +86,20 @@ NONE = None
       self.procedure=procedure
       self.definition = definition
       self.cata=cata
-      if type(self.cata) != types.TupleType and cata != None: 
+      if type(self.cata) != types.TupleType and cata != None:
          self.cata=(self.cata,)
+      self._build_reserved_kw_list()
       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 
+      # 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 
+      # On initialise avec les parametres de la definition puis on
       # update avec ceux du JDC
       self.args=self.definition.args
       self.args.update(args)
@@ -115,7 +115,7 @@ NONE = None
       #
       #  Creation de l objet compte rendu pour collecte des erreurs
       #
-      self.cr = self.CR(debut = "CR phase d'initialisation", 
+      self.cr = self.CR(debut = "CR phase d'initialisation",
                         fin = "fin CR phase d'initialisation")
       # on met le jdc lui-meme dans le context global pour l'avoir sous
       # l'etiquette "jdc" dans le fichier de commandes
@@ -136,11 +136,11 @@ NONE = None
    def compile(self):
       """
          Cette methode compile la chaine procedure
-         Si des erreurs se produisent, elles sont consignées dans le 
+         Si des erreurs se produisent, elles sont consignées dans le
          compte-rendu self.cr
       """
       try:
-         if self.appli != None : 
+         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:
@@ -194,13 +194,14 @@ Causes possibles :
             for sdnom,sd in self.context_ini.items():
                if isinstance(sd,ASSD):self.sds_dict[sdnom]=sd
 
-         if self.appli != None : 
-            self.appli.affiche_infos('Interpretation du fichier de commandes en cours ...')
+         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 
+         # En mode edition (EFICAS) ou lors des verifications le contexte
          # est recalculé
          # mais les constantes sont perdues
          self.const_context=self.g_context
+         message.debug(SUPERV, "pass")
          exec self.proc_compile in self.g_context
 
          CONTEXT.unset_current_step()
@@ -230,10 +231,10 @@ Causes possibles :
         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])
+        msg = "erreur de syntaxe,  %s ligne %d" % (s,l[-1][1])
         if CONTEXT.debug :
           traceback.print_exc()
-        self.cr.exception(message)
+        self.cr.exception(msg)
         CONTEXT.unset_current_step()
 
       except self.UserError,exc_val:
@@ -241,10 +242,10 @@ Causes possibles :
         CONTEXT.unset_current_step()
         self.affiche_fin_exec()
         self.traiter_fin_exec('commande')
-    
+
       except :
         # erreur inattendue
-        # sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info() 
+        # sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info()
         # (tuple de 3 éléments)
         if CONTEXT.debug : traceback.print_exc()
 
@@ -271,14 +272,14 @@ Causes possibles :
           Par defaut il n'y a pas de traitement. Elle doit etre surchargee
           pour en introduire un
        """
-       print "FIN D'EXECUTION",mode,etape
+       message.info(SUPERV, "FIN D'EXECUTION %s %s", mode, etape)
 
    def traiter_user_exception(self,exc_val):
-       """Cette methode realise un traitement sur les exceptions utilisateur    
-          Par defaut il n'y a pas de traitement. La méthode doit etre 
+       """Cette methode realise un traitement sur les exceptions utilisateur
+          Par defaut il n'y a pas de traitement. La méthode doit etre
           surchargée pour en introduire un.
        """
-       return 
+       return
 
    def register(self,etape):
       """
@@ -287,6 +288,7 @@ Causes possibles :
       """
       self.etapes.append(etape)
       self.index_etapes[etape] = len(self.etapes) - 1
+      message.debug(SUPERV, "#%d %s", self.index_etapes[etape], etape.nom)
       return self.g_register(etape)
 
    def o_register(self,sd):
@@ -306,45 +308,45 @@ Causes possibles :
       return idetape
 
    def create_sdprod(self,etape,nomsd):
-      """ 
+      """
           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 : 
+          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 
+          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.
 
           Deux cas possibles :
                   - 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 
+                  - 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.definition.reentrant == 'n' or etape.reuse is None) :
-         # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation 
+         # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation
          # d un concept. Commande non reentrante ou reuse absent.
          self.NommerSdprod(sd,nomsd)
       return sd
 
    def NommerSdprod(self,sd,sdnom,restrict='non'):
-      """ 
-          Nomme la SD apres avoir verifie que le nommage est possible : nom 
+      """
+          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.sds_dict.get(sdnom,None)
       if isinstance(o,ASSD):
          raise AsException("Nom de concept deja defini : %s" % sdnom)
+      if self._reserved_kw.get(sdnom) == 1:
+         raise AsException("Nom de concept invalide. '%s' est un mot-clé réservé." % sdnom)
 
       # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
       # Ajoute a la creation (appel de reg_sd).
@@ -354,10 +356,11 @@ Causes possibles :
       # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
       if restrict == 'non':
          self.g_context[sdnom]=sd
+         message.debug(SUPERV, "g_context[%r] = %s", sdnom, sd)
 
    def reg_sd(self,sd):
-      """ 
-          Methode appelee dans l __init__ d un ASSD lors de sa creation 
+      """
+          Methode appelee dans l __init__ d un ASSD lors de sa creation
           pour s enregistrer
       """
       self.sds.append(sd)
@@ -368,8 +371,8 @@ Causes possibles :
           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 
+      # 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
@@ -381,7 +384,7 @@ Causes possibles :
 
    def get_file(self,unite=None,fic_origine=''):
       """
-          Retourne le nom du fichier correspondant à un numero d'unité 
+          Retourne le nom du fichier correspondant à un numero d'unité
           logique (entier) ainsi que le source contenu dans le fichier
       """
       if self.appli :
@@ -406,10 +409,10 @@ Causes possibles :
       return file,text
 
    def set_par_lot(self,par_lot):
-      """ 
-          Met le mode de traitement a 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 
+          en fonction de la valeur du mot cle PAR_LOT et
           du contexte : application maitre ou pas
       """
       if self.appli == None:
@@ -428,7 +431,7 @@ Causes possibles :
 
    def interact(self):
       """
-          Cette methode a pour fonction d'ouvrir un interpreteur 
+          Cette methode a pour fonction d'ouvrir un interpreteur
           pour que l'utilisateur entre des commandes interactivement
       """
       CONTEXT.set_current_step(self)
@@ -456,9 +459,9 @@ Causes possibles :
          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 
+      # 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 
+      # 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
@@ -488,7 +491,15 @@ Causes possibles :
       return d
 
    def get_global_contexte(self):
-      return self.g_context.copy()
+      """Retourne "un" contexte global ;-)"""
+      # N'est utilisé que par INCLUDE (sauf erreur).
+      # g_context est remis à {} en PAR_LOT='OUI'. const_context permet
+      # de retrouver ce qui y a été mis par exec_compile.
+      # Les concepts n'y sont pas en PAR_LOT='OUI'. Ils sont ajoutés
+      # par get_global_contexte de la MACRO.
+      d = self.const_context.copy()
+      d.update(self.g_context)
+      return d
 
 
    def get_contexte_courant(self, etape_courante=None):
@@ -544,3 +555,14 @@ Causes possibles :
       if CONTEXT.debug: print ' `- JDC sd_accessible : PAR_LOT =', self.par_lot
       return self.par_lot == 'NON'
 
+
+   def _build_reserved_kw_list(self):
+       """Construit la liste des mots-clés réservés (interdits pour le
+       nommage des concepts)."""
+       wrk = set()
+       for cat in self.cata:
+           wrk.update([kw for kw in dir(cat) if len(kw) <= 8 and kw == kw.upper()])
+       wrk.difference_update(['OPER', 'MACRO', 'BLOC', 'SIMP', 'FACT', 'FORM',
+                              'GEOM', 'MCSIMP', 'MCFACT'])
+       self._reserved_kw = {}.fromkeys(wrk, 1)
+
index 6d5b70fc2eeffb8b8c20fbfa27c8dcaed8e14897..dc51333305ff4d22f90e2ac24f8f7ae992cbf929 100644 (file)
@@ -1,28 +1,28 @@
-#@ MODIF N_MACRO Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MACRO Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce module contient la classe de definition MACRO
     qui permet de spécifier les caractéristiques d'une macro-commande
 """
@@ -31,16 +31,17 @@ import types,string,traceback
 
 import N_ENTITE
 import N_MACRO_ETAPE
+import N_OPS
 import nommage
 
 class MACRO(N_ENTITE.ENTITE):
    """
     Classe pour definir une macro-commande
 
-    Cette classe a trois attributs de classe 
+    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 
+    - 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)
@@ -121,7 +122,7 @@ class MACRO(N_ENTITE.ENTITE):
       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
+      self.entites = args
       current_cata=CONTEXT.get_current_cata()
       if niveau == None:
          self.niveau=None
@@ -131,6 +132,7 @@ class MACRO(N_ENTITE.ENTITE):
          self.niveau.enregistre(self)
       self.UIinfo=UIinfo
       self.affecter_parente()
+      self.check_definition(self.nom)
 
    def __call__(self,reuse=None,**args):
       """
@@ -167,8 +169,8 @@ class MACRO(N_ENTITE.ENTITE):
       """
       if self.op is not None and (type(self.op) != types.IntType or self.op > 0) :
         self.cr.fatal("L'attribut 'op' doit etre 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 etre une fonction Python : %s" % `self.proc`)
+      if self.proc is not None and not isinstance(self.proc, N_OPS.OPS):
+        self.cr.fatal("L'attribut op doit etre une instance d'OPS : %s" % `self.proc`)
       if type(self.regles) != types.TupleType :
         self.cr.fatal("L'attribut 'regles' doit etre un tuple : %s" %`self.regles`)
       if type(self.fr) != types.StringType :
@@ -188,4 +190,3 @@ class MACRO(N_ENTITE.ENTITE):
       """
       self.niveau=None
 
-
index 7b59d5c08d935d580acef3488d827a86d462dbb0..efc0380f1aaceaa1698a4e79dd43904cc7758caa 100644 (file)
@@ -1,28 +1,28 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 07/11/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce module contient la classe MACRO_ETAPE qui sert à vérifier et à exécuter
     une commande
 """
@@ -39,6 +39,7 @@ import N_utils
 from N_utils import AsType
 from N_CO import CO
 from N_ASSD import ASSD
+from N_info import message, SUPERV
 
 class MACRO_ETAPE(N_ETAPE.ETAPE):
    """
@@ -50,15 +51,15 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       """
          Attributs :
 
-            - definition : objet portant les attributs de définition d'une étape 
-              de type macro-commande. Il est initialisé par 
+            - 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 
+              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é 
+            - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé
               avec l'argument args.
 
       """
@@ -80,8 +81,8 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       self.etapes = []
       self.index_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 
+      #  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
@@ -108,30 +109,31 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
 
    def Build_sd(self,nom):
       """
-         Construit le concept produit de l'opérateur. Deux cas 
+         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 
+
+           - 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 
+           - le parent est défini. Dans ce cas, l'étape demande au parent la
              création et le nommage du concept.
 
       """
+      message.debug(SUPERV, "Build_sd %s", self.nom)
       self.sdnom=nom
       try:
-         # On positionne la macro self en tant que current_step pour que les 
+         # 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 
+         #  comme parent
          self.set_current_step()
          if self.parent:
             sd= self.parent.create_sdprod(self,nom)
-            if type(self.definition.op_init) == types.FunctionType: 
+            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 
+               # On ne nomme le concept que dans le cas de non reutilisation
                # d un concept
                sd.set_name(nom)
          self.reset_current_step()
@@ -139,7 +141,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
          self.reset_current_step()
          raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
                               'fichier : ',self.appel[1],e)
-      except (EOFError,self.UserError):
+      except (EOFError, self.UserError):
          # Le retablissement du step courant n'est pas strictement necessaire. On le fait pour des raisons de coherence
          self.reset_current_step()
          raise
@@ -160,7 +162,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       # On marque les concepts CO pour verification ulterieure de leur bonne utilisation
       l=self.get_all_co()
       for c in l:
-          #if not hasattr(c,"_etape") or c._etape is not c.etape: 
+          #if not hasattr(c,"_etape") or c._etape is not c.etape:
              c._etape=self
       return l
 
@@ -195,7 +197,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
           # 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,self.UserError):
+        except (EOFError, self.UserError), exc:
           raise
         except:
           if CONTEXT.debug: traceback.print_exc()
@@ -213,8 +215,8 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
         else:
           self.sd= sd_prod(etape=self)
           self.typret=sd_prod
-          # Si la commande est obligatoirement reentrante et reuse n'a pas ete specifie, c'est une erreur. 
-          # On ne fait rien ici. L'erreur sera traitee par la suite. 
+          # Si la commande est obligatoirement reentrante et reuse n'a pas ete specifie, c'est une erreur.
+          # On ne fait rien ici. L'erreur sera traitee par la suite.
       # précaution
       if self.sd is not None and not isinstance(self.sd, ASSD):
          raise AsException("""
@@ -266,7 +268,7 @@ Causes possibles :
           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 
+      # 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
@@ -289,11 +291,12 @@ Causes possibles :
         if e.isactif():
            e.update_context(d)
       self.index_etape_courante=index_etape
+      message.debug(SUPERV, "returns %s", d.keys())
       return d
 
    def supprime(self):
       """
-         Méthode qui supprime toutes les références arrières afin que 
+         Méthode qui supprime toutes les références arrières afin que
          l'objet puisse etre correctement détruit par le garbage collector
       """
       N_MCCOMPO.MCCOMPO.supprime(self)
@@ -318,7 +321,7 @@ Causes possibles :
       if not hasattr(co,'etape'):
          # Le concept vaut None probablement. On ignore l'appel
          return
-      # 
+      #
       # On cherche a discriminer les differents cas de typage d'un concept
       # produit par une macro qui est specifie dans un mot cle simple.
       # On peut passer plusieurs fois par type_sdprod ce qui explique
@@ -331,7 +334,7 @@ Causes possibles :
       #         la propriete du concept de la macro parent a la macro courante (self)
       #         en verifiant que le type est valide
       # Cas 4 : La concept est la propriete d'une etape fille. Ceci veut dire qu'on est
-      #         deja passe par type_sdprod et que la propriete a ete transfere a une 
+      #         deja passe par type_sdprod et que la propriete a ete transfere a une
       #         etape fille. Cas semblable a Cas 3.
       # Cas 5 : Le concept est produit par une etape externe a la macro.
       #
@@ -341,24 +344,21 @@ Causes possibles :
          # Recherche du mot cle simple associe au concept
          mcs=self.get_mcs_with_co(co)
          if len(mcs) != 1:
-            raise AsException("""Erreur interne. 
+            raise AsException("""Erreur interne.
 Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co)
          mcs=mcs[0]
          if not self.typeCO in mcs.definition.type:
-            raise AsException("""Erreur interne. 
+            raise AsException("""Erreur interne.
 Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type))
-         co.etape=self
+         co.etape = self
          # affectation du bon type du concept et
-         # initialisation de sa partie "sd"
-         if CONTEXT.debug:print "changement de type:",co,t
          co.change_type(t)
-         
          self.sdprods.append(co)
 
-      elif co.etape== self:
+      elif co.etape == self:
          # Cas 2 : le concept est produit par la macro (self)
          # On est deja passe par type_sdprod (Cas 1 ou 3).
-         if co.etape==co._etape:
+         if co.etape == co._etape:
            #Le concept a été créé par la macro (self)
            #On peut changer son type
            co.change_type(t)
@@ -366,7 +366,7 @@ Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pa
            #Le concept a été créé par une macro parente
            # Le type du concept doit etre coherent avec le type demande (seulement derive)
            if not isinstance(co,t):
-             raise AsException("""Erreur interne. 
+             raise AsException("""Erreur interne.
 Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co.__class__))
 
          self.sdprods.append(co)
@@ -375,7 +375,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          # Cas 3 : le concept est produit par la macro parente (self.parent)
          # on transfere la propriete du concept a la macro fille
          # et on change le type du concept comme demande
-         # Au prealable, on verifie que le concept existant (co) est une instance 
+         # Au prealable, on verifie que le concept existant (co) est une instance
          # possible du type demande (t)
          # Cette règle est normalement cohérente avec les règles de vérification des mots-clés
          if not isinstance(co,t):
@@ -384,11 +384,11 @@ Impossible de changer le type du concept produit (%s) en (%s).
 Le type actuel (%s) devrait etre une classe derivee du nouveau type (%s)""" % (co,t,co.__class__,t))
          mcs=self.get_mcs_with_co(co)
          if len(mcs) != 1:
-            raise AsException("""Erreur interne. 
+            raise AsException("""Erreur interne.
 Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co)
          mcs=mcs[0]
          if not self.typeCO in mcs.definition.type:
-            raise AsException("""Erreur interne. 
+            raise AsException("""Erreur interne.
 Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" %(co,mcs.definition.type))
          co.etape=self
          # On ne change pas le type car il respecte la condition isinstance(co,t)
@@ -396,13 +396,13 @@ Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pa
          self.sdprods.append(co)
 
       elif self.issubstep(co.etape):
-         # Cas 4 : Le concept est propriété d'une sous etape de la macro (self). 
+         # Cas 4 : Le concept est propriété d'une sous etape de la macro (self).
          # On est deja passe par type_sdprod (Cas 3 ou 1).
          # Il suffit de le mettre dans la liste des concepts produits (self.sdprods)
-         # Le type du concept et t doivent etre derives. 
+         # Le type du concept et t doivent etre derives.
          # Il n'y a aucune raison pour que la condition ne soit pas verifiee.
          if not isinstance(co,t):
-            raise AsException("""Erreur interne. 
+            raise AsException("""Erreur interne.
 Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co.__class__))
          self.sdprods.append(co)
 
@@ -412,7 +412,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          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
@@ -424,8 +424,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       return 0
 
    def register(self,etape):
-      """ 
-          Enregistrement de etape dans le contexte de la macro : liste etapes 
+      """
+          Enregistrement de etape dans le contexte de la macro : liste etapes
           et demande d enregistrement global aupres du JDC
       """
       self.etapes.append(etape)
@@ -434,7 +434,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       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)
       """
@@ -442,7 +442,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       return self.jdc.o_register(sd)
 
    def create_sdprod(self,etape,nomsd):
-      """ 
+      """
           Cette methode doit fabriquer le concept produit retourne
           par l'etape etape et le nommer.
 
@@ -479,19 +479,19 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          # est bien coherent avec celui initialement affecte par la macro (voir ci dessus)
          # on affecte au concept ce type car il peut etre plus precis (derive, en general)
          sd.__class__=sdprod
-         # On force également le nom stocké dans l'attribut sdnom : on lui donne le nom 
+         # On force également le nom stocké dans l'attribut sdnom : on lui donne le nom
          # du concept associé à nomsd
          etape.sdnom=sd.nom
       elif etape.definition.reentrant != 'n' and etape.reuse != None:
          # On est dans le cas d'une commande avec reutilisation d'un concept existant
-         # get_sd_prod fait le necessaire : verifications, associations, etc. mais ne cree 
+         # get_sd_prod fait le necessaire : verifications, associations, etc. mais ne cree
          # pas un nouveau concept. Il retourne le concept reutilise
          sd= etape.get_sd_prod()
          # Dans le cas d'un concept nomme automatiquement : _xxx, __xxx,
-         # On force le nom stocke dans l'attribut sdnom  de l'objet etape : on lui donne le nom 
+         # On force le nom stocke dans l'attribut sdnom  de l'objet etape : on lui donne le nom
          # du concept  reutilise (sd ou etape.reuse c'est pareil)
          # Ceci est indispensable pour eviter des erreurs lors des verifications des macros
-         # En effet une commande avec reutilisation d'un concept verifie que le nom de 
+         # En effet une commande avec reutilisation d'un concept verifie que le nom de
          # la variable a gauche du signe = est le meme que celui du concept reutilise.
          # Lorsqu'une telle commande apparait dans une macro, on supprime cette verification.
          if (etape.sdnom == '' or etape.sdnom[0] == '_'):
@@ -504,7 +504,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       return sd
 
    def NommerSdprod(self,sd,sdnom,restrict='non'):
-      """ 
+      """
           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
@@ -518,16 +518,9 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       # est de verifier que le nom n'est pas deja attribue. Ceci est fait en delegant
       # au JDC par l'intermediaire du parent.
 
-      #XXX attention inconsistence : prefix et gcncon ne sont pas 
-      # définis dans le package Noyau. La methode NommerSdprod pour
+      #XXX attention inconsistence : gcncon n'est pas
+      # défini 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
@@ -549,7 +542,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
         else:
           sdnom=self.gcncon('_')
       else:
-        # On est dans le cas d'un nom de concept global. 
+        # On est dans le cas d'un nom de concept global.
         pass
 
       if restrict == 'non':
@@ -559,6 +552,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          # On ajoute dans le contexte de la macro les concepts nommes
          # Ceci est indispensable pour les CO (macro) dans un INCLUDE
          self.g_context[sdnom]=sd
+         message.debug(SUPERV, "g_context[%s] = %s", sdnom, sd)
       else:
          # La demande de nommage vient probablement d'une macro qui a mis
          # le concept dans son contexte. On ne traite plus que le nommage (restrict="oui")
@@ -625,12 +619,14 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       # 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={}
+      code = compile(text,f,'exec')
+      d = self.macro_const_context
       self.g_context = d
       self.contexte_fichier_init = d
-      globs=self.parent.get_global_contexte()
-      exec code in globs,d
+      globs = self.get_global_contexte()
+      exec code in globs, d
+      # pour ne pas conserver des références sur tout
+      self.macro_const_context = {}
 
    def get_global_contexte(self):
       """
@@ -642,6 +638,9 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       # du parent de self et de celui de l'etape elle meme (self)
       d=self.parent.get_global_contexte()
       d.update(self.g_context)
+      # en PAR_LOT='OUI', les concepts n'étant pas dans jdc.g_context,
+      # on demande au parent le contexte courant.
+      d.update(self.parent.get_contexte_avant(self))
       return d
 
    def get_contexte_courant(self, etape_fille_du_jdc=None):
@@ -649,7 +648,9 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          Retourne le contexte tel qu'il est au moment de l'exécution de
          l'étape courante.
       """
-      ctx = self.parent.get_contexte_courant(self)
+      ctx = {}
+      # update car par ricochet on modifierait jdc.current_context
+      ctx.update( self.parent.get_contexte_courant(self) )
       # on peut mettre None car toujours en PAR_LOT='NON', donc la dernière
       ctx.update( self.get_contexte_avant(None) )
       return ctx
@@ -675,7 +676,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       return etape
 
    def copy_intern(self,etape):
-      """ Cette méthode effectue la recopie des etapes internes d'une macro 
+      """ Cette méthode effectue la recopie des etapes internes d'une macro
           passée en argument (etape)
       """
       self.etapes=[]
@@ -695,7 +696,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
           new_etp.copy_intern(etp)
           self.etapes.append(new_etp)
           self.index_etapes[new_etp] = len(self.etapes) - 1
-          
+
 
    def reset_jdc(self,new_jdc):
        """
@@ -731,8 +732,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
    def sd_accessible(self):
       """On peut acceder aux "valeurs" (jeveux) des ASSD dans
       les macro-commandes qui sont localement en PAR_LOT="NON"
-      sauf pour INCLUDE et INCLUDE_MATERIAU.
+      sauf pour INCLUDE.
       """
       if CONTEXT.debug: print ' `- MACRO sd_accessible :', self.nom
-      return self.parent.sd_accessible() or not self.nom.startswith('INCLUDE')
+      return self.parent.sd_accessible() or not self.is_include()
 
index cca7f6fe67504fb09059bcf5ca17eddac7354741..7092fd34f765cba3c76f4967bb222d94c6c0a63f 100644 (file)
@@ -1,29 +1,29 @@
-#@ MODIF N_MCCOMPO Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCCOMPO Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
-    Ce module contient la classe MCCOMPO qui sert à factoriser les comportements 
+"""
+    Ce module contient la classe MCCOMPO qui sert à factoriser les comportements
     des OBJECT composites
 """
 
@@ -33,11 +33,11 @@ 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)
       """
@@ -66,7 +66,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
           # 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)
+          objet=v(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'):
@@ -77,7 +77,8 @@ class MCCOMPO(N_OBJECT.OBJECT):
         if args.has_key(k):
            del args[k]
 
-      # Phase 1.2 : on traite les autres entites que SIMP 
+      # Phase 1.2 : on traite les autres entites que SIMP
+      # (FACT en fait car un BLOC ne peut avoir le meme nom qu'un mot-clef)
       for k,v in self.definition.entites.items():
         if v.label == 'SIMP':continue
         if args.has_key(k) or v.statut=='o' :
@@ -86,7 +87,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
           # 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)
+          objet=v(val=args.get(k,None),nom=k,parent=self)
           mc_liste.append(objet)
         if args.has_key(k):
            del args[k]
@@ -116,7 +117,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
 
       # 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 
+      # 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
@@ -135,28 +136,28 @@ class MCCOMPO(N_OBJECT.OBJECT):
          return mc_liste
 
    def cree_dict_valeurs(self,liste=[],condition=0):
-      """ 
+      """
         Cette méthode crée un contexte (sous la forme d'un dictionnaire)
         à partir des valeurs des mots clés contenus dans l'argument liste.
-        L'opération consiste à parcourir la liste (d'OBJECT) et à la 
+        L'opération consiste à parcourir la liste (d'OBJECT) et à la
         transformer en un dictionnaire dont les clés sont les noms des
         mots clés et les valeurs dépendent du type d'OBJECT.
         Ce dictionnaire servira de liste d'arguments d'appel pour les
         fonctions sd_prod de commandes et ops de macros ou de contexte
         d'évaluation des conditions de présence de BLOC.
 
-        Si l'argument condition de la méthode vaut 1, on ne 
+        Si l'argument condition de la méthode vaut 1, on ne
         remonte pas les valeurs des mots clés contenus dans des blocs
         pour eviter les bouclages.
 
-        Cette méthode réalise les opérations suivantes en plus de transformer 
+        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' 
+           - ajouter tous les mots-clés globaux (attribut position = 'global'
              et 'global_jdc')
 
-        L'argument liste est, en général, une mc_liste en cours de 
+        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.
 
       """
@@ -167,16 +168,22 @@ class MCCOMPO(N_OBJECT.OBJECT):
            # 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 not condition:dico.update(v.get_valeur())
+           if not condition:
+               dadd = v.get_valeur()
+               assert intersection_vide(dico, dadd)
+               dico.update(dadd)
         else:
+           assert not dico.has_key(v.nom), "deja vu : %s" % v.nom
            dico[v.nom]=v.get_valeur()
 
-      # On rajoute tous les autres mots-clés locaux possibles avec la valeur 
+      # 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 traite que ceux avec statut défaut ('d')
       # et caché ('c')
       # On n'ajoute aucune information sur les blocs. Ils n'ont pas de défaut seulement
       # une condition.
+      #XXX remplacer le not has_key par un dico différent et faire dico2.update(dico)
+      #    ce n'est qu'un pb de perf
       for k,v in self.definition.entites.items():
         if not dico.has_key(k):
            if v.label == 'SIMP':
@@ -215,7 +222,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
       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
       """
@@ -224,7 +231,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
         dict_mc_globaux_fac = self.recherche_mc_globaux_facultatifs()
         for k,v in etape.mc_globaux.items():
            dict_mc_globaux_fac[k]=v.get_valeur()
-        if self.jdc : 
+        if self.jdc :
            for k,v in self.jdc.mc_globaux.items():
               dict_mc_globaux_fac[k]=v.get_valeur()
         return dict_mc_globaux_fac
@@ -232,9 +239,10 @@ class MCCOMPO(N_OBJECT.OBJECT):
         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'
+          directs de self de type 'global'.
+          position='global' n'est donc possible (et n'a de sens) qu'au plus haut niveau.
       """
       dico={}
       etape = self.get_etape()
@@ -248,7 +256,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
       return dico
 
    def supprime(self):
-      """ 
+      """
          Méthode qui supprime toutes les références arrières afin que l'objet puisse
          etre correctement détruit par le garbage collector
       """
@@ -264,8 +272,8 @@ class MCCOMPO(N_OBJECT.OBJECT):
 
    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 
+          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
@@ -297,7 +305,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
         if not mc.isBLOC() : continue
         try:
           return mc.get_mocle(key)
-        except: 
+        except:
           # On n a rien trouve dans ce bloc, on passe au suivant
           pass
       #  On a rien trouve, le mot cle est absent.
@@ -305,10 +313,10 @@ class MCCOMPO(N_OBJECT.OBJECT):
       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 
+          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:
@@ -333,8 +341,8 @@ class MCCOMPO(N_OBJECT.OBJECT):
         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 
+      """
+          Ajoute le mot-clé mc à la liste des mots-clés globaux du jdc
       """
       nom = mc.nom
       self.jdc.mc_globaux[nom]=mc
@@ -368,9 +376,9 @@ class MCCOMPO(N_OBJECT.OBJECT):
         mocle.reparent(self)
 
    def get_sd_utilisees(self):
-      """ 
+      """
         Retourne la liste des concepts qui sont utilisés à l'intérieur de self
-        ( comme valorisation d'un MCS) 
+        ( comme valorisation d'un MCS)
       """
       l=[]
       for child in self.mc_liste:
@@ -378,13 +386,13 @@ class MCCOMPO(N_OBJECT.OBJECT):
       return l
 
    def get_sd_mcs_utilisees(self):
-      """ 
+      """
           Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
             - Si aucune sd n'est utilisée, le dictionnaire est vide.
             - Sinon, les clés du dictionnaire sont les mots-clés derrière lesquels on
               trouve des sd ; la valeur est la liste des sd attenante.
               Exemple ::
-              
+
                 { 'VALE_F': [ <Cata.cata.para_sensi instance at 0x9419854>,
                               <Cata.cata.para_sensi instance at 0x941a204> ],
                   'MODELE': [<Cata.cata.modele instance at 0x941550c>] }
@@ -399,7 +407,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
 
    def get_mcs_with_co(self,co):
       """
-         Cette methode retourne l'objet MCSIMP fils de self 
+         Cette methode retourne l'objet MCSIMP fils de self
          qui a le concept co comme valeur.
          En principe, elle ne doit etre utilisee que pour les concepts
          instances de la classe CO
@@ -417,3 +425,14 @@ class MCCOMPO(N_OBJECT.OBJECT):
       for child in self.mc_liste:
         l.extend(child.get_all_co())
       return l
+
+
+def intersection_vide(dict1, dict2):
+    """Verification qu'il n'y a pas de clé commune entre 'dict1' et 'dict2'."""
+    sk1 = set(dict1.keys())
+    sk2 = set(dict2.keys())
+    inter = sk1.intersection(sk2)
+    ok = len(inter) == 0
+    if not ok:
+        print 'ERREUR: Mot(s)-clef(s) vu(s) plusieurs fois :', tuple(inter)
+    return ok
index ba769bbd7d34c7af02e106a037a9596914b5e727..2ff4d1f9116532214b79c81de21f7e4102cd3b23 100644 (file)
@@ -1,36 +1,36 @@
-#@ MODIF N_MCSIMP Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCSIMP Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
-    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
+"""
+    Ce module contient la classe MCSIMP qui sert a controler la valeur
+    d'un mot-cle simple par rapport a sa definition portee par un objet
     de type ENTITE
 """
 
 from copy import copy
 
-from Noyau.N_ASSD import ASSD,assd
+from Noyau.N_ASSD import ASSD
 from Noyau.N_CO import CO
 import N_OBJECT
 from N_CONVERT import ConversionFactory
@@ -42,18 +42,13 @@ class MCSIMP(N_OBJECT.OBJECT):
    def __init__(self,val,definition,nom,parent):
       """
          Attributs :
-
-          - val : valeur du mot clé simple
-
+          - val : valeur du mot cle simple
           - definition
-
           - nom
-
           - parent
-
         Autres attributs :
 
-          - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut
+          - valeur : valeur du mot-cle simple en tenant compte de la valeur par defaut
 
       """
       self.definition=definition
@@ -67,15 +62,15 @@ class MCSIMP(N_OBJECT.OBJECT):
          self.niveau = self.parent.niveau
          self.etape = self.parent.etape
       else:
-         # Le mot cle simple a été créé sans parent
+         # Le mot cle simple a ete cree 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
+      """
+          Retourne la valeur effective du mot-cle en fonction
+          de la valeur donnee. Defaut si val == None
       """
       if (val is None and hasattr(self.definition,'defaut')) :
          val = self.definition.defaut
@@ -85,22 +80,32 @@ class MCSIMP(N_OBJECT.OBJECT):
 
    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
+          Retourne la "valeur" d'un mot-cle simple.
+          Cette valeur est utilisee lors de la creation d'un contexte
+          d'evaluation d'expressions a l'aide d'un interpreteur Python
       """
       v = self.valeur
-      # Singleton : on retourne l'element
-      # Permet aussi d'ignorer l'erreur : concept=COMMANDE(),
-      # ou 'concept' est un tuple de longueur 1 a cause de la virgule.
-      if type(v) in (list, tuple) and len(v) == 1:
+      # Si singleton et max=1, on retourne la valeur.
+      # Si une valeur simple et max='**', on retourne un singleton.
+      # (si liste de longueur > 1 et max=1, on sera arrete plus tard)
+      # Pour accepter les numpy.array, on remplace : "type(v) not in (list, tuple)"
+      # par "not has_attr(v, '__iter__')".
+      if v is None:
+          pass
+      elif type(v) in (list, tuple) and len(v) == 1 and self.definition.max == 1:
          v = v[0]
+      elif not hasattr(v, '__iter__') and self.definition.max != 1:
+          v = (v, )
+      # traitement particulier pour les complexes ('RI', r, i)
+      if 'C' in self.definition.type and self.definition.max != 1 \
+        and v[0] in ('RI', 'MP'):
+          v = (v, )
       return v
 
    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
+          Une autre methode qui retourne une "autre" valeur du mot cle simple.
+          Elle est utilisee par la methode get_mocle
       """
       return self.valeur
 
@@ -115,7 +120,7 @@ class MCSIMP(N_OBJECT.OBJECT):
       """ Retourne une copie de self """
       objet = self.makeobjet()
       # il faut copier les listes et les tuples mais pas les autres valeurs
-      # possibles (réel,SD,...)
+      # possibles (reel,SD,...)
       if type(self.valeur) in (list, tuple):
          objet.valeur = copy(self.valeur)
       else:
@@ -135,8 +140,8 @@ class MCSIMP(N_OBJECT.OBJECT):
       self.etape=parent.etape
 
    def get_sd_utilisees(self):
-      """ 
-          Retourne une liste qui contient la ou les SD utilisée par self si c'est le cas
+      """
+          Retourne une liste qui contient la ou les SD utilisee par self si c'est le cas
           ou alors une liste vide
       """
       l=[]
@@ -149,10 +154,10 @@ class MCSIMP(N_OBJECT.OBJECT):
       return l
 
    def get_sd_mcs_utilisees(self):
-      """ 
-          Retourne la ou les SD utilisée par self sous forme d'un dictionnaire :
-            - Si aucune sd n'est utilisée, le dictionnaire est vide.
-            - Sinon, la clé du dictionnaire est le mot-clé simple ; la valeur est
+      """
+          Retourne la ou les SD utilisee par self sous forme d'un dictionnaire :
+            - Si aucune sd n'est utilisee, le dictionnaire est vide.
+            - Sinon, la cle du dictionnaire est le mot-cle simple ; la valeur est
               la liste des sd attenante.
 
               Exemple ::
@@ -179,7 +184,7 @@ class MCSIMP(N_OBJECT.OBJECT):
    def get_all_co(self):
       """
           Cette methode retourne la liste de tous les concepts co
-          associés au mot cle simple
+          associes au mot cle simple
       """
       lval=self.valeur
       if type(self.valeur) not in (list, tuple):
index 7f2d1ffc74f82ec285852f12d51975e5318a5804..648d9b05afbd315520aa648527793492278db64a 100644 (file)
@@ -1,28 +1,28 @@
-#@ MODIF N_OPER Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_OPER Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce module contient la classe de definition OPER
     qui permet de spécifier les caractéristiques d'un opérateur
 """
@@ -37,10 +37,10 @@ class OPER(N_ENTITE.ENTITE):
    """
     Classe pour definir un opérateur
 
-    Cette classe a trois attributs de classe 
+    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 
+    - 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)
@@ -118,6 +118,7 @@ class OPER(N_ENTITE.ENTITE):
          self.niveau.enregistre(self)
       self.UIinfo=UIinfo
       self.affecter_parente()
+      self.check_definition(self.nom)
 
    def __call__(self,reuse=None,**args):
       """
@@ -130,10 +131,10 @@ class OPER(N_ENTITE.ENTITE):
       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 
+           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={})
diff --git a/Noyau/N_OPS.py b/Noyau/N_OPS.py
new file mode 100644 (file)
index 0000000..6d53709
--- /dev/null
@@ -0,0 +1,45 @@
+#@ MODIF N_OPS Noyau  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from N_utils import import_object
+
+class OPS:
+    """Wrapper to ops functions.
+    This allows to import them only when they are needed."""
+
+    def __init__(self, uri):
+        """Initialization"""
+        self.uri = uri
+
+    def __call__(self, *args, **kwargs):
+        """Import the real function and call it."""
+        func = import_object(self.uri)
+        return func(*args, **kwargs)
+
+
+# utilisé par exemple par des macros où tout est fait dans l'init.
+class NOTHING(OPS):
+    """OPS which does nothing."""
+
+    def __call__(self, macro, *args, **kwargs):
+        macro.set_icmd(1)
+        return 0
+
+EMPTY_OPS = NOTHING(None)
index c19db8b4af562d60c10000d129b0d9512c500da9..ccef694842ee68d72191d1eacf653faa8f7a49be 100644 (file)
@@ -1,28 +1,28 @@
-#@ MODIF N_PROC Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_PROC Noyau  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce module contient la classe de definition PROC
     qui permet de spécifier les caractéristiques d'une procédure
 """
@@ -36,10 +36,10 @@ class PROC(N_ENTITE.ENTITE):
    """
     Classe pour definir un opérateur
 
-    Cette classe a deux attributs de classe 
+    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 
+    - 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)
@@ -111,6 +111,7 @@ class PROC(N_ENTITE.ENTITE):
          self.niveau.enregistre(self)
       self.UIinfo=UIinfo
       self.affecter_parente()
+      self.check_definition(self.nom)
 
    def __call__(self,**args):
       """
index bba73d6061ad257e34c50e5a1a26aebb8460d821..35a357120dc3970b446536561f675e5e276bcb57 100644 (file)
@@ -37,9 +37,9 @@ class SIMP(N_ENTITE.ENTITE):
 
     Cette classe a deux attributs de classe 
 
-    - class_instance qui indique la classe qui devra etre utilisé
-            pour créer l'objet qui servira à controler la conformité d'un 
-            mot-clé simple avec sa définition
+    - class_instance qui indique la classe qui devra etre utilise
+            pour creer l'objet qui servira a controler la conformite d'un 
+            mot-cle simple avec sa définition
 
     - label qui indique la nature de l'objet de définition (ici, SIMP)
 
@@ -52,32 +52,20 @@ class SIMP(N_ENTITE.ENTITE):
                      val_min = '**',val_max='**',docu="",validators=None):
      
       """
-          Un mot-clé simple est caractérisé par les attributs suivants :
+          Un mot-cle simple est caracterise 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,validators)
@@ -101,7 +89,7 @@ class SIMP(N_ENTITE.ENTITE):
 
    def verif_cata(self):
       """
-          Cette methode sert à valider les attributs de l'objet de définition 
+          Cette methode sert a valider les attributs de l'objet de definition 
           de la classe SIMP
       """
       if type(self.min) != types.IntType :
@@ -134,7 +122,3 @@ class SIMP(N_ENTITE.ENTITE):
       return self.class_instance(nom=nom,definition=self,val=val,parent=parent)
 
 
-
-
-
-
index 7a1c67e72a343ece81392d410464691644a661a3..05f9e8da0f43814dbd7f112507e6aea2fd581d99 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_VALIDATOR Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_VALIDATOR Noyau  DATE 11/10/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -116,6 +116,7 @@ class TypeProtocol(PProtocol):
         self.typ=typ
 
     def default(self,obj,typ):
+
         help = ""
         for type_permis in typ:
             if type_permis == 'R':
@@ -133,6 +134,11 @@ class TypeProtocol(PProtocol):
                  if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
                      return obj
                  else : raise ValError("%s n'est pas un fichier valide" % repr(obj))
+            elif type_permis == 'FichierNoAbs' :
+                 import os
+                 if (len(typ) > 2 and typ[2] == "Sauvegarde") or isinstance(obj, type("")):
+                     return obj
+                 else : raise ValError("%s n'est pas un fichier valide" % repr(obj))
             elif type(type_permis) == types.ClassType or isinstance(type_permis,type):
                 try:
                     if self.is_object_from(obj,type_permis): return obj
@@ -569,6 +575,38 @@ class LongStr(ListVal):
              raise ValError("%s n'est pas de la bonne longueur" % repr(valeur))
           return valeur
 
+class OnlyStr(ListVal):
+      """
+          Validateur operationnel
+          Valide que c'est une chaine
+      """
+      def __init__(self):
+          ListVal.__init__(self)
+          self.cata_info=""
+
+      def info(self):
+          return "regarde si c'est une chaine"
+
+      def info_erreur_item(self):
+          return "Ce n'est pas une chain"
+
+      def convert(self,valeur):
+          for val in valeur:
+              v=self.adapt(val)
+          return valeur
+
+      def verif_item(self,valeur):
+          try:
+             self.adapt(valeur)
+             return 1
+          except:
+             return 0
+
+      def default(self,valeur):
+          if not is_str(valeur):
+             raise ValError("%s n'est pas une string" % repr(valeur))
+          return valeur
+
 class OrdList(ListVal):
       """
           Validateur operationnel
@@ -803,7 +841,6 @@ class AndVal(Valid):
           return chaine
 
       def verif(self,valeur):
-          print "je suis dans le verif du AndVal"
           for validator in self.validators:
               v=validator.verif(valeur)
               if not v :
@@ -1262,12 +1299,14 @@ class VerifTypeTuple(Valid,ListVal) :
 
       def verif_item(self,valeur):
           try :
-               if len(valeur) != len(self.typeDesTuples): return 0
-                for i in range(len(valeur)) :
-                    ok=self.verifType(valeur[i],self.typeDesTuples[i])
-                    if ok!=1 : return 0
-          except :
+             if len(valeur) != len(self.typeDesTuples):
                 return 0
+             for i in range(len(valeur)) :
+                ok=self.verifType(valeur[i],self.typeDesTuples[i])
+                if ok!=1:
+                   return 0
+          except :
+             return 0
           return 1
 
       def verifType(self,valeur,type_permis):
index 87fa725bce661807226f1e3c7203d222865d8f09..7878989474e951c61eee55b73286ba3e2638dd04 100644 (file)
@@ -1,24 +1,24 @@
-#@ MODIF N__F Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N__F Noyau  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
@@ -26,13 +26,16 @@ import UserDict
 
 class _F(UserDict.UserDict):
    """
-       Cette classe a un comportement semblable à un 
+       Cette classe a un comportement semblable à un
        dictionnaire Python et permet de donner
-       la valeur d'un mot-clé facteur avec pour les sous 
+       la valeur d'un mot-clé facteur avec pour les sous
        mots-clés la syntaxe motcle=valeur
    """
 
-   def __init__(self,**args):
+   def __init__(self, *pos, **args):
+      if len(pos) != 0:
+         raise SyntaxError("Valeur invalide pour '_F('. "\
+            "On attend cette syntaxe : _F(MOTCLE=valeur, ...)")
       self.data=args
 
    def supprime(self):
@@ -46,11 +49,11 @@ class _F(UserDict.UserDict):
       else:
         return cmp(self.data, dict)
 
+   def __iter__(self):
+      return iter(self.data)
+
    def copy(self):
       import copy
       c= copy.copy(self)
       c.data=self.data.copy()
       return c
-
-
-   
diff --git a/Noyau/N_info.py b/Noyau/N_info.py
new file mode 100644 (file)
index 0000000..59a6621
--- /dev/null
@@ -0,0 +1,269 @@
+#@ MODIF N_info Noyau  DATE 17/08/2011   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""Module to manage information printing : debug, info, error.
+Should replace 'print' and 'UTMESS' calls at least in the supervisor
+modules.
+Only used for debug right now.
+"""
+
+import os
+import os.path as osp
+import re
+import traceback
+from functools import partial
+from subprocess import Popen, PIPE
+
+from N_utils import Enum
+
+def default_print(text):
+    """Basic print function."""
+    print text
+
+LEVEL = Enum(
+    'DEBUG',
+    'INFO',
+    'WARN',
+    'ERROR'
+)
+
+class Category(object):
+    """Define a category of message for different parts of the code.
+    This allows to store different parameters for each category of message."""
+    def __init__(self):
+        self._level = LEVEL.INFO
+        self._fmt = "%-8s"
+        self._header = {
+            LEVEL.DEBUG : "DEBUG",
+            LEVEL.INFO : None,
+            LEVEL.WARN : "WARNING",
+            LEVEL.ERROR : "ERROR",
+        }
+
+    def set_level(self, level):
+        """Set the current level."""
+        self._level = level
+
+    def get_level(self):
+        """Return the current level."""
+        return self._level
+
+    def set_header(self, level, header):
+        """Set the header of ``level`` messages."""
+        self._header[level] = header
+
+    def get_header(self, level):
+        """Return the header at this ``level``."""
+        header = self._header.get(level, "")
+        if header:
+            header = self._fmt % header
+        return header
+
+    def active(self, level):
+        """Tell if a message should be print at this ``level``."""
+        return self._level <= level
+
+
+ALL = Category()
+SUPERV = Category()
+SUPERV.set_header(LEVEL.ERROR, None)
+MISS = Category()
+
+REGEXP_ORIG = re.compile('File [\'\"]*(.*?)[\'\"]*, *line ([0-9]+), *in (.*)')
+
+# slighty different and very simplier than logger objects
+# from the logging module.
+class InfoLevel(object):
+    """Store informations level."""
+    def __init__(self, level):
+        """Initialization"""
+        self._parts = []
+        for part in self._parts:
+            part.level = level
+        self.reset_print_function()
+        self._msg_callback = []
+        #self.extend_message(ALL, stack_header_callback)
+        self.extend_message(ALL, insert_header)
+
+    def add(self, category):
+        """Add a category of message."""
+        self._parts.append(category)
+
+    def set_level(self, category, level):
+        """Set the current level for ``category``."""
+        assert category in self._parts, "unknown category : %s" % category
+        assert LEVEL.exists(level), "unknown level : %s" % level
+        category.set_level(level)
+        if category == ALL:
+            for part in self._parts:
+                part.set_level(level)
+
+    def set_debug(self):
+        """Set debug level for all categories."""
+        self.set_level(ALL, LEVEL.DEBUG)
+
+    def set_header(self, category, level, header):
+        """Set the header of ``level`` messages."""
+        category.set_header(level, header)
+
+    def register_print_function(self, print_function):
+        """Define the `print_function` to use."""
+        self._print = print_function
+
+    def reset_print_function(self):
+        """Register the default 'print function'."""
+        self._print = default_print
+
+    def extend_message(self, category, callback):
+        """Allow to extend the message calling an external function."""
+        self._msg_callback.append((category, callback))
+
+    def _message(self, category, level, msg, args, kwargs):
+        """Print the message if the level is reached."""
+        if category.active(level):
+            if kwargs.get('utmess'):
+                func = self._message_utmess
+            else:
+                func = self._message_print
+            func = self._message_print
+            apply(func, (category, level, msg, args, kwargs))
+
+    def _message_print(self, category, level, msg, args, kwargs):
+        """Print the message if the level is reached."""
+        for cat, cbk in self._msg_callback:
+            if cat in (ALL, category):
+                msg, args = cbk(category, level, msg, args, kwargs)
+        if len(args) > 0:
+            try:
+                msg = msg % args
+            except Exception, err:
+                msg = repr((msg, args, err))
+        self._print(msg)
+
+    def _message_utmess(self, category, level, msg, args, kwargs):
+        """Print the message if the level is reached."""
+        # how to use callbacks ? valk ?
+        from Utilitai.Utmess import MessageLog
+        code = {
+            LEVEL.DEBUG : 'I',
+            LEVEL.INFO : 'I',
+            LEVEL.WARN : 'A',
+            LEVEL.ERROR : 'F',
+        }
+        valk = kwargs.get('valk', ())
+        vali = kwargs.get('vali', ())
+        valr = kwargs.get('valr', ())
+        msg = MessageLog.GetText(code[level], msg, valk, vali, valr)
+        for cat, cbk in self._msg_callback:
+            if cat in (ALL, category):
+                msg, args = cbk(category, level, msg, args, kwargs)
+        self._print(msg)
+
+    def debug(self, category, msg, *args, **kwargs):
+        """Print a debug message."""
+        self._message(category or ALL, LEVEL.DEBUG, msg, args, kwargs)
+
+    def info(self, category, msg, *args, **kwargs):
+        """Print an information message."""
+        self._message(category or ALL, LEVEL.INFO, msg, args, kwargs)
+
+    def warn(self, category, msg, *args, **kwargs):
+        """Print a warning message."""
+        self._message(category or ALL, LEVEL.WARN, msg, args, kwargs)
+
+    def error(self, category, msg, *args, **kwargs):
+        """Print an error message."""
+        self._message(category or ALL, LEVEL.ERROR, msg, args, kwargs)
+
+    critical = error
+
+    def add_memory_info(self, category):
+        """Shortcut to add memory informations."""
+        self.extend_message(category, mem_msg_callback)
+
+    def use_aster_print(self):
+        """Shortcut to use aster.affiche function to print the messages."""
+        import aster
+        self.register_print_function(partial(aster.affiche, 'MESSAGE'))
+
+
+# defined extensions
+def insert_header(category, level, msg, args, kwargs):
+    """Insert the header."""
+    header = category.get_header(level)
+    if header:
+        msg = header + msg
+    return msg, args
+
+def stack_header_callback(category, level, msg, args, kwargs):
+    """To insert the origin."""
+    if level <= LEVEL.DEBUG:
+        stack_id = -5 + kwargs.get('stack_id', 0)
+        stack = traceback.format_stack(limit=10)[stack_id]
+        mat = REGEXP_ORIG.search(stack)
+        origin = '[%s:%s in %s] ' % (osp.basename(mat.group(1)), mat.group(2), mat.group(3))
+        msg = origin + msg
+    return msg, args
+
+
+# objet singleton
+message = InfoLevel(LEVEL.INFO)
+message.add(ALL)
+message.add(SUPERV)
+message.add(MISS)
+
+# callback to add memory information
+_pid = os.getpid()
+
+RE_VMPEAK = re.compile('VmPeak:\s*([0-9]+)\s*([kMGBo]+)', re.M | re.I)
+
+def memory_used(pid):
+    """Return the current VmPeak value."""
+    p = Popen(['cat', '/proc/%s/status' % pid], stdout=PIPE)
+    output = p.communicate()[0]
+    mat = RE_VMPEAK.search(output)
+    return int(mat.group(1)) / 1024.
+
+current_memory_used = partial(memory_used, _pid)
+
+def mem_msg_callback(category, level, msg, args, kwargs):
+    """Callback to add memory infos to message."""
+    if level <= LEVEL.DEBUG:
+        msg = msg + " - VmPeak : %.2f Mo"
+        args = tuple(list(args) + [current_memory_used(), ])
+    return msg, args
+
+
+if __name__ == "__main__":
+    message.set_level(SUPERV, LEVEL.WARN)
+    message.set_level(MISS, LEVEL.DEBUG)
+    message.debug(None, "debug message")
+    message.info(ALL, "information message")
+    message.warn(None, "warning message")
+    message.error(ALL, "error message")
+    message.add_memory_info()
+    message.debug(MISS, "debug supervisor message")
+    message.info(SUPERV, "information supervisor message")
+    message.warn(SUPERV, "warning supervisor message")
+    message.error(SUPERV, "error supervisor message")
+    message.critical(MISS, "test the critical alias")
+
+
index be4e97266c8e68897a5eb5f3f8a3db390d83693f..3a5c035838ae6fd1517aeeb331c69d96b7f335f9 100644 (file)
@@ -1,8 +1,8 @@
-#@ MODIF N_types Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_types Noyau  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
@@ -23,8 +23,6 @@
    Ce module contient des fonctions utilitaires pour tester les types
 """
 
-from N_ASSD import ASSD
-
 
 # use isinstance() instead of type() because objects returned from numpy arrays
 # inherit from python scalars but are numpy.float64 or numpy.int32...
@@ -56,6 +54,15 @@ def is_enum(obj):
     return is_list(obj) or is_tuple(obj)
 
 def is_assd(obj):
+    from N_ASSD import ASSD
     return isinstance(obj, ASSD)
 
 
+def force_list(obj):
+    """Retourne `obj` si c'est une liste ou un tuple,
+    sinon retourne [obj,] (en tant que list).
+    """
+    if not is_enum(obj):
+        obj = [obj,]
+    return list(obj)
+
index 50198669da1aac46dd0dc259b98d0017a16377e8..4641ee648569ed23b6e477c3a71a5750947d7086 100644 (file)
@@ -1,24 +1,22 @@
-#@ MODIF N_utils Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_utils Noyau  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 
@@ -36,11 +34,11 @@ from N_types     import is_int, is_float, is_complex, is_str, is_enum, is_assd
 SEP='_'
 
 try:
-   # Si la version de Python possède la fonction _getframe
+   # Si la version de Python possede la fonction _getframe
    # on l'utilise.
    cur_frame=sys._getframe
 except:
-   # Sinon on l'émule
+   # Sinon on l'emule
    def cur_frame(offset=0):
      """ Retourne la frame d execution effective eventuellement en remontant
          de offset niveaux dans la pile d execution
@@ -57,8 +55,8 @@ except:
 
 
 def callee_where(niveau=4):
-   """ 
-      recupere la position de l appel 
+   """
+      recupere la position de l appel
    """
    frame=cur_frame(niveau)
    if frame == None: return 0,"inconnu",0,{}
@@ -71,7 +69,7 @@ def callee_where(niveau=4):
 def AsType(a):
    """
       Retourne le type d'un concept (a) à partir
-      des caractéristiques de l'objet Python
+      des caracteristiques de l'objet Python
    """
    if is_enum(a):  return AsType(a[0])
    if is_assd(a):  return type(a)
@@ -90,9 +88,9 @@ def prbanner(s):
 
 
 def repr_float(valeur):
-  """ 
-      Cette fonction représente le réel valeur comme une chaine de caractères
-      sous forme mantisse exposant si nécessaire cad si le nombre contient plus de
+  """
+      Cette fonction represente le reel valeur comme une chaine de caracteres
+      sous forme mantisse exposant si necessaire cad si le nombre contient plus de
       5 caractères
       NB : valeur est un réel au format Python ou une chaine de caractères représentant un réel
   """
@@ -151,3 +149,49 @@ def repr_float(valeur):
   s=s+'E'+neg*'-'+repr(cpt)
   return s
 
+
+def import_object(uri):
+    """Load and return a python object (class, function...).
+    Its `uri` looks like "mainpkg.subpkg.module.object", this means
+    that "mainpkg.subpkg.module" is imported and "object" is
+    the object to return.
+    """
+    path = uri.split('.')
+    modname = '.'.join(path[:-1])
+    if len(modname) == 0:
+        raise ImportError(u"invalid uri: %s" % uri)
+    mod = object = '?'
+    objname = path[-1]
+    try:
+        __import__(modname)
+        mod = sys.modules[modname]
+    except ImportError, err:
+        raise ImportError(u"can not import module : %s (%s)" % (modname, str(err)))
+    try:
+        object = getattr(mod, objname)
+    except AttributeError, err:
+        raise AttributeError(u"object (%s) not found in module '%s'. "
+            "Module content is: %s" % (objname, modname, tuple(dir(mod))))
+    return object
+
+
+class Enum(object):
+    """
+    This class emulates a C-like enum for python. It is initialized with a list
+    of strings to be used as the enum symbolic keys. The enum values are automatically
+    generated as sequencing integer starting at 0.
+    """
+    def __init__(self, *keys):
+        """Constructor"""
+        self._dict_keys = {}
+        for inum, key in enumerate(keys):
+            setattr(self, key, 2**inum)
+            self._dict_keys[2**inum] = key
+
+    def exists(self, value):
+        """Tell if value is in the enumeration"""
+        return self.get_id(value) is not None
+
+    def get_id(self, value):
+        """Return the key associated to the given value"""
+        return self._dict_keys.get(value, None)
index 5a85d29d4bed69e9e937633ee91e5318ff2bc930..e956f6ca600335a663bac95071664f89ef0a3fc1 100644 (file)
@@ -1,27 +1,27 @@
-#@ MODIF __init__ Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF __init__ Noyau  DATE 12/10/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
-""" 
+"""
     Ce package fournit les classes de base d'EFICAS.
     Ces classes permettent d'effectuer quelques opérations basiques :
 
@@ -38,6 +38,12 @@ import context
 import __builtin__
 __builtin__.CONTEXT=context
 
+def _(msg):
+    """Differs translation."""
+    # 'codex' should install its translation functions later
+    return msg
+__builtin__._ = _
+
 # Classes de base
 from N_SIMP import SIMP
 from N_FACT import FACT
index a5f2fc99c430f6e1d8ca68406892b7f78f7c5e41..8b0176cb78866916b156a03a4e8aebcafee91c42 100644 (file)
@@ -1,9 +1,9 @@
-#@ MODIF asojb Noyau  DATE 21/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF asojb Noyau  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
@@ -22,7 +22,7 @@
 """
    Description des OJB jeveux
 """
-from basetype import Type, MetaType
+from basetype import Type
 from asnom import SDNom
 from ascheckers import CheckLog
 import traceback,sys
index 5eb7449f4b5e887e7c4b5593c6fbd256e7599ca5..601809dfa04639124e6f2e5c3afadd4158e8491e 100644 (file)
@@ -1,22 +1,22 @@
-#@ MODIF basetype Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF basetype Noyau  DATE 28/06/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 """
@@ -38,7 +38,7 @@ C'est ce comportement qui est captur
 La classe `Type` hérite de BaseType et y associe la métaclasse MetaType.
 
 """
-from copy import copy,deepcopy
+
 import cPickle
 
 __docformat__ = "restructuredtext"
@@ -131,26 +131,35 @@ class BaseType(object):
             obj = getattr( self, nam )
             obj.reparent( self, nam )
 
+    def supprime(self, delete=False):
+        """Permet de casser les boucles de références pour que les ASSD
+        puissent être détruites.
+        Si `delete` vaut True, on supprime l'objet lui-même et pas
+        seulement les références remontantes."""
+        self._parent = None
+        self._name = None
+        for nam in self._subtypes:
+            obj = getattr(self, nam)
+            obj.supprime(delete)
+        #XXX MC : avec ce code, j'ai l'impression qu'on supprime aussi
+        # des attributs de classe, ce qui pose problème pour une
+        # instanciation future...
+        # Dans une version précédente, on utilisait l'attribut
+        # sd_deleted pour ne faire qu'une fois, à voir.
+        # Supprimer les références remontantes devrait suffir.
+        #if delete:
+            #while len(self._subtypes):
+                #nam = self._subtypes.pop(0)
+                #try:
+                    #delattr(self, nam)
+                #except AttributeError:
+                    #pass
+
     def base( self ):
         if self._parent is None:
             return self
         return self._parent.base()
 
-    def change_type(self, new_type, nomj=None):
-        """Méthode appelée quand on change a posteriori le type
-        du concept (pour les 'CO').
-        Si `nomj` est None, on prend `self.nom`.
-        """
-        self.__class__ = new_type
-        nomj = nomj or self.nom
-        new_type.dup_attr(self)
-
-        # Comment appeler AsBase.__init__ ?
-        # type(nomj)=str donc plus simple que dans AsBase.__init__...
-        assert isinstance(nomj, str), 'Valeur inattendue pour nomj : %s' % nomj
-        assert self.nomj is not self.__class__.nomj
-        self.nomj.nomj = nomj
-
 
 class Type(BaseType):
     __metaclass__ = MetaType
index 27c2528ef4714b8fe9ca7555aecfa4da9217abd0..bdd8c50e572075cbefe85bececa6cd32461015f1 100644 (file)
@@ -1,30 +1,36 @@
-#@ MODIF context Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF context Noyau  DATE 15/11/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
-
 _root=None
 _cata=None
 debug=0
+from Noyau.N_info import message, SUPERV
+
+# Le "current step" est l'étape courante.
+# Une macro se déclare étape courante dans sa méthode Build avant de construire
+# ses étapes filles ou dans BuildExec avant de les exécuter.
+# Les étapes simples le font aussi : dans Execute et BuildExec.
+# (Build ne fait rien pour une étape)
 
 def set_current_step(step):
    """
@@ -33,6 +39,7 @@ def set_current_step(step):
    global _root
    if _root : raise "Impossible d'affecter _root. Il devrait valoir None"
    _root=step
+   message.debug(SUPERV, "current_step = %s", step and step.nom, stack_id=-1)
 
 def get_current_step():
    """
index 56988b6dae8713a7b5da3c93c6d33d6d4f26e3d2..431d3b067a823d0ca3857b665d1a9cbaac6504d2 100644 (file)
@@ -1,24 +1,24 @@
-#@ MODIF nommage Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF nommage Noyau  DATE 25/10/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
@@ -26,7 +26,7 @@
    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.
@@ -40,6 +40,7 @@
 # Modules Python
 import re,string
 import linecache
+from functools import partial
 
 # Modules EFICAS
 import N_utils
@@ -48,7 +49,7 @@ regex1='=?\s*%s\s*\('
 #commentaire standard precede d'un nombre quelconque de blancs (pas multiligne)
 pattern_comment   = re.compile(r"^\s*#.*")
 
-def GetNomConceptResultat(ope):
+def _GetNomConceptResultat(ope, level=2):
   """
      Cette fonction recherche dans la pile des appels, l'appel à la commande
      qui doit etre situé à 2 niveaux au-dessus (cur_frame(2)).
@@ -58,14 +59,14 @@ def GetNomConceptResultat(ope):
      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 
+     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)
+  f=N_utils.cur_frame(level)
   lineno = f.f_lineno     # XXX Too bad if -O is used
   #lineno = f_lineno(f)  # Ne marche pas toujours
   co = f.f_code
@@ -148,3 +149,24 @@ def f_lineno(f):
        line = line + ord(tab[i+1])
    return line
 
+
+class NamingSystem:
+    """Cette classe définit un système de nommage dynamique des concepts."""
+    def __init__(self):
+        """Initialisation"""
+        self.native = _GetNomConceptResultat
+        self.use_global_naming()
+
+    def use_naming_function(self, function):
+        """Utilise une fonction particulière de nommage."""
+        self.naming_func = function
+
+    def use_global_naming(self):
+        """Utilise la fonction native de nommage."""
+        self.naming_func = partial(self.native, level=3)
+
+    def __call__(self, *args):
+        """Appel à la fonction de nommage."""
+        return self.naming_func(*args)
+
+GetNomConceptResultat = NamingSystem()
index 6a43ee357993d32ea7cfac87e187e49ebb5b812f..e19a5a3f481d9dfaad9dea82d431601445c585af 100644 (file)
@@ -836,6 +836,7 @@ DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
             op = None,
             fr = "Variable deterministe",
             ang = "Deterministic variable",
+            UIinfo = {"groupes": ("CACHE")},
             
   N = SIMP ( statut = 'o',
              typ = "TXM",
index 35cd8c86d4534e4ec4153b62c71821199d86bca0..54f17f952d9d88ffd9e6ed3d8779ef394dc1c856 100644 (file)
@@ -1,10 +1,10 @@
-# Choix des catalogues
 import os
-#rep_cata=os.path.dirname(os.path.abspath(__file__))
-rep_cata=os.getcwd()
 
+from Editeur.catadesc import CatalogDescription
+
+# Choix des catalogues
 catalogues = (
-# (code,version,catalogue,formatIn,formatOut)
-  ('OPENTURNS_STUDY','V8',os.path.join(rep_cata,'OpenTURNS_Cata_Study_V10.py'),'openturns_study','wrapper'),
+    CatalogDescription(identifier = "OPENTURNS_STUDY_V8",
+                       cata_file_path = os.path.join(os.path.abspath(os.path.dirname(fic_ini)), 'OpenTURNS_Cata_Study_V8.py'),
+                       file_format = "openturns_study"),
 )
-
index 7eab3837c7b0be9653f1ae7cad04dfdd28fbcf22..e6e8d9eb30d75e98be1c01a016c5442675982f17 100644 (file)
@@ -19,7 +19,7 @@
 #\r
 # ======================================================================\r
 """\r
-    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
 """\r
 # Modules Python\r
 import configuration\r
@@ -38,8 +38,8 @@ class CONFIG(configuration.CONFIG_BASE):
       self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','OpenTURNS_path']\r
       self.labels_eficas=["OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
       self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
-      self.setValeurs()\r
       self.cataFile="catalogues_openturns.ini"\r
+      self.setValeurs()\r
 \r
   #---------------------------------------\r
   def lecture_fichier_ini_standard(self):\r
index 84f4d9a30dd748bd01800054786693da8534a948..346915def53550668b867c9c4a2f64d88a8c8b74 100644 (file)
@@ -1 +1,4 @@
 code='OPENTURNS_STUDY'
+import sys, os
+if os.path.abspath(__file__) not in sys.path :
+   sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
index 7b64330474a755c72c8d964ffa072187890362d8..7f544647043e934929a3c67c4fadc1da27846609 100644 (file)
@@ -23,18 +23,18 @@ import os, sys
 # Les variables pouvant positionnees sont :
 print "import des prefs de OPENTURNS"
 
-# REPINI sert à localiser le fichier 
+# repIni sert à localiser le fichier 
 # initialdir sert comme directory initial des QFileDialog
 # positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
+repIni=os.path.dirname(os.path.abspath(__file__))
+initialdir=repIni 
 
-# INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(repIni,'..')
 
 
 # Codage des strings qui accepte les accents (en remplacement de 'ascii')
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
 encoding='iso-8859-1'
 
@@ -46,6 +46,8 @@ savedir         = os.environ['HOME']
 
 
 # OpenTURNS Python module
-OpenTURNS_path="/local00/home/dutka/OpenTURNS/dutka/build/install/lib/python2.4/site-packages"
+OpenTURNS_path=""
 # Choix des catalogues
-sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
+if len(OpenTURNS_path) > 0:
+    sys.path[:0]=[OpenTURNS_path]
+sys.path[:0]=[INSTALLDIR]
index e94540584293708817bcb7782183aa597ca7970b..d927f9e43d4e154df38171598a39a7be53758682 100644 (file)
@@ -23,18 +23,18 @@ import os, sys
 # Les variables pouvant positionnees sont :
 print "import des prefs de OPENTURNS"
 
-# REPINI sert à localiser le fichier 
+# repIni sert à localiser le fichier 
 # initialdir sert comme directory initial des QFileDialog
 # positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
+repIni=os.path.dirname(os.path.abspath(__file__))
+initialdir=repIni 
 
-# INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(repIni,'..')
 
 
 # Codage des strings qui accepte les accents (en remplacement de 'ascii')
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
 encoding='iso-8859-1'
 
@@ -48,4 +48,6 @@ savedir         = os.environ['HOME']
 # OpenTURNS Python module
 OpenTURNS_path="@OpenTURNS_PYTHON_MODULE_DIR@"
 # Choix des catalogues
-sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
+if len(OpenTURNS_path) > 0:
+    sys.path[:0]=[OpenTURNS_path]
+sys.path[:0]=[INSTALLDIR]
index cbc9643b665246da294a463883df11cce8432b27..46ffc331aa8f4193e18344b9cc0d20f263d72f9f 100644 (file)
@@ -1,11 +1,10 @@
-# Choix des catalogues
 import os
-rep_cata=os.getcwd()
 
+from Editeur.catadesc import CatalogDescription
+
+# Choix des catalogues
 catalogues = (
-# (code,version,catalogue,formatIn,formatOut)
-  #('OPENTURNS_WRAPPER','V1',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns_wrapper','wrapper'),
-  ('OPENTURNS_WRAPPER','V3',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V4.py'),'openturns_wrapper','wrapper'),
-  #('OPENTURNS','Wrapper',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns'),
+    CatalogDescription(identifier = "OPENTURNS_WRAPPER_V4",
+                       cata_file_path=os.path.join(os.path.abspath(os.path.dirname(fic_ini)),'OpenTURNS_Cata_Wrapper_V4.py'),
+                       file_format = "openturns_wrapper"),
 )
-
index f15bcd9932abaad886449fd8201713361e76acec..20dfb33d099dbf35c9b142f45aed5e25c1fc8698 100644 (file)
@@ -19,7 +19,7 @@
 #\r
 # ======================================================================\r
 """\r
-    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
 """\r
 # Modules Python\r
 import configuration\r
@@ -38,8 +38,8 @@ class CONFIG(configuration.CONFIG_BASE):
       self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','OpenTURNS_path']\r
       self.labels_eficas=["OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
       self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
-      self.setValeurs()\r
       self.cataFile="catalogues_openturns.ini"\r
+      self.setValeurs()\r
 \r
 \r
   #---------------------------------------\r
index a1c7888e9f09b67fa8830b85af670257fd863871..6bf5fd50434d14a2a70cf7e8250f963085b490cc 100644 (file)
@@ -19,3 +19,6 @@
 #
 # ======================================================================
 code = "OPENTURNS_WRAPPER"
+import sys, os
+if os.path.dirname(os.path.abspath(__file__)) not in sys.path :
+   sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
index 7b64330474a755c72c8d964ffa072187890362d8..50616278dcf85fd620995bb24c478abfb4358475 100644 (file)
@@ -23,18 +23,18 @@ import os, sys
 # Les variables pouvant positionnees sont :
 print "import des prefs de OPENTURNS"
 
-# REPINI sert à localiser le fichier 
+# repIni sert à localiser le fichier 
 # initialdir sert comme directory initial des QFileDialog
 # positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
-
-# INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
+repIni=os.path.dirname(os.path.abspath(__file__))
+initialdir=repIni 
 
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.abspath(os.path.join(repIni,'..'))
+sys.path.insert(0,INSTALLDIR)
 
 # Codage des strings qui accepte les accents (en remplacement de 'ascii')
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
 encoding='iso-8859-1'
 
@@ -46,6 +46,7 @@ savedir         = os.environ['HOME']
 
 
 # OpenTURNS Python module
-OpenTURNS_path="/local00/home/dutka/OpenTURNS/dutka/build/install/lib/python2.4/site-packages"
+OpenTURNS_path=""
 # Choix des catalogues
-sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
+if len(OpenTURNS_path) > 0:
+    sys.path[:0]=[OpenTURNS_path]
index e94540584293708817bcb7782183aa597ca7970b..d37dc624ba3684fcd46d8076014df9c96caef2b3 100644 (file)
@@ -23,18 +23,18 @@ import os, sys
 # Les variables pouvant positionnees sont :
 print "import des prefs de OPENTURNS"
 
-# REPINI sert à localiser le fichier 
+# repIni sert à localiser le fichier 
 # initialdir sert comme directory initial des QFileDialog
 # positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
-
-# INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
+repIni=os.path.dirname(os.path.abspath(__file__))
+initialdir=repIni 
 
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.abspath(os.path.join(repIni,'..'))
+sys.path.insert(0,INSTALLDIR)
 
 # Codage des strings qui accepte les accents (en remplacement de 'ascii')
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
 lang='fr'
 encoding='iso-8859-1'
 
@@ -48,4 +48,5 @@ savedir         = os.environ['HOME']
 # OpenTURNS Python module
 OpenTURNS_path="@OpenTURNS_PYTHON_MODULE_DIR@"
 # Choix des catalogues
-sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
+if len(OpenTURNS_path) > 0:
+    sys.path[:0]=[OpenTURNS_path]
index 8d77961e6c1c24f5df5617f41ad4a9ddeeafa517..fdac536a3da4574dbc313a2231cbadaa1aa347d6 100644 (file)
@@ -2,7 +2,7 @@ import os
 
 import prefs
 
-rep_cata = prefs.REPINI
+rep_cata = prefs.repIni
 
 # Accès à la documentation 
 path_doc              = os.path.join(rep_cata,'..','Doc')
index d0cd9255f8e537ee5dcb56ea50dbb2688da5adc5..57d38586b4111235b4070fe1e9b5b3744c399341 100644 (file)
@@ -1,20 +1,20 @@
 # -*- coding: utf-8 -*-
 import os
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+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')
+#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
index 9a0097becce320bf8841de45b67568d352cab583..0e0957b3af39fce707543503503a476c7d611a04 100644 (file)
 ## --------------------------------------------------
 #
 from Accas import *
+
 #
 #CONTEXT.debug = 1
 JdC = JDC_CATA ( code = 'SEP',
-                 execmodul = None,
-                # regles = ( AU_MOINS_UN ( 'M_TUBE','MAILLAGE_COUDE','CHARGE_LIMITE ), ),
-                 regles = ( AU_MOINS_UN ( 'S_EP_INTERNE',), ),
-                 # Fin JDC_CATA
+                execmodul = None,
+               # regles=(AU_MOINS_UN('STRUCTURE_SIMPLE','STRUCTURE_COMPOSEE',),),
+                regles=(AU_PLUS_UN('STRUCTURE_SIMPLE',),),
+                       )# Fin JDC_CATA
 #
 
-S_EP_INTERNE= MACRO (nom       = 'S_EP_INTERNE',
+
+STRUCTURE_SIMPLE= MACRO (nom       = 'STRUCTURE_SIMPLE',
               op        = None,
               sd_prod   = None,
               reentrant = 'n',
               UIinfo    = {"groupes":("Outils métier",)},
-              fr        = "Sous epaisseur  ",
+              fr        = "sous epaisseur  ",
               dir_name  = SIMP(statut='o', typ='TXM',),
-              methode   = SIMP(statut='o', typ='TXM',into=('generatrices','tortue',),),
-              PARA_GEOM = FACT( statut='o',
-                               max=1,
-                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
-                               unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
-                               ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),   
-                               ),
-)
+              
+              
+              TYPE_SEP          = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EP_INTERNE','COUDE_SOUS_EP_INTERNE')),
+             
+              CHARGE_LIMITE     = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+                              
 
+              b_tube_sous_epaisseur =BLOC(condition="(TYPE_SEP=='TUBE_SOUS_EP_INTERNE') ",
+                           
+                      MAIL_TUBE = FACT( statut='o',
+                          fr        = "Parametres maillage du tube  ",
+                          POINTS_DE_MESURE = FACT( statut='o',
+                                    FICHIER1 =SIMP(statut='f',typ='Fichier',
+                                                   fr="Format du fichier : CSV.",),
+                                    FICHIER2 =SIMP(statut='f',typ='Fichier',
+                                                   fr="Format du fichier : CSV.",),                         
+                                                 ), 
+                          R_EXT                    =SIMP(statut='o', typ='R', fr="rayon exterieur du tube"),
+                          EP_NOMINALE              =SIMP(statut='o', typ='R', fr="epaisseur nominale du tube sans sous epaisseur"),
+                          NB_SEG_AMORTISSEMENT     =SIMP(statut='o', typ='I', defaut=11    , val_min=1, fr="nombre de segments dans la longueur d'amortissement"),
+                          NB_SEG_TRANSITION        =SIMP(statut='o', typ='I', defaut=4     , val_min=1, fr="nombre de segments dans longueur de transition"),
+                          NB_SEG_GENERATRICES      =SIMP(statut='o', typ='I', defaut=5     , val_min=1, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+                          PETITE_DISTANCE          =SIMP(statut='o', typ='R', defaut=100.0 , fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+                          NB_SEG_PETITES_DISTANCES =SIMP(statut='o', typ='I', defaut=3  , val_min=3   , fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+                          NB_SEG_ARC               =SIMP(statut='o', typ='I', defaut=5  , val_min=2   , fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+                          NB_SEG_EP                =SIMP(statut='o', typ='I', defaut=3  , val_min=1   , fr="nombre de segments dans l'epaisseur du tube"),
+                                       ),
+                         
+                          INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                          ),
 
+
+                b_coude_sous_epaisseur =BLOC(condition="(TYPE_SEP=='COUDE_SOUS_EP_INTERNE') ",
+                                                                                
+                          MAIL_COUDE = FACT( statut='o',
+                              fr        = "Parametres maillage du coude  ",
+                              POINTS_DE_MESURE = FACT( statut='o',
+                                        FICHIER1 =SIMP(statut='f',typ='Fichier',
+                                                       fr="Format du fichier : CSV.",),
+                                                     ),
+                              R_COUDE                    =SIMP(statut='o', typ='R', fr="rayon du coude"),
+                              R_EXT                      =SIMP(statut='o', typ='R', fr="rayon exterieur"),
+                              EP_NOMINALE                =SIMP(statut='o', typ='R', fr="epaisseur nominale sans sous epaisseur"),
+                              ANGLE_COUDE                =SIMP(statut='o', typ='R', defaut=90  , val_min=90. , val_max=90.   ,fr="angle du coude"),
+                              ORIENTATION_COUDE          =SIMP(statut='o', typ='TXM',defaut='D',into=('D','G'),fr="orientation du coude"),
+                              LONGUEUR_PROLONGEMENT_AMONT=SIMP(statut='o', typ='R', fr="longueur du prolongement amont"),
+                              LONGUEUR_PROLONGEMENT_AVAL =SIMP(statut='o', typ='R', fr="longueur du prologenment aval"),
+                              PAS_MESURE                 =SIMP(statut='o', typ='I', fr="pas de la mesure"),
+                              DEBUT_MESURE               =SIMP(statut='o', typ='R', fr="distance de la premiere mesure"),
+                              ANGLE_MESURE               =SIMP(statut='o', typ='R', defaut=45.  ,fr="angle entre deux generatrices"),
+                              NB_SEG_PROLONGEMENT_AMONT  =SIMP(statut='o', typ='I', defaut=6   , val_min=1  ,fr="nombre de segments dans la longueur de prolongement amont"),
+                              NB_SEG_PROLONGEMENT_AVAL   =SIMP(statut='o', typ='I', defaut=6   , val_min=1  ,fr="nombre de segments dans la longueur de prolongement aval"),
+                              NB_SEG_AMORTISSEMENT       =SIMP(statut='o', typ='I', defaut=10  , val_min=1  ,fr="nombre de segments dans la longueur d'amortissement"),
+                              NB_SEG_TRANSITION          =SIMP(statut='o', typ='I', defaut=5   , val_min=1  ,fr="nombre de segments dans longueur de transition"),
+                              NB_SEG_GENERATRICES        =SIMP(statut='o', typ='I', defaut=25  , val_min=25  ,fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+                              NB_SEG_ARC                 =SIMP(statut='o', typ='I', defaut=7   , val_min=2  ,fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+                              NB_SEG_EP                  =SIMP(statut='o', typ='I', defaut=3   , val_min=1  ,fr="nombre de segments dans l'epaissuer"),
+                                           ),
+                    
+                              INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                            ),
+                                              
+                             
+                 b_charge_limite_non=BLOC(condition = "CHARGE_LIMITE == 'NON' ",
+                              INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                         ),
+
+                 b_charge_limite_oui=BLOC(condition = "((CHARGE_LIMITE == 'OUI') )",
+                                                                                                                                    
+                              TYPE_CHARGE_LIMITE= SIMP(statut='o', typ='TXM', into=('CHARGE_LIMITE_INF','CHARGE_LIMITE_SUP',),),
+                                                
+                              PARAMETRES_CALCUL = FACT( statut='o',
+                                   fr        = "Parametres pour calcul de charge limite  ",
+                                                    
+                                   MEMOIRE=SIMP(statut='o', typ='I', ),
+                                   TEMPS  =SIMP(statut='o', typ='I', ),
+                                   MACHINE=SIMP(statut='o', typ='TXM', defaut='LOCAL',into=('LOCAL','DISTANT'),),
+                                                    
+                                                      ),
+                              PARAMETRES_CHARGE_LIMITE = FACT( statut='o',
+                                   fr        = "Parametres materiau pour calcul de charge limite   ", 
+                                                    
+                                   E =SIMP(statut='o', typ='R', fr="Module d'Young"),
+                                   NU=SIMP(statut='o', typ='R', fr="coefficient de poisson"),
+                                   SY=SIMP(statut='o', typ='R', fr="limite d'elasticite"),
+                                                             ),   
+                                                  
+                                         ),
+)
index ca1eb025e6700878226035b80a22349c3930f659..7aee501bbab09a464e8ae070cde4627a8cc0e47f 100644 (file)
@@ -9,6 +9,6 @@ catalogues = (
   #('SEP','V1_1',os.path.join(rep_cata,'SEP_Cata_V1_1.py'),'SEP','SEP'),
   #('SEP','V1_2',os.path.join(rep_cata,'SEP_Cata_V1_2.py'),'SEP','SEP'),
   #  ('SEP','V1_3',os.path.join(rep_cata,'SEP_Cata_V1_3.py'),'SEP','SEP'),
-     ('SEP','V1',os.path.join(rep_cata,'SEP_Cata_V0_1.py'),'SEP','SEP'),
+     ('SEP','V1',os.path.join(rep_cata,'SEP_Cata_V0.py'),'SEP','SEP'),
 )
 
index 4ee8cc32b2c101471ba9a6e6755100a8981722ed..83dff66c3e4cb84983ca71981aa7d1ef05b41c31 100644 (file)
@@ -22,7 +22,7 @@ import os
 
 from Sous_epaisseur import prefs
 
-rep_cata = os.path.join(prefs.REPINI,'Cata')
+rep_cata = os.path.join(prefs.repIni,'Cata')
 print rep_cata
 
 # Accès à la documentation Aster
index c29caf843d2352d54e16fe0a52d089504514ca40..016a9cc4272c2b4c48f2e0725395f68126190ee3 100644 (file)
 
 import os,sys
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
-repIni=REPINI
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+INSTALLDIR=os.path.join(repIni,'..')
 
 # CODE_PATH sert à localiser Noyau et Validation éventuellement
 # non contenus dans la distribution EFICAS
@@ -47,7 +46,7 @@ encoding='iso-8859-1'
 
 
 EditeurDir=INSTALLDIR+"/Editeur"
-sys.path[:0]=[INSTALLDIR]
+sys.path.insert(0,INSTALLDIR)
 
 ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
 
index c29caf843d2352d54e16fe0a52d089504514ca40..8ef0853052a2b9524efaa7f5dcc6c24091e9d79d 100644 (file)
 
 import os,sys
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
-repIni=REPINI
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+INSTALLDIR=os.path.join(repIni,'..')
+sys.path.insert(0,INSTALLDIR)
 
 # CODE_PATH sert à localiser Noyau et Validation éventuellement
 # non contenus dans la distribution EFICAS
@@ -47,8 +47,6 @@ encoding='iso-8859-1'
 
 
 EditeurDir=INSTALLDIR+"/Editeur"
-sys.path[:0]=[INSTALLDIR]
-
 ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
 
 # Preference
index b7ac1321b9bb53075f1fe71f852367b5cc4ff39c..d39118137eeacbc48c38b394cd15aeacd9c8d2f1 100644 (file)
@@ -2,7 +2,7 @@ import os
 
 import prefs
 
-rep_cata = prefs.REPINI
+rep_cata = prefs.repIni
 
 # Accès à la documentation 
 path_doc              = os.path.join(rep_cata,'..','Doc')
index d0cd9255f8e537ee5dcb56ea50dbb2688da5adc5..7ee4d6b512560ce3abd079b7cebe186c1cb7c283 100644 (file)
@@ -1,20 +1,19 @@
 # -*- coding: utf-8 -*-
 import os
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+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
index d4118db021ad7e7ed24b7cdabdfbf814e12af913..55246c0f3039f9ce6bcb886c037cbcefcf76554f 100644 (file)
@@ -22,8 +22,8 @@ import os
 
 import prefs
 
-rep_cata = os.path.abspath(os.path.join(prefs.REPINI,'../Aster/Cata'))
-rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+rep_cata = os.path.abspath(os.path.join(prefs.repIni,'../Aster/Cata'))
+rep_Pmw = os.path.join(prefs.repIni,'../Pmw')
 
 # Accès à la documentation Aster
 path_doc              = os.path.join(rep_cata,'..','Doc')
index 7f943db99eff4f9501834fa43b9dfa409ba51a40..7c3ebd00eb819c6c2a74f4f930dd300dec644d14 100644 (file)
 
 import os,sys
 
-# REPINI sert à localiser le fichier editeur.ini
+# repIni sert à localiser le fichier editeur.ini
 # Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
-repIni=REPINI
+repIni=os.path.dirname(os.path.abspath(__file__))
 
 # INSTALLDIR sert à localiser l'installation d'Eficas
 # Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
+INSTALLDIR=os.path.join(repIni,'..')
 
 # CODE_PATH sert à localiser Noyau et Validation éventuellement
 # non contenus dans la distribution EFICAS
index 5884431ec04d28811ef72220740e4fd7e773043d..d1c51c8034068c8b698f8418d678be08dcc0ef01 100644 (file)
@@ -24,7 +24,7 @@ install (
           FILES
                calcG.py changeValeur.py dictErreurs.py __init__.py inseremocle.py 
                load.py log.py mocles.py movemocle.py parseur.py regles.py removemocle.py 
-               renamemocle.py traduitV7V8.py traduitV8V9.py utils.py
+               renamemocle.py traduitV7V8.py traduitV8V9.py traduitV9V10.py utils.py
                visiteur.py
           DESTINATION ${CMAKE_INSTALL_PREFIX}/Traducteur
        )
index 85d9fe6669b67dda3c542d2dc38eea12dc91b78c..086da0ec3325f874d698997ce24bfd29f8f76fe5 100644 (file)
@@ -55,3 +55,37 @@ def GenereErreurMotCleInFact(jdc,command,fact,mocle):
                    else :
                        EcritErreur((command,fact,mocle,),c.lineno)
 
+def GenereErreurMCF(jdc,command,fact):
+    for c in jdc.root.childNodes:
+        if c.name != command:continue
+        for mc in c.childNodes:
+            if mc.name != fact:
+                continue
+            else : 
+                EcritErreur((command,fact,),c.lineno)
+
+def GenereErreurValeur(jdc,command,fact,list_valeur):
+    for c in jdc.root.childNodes:
+        if c.name != command:continue
+        for mc in c.childNodes:
+            if mc.name != fact:continue
+            texte=mc.getText(jdc)
+            for valeur in list_valeur:
+               trouve=texte.find(valeur)
+               if trouve > -1 :  
+                  logging.warning("%s doit etre supprimee ou modifiee dans %s : ligne %d",valeur,c.name,mc.lineno)
+
+def GenereErreurValeurDsMCF(jdc,command,fact,mocle,list_valeur):
+    for c in jdc.root.childNodes:
+        if c.name != command:continue
+        for mc in c.childNodes:
+            if mc.name != fact:continue
+            l=mc.childNodes[:]
+            for ll in l:
+                for n in ll.childNodes:
+                    if n.name != mocle:continue
+                    texte=n.getText(jdc)
+                    for valeur in list_valeur:
+                        trouve=texte.find(valeur)
+                        if trouve > -1 :  
+                           logging.warning("%s doit etre supprimee ou modifiee dans %s : ligne %d",valeur,c.name,n.lineno)
index f8307f5e1ed910dc37be11a40195644ad85f097f..e5d712fd5193fc7880e13d9dcf6cdf9908f509c7 100644 (file)
@@ -32,7 +32,7 @@ def insereMotCleDansCommande(jdc,command,texte):
     if numcol > 0 :
        jdc.splitLine(command.lineno,numcol)
     indice = -1
-    while texte[indice] == " " : 
+    while texte[indice] == " " or texte[indice] == "\n"
        indice = indice -1
     if texte[indice] != "," : texte=texte+","
     texteinfo=texte
@@ -204,6 +204,14 @@ def chercheOperInsereFacteurSiRegle(jdc,nomcommande,nouveau,liste_regles, estunF
     if nomcommande  not in jdcSet : return
     mesRegles=regles.ensembleRegles(liste_regles)
     chercheOperInsereFacteur(jdc,nomcommande,nouveau,mesRegles,estunFacteur)
+
+#----------------------------------------------------------------------------------------
+def chercheOperInsereMotCleSiRegle(jdc,nomcommande,nouveau,liste_regles, estunFacteur=0):
+#----------------------------------------------------------------------------------------
+    if nomcommande  not in jdcSet : return
+    mesRegles=regles.ensembleRegles(liste_regles)
+    chercheOperInsereFacteur(jdc,nomcommande,nouveau,mesRegles,estunFacteur)
+
     
 #---------------------------------------------------------------------------------------------------------
 def chercheOperInsereFacteurSiRegleAvecAvertissement(jdc,nomcommande,nouveau,liste_regles, estunFacteur=1):
@@ -247,3 +255,31 @@ def AjouteMotClefDansFacteurSiRegle(jdc,commande,fact,nouveau,liste_regles,estun
     mesRegles=regles.ensembleRegles(liste_regles)
     AjouteMotClefDansFacteur(jdc,commande,fact,nouveau,mesRegles,estunFacteur)
 
+#-------------------------------------------------------------------------------------------
+def AjouteMotClefDansFacteurCourantSiRegle(jdc,commande,fact,nouveau,liste_regles):
+#-------------------------------------------------------------------------------------------
+#
+    if commande  not in jdcSet : return
+    ensemble=regles.ensembleRegles(liste_regles)
+    commands= jdc.root.childNodes[:]
+    commands.reverse()
+    boolChange=0
+    for c in commands:
+        if c.name != commande : continue
+        for mcF in c.childNodes:
+          if mcF.name != fact : continue
+          l=mcF.childNodes[:]
+          l.reverse()
+          for ll in l:
+             if ensemble.verif(ll) == 0 : continue
+             boolChange=1
+             n=ll.childNodes[0]
+             ligneaCouper=n.lineno-1
+             numcol=n.colno
+             jdc.splitLine(ligneaCouper+1,numcol)
+             texte=nouveau+",\n"
+             jdc.addLine(texte,ligneaCouper+1)
+             logging.info("Insertion de %s dans %s : ligne %d", nouveau,c.name,ligneaCouper+1)
+             if numcol > 0 :    
+                 jdc.joinLineandNext(ligneaCouper+1)
+    if boolChange : jdc.reset(jdc.getSource())
index fef058938d8859975f473b2d1df60a01bb131d02..293d4b0ae06d2ac7a55f5a8de584c6ccb47ee9d4 100644 (file)
@@ -3,7 +3,7 @@
 import logging
 import removemocle
 import inseremocle
-from parseur import FactNode
+from parseur import lastparen
 from dictErreurs import jdcSet
 debug=0
 
@@ -18,18 +18,22 @@ def moveMotCleFromFactToFather(jdc,command,fact,mocle):
     commands.reverse()
     for c in commands:
         if c.name != command:continue
+        boolchange_c=0
         for mc in c.childNodes:
             if mc.name != fact:continue
             l=mc.childNodes[:]
             for ll in l:
                 for n in ll.childNodes:
                     if n.name != mocle:continue
+                    # test boolchange_c :il faut le faire une seule fois par commande sinon duplication du mot clé
+                    if boolchange_c != 0 :continue
                     if debug : print "Changement de place :", n.name, n.lineno, n.colno
                     MonTexte=n.getText(jdc);
                     boolChange=1
+                    boolchange_c=1
                     inseremocle.insereMotCle(jdc,c,MonTexte)
                     logging.info("Changement de place  %s ligne %s ",n.name, n.lineno)
-            
+
     if boolChange : jdc.reset(jdc.getSource())
     removemocle.removeMotCleInFact(jdc,command,fact,mocle)
 
@@ -127,3 +131,92 @@ def moveMotClefInOperToFact(jdc,oper,mocle,factcible):
         inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
     if boolChange : jdc.reset(jdc.getSource())
     removemocle.removeMotCle(jdc,oper,mocle)
+
+#------------------------------------------------------
+def copyMotClefInOperToFact(jdc,oper,mocle,factcible):
+#------------------------------------------------------
+
+    if oper not in jdcSet : return
+    if debug : print "movemocleinoper pour " ,oper,mocle,factcible
+    boolChange=9
+    commands= jdc.root.childNodes[:]
+    commands.reverse()
+    for c in commands:
+        if c.name != oper : continue
+        cible=None
+        for mc in c.childNodes:
+           if mc.name != factcible : 
+              continue
+           else :
+              cible=mc
+              break
+        if cible==None :
+           if debug : print "Pas de changement pour ", oper, " ", factcible, " ", "cible non trouvée"
+           continue
+
+        source=None
+        for mc in c.childNodes:
+           if mc.name != mocle:
+              continue
+           else :
+              source=mc
+              break
+        if source==None :
+           if debug : print "Pas de changement pour ", oper, " ", mocle, " source non trouvée"
+           continue
+        MonTexte=source.getText(jdc);
+        boolChange=1
+        inseremocle.insereMotCleDansFacteur(jdc,cible,MonTexte)
+    if boolChange : jdc.reset(jdc.getSource())
+    
+#----------------------------------------------------------------------
+def moveMCFToCommand(jdc,command,factsource,commandcible,factcible):
+#----------------------------------------------------------------------
+# exemple CONTACT en 10
+# CONTACT devient commande DEFI_CONTACT/ZONE 
+# 
+    if command not in jdcSet : return
+    boolChange=0
+    commands= jdc.root.childNodes[:]
+    commands.reverse()
+    for c in commands:
+       if c.name != command  : continue
+       for mcF in c.childNodes:
+           if mcF.name != factsource : continue
+           l=mcF.getText(jdc)
+           texte=l.replace(factsource,factcible)
+           texte='xxxx='+commandcible+'('+texte+')\n'
+           jdc.splitLine(c.lineno,0)
+           jdc.addLine(texte,c.lineno)
+           logging.info("Deplacement de %s dans %s ligne %s",factsource,commandcible,c.lineno)
+           boolChange=1
+    if boolChange :
+        jdc.reset(jdc.getSource())
+        jdcSet.add(commandcible)
+
+#--------------------------------------------------------------------
+def EclaMotCleToFact(jdc,command,motcle,mot1,mot2,defaut=0):
+#--------------------------------------------------------------------------
+#  exemple STA10 pesanteur devient MCF avec eclatement des valeurs dans les MC
+# On suppose que le MC est sur une seule ligne
+    if command  not in jdcSet : return
+    boolChange=0
+    for c in jdc.root.childNodes:
+       if c.name != command  : continue
+       trouveUnMC=0
+       for mc in c.childNodes:
+           if mc.name != motcle : continue
+           trouveUnMC=1
+           TexteMC=mc.getText(jdc)
+           indexLigneGlob=mc.lineno-1
+           MaLigneGlob=jdc.getLines()[indexLigneGlob]
+           Ligne=TexteMC.split('(')[1].split(')')[0].split(',')
+           motcle1=mot1+"="+Ligne[0]
+           motcle2=mot2+"=("+Ligne[1]+','+Ligne[2]+','+Ligne[3]+')'
+           texte=motcle+'=_F('+motcle1+','+motcle2+')'
+           num=lastparen(TexteMC)
+           Nouveau=MaLigneGlob.replace(TexteMC[0:num],texte)
+           jdc.getLines()[indexLigneGlob]=Nouveau
+           logging.info("Transformation de %s dans %s ligne %s",motcle,command,c.lineno)
+           boolChange=1
+    if boolChange : jdc.reset(jdc.getSource())
index d07c7b9c076fe2739b6ddbc7a1376adf2af46137..e9d48d08cf67a06d0cd2ad805a59163d9721fe0b 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 import logging
 import string
-from parseur import FactNode
+#from parseur import FactNode
 debug=0
 
 
@@ -79,7 +79,23 @@ class existeMCsousMCF :
                if mc.name != self.MC : continue
                bool=1
       return bool
-      
+
+#----------------------
+class existeMCsousMCFcourant :
+#----------------------
+   def __init__(self,list_arg):
+      self.liste=list_arg;
+      self.MC=self.liste[0]
+
+   def verif(self,mcf):
+      bool=0
+      l=mcf.childNodes[:]
+      l.reverse()
+      for mc in l:
+         if mc.name != self.MC : continue
+         bool=1
+      return bool
+
 #-----------------------------------------
 class nexistepasMCsousMCF(existeMCsousMCF):
 #-----------------------------------------
@@ -92,6 +108,18 @@ class nexistepasMCsousMCF(existeMCsousMCF):
        if bool : return 0
        return 1
 
+#-----------------------------------------
+class nexistepasMCsousMCFcourant(existeMCsousMCFcourant):
+#-----------------------------------------
+   def __init__(self,list_arg):
+       existeMCsousMCFcourant.__init__(self,list_arg)
+      
+
+   def verif(self,commande):
+       bool=existeMCsousMCFcourant.verif(self,commande)
+       if bool : return 0
+       return 1
+
 #-------------
 class existe :
 #--------------
@@ -159,6 +187,76 @@ class MCsousMCFaPourValeur :
                bool=1
       return bool
 
+#-------------------------------
+class MCsousMCFcourantaPourValeur :
+#------------------------------
+   def __init__(self,list_arg):
+      assert (len(list_arg)==3)
+      self.genea=list_arg[0:-1]
+      self.MC=list_arg[0]
+      self.Val=list_arg[1]
+      self.Jdc=list_arg[2]
+
+   def verif(self,mcf):
+      bool=0       
+      l=mcf.childNodes[:]
+      l.reverse()
+      for mc in l:
+        if mc.name != self.MC : continue
+        TexteMC=mc.getText(self.Jdc)
+        if (TexteMC.find(self.Val) < 0 ): continue
+        bool=1
+      return bool
+
+
+#-----------------------------
+class MCsousMCFaPourValeurDansListe :
+#----------------------------
+   def __init__(self,list_arg):
+      assert (len(list_arg)==4)
+      self.genea=list_arg[0:-2]
+      self.MCF=list_arg[0]
+      self.MC=list_arg[1]
+      self.LVal=list_arg[2]
+      self.Jdc=list_arg[3]
+
+   def verif(self,commande):
+      bool=0
+      for mcf in commande.childNodes :
+         if mcf.name != self.MCF : continue 
+         l=mcf.childNodes[:]
+         l.reverse()
+         for ll in l:
+            for mc in ll.childNodes:
+               if mc.name != self.MC : continue
+               TexteMC=mc.getText(self.Jdc)
+               for Val in self.LVal:
+                   if (TexteMC.find(Val) < 0 ): continue
+                   bool=1
+      return bool      
+
+#-----------------------------
+class MCsousMCFcourantaPourValeurDansListe :
+#----------------------------
+   def __init__(self,list_arg):
+      assert (len(list_arg)==3)
+      self.genea=list_arg[0:-1]
+      self.MC=list_arg[0]
+      self.LVal=list_arg[1]
+      self.Jdc=list_arg[2]
+
+   def verif(self,mcf):
+      bool=0      
+      l=mcf.childNodes[:]
+      l.reverse()
+      for mc in l:
+        if mc.name != self.MC : continue
+        TexteMC=mc.getText(self.Jdc)
+        for Val in self.LVal:
+           if (TexteMC.find(Val) < 0 ): continue
+           bool=1
+      return bool   
+  
 #-------------------------------
 class MCaPourValeur :
 #------------------------------
@@ -177,5 +275,5 @@ class MCaPourValeur :
          bool=1
       return bool
 
-dictionnaire_regle={"existe":existe,"nexistepas":nexistepas,"existeMCFParmi":existeMCFParmi,"existeMCsousMCF":existeMCsousMCF,"nexistepasMCsousMCF":nexistepasMCsousMCF,"MCsousMCFaPourValeur":MCsousMCFaPourValeur,"MCaPourValeur":MCaPourValeur}
+dictionnaire_regle={"existe":existe,"nexistepas":nexistepas,"existeMCFParmi":existeMCFParmi,"existeMCsousMCF":existeMCsousMCF,"nexistepasMCsousMCF":nexistepasMCsousMCF,"MCsousMCFaPourValeur":MCsousMCFaPourValeur,"MCsousMCFaPourValeurDansListe":MCsousMCFaPourValeurDansListe,"MCaPourValeur":MCaPourValeur,"existeMCsousMCFcourant":existeMCsousMCFcourant,"nexistepasMCsousMCFcourant":nexistepasMCsousMCFcourant,"MCsousMCFcourantaPourValeur":MCsousMCFcourantaPourValeur,"MCsousMCFcourantaPourValeurDansListe":MCsousMCFcourantaPourValeurDansListe}
 SansRegle=pasDeRegle()
index 5f6335785a82709f80405940e1b78ddd7ede2f59..d90ad636818b211049698c25fde43564f74708d3 100644 (file)
@@ -64,7 +64,7 @@ def removeCommande(jdc,command,ensemble=regles.SansRegle,erreur=0):
         boolChange=1
         if erreur : EcritErreur((command,),c.lineno)
         jdc.supLignes(c.lineno,c.endline)
-        logging.warning("Suppression de: %s ligne %s",c.name,c.lineno)
+        logging.warning("Suppression de %s ligne %s",c.name,c.lineno)
     if boolChange : jdc.reset(jdc.getSource())
 
 #-------------------------------------------------------------
@@ -78,7 +78,7 @@ def removeCommandeSiRegleAvecErreur(jdc,command,liste_regles):
 def removeMC(jdc,c,mc):
 #---------------------------------
     if debug : print "Suppression de:",c.name,mc.name,mc.lineno,mc.colno,mc.endline,mc.endcol
-    logging.info("Suppression de: %s, %s, ligne %d",c.name,mc.name,mc.lineno)
+    logging.info("Suppression de %s dans %s ligne %d",mc.name,c.name,mc.lineno)
 
     if mc.endline > mc.lineno:
         if debug:print "mocle sur plusieurs lignes--%s--" % jdc.getLines()[mc.lineno-1][mc.colno:]
@@ -135,6 +135,30 @@ def removeMotCleInFactSiRegleAvecErreur(jdc,command,fact,mocle,liste_regles):
     removeMotCleInFact(jdc,command,fact,mocle,mesRegles,erreur)
 
 
+#----------------------------------------------------------------------
+def removeMotCleInFactCourantSiRegle(jdc,command,fact,mocle,liste_regles,erreur=0):
+#----------------------------------------------------------------------
+    if command not in jdcSet : return
+    ensemble=regles.ensembleRegles(liste_regles)
+    commands= jdc.root.childNodes[:]
+    commands.reverse()
+    boolChange=0
+    for c in commands:
+        if c.name != command:continue
+        for mc in c.childNodes:
+            if mc.name != fact:continue
+            l=mc.childNodes[:]
+            l.reverse()
+            for ll in l:
+                if ensemble.verif(ll) == 0 : continue
+                for n in ll.childNodes:
+                    if n.name != mocle:continue
+                    if erreur : EcritErreur((command,fact,mocle),c.lineno)
+                    boolChange=1
+                    removeMC(jdc,c,n)
+
+    if boolChange : jdc.reset(jdc.getSource())
+    
 #------------------------------------------
 def fusionne(jdc,numLigne):
 #------------------------------------------
index 90c0aa35e2f4533a7f5a00b99b2a75ca8a8b0930..f0f99b96b3826896407660095281225e82d77b1f 100644 (file)
@@ -111,6 +111,33 @@ def renameMotCleInFactSiRegle(jdc,command,fact,mocle,new_name,liste_regles):
     mesRegles=regles.ensembleRegles(liste_regles)
     renameMotCleInFact(jdc,command,fact,mocle,new_name,mesRegles)
 
+def renameMotCleInFactCourantSiRegle(jdc,command,fact,mocle,new_name,liste_regles,erreur=0):
+#--------------------------------------------------------------------------
+    if command not in jdcSet : return
+    ensemble=regles.ensembleRegles(liste_regles)
+    boolChange=0
+    for c in jdc.root.childNodes:
+        if c.name != command:continue
+        for mc in c.childNodes:
+            if mc.name != fact:continue
+            l=mc.childNodes[:]
+            #on itere a l'envers
+            l.reverse()
+            for ll in l:
+                if ensemble.verif(ll) == 0 : continue
+                for n in ll.childNodes:
+                    if n.name != mocle:continue
+                    s=jdc.getLines()[n.lineno-1]
+                    jdc.getLines()[n.lineno-1]=s[:n.colno]+new_name+s[n.colno+len(mocle):]
+                    boolChange=1
+                    if erreur :
+                       EcritErreur((command,fact,mocle),c.lineno)
+                    else :
+                       logging.info("Renommage de: %s, ligne %s, en %s",n.name,n.lineno,new_name)
+
+    if boolChange : jdc.reset(jdc.getSource())
+    
+    
 #-----------------------------------------------------------------
 def renameCommande(jdc,command,new_name,ensemble=regles.SansRegle):
 #-----------------------------------------------------------------
diff --git a/Traducteur/traduitV9V10.py b/Traducteur/traduitV9V10.py
new file mode 100755 (executable)
index 0000000..0330043
--- /dev/null
@@ -0,0 +1,731 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+"""
+usage="""usage: %prog [options]
+Typical use is:
+  python traduitV9V10.py --infile=xxxx --outfile=yyyy
+"""
+
+import log
+import optparse
+import sys
+
+from load   import getJDC
+from mocles import parseKeywords
+from removemocle  import *
+from renamemocle  import *
+from renamemocle  import *
+from inseremocle  import *
+from changeValeur import *
+from movemocle    import *
+from dictErreurs  import * 
+from regles import pasDeRegle
+
+atraiter=("AFFE_CARA_ELEM","AFFE_CHAR_CINE","AFFE_CHAR_MECA","AFFE_CHAR_MECA_F","AFFE_MATERIAU","AFFE_MODELE",
+          "CALC_CHAM_ELEM","CALC_ELEM","CALC_G","CALC_META","CALC_MODAL","CALC_PRECONT","CALCUL","CALC_MISS","CALC_NO",
+          "COMB_FOURIER","COMB_SISM_MODAL","CREA_CHAMP","CREA_RESU",
+          "DEFI_BASE_MODALE","DEFI_COMPOR","DEFI_CONTACT","DEFI_GLRC","DEFI_LIST_INST","DEFI_MATERIAU",
+          "DYNA_ISS_VARI","DYNA_LINE_HARM","DYNA_LINE_TRAN","DYNA_NON_LINE","DYNA_TRAN_MODAL",
+          "EXTR_RESU","IMPR_MACR_ELEM","IMPR_MATRICE","IMPR_RESU","LIRE_RESU",
+          "MACR_ADAP_MAIL","MACR_ASCOUF_CALC","MACR_ASPIC_CALC","MACR_ECREVISSE",
+          "MACR_INFO_MAIL","MACR_LIGN_COUPE","MACRO_ELAS_MULT","MACRO_MATR_AJOU","MACRO_MISS_3D",
+          "MECA_STATIQUE","MODE_ITER_INV","MODE_ITER_SIMULT","MODE_STATIQUE","MODI_REPERE",
+          "POST_CHAM_XFEM","POST_ELEM","POST_GP","POST_K1_K2_K3","POST_RCCM","POST_RELEVE_T","POST_ZAC",
+          "PROJ_CHAMP","PROJ_MESU_MODAL","RECU_FONCTION","REST_SOUS_STRUC","REST_GENE_PHYS","REST_SPEC_PHYS",
+          "STAT_NON_LINE","SIMU_POINT_MAT","TEST_RESU","THER_LINEAIRE","THER_NON_LINE","THER_NON_LINE_MO",)
+
+dict_erreurs={
+# STA10
+#
+             "AFFE_CHAR_MECA_CONTACT":"Attention, modification de la définition du CONTACT : nommer DEFI_CONTACT,verifier les paramètres globaux et le mettre dans le calcul",
+             "AFFE_CHAR_MECA_LIAISON_UNILATER":"Attention, modification de la définition du CONTACT : nommer DEFI_CONTACT,verifier les paramètres globaux et le mettre dans le calcul",
+             "AFFE_CHAR_MECA_F_LIAISON_UNILATER":"Attention, modification de la définition du CONTACT : nommer DEFI_CONTACT,verifier les paramètres globaux et le mettre dans le calcul",
+             "AFFE_CHAR_MECA_GRAPPE_FLUIDE":"Resorption de GRAPPE_FLUIDE en version 10",
+             "DEFI_MATERIAU_LMARC":"Resorption loi LMARC en version 10",
+             "DEFI_MATERIAU_LMARC_FO":"Resorption loi LMARC en version 10",
+             "POST_ZAC":"Resorption POST_ZAC en version 10",
+             "AFFE_CHAR_MECA_ARLEQUIN":"Resorption ARLEQUIN en version 10",
+             
+             "PROJ_CHAMP_CHAM_NO":"Attention, verifier pour PROJ_CHAMP la présence de MODELE1/MAILLAGE1 et MODELE2/MAILLAGE2",
+
+             "COMB_SISM_MODAL_COMB_MULT_APPUI":"Attention, verifier GROUP_APPUI pour COMB_SISM_MODAL car on est dans le cas MULTI_APPUI=DECORRELE",
+
+             "CALC_PRECONT_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "CALC_PRECONT_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_LINE_HARM_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_LINE_HARM_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_LINE_TRAN_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_LINE_TRAN_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_TRAN_MODAL_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_TRAN_MODAL_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MACR_ASCOUF_CALC_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MACR_ASCOUF_CALC_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MACR_ASPIQ_CALC_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MACR_ASPIQ_CALC_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MACRO_MATR_AJOU_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MACRO_MATR_AJOU_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MECA_STATIQUE_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MECA_STATIQUE_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MODE_STATIQUE_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "MODE_STATIQUE_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "STAT_NON_LINE_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "STAT_NON_LINE_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "THER_LINEAIRE_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "THER_LINEAIRE_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "THER_NON_LINE_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "THER_NON_LINE_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_NON_LINE_SOLVEUR_PARALLELISME":"Modification du PARALLELISME qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+             "DYNA_NON_LINE_SOLVEUR_PARTITION":"Modification de PARTITION qui se definit au niveau de AFFE_MODELE ou MODI_MODELE",
+
+             "STAT_NON_LINE_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans STAT_NON_LINE",
+             "CALC_PRECONT_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans CALC_PRECONT",
+             "DYNA_NON_LINE_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans DYNA_NON_LINE",
+             "MACR_ASCOUF_CALC_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans MACR_ASCOUF_CALC",
+             "MACR_ASPIQ_CALC_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans MACR_ASPIQ_CALC",
+             "SIMU_POINT_MAT_INCREMENT":"Attention, modification de la subdivision des pas : nommer DEFI_LIST_INST et verifier son appel dans SIMU_POINT_MAT",
+
+             "CALC_ELEM_SENSIBILITE":"Le post-traitement SENSIBILITE est à supprimer de CALC_ELEM et à faire via CALC_SENSI",
+
+             "CALC_MISS_OPTION":"Attention, transfert MACRO_MISS_3D en CALC_MISS : utiliser un DEFI_SOL_MISS pour obtenir TABLE_SOL",
+              }
+
+sys.dict_erreurs=dict_erreurs
+
+def traduc(infile,outfile,flog=None):
+
+    hdlr=log.initialise(flog)
+    jdc=getJDC(infile,atraiter)
+    root=jdc.root
+
+    #Parse les mocles des commandes
+    parseKeywords(root)
+
+    ####################### initialisation et traitement des erreurs #########################
+
+
+    #####RESORPTION
+
+    GenereErreurPourCommande(jdc,("POST_ZAC",))
+    GenereErreurMCF(jdc,"AFFE_CHAR_MECA","GRAPPE_FLUIDE")
+    GenereErreurMCF(jdc,"DEFI_MATERIAU","LMARC")
+    GenereErreurMCF(jdc,"DEFI_MATERIAU","LMARC_FO")
+    GenereErreurMCF(jdc,"AFFE_CHAR_MECA","ARLEQUIN")
+
+
+    #####SOLVEUR
+    
+    ####################### traitement MUMPS/PARALELLISME-PARTITION ##################
+    #commandes concernes en plus : CALC_FORC_AJOU?,CALC_MATR_AJOU?
+     # */SOLVEUR/CHARGE_PROCO_MA(SD)--> AFFE_MODELE (ou MODI_MODELE)/PARTITION/.
+    # */SOLVEUR/PARALLELISME =CENTRALISE--> AFFE_MODELE (ou MODI_MODELE)/PARTITION/PARALLELISME = CENTRALISE
+    # */SOLVEUR/PARALLELISME = "DISTRIBUE_MC/MD/SD"--> AFFE_MODELE/PARTITION/PARALLELISME = "MAIL_CONTIGU/MAIL_DISPERSE/SOUS_DOMAINE"
+    # */SOLVEUR/PARTITION --> AFFE_MODELE (ou MODI_MODELE)/PARTITION/PARTITION
+
+
+    GenereErreurMotCleInFact(jdc,"CALC_PRECONT","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"CALC_PRECONT","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"DYNA_LINE_HARM","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"DYNA_LINE_HARM","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"DYNA_LINE_TRAN","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"DYNA_LINE_TRAN","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"DYNA_TRAN_MODAL","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"DYNA_TRAN_MODAL","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"MACR_ASCOUF_CALC","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"MACR_ASCOUF_CALC","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"MACR_ASPIQ_CALC","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"MACR_ASPIQ_CALC","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"MACRO_MATR_AJOU","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"MACRO_MATR_AJOU","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"MECA_STATIQUE","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"MECA_STATIQUE","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"MODE_STATIQUE","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"MODE_STATIQUE","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"STAT_NON_LINE","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"STAT_NON_LINE","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"THER_LINEAIRE","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"THER_LINEAIRE","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"THER_NON_LINE","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"THER_NON_LINE","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"THER_NON_LINE_MO","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"THER_NON_LINE_MO","SOLVEUR","PARTITION")
+    GenereErreurMotCleInFact(jdc,"DYNA_NON_LINE","SOLVEUR","PARALLELISME")
+    GenereErreurMotCleInFact(jdc,"DYNA_NON_LINE","SOLVEUR","PARTITION")
+
+    ####################### traitement mot cle INCREMENT redecoupage en temps #######################
+    renameMotCleSiRegle(jdc,"STAT_NON_LINE","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
+    moveMCFToCommand(jdc,"STAT_NON_LINE","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_ITER_FIN",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_ITER_IGNO",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_ITER_PLUS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_METHODE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
+    renameMotCle(jdc,"STAT_NON_LINE","INCREMENT_NEW","INCREMENT")
+
+    renameMotCleSiRegle(jdc,"CALC_PRECONT","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
+    moveMCFToCommand(jdc,"CALC_PRECONT","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_ITER_FIN",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_ITER_IGNO",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_ITER_PLUS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_METHODE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_PRECONT","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
+    renameMotCle(jdc,"CALC_PRECONT","INCREMENT_NEW","INCREMENT")
+
+    
+    renameMotCleSiRegle(jdc,"DYNA_NON_LINE","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
+    moveMCFToCommand(jdc,"DYNA_NON_LINE","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_ITER_FIN",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_ITER_IGNO",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_ITER_PLUS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_METHODE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
+    renameMotCle(jdc,"DYNA_NON_LINE","INCREMENT_NEW","INCREMENT")
+    
+    renameMotCleSiRegle(jdc,"MACR_ASCOUF_CALC","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
+    moveMCFToCommand(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_ITER_FIN",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_ITER_IGNO",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_ITER_PLUS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_METHODE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
+    renameMotCle(jdc,"MACR_ASCOUF_CALC","INCREMENT_NEW","INCREMENT")
+    
+    renameMotCleSiRegle(jdc,"MACR_ASPIQ_CALC","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
+    moveMCFToCommand(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_ITER_FIN",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_ITER_IGNO",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_ITER_PLUS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_METHODE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)
+    renameMotCle(jdc,"MACR_ASPIQ_CALC","INCREMENT_NEW","INCREMENT")
+    
+    renameMotCleSiRegle(jdc,"SIMU_POINT_MAT","INCREMENT","INCREMENT_NEW",((("INCREMENT","SUBD_METHODE"),"existeMCsousMCF"),),1)
+    moveMCFToCommand(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","DEFI_LIST_INST","ECHEC")
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_COEF_PAS_1",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_ITER_FIN",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_ITER_IGNO",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_ITER_PLUS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_METHODE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_NIVEAU",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_OPTION",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","SUBD_PAS_MINI",pasDeRegle(),0)  
+    renameMotCle(jdc,"SIMU_POINT_MAT","INCREMENT_NEW","INCREMENT")
+
+    removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","INST_INIT")
+    removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","INST_FIN")
+    removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","NUME_INST_FIN")
+    removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","NUME_INST_INIT")
+    removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","PRECISION")
+    chercheOperInsereFacteur(jdc,"DEFI_LIST_INST","DEFI_LIST",pasDeRegle(),1)
+    moveMotCleFromFactToFact(jdc,"DEFI_LIST_INST","ECHEC","LIST_INST","DEFI_LIST")
+    removeMotCleInFact(jdc,"DEFI_LIST_INST","ECHEC","LIST_INST")
+
+    ###################### traitement de NPREC_SOLVEUR ##########
+    removeMotCleInFact(jdc,"MODE_ITER_SIMULT","CALC_FREQ","NPREC_SOLVEUR",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"MODE_ITER_INV","CALC_FREQ","NPREC_SOLVEUR",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_MODAL","CALC_FREQ","NPREC_SOLVEUR",pasDeRegle(),0)
+    removeMotCle(jdc,"IMPR_STURM","NPREC_SOLVEUR")
+    removeMotCleInFact(jdc,"MACRO_MATR_AJOU","CALC_FREQ","NPREC_SOLVEUR",pasDeRegle(),0)
+    
+    ###################### traitement CALC_MODAL SOLVEUR ############
+    removeMotCle(jdc,"CALC_MODAL","SOLVEUR",pasDeRegle())
+
+    ##################### traitement DYNA_TRAN-MODAL ADAPT #################
+    ChangementValeur(jdc,"DYNA_TRAN_MODAL","METHODE",{"ADAPT":"ADAPT_ORDRE2"})
+
+    #################### traitement STAT/DYNA_NON_LINE OBSERVATION SUIVI_DDL=NON ###########
+    removeMotCleInFactCourantSiRegle(jdc,"STAT_NON_LINE","OBSERVATION","SUIVI_DDL",((("SUIVI_DDL","NON",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"DYNA_NON_LINE","OBSERVATION","SUIVI_DDL",((("SUIVI_DDL","NON",jdc),"MCsousMCFcourantaPourValeur"),))
+
+    ################### traitement STAT/DYNA_NON_LINE ARCH_ETAT_INIT ###########
+    removeMotCleInFact(jdc,"STAT_NON_LINE","ARCHIVAGE","ARCH_ETAT_INIT",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"SIMU_POINT_MAT","ARCHIVAGE","ARCH_ETAT_INIT",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","ARCHIVAGE","ARCH_ETAT_INIT",pasDeRegle(),0)
+
+    ################### traitement STAT/DYNA_NON_LINE CRIT_FLAMB ###############
+    removeMotCleInFactCourantSiRegle(jdc,"STAT_NON_LINE","CRIT_FLAMB","INST_CALCUL",((("INST_CALCUL","TOUT_PAS",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"DYNA_NON_LINE","CRIT_FLAMB","INST_CALCUL",((("INST_CALCUL","TOUT_PAS",jdc),"MCsousMCFcourantaPourValeur"),))
+
+    #####COMPORTEMENT/CARA
+
+    ###################  traitement AFFE_MODELE/SHB8 ##########################
+    ChangementValeurDsMCF(jdc,"AFFE_MODELE","AFFE","MODELISATION",{"SHB8":"SHB"})
+    
+    ###################  traitement COMP_ELAS et COMP_INCR  DEFORMATION = GREEN ##############"
+    dGREEN={"GREEN_GR":"GROT_GDEP","GREEN":"GROT_GDEP","REAC_GEOM":"GROT_GDEP","EULER_ALMANSI":"GROT_GDEP","COROTATIONNEL":"GDEF_HYPO_ELAS"}
+    ChangementValeurDsMCF(jdc,"SIMU_POINT_MAT","COMP_ELAS","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_ELAS","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_ELAS","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"CALCUL","COMP_ELAS","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"POST_GP","COMP_ELAS","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"CALC_G","COMP_ELAS","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"SIMU_POINT_MAT","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"CALCUL","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"CALC_PRECONT","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"CALC_NO","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"LIRE_RESU","COMP_INCR","DEFORMATION",dGREEN)
+    ChangementValeurDsMCF(jdc,"MACR_ECREVISSE","COMP_INCR","DEFORMATION",dGREEN)
+
+    ###################### traitement COMP_INCR/COMP_ELAS RESO_INTE ##########
+    dALGOI={"RUNGE_KUTTA_2":"RUNGE_KUTTA","RUNGE_KUTTA_4":"RUNGE_KUTTA"}
+    removeMotCleInFactCourantSiRegle(jdc,"STAT_NON_LINE","COMP_ELAS","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"STAT_NON_LINE","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"DYNA_NON_LINE","COMP_ELAS","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"DYNA_NON_LINE","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"CALCUL","COMP_ELAS","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"CALCUL","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"MACR_ASCOUF_CALC","COMP_ELAS","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"MACR_ASCOUF_CALC","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"MACR_ASPIQ_CALC","COMP_ELAS","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"MACR_ASPIQ_CALC","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"SIMU_POINT_MAT","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"CALC_PRE_CONT","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"CALC_NO","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"LIRE_RESU","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFactCourantSiRegle(jdc,"MACR_ECREVISSE","COMP_INCR","RESO_INTE",((("RESO_INTE","IMPLICITE",jdc),"MCsousMCFcourantaPourValeur"),))
+
+    ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_ELAS","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"STAT_NON_LINE","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_ELAS","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"DYNA_NON_LINE","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"CALCUL","COMP_ELAS","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"CALCUL","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"MACR_ASCOUF_CALC","COMP_ELAS","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"MACR_ASCOUF_CALC","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"MACR_ASPIQF_CALC","COMP_ELAS","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"MACR_ASPIQ_CALC","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"SIMU_POINT_MAT","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"CALC_PRECONT","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"CALC_NO","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"LIRE_RESU","COMP_INCR","RESO_INTE",dALGOI)
+    ChangementValeurDsMCF(jdc,"MACR_ECREVISSE","COMP_INCR","RESO_INTE",dALGOI)
+
+    renameMotCleInFact(jdc,"STAT_NON_LINE","COMP_ELAS","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"STAT_NON_LINE","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"DYNA_NON_LINE","COMP_ELAS","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"DYNA_NON_LINE","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"CALCUL","COMP_ELAS","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"CALCUL","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"MACR_ASCOUF_CALC","COMP_ELAS","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"MACR_ASCOUF_CALC","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"MACR_ASPIQF_CALC","COMP_ELAS","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"MACR_ASPIQ_CALC","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"SIMU_POINT_MAT","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"CALC_PRECONT","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"CALC_NO","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"LIRE_RESU","COMP_INCR","RESO_INTE","ALGO_INTE")
+    renameMotCleInFact(jdc,"MACR_ECREVISSE","COMP_INCR","RESO_INTE","ALGO_INTE")
+
+    ###################### traitement COMP_ELAS/ITER_INTE_PAS ######
+    removeMotCleInFact(jdc,"CALCUL","COMP_ELAS","ITER_INTE_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","COMP_ELAS","ITER_INTE_PAS",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","COMP_ELAS","ITER_INTE_PAS",pasDeRegle(),0)
+
+    ###################### traitement CALC_G/COMP_INCR/RELATION ELAS_VMIS_PUIS ####
+    ChangementValeurDsMCF(jdc,"CALC_G","COMP_INCR","RELATION",{"ELAS_VMIS_PUIS":"VMIS_ISOT_PUIS"})
+
+    ########################" traitement DEFI_COMPOR/MULTIFIBRE/DEFORMATION=REAC_GEOM #########
+    ChangementValeurDsMCF(jdc,"DEFI_COMPOR","MULTIFIBRE","DEFORMATION",dGREEN)
+
+    ####################### traitement DEFI_COMPOR/MONOCRISTAL/ECOULEMENT #############
+    dECOULEMENT={"ECOU_VISC1":"MONO_VISC1","ECOU_VISC2":"MONO_VISC2","ECOU_VISC3":"MONO_VISC3","KOCKS_RAUCH":"MONO_DD_KR"}
+    ChangementValeurDsMCF(jdc,"DEFI_COMPOR","MONOCRISTAL","ECOULEMENT",dECOULEMENT)
+    dISOT={"ECRO_ISOT1":"MONO_ISOT1","ECRO_ISOT2":"MONO_ISOT2"}
+    dCINE={"ECRO_CINE1":"MONO_CINE1","ECRO_CINE2":"MONO_CINE2"}
+    ChangementValeurDsMCF(jdc,"DEFI_COMPOR","MONOCRISTAL","ECRO_ISOT",dISOT)
+    ChangementValeurDsMCF(jdc,"DEFI_COMPOR","MONOCRISTAL","ECRO_CINE",dCINE)
+
+    ################### traitement DEFI_MATERIAU monocristallin #######
+    renameMotCle(jdc,"DEFI_MATERIAU","ECOU_VISC1","MONO_VISC1")
+    renameMotCle(jdc,"DEFI_MATERIAU","ECOU_VISC2","MONO_VISC2")
+    renameMotCle(jdc,"DEFI_MATERIAU","ECOU_VISC3","MONO_VISC3")
+    renameMotCle(jdc,"DEFI_MATERIAU","ECRO_CINE1","MONO_CINE1")
+    renameMotCle(jdc,"DEFI_MATERIAU","ECRO_CINE2","MONO_CINE2")
+    renameMotCle(jdc,"DEFI_MATERIAU","ECRO_ISOT1","MONO_ISOT1")
+    renameMotCle(jdc,"DEFI_MATERIAU","ECRO_ISOT2","MONO_ISOT2")
+    renameMotCle(jdc,"DEFI_MATERIAU","KOCKS_RAUCH","MONO_DD_KR")
+
+    ################ traitement DEFI_MATERIAU/THER_HYDR #######
+    removeMotCleInFact(jdc,"DEFI_MATERIAU","THER_HYDR","QSR_K")
+     
+    ##################### traitement AFFE_CARA_ELEM/DISCRET ###############"
+    dDISCRET={"K_T_N_NS":"K_T_N",  "K_T_L_NS":"K_T_L",  "K_TR_N_NS":"K_TR_N",  "K_TR_L_NS":"K_TR_L",
+              "M_T_N_NS":"M_T_N",  "M_T_L_NS":"M_T_L",  "M_TR_N_NS":"M_TR_N",  "M_TR_L_NS":"M_TR_L",
+              "A_T_N_NS":"A_T_N",  "A_T_L_NS":"A_T_L",   "A_TR_N_NS":"A_TR_N", "A_TR_L_NS":"A_TR_L"}
+    dlist_DISCRET=["K_T_N_NS","K_T_L_NS", "K_TR_N_NS","K_TR_L_NS","M_T_N_NS","M_T_L_NS","M_TR_N_NS","M_TR_L_NS","A_T_N_NS","A_T_L_NS","A_TR_N_NS","A_TR_L_NS"]
+
+    removeMotCleInFact(jdc,"AFFE_CARA_ELEM","DISCRET_2D","SYME")
+    removeMotCleInFact(jdc,"AFFE_CARA_ELEM","DISCRET","SYME")
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"AFFE_CARA_ELEM","DISCRET","SYME='NON'",((("CARA",dlist_DISCRET,jdc),"MCsousMCFcourantaPourValeurDansListe"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"AFFE_CARA_ELEM","DISCRET_2D","SYME='NON'",((("CARA",dlist_DISCRET,jdc),"MCsousMCFcourantaPourValeurDansListe"),))
+    ChangementValeurDsMCF(jdc,"AFFE_CARA_ELEM","DISCRET_2D","CARA",dDISCRET)
+    ChangementValeurDsMCF(jdc,"AFFE_CARA_ELEM","DISCRET","CARA",dDISCRET)
+
+    #####CHARGEMENT
+    
+    ####################### traitement  CONTACT ###############################################
+
+
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","ITER_MULT_MAXI","ITER_CONT_MULT")
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA","CONTACT","NB_REAC_GEOM","NB_ITER_GEOM")
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"AFFE_CHAR_MECA","CONTACT","RESOLUTION='NON'",((("METHODE","VERIF",jdc),"MCsousMCFcourantaPourValeur"),))
+    copyMotClefInOperToFact(jdc,"AFFE_CHAR_MECA","MODELE","CONTACT")
+    moveMCFToCommand(jdc,"AFFE_CHAR_MECA","CONTACT","DEFI_CONTACT","ZONE")
+    removeMotCle(jdc,"AFFE_CHAR_MECA","CONTACT",pasDeRegle(),1)
+
+    
+    removeMotCleInFact(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER","METHODE")
+    AjouteMotClefDansFacteur(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER","METHODE='LIAISON_UNIL'",pasDeRegle())
+    copyMotClefInOperToFact(jdc,"AFFE_CHAR_MECA","MODELE","LIAISON_UNILATER")
+    moveMCFToCommand(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER","DEFI_CONTACT","ZONE")
+    removeMotCle(jdc,"AFFE_CHAR_MECA","LIAISON_UNILATER",pasDeRegle(),1)
+    
+    removeMotCleInFact(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","METHODE")
+    AjouteMotClefDansFacteur(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","METHODE='LIAISON_UNIL'",pasDeRegle())
+    AjouteMotClefDansFacteur(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","FORMULATION='LIAISON_UNIL'",pasDeRegle())
+    copyMotClefInOperToFact(jdc,"AFFE_CHAR_MECA_F","MODELE","LIAISON_UNILATER")
+    moveMCFToCommand(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER","DEFI_CONTACT","ZONE")
+    removeMotCle(jdc,"AFFE_CHAR_MECA_F","LIAISON_UNILATER",pasDeRegle(),1)
+
+    chercheOperInsereMotCleSiRegle(jdc,"DEFI_CONTACT","FORMULATION='XFEM'",((("ZONE","METHODE","XFEM",jdc),"MCsousMCFaPourValeur"),))
+    chercheOperInsereMotCleSiRegle(jdc,"DEFI_CONTACT","FORMULATION='CONTINUE'",((("ZONE","METHODE","CONTINUE",jdc),"MCsousMCFaPourValeur"),))
+    chercheOperInsereMotCleSiRegle(jdc,"DEFI_CONTACT","FORMULATION='VERIF'",((("ZONE","METHODE","VERIF",jdc),"MCsousMCFaPourValeur"),))
+    chercheOperInsereMotCleSiRegle(jdc,"DEFI_CONTACT","FORMULATION='LIAISON_UNIL'",((("ZONE","METHODE","LIAISON_UNIL",jdc),"MCsousMCFaPourValeur"),))
+    liste_meth_ZONE=["GCP","CONTRAINTE","LAGRANGIEN","PENALISATION"]
+    chercheOperInsereMotCleSiRegle(jdc,"DEFI_CONTACT","FORMULATION='DISCRETE'",((("ZONE","METHODE",liste_meth_ZONE,jdc),"MCsousMCFaPourValeurDansListe"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_CONT='LAGRANGIEN'",((("METHODE","LAGRANGIEN",jdc),"MCsousMCFcourantaPourValeur"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_FROT='LAGRANGIEN'",((("METHODE","LAGRANGIEN",jdc),"MCsousMCFcourantaPourValeur"),(("COULOMB",),"existeMCsousMCFcourant"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_CONT='GCP'",((("METHODE","GCP",jdc),"MCsousMCFcourantaPourValeur"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_CONT='PENALISATION'",((("METHODE","PENALISATION",jdc),"MCsousMCFcourantaPourValeur"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_FROT='PENALISATION'",((("METHODE","PENALISATION",jdc),"MCsousMCFcourantaPourValeur"),(("COULOMB",),"existeMCsousMCFcourant"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DEFI_CONTACT","ZONE","ALGO_CONT='CONTRAINTE'",((("METHODE","CONTRAINTE",jdc),"MCsousMCFcourantaPourValeur"),))
+    removeMotCleInFact(jdc,"DEFI_CONTACT","ZONE","METHODE")
+    
+    
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","COEF_RESI")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","FROTTEMENT")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_CONT_MAXI")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_FROT_MAXI")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_GCP_MAXI")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_GEOM_MAXI")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","LISSAGE")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","NB_RESOL")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","PRE_COND")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","REAC_GEOM")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","REAC_ITER")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","RECH_LINEAIRE")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","STOP_INTERP")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","STOP_SINGULIER")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","RESI_ABSO")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_CONT_MULT")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","ITER_PRE_MAXI")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","NB_ITER_GEOM")
+    moveMotCleFromFactToFather(jdc,"DEFI_CONTACT","ZONE","MODELE")
+
+    
+    # FORMULATION = DEPL/VITE
+    # Si EXCL_FROT_1
+    # Si EXCL_FROT_2
+
+
+    ####################### traitement DCX/DCY/DCZ #############################
+    dDC={"DCX":"DX","DCY":"DY","DCZ":"DZ"}
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA","DDL_IMPO","DCX","DX")
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA","DDL_IMPO","DCY","DY")
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA","DDL_IMPO","DCZ","DZ")
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA_F","DDL_IMPO","DCX","DX")
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA_F","DDL_IMPO","DCY","DY")
+    renameMotCleInFact(jdc,"AFFE_CHAR_MECA_F","DDL_IMPO","DCZ","DZ")
+    renameMotCleInFact(jdc,"AFFE_CHAR_CINE","MECA_IMPO","DCX","DX")
+    renameMotCleInFact(jdc,"AFFE_CHAR_CINE","MECA_IMPO","DCY","DY")
+    renameMotCleInFact(jdc,"AFFE_CHAR_CINE","MECA_IMPO","DCZ","DZ")
+    # QUESTION Non pris en compte : AFFE_CHAR_MECA/LIAISON_DDL","DDL",Liste de valeurs avec DC*)
+    # peut_etre avec changeTouteValeur ?
+    
+    ######################### traitement COMB_SISM_MODAL APPUI #######################""
+    # attention il faut traiter d'abord DECORRELE avant CORRELE sinon CORRELE apparaît dans DECORELLE
+    moveMotCleFromFactToFather(jdc,"COMB_SISM_MODAL","EXCIT","MONO_APPUI")
+    moveMotCleFromFactToFather(jdc,"COMB_SISM_MODAL","EXCIT","MULTI_APPUI")
+    removeMotCleInFactSiRegle(jdc,"COMB_SISM_MODAL","COMB_MULT_APPUI","TYPE_COMBI",((("MULTI_APPUI","DECORRELE",jdc),"MCaPourValeur"),))
+    renameMotCleSiRegle(jdc,"COMB_SISM_MODAL","COMB_MULT_APPUI","GROUP_APPUI",((("MULTI_APPUI","DECORRELE",jdc),"MCaPourValeur"),),1)
+
+    ########################  traitement DYNA_TRAN_MODAL ##################
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"DYNA_TRAN_MODAL","CHOC","FROTTEMENT='COULOMB'",((("COULOMB",),"existeMCsousMCFcourant"),))
+
+    ######################### traitement AFFE_CHAR_MECA PESANTEUR ROTATION#################
+    EclaMotCleToFact(jdc,"AFFE_CHAR_MECA","PESANTEUR","GRAVITE","DIRECTION")
+    EclaMotCleToFact(jdc,"AFFE_CHAR_MECA","ROTATION","VITESSE","AXE")
+    moveMotClefInOperToFact(jdc,"AFFE_CHAR_MECA","CENTRE","ROTATION")
+
+    ######################## traitement DEFI_BASE_MODALE ##############
+    renameMotCleInFact(jdc,"DEFI_BASE_MODALE","RITZ","MODE_STAT","MODE_INTF")
+    renameMotCleInFact(jdc,"DEFI_BASE_MODALE","RITZ","MULT_ELAS","MODE_INTF")
+
+    ####################### traitement DYNA_ISS_VARI #################
+    renameMotCle(jdc,"DYNA_ISS_VARI","PAS","FREQ_PAS")
+
+
+    #####IMPRESSION
+    
+    #################### traitement IMPR_RESU  #######################
+    removeMotCleInFact(jdc,"IMPR_RESU","RESU","INFO_RESU")
+
+    ######################### traitement IMPR_MATRICE ####################
+    removeCommande(jdc,"IMPR_MATRICE")
+
+    #######################  traitement PROJ_CHAMP  #####################
+    renameMotCle(jdc,"PROJ_CHAMP","CHAM_NO","CHAM_GD",1,pasDeRegle())
+    ChangementValeur(jdc,"PROJ_CHAMP","METHODE",{ "ELEM":"COLLOCATION"})
+
+    ####################### traitement MACR_ADAP_MAIL ##############"
+    ChangementValeur(jdc,"MACR_ADAP_MAIL","TYPE_VALEUR_INDICA",{"V_ABSOLUE":"ABSOLU","V_RELATIVE":"RELATIF"})
+    renameMotCle(jdc,"MACR_ADAP_MAIL","INDICATEUR","NOM_CHAM")
+    renameMotCle(jdc,"MACR_ADAP_MAIL","NOM_CMP_INDICA","NOM_CMP")
+    renameMotCle(jdc,"MACR_ADAP_MAIL","TYPE_OPER_INDICA","USAGE_CHAMP")
+    renameMotCle(jdc,"MACR_ADAP_MAIL","TYPE_VALEUR_INDICA","USAGE_CMP")
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"MACR_ADAP_MAIL","ZONE","TYPE='BOITE'",((("RAYON",),"nexistepasMCsousMCFcourant"),))
+    AjouteMotClefDansFacteurCourantSiRegle(jdc,"MACR_ADAP_MAIL","ZONE","TYPE='SPHERE'",((("RAYON",),"existeMCsousMCFcourant"),))
+    ChangementValeur(jdc,"MACR_ADAP_MAIL","VERSION_HOMARD",{"V9_5":"V10_1"})
+    ChangementValeur(jdc,"MACR_ADAP_MAIL","VERSION_HOMARD",{"V9_N":"V10_1_N"})
+    ChangementValeur(jdc,"MACR_INFO_MAIL","VERSION_HOMARD",{"V9_5":"V10_1"})
+    ChangementValeur(jdc,"MACR_INFO_MAIL","VERSION_HOMARD",{"V9_N":"V10_1_N"})
+
+    ###################### traitement de POST_CHAM_XFEM  #################
+    removeMotCle(jdc,"POST_CHAM_XFEM","MODELE",pasDeRegle(),0)
+    removeMotCle(jdc,"POST_CHAM_XFEM","MAILLAGE_FISS",pasDeRegle(),0)
+    removeMotCle(jdc,"POST_CHAM_XFEM","NOM_CHAM",pasDeRegle(),0)
+
+    ##################### traitement de SIMU_POINT_MAT/SUPPORT #############
+    chercheOperInsereFacteur(jdc,"SIMU_POINT_MAT","SUPPORT='POINT'",pasDeRegle(),0)
+
+    ######################  traitement AFFE_CARA_ELEM/UNITE_EUROPLEXUS ######
+    renameMotCleInFact(jdc,"AFFE_CARA_ELEM","RIGI_PARASOL","UNITE_EUROPLEXUS","UNITE",pasDeRegle(),0)
+
+    #################### traitement DEFI_GLRC/IMPRESSION #############
+    removeMotCle(jdc,"DEFI_GLRC","IMPRESSION",pasDeRegle(),0)
+
+    ################### traitement AFFICHAGE  #####
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","AFFICHAGE","LONG_I",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","AFFICHAGE","LONG_R",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","AFFICHAGE","NOM_COLONNE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"DYNA_NON_LINE","AFFICHAGE","PREC_R",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","AFFICHAGE","LONG_I",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","AFFICHAGE","LONG_R",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","AFFICHAGE","NOM_COLONNE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"STAT_NON_LINE","AFFICHAGE","PREC_R",pasDeRegle(),0)
+
+    ################### traitement CALC_NO *RESU #########
+    removeMotCle(jdc,"CALC_NO","GROUP_MA_RESU",pasDeRegle(),0)
+    removeMotCle(jdc,"CALC_NO","MAILLE_RESU",pasDeRegle(),0)
+    removeMotCle(jdc,"CALC_NO","GROUP_NO_RESU",pasDeRegle(),0)
+    removeMotCle(jdc,"CALC_NO","NOEUD_RESU",pasDeRegle(),0)
+
+    ################## traitement POST_K1_K2_K3/MAILLAGE ######
+    removeMotCleSiRegle(jdc,"POST_K1_K2_K3","MAILLAGE",((("RESULTAT"),"existeMCFParmi"),))
+
+     ######### traitement CALC_ELEM/TYPE_ESTI ####
+    dESTI={"ERRE_ELEM_SIGM":"ERME_ELEM","ERZ1_ELEM_SIGM":"ERZ1_ELEM","ERZ2_ELEM_SIGM":"ERZ2_ELEM",
+            "QIRE_ELEM_SIGM":"QIRE_ELEM","QIZ1_ELEM_SIGM":"QIZ1_ELEM","QIZ2_ELEM_SIGM":"QIZ2_ELEM"}
+    ChangementValeur(jdc,"CALC_ELEM","TYPE_ESTI",dESTI)
+
+    ######### suppression CALC_ELEM/NORME ######
+    removeMotCle(jdc,"CALC_ELEM","NORME",pasDeRegle(),0)
+
+    ########## traitement CALC_ELEM/CALC_NO OPTION
+    #dSENSI={"DEDE_ELNO_DLDE":"DEDE_ELNO","DEDE_NOEU_DLDE":"DEDE_NOEU","DESI_ELNO_DLSI":"DESI_ELNO","DESI_NOEU_DLSI":"DESI_NOEU",
+    #        "DETE_ELNO_DLTE":"DETE_ELNO","DETE_NOEU_DLTE":"DETE_NOEU"}
+    dOPTION={"DEDE_ELNO_DLDE":"DEDE_ELNO","DEDE_NOEU_DLDE":"DEDE_NOEU","DESI_ELNO_DLSI":"DESI_ELNO","DESI_NOEU_DLSI":"DESI_NOEU",
+             "DETE_ELNO_DLTE":"DETE_ELNO","DETE_NOEU_DLTE":"DETE_NOEU",
+             "INTE_ELNO_ACTI":"INTE_ELNO","INTE_ELNO_REAC":"INTE_ELNO","INTE_NOEU_ACTI":"INTE_NOEU","INTE_NOEU_REAC":"INTE_NOEU",
+             "PRES_DBEL_DEPL":"PRME_ELNO","PRES_ELNO_IMAG":"PRAC_ELNO","PRES_ELNO_REEL":"PRAC_ELNO",
+             "PRES_NOEU_DBEL":"PRAC_NOEU","PRES_NOEU_IMAG":"PRAC_NOEU","PRES_NOEU_REEL":"PRAC_NOEU",
+             "ARCO_ELNO_SIGM":"SIRO_ELEM","ARCO_NOEU_SIGM":"SIRO_ELEM",
+             "ENDO_ELNO_ELGA":"ENDO_ELNO","ENDO_ELNO_SIGA":"ENDO_ELNO","ENDO_ELNO_SINO":"ENDO_ELNO","ENDO_NOEU_SINO":"ENDO_NOEU",
+             "ERRE_ELEM_SIGM":"ERME_ELEM","ERRE_ELEM_TEMP":"ERTH_ELEM",
+             "CRIT_ELNO_RUPT":"CRIT_ELNO","DEGE_ELNO_DEPL":"DEGE_ELNO","DEGE_NOEU_DEPL":"DEGE_NOEU",
+             "DURT_ELNO_META":"DURT_ELNO","DURT_NOEU_META":"DURT_NOEU","ECIN_ELEM_DEPL":"ECIN_ELEM","ENEL_ELNO_ELGA":"ENEL_ELNO",
+             "ENEL_NOEU_ELGA":"ENEL_NOEU","EPEQ_ELNO_TUYO":"EPTQ_ELNO","EPME_ELGA_DEPL":"EPME_ELGA","EPME_ELNO_DEPL":"EPME_ELNO",
+             "EPMG_ELGA_DEPL":"EPMG_ELGA","EPMG_ELNO_DEPL":"EPMG_ELNO","EPMG_NOEU_DEPL":"EPMG_NOEU","EPOT_ELEM_DEPL":"EPOT_ELEM",
+             "EPSG_ELGA_DEPL":"EPSG_ELGA","EPSG_ELNO_DEPL":"EPSG_ELNO","EPSG_NOEU_DEPL":"EPSG_NOEU",
+             "EPSI_ELGA_DEPL":"EPSI_ELGA","EPSI_NOEU_DEPL":"EPSI_NOEU","EPSI_ELNO_DEPL":"EPSI_ELNO","EPSI_ELNO_TUYO":"EPTU_ELNO",
+             "ERZ1_ELEM_SIGM":"ERZ1_ELEM","ERZ2_ELEM_SIGM":"ERZ2_ELEM",
+             "ETOT_ELNO_ELGA":"ETOT_ELNO","EXTR_ELGA_VARI":"VAEX_ELGA","EXTR_ELNO_VARI":"VAEX_ELNO","EXTR_NOEU_VARI":"VAEX_NOEU",
+             "FLUX_ELGA_TEMP":"FLUX_ELGA","FLUX_ELNO_TEMP":"FLUX_ELNO","FLUX_NOEU_TEMP":"FLUX_NOEU",
+             "HYDR_NOEU_ELGA":"HYDR_NOEU","HYDR_ELNO_ELGA":"HYDR_ELNO",
+             "META_ELNO_TEMP":"META_ELNO","META_NOEU_TEMP":"META_NOEU",
+             "PMPB_ELGA_SIEF":"PMPB_ELGA","PMPB_ELNO_SIEF":"PMPB_ELNO","PMPB_NOEU_SIEF":"PMPB_NOEU",
+             "QIRE_ELEM_SIGM":"QIRE_ELEM","QIRE_ELNO_ELEM":"QIRE_ELNO","QIRE_NOEU_ELEM":"QIRE_NOEU",
+             "QIZ1_ELEM_SIGM":"QIZ1_ELEM","QIZ2_ELEM_SIGM":"QIZ2_ELEM",
+             "SIEF_ELGA_DEPL":"SIEF_ELGA","SIEF_ELNO_ELGA":"SIEF_ELNO","SIEF_NOEU_ELGA":"SIEF_NOEU",
+             "SIEQ_ELNO_TUYO":"SITQ_ELNO","SING_ELNO_ELEM":"SING_ELNO","SIPO_ELNO_DEPL":"SIPO_ELNO","SIPO_NOEU_DEPL":"SIPO_NOEU",
+             "SOUR_ELGA_ELEC":"SOUR_ELGA",
+             "DCHA_ELGA_SIGM":"DERA_ELGA","DCHA_ELNO_SIGM":"DERA_ELNO","DCHA_NOEU_SIGM":"DERA_NOEU",
+             "RADI_ELGA_SIGM":"DERA_ELGA","RADI_ELNO_SIGM":"DERA_ELNO","RADI_NOEU_SIGM":"DERA_NOEU",
+             "EFGE_ELNO_CART":"EFCA_ELNO","EFGE_NOEU_CART":"EFCA_NOEU","EFGE_ELNO_DEPL":"EFGE_ELNO","EFGE_NOEU_DEPL":"EFGE_NOEU",
+             "EQUI_ELGA_EPME":"EPMQ_ELGA","EQUI_ELNO_EPME":"EPMQ_ELNO","EQUI_NOEU_EPME":"EPMQ_NOEU",
+             "EQUI_ELGA_EPSI":"EPEQ_ELGA","EQUI_ELNO_EPSI":"EPEQ_ELNO","EQUI_NOEU_EPSI":"EPEQ_NOEU",
+             "EQUI_ELGA_SIGM":"SIEQ_ELGA","EQUI_ELNO_SIGM":"SIEQ_ELNO","EQUI_NOEU_SIGM":"SIEQ_NOEU",
+             "SIGM_ELNO_CART":"SICA_ELNO","SIGM_NOEU_CART":"SICA_NOEU","SIGM_ELNO_COQU":"SICO_ELNO","SIGM_NOEU_COQU":"SICO_ELNO",
+             "SIGM_ELNO_TUYO":"SITU_ELNO",
+             "SIGM_ELNO_DEPL":"SIGM_ELNO","SIGM_NOEU_DEPL":"SIGM_NOEU","SIGM_NOZ1_ELGA":"SIZ1_ELGA","SIGM_NOZ2_ELGA":"SIZ2_ELGA",
+             "VALE_NCOU_MAXI":"SPMX_ELGA","VARI_ELNO_COQU":"VACO_ELNO","VARI_ELNO_TUYO":"VATU_ELNO",
+             "VARI_NOEU_ELGA":"VARI_NOEU","VARI_ELNO_ELGA":"VARI_ELNO",
+             "INDI_LOCA_ELGA":"INDL_ELGA"}
+    #"FORC_NODA":"FORC_NOEU","REAC_NODA":"REAC_NOEU"
+    ChangementValeurDsMCF(jdc,"AFFE_MATERIAU","AFFE_VARC","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"COMB_FOURIER","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"CREA_CHAMP","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"CREA_RESU","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"EXTR_RESU","ARCHIVAGE","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"IMPR_RESU","RESU","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"LIRE_RESU","FORMAT_MED","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"LIRE_RESU","FORMAT_IDEAS","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"LIRE_RESU","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"MACR_ADAP_MAIL","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"MACR_ASPIC_CALC","IMPRESSION","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"MACR_LIGN_COUPE","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"MODI_REPERE","MODI_CHAM","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"POST_ELEM","INTEGRALE","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"POST_ELEM","MINMAX","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"POST_RCCM","RESU_MECA","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"POST_RELEVE_T","ACTION","NOM_CHAM",dOPTION)    
+    ChangementValeur(jdc,"PROJ_CHAMP","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"PROJ_MESU_MODAL","MODELE_MESURE","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"RECU_FONCTION","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"REST_GENE_PHYS","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"REST_SOUS_STRUC","NOM_CHAM",dOPTION)
+    ChangementValeur(jdc,"REST_SPEC_PHYS","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"TEST_RESU","RESU","NOM_CHAM",dOPTION)
+    ChangementValeurDsMCF(jdc,"TEST_RESU","GENE","NOM_CHAM",dOPTION)
+    
+    ChangementValeur(jdc,"CALC_CHAM_ELEM","OPTION",dOPTION)
+    ChangementValeur(jdc,"CALC_ELEM","OPTION",dOPTION)
+    ChangementValeur(jdc,"CALC_META","OPTION",dOPTION)
+    ChangementValeur(jdc,"CALC_NO","OPTION",dOPTION)
+    ChangementValeur(jdc,"COMB_SISM_MODAL","OPTION",dOPTION)
+    ChangementValeur(jdc,"MECA_STATIQUE","OPTION",dOPTION)
+    ChangementValeurDsMCF(jdc,"MACRO_ELAS_MULT","CAS_CHARGE","OPTION",dOPTION)
+    ChangementValeur(jdc,"THER_NON_LINE","OPTION",dOPTION)
+
+    ############ Message si SuppressionValeurs ou Valeurs ambigue CALC_ELEM/OPTION
+    rOPTION=("'DEUL_ELGA_DEPL'","'DEUL_ELGA_TEMP'","'DURT_ELGA_META'",
+             "'ERRE_ELNO_DEPL'", "'ERRE_NOEU_ELEM'", "'ERRE_ELNO_ELEM'","'EPSP_NOEU_ZAC'","'HYDR_ELNO_ELGA'",
+             "'SIGM_NOEU_ZAC'","'SIGM_ELNO_SIEF'","'SIGM_NOEU_SIEF'","'SIPO_ELNO_SIEF'","'SIPO_NOEU_SIEF'",
+             "'SIRE_ELNO_DEPL'","'SIRE_NOEU_DEPL'","'SIEF_NOEU'",
+             "'PRES_ELNO_DBEL'", "'VARI_NOEU'")
+    # Options ambigue :  PRES_ELNO_DBEL --> prac_elno/prme_elno, ERRE* --> ERME_ELNO ou ERTH_ELNO selon PHENOMENE
+    # En commentaires les commandes non concernees par rOPTION
+    
+    GenereErreurValeurDsMCF(jdc,"AFFE_MATERIAU","AFFE_VARC","NOM_CHAM",rOPTION)
+    #GenereErreurValeur(jdc,"COMB_FOURIER","NOM_CHAM",rOPTION)
+    GenereErreurValeur(jdc,"CREA_CHAMP","NOM_CHAM",rOPTION)
+    GenereErreurValeur(jdc,"CREA_RESU","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"EXTR_RESU","ARCHIVAGE","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"IMPR_RESU","RESU","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"LIRE_RESU","FORMAT_MED","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"LIRE_RESU","FORMAT_IDEAS","NOM_CHAM",rOPTION)
+    GenereErreurValeur(jdc,"LIRE_RESU","NOM_CHAM",rOPTION)
+    GenereErreurValeur(jdc,"MACR_ADAP_MAIL","NOM_CHAM",rOPTION)
+    #GenereErreurDsMCF(jdc,"MACR_ASPIC_CALC","IMPRESSION","NOM_CHAM",rOPTION)
+    GenereErreurValeur(jdc,"MACR_LIGN_COUPE","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"MODI_REPERE","MODI_CHAM","NOM_CHAM",rOPTION)
+    #GenereErreurValeurDsMCF(jdc,"POST_RCCM","RESU_MECA","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"POST_ELEM","INTEGRALE","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"POST_ELEM","MINMAX","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"POST_RELEVE_T","ACTION","NOM_CHAM",rOPTION)    
+    GenereErreurValeur(jdc,"PROJ_CHAMP","NOM_CHAM",rOPTION)
+    #GenereErreurValeurDsMCF(jdc,"PROJ_MESU_MODAL","MODELE_MESURE","NOM_CHAM",rOPTION)
+    GenereErreurValeur(jdc,"RECU_FONCTION","NOM_CHAM",rOPTION)
+    #GenereErreurValeur(jdc,"REST_GENE_PHYS","NOM_CHAM",rOPTION)
+    #GenereErreurValeur(jdc,"REST_SOUS_STRUC","NOM_CHAM",rOPTION)
+    #GenereErreurValeur(jdc,"REST_SPEC_PHYS","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"TEST_RESU","RESU","NOM_CHAM",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"TEST_RESU","GENE","NOM_CHAM",rOPTION)
+    
+    GenereErreurValeur(jdc,"CALC_CHAM_ELEM","OPTION",rOPTION)
+    GenereErreurValeur(jdc,"CALC_ELEM","OPTION",rOPTION)
+    #GenereErreurValeur(jdc,"CALC_META","OPTION",rOPTION)
+    GenereErreurValeur(jdc,"CALC_NO","OPTION",rOPTION)
+    #GenereErreurValeur(jdc,"COMB_SISM_MODAL","OPTION",rOPTION)
+    #GenereErreurValeur(jdc,"MECA_STATIQUE","OPTION",rOPTION)
+    GenereErreurValeurDsMCF(jdc,"MACRO_ELAS_MULT","CAS_CHARGE","OPTION",rOPTION)
+    #GenereErreurValeur(jdc,"THER_NON_LINE","OPTION",rOPTION)        
+    
+    ########### Message si CALC_ELEM/SENSIBILITE
+    GenereErreurMCF(jdc,"CALC_ELEM","SENSIBILITE")
+
+    # non fait CALC_NO OPTION=FORC_NODA_NONL
+
+    ########## Traitement MACRO_MISS_3D --> CALC_MISS
+    renameCommandeSiRegle(jdc,"MACRO_MISS_3D","CALC_MISS",((("OPTION","MODULE","MISS_IMPE",jdc),"MCsousMCFaPourValeur"),(("PARAMETRE","ISSF"),"nexistepasMCsousMCF"),(("PARAMETRE","DIRE_ONDE"),"nexistepasMCsousMCF"),(("PARAMETRE","CONTR_LISTE"),"nexistepasMCsousMCF"),(("PARAMETRE","CONTR_NB"),"nexistepasMCsousMCF"),))
+    renameCommandeSiRegle(jdc,"MACRO_MISS_3D","CALC_MISS",((("OPTION","MODULE","MISS_IMPE",jdc),"MCsousMCFaPourValeur"),(("PARAMETRE","ISSF","NON",jdc),"MCsousMCFaPourValeur"),(("PARAMETRE","DIRE_ONDE"),"nexistepasMCsousMCF"),(("PARAMETRE","CONTR_LISTE"),"nexistepasMCsousMCF"),(("PARAMETRE","CONTR_NB"),"nexistepasMCsousMCF"),))
+    removeMotCleInFact(jdc,"CALC_MISS","PARAMETRE","FICH_RESU_IMPE",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_MISS","PARAMETRE","FICH_RESU_FORC",pasDeRegle(),0)
+    removeMotCleInFact(jdc,"CALC_MISS","PARAMETRE","FICH_POST_TRAI",pasDeRegle(),0)
+    removeMotCle(jdc,"CALC_MISS","UNITE_OPTI_MISS",pasDeRegle())
+    removeMotCle(jdc,"CALC_MISS","UNITE_MODELE_SOL",pasDeRegle())
+    removeMotCle(jdc,"CALC_MISS","OPTION",pasDeRegle(),1)
+    ChangementValeur(jdc,"CALC_MISS","VERSION",{"V1_4":"V6.5"})
+    ChangementValeur(jdc,"CALC_MISS","VERSION",{"V1_5":"V6.6"})
+    ChangementValeur(jdc,"CALC_MISS","VERSION",{"V1_3":"V6.5"})
+
+    macr=""
+    interf=""
+    amor=""
+    for c in jdc.root.childNodes:
+        if c.name != "IMPR_MACR_ELEM" : continue
+        for mc in c.childNodes:
+             if mc.name == "MACR_ELEM_DYNA" : macr=mc.getText(jdc)
+             if mc.name == "GROUP_MA_INTERF": interf=mc.getText(jdc)
+             if mc.name == "AMOR_REDUIT": amor=mc.getText(jdc)
+    if amor != "" : chercheOperInsereFacteur(jdc,"CALC_MISS",amor,pasDeRegle(),0)
+    if interf != "" : chercheOperInsereFacteur(jdc,"CALC_MISS",interf,pasDeRegle(),0)
+    if macr != "" : chercheOperInsereFacteur(jdc,"CALC_MISS",macr,pasDeRegle(),0)
+
+    chercheOperInsereFacteur(jdc,"CALC_MISS","TABLE_SOL=''",pasDeRegle(),0)
+    chercheOperInsereFacteur(jdc,"CALC_MISS","TYPE_RESU='FICHIER'",pasDeRegle(),0)
+    
+    #################################################################
+    f=open(outfile,'w')
+    f.write(jdc.getSource())
+    f.close()
+
+    log.ferme(hdlr)
+
+def main():
+    parser = optparse.OptionParser(usage=usage)
+
+    parser.add_option('-i','--infile', dest="infile", default='toto.comm',
+        help="Le fichier à traduire")
+    parser.add_option('-o','--outfile', dest="outfile", default='tutu.comm',
+        help="Le fichier traduit")
+
+    options, args = parser.parse_args()
+    traduc(options.infile,options.outfile)
+
+if __name__ == '__main__':
+    main()
+
index c1a94251d4bdf92e82a25ffc64461d03373ec2f0..87e9573a8fdb28c1211500e4fe9e1a8d67ba5d98 100644 (file)
@@ -37,6 +37,7 @@ eficas_compile_ui ( OptionsOT.ui )
 eficas_compile_ui ( OptionsPdf.ui )
 eficas_compile_ui ( aideQT.ui )
 eficas_compile_ui ( desChoixCata.ui )
+eficas_compile_ui ( desChoixCode.ui )
 eficas_compile_ui ( desChoixMap.ui )
 eficas_compile_ui ( desCommande.ui )
 eficas_compile_ui ( desCommentaire.ui )
index cac61d7bef2f834854e92b90f4b6ee07c2b94d79..adeb183d22381f85073d9a6aeb1ae00418b8292f 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>desOptions</class>
- <widget class="QDialog" name="desOptions" >
-  <property name="geometry" >
+ <widget class="QDialog" name="desOptions">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>645</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Option TURNS</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <widget class="QGroupBox" name="groupBox1" >
-     <property name="minimumSize" >
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox1">
+     <property name="minimumSize">
       <size>
        <width>635</width>
-       <height>252</height>
+       <height>200</height>
       </size>
      </property>
-     <property name="maximumSize" >
+     <property name="maximumSize">
       <size>
        <width>16777215</width>
        <height>252</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Configurer une Version</string>
      </property>
-     <widget class="QComboBox" name="CBVersions" >
-      <property name="geometry" >
-       <rect>
-        <x>10</x>
-        <y>30</y>
-        <width>121</width>
-        <height>40</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>0</width>
-        <height>40</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>121</width>
-        <height>40</height>
-       </size>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="Bok" >
-      <property name="geometry" >
-       <rect>
-        <x>500</x>
-        <y>30</y>
-        <width>121</width>
-        <height>40</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>90</width>
-        <height>40</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>121</width>
-        <height>40</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Valider</string>
-      </property>
-      <property name="autoDefault" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="PBajout" >
-      <property name="geometry" >
-       <rect>
-        <x>10</x>
-        <y>200</y>
-        <width>106</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>101</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Ajouter
+     <layout class="QVBoxLayout" name="verticalLayout_4">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QComboBox" name="CBVersions">
+          <property name="minimumSize">
+           <size>
+            <width>120</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>121</width>
+            <height>40</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="minimumSize">
+           <size>
+            <width>120</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>117</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="Bok">
+          <property name="minimumSize">
+           <size>
+            <width>120</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>121</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Valider</string>
+          </property>
+          <property name="autoDefault">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QLabel" name="textLabel1_3">
+          <property name="text">
+           <string>Fichier catalogue (chemin complet) :</string>
+          </property>
+          <property name="wordWrap">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="LERepCata">
+          <property name="minimumSize">
+           <size>
+            <width>501</width>
+            <height>41</height>
+           </size>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QPushButton" name="PBajout">
+          <property name="minimumSize">
+           <size>
+            <width>101</width>
+            <height>41</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Ajouter
 Version :</string>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LEVersionAjout" >
-      <property name="geometry" >
-       <rect>
-        <x>122</x>
-        <y>200</y>
-        <width>154</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>101</width>
-        <height>41</height>
-       </size>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="PBSup" >
-      <property name="geometry" >
-       <rect>
-        <x>360</x>
-        <y>200</y>
-        <width>106</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>101</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Supprimer
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="LEVersionAjout">
+          <property name="minimumSize">
+           <size>
+            <width>101</width>
+            <height>41</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="PBSup">
+          <property name="minimumSize">
+           <size>
+            <width>101</width>
+            <height>41</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Supprimer
 Version :</string>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LEVersionSup" >
-      <property name="geometry" >
-       <rect>
-        <x>470</x>
-        <y>200</y>
-        <width>155</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>0</width>
-        <height>41</height>
-       </size>
-      </property>
-     </widget>
-     <widget class="QWidget" name="layoutWidget" >
-      <property name="geometry" >
-       <rect>
-        <x>7</x>
-        <y>100</y>
-        <width>621</width>
-        <height>65</height>
-       </rect>
-      </property>
-      <layout class="QVBoxLayout" name="verticalLayout" >
-       <item>
-        <widget class="QLabel" name="textLabel1_3" >
-         <property name="text" >
-          <string>Fichier catalogue (chemin complet) :</string>
-         </property>
-         <property name="wordWrap" >
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="LERepCata" >
-         <property name="minimumSize" >
-          <size>
-           <width>501</width>
-           <height>41</height>
-          </size>
-         </property>
-         <property name="text" >
-          <string/>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="LEVersionSup">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>41</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QGroupBox" name="groupBox3" >
-     <property name="minimumSize" >
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="groupBox3">
+     <property name="minimumSize">
       <size>
        <width>548</width>
-       <height>90</height>
+       <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Doc</string>
      </property>
-     <widget class="QLabel" name="textLabel1" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>28</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>613</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>16777215</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Répertoire d'accès à la documentation :</string>
-      </property>
-      <property name="wordWrap" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LERepDoc" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>74</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>520</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string/>
-      </property>
-     </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QLabel" name="textLabel1">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>Répertoire d'accès à la documentation :</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LERepDoc">
+        <property name="minimumSize">
+         <size>
+          <width>520</width>
+          <height>40</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="2" column="0" >
-    <widget class="QGroupBox" name="groupBox3_2" >
-     <property name="minimumSize" >
+   <item row="2" column="0">
+    <widget class="QGroupBox" name="groupBox3_2">
+     <property name="minimumSize">
       <size>
        <width>548</width>
-       <height>90</height>
+       <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Espace de travail</string>
      </property>
-     <widget class="QLabel" name="textLabel1_4" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>28</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>613</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>16777215</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Répertoire de sauvegarde par défaut :</string>
-      </property>
-      <property name="wordWrap" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LESaveDir" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>74</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>520</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string/>
-      </property>
-     </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="QLabel" name="textLabel1_4">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>Répertoire de sauvegarde par défaut :</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LESaveDir">
+        <property name="minimumSize">
+         <size>
+          <width>520</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="3" column="0" >
-    <widget class="QSplitter" name="splitter_3" >
-     <property name="orientation" >
+   <item row="3" column="0">
+    <widget class="QSplitter" name="splitter_3">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <widget class="QCheckBox" name="Bdefaut" >
-      <property name="minimumSize" >
+     <widget class="QCheckBox" name="Bdefaut">
+      <property name="minimumSize">
        <size>
         <width>340</width>
         <height>41</height>
        </size>
       </property>
-      <property name="maximumSize" >
+      <property name="maximumSize">
        <size>
         <width>16777215</width>
         <height>41</height>
        </size>
       </property>
-      <property name="font" >
+      <property name="font">
        <font>
         <pointsize>12</pointsize>
        </font>
       </property>
-      <property name="text" >
+      <property name="text">
        <string>Réinitialiser avec les valeurs par defaut</string>
       </property>
      </widget>
-     <widget class="QPushButton" name="PBQuit" >
-      <property name="minimumSize" >
+     <widget class="QPushButton" name="PBQuit">
+      <property name="minimumSize">
        <size>
         <width>151</width>
         <height>31</height>
        </size>
       </property>
-      <property name="text" >
+      <property name="text">
        <string>Quitter</string>
       </property>
      </widget>
@@ -351,7 +330,7 @@ Version :</string>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections/>
index 0ed9364ec2f2c89cd6987d6fb8cf0ccda7dde43f..9117814945fe02c7f176fb8d6a434399d35dcc75 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>desOptions</class>
- <widget class="QDialog" name="desOptions" >
-  <property name="geometry" >
+ <widget class="QDialog" name="desOptions">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>794</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="minimumSize">
+   <size>
+    <width>0</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle">
    <string>Option TURNS</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <widget class="QGroupBox" name="groupBox1" >
-     <property name="minimumSize" >
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox1">
+     <property name="minimumSize">
       <size>
        <width>635</width>
-       <height>252</height>
+       <height>200</height>
       </size>
      </property>
-     <property name="maximumSize" >
+     <property name="maximumSize">
       <size>
        <width>16777215</width>
        <height>252</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Configurer une Version</string>
      </property>
-     <widget class="QComboBox" name="CBVersions" >
-      <property name="geometry" >
-       <rect>
-        <x>10</x>
-        <y>30</y>
-        <width>121</width>
-        <height>40</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>0</width>
-        <height>40</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>121</width>
-        <height>40</height>
-       </size>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="Bok" >
-      <property name="geometry" >
-       <rect>
-        <x>500</x>
-        <y>30</y>
-        <width>121</width>
-        <height>40</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>90</width>
-        <height>40</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>121</width>
-        <height>40</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Valider</string>
-      </property>
-      <property name="autoDefault" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="PBajout" >
-      <property name="geometry" >
-       <rect>
-        <x>10</x>
-        <y>200</y>
-        <width>106</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>101</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Ajouter
+     <layout class="QVBoxLayout" name="verticalLayout_5">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QComboBox" name="CBVersions">
+          <property name="minimumSize">
+           <size>
+            <width>120</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>121</width>
+            <height>40</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="Bok">
+          <property name="minimumSize">
+           <size>
+            <width>120</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>121</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Valider</string>
+          </property>
+          <property name="autoDefault">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QLabel" name="textLabel1_3">
+          <property name="text">
+           <string>Fichier catalogue (chemin complet) :</string>
+          </property>
+          <property name="wordWrap">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="LERepCata">
+          <property name="minimumSize">
+           <size>
+            <width>501</width>
+            <height>41</height>
+           </size>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QPushButton" name="PBajout">
+          <property name="minimumSize">
+           <size>
+            <width>101</width>
+            <height>41</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Ajouter
 Version :</string>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LEVersionAjout" >
-      <property name="geometry" >
-       <rect>
-        <x>122</x>
-        <y>200</y>
-        <width>154</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>101</width>
-        <height>41</height>
-       </size>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="PBSup" >
-      <property name="geometry" >
-       <rect>
-        <x>360</x>
-        <y>200</y>
-        <width>106</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>101</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Supprimer
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="LEVersionAjout">
+          <property name="minimumSize">
+           <size>
+            <width>101</width>
+            <height>41</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="PBSup">
+          <property name="minimumSize">
+           <size>
+            <width>101</width>
+            <height>41</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Supprimer
 Version :</string>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LEVersionSup" >
-      <property name="geometry" >
-       <rect>
-        <x>470</x>
-        <y>200</y>
-        <width>155</width>
-        <height>43</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>0</width>
-        <height>41</height>
-       </size>
-      </property>
-     </widget>
-     <widget class="QWidget" name="layoutWidget" >
-      <property name="geometry" >
-       <rect>
-        <x>7</x>
-        <y>100</y>
-        <width>621</width>
-        <height>65</height>
-       </rect>
-      </property>
-      <layout class="QVBoxLayout" name="verticalLayout" >
-       <item>
-        <widget class="QLabel" name="textLabel1_3" >
-         <property name="text" >
-          <string>Fichier catalogue (chemin complet) :</string>
-         </property>
-         <property name="wordWrap" >
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="LERepCata" >
-         <property name="minimumSize" >
-          <size>
-           <width>501</width>
-           <height>41</height>
-          </size>
-         </property>
-         <property name="text" >
-          <string/>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="LEVersionSup">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>41</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <widget class="QGroupBox" name="groupBox2" >
-     <property name="minimumSize" >
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="groupBox2">
+     <property name="minimumSize">
       <size>
        <width>548</width>
-       <height>90</height>
+       <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Configurer la bibliothèque Open TURNS</string>
      </property>
-     <widget class="QLabel" name="textLabel1_2" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>28</y>
-        <width>617</width>
-        <height>17</height>
-       </rect>
-      </property>
-      <property name="text" >
-       <string>Répertoire d'installation d'Open TURNS :</string>
-      </property>
-      <property name="wordWrap" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LERepOT" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>50</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>520</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string/>
-      </property>
-     </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QLabel" name="textLabel1_2">
+        <property name="text">
+         <string>Répertoire d'installation d'Open TURNS :</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LERepOT">
+        <property name="minimumSize">
+         <size>
+          <width>520</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="2" column="0" >
-    <widget class="QGroupBox" name="groupBox3" >
-     <property name="minimumSize" >
+   <item row="2" column="0">
+    <widget class="QGroupBox" name="groupBox3">
+     <property name="minimumSize">
       <size>
        <width>548</width>
-       <height>90</height>
+       <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Doc</string>
      </property>
-     <widget class="QLabel" name="textLabel1" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>28</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>613</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>16777215</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Répertoire d'accès à la documentation :</string>
-      </property>
-      <property name="wordWrap" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LERepDoc" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>74</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>520</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string/>
-      </property>
-     </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="QLabel" name="textLabel1">
+        <property name="minimumSize">
+         <size>
+          <width>613</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>Répertoire d'accès à la documentation :</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LERepDoc">
+        <property name="minimumSize">
+         <size>
+          <width>520</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="3" column="0" >
-    <widget class="QGroupBox" name="groupBox3_2" >
-     <property name="minimumSize" >
+   <item row="3" column="0">
+    <widget class="QGroupBox" name="groupBox3_2">
+     <property name="minimumSize">
       <size>
        <width>548</width>
-       <height>90</height>
+       <height>0</height>
       </size>
      </property>
-     <property name="title" >
+     <property name="title">
       <string>Espace de travail</string>
      </property>
-     <widget class="QLabel" name="textLabel1_4" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>28</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>613</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="maximumSize" >
-       <size>
-        <width>16777215</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>Répertoire de sauvegarde par défaut :</string>
-      </property>
-      <property name="wordWrap" >
-       <bool>false</bool>
-      </property>
-     </widget>
-     <widget class="QLineEdit" name="LESaveDir" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>74</y>
-        <width>617</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>520</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string/>
-      </property>
-     </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_4">
+      <item>
+       <widget class="QLabel" name="textLabel1_4">
+        <property name="minimumSize">
+         <size>
+          <width>613</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>Répertoire de sauvegarde par défaut :</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="LESaveDir">
+        <property name="minimumSize">
+         <size>
+          <width>520</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
-   <item row="4" column="0" >
-    <widget class="QSplitter" name="splitter_3" >
-     <property name="orientation" >
+   <item row="4" column="0">
+    <widget class="QSplitter" name="splitter_3">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <widget class="QCheckBox" name="Bdefaut" >
-      <property name="minimumSize" >
+     <widget class="QCheckBox" name="Bdefaut">
+      <property name="minimumSize">
        <size>
         <width>340</width>
         <height>41</height>
        </size>
       </property>
-      <property name="maximumSize" >
+      <property name="maximumSize">
        <size>
         <width>16777215</width>
         <height>41</height>
        </size>
       </property>
-      <property name="font" >
+      <property name="font">
        <font>
         <pointsize>12</pointsize>
        </font>
       </property>
-      <property name="text" >
+      <property name="text">
        <string>Réinitialiser avec les valeurs par defaut</string>
       </property>
      </widget>
-     <widget class="QPushButton" name="PBQuit" >
-      <property name="minimumSize" >
+     <widget class="QPushButton" name="PBQuit">
+      <property name="minimumSize">
        <size>
         <width>151</width>
         <height>31</height>
        </size>
       </property>
-      <property name="text" >
+      <property name="text">
        <string>Quitter</string>
       </property>
      </widget>
@@ -399,7 +368,7 @@ Version :</string>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections/>
index 83a4a41e1edf253cfe34d8663b428a2ed895471b..4128a1da6aea8d7b3ced9dc64b5f058652b0a727 100644 (file)
@@ -1,81 +1,98 @@
-<ui version="4.0" stdsetdef="1" >
-  <author></author>
-  <comment></comment>
-  <exportmacro></exportmacro>
-  <class>desPdf</class>
-  <widget class="QDialog" name="desPdf" >
-    <property name="geometry" >
-      <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>538</width>
-        <height>142</height>
-      </rect>
-    </property>
-    <property name="windowTitle" >
-      <string>desPdf</string>
-    </property>
-    <widget class="QLabel" name="textLabel1_2" >
-      <property name="geometry" >
-        <rect>
-          <x>20</x>
-          <y>10</y>
-          <width>280</width>
-          <height>20</height>
-        </rect>
-      </property>
-      <property name="text" >
-        <string>Lecteur Pdf</string>
-      </property>
-      <property name="wordWrap" >
+<ui version="4.0" >
+ <class>desPdf</class>
+ <widget class="QDialog" name="desPdf" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>538</width>
+    <height>142</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Lire les Pdf</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <layout class="QHBoxLayout" name="horizontalLayout_2" >
+     <item>
+      <widget class="QLabel" name="textLabel1_2" >
+       <property name="text" >
+        <string>Lecteur Pdf :</string>
+       </property>
+       <property name="wordWrap" >
         <bool>false</bool>
-      </property>
-    </widget>
-    <widget class="QPushButton" name="BCancel" >
-      <property name="geometry" >
-        <rect>
-          <x>450</x>
-          <y>90</y>
-          <width>70</width>
-          <height>31</height>
-        </rect>
-      </property>
-      <property name="text" >
-        <string>Cancel</string>
-      </property>
-    </widget>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0" >
     <widget class="QLineEdit" name="LERepPdf" >
-      <property name="geometry" >
-        <rect>
-          <x>20</x>
-          <y>40</y>
-          <width>501</width>
-          <height>31</height>
-        </rect>
-      </property>
-      <property name="text" >
-        <string>acroread</string>
-      </property>
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>acroread</string>
+     </property>
     </widget>
-    <widget class="QPushButton" name="Bok" >
-      <property name="geometry" >
-        <rect>
-          <x>350</x>
-          <y>90</y>
-          <width>70</width>
-          <height>31</height>
-        </rect>
-      </property>
-      <property name="text" >
+   </item>
+   <item row="2" column="0" >
+    <layout class="QHBoxLayout" name="horizontalLayout" >
+     <item>
+      <spacer name="horizontalSpacer" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="Bok" >
+       <property name="text" >
         <string>Ok</string>
-      </property>
-    </widget>
-  </widget>
-  <layoutdefault spacing="6" margin="11" />
-  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
-  <tabstops>
-    <tabstop>LERepPdf</tabstop>
-    <tabstop>Bok</tabstop>
-    <tabstop>BCancel</tabstop>
-  </tabstops>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="BCancel" >
+       <property name="text" >
+        <string>Cancel</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>LERepPdf</tabstop>
+  <tabstop>Bok</tabstop>
+  <tabstop>BCancel</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
 </ui>
index 07de12334718b2736de05cdbba56d66542f72a2b..da0461f28738b497589ebe703a85e99fcce7cd09 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DChoixCata</class>
- <widget class="QDialog" name="DChoixCata" >
-  <property name="geometry" >
+ <widget class="QDialog" name="DChoixCata">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>547</width>
-    <height>215</height>
+    <width>465</width>
+    <height>271</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Choix d'une version du code Aster</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <widget class="QLabel" name="TLNb" >
-     <property name="minimumSize" >
-      <size>
-       <width>30</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="text" >
-      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <widget class="QLabel" name="TLNb">
+       <property name="minimumSize">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
-&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-size:11pt;">2 versions sont disponibles&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;2 versions sont disponibles&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+       </property>
+       <property name="wordWrap">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_3">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
    </item>
-   <item rowspan="2" row="0" column="1" >
-    <widget class="QComboBox" name="CBChoixCata" >
-     <property name="enabled" >
-      <bool>true</bool>
-     </property>
-     <property name="minimumSize" >
-      <size>
-       <width>125</width>
-       <height>41</height>
-      </size>
+   <item row="1" column="1">
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
      </property>
-     <property name="maximumSize" >
+     <property name="sizeHint" stdset="0">
       <size>
-       <width>150</width>
-       <height>16777215</height>
+       <width>20</width>
+       <height>45</height>
       </size>
      </property>
-    </widget>
+    </spacer>
    </item>
-   <item row="1" column="0" >
-    <widget class="QLabel" name="textLabel1_2" >
-     <property name="minimumSize" >
-      <size>
-       <width>60</width>
-       <height>60</height>
-      </size>
-     </property>
-     <property name="text" >
-      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+   <item row="2" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLabel" name="textLabel1_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
-&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;span style=" font-size:large;">Veuillez choisir celle avec laquelle&lt;/span>&lt;/p>
-&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:large;">&lt;span style=" font-size:large;"> vous souhaitez travailler&lt;/span>&lt;/p>&lt;/body>&lt;/html></string>
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;table style=&quot;-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;&quot;&gt;
+&lt;tr&gt;
+&lt;td style=&quot;border: none;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:large;&quot;&gt;Veuillez choisir celle avec laquelle&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:large;&quot;&gt; vous souhaitez travailler&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</string>
+       </property>
+       <property name="scaledContents">
+        <bool>false</bool>
+       </property>
+       <property name="wordWrap">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>38</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QComboBox" name="CBChoixCata">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>125</width>
+         <height>41</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="3" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
      </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>45</height>
+      </size>
      </property>
-    </widget>
+    </spacer>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <widget class="QFrame" name="frame3" >
-     <property name="frameShape" >
+   <item row="4" column="0" colspan="2">
+    <widget class="QFrame" name="frame3">
+     <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
-     <property name="frameShadow" >
+     <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <widget class="QPushButton" name="buttonOk" >
-      <property name="geometry" >
-       <rect>
-        <x>11</x>
-        <y>13</y>
-        <width>91</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="text" >
-       <string>&amp;OK</string>
-      </property>
-      <property name="shortcut" >
-       <string/>
-      </property>
-      <property name="autoDefault" >
-       <bool>true</bool>
-      </property>
-      <property name="default" >
-       <bool>true</bool>
-      </property>
-     </widget>
-     <widget class="QPushButton" name="buttonCancel" >
-      <property name="geometry" >
-       <rect>
-        <x>437</x>
-        <y>13</y>
-        <width>81</width>
-        <height>41</height>
-       </rect>
-      </property>
-      <property name="minimumSize" >
-       <size>
-        <width>81</width>
-        <height>41</height>
-       </size>
-      </property>
-      <property name="text" >
-       <string>&amp;Cancel</string>
-      </property>
-      <property name="shortcut" >
-       <string/>
-      </property>
-      <property name="autoDefault" >
-       <bool>true</bool>
-      </property>
-     </widget>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QPushButton" name="buttonOk">
+        <property name="minimumSize">
+         <size>
+          <width>81</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>&amp;OK</string>
+        </property>
+        <property name="shortcut">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>true</bool>
+        </property>
+        <property name="default">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="buttonCancel">
+        <property name="minimumSize">
+         <size>
+          <width>81</width>
+          <height>41</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>&amp;Cancel</string>
+        </property>
+        <property name="shortcut">
+         <string/>
+        </property>
+        <property name="autoDefault">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
     </widget>
    </item>
   </layout>
-  <zorder>TLNb</zorder>
-  <zorder>textLabel1_2</zorder>
-  <zorder>CBChoixCata</zorder>
-  <zorder>frame3</zorder>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections/>
diff --git a/UiQT4/desChoixCode.ui b/UiQT4/desChoixCode.ui
new file mode 100644 (file)
index 0000000..2006fc3
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ChoixCode</class>
+ <widget class="QWidget" name="ChoixCode">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>508</width>
+    <height>442</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Choix du code</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label_choix">
+       <property name="minimumSize">
+        <size>
+         <width>0</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Veuillez choisir un code :</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Preferred</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>70</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <spacer name="horizontalSpacer_3">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Preferred</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="0" column="1">
+      <widget class="QWidget" name="widget" native="true">
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QRadioButton" name="rB_Aster">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Aster</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rB_Carmel3D">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Carmel3D</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rB_Cuve2dg">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Cuve2dg</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rB_Carmel3D">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>MAP</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rB_Openturns_Study">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Openturns_Study</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="rB_Openturns_Wrapper">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Openturns_Wrapper</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <spacer name="horizontalSpacer_4">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="3" column="1">
+    <spacer name="verticalSpacer_3">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Preferred</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>58</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="4" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QPushButton" name="pB_OK">
+       <property name="minimumSize">
+        <size>
+         <width>80</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>OK</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pB_cancel">
+       <property name="minimumSize">
+        <size>
+         <width>80</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Cancel</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
index dc8e8a837e5310680df6029325c41ac417fbecc9..4fc16cf6ff8d1fcff285eda72eb6efac6a58cac4 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>ChoixMap</class>
- <widget class="QDialog" name="ChoixMap" >
-  <property name="geometry" >
+ <widget class="QDialog" name="ChoixMap">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>788</width>
-    <height>752</height>
+    <height>610</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Dialog</string>
   </property>
-  <widget class="QLabel" name="label" >
-   <property name="geometry" >
-    <rect>
-     <x>10</x>
-     <y>370</y>
-     <width>141</width>
-     <height>41</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>scheme description :</string>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="pushButton" >
-   <property name="geometry" >
-    <rect>
-     <x>10</x>
-     <y>440</y>
-     <width>83</width>
-     <height>30</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>Doc</string>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="PBIconeMap" >
-   <property name="geometry" >
-    <rect>
-     <x>10</x>
-     <y>30</y>
-     <width>83</width>
-     <height>91</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string/>
-   </property>
-   <property name="icon" >
-    <iconset>
-     <normaloff>../../../map.ppm</normaloff>../../../map.ppm</iconset>
-   </property>
-   <property name="iconSize" >
-    <size>
-     <width>160</width>
-     <height>160</height>
-    </size>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="pushButton_3" >
-   <property name="geometry" >
-    <rect>
-     <x>670</x>
-     <y>30</y>
-     <width>81</width>
-     <height>101</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string/>
-   </property>
-   <property name="icon" >
-    <iconset>
-     <normaloff>image120.png</normaloff>image120.png</iconset>
-   </property>
-   <property name="iconSize" >
-    <size>
-     <width>160</width>
-     <height>160</height>
-    </size>
-   </property>
-  </widget>
-  <widget class="QGroupBox" name="groupBoxScheme" >
-   <property name="geometry" >
-    <rect>
-     <x>390</x>
-     <y>20</y>
-     <width>261</width>
-     <height>311</height>
-    </rect>
-   </property>
-   <property name="title" >
-    <string>Scheme</string>
-   </property>
-  </widget>
-  <widget class="QGroupBox" name="groupBoxModule" >
-   <property name="geometry" >
-    <rect>
-     <x>110</x>
-     <y>20</y>
-     <width>261</width>
-     <height>311</height>
-    </rect>
-   </property>
-   <property name="title" >
-    <string>Modules</string>
-   </property>
-   <layout class="QVBoxLayout" name="verticalLayout" >
-    <item>
-     <widget class="QRadioButton" name="RBM1" >
-      <property name="text" >
-       <string>oxides</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM2" >
-      <property name="text" >
-       <string>scc</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM3" >
-      <property name="text" >
-       <string>concrete</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM4" >
-      <property name="text" >
-       <string>polycristals</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM5" >
-      <property name="text" >
-       <string>polymers</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM6" >
-      <property name="text" >
-       <string>micro</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM7" >
-      <property name="text" >
-       <string>seal</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM8" >
-      <property name="text" >
-       <string>mox</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM9" >
-      <property name="text" >
-       <string>nano</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QRadioButton" name="RBM10" >
-      <property name="text" >
-       <string>insulator</string>
-      </property>
-     </widget>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QLabel" name="labelScheme" >
-   <property name="geometry" >
-    <rect>
-     <x>160</x>
-     <y>380</y>
-     <width>551</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string/>
-   </property>
-  </widget>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_3">
+       <item>
+        <widget class="QPushButton" name="PBIconeMap">
+         <property name="minimumSize">
+          <size>
+           <width>81</width>
+           <height>91</height>
+          </size>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+         <property name="icon">
+          <iconset>
+           <normaloff>../../../map.ppm</normaloff>../../../map.ppm</iconset>
+         </property>
+         <property name="iconSize">
+          <size>
+           <width>160</width>
+           <height>160</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>264</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBoxModule">
+       <property name="title">
+        <string>Modules</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QRadioButton" name="RBM1">
+          <property name="text">
+           <string>oxides</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM2">
+          <property name="text">
+           <string>scc</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM3">
+          <property name="text">
+           <string>concrete</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM4">
+          <property name="text">
+           <string>polycristals</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM5">
+          <property name="text">
+           <string>polymers</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM6">
+          <property name="text">
+           <string>micro</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM7">
+          <property name="text">
+           <string>seal</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM8">
+          <property name="text">
+           <string>mox</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM9">
+          <property name="text">
+           <string>nano</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM10">
+          <property name="text">
+           <string>insulator</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="RBM11">
+          <property name="text">
+           <string>images</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBoxScheme">
+       <property name="title">
+        <string>Scheme</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="QPushButton" name="pushButton_3">
+         <property name="minimumSize">
+          <size>
+           <width>81</width>
+           <height>101</height>
+          </size>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+         <property name="icon">
+          <iconset>
+           <normaloff>image120.png</normaloff>image120.png</iconset>
+         </property>
+         <property name="iconSize">
+          <size>
+           <width>160</width>
+           <height>160</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>17</width>
+           <height>278</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>scheme description :</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="labelScheme">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="text">
+        <string>Doc</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+  <zorder>PBIconeMap</zorder>
+  <zorder>pushButton_3</zorder>
+  <zorder>groupBoxScheme</zorder>
+  <zorder>groupBoxModule</zorder>
+  <zorder>verticalSpacer</zorder>
+  <zorder>verticalSpacer_2</zorder>
  </widget>
  <resources/>
  <connections/>
index 434caad0fbfb2481c1021da5f9816f618e9fadcb..9a5cc827c3a7c1f64b933a80da7173d4f71638bc 100644 (file)
    </item>
    <item row="2" column="0" >
     <layout class="QHBoxLayout" name="horizontalLayout" >
+     <item>
+      <widget class="QPushButton" name="BAlpha" >
+       <property name="text" >
+        <string>Tri Alpha</string>
+       </property>
+      </widget>
+     </item>
      <item>
       <spacer name="horizontalSpacer" >
        <property name="orientation" >
        </property>
        <property name="sizeHint" stdset="0" >
         <size>
-         <width>263</width>
+         <width>198</width>
          <height>27</height>
         </size>
        </property>
index f265353e40b378ac546641d58b375338492aef55..afee2cc776ae4d1640b32a8686197f4f5cf34768 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DError</class>
- <widget class="QWidget" name="DError" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DError">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>480</height>
    </rect>
   </property>
-  <property name="minimumSize" >
+  <property name="minimumSize">
    <size>
     <width>350</width>
     <height>0</height>
    </size>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>DInactif</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item row="0" column="0" >
-    <widget class="QTextBrowser" name="textBrowser" >
-     <property name="html" >
-      <string>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QTextBrowser" name="textBrowser">
+     <property name="minimumSize">
+      <size>
+       <width>130</width>
+       <height>120</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16777215</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="sizeIncrement">
+      <size>
+       <width>0</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="autoFormatting">
+      <set>QTextEdit::AutoNone</set>
+     </property>
+     <property name="tabChangesFocus">
+      <bool>false</bool>
+     </property>
+     <property name="html">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
 p, li { white-space: pre-wrap; }
-&lt;/style>&lt;/head>&lt;body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
-&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
-&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">&lt;/p>
-&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">&lt;/p>
-&lt;p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">&lt;/p>
-&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">Le noeud selectionné&lt;/p>
-&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">ne correspond pas&lt;/p>
-&lt;p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;">à un noeud actif&lt;/p>&lt;/body>&lt;/html></string>
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;table border=&quot;0&quot; style=&quot;-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;&quot;&gt;
+&lt;tr&gt;
+&lt;td style=&quot;border: none;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Le noeud selectionné&lt;/span&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;ne correspond pas&lt;/span&gt;&lt;/p&gt;
+&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;à un noeud actif&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" >
-    <layout class="QHBoxLayout" >
+   <item row="1" column="0">
+    <layout class="QHBoxLayout">
      <item>
-      <spacer name="spacer1_2" >
-       <property name="orientation" >
+      <spacer name="spacer1_2">
+       <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <property name="sizeType" >
+       <property name="sizeType">
         <enum>QSizePolicy::Expanding</enum>
        </property>
-       <property name="sizeHint" stdset="0" >
+       <property name="sizeHint" stdset="0">
         <size>
          <width>171</width>
          <height>20</height>
@@ -55,30 +81,30 @@ p, li { white-space: pre-wrap; }
       </spacer>
      </item>
      <item>
-      <widget class="QPushButton" name="bSup" >
-       <property name="toolTip" >
+      <widget class="QPushButton" name="bSup">
+       <property name="toolTip">
         <string>suppression du mot clef</string>
        </property>
-       <property name="text" >
+       <property name="text">
         <string>&amp;Supprimer</string>
        </property>
-       <property name="shortcut" >
+       <property name="shortcut">
         <string>Alt+S</string>
        </property>
-       <property name="autoDefault" >
+       <property name="autoDefault">
         <bool>true</bool>
        </property>
       </widget>
      </item>
      <item>
-      <spacer name="spacer1" >
-       <property name="orientation" >
+      <spacer name="spacer1">
+       <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <property name="sizeType" >
+       <property name="sizeType">
         <enum>QSizePolicy::Expanding</enum>
        </property>
-       <property name="sizeHint" stdset="0" >
+       <property name="sizeHint" stdset="0">
         <size>
          <width>171</width>
          <height>20</height>
@@ -90,7 +116,7 @@ p, li { white-space: pre-wrap; }
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections/>
diff --git a/UiQT4/desImage.ui b/UiQT4/desImage.ui
new file mode 100644 (file)
index 0000000..513831b
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DSelImage</class>
+ <widget class="QDialog" name="DSelImage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>329</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Image Selection</string>
+  </property>
+  <widget class="QDialogButtonBox" name="BSelect">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>280</y>
+     <width>371</width>
+     <height>32</height>
+    </rect>
+   </property>
+   <property name="orientation">
+    <enum>Qt::Horizontal</enum>
+   </property>
+   <property name="standardButtons">
+    <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>BSelect</sender>
+   <signal>accepted()</signal>
+   <receiver>DSelImage</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>BSelect</sender>
+   <signal>rejected()</signal>
+   <receiver>DSelImage</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
index 4ab0ed9a321e89554af68e2af150d8101710f439..3fd283fe3ff9d93fe0bdb75bedf7072d0cf3d747 100644 (file)
    <string>DMacro</string>
   </property>
   <layout class="QGridLayout" >
-   <item row="2" column="1" >
-    <widget class="QPushButton" name="bOk" >
-     <property name="minimumSize" >
-      <size>
-       <width>0</width>
-       <height>30</height>
-      </size>
-     </property>
-     <property name="toolTip" >
-      <string>validation de la saisie</string>
-     </property>
-     <property name="text" >
-      <string>&amp;Valider</string>
-     </property>
-     <property name="shortcut" >
-      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
-     </property>
-     <property name="autoDefault" >
-      <bool>true</bool>
-     </property>
-     <property name="default" >
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
    <item row="1" column="0" colspan="3" >
     <widget class="QLabel" name="Commentaire" >
      <property name="text" >
@@ -299,17 +274,58 @@ p, li { white-space: pre-wrap; }
      </widget>
     </widget>
    </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="BAlpha" >
+     <property name="text" >
+      <string>Tri Alpha</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
+    <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>161</width>
+       <height>30</height>
+      </size>
+     </property>
+     <property name="toolTip" >
+      <string>validation de la saisie</string>
+     </property>
+     <property name="text" >
+      <string>&amp;Valider</string>
+     </property>
+     <property name="shortcut" >
+      <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+     </property>
+     <property name="autoDefault" >
+      <bool>true</bool>
+     </property>
+     <property name="default" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <spacer name="horizontalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
   </layout>
-  <zorder>bOk</zorder>
-  <zorder>Commentaire</zorder>
-  <zorder>TWChoix</zorder>
  </widget>
  <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>LEFiltre</tabstop>
   <tabstop>LENomFichier</tabstop>
-  <tabstop>bOk</tabstop>
   <tabstop>TWChoix</tabstop>
   <tabstop>LBMCPermis</tabstop>
   <tabstop>LBRegles</tabstop>
index f7eb24830e09a2b8297e80c7a5e7dced186be4d2..6cd587612f177ea17c466e134ac9af8246abe122 100644 (file)
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
-    <widget class="QListWidget" name="LBParam"/>
+    <widget class="QListWidget" name="LBParam">
+     <property name="selectionMode">
+      <enum>QAbstractItemView::MultiSelection</enum>
+     </property>
+    </widget>
    </item>
    <item row="1" column="0">
     <layout class="QHBoxLayout" name="horizontalLayout">
index b7d6966fc8ee814e4328e51029819f9294fc3cd2..776d36e1bb6d9c9a0d5b84efdffcf6bef44ad82a 100644 (file)
      </property>
     </widget>
    </item>
-   <item row="2" column="1" >
+   <item row="2" column="2" >
     <widget class="QPushButton" name="bOk" >
+     <property name="minimumSize" >
+      <size>
+       <width>159</width>
+       <height>0</height>
+      </size>
+     </property>
      <property name="toolTip" >
       <string>validation de la saisie</string>
      </property>
      </property>
     </widget>
    </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="BAlpha" >
+     <property name="text" >
+      <string>Tri Alpha</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <spacer name="horizontalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
   </layout>
  </widget>
  <layoutdefault spacing="6" margin="11" />
index d94ed6dae64f6c04d3ffa441c91bc2da79904774..f55efe66b022e1b5451c9f4adecb4450505f017a 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DPlusBase</class>
- <widget class="QWidget" name="DPlusBase" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DPlusBase">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>728</height>
    </rect>
   </property>
-  <property name="minimumSize" >
+  <property name="minimumSize">
    <size>
     <width>350</width>
     <height>0</height>
    </size>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>DUnIn</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout_4" >
-   <item row="0" column="0" >
-    <widget class="QTabWidget" name="tabuniqueinto" >
-     <widget class="QWidget" name="Widget8" >
-      <attribute name="title" >
+  <layout class="QGridLayout" name="gridLayout_4">
+   <item row="0" column="0">
+    <widget class="QTabWidget" name="tabuniqueinto">
+     <widget class="QWidget" name="Widget8">
+      <attribute name="title">
        <string>Saisir Valeur</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_2" >
-       <item rowspan="7" row="0" column="0" >
-        <layout class="QVBoxLayout" name="verticalLayout_2" >
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0" rowspan="7">
+        <layout class="QVBoxLayout" name="verticalLayout_2">
          <item>
-          <widget class="QLabel" name="textLabel1" >
-           <property name="text" >
-            <string>&lt;u>&lt;font size="+1">Valeur(s) actuelle(s)&lt;/font>&lt;/u></string>
+          <widget class="QLabel" name="textLabel1">
+           <property name="text">
+            <string>&lt;u&gt;&lt;font size=&quot;+1&quot;&gt;Valeur(s) actuelle(s)&lt;/font&gt;&lt;/u&gt;</string>
            </property>
-           <property name="wordWrap" >
+           <property name="wordWrap">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item>
-          <widget class="QListWidget" name="LBValeurs" >
-           <property name="minimumSize" >
+          <widget class="QListWidget" name="LBValeurs">
+           <property name="minimumSize">
             <size>
-             <width>200</width>
+             <width>0</width>
              <height>0</height>
             </size>
            </property>
          </item>
         </layout>
        </item>
-       <item row="0" column="1" >
-        <layout class="QGridLayout" name="gridLayout" >
-         <item row="0" column="0" colspan="3" >
-          <layout class="QHBoxLayout" name="horizontalLayout" >
+       <item row="0" column="1">
+        <layout class="QGridLayout" name="gridLayout">
+         <item row="0" column="0" colspan="3">
+          <layout class="QHBoxLayout" name="horizontalLayout">
            <item>
-            <widget class="QLabel" name="textLabel1_2" >
-             <property name="minimumSize" >
+            <widget class="QLabel" name="textLabel1_2">
+             <property name="minimumSize">
               <size>
                <width>61</width>
                <height>21</height>
               </size>
              </property>
-             <property name="maximumSize" >
+             <property name="maximumSize">
               <size>
                <width>61</width>
                <height>21</height>
               </size>
              </property>
-             <property name="text" >
-              <string>&lt;font size="+1">Valeur&lt;/font></string>
+             <property name="text">
+              <string>&lt;font size=&quot;+1&quot;&gt;Valeur&lt;/font&gt;</string>
              </property>
-             <property name="wordWrap" >
+             <property name="wordWrap">
               <bool>false</bool>
              </property>
             </widget>
            </item>
            <item>
-            <spacer name="spacer6" >
-             <property name="orientation" >
+            <spacer name="spacer6">
+             <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
-             <property name="sizeType" >
+             <property name="sizeType">
               <enum>QSizePolicy::Expanding</enum>
              </property>
-             <property name="sizeHint" stdset="0" >
+             <property name="sizeHint" stdset="0">
               <size>
                <width>168</width>
                <height>18</height>
            </item>
           </layout>
          </item>
-         <item row="1" column="0" >
-          <widget class="QToolButton" name="BAjout1Val" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <item row="1" column="0">
+          <widget class="QToolButton" name="BAjout1Val">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <property name="minimumSize" >
+           <property name="minimumSize">
             <size>
              <width>40</width>
              <height>30</height>
             </size>
            </property>
-           <property name="toolTip" >
+           <property name="toolTip">
             <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string/>
            </property>
-           <property name="icon" >
+           <property name="icon">
             <iconset>
              <normaloff>../Editeur/icons/arrow_left.png</normaloff>../Editeur/icons/arrow_left.png</iconset>
            </property>
           </widget>
          </item>
-         <item row="1" column="1" colspan="2" >
-          <widget class="QLineEdit" name="LEValeur" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
+         <item row="1" column="1" colspan="2">
+          <widget class="QLineEdit" name="LEValeur">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <property name="minimumSize" >
+           <property name="minimumSize">
             <size>
              <width>220</width>
              <height>30</height>
            </property>
           </widget>
          </item>
-         <item row="2" column="0" >
-          <widget class="QToolButton" name="BSup1Val" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <item row="2" column="0">
+          <widget class="QToolButton" name="BSup1Val">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <property name="minimumSize" >
+           <property name="minimumSize">
             <size>
              <width>40</width>
              <height>30</height>
             </size>
            </property>
-           <property name="toolTip" >
+           <property name="toolTip">
             <string>enleve l occurence selectionnee</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string/>
            </property>
-           <property name="icon" >
+           <property name="icon">
             <iconset>
              <normaloff>../Editeur/icons/arrow_right.png</normaloff>../Editeur/icons/arrow_right.png</iconset>
            </property>
           </widget>
          </item>
-         <item row="2" column="1" >
-          <widget class="QToolButton" name="BSalome" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <item row="2" column="1">
+          <widget class="QToolButton" name="BSalome">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <property name="minimumSize" >
+           <property name="minimumSize">
             <size>
              <width>40</width>
              <height>30</height>
             </size>
            </property>
-           <property name="toolTip" >
+           <property name="toolTip">
             <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string/>
            </property>
-           <property name="icon" >
+           <property name="icon">
             <iconset>
              <normaloff>image240.png</normaloff>image240.png</iconset>
            </property>
           </widget>
          </item>
-         <item row="2" column="2" >
-          <widget class="QPushButton" name="BView2D" >
-           <property name="minimumSize" >
+         <item row="2" column="2">
+          <widget class="QPushButton" name="BView2D">
+           <property name="minimumSize">
             <size>
-             <width>120</width>
+             <width>0</width>
              <height>30</height>
             </size>
            </property>
-           <property name="text" >
+           <property name="text">
             <string>Visualiser</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
-       <item row="1" column="1" >
-        <spacer name="verticalSpacer" >
-         <property name="orientation" >
+       <item row="1" column="1">
+        <spacer name="verticalSpacer">
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" stdset="0" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>158</height>
          </property>
         </spacer>
        </item>
-       <item row="2" column="1" >
-        <layout class="QHBoxLayout" name="horizontalLayout_2" >
+       <item row="2" column="1">
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
          <item>
-          <spacer name="spacer5" >
-           <property name="orientation" >
+          <spacer name="spacer5">
+           <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeType" >
+           <property name="sizeType">
             <enum>QSizePolicy::Expanding</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>150</width>
              <height>20</height>
           </spacer>
          </item>
          <item>
-          <layout class="QVBoxLayout" name="verticalLayout" >
+          <layout class="QVBoxLayout" name="verticalLayout">
            <item>
-            <widget class="QPushButton" name="bParam" >
-             <property name="minimumSize" >
+            <widget class="QPushButton" name="bParam">
+             <property name="minimumSize">
               <size>
                <width>100</width>
                <height>30</height>
               </size>
              </property>
-             <property name="maximumSize" >
+             <property name="maximumSize">
               <size>
                <width>100</width>
                <height>30</height>
               </size>
              </property>
-             <property name="toolTip" >
+             <property name="toolTip">
               <string>suppression du mot clef</string>
              </property>
-             <property name="text" >
+             <property name="text">
               <string>&amp;Parametres</string>
              </property>
-             <property name="shortcut" >
+             <property name="shortcut">
               <string>Alt+P</string>
              </property>
-             <property name="autoDefault" >
+             <property name="autoDefault">
               <bool>true</bool>
              </property>
             </widget>
            </item>
            <item>
-            <widget class="QPushButton" name="bImport" >
-             <property name="minimumSize" >
+            <widget class="QPushButton" name="bImport">
+             <property name="minimumSize">
               <size>
                <width>100</width>
                <height>30</height>
               </size>
              </property>
-             <property name="maximumSize" >
+             <property name="maximumSize">
               <size>
                <width>100</width>
                <height>30</height>
               </size>
              </property>
-             <property name="toolTip" >
+             <property name="toolTip">
               <string>suppression du mot clef</string>
              </property>
-             <property name="text" >
+             <property name="text">
               <string>&amp;Importer</string>
              </property>
-             <property name="shortcut" >
+             <property name="shortcut">
               <string>Alt+I</string>
              </property>
-             <property name="autoDefault" >
+             <property name="autoDefault">
               <bool>true</bool>
              </property>
             </widget>
          </item>
         </layout>
        </item>
-       <item row="3" column="1" >
-        <spacer name="spacer3_3" >
-         <property name="orientation" >
+       <item row="3" column="1">
+        <spacer name="spacer3_3">
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeType" >
+         <property name="sizeType">
           <enum>QSizePolicy::Expanding</enum>
          </property>
-         <property name="sizeHint" stdset="0" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>289</width>
            <height>100</height>
          </property>
         </spacer>
        </item>
-       <item row="4" column="1" >
-        <widget class="QLabel" name="Commentaire" >
-         <property name="minimumSize" >
+       <item row="4" column="1">
+        <widget class="QLabel" name="Commentaire">
+         <property name="minimumSize">
           <size>
            <width>298</width>
            <height>61</height>
           </size>
          </property>
-         <property name="text" >
+         <property name="text">
           <string/>
          </property>
         </widget>
        </item>
-       <item row="5" column="1" >
-        <spacer name="spacer3_2" >
-         <property name="orientation" >
+       <item row="5" column="1">
+        <spacer name="spacer3_2">
+         <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeType" >
+         <property name="sizeType">
           <enum>QSizePolicy::Expanding</enum>
          </property>
-         <property name="sizeHint" stdset="0" >
+         <property name="sizeHint" stdset="0">
           <size>
            <width>265</width>
            <height>48</height>
          </property>
         </spacer>
        </item>
-       <item row="6" column="1" >
-        <layout class="QHBoxLayout" name="horizontalLayout_3" >
+       <item row="6" column="1">
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
          <item>
-          <spacer name="horizontalSpacer_2" >
-           <property name="orientation" >
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>118</width>
              <height>27</height>
           </spacer>
          </item>
          <item>
-          <widget class="QPushButton" name="bOk" >
-           <property name="minimumSize" >
+          <widget class="QPushButton" name="bOk">
+           <property name="minimumSize">
             <size>
              <width>160</width>
              <height>30</height>
             </size>
            </property>
-           <property name="maximumSize" >
+           <property name="maximumSize">
             <size>
              <width>160</width>
              <height>30</height>
             </size>
            </property>
-           <property name="toolTip" >
+           <property name="toolTip">
             <string>validation de la saisie</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string>&amp;Valider</string>
            </property>
-           <property name="shortcut" >
+           <property name="shortcut">
             <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
            </property>
-           <property name="autoDefault" >
+           <property name="autoDefault">
             <bool>true</bool>
            </property>
-           <property name="default" >
+           <property name="default">
             <bool>false</bool>
            </property>
           </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <tabstops>
   <tabstop>LEValeur</tabstop>
   <tabstop>tabuniqueinto</tabstop>
index a44f52e54922e087a97fa65e341e00ff7216bb17..ca5dd757a37282d2c5f4870e6e2651fd3f2ec564 100644 (file)
            </property>
            <property name="sizeHint" stdset="0" >
             <size>
-             <width>40</width>
-             <height>20</height>
+             <width>148</width>
+             <height>27</height>
             </size>
            </property>
           </spacer>
            </property>
            <property name="sizeHint" stdset="0" >
             <size>
-             <width>40</width>
-             <height>20</height>
+             <width>58</width>
+             <height>27</height>
             </size>
            </property>
           </spacer>
          </item>
+         <item>
+          <widget class="QPushButton" name="BAlpha" >
+           <property name="text" >
+            <string>Tri Alpha</string>
+           </property>
+          </widget>
+         </item>
         </layout>
        </item>
       </layout>
index 7fc41bf7db5fae0efbb982dfbbf650bce02d598c..43dddc8f2d3a2578ace15c3056c51cab9d87c9db 100644 (file)
      </widget>
     </widget>
    </item>
-   <item row="2" column="1" >
+   <item row="1" column="0" colspan="3" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2" >
     <widget class="QPushButton" name="bOk" >
      <property name="minimumSize" >
       <size>
-       <width>0</width>
+       <width>161</width>
        <height>30</height>
       </size>
      </property>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" colspan="3" >
-    <widget class="QLabel" name="Commentaire" >
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="alphabetique" >
      <property name="text" >
-      <string/>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
+      <string>BAlpha</string>
      </property>
     </widget>
    </item>
+   <item row="2" column="1" >
+    <spacer name="horizontalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
   </layout>
  </widget>
  <layoutdefault spacing="6" margin="11" />
   <tabstop>LBRegles</tabstop>
   <tabstop>LBNouvCommande</tabstop>
   <tabstop>RBalpha</tabstop>
-  <tabstop>bOk</tabstop>
  </tabstops>
  <resources/>
  <connections/>
index 48eb58c840ea530bb309e1805ed772b0a3e2fb76..35bf3ab23cd62fa61bd08162472961a81c48e714 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DSelVal</class>
- <widget class="QWidget" name="DSelVal" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DSelVal">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>469</width>
-    <height>624</height>
+    <width>468</width>
+    <height>610</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Sélection de valeurs</string>
   </property>
-  <widget class="QTextEdit" name="TBtext" >
-   <property name="geometry" >
-    <rect>
-     <x>9</x>
-     <y>9</y>
-     <width>451</width>
-     <height>476</height>
-    </rect>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="BImportSel" >
-   <property name="geometry" >
-    <rect>
-     <x>220</x>
-     <y>520</y>
-     <width>208</width>
-     <height>27</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>Ajouter Selection</string>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="BImportTout" >
-   <property name="geometry" >
-    <rect>
-     <x>220</x>
-     <y>560</y>
-     <width>208</width>
-     <height>27</height>
-    </rect>
-   </property>
-   <property name="text" >
-    <string>Importer Tout</string>
-   </property>
-  </widget>
-  <widget class="QGroupBox" name="BGSeparateur" >
-   <property name="geometry" >
-    <rect>
-     <x>20</x>
-     <y>500</y>
-     <width>188</width>
-     <height>103</height>
-    </rect>
-   </property>
-   <property name="title" >
-    <string>Separateur</string>
-   </property>
-   <widget class="QRadioButton" name="Bespace" >
-    <property name="geometry" >
-     <rect>
-      <x>20</x>
-      <y>20</y>
-      <width>148</width>
-      <height>23</height>
-     </rect>
-    </property>
-    <property name="text" >
-     <string>espace</string>
-    </property>
-    <property name="checked" >
-     <bool>true</bool>
-    </property>
-   </widget>
-   <widget class="QRadioButton" name="Bvirgule" >
-    <property name="geometry" >
-     <rect>
-      <x>20</x>
-      <y>40</y>
-      <width>148</width>
-      <height>23</height>
-     </rect>
-    </property>
-    <property name="text" >
-     <string>virgule</string>
-    </property>
-   </widget>
-   <widget class="QRadioButton" name="BpointVirgule" >
-    <property name="geometry" >
-     <rect>
-      <x>20</x>
-      <y>60</y>
-      <width>148</width>
-      <height>23</height>
-     </rect>
-    </property>
-    <property name="text" >
-     <string>point-virgule</string>
-    </property>
-   </widget>
-  </widget>
+  <layout class="QVBoxLayout" name="verticalLayout_3">
+   <item>
+    <widget class="QTextEdit" name="TBtext">
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>400</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>73</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QGroupBox" name="BGSeparateur">
+       <property name="title">
+        <string>Separateur</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout">
+        <item>
+         <widget class="QRadioButton" name="Bespace">
+          <property name="text">
+           <string>espace</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="Bvirgule">
+          <property name="text">
+           <string>virgule</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QRadioButton" name="BpointVirgule">
+          <property name="text">
+           <string>point-virgule</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>17</width>
+           <height>13</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="BImportSel">
+         <property name="text">
+          <string>Ajouter Selection</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="BImportTout">
+         <property name="text">
+          <string>Importer Tout</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections/>
index 5f205a7e789488775942daa5f3e3fd946c7379fb..8a62b41b32e6bb9cd8406b337f83bd9a83cccc61 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DUnASSD</class>
- <widget class="QWidget" name="DUnASSD" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DUnASSD">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>480</height>
    </rect>
   </property>
-  <property name="minimumSize" >
+  <property name="minimumSize">
    <size>
-    <width>350</width>
+    <width>0</width>
     <height>0</height>
    </size>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>DUnIn</string>
   </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="QTabWidget" name="tabuniqueinto" >
-     <widget class="QWidget" name="Widget8" >
-      <attribute name="title" >
+  <layout class="QGridLayout">
+   <item row="0" column="0">
+    <widget class="QTabWidget" name="tabuniqueinto">
+     <widget class="QWidget" name="Widget8">
+      <attribute name="title">
        <string>Saisir Valeur</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout" >
-       <item row="0" column="0" >
-        <widget class="QLabel" name="textLabel2" >
-         <property name="minimumSize" >
+      <layout class="QGridLayout" name="gridLayout">
+       <item row="0" column="0">
+        <widget class="QLabel" name="textLabel2">
+         <property name="minimumSize">
           <size>
            <width>436</width>
            <height>50</height>
           </size>
          </property>
-         <property name="text" >
-          <string>&lt;font size="+1">&lt;p align="center">Structures de données du type
-requis par l'objet courant :&lt;/p>&lt;/font></string>
+         <property name="text">
+          <string>&lt;font size=&quot;+1&quot;&gt;&lt;p align=&quot;center&quot;&gt;Structures de données du type
+requis par l'objet courant :&lt;/p&gt;&lt;/font&gt;</string>
          </property>
-         <property name="wordWrap" >
+         <property name="wordWrap">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="1" column="0" >
-        <widget class="QListWidget" name="listBoxASSD" />
+       <item row="1" column="0">
+        <widget class="QListWidget" name="listBoxASSD"/>
        </item>
-       <item row="2" column="0" >
-        <widget class="QLabel" name="Commentaire" >
-         <property name="minimumSize" >
+       <item row="2" column="0">
+        <widget class="QLabel" name="Commentaire">
+         <property name="minimumSize">
           <size>
            <width>380</width>
            <height>30</height>
           </size>
          </property>
-         <property name="text" >
+         <property name="text">
           <string/>
          </property>
-         <property name="wordWrap" >
+         <property name="wordWrap">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="3" column="0" >
-        <layout class="QHBoxLayout" name="horizontalLayout" >
+       <item row="3" column="0">
+        <layout class="QHBoxLayout" name="horizontalLayout">
          <item>
-          <spacer name="horizontalSpacer" >
-           <property name="orientation" >
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>138</width>
              <height>20</height>
@@ -78,36 +79,36 @@ requis par l'objet courant :&lt;/p>&lt;/font></string>
           </spacer>
          </item>
          <item>
-          <widget class="QPushButton" name="bOk" >
-           <property name="minimumSize" >
+          <widget class="QPushButton" name="bOk">
+           <property name="minimumSize">
             <size>
              <width>160</width>
              <height>30</height>
             </size>
            </property>
-           <property name="toolTip" >
+           <property name="toolTip">
             <string>validation de la saisie</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string>&amp;Valider</string>
            </property>
-           <property name="shortcut" >
+           <property name="shortcut">
             <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
            </property>
-           <property name="autoDefault" >
+           <property name="autoDefault">
             <bool>true</bool>
            </property>
-           <property name="default" >
+           <property name="default">
             <bool>true</bool>
            </property>
           </widget>
          </item>
          <item>
-          <spacer name="horizontalSpacer_2" >
-           <property name="orientation" >
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>138</width>
              <height>20</height>
@@ -123,7 +124,7 @@ requis par l'objet courant :&lt;/p>&lt;/font></string>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <resources/>
  <connections/>
index 4fd8997208bc79e4638ebd294580ed8c2cf6e321..e72877ad51502374285cb545557a584a11cf4d42 100644 (file)
     <height>480</height>
    </rect>
   </property>
-  <property name="minimumSize">
-   <size>
-    <width>350</width>
-    <height>0</height>
-   </size>
-  </property>
   <property name="windowTitle">
    <string>DUnIn</string>
   </property>
index f7a21519a6e8db5a19ac9c9dbe4792b4cae0133d..54e87d57f7b2bcf10c6f6904c429079ba7ab387a 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DUnComp</class>
- <widget class="QWidget" name="DUnComp" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DUnComp">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>529</height>
    </rect>
   </property>
-  <property name="minimumSize" >
-   <size>
-    <width>350</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>DUnComp</string>
   </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="QTabWidget" name="tabuniqueinto" >
-     <widget class="QWidget" name="Widget8" >
-      <attribute name="title" >
+  <layout class="QGridLayout">
+   <item row="0" column="0">
+    <widget class="QTabWidget" name="tabuniqueinto">
+     <widget class="QWidget" name="Widget8">
+      <attribute name="title">
        <string>Saisir Valeur</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_2" >
-       <item row="0" column="0" >
-        <layout class="QVBoxLayout" name="verticalLayout_2" >
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <layout class="QVBoxLayout" name="verticalLayout_2">
          <item>
-          <widget class="QLabel" name="textLabel1" >
-           <property name="text" >
-            <string>&lt;font size="+2">Complexe de la forme : a+bj&lt;/font></string>
+          <widget class="QLabel" name="textLabel1">
+           <property name="text">
+            <string>&lt;font size=&quot;+2&quot;&gt;Complexe de la forme : a+bj&lt;/font&gt;</string>
            </property>
-           <property name="wordWrap" >
+           <property name="wordWrap">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item>
-          <widget class="QLineEdit" name="LEcomp" >
-           <property name="minimumSize" >
+          <widget class="QLineEdit" name="LEcomp">
+           <property name="minimumSize">
             <size>
              <width>390</width>
              <height>40</height>
          </item>
         </layout>
        </item>
-       <item row="1" column="0" >
-        <layout class="QVBoxLayout" name="verticalLayout_3" >
+       <item row="1" column="0">
+        <layout class="QVBoxLayout" name="verticalLayout_3">
          <item>
-          <spacer name="verticalSpacer_2" >
-           <property name="orientation" >
+          <spacer name="verticalSpacer_2">
+           <property name="orientation">
             <enum>Qt::Vertical</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>20</width>
              <height>40</height>
           </spacer>
          </item>
          <item>
-          <widget class="QGroupBox" name="groupBox" >
-           <property name="title" >
+          <widget class="QGroupBox" name="groupBox">
+           <property name="title">
             <string>Ou</string>
            </property>
-           <layout class="QGridLayout" name="gridLayout" >
-            <item row="0" column="0" >
-             <widget class="QRadioButton" name="RBRI" >
-              <property name="text" >
+           <layout class="QGridLayout" name="gridLayout">
+            <item row="0" column="0">
+             <widget class="QRadioButton" name="RBRI">
+              <property name="text">
                <string>RI   : Réel                                                 Imaginaire</string>
               </property>
              </widget>
             </item>
-            <item row="1" column="0" >
-             <widget class="QRadioButton" name="RBMP" >
-              <property name="text" >
+            <item row="1" column="0">
+             <widget class="QRadioButton" name="RBMP">
+              <property name="text">
                <string>MP      : Module                                                 Phase</string>
               </property>
              </widget>
          </item>
         </layout>
        </item>
-       <item row="2" column="0" >
-        <layout class="QHBoxLayout" name="horizontalLayout_2" >
+       <item row="2" column="0">
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
          <item>
-          <widget class="QLineEdit" name="LEReel" >
-           <property name="minimumSize" >
+          <widget class="QLineEdit" name="LEReel">
+           <property name="minimumSize">
             <size>
              <width>190</width>
              <height>40</height>
           </widget>
          </item>
          <item>
-          <widget class="QLineEdit" name="LEImag" >
-           <property name="minimumSize" >
+          <widget class="QLineEdit" name="LEImag">
+           <property name="minimumSize">
             <size>
              <width>190</width>
              <height>40</height>
          </item>
         </layout>
        </item>
-       <item row="3" column="0" >
-        <layout class="QVBoxLayout" name="verticalLayout" >
+       <item row="3" column="0">
+        <layout class="QVBoxLayout" name="verticalLayout">
          <item>
-          <widget class="QLabel" name="Commentaire" >
-           <property name="text" >
-            <string>&lt;font size="+2">Un complexe est attendu&lt;/font></string>
+          <widget class="QLabel" name="Commentaire">
+           <property name="text">
+            <string>&lt;font size=&quot;+2&quot;&gt;Un complexe est attendu&lt;/font&gt;</string>
            </property>
-           <property name="wordWrap" >
+           <property name="wordWrap">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item>
-          <spacer name="verticalSpacer" >
-           <property name="orientation" >
+          <spacer name="verticalSpacer">
+           <property name="orientation">
             <enum>Qt::Vertical</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>20</width>
              <height>40</height>
           </spacer>
          </item>
          <item>
-          <layout class="QHBoxLayout" name="horizontalLayout" >
+          <layout class="QHBoxLayout" name="horizontalLayout">
            <item>
-            <spacer name="horizontalSpacer_2" >
-             <property name="orientation" >
+            <spacer name="horizontalSpacer_2">
+             <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
-             <property name="sizeHint" stdset="0" >
+             <property name="sizeHint" stdset="0">
               <size>
                <width>40</width>
                <height>20</height>
             </spacer>
            </item>
            <item>
-            <widget class="QPushButton" name="bOk" >
-             <property name="minimumSize" >
+            <widget class="QPushButton" name="bOk">
+             <property name="minimumSize">
               <size>
                <width>160</width>
                <height>30</height>
               </size>
              </property>
-             <property name="maximumSize" >
+             <property name="maximumSize">
               <size>
                <width>160</width>
                <height>30</height>
               </size>
              </property>
-             <property name="toolTip" >
+             <property name="toolTip">
               <string>validation de la saisie</string>
              </property>
-             <property name="text" >
+             <property name="text">
               <string>&amp;Valider</string>
              </property>
-             <property name="shortcut" >
+             <property name="shortcut">
               <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
              </property>
-             <property name="autoDefault" >
+             <property name="autoDefault">
               <bool>true</bool>
              </property>
-             <property name="default" >
+             <property name="default">
               <bool>true</bool>
              </property>
             </widget>
            </item>
            <item>
-            <spacer name="horizontalSpacer" >
-             <property name="orientation" >
+            <spacer name="horizontalSpacer">
+             <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
-             <property name="sizeHint" stdset="0" >
+             <property name="sizeHint" stdset="0">
               <size>
                <width>40</width>
                <height>20</height>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>LEcomp</tabstop>
index 0023c02276b8bce1cf143b3ecb0b7b097453ac30..7f9b33e6b695100b88b13a6c7bd8eef54b12f43f 100644 (file)
@@ -64,8 +64,8 @@
            </property>
            <property name="sizeHint" stdset="0" >
             <size>
-             <width>138</width>
-             <height>20</height>
+             <width>118</width>
+             <height>27</height>
             </size>
            </property>
           </spacer>
            </property>
            <property name="sizeHint" stdset="0" >
             <size>
-             <width>118</width>
+             <width>40</width>
              <height>20</height>
             </size>
            </property>
           </spacer>
          </item>
+         <item>
+          <widget class="QPushButton" name="BAlpha" >
+           <property name="text" >
+            <string>Tri alpha</string>
+           </property>
+          </widget>
+         </item>
         </layout>
        </item>
       </layout>
index ad293273ff39160e1eb4649b1bbdcf452f92003f..a8c5e0c13db3c5f9b91cbef373bc4c596157a77c 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DUnSDCOInto</class>
- <widget class="QWidget" name="DUnSDCOInto" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DUnSDCOInto">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>480</height>
    </rect>
   </property>
-  <property name="minimumSize" >
+  <property name="minimumSize">
    <size>
-    <width>350</width>
+    <width>0</width>
     <height>0</height>
    </size>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>DUnIn</string>
   </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="QTabWidget" name="tabuniqueinto" >
-     <widget class="QWidget" name="Widget8" >
-      <attribute name="title" >
+  <layout class="QGridLayout">
+   <item row="0" column="0">
+    <widget class="QTabWidget" name="tabuniqueinto">
+     <widget class="QWidget" name="Widget8">
+      <attribute name="title">
        <string>Saisir Valeur</string>
       </attribute>
-      <layout class="QGridLayout" >
-       <item row="0" column="0" colspan="3" >
-        <widget class="QLabel" name="textLabel2" >
-         <property name="text" >
-          <string>&lt;font size="+1">&lt;u>Structures de données du type requis par l'objet courant &lt;/u>&lt;/font></string>
+      <layout class="QGridLayout">
+       <item row="0" column="0" colspan="3">
+        <widget class="QLabel" name="textLabel2">
+         <property name="text">
+          <string>&lt;font size=&quot;+1&quot;&gt;&lt;u&gt;Structures de données du type requis par l'objet courant &lt;/u&gt;&lt;/font&gt;</string>
          </property>
-         <property name="wordWrap" >
+         <property name="wordWrap">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="1" column="0" colspan="3" >
-        <widget class="QListWidget" name="LBSDCO" />
+       <item row="1" column="0" colspan="3">
+        <widget class="QListWidget" name="LBSDCO"/>
        </item>
-       <item row="5" column="0" colspan="3" >
-        <widget class="QLabel" name="textLabel2_3" >
-         <property name="text" >
-          <string>&lt;font size="+1">Un objet de type CO est attendu&lt;/font></string>
+       <item row="5" column="0" colspan="3">
+        <widget class="QLabel" name="textLabel2_3">
+         <property name="text">
+          <string>&lt;font size=&quot;+1&quot;&gt;Un objet de type CO est attendu&lt;/font&gt;</string>
          </property>
-         <property name="wordWrap" >
+         <property name="wordWrap">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="4" column="0" colspan="3" >
-        <widget class="QLabel" name="Commentaire" >
-         <property name="minimumSize" >
+       <item row="4" column="0" colspan="3">
+        <widget class="QLabel" name="Commentaire">
+         <property name="minimumSize">
           <size>
            <width>420</width>
            <height>30</height>
           </size>
          </property>
-         <property name="text" >
+         <property name="text">
           <string/>
          </property>
-         <property name="wordWrap" >
+         <property name="wordWrap">
           <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="2" column="0" colspan="3" >
-        <layout class="QGridLayout" />
+       <item row="2" column="0" colspan="3">
+        <layout class="QGridLayout"/>
        </item>
-       <item row="3" column="0" colspan="3" >
-        <layout class="QHBoxLayout" >
+       <item row="3" column="0" colspan="3">
+        <layout class="QHBoxLayout">
          <item>
-          <widget class="QFrame" name="frame3" >
-           <property name="minimumSize" >
+          <widget class="QFrame" name="frame3">
+           <property name="minimumSize">
             <size>
              <width>190</width>
              <height>50</height>
             </size>
            </property>
-           <property name="frameShape" >
+           <property name="frameShape">
             <enum>QFrame::StyledPanel</enum>
            </property>
-           <property name="frameShadow" >
+           <property name="frameShadow">
             <enum>QFrame::Raised</enum>
            </property>
-           <widget class="QLabel" name="textLabel2_2" >
-            <property name="geometry" >
+           <widget class="QLabel" name="textLabel2_2">
+            <property name="geometry">
              <rect>
               <x>20</x>
               <y>10</y>
               <height>30</height>
              </rect>
             </property>
-            <property name="text" >
-             <string>&lt;font size="+1"> Nom concept : &lt;/font></string>
+            <property name="text">
+             <string>&lt;font size=&quot;+1&quot;&gt; Nom concept : &lt;/font&gt;</string>
             </property>
-            <property name="wordWrap" >
+            <property name="wordWrap">
              <bool>false</bool>
             </property>
            </widget>
           </widget>
          </item>
          <item>
-          <widget class="QLineEdit" name="LESDCO" >
-           <property name="minimumSize" >
+          <widget class="QLineEdit" name="LESDCO">
+           <property name="minimumSize">
             <size>
              <width>220</width>
              <height>40</height>
          </item>
         </layout>
        </item>
-       <item row="6" column="1" >
-        <widget class="QPushButton" name="bOk" >
-         <property name="minimumSize" >
+       <item row="6" column="1">
+        <widget class="QPushButton" name="bOk">
+         <property name="minimumSize">
           <size>
            <width>0</width>
            <height>30</height>
           </size>
          </property>
-         <property name="toolTip" >
+         <property name="toolTip">
           <string>validation de la saisie</string>
          </property>
-         <property name="text" >
+         <property name="text">
           <string>&amp;Valider</string>
          </property>
-         <property name="shortcut" >
+         <property name="shortcut">
           <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
          </property>
-         <property name="autoDefault" >
+         <property name="autoDefault">
           <bool>true</bool>
          </property>
-         <property name="default" >
+         <property name="default">
           <bool>true</bool>
          </property>
         </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>LESDCO</tabstop>
index 241af709b18ab9bc220c1c85eaec3e2c24af0d3d..03c68280ff765852d936afad56dc69f77bf1f386 100644 (file)
@@ -9,7 +9,7 @@ PY_FILES = desChoixCata.py desCommande.py desCommentaire.py desError.py desFormu
        desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \
        desUniqueSDCO.py desVisu.py  aideQT.py OptionsEditeur.py OptionsPdf.py myMain.py \
        desViewTexte.py desPixmap.py desMatrice.py OptionsOT.py OptionsCuve.py desChoixMap.py \
-        OptionsMAP.py
+        OptionsMAP.py desImage.py desChoixCode.py
 
 %.py:%.ui
        ${PYUIC} -x -o $@ $<
index cf9dbea54cfb4bfa0c655bde6fa111bac79e5117..3376537067605fb8f5f12465a63a36092f3ac4d6 100644 (file)
     <addaction name="actionParametres_Eficas" />
     <addaction name="actionLecteur_Pdf" />
    </widget>
-   <widget class="QMenu" name="menuPatrons" >
-    <property name="title" >
-     <string>Patrons</string>
-    </property>
-   </widget>
    <addaction name="menuFichier" />
    <addaction name="menuEdition" />
    <addaction name="menuJdC" />
    <addaction name="menu_Aide" />
    <addaction name="menuOptions" />
-   <addaction name="menuPatrons" />
   </widget>
   <widget class="QStatusBar" name="statusbar" />
   <widget class="QToolBar" name="toolBar" >
    <addaction name="action_Ouvrir" />
    <addaction name="actionEnregistrer" />
    <addaction name="separator" />
-   <addaction name="actionCouper" />
    <addaction name="actionCopier" />
    <addaction name="actionColler" />
+   <addaction name="actionSupprimer" />
+   <addaction name="actionCouper" />
   </widget>
   <action name="action_Nouveau" >
    <property name="icon" >
    </property>
   </action>
   <action name="actionSupprimer" >
+   <property name="icon" >
+    <iconset>
+     <normaloff>../Editeur/icons/delete.png</normaloff>../Editeur/icons/delete.png</iconset>
+   </property>
    <property name="text" >
     <string>Supprimer</string>
    </property>
index ddc76132c6d6261e8aab58731c5a16f8aaa15b14..d2f9fe0661ba30186df2158a786840efc8dd98c4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_AU_PLUS_UN Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF V_AU_PLUS_UN Validation  DATE 09/11/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
@@ -29,7 +29,7 @@ class AU_PLUS_UN:
       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):
+   def verif(self, args):
       """
           La méthode verif vérifie que l'on trouve 1 (au plus) des mos-clés
           de la liste self.mcs parmi les éléments de args
@@ -38,13 +38,23 @@ class AU_PLUS_UN:
           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
+      text = ''
+      count = 0
       args = self.liste_to_dico(args)
       for mc in self.mcs:
-        if args.has_key(mc):count=count+1
+         count = count + args.get(mc, 0)
       if count > 1:
-          text = "- Il ne faut qu'un mot-clé (au plus) parmi : "+`self.mcs`+'\n'
-          return text,0
-      return text,1
+         text = "- Il ne faut qu'un mot-clé (au plus) parmi : "+`self.mcs`+'\n'
+         return text, 0
+      return text, 1
 
+   def liste_to_dico(self, args) :
+      if type(args) is dict:
+         return args
+      elif type(args) in (list, tuple):
+         dico={}
+         for arg in args:
+            dico[arg] = dico.get(arg, 0) + 1
+         return dico
+      else :
+         raise "Erreur ce n'est ni un dictionnaire ni une liste", args
index ff80d0872bd3438baf070e9976dd9068d6c56a9c..02c2e6b80a53cba7181a3cf6ab162ca01d466c63 100644 (file)
@@ -1,24 +1,24 @@
-#@ MODIF V_MCCOMPO Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF V_MCCOMPO Validation  DATE 30/08/2011   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
 # RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# COPYRIGHT (C) 1991 - 2011  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-#                                                                       
-#                                                                       
 # ======================================================================
 
 
@@ -36,7 +36,7 @@ from Noyau.N_Exception import AsException
 
 class MCCOMPO:
    """
-       L'attribut mc_liste a été créé par une classe dérivée de la 
+       L'attribut mc_liste a été créé par une classe dérivée de la
        classe MCCOMPO du Noyau
    """
 
@@ -54,8 +54,8 @@ class MCCOMPO:
         self.parent.state = 'modified'
 
    def report(self):
-      """ 
-          Génère le rapport de validation de self 
+      """
+          Génère le rapport de validation de self
       """
       self.cr=self.CR()
       self.cr.debut = self.txt_nat+self.nom
@@ -71,19 +71,19 @@ class MCCOMPO:
       return self.cr
 
    def verif_regles(self):
-      """ 
-         A partir du dictionnaire des mots-clés présents, vérifie si les règles 
+      """
+         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 
+           - testglob = booléen 1 si toutes les règles OK, 0 sinon
       """
       #dictionnaire=self.dict_mc_presents(restreint='oui')
       dictionnaire=self.dict_mc_presents(restreint='non') # On verifie les regles avec les defauts affectés
-      texte=''
+      texte='\n'
       testglob = 1
       for r in self.definition.regles:
         erreurs,test=r.verif(dictionnaire)
@@ -96,7 +96,7 @@ class MCCOMPO:
       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
index 88b55e528d7bb5b22c7bd452c8671d14ee91687f..f0fc71478551aeca80794c740338840b15681644 100644 (file)
 # ======================================================================
 
 """
-   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.
+   Ce module contient la classe mixin MCSIMP qui porte les methodes
+   necessaires pour realiser la validation d'un objet de type MCSIMP
+   derive de OBJECT.
 
    Une classe mixin porte principalement des traitements et est
-   utilisée par héritage multiple pour composer les traitements.
+   utilisee par heritage multiple pour composer les traitements.
 """
 # Modules Python
 import string,types
@@ -42,20 +42,20 @@ from Noyau.N_VALIDATOR import listProto
 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
+      Cette classe est quasiment identique a la classe originale d'EFICAS
+      a part quelques changements cosmetiques et des chagements pour la
+      faire fonctionner de facon plus autonome par rapport a l'environnement
       EFICAS
  
-      A mon avis, il faudrait aller plus loin et réduire les dépendances
-      amont au strict nécessaire.
+      A mon avis, il faudrait aller plus loin et reduire les dependances
+      amont au strict necessaire.
 
-          - Est il indispensable de faire l'évaluation de la valeur dans le contexte
+          - Est il indispensable de faire l'evaluation 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
+          - Ne pourrait on pas doter les objets en presence des methodes suffisantes
+            pour eviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
+            d'ailleurs modifie la classe pour eviter l'import de GEOM
    """
 
    CR=N_CR.CR
@@ -82,14 +82,14 @@ class MCSIMP:
 
    def isvalid(self,cr='non'):
       """
-         Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
+         Cette methode retourne un indicateur de validite de l'objet de type MCSIMP
 
            - 0 si l'objet est invalide
            - 1 si l'objet est valide
 
-         Le paramè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.
+         Le parametre cr permet de parametrer le traitement. Si cr == 'oui'
+         la methode construit egalement un comte-rendu de validation
+         dans self.cr qui doit avoir ete cree prealablement.
       """
       if self.state == 'unchanged':
         return self.valid
@@ -99,14 +99,14 @@ class MCSIMP:
         #  verification presence
         if self.isoblig() and v == None :
           if cr == 'oui' :
-            self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
+            self.cr.fatal(string.join(("Mot-cle : ",self.nom," obligatoire non valorise")))
           valid = 0
 
         lval=listProto.adapt(v)
         if lval is None:
            valid=0
            if cr == 'oui' :
-              self.cr.fatal("None n'est pas une valeur autorisée")
+              self.cr.fatal("None n'est pas une valeur autorisee")
         else:
            # type,into ...
            #typeProto=TypeProtocol("type",typ=self.definition.type)
@@ -119,7 +119,7 @@ class MCSIMP:
            intoProto=self.intoProto
            cardProto=self.cardProto
            if cr == 'oui' :
-               #un cr est demandé : on collecte tous les types d'erreur
+               #un cr est demande : on collecte tous les types d'erreur
                try:
                    for val in lval:
                        typeProto.adapt(val)
@@ -144,7 +144,7 @@ class MCSIMP:
                    try:
                        self.definition.validators.convert(lval)
                    except ValError,e:
-                       self.cr.fatal(string.join(("Mot-clé",self.nom,"invalide :",str(e),"\nCritere de validite:",self.definition.validators.info())))
+                       self.cr.fatal(string.join(("Mot-cle",self.nom,"invalide :",str(e),"\nCritere de validite:",self.definition.validators.info())))
                        valid=0
            else:
                #si pas de cr demande, on sort a la toute premiere erreur 
@@ -164,29 +164,29 @@ class MCSIMP:
         return self.valid
 
    def isoblig(self):
-      """ indique si le mot-clé est obligatoire
+      """ indique si le mot-cle est obligatoire
       """
       return self.definition.statut=='o'
 
    def init_modif_up(self):
       """
-         Propage l'état modifié au parent s'il existe et n'est l'objet 
+         Propage l'etat modifie 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 """
+      """ genere 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.cr.debut = "Mot-cle simple : "+self.nom
+      self.cr.fin = "Fin Mot-cle 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))))
+        self.cr.fatal(string.join(("Mot-cle simple : ",self.nom,str(e))))
       return self.cr
 
 
diff --git a/Validation/V_MEME_NOMBRE.py b/Validation/V_MEME_NOMBRE.py
new file mode 100644 (file)
index 0000000..e07bb30
--- /dev/null
@@ -0,0 +1,66 @@
+#@ MODIF V_MEME_NOMBRE Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+#                                                                       
+#                                                                       
+# ======================================================================
+
+
+
+class MEME_NOMBRE:
+   """
+      La règle MEME_NOMBRE 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 =''
+      args = self.liste_to_dico(args)
+      size = -1
+
+      for mc in self.mcs:
+        if mc not in args.keys():
+          text = "Une clé dans la régle n'existe pas %s" % mc
+          return text,0
+
+        val = args[mc].valeur
+        len_val = 0
+        if not isinstance(val,type([])):
+          len_val = 1
+        else:
+          len_val = len(val)
+
+        if size == -1:
+          size = len_val
+        elif size != len_val:
+          text = "Pas la même longeur"
+          return text,0
+      return text,1
+
index ba62b9f9da1c4d0d0de5714d4724f680a17327e8..d1727ad32ac96fa6aa81a29976697aba88656eec 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
 #
 #
 # ======================================================================
-"""
-"""
 
-import parseur_python
-from convert_python import *
+import re
+from convert_python import PythonParser
 
 def entryPoint():
    """
-       Retourne les informations nécessaires pour le chargeur de plugins
-       Ces informations sont retournées dans un dictionnaire
+   Return a dictionary containing the description needed to load the plugin
    """
    return {
-        # Le nom du plugin
           'name' : 'openturns_study',
-        # La factory pour créer une instance du plugin
-          'factory' : PythonParser,
+          'factory' : OTStudyParser
           }
 
+class OTStudyParser(PythonParser):
+   """
+   This converter works like PythonParser, except that it also initializes all
+   model variables to None in order to avoid Python syntax errors when loading
+   a file with a different or inexistent definition of variables.
+   """
+   # We look for pattern "ModelVariable=NOMVAR,"
+   pattern_model_variable = re.compile(r'ModelVariable\s*=\s*(\w+)\s*,')
 
+   def convert(self, outformat, appli=None):
+      text = PythonParser.convert(self, outformat, appli)
+      varnames = self.pattern_model_variable.findall(text)
+      newtext = ""
+      for var in varnames:
+         newtext += "%s = None\n" % var
+      newtext += text
+      return newtext
index 7b845bcb774df1b67e359256fc9362235b7bfe9c..561877534b85c8b08bdcfb06ac9b97533bfd0095 100644 (file)
@@ -8,8 +8,6 @@ Ce module contient le generateur Etude pour Openturns
 
 __revision__ = "V1.0"
 
-import os
-
 defaultSTD = """#! /usr/bin/env python
 
 class StudyFileGenerationError:
@@ -269,13 +267,11 @@ class STDGenerateur :
     '''
     Importe le modele physique
     '''
-    fonction = None
     if ( self.DictMCVal.has_key( 'FileName' ) ):
       name =  self.DictMCVal[ 'FileName' ]
-      #fonction = name[name.rfind('/')+1:name.rfind('.xml')]
       
     txt  = "# Charge le modele physique\n"
-    txt  = "%s = WrapperFile( '%s' )\n" % (self.variable["wrapper"], name)
+    txt += "%s = WrapperFile( '%s' )\n" % (self.variable["wrapper"], name)
     txt += "%s = %s.getWrapperData()\n" % (self.variable["wrapperdata"], self.variable["wrapper"])
 
     txt += "# Ces lignes sont utiles pour le fonctionnement du script sous Salome\n"
@@ -289,7 +285,7 @@ class STDGenerateur :
     txt += "# Fin des lignes pour Salome\n"
     
     txt += "%s = NumericalMathFunction( %s )\n" % (self.variable["model"], self.variable["wrapper"],)
-    txt += "%s = %s.getInputNumericalPointDimension()\n" % (self.variable["n"], self.variable["model"])
+    txt += "%s = %s.getInputDimension()\n" % (self.variable["n"], self.variable["model"])
     txt += "\n"
     return txt
 
index f1bb0b262e0435d3118e7f4bec770adc76adc647..e109c493b979e8f46589c08416f56a8f8c095582 100644 (file)
@@ -589,7 +589,7 @@ class Cuve2dgGenerator(PythonGenerator):
         "SurfaceEchange_FluideStructure_mess" : "TRANSITOIRE",
          }
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
       self.text=''
       self.textCuve=''
       self.dico_mot={}
@@ -606,7 +606,8 @@ class Cuve2dgGenerator(PythonGenerator):
        s=PythonGenerator.generMCSIMP(self,obj)
        return s
 
-   def writeCuve2DG(self, filename):
+   def writeDefault(self, fn):
+      filename = fn[:fn.rfind(".")] + '.don'
       print "je passe dans writeCuve2DG"
       self.genereTexteCuve()
       f = open( filename, 'wb')
index 09a20a9d338d13722c179435adb255d71d0a4f64..751be8a0b993bb47a0f03ca16791acf986ebeb36 100644 (file)
@@ -37,14 +37,14 @@ from generator_python import PythonGenerator
 
 def entryPoint():
    """
-       Retourne les informations nécessaires pour le chargeur de plugins
+       Retourne les informations necessaires pour le chargeur de plugins
 
-       Ces informations sont retournées dans un dictionnaire
+       Ces informations sont retournees dans un dictionnaire
    """
    return {
         # Le nom du plugin
           'name' : 'homard',
-        # La factory pour créer une instance du plugin
+        # La factory pour creer une instance du plugin
           'factory' : HomardGenerator,
           }
 
@@ -56,7 +56,7 @@ class HomardGenerator(PythonGenerator):
        un texte au format homard 
 
    """
-   # Les extensions de fichier préconisées
+   # Les extensions de fichier preconis�es
    extensions=('.comm',)
 
    def __init__(self,cr=None):
@@ -66,7 +66,7 @@ class HomardGenerator(PythonGenerator):
       else:
          self.cr=N_CR.CR(debut='CR generateur format homard pour homard',
                          fin='fin CR format homard pour homard')
-      # Le texte au format homard est stocké dans l'attribut text
+      # Le texte au format homard est stock dans l'attribut text
       self.dico_mot_clef={}
       self.assoc={}
       self.init_assoc()
@@ -125,7 +125,7 @@ class HomardGenerator(PythonGenerator):
 
    def generMCSIMP(self,obj) :
       """
-          Convertit un objet MCSIMP en une liste de chaines de caractères à la
+          Convertit un objet MCSIMP en une liste de chaines de caract�res � la
           syntaxe homard
       """
       s=PythonGenerator.generMCSIMP(self,obj)
@@ -154,7 +154,7 @@ class HomardGenerator(PythonGenerator):
       self.textehomard=[]
       for mot in self.lmot_clef:
 
-#          on verifie d'abord que le mot clef doit bien être calculé
+#          on verifie d'abord que le mot clef doit bien etre calcule
           if self.dico_mot_depend.has_key(mot) :
              if self.cherche_dependance(mot) == 0 :
                       continue
index 9835fe775943475e3a1f7bee698eb983e870c3cd..4766a88082ca9ae21dbe9e0da17b2af6d031e9e6 100644 (file)
 """
 import traceback
 import types,string,re,os
+import time
+from datetime import date
 
 from generator_python import PythonGenerator
+try :
+   sys.path.append(os.path.join(os.getenv('MAP_DIRECTORY'),'classes/python/'))
+   from class_MAP_parameters import *
+except :
+   pass
+
 
 
 def entryPoint():
    """
       Retourne les informations necessaires pour le chargeur de plugins
-
       Ces informations sont retournees dans un dictionnaire
    """
    return {
@@ -61,39 +68,42 @@ class MapGenerator(PythonGenerator):
          os.makedirs(self.nom_racine)
       self.listeCODE=[]
       self.text=""
-      self.textCode=""
-      self.texteExecution=""
-      self.ssCode=self.config.appli.ssCode
 
-   def verifie(self):
-      print 'verification generique'
+      self.ssCode=self.config.appli.ssCode
+      self.INSTALLDIR=self.config.appli.INSTALLDIR
+      self.ssCodeDir=os.path.join(self.INSTALLDIR,'MAP/Templates',self.ssCode)
+      self.fichierYacs=self.ssCode+"_YACS_nodes"
+      self.texteExecution="import os,sys\n"
+      self.texteExecution+="sys.path.append('"+self.ssCodeDir+"')\n"
+      self.texteExecution+="from " + self.fichierYacs +" import *\n"
 
    def gener(self,obj,format='brut',config=None):
-      print 'generation dans generator_map'
       self.initialise(config)
       text=PythonGenerator.gener(self,obj,format)
-      self.verifie()
-      self.generePythonMap("non")
       return text
 
    def generRUN(self,obj,format='brut',config=None,):
-      print 'generRUN dans generator_map'
       self.initialise(config)
       text=PythonGenerator.gener(self,obj,format)
-      self.verifie()
-      self.generePythonMap("oui") 
+      for elt in self.listeCODE:
+          code=elt.keys()[0]
+          self.dico=elt[code]
+          if code in self.__class__.__dict__.keys():
+             texteCode=apply(self.__class__.__dict__[code],(self,))
+             self.texteExecution += texteCode
       return self.texteExecution
 
 
    def generRUNYACS(self,obj,format='brut',config=None,nomFichier=None):
       self.initialise(config)
       text=PythonGenerator.gener(self,obj,format)
+      #self.generePythonMap("non")
+
       import sys
-      sys.path.append('/local/noyret/Salome_5.1.3/Install/YACS/lib/python2.5/site-packages/salome/')
-      self.verifie()
+      sys.path.append(os.path.join(os.getenv("YACS_ROOT_DIR"),"lib/python2.4/site-packages/salome/"))
       import monCreateYacs
       self.monSchema=monCreateYacs.getSchema(config)
-      self.proc=self.monSchema.createProc()
+      self.proc=self.monSchema.createProc(self)
       for elt in self.listeCODE:
           code=elt.keys()[0]
           dico=elt[code]
@@ -102,6 +112,8 @@ class MapGenerator(PythonGenerator):
              if hasattr(self.monSchema, codeYACS): 
                 fct=getattr(self.monSchema, codeYACS)
                 fct(self.proc,dico)
+                
+      print str(nomFichier)
       self.monSchema.write_yacs_proc(self.proc,str(nomFichier))
 
    def generePythonMap(self,execution) :
@@ -121,25 +133,30 @@ class MapGenerator(PythonGenerator):
              self.texteExecution=self.texteExecution+texteCode
 
    def generPROC_ETAPE(self,obj):
-      clefDico=obj.nom
       self.DictTemp={}
       s=PythonGenerator.generPROC_ETAPE(self,obj)
       dico={}
       dico[obj.nom]=self.DictTemp
       self.listeCODE.append(dico)
+      if hasattr(obj.definition,"mcOblig") :
+         for clef in obj.definition.mcOblig.keys():
+             setattr(self,clef,obj.definition.mcOblig[clef])
       return s
 
 
    def generMCSIMP(self,obj) :
       """
       Convertit un objet MCSIMP en texte python
-      Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
       """
       s=PythonGenerator.generMCSIMP(self,obj)
-      clef=""
-      for i in obj.get_genealogie() :
-           clef=clef+"_"+i
-      self.DictTemp[clef]=obj.valeur
+      #clef=""
+      #for i in obj.get_genealogie() :
+      #     clef=clef+"_"+i
+      self.DictTemp[obj.nom]=obj.valeur
+      if hasattr(obj.definition,'equiv') and obj.definition.equiv!= None:
+         setattr(self,obj.definition.equiv,obj.valeur)
+      else :
+         setattr(self,obj.nom,obj.valeur)
       return s
 
 
@@ -150,6 +167,7 @@ class MapGenerator(PythonGenerator):
            chaine=result
        return chaine
 
+
    def  remplaceDICO(self,chaine,dico) :
        for mot in dico.keys() :
            rplact="%"+mot+"%"
index e743d6ec9e80b1b525287839941d5fffb22fda34..9a2854dc460fdf8054d58fad94754bb2c1e3c30c 100644 (file)
@@ -125,8 +125,9 @@ class OpenturnsGenerator(PythonGenerator):
       else :
          self.texteSTD="Il y a un pb a la Creation du STD"
 
-   def writeOpenturnsSTD(self, filename):
-      f = open( str(filename), 'wb')
+   def writeDefault(self, fn):
+      fileSTD = fn[:fn.rfind(".")] + '.py'
+      f = open( str(fileSTD), 'wb')
       f.write( self.texteSTD )
       f.close()
 
index 33923becd694dfbbcaca6f1b6247c667b10e2790..8c1c94b4d10e96cf954380106690f5d05cb6eeba 100644 (file)
@@ -129,13 +129,13 @@ class OpenturnsGenerator(PythonGenerator):
        print "dictMCVal", self.dictMCVal, "dictVariables", self.dictVariables
        MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, [], {} ,self.dictVariables)
        MonGenerateur=MonBaseGenerateur.getXMLGenerateur()
-       #try :
-       if 1== 1 :
+       try :
+       #if 1== 1 :
           self.wrapperXML=MonGenerateur.CreeXML()
-       #except :
-       else :
+       except :
+       #else :
          self.wrapperXML=None
 
-   def writeOpenturnsXML(self, filename):
-      self.wrapperXML.writeFile( str(filename) )
-
+   def writeDefault(self, filename):
+      fileXML = filename[:filename.rfind(".")] + '.xml'
+      self.wrapperXML.writeFile( str(fileXML) )
diff --git a/generator/generator_s_DIC.py b/generator/generator_s_DIC.py
new file mode 100644 (file)
index 0000000..cc0ffeb
--- /dev/null
@@ -0,0 +1,85 @@
+# -* coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+   Ce module contient le plugin generateur de fichier au format
+   SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+import sys
+try :
+   sys.path.append(os.path.join(os.getenv('MAP_DIRECTORY'),'classes/python/'))
+   from class_MAP_parameters import *
+except :
+   pass
+
+
+def entryPoint():
+   """
+      Retourne les informations necessaires pour le chargeur de plugins
+
+      Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 's_DIC',
+        # La factory pour creer une instance du plugin
+          'factory' : s_DICGenerator,
+          }
+
+
+class s_DICGenerator(MapGenerator):
+   """
+      Ce generateur parcourt un objet de type JDC et produit
+      un texte au format eficas et
+      un texte au format py
+
+   """
+   
+   def LIST_IMAGES(self):
+       print "je ne sais pas ce qu il faut faire"
+       commande="print 'je ne sais pas ce qu il faut faire avec le fichier :"
+       commande += str(self.FILE) +" '\n"
+       return commande
+       
+   def RBM(self):
+       print self.dico
+       if not self.dico.has_key('CSJ')   : self.dico['CSJ']=self.dico['CS']
+       if not self.dico.has_key('GSJ')   : self.dico['GSJ']=self.dico['GS']
+       if not self.dico.has_key('VMAXJ')   : self.dico['VMAXJ']=self.dico['VMAX']
+       commande="execRBM=component_RBM("+str(self.dico['CS'])+","+str(self.dico['CSJ'])+","
+       commande+=str(self.dico['GS'])+","+str(self.dico['GSJ'])+","
+       commande+=str(self.dico['VMAX'])+","+str(self.dico['VMAXJ'])+",'"+str(self.study_path)+"')\n"
+       return commande
+
+   def DISPL(self):
+       print self.dico
+       if not self.dico.has_key('CSJ')   : self.dico['CSJ']=self.dico['CS']
+       if not self.dico.has_key('GSJ')   : self.dico['GSJ']=self.dico['GS']
+       if not self.dico.has_key('VMAXJ')   : self.dico['VMAXJ']=self.dico['VMAX']
+       commande="execDISPL=component_DISPL("+str(self.dico['CS'])+","+str(self.dico['CSJ'])+","
+       commande+=str(self.dico['GS'])+","+str(self.dico['GSJ'])+","
+       commande+=str(self.dico['VMAX'])+","+str(self.dico['VMAXJ'])+",'"+str(self.study_path)+"')\n"
+       return commande
index 8b4bca8e751369ccdf5e77c522b93eff3a44eef5..f89bfd098bf3cca5e7e03bd2faa6fec51473f585 100644 (file)
@@ -28,38 +28,15 @@ import types,string,re,os
 
 from generator_map import MapGenerator
 
+import sys
+try :
+   sys.path.append(os.path.join(os.getenv('MAP_DIRECTORY'),'classes/python/'))
+   from class_MAP_parameters import *
+except :
+   pass
 #____________________________________________________________________________________
-# PYGMEEDict contient une equivalence entre le catalogue Map et les lignes generees
-# comme entete (commentaire ?) dans le fichier d'input de pygmee
 #
-
 CONFIGliste=('NAME_SCHEME', 'PATH_ASTER', 'PATH_BENHUR', 'PATH_MODULE', 'PATH_PYGMEE', 'PATH_STUDY', 'repIni')
-PYGMEEDict={
-       "_PYGMEE_FUSEAU1_b_forme_FICHIER"  : "#fuseau 1 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant ",
-       "FUSEAU2" :  "#fuseau 2 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant",
-       "_PYGMEE_TAILLE" : "# taille du VER en microns ",
-       "_PYGMEE_DISTANCE" : "# distance de repulsion :",
-           }
-
-#_______________________________________________________________________________________________________
-# listeOrdonneeMCPygmee contient une liste (donc ordonnee) des mots clefs pour 
-# imposer l'ordre des  lignes generees
-listeOrdonneeMCPygmee =('_PYGMEE_FUSEAU1_b_forme_FICHIER', 'FUSEAU2', '_PYGMEE_TAILLE','_PYGMEE_DISTANCE')
-
-
-BENHURDict={
-       "_BENHUR_FINESSE" : "discretisation des arretes du VER ",
-           }
-
-ASTERDict={
-       "_ASTER_LANCEMENT" : "execution de Code_Aster",
-       "_ASTER_CONDUCTIVITE_I" : "conductivite des inclusions",
-       "_ASTER_CONDUCTIVITE_M" : "conductivite de la matrice",
-           }
-
-GMSHDict={
-       "_GMSH_LANCEMENT" : "execution de GMSH",
-           }
 
 def entryPoint():
    """
@@ -83,135 +60,151 @@ class s_poly_st_1Generator(MapGenerator):
 
    """
    
-   def verifie(self):
-       liste=[]
-       for i in self.listeCODE:
-           liste.append(i.keys()[0])
-       if len(liste) != len(set(liste)):
-           raise AsException("il n'est pas prevu d avoir deux fois le meme code dans ce schema")
-
-
-   def PYGMEE(self,execution) :
-       dicoPygmee=self.dictMCVal["PYGMEE"]
-       self.dictPYGMEE=dicoPygmee
-       monFichier=self.config.PATH_PYGMEE+"/pygmee_input.txt"
-
-       #Lecture du fichier a trous
-       f = file(self.config.repIni+"/pygmee_input.txt","r")
-       chaine = f.read()  
-       f.close()   
-       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
-       chaine=self.remplaceDICO(chaine2,dicoPygmee)
-
-       if  os.path.isfile(monFichier) :
-           print "je detruis pygmee_input.txt"
-           commande="rm -rf " + monFichier
-           os.system (commande)
-       f=open(monFichier,'wb')
-       f.write(chaine)
-       f.close()
-       if execution=="non" : return ""
-
-       if ('_PYGMEE_LANCEMENT' in dicoPygmee.keys()) and  dicoPygmee['_PYGMEE_LANCEMENT'] == 'oui':
-           commande="echo '__________________';\n"
-           commande=commande + "echo 'execution de PYGMEE';\n"
-           commande=commande + "cd "+self.config.PATH_PYGMEE+";\n"
-           commande=commande + "python "+self.config.PATH_PYGMEE+"/pygmee_v1.py;\n"
-           commande=commande + "echo 'fin execution de PYGMEE';\n"
-           commande=commande + "echo '_____________________';\n\n\n"
-           return commande
-       else:
-           return ""
-
-   def BENHUR(self,execution) :
-       dicoBenhur=self.dictMCVal["BENHUR"]
-       if hasattr(self,'dictPYGMEE') and '_PYGMEE_TAILLE' in self.dictMCVal['PYGMEE']:
-           dicoBenhur["_PYGMEE_TAILLE"]=self.dictPYGMEE['_PYGMEE_TAILLE']
-       else :
-           dicoBenhur["_PYGMEE_TAILLE"]=0
-           print "Attention la variable Taille_VER non definie"
-       
-       finesse=str(dicoBenhur["_BENHUR_FINESSE"])
-       nom_fichier_BHR=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"_benhur_"+finesse+".bhr"
-       nom_BHR_Files=self.config.PATH_BENHUR+"/BHR_files.txt"
-
-       #Lecture du fichier a trous
-       f = file(self.config.repIni+"/benhur_pygmee.txt","r")
-       chaine = f.read()  
-       f.close()   
-       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
-       chaine=self.remplaceDICO(chaine2,dicoBenhur)
-
-       try :
-          f=open(nom_fichier_BHR,'wb')
-       except :
-          print "Pb de Generation de BENHUR"
-          return ""
-       f.write(chaine)
-       f.close()
-
-       f=open(nom_BHR_Files,'wb')
-       f.write(nom_fichier_BHR)
-       f.write("\n\n\n")
-       f.close()
-
-       if execution=="non" : return ""
-       if ('_BENHUR_LANCEMENT' in dicoBenhur.keys()) and  dicoBenhur['_BENHUR_LANCEMENT'] == 'oui':
-           commande="echo '__________________';\n"
-           commande=commande + "echo 'execution de BENHUR';\n"
-           commande=commande + "cd "+self.config.PATH_BENHUR+";\n"
-           commande=commande + "./benhur;\n"
-           commande=commande + "echo 'fin execution de BENHUR';\n"
-           commande=commande + "echo '________________________';\n\n\n"
-           return commande
-       else:
-          return ""
-
-
-
-   def ASTER(self,execution) :
-      print "Generation de ASTER"
-      dicoAster=self.dictMCVal["ASTER"]
-      nom_racine=self.config.PATH_MODULE+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME
-      nom_fichier_ASTER=nom_racine+"_aster.comm"
-
-      #Lecture du fichier a trous
-      f = file(self.config.repIni+"/s_poly_st_1_aster_template.comm","r")
-      chaine = f.read()  
-      f.close()   
-      chaine2=self.remplaceDICO(chaine,self.dictPYGMEE)
-      chaine=self.remplaceDICO(chaine2,dicoAster)
-
-      f=open(nom_fichier_ASTER,'wb')
-      f.write(chaine)
-      f.close()
-
-      if ('_ASTER_LANCEMENT' in dicoAster.keys()) and  dicoAster['_ASTER_LANCEMENT'] == 'oui':
-         commande="cd "+self.config.PATH_MODULE+";"
-         commande=commande + self.config.PATH_ASTER + "/as_run "+self.config.PATH_MODULE
-         commande=commande + "/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_aster.export"
-         os.system(commande)
-      else:
-         return ""
-
-   def GMSH(self,execution) :
-      dicoGmsh=self.dictMCVal["GMSH"]
-      if ('_GMSH_LANCEMENT' in dicoGmsh.keys()) and  dicoGmsh['_GMSH_LANCEMENT'] == 'oui':
-         commande="cd "+self.config.PATH_MODULE+";"
-         commande=commande + "gmsh "+self.config.PATH_MODULE+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_aster.resu.msh"
-         print commande
-         os.system(commande)
-      else:
-         return ""
-
-   def METHODE(self,execution) :
-      print "METHODE"
-      return ""
-
-   def MATERIAUX(self,execution) :
-      print "MATERIAUX"
-      return ""
-
-   def DISCRETISATION(self,execution) :
-      print "DISCRETISATION"
-      return ""
+
+#_________________________________
+#  - YACS functions
+#_________________________________
+
+   def PYGMEEYACS(self, SchemaYacs, proc):
+      monFichierInput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/pygmee_input.txt"
+      factoryNode = SchemaYacs.monCata._nodeMap["pygmee_v2"]
+      SchemaYacs.pygmeeNode = factoryNode.cloneNode("pygmee_v2")
+      SchemaYacs.pygmeeNode.getInputPort("phase_number").edInitPy(1)
+      SchemaYacs.pygmeeNode.getInputPort("sieve_curve_in").edInitPy(self.sieve_curve_in)
+      SchemaYacs.pygmeeNode.getInputPort("sieve_curve_out").edInitPy(self.sieve_curve_out)
+      SchemaYacs.pygmeeNode.getInputPort("repulsion_distance").edInitPy(self.repulsion_distance)
+      SchemaYacs.pygmeeNode.getInputPort("file_result_inclusions").edInitPy(self.inclusion_name)
+      SchemaYacs.pygmeeNode.getInputPort("file_result_rve").edInitPy(self.rve_name)
+      SchemaYacs.pygmeeNode.getInputPort("rve_size").edInitPy(self.rve_size)
+      SchemaYacs.pygmeeNode.getInputPort("study_name").edInitPy(self.study_name)
+      SchemaYacs.pygmeeNode.getInputPort("study_path").edInitPy(self.study_path)
+      proc.edAddChild(SchemaYacs.pygmeeNode)
+      if SchemaYacs.nodeAvant != None :
+         proc.edAddCFLink(SchemaYacs.nodeAvant,SchemaYacs.pygmeeNode)
+      SchemaYacs.nodeAvant=SchemaYacs.pygmeeNode
+      print "PYGMEEYACS node Ok"
+
+   def FDVGRIDYACS(self, SchemaYacs, proc):
+      factoryNode = SchemaYacs.monCata._nodeMap["fdvgrid"]
+      SchemaYacs.fdvgridNode = factoryNode.cloneNode("fdvgrid")
+
+      SchemaYacs.fdvgridNode.getInputPort("rve_size").edInitPy(self.rve_size)
+      SchemaYacs.fdvgridNode.getInputPort("lambda_I").edInitPy(self.lambda_I)
+      SchemaYacs.fdvgridNode.getInputPort("lambda_M").edInitPy(self.lambda_M)
+      SchemaYacs.fdvgridNode.getInputPort("finesse").edInitPy(self.finesse)
+      SchemaYacs.fdvgridNode.getInputPort("study_name").edInitPy(self.study_name)
+      SchemaYacs.fdvgridNode.getInputPort("study_path").edInitPy(self.study_path)
+         
+      proc.edAddChild(SchemaYacs.fdvgridNode)
+      pout=SchemaYacs.pygmeeNode.getOutputPort("result_inclusions")
+      pin=SchemaYacs.fdvgridNode.getInputPort("file_inclusions")
+      proc.edAddLink(pout,pin)
+         
+      if SchemaYacs.nodeAvant != None :
+         proc.edAddCFLink(SchemaYacs.nodeAvant,SchemaYacs.fdvgridNode)
+      SchemaYacs.nodeAvant=SchemaYacs.fdvgridNode
+      print "FDVGRIDYACS node Ok"
+
+   def BENHURYACS(self, SchemaYacs, proc):
+      factoryNode = SchemaYacs.monCata._nodeMap["benhur"]
+      SchemaYacs.benhurNode = factoryNode.cloneNode("benhur")
+
+      SchemaYacs.benhurNode.getInputPort("rve_size").edInitPy(self.rve_size)
+      SchemaYacs.benhurNode.getInputPort("finesse").edInitPy(self.finesse)
+      SchemaYacs.benhurNode.getInputPort("study_name").edInitPy(self.study_name)
+      SchemaYacs.benhurNode.getInputPort("study_path").edInitPy(self.study_path)
+         
+      proc.edAddChild(SchemaYacs.benhurNode)
+      pout=SchemaYacs.pygmeeNode.getOutputPort("result_inclusions")
+      pin=SchemaYacs.benhurNode.getInputPort("file_inclusions")
+      proc.edAddLink(pout,pin)
+         
+      if SchemaYacs.nodeAvant != None :
+         proc.edAddCFLink(SchemaYacs.nodeAvant,SchemaYacs.benhurNode)
+      SchemaYacs.nodeAvant=SchemaYacs.benhurNode
+      print "BENHURYACS node Ok"
+
+   def ASTERYACS(self, SchemaYacs, proc):
+      factoryNode = SchemaYacs.monCata._nodeMap["aster_s_polymers_st_1"]
+      SchemaYacs.aster_s_polymers_st_1Node = factoryNode.cloneNode("aster_s_polymers_st_1")
+
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("lambda_I").edInitPy(self.lambda_I)
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("lambda_M").edInitPy(self.lambda_M)
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("study_name").edInitPy(self.study_name)
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("study_path").edInitPy(self.study_path)
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("rve_size").edInitPy(self.rve_size)
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("finesse").edInitPy(self.finesse)
+      SchemaYacs.aster_s_polymers_st_1Node.getInputPort("aster_path").edInitPy(self.config.PATH_ASTER)
+      
+      proc.edAddChild(SchemaYacs.aster_s_polymers_st_1Node)
+      pout=SchemaYacs.benhurNode.getOutputPort("result_mesh")
+      pin=SchemaYacs.aster_s_polymers_st_1Node.getInputPort("mesh")
+      proc.edAddLink(pout,pin)
+         
+      if SchemaYacs.nodeAvant != None :
+         proc.edAddCFLink(SchemaYacs.nodeAvant,SchemaYacs.aster_s_polymers_st_1Node)
+      SchemaYacs.nodeAvant=SchemaYacs.aster_s_polymers_st_1Node
+      print "ASTERYACS node Ok"
+
+      
+   def GMSHYACS(self, SchemaYacs, proc):
+      factoryNode = SchemaYacs.monCata._nodeMap["gmsh_post"]
+      SchemaYacs.gmsh_postNode = factoryNode.cloneNode("gmsh_post")
+      
+      proc.edAddChild(SchemaYacs.gmsh_postNode)
+      pout=SchemaYacs.aster_s_polymers_st_1Node.getOutputPort("result_gmsh")
+      pin=SchemaYacs.gmsh_postNode.getInputPort("result_gmsh")
+      proc.edAddLink(pout,pin)
+         
+      if SchemaYacs.nodeAvant != None :
+         proc.edAddCFLink(SchemaYacs.nodeAvant,SchemaYacs.gmsh_postNode)
+      SchemaYacs.nodeAvant=SchemaYacs.gmsh_postNode
+      print "GMSHYACS node Ok"
+
+   def METHODEYACS(self, SchemaYacs, proc):
+      self.PYGMEEYACS(SchemaYacs, proc)
+      if (self.CHOIX=="FD+grid") :
+         self.FDVGRIDYACS(SchemaYacs,proc)
+      if (self.CHOIX=="FEM+mesh") :
+         self.BENHURYACS(SchemaYacs,proc)
+         self.ASTERYACS(SchemaYacs,proc)
+         self.GMSHYACS(SchemaYacs,proc)
+
+#_________________________________
+#  - shell functions
+#_________________________________
+
+   def METHODE(self) :
+      commande=self.PYGMEE()
+      if (self.CHOIX=="FD+grid") :
+          commande+= self.FDVGRID()
+      elif (self.CHOIX=="FEM+mesh") :
+          commande+= self.BENHUR()
+          commande+= self.ASTER_s_polymers_st_1()
+          commande+= self.GMSH()
+      return commande
+
+#_________________________________
+#  - code and component functions
+#_________________________________
+
+   def PYGMEE(self) :
+      commande="volume_fraction=component_pygmee_v2("+str(self.rve_size)+",1,'"+str(self.sieve_curve_in)+"','"+str(self.sieve_curve_out)+"',"+str(self.repulsion_distance)+",'"+str(self.study_name)+"','"+str(self.study_path)+"','"+str(self.inclusion_name)+"','"+str(self.rve_name)+"')\n"
+      return commande
+
+   def FDVGRID(self):
+      commande="lambda_x=component_fdvgrid("+str(self.lambda_I)+","+str(self.lambda_M)+","+str(self.rve_size)+",'"+str(self.inclusion_name)+"',"+str(self.finesse)+",'"+str(self.study_path)+"')\n"
+      return commande
+
+   def BENHUR(self):
+      commande="component_benhur("+str(self.finesse)+","+str(self.rve_size)+",'"+str(self.inclusion_name)+"','"+str(self.study_name)+"','"+str(self.study_path)+"');\n"
+      return commande
+
+   def ASTER_s_polymers_st_1(self) :
+      commande="component_aster_s_polymers_st_1("+str(self.rve_size)+","+str(self.finesse)+","+str(self.lambda_I)+","+str(self.lambda_M)+",'"+str(self.study_name)+"','"+str(self.study_path)+"','"+self.config.PATH_ASTER+"');\n"
+      return commande
+
+   def GMSH(self) :
+      commande="component_gmsh_post('"+str(self.study_path+"/s_polymers_st_1_aster.resu.msh")+"');\n"
+      return commande
+
index 59496b1523ce877bd82cfbb991c9fec1f9a3ede1..3cf1840d8e8021fcf43d61c9f023635052541afd 100644 (file)
@@ -39,14 +39,14 @@ from generator_python import PythonGenerator
 
 def entryPoint():
    """
-       Retourne les informations nécessaires pour le chargeur de plugins
+       Retourne les informations nécessaires pour le chargeur de plugins
 
-       Ces informations sont retournées dans un dictionnaire
+       Ces informations sont retournées dans un dictionnaire
    """
    return {
         # Le nom du plugin
           'name' : 'vers3DSalome',
-        # La factory pour créer une instance du plugin
+        # La factory pour créer une instance du plugin
           'factory' : vers3DSalomeGenerator,
           }
 
@@ -120,7 +120,7 @@ class vers3DSalomeGenerator(PythonGenerator):
       """
       """
       if obj.isvalid() == 0 :
-         #showerror("Element non valide","Salome ne sait pas traiter les élements non valides")
+         #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
          return
       for v in obj.mc_liste:
          liste=self.generator(v)
@@ -142,7 +142,7 @@ class vers3DSalomeGenerator(PythonGenerator):
 
    def generMCFACT(self,obj):
       """
-          Convertit un objet MCFACT en une liste de chaines de caractères à la
+          Convertit un objet MCFACT en une liste de chaines de caractères à la
           syntaxe python
       """
       self.init_ligne()
@@ -193,6 +193,8 @@ class vers3DSalomeGenerator(PythonGenerator):
        for k in range(len(atraiter)) :
            clef=self.clefs[k]
            val =atraiter[k] 
+           if isinstance(val, (types.TupleType, types.ListType)) and len(val) == 1:
+               val = val[0]
            if isinstance (val, Extensions.parametre.PARAMETRE):
               val=val.valeur
               print val.__class__
index 2d495d7f05ad74ec4617cbcc844cb27d6653b7cb..368e416c251be07c4a0ae0ecafa10d587b87bcc6 100755 (executable)
@@ -1,11 +1,14 @@
 #!/usr/bin/env python
 
+
+import sys, os
+sys.path.append(os.path.join(os.getenv('YACS_ROOT_DIR'),'lib/python2.5/site-packages/salome/'))
+
 import pilot
 import SALOMERuntime
 import loader
 import logging
 import traceback
-import os
 
 class CreeSchemaYacs :
      def __init__(self,config):
@@ -24,17 +27,19 @@ class CreeSchemaYacs :
 
      def addCatalog(self):
         try:
-           monCataFile= os.environ["EFICAS_ROOT_DIR"]
-           monCataFile=monCataFile+"/share/salome/resources/eficas/cata"
-           monCataFile=monCataFile+self.ssCode+".xml"
-           print monCataFile
+           # modifs CTL 20101121 : generic scheme template name
+           monCataFile=self.config.INSTALLDIR+"/MAP/Templates/"
+           monCataFile+=self.config.ssCode
+           monCataFile+="/cata_"+self.config.ssCode+".xml"
+           print 'YACS xml scheme template :', monCataFile
            self.monCata = self.runtime.loadCatalog("proc",monCataFile)
         except:
            logging.fatal("Exception in loading MAP catalog")
            traceback.print_exc()
            sys.exit(1)
 
-     def createProc(self):
+     def createProc(self, generator):
+        self.generator=generator
         proc = self.runtime.createProc("proc")
         proc.setTypeCode("pyobj", self.runtime.getTypeCode("pyobj"))
         t_pyobj  = proc.getTypeCode("pyobj")
@@ -44,53 +49,21 @@ class CreeSchemaYacs :
      def write_yacs_proc(self,proc, yacs_schema_filename):
          proc.saveSchema(yacs_schema_filename)
 
-class s_poly_st_1(CreeSchemaYacs) :
-
-     def BENHURYACS(self,proc,dico):
-         monFichierInput=self.config.PATH_BENHUR+"/BHR_files.txt"
-         factoryNode = self.monCata._nodeMap["benhur"]
-         self.benhurNode = factoryNode.cloneNode("benhur")
-         self.benhurNode.getInputPort("fileInput").edInitPy(monFichierInput)
-         self.benhurNode.getInputPort("pathBenhur").edInitPy(self.config.PATH_BENHUR)
-         proc.edAddChild(self.benhurNode)
-         if self.nodeAvant != None :
-            proc.edAddCFLink(self.nodeAvant,self.benhurNode)
-         self.nodeAvant=self.benhurNode
-
-     def PYGMEEYACS(self,proc,dico):
-         monFichierInput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/pygmee_input.txt"
-         factoryNode = self.monCata._nodeMap["pygmee"]
-         self.pygmeeNode = factoryNode.cloneNode("pygmee")
-         self.pygmeeNode.getInputPort("pathPygmee").edInitPy(self.config.PATH_PYGMEE)
-         self. pygmeeNode.getInputPort("fileInput").edInitPy(monFichierInput)
-         proc.edAddChild(self.pygmeeNode)
-         if self.nodeAvant != None :
-            proc.edAddCFLink(self.nodeAvant,self.pygmeeNode)
-         self.nodeAvant=self.pygmeeNode
-
-     def ASTERYACS(self,proc,dico):
-         factoryNode = self.monCata._nodeMap["asterRun"]
-         self.asterNode = factoryNode.cloneNode("asterRun")
-         nom_racine=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"
-         monFichierExport=nom_racine+"s_poly_st_1_aster.export"
-         monFichierMed=nom_racine+"s_poly_st_1_aster.resu.med"
-         self.asterNode.getInputPort("pathAster").edInitPy(self.config.PATH_ASTER+"/bin")
-         self.asterNode.getInputPort("fileExport").edInitPy(monFichierExport)
-         self.asterNode.getInputPort("fileMed").edInitPy(monFichierMed)
-
-         proc.edAddChild(self.asterNode)
-         if self.nodeAvant != None :
-            proc.edAddCFLink(self.nodeAvant,self.asterNode)
-         self.nodeAvant=self.asterNode
-
-dictKlass={'s_poly_st_1':s_poly_st_1}
+# pour l instant on garde cette classe 
+# pour pouvoir specialiser si necessaire
+# pour d autres schema
+class s_polymers_st_1(CreeSchemaYacs) :
+     def METHODEYACS(self,proc,dico):
+         self.generator.METHODEYACS(self,proc)
+         
+dictKlass={'s_polymers_st_1':s_polymers_st_1}
 def getSchema(config):
      schema=config.appli.ssCode
      return dictKlass[schema](config)
 
 
 if __name__ == "__main__":
-     monCreator=getSchema('s_poly_st_1')
+     monCreator=getSchema('s_polymers_st_1')
      proc=monCreator.createProc()
      monCreator.ajoutPygmee(proc)
      monCreator.ajoutBenhur(proc)