]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
This commit was manufactured by cvs2git to create tag 'V1_3a6'. V1_3a6
authorcvs2git <renaud.nedelec@opencascade.com>
Fri, 11 Oct 2002 11:58:56 +0000 (11:58 +0000)
committercvs2git <renaud.nedelec@opencascade.com>
Fri, 11 Oct 2002 11:58:56 +0000 (11:58 +0000)
Sprout from I26 2002-09-02 17:27:12 UTC eficas 'Version Aster 6.3.14'
Cherrypick from master 2002-10-11 11:58:55 UTC eficas 'deplacement repertoire Macro dans Aster/Cata':
    AIDE/__init__.py
    AIDE/aide_gui.py
    AIDE/aide_objets.py
    AIDE/index_aide.py
    Accas/A_ASSD.py
    Accas/A_AU_MOINS_UN.py
    Accas/A_A_CLASSER.py
    Accas/A_BLOC.py
    Accas/A_ENSEMBLE.py
    Accas/A_ETAPE.py
    Accas/A_EVAL.py
    Accas/A_EXCLUS.py
    Accas/A_FACT.py
    Accas/A_FORM.py
    Accas/A_FORM_ETAPE.py
    Accas/A_JDC.py
    Accas/A_JDC_CATA.py
    Accas/A_MACRO.py
    Accas/A_MACRO_ETAPE.py
    Accas/A_MCBLOC.py
    Accas/A_MCFACT.py
    Accas/A_MCLIST.py
    Accas/A_MCNUPLET.py
    Accas/A_MCSIMP.py
    Accas/A_NUPLET.py
    Accas/A_OPER.py
    Accas/A_PRESENT_ABSENT.py
    Accas/A_PRESENT_PRESENT.py
    Accas/A_PROC.py
    Accas/A_PROC_ETAPE.py
    Accas/A_SIMP.py
    Accas/A_UN_PARMI.py
    Accas/__init__.py
    Aster/Cata/Macro/macr_recal_ops.py
    Aster/Cata/Macro/macro_mode_meca_ops.py
    Aster/Cata/Macro/reca_algo.py
    Aster/Cata/Macro/reca_interp.py
    Aster/Cata/Macro/reca_message.py
    Aster/Cata/Macro/recal.py
    Aster/Cata/cata_STA6.py
    Aster/Cata/ops.py
    Aster/INSTALL
    Aster/LICENSE.TERMS
    Aster/README
    Aster/Tests/README
    Aster/Tests/Recette/efica01a.11
    Aster/Tests/Recette/efica01a.com0
    Aster/Tests/Recette/efica01a.comm
    Aster/Tests/err.comm
    Aster/Tests/err2.comm
    Aster/Tests/err3.comm
    Aster/Tests/torsion.comm
    Aster/alphasdist.py
    Aster/editeur.ini
    Aster/eficas_aster.py
    Aster/prefs.py
    Aster/sdist.py
    Descartes/cata_descartes.py
    Descartes/cata_descartes_new.py
    Descartes/editeur.ini
    Descartes/eficas_descartes.py
    Descartes/prefs.py
    Editeur/Interp.py
    Editeur/Objecttreeitem.py
    Editeur/__init__.py
    Editeur/analyse_catalogue.py
    Editeur/appli.py
    Editeur/autre_analyse_cata.py
    Editeur/browser.py
    Editeur/bureau.py
    Editeur/catabrowser.py
    Editeur/cataediteur.py
    Editeur/centerwindow.py
    Editeur/compobloc.py
    Editeur/compocomm.py
    Editeur/compocommandecomm.py
    Editeur/compofact.py
    Editeur/compoformule.py
    Editeur/compojdc.py
    Editeur/compomacro.py
    Editeur/compomclist.py
    Editeur/componiveau.py
    Editeur/componuplet.py
    Editeur/compooper.py
    Editeur/compoparam.py
    Editeur/compoparameval.py
    Editeur/compoproc.py
    Editeur/composimp.py
    Editeur/configuration.py
    Editeur/definition_cata.py
    Editeur/eficas.py
    Editeur/eficas_go.py
    Editeur/faq.py
    Editeur/fenetre_mc_inconnus.py
    Editeur/fontes.py
    Editeur/images.py
    Editeur/import_code.py
    Editeur/jdcdisplay.py
    Editeur/menubar.py
    Editeur/options.py
    Editeur/panels.py
    Editeur/readercata.py
    Editeur/splash.py
    Editeur/statusbar.py
    Editeur/toolbar.py
    Editeur/tooltip.py
    Editeur/treeitemincanvas.py
    Editeur/treewidget.py
    Editeur/uiinfo.py
    Editeur/utils.py
    Editeur/widgets.py
    Exemples/README
    Exemples/ex11/main.py
    Exemples/ex18/main.py
    Exemples/ex18/torsion.comm
    Extensions/__init__.py
    Extensions/commande_comm.py
    Extensions/commentaire.py
    Extensions/etape_niveau.py
    Extensions/interpreteur_formule.py
    Extensions/jdc.py
    Extensions/mcnuplet.py
    Extensions/niveau.py
    Extensions/nuplet.py
    Extensions/parametre.py
    Extensions/parametre_eval.py
    Extensions/pluginloader.py
    Ihm/I_ASSD.py
    Ihm/I_A_CLASSER.py
    Ihm/I_ENTITE.py
    Ihm/I_ETAPE.py
    Ihm/I_EXCLUS.py
    Ihm/I_FONCTION.py
    Ihm/I_FORM_ETAPE.py
    Ihm/I_JDC.py
    Ihm/I_JDC_CATA.py
    Ihm/I_MACRO_ETAPE.py
    Ihm/I_MCBLOC.py
    Ihm/I_MCCOMPO.py
    Ihm/I_MCFACT.py
    Ihm/I_MCLIST.py
    Ihm/I_MCSIMP.py
    Ihm/I_OBJECT.py
    Ihm/I_PRESENT_ABSENT.py
    Ihm/I_PRESENT_PRESENT.py
    Ihm/I_PROC_ETAPE.py
    Ihm/I_REGLE.py
    Ihm/I_UN_PARMI.py
    Ihm/__init__.py
    Installation/Doc_technique_install.doc
    Installation/README
    Installation/README_install
    Installation/install.py
    Minicode/cata_saturne.py
    Minicode/eficas_mini.py
    Minicode/prefs.py
    Noyau/N_ETAPE.py
    Noyau/N_JDC.py
    Noyau/N_MACRO.py
    Noyau/N_MACRO_ETAPE.py
    Noyau/N_MCBLOC.py
    Noyau/N_MCCOMPO.py
    Noyau/N_MCFACT.py
    Noyau/N_MCLIST.py
    Noyau/N_MCSIMP.py
    Noyau/N_OPER.py
    Noyau/N_PROC.py
    Noyau/properties.py
    Saturne/prefs.py
    Syrthes/cata_syrthes.py
    Syrthes/editeur.ini
    Syrthes/eficas_syrthes.py
    Syrthes/prefs.py
    Tools/__init__.py
    Validation/V_ETAPE.py
    Validation/V_MACRO_ETAPE.py
    Validation/V_MCCOMPO.py
    convert/Parserv5/Translate.py
    convert/Parserv5/__init__.py
    convert/Parserv5/conv.py
    convert/Parserv5/tables.py
    convert/Parserv5/tables.tag
    convert/__init__.py
    convert/convert_asterv5.py
    convert/convert_ini.py
    convert/convert_pyth.py
    convert/convert_python.py
    convert/parseur_python.py
    generator/Formatage.py
    generator/__init__.py
    generator/generator_aplat.py
    generator/generator_asterv5.py
    generator/generator_ini.py
    generator/generator_pyth.py
    generator/generator_python.py
    insercopyright.py

196 files changed:
AIDE/__init__.py [new file with mode: 0644]
AIDE/aide_gui.py [new file with mode: 0644]
AIDE/aide_objets.py [new file with mode: 0644]
AIDE/index_aide.py [new file with mode: 0644]
Accas/A_ASSD.py [new file with mode: 0644]
Accas/A_AU_MOINS_UN.py
Accas/A_A_CLASSER.py
Accas/A_BLOC.py
Accas/A_ENSEMBLE.py
Accas/A_ETAPE.py
Accas/A_EVAL.py
Accas/A_EXCLUS.py
Accas/A_FACT.py
Accas/A_FORM.py
Accas/A_FORM_ETAPE.py
Accas/A_JDC.py
Accas/A_JDC_CATA.py
Accas/A_MACRO.py
Accas/A_MACRO_ETAPE.py
Accas/A_MCBLOC.py
Accas/A_MCFACT.py
Accas/A_MCLIST.py
Accas/A_MCNUPLET.py
Accas/A_MCSIMP.py
Accas/A_NUPLET.py
Accas/A_OPER.py
Accas/A_PRESENT_ABSENT.py
Accas/A_PRESENT_PRESENT.py
Accas/A_PROC.py
Accas/A_PROC_ETAPE.py
Accas/A_SIMP.py
Accas/A_UN_PARMI.py
Accas/__init__.py
Aster/Cata/Macro/macr_recal_ops.py [new file with mode: 0644]
Aster/Cata/Macro/macro_mode_meca_ops.py
Aster/Cata/Macro/reca_algo.py [new file with mode: 0644]
Aster/Cata/Macro/reca_interp.py [new file with mode: 0644]
Aster/Cata/Macro/reca_message.py [new file with mode: 0644]
Aster/Cata/Macro/recal.py [new file with mode: 0644]
Aster/Cata/cata_STA6.py
Aster/Cata/ops.py
Aster/INSTALL [new file with mode: 0644]
Aster/LICENSE.TERMS [new file with mode: 0644]
Aster/README [new file with mode: 0644]
Aster/Tests/README [new file with mode: 0644]
Aster/Tests/Recette/efica01a.11 [new file with mode: 0755]
Aster/Tests/Recette/efica01a.com0 [new file with mode: 0755]
Aster/Tests/Recette/efica01a.comm [new file with mode: 0755]
Aster/Tests/err.comm [new file with mode: 0644]
Aster/Tests/err2.comm [new file with mode: 0644]
Aster/Tests/err3.comm [new file with mode: 0644]
Aster/Tests/torsion.comm [new file with mode: 0755]
Aster/alphasdist.py [new file with mode: 0644]
Aster/editeur.ini
Aster/eficas_aster.py
Aster/prefs.py
Aster/sdist.py [new file with mode: 0644]
Descartes/cata_descartes.py [new file with mode: 0755]
Descartes/cata_descartes_new.py [new file with mode: 0755]
Descartes/editeur.ini [new file with mode: 0644]
Descartes/eficas_descartes.py [new file with mode: 0755]
Descartes/prefs.py [new file with mode: 0644]
Editeur/Interp.py
Editeur/Objecttreeitem.py
Editeur/__init__.py
Editeur/analyse_catalogue.py
Editeur/appli.py
Editeur/autre_analyse_cata.py [new file with mode: 0644]
Editeur/browser.py
Editeur/bureau.py
Editeur/catabrowser.py
Editeur/cataediteur.py
Editeur/centerwindow.py
Editeur/compobloc.py
Editeur/compocomm.py
Editeur/compocommandecomm.py
Editeur/compofact.py
Editeur/compoformule.py
Editeur/compojdc.py
Editeur/compomacro.py
Editeur/compomclist.py
Editeur/componiveau.py
Editeur/componuplet.py
Editeur/compooper.py
Editeur/compoparam.py
Editeur/compoparameval.py
Editeur/compoproc.py
Editeur/composimp.py
Editeur/configuration.py
Editeur/definition_cata.py
Editeur/eficas.py
Editeur/eficas_go.py
Editeur/faq.py
Editeur/fenetre_mc_inconnus.py
Editeur/fontes.py
Editeur/images.py
Editeur/import_code.py
Editeur/jdcdisplay.py
Editeur/menubar.py
Editeur/options.py
Editeur/panels.py
Editeur/readercata.py
Editeur/splash.py
Editeur/statusbar.py
Editeur/toolbar.py
Editeur/tooltip.py
Editeur/treeitemincanvas.py
Editeur/treewidget.py
Editeur/uiinfo.py [new file with mode: 0644]
Editeur/utils.py
Editeur/widgets.py
Exemples/README
Exemples/ex11/main.py
Exemples/ex18/main.py
Exemples/ex18/torsion.comm [new file with mode: 0755]
Extensions/__init__.py
Extensions/commande_comm.py
Extensions/commentaire.py
Extensions/etape_niveau.py
Extensions/interpreteur_formule.py
Extensions/jdc.py
Extensions/mcnuplet.py
Extensions/niveau.py
Extensions/nuplet.py
Extensions/parametre.py
Extensions/parametre_eval.py
Extensions/pluginloader.py
Ihm/I_ASSD.py [new file with mode: 0644]
Ihm/I_A_CLASSER.py
Ihm/I_ENTITE.py
Ihm/I_ETAPE.py
Ihm/I_EXCLUS.py
Ihm/I_FONCTION.py [new file with mode: 0644]
Ihm/I_FORM_ETAPE.py
Ihm/I_JDC.py
Ihm/I_JDC_CATA.py
Ihm/I_MACRO_ETAPE.py
Ihm/I_MCBLOC.py
Ihm/I_MCCOMPO.py
Ihm/I_MCFACT.py
Ihm/I_MCLIST.py
Ihm/I_MCSIMP.py
Ihm/I_OBJECT.py
Ihm/I_PRESENT_ABSENT.py
Ihm/I_PRESENT_PRESENT.py
Ihm/I_PROC_ETAPE.py
Ihm/I_REGLE.py
Ihm/I_UN_PARMI.py
Ihm/__init__.py
Installation/Doc_technique_install.doc [new file with mode: 0755]
Installation/README [new file with mode: 0755]
Installation/README_install [new file with mode: 0755]
Installation/install.py [new file with mode: 0755]
Minicode/cata_saturne.py
Minicode/eficas_mini.py
Minicode/prefs.py
Noyau/N_ETAPE.py
Noyau/N_JDC.py
Noyau/N_MACRO.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_MCBLOC.py
Noyau/N_MCCOMPO.py
Noyau/N_MCFACT.py
Noyau/N_MCLIST.py
Noyau/N_MCSIMP.py
Noyau/N_OPER.py
Noyau/N_PROC.py
Noyau/properties.py
Saturne/prefs.py
Syrthes/cata_syrthes.py [new file with mode: 0755]
Syrthes/editeur.ini [new file with mode: 0644]
Syrthes/eficas_syrthes.py [new file with mode: 0755]
Syrthes/prefs.py [new file with mode: 0644]
Tools/__init__.py
Validation/V_ETAPE.py
Validation/V_MACRO_ETAPE.py
Validation/V_MCCOMPO.py
convert/Parserv5/Translate.py
convert/Parserv5/__init__.py
convert/Parserv5/conv.py
convert/Parserv5/tables.py
convert/Parserv5/tables.tag
convert/__init__.py
convert/convert_asterv5.py
convert/convert_ini.py
convert/convert_pyth.py
convert/convert_python.py
convert/parseur_python.py
generator/Formatage.py
generator/__init__.py
generator/generator_aplat.py
generator/generator_asterv5.py
generator/generator_ini.py
generator/generator_pyth.py
generator/generator_python.py
insercopyright.py [new file with mode: 0644]

diff --git a/AIDE/__init__.py b/AIDE/__init__.py
new file mode 100644 (file)
index 0000000..e4fa459
--- /dev/null
@@ -0,0 +1,12 @@
+import os
+import aide_objets
+import aide_gui
+
+def go(fichier=None,master=None):
+    if not fichier :
+       fichier=os.path.join(os.path.dirname(__file__),"index_aide.py")
+    index = aide_objets.INDEX(fichier)
+    index.build()
+    o = aide_gui.AIDE_GUI(index,master=master)
+    o.build()
+    return o
diff --git a/AIDE/aide_gui.py b/AIDE/aide_gui.py
new file mode 100644 (file)
index 0000000..50aa3ce
--- /dev/null
@@ -0,0 +1,212 @@
+"""
+Ce module génère l'IHM permettant d'accéder à l'aide en ligne d'une application(ex: EFICAS)
+Il analyse l'objet index passé en argument et génére automatiquement en conséquence le menu
+avec liens hyper texte
+"""
+
+from Tkinter import *
+
+class AIDE_GUI:
+   """
+   Classe définissant l'IHM de l'appli d'aide
+   """
+   def __init__(self,objet,master=None):
+      self.objet = objet
+      self.master = master
+      self.init()
+      self.init_window()
+      self.init_frames()
+      self.init_buttons()
+      self.init_text()
+      
+   def init(self):
+      """
+      Initialise les structures de données utlisées par l'objet
+      """
+      self.padx = [0,0,0,0]
+      self.padx[0] = 0
+      self.padx[1] = 30
+      self.padx[2] = 50
+      self.historique = []   
+      
+   def init_window(self):
+      """
+      Initialise la fenêtre mère de l'appli
+      """
+      fenetre = Toplevel()
+      if self.master :
+         self.fenetre = fenetre
+      else:
+         self.fenetre = fenetre.master
+        fenetre.destroy()
+      self.fenetre.title(self.objet.titre)
+      self.fenetre.geometry("700x700+50+50")
+      self.fenetre.resizable(1,1)
+      #self.fenetre.minsize(600,800)
+      #self.fenetre.maxsize(900,800)
+      self.fenetre.protocol("WM_DELETE_WINDOW",self.quit)
+      self.fenetre.update()
+        
+   def init_frames(self):
+      """
+      Initialise les frames principales de l'appli
+      """
+      self.frame1 = Frame(self.fenetre,relief='flat',bd=2)
+      self.frame2 = Frame(self.fenetre,relief='flat',bd=2)
+      self.frame1.grid(row=0,column=0,sticky='news')
+      self.frame2.grid(row=1,column=0,sticky='news')
+      self.fenetre.grid_columnconfigure(0,weight=1,minsize=0)
+      self.fenetre.grid_rowconfigure(1,minsize=30)
+      self.fenetre.grid_rowconfigure(0,weight=1,minsize=0)
+      
+   def init_buttons(self):
+      """
+      Crée les boutons dans le bas de la fenêtre
+      """
+      self.b_retour = Button(self.frame2,text = "Précédent",command=self.go_back)
+      self.b_retour.place(relx=0.33,rely=0.5,anchor='center')
+      Button(self.frame2,text="Fermer",command=self.quit).place(relx=0.66,rely=0.5,anchor='center') 
+      
+
+   def init_text(self):
+      """
+      Construit le widget Text qui accueillera l'index et les fichiers
+      """
+      self.scroll_v = Scrollbar(self.frame1)
+      self.scroll_v.grid(row=0,column=1,rowspan=2,sticky='nesw')
+      self.scroll_h = Scrollbar(self.frame1,orient='horizontal')
+      self.scroll_h.grid(row=1,column=0,rowspan=2,sticky='nesw')
+      self.canvas = Canvas(self.frame1,
+                           bg='white',
+                          relief='sunken',
+                          scrollregion=(0,0,1000,1000),
+                          yscrollcommand=self.scroll_v.set,
+                          xscrollcommand=self.scroll_h.set)
+      self.canvas.grid(row=0,column=0,sticky='nesw')
+      self.scroll_v.configure(command=self.canvas.yview)
+      self.scroll_h.configure(command=self.canvas.xview)
+      self.frame1.grid_columnconfigure(0,weight=1,minsize=0)
+      self.frame1.grid_rowconfigure(0,weight=1,minsize=0)
+      self.frame1.grid_rowconfigure(1,minsize=10)
+      self.frame1.grid_columnconfigure(1,minsize=10)
+
+   def build(self):
+      """
+      Lance la construction dynamique de l'index en hyper texte
+      """
+      self.frame1.update_idletasks()
+      largeur = self.frame1.winfo_width()
+      self.canvas.create_rectangle(0,0,1,1,outline='white')
+      self.y_courant = 0
+      # Construction du titre encadré d'une bordure
+      titre = self.canvas.create_text(int(largeur/2),50,anchor='center',text=self.objet.titre,font="Helvetica 12 bold")
+      bbox = self.canvas.bbox(titre)
+      bordure = self.canvas.create_rectangle(bbox[0]-5,bbox[1]-5,bbox[2]+5,bbox[3]+5,
+                                             outline = 'black',
+                                            fill = 'grey75')
+      self.canvas.lower(bordure)                                    
+      self.y_courant += 100
+      # Construction des items
+      for item in self.objet.l_items :
+          self.build_item(item,0)
+      # Affichage du texte dans le fichier associé (s'il existe)
+      if self.objet.fichier :
+         try:
+           texte=open(self.objet.fichier,'r').read()
+         except:
+            texte="Fichier %s inaccessible" % self.objet.fichier
+        self.canvas.create_text(10,self.y_courant+20,
+                                text=texte,
+                                anchor='nw')
+      # Configuration dynamique des boutons
+      self.config_boutons()
+      #
+      self.canvas.config(scrollregion=self.canvas.bbox('all'))
+      
+   def config_boutons(self):
+      """
+      Activation du bouton précédent s'il y a lieu
+      """
+      if self.historique : 
+         self.b_retour.config(state='normal')
+      else :
+         self.b_retour.config(state='disabled')
+      
+   def build_item(self,item,padx):
+      """
+      Affiche l'item dans le menu décalé de padx
+      """
+      l = Label(self.canvas,
+                text=item.titre,
+               foreground = 'blue',
+               background='white',
+               font="Helvetica 12 bold")
+      l.bind("<Button-1>",lambda e,s=self,o=item : s.update_objet(o))
+      l.bind("<Enter>",lambda e,s=self,o=l : s.select_label(o))
+      l.bind("<Leave>",lambda e,s=self,o=l : s.deselect_label(o))
+      self.canvas.create_window(self.padx[padx],self.y_courant,window=l,anchor='w')
+      self.y_courant += 20
+      for sub_item in item.l_items :
+          self.build_item(sub_item,padx+1)
+      
+   def show_file(self,fichier):
+      """
+      Affiche le fichier passé en argument
+      """
+      print "on veut afficher :",fichier
+
+   def select_label(self,label):
+      """
+      Callback invoqué lorsque le label passé en argument est sélectionné
+      """
+      label.config(fg='white',bg='blue')
+
+   def deselect_label(self,label):
+      """
+      Callback invoqué lorsque le label passé en argument est sélectionné
+      """
+      label.config(bg='white',fg='blue')      
+
+   def go_back(self):
+      """
+      Affiche l'item précédent
+      """
+      self.update_objet(self.historique[-1])
+      self.historique = self.historique[0:-1]
+      # Configuration dynamique des boutons
+      self.config_boutons()
+      
+   def update_objet(self,new_objet):
+      """
+      Cette méthode remplace l'objet courant par new_objet.
+      Elle vide le widget text et affiche le nouvel objet
+      """
+      if not self.historique : 
+         self.historique.append(self.objet)
+      elif new_objet is not self.historique[-1] :
+         self.historique.append(self.objet)
+      self.objet = new_objet 
+      self.canvas.delete('all')
+      self.build()
+                       
+   def quit(self):
+      """
+      Ferme l'appli Aide
+      """
+      self.fenetre.destroy()     
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
diff --git a/AIDE/aide_objets.py b/AIDE/aide_objets.py
new file mode 100644 (file)
index 0000000..e8e923f
--- /dev/null
@@ -0,0 +1,76 @@
+"""
+Ce module génère un objet INDEX par lecture et interprétation du fichier texte
+le décrivant (ex : index_aide.py)
+"""
+
+import os
+
+class ITEM_INDEX :
+   """
+   Construit un objet ITEM_INDEX
+   """
+   def __init__(self,t_item):
+       self.t_item = t_item
+       self.init()
+
+   def init(self):
+       """
+       Initialise les structures de données de l'item
+       """
+       self.titre = ""
+       self.fichier = ""
+       self.l_items = []
+              
+   def build(self):
+       """
+       Construit les sous-items de self s'il y a lieu et retoruve le label et le fichier de l'item
+       dans le tuple
+       """
+       self.titre = self.t_item[0]
+       self.fichier = self.t_item[1]
+       l_items = self.t_item[2]
+       if l_items :
+          for item in l_items :
+            o = ITEM_INDEX(item)
+             o.build()
+             self.l_items.append(o)
+
+class INDEX :
+   """
+   Construit un objet INDEX (non graphique) à partir de l'interprétation du fichier d'index
+   (type index_aide.py) passé en argument
+   """
+   def __init__(self,fichier_index):
+       self.fichier_index = fichier_index
+       self.init()
+       
+   def init(self):
+      """
+      Initialise les structures de données propres à l'index
+      """
+      self.titre = ""
+      self.fichier = None
+      self.l_items = []
+      
+   def build(self):
+      """
+      Lit le fichier index et l'interprète
+      """
+      txt = open(self.fichier_index,'r').read()
+      d = {}
+      d['repertoire']=os.path.dirname(self.fichier_index)
+      #txt = "items ="+txt
+      #print txt
+      exec txt in d
+      items = d.get("items",None)
+      if items :
+        self.titre = items[0]
+        self.fichier = items[1]
+        l_items = items[2]
+        for item in l_items :
+            o = ITEM_INDEX(item)
+           o.build()
+            self.l_items.append(o)
+
+      
+       
diff --git a/AIDE/index_aide.py b/AIDE/index_aide.py
new file mode 100644 (file)
index 0000000..9c04096
--- /dev/null
@@ -0,0 +1,24 @@
+"""
+Contient la description des fichiers d'aide et leur structuration
+
+chaque panneau est un tuple de 3 éléments :
+
+- élément 1 : titre de la page
+- élément 2 : URL du fichier à afficher quand on visualise cette page d'aide ou None si aucun
+- élément 3 : tuple contenant les sous-panneaux de ce panneau (tuple de 3-tuples) ou None si aucun
+
+La variable repertoire est initialisee avec le chemin du repertoire local
+"""
+
+import os
+
+items =("Aide en ligne EFICAS",None,
+            ( 
+               ("FAQs",os.path.join(repertoire,"..","Editeur","faqs.txt"),None),
+               ("Install",os.path.join(repertoire,"..","INSTALL"), 
+                                ( 
+                                   ("Procedure d'installation",os.path.join(repertoire,"..","INSTALL"),None), 
+                                )
+              ),
+            ),
+       )
diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py
new file mode 100644 (file)
index 0000000..b9661c4
--- /dev/null
@@ -0,0 +1,49 @@
+#            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 Ihm import I_ASSD
+from Ihm import I_FONCTION
+from Noyau import N_ASSD 
+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ès 
+# dérivation
+
+class ASSD(N_ASSD.ASSD,I_ASSD.ASSD):pass
+
+class assd(N_ASSD.assd,I_ASSD.ASSD,ASSD):pass
+
+class FONCTION(N_FONCTION.FONCTION,I_FONCTION.FONCTION,ASSD):
+   def __init__(self,etape=None,sd=None,reg='oui'):
+      N_FONCTION.FONCTION.__init__(self,etape=etape,sd=sd,reg=reg)
+      I_FONCTION.FONCTION.__init__(self,etape=etape,sd=sd,reg=reg)
+
+class fonction(N_FONCTION.fonction,I_FONCTION.fonction,ASSD):
+   def __init__(self,etape=None,sd=None,reg='oui'):
+      N_FONCTION.fonction.__init__(self,etape=etape,sd=sd,reg=reg)
+      I_FONCTION.fonction.__init__(self,etape=etape,sd=sd,reg=reg)
+
+class GEOM(N_GEOM.GEOM,I_ASSD.ASSD,ASSD):pass
+class geom(N_GEOM.geom,I_ASSD.ASSD,ASSD):pass
+class CO(N_CO.CO,I_ASSD.ASSD,ASSD):pass
index d7c525b0214a4c87353944c67160e0c65463e015..eb194670158e9a8066ab93202c23b1a4a1e1ad75 100644 (file)
@@ -1,3 +1,22 @@
+#            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_AU_MOINS_UN
 from Ihm import I_REGLE
index c3b32debadf85af1488efc06b89c6561038ad42f..b522b2cdafbbe383d691d0e2ca59eed413d7276c 100644 (file)
@@ -1,3 +1,22 @@
+#            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_A_CLASSER
 from Ihm import I_A_CLASSER
index 5b341d6c166916dcf96c76f6c4ebada7711724bc..668c93951a1f510a88fe1b3d9174d9345b3f05e6 100644 (file)
@@ -1,6 +1,29 @@
+#            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_BLOC
 from Ihm import I_ENTITE
 import A_MCBLOC
 
 class BLOC(N_BLOC.BLOC,I_ENTITE.ENTITE):
    class_instance=A_MCBLOC.MCBLOC
+   def __init__(self,*tup,**args):
+      I_ENTITE.ENTITE.__init__(self)
+      N_BLOC.BLOC.__init__(self,*tup,**args)
+
index 6675920ba53680d0389b08589dd2b79e0d1750e7..e9ebac788f0992316e27120c543714d0ee7096e5 100644 (file)
@@ -1,3 +1,22 @@
+#            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_ENSEMBLE
 from Ihm import I_REGLE
index cfd20bd9243bece6bbdfedb30ba37df467a9384e..6ba5b7e90678430fbc6291a9d37b43754fcae9ab 100644 (file)
@@ -1,3 +1,22 @@
+#            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_ETAPE
 from Validation import V_ETAPE
 from Ihm import I_ETAPE
@@ -8,4 +27,3 @@ class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,
       # Pas de constructeur pour B_ETAPE.ETAPE
       N_ETAPE.ETAPE.__init__(self,oper,reuse,args)
       V_ETAPE.ETAPE.__init__(self)
-      I_ETAPE.ETAPE.__init__(self)
index dff258a9e2c8ff1312a702566fa42db3ab894749..ab40f1234474868cdd4f12d4cfeafc21328a4a16 100644 (file)
@@ -1,3 +1,22 @@
+#            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_EVAL 
 
 class EVAL(N_EVAL.EVAL):
index 5473d01a3d7324f2a89a1fffed8dc033f2eec652..5bbf943eb3f5ecd54429fc227111594a4613c21b 100644 (file)
@@ -1,3 +1,22 @@
+#            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_EXCLUS
 from Ihm import I_EXCLUS
index d40a9c5974fea0ca0ba38dff32a32ab4046977a1..00da61811734b4823700025293abb793a5aca308 100644 (file)
@@ -1,3 +1,22 @@
+#            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_FACT
 from Ihm import I_ENTITE
 import A_MCFACT
@@ -6,3 +25,7 @@ import A_MCLIST
 class FACT(N_FACT.FACT,I_ENTITE.ENTITE):
    class_instance=A_MCFACT.MCFACT
    list_instance=A_MCLIST.MCList
+   def __init__(self,*tup,**args):
+      I_ENTITE.ENTITE.__init__(self)
+      N_FACT.FACT.__init__(self,*tup,**args)
+
index 132a24b9f23f32b17f274193962b1470432a9d5e..ea61db3edd728bb25978ed6bad4bcb629cabcaa9 100644 (file)
@@ -1,3 +1,22 @@
+#            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_FORM
 from Ihm import I_ENTITE
 import A_FORM_ETAPE 
index 9c6483bd8c23af9ecaaf09bcc146c42e3b7de987..af4d7cf0823d3f82d67d72b3cb93118244b79de2 100644 (file)
@@ -1,3 +1,22 @@
+#            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_FORM_ETAPE
 from Validation import V_MACRO_ETAPE
 from Ihm import I_FORM_ETAPE
index b709e01f1749977bbf373d77bb4199cfba0945a7..9216fe5a8ab8752a8a7c8a17535a1d229bd9eedc 100644 (file)
@@ -1,9 +1,30 @@
+#            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_JDC
 from Validation import V_JDC
 from Extensions import jdc
 from Ihm import I_JDC
 
 class JDC(jdc.JDC,I_JDC.JDC,V_JDC.JDC,N_JDC.JDC):
+   from A_ASSD import CO,assd
+
    def __init__(self,*pos,**args):
       N_JDC.JDC.__init__(self,*pos,**args)
       V_JDC.JDC.__init__(self)
index 0a810dc32c19bbcaa79b602b42ce716a1b22d032..10cf409e136c7a7b4174602a1c2680b55a3cba7a 100644 (file)
@@ -1,3 +1,22 @@
+#            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_JDC_CATA
 import A_JDC
 from Ihm import I_JDC_CATA
index 311769f814032afc19579fbb8623e27ee5778392..c4e841a224576b9bd3d9a1651ce97bc702a91c90 100644 (file)
@@ -1,6 +1,29 @@
+#            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_MACRO
 from Ihm import I_ENTITE
 import A_MACRO_ETAPE 
 
 class MACRO(N_MACRO.MACRO,I_ENTITE.ENTITE):
    class_instance=A_MACRO_ETAPE.MACRO_ETAPE
+   def __init__(self,*tup,**args):
+      I_ENTITE.ENTITE.__init__(self)
+      N_MACRO.MACRO.__init__(self,*tup,**args)
+
index 29463bd528e730f7bea07ae56609aa93f3b23f51..9613ebb0ec138c0cdbf67e8aac139dca04cd2209 100644 (file)
@@ -1,3 +1,22 @@
+#            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_MACRO_ETAPE
 from Validation import V_MACRO_ETAPE
 from Ihm import I_MACRO_ETAPE
index 3f931840c7badfb9853846037a2af9ff0d34c32c..963ae8f11fdd0877c88866f5a5c46a9cadfc1110 100644 (file)
@@ -1,3 +1,22 @@
+#            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_MCBLOC
 from Validation import V_MCBLOC
 from Ihm import I_MCBLOC
index 96d172a676e438f86e740d72c2fe84a491498478..5a1b2a96fba9a32738c48cb975c89b3aabf27c49 100644 (file)
@@ -1,3 +1,22 @@
+#            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_MCFACT
 from Validation import V_MCFACT
 from Ihm import I_MCFACT
index e3fba40a4369a58f01cb85e5456583d8c5a870da..d2874c59eb3097c852ac6d734063806e4af5d51e 100644 (file)
@@ -1,3 +1,22 @@
+#            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_MCLIST
 from Validation import V_MCLIST
 from Ihm import I_MCLIST
index 49bfa75bb8f479eea368e37aaacb8bdd99d7f0c4..76258bae5887edaef95a7fd02701428be6978ad7 100644 (file)
@@ -1,3 +1,22 @@
+#            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 Extensions import mcnuplet
 from Ihm import I_MCCOMPO
 
index 35854885c073d14e27c05614ce3aa61a0ba49f79..b517eb65ea6ce23cfebe601664f73c03eb86d56d 100644 (file)
@@ -1,3 +1,22 @@
+#            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_MCSIMP
 from Validation import V_MCSIMP
 from Ihm import I_MCSIMP
index 1d19c2c0bef082470f9627a1bc84701f8a7b400a..6c1c5f4cdabeb87febb38757715f35ae22757b8c 100644 (file)
@@ -1,3 +1,22 @@
+#            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 Extensions import nuplet
 import A_MCLIST
index f7c6107bec2f1e47ee3c282fced16a3808dd3ce7..b1076cb8337cb4d477625a4bdb712b1635956222 100644 (file)
@@ -1,6 +1,28 @@
+#            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_OPER
 from Ihm import I_ENTITE
 import A_ETAPE 
 
 class OPER(N_OPER.OPER,I_ENTITE.ENTITE):
    class_instance=A_ETAPE.ETAPE
+   def __init__(self,*tup,**args):
+      I_ENTITE.ENTITE.__init__(self)
+      N_OPER.OPER.__init__(self,*tup,**args)
index ac2b0b3076f670c4e28fd54d45a74eae27c4a874..fc77397c269c4ae29b64518a949175b648fd72d1 100644 (file)
@@ -1,3 +1,22 @@
+#            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_PRESENT_ABSENT
 from Ihm import I_PRESENT_ABSENT
index 96f52fd64f2524ca0c76935322d41c645f7acdb7..bb14edfb480c0613f1fc5f081fa518fc5ce15f7c 100644 (file)
@@ -1,3 +1,22 @@
+#            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_PRESENT_PRESENT
 from Ihm import I_PRESENT_PRESENT
index d0b56b0718c837e03351a14359ea0ca0c7f9edee..18abbda4b36ff2a0f7208e5f03f1381f491ab68b 100644 (file)
@@ -1,6 +1,29 @@
+#            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_PROC
 from Ihm import I_ENTITE
 import A_PROC_ETAPE 
 
 class PROC(N_PROC.PROC,I_ENTITE.ENTITE):
    class_instance=A_PROC_ETAPE.PROC_ETAPE
+   def __init__(self,*tup,**args):
+      I_ENTITE.ENTITE.__init__(self)
+      N_PROC.PROC.__init__(self,*tup,**args)
+
index 9d7c0f89af0015befefdd1190d6505a124739b54..9f0911ae6202e654c03c8ac94722bdd70b05f331 100644 (file)
@@ -1,3 +1,22 @@
+#            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_PROC_ETAPE
 from Validation import V_PROC_ETAPE
 from Ihm import I_PROC_ETAPE
@@ -8,4 +27,3 @@ class PROC_ETAPE(I_PROC_ETAPE.PROC_ETAPE,
    def __init__(self,oper=None,args={}):
       N_PROC_ETAPE.PROC_ETAPE.__init__(self,oper=oper,args=args)
       V_PROC_ETAPE.PROC_ETAPE.__init__(self)
-      I_PROC_ETAPE.PROC_ETAPE.__init__(self)
index 3cafb4929cf13444ee1e1e8afdd2105a0812a827..2af12a7fbb9c572dd6a13f08ac8145ceb6b5114d 100644 (file)
@@ -1,6 +1,29 @@
+#            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_SIMP
 from Ihm import I_ENTITE
 import A_MCSIMP
 
 class SIMP(N_SIMP.SIMP,I_ENTITE.ENTITE):
    class_instance=A_MCSIMP.MCSIMP
+   def __init__(self,*tup,**args):
+      I_ENTITE.ENTITE.__init__(self)
+      N_SIMP.SIMP.__init__(self,*tup,**args)
+
index ee7a505832abf024ebd52e2137e6a5318dfd5eb9..55b281d3236aece3367022fff07445ffe6b172f1 100644 (file)
@@ -1,3 +1,22 @@
+#            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_UN_PARMI
 from Ihm import I_UN_PARMI
index b61776b384d06485234f3e92f0c22b04bc24552d..f39305316a1b4f8c2fb96c1aa866950dfcd01c77 100644 (file)
@@ -1,3 +1,22 @@
+#            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 package contient les classes qui seront effectivement utilisées dans les applications. 
    C'est dans ce package que sont réalisées les combinaisons de classes de base
@@ -39,11 +58,11 @@ from A_EXCLUS import EXCLUS
 from A_ENSEMBLE import ENSEMBLE
 from A_A_CLASSER import A_CLASSER
 
-from Noyau.N_ASSD import ASSD,assd
-from Noyau.N_GEOM import GEOM,geom
-from Noyau.N_FONCTION import FONCTION
-from Noyau.N_FONCTION import fonction
-from Noyau.N_CO import CO
+from A_ASSD import ASSD,assd
+from A_ASSD import GEOM,geom
+from A_ASSD import FONCTION, fonction
+from A_ASSD import CO
+
 from Noyau.N__F import _F
 
 from Noyau.N_Exception import AsException
diff --git a/Aster/Cata/Macro/macr_recal_ops.py b/Aster/Cata/Macro/macr_recal_ops.py
new file mode 100644 (file)
index 0000000..d211542
--- /dev/null
@@ -0,0 +1,108 @@
+#@ MODIF macr_recal_ops Macro  DATE 24/09/2002   AUTEUR PABHHHH N.TARDIEU 
+#            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.        
+# ======================================================================
+
+def macr_recal_ops(self,UNITE_ESCL, RESU_EXP, LIST_PARA, RESU_CALC, 
+                        ITER_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
+                        GRAPHIQUE, **args ):
+   """Macro commande réalisant le recalage de modèles Aster""",
+   # Initialisation du compteur d'erreurs
+   import string
+   import Numeric
+   import copy
+   import types
+   import Macro
+   import Cata
+   from Cata import cata
+   from Macro.recal import gestion,transforme_list_Num,EXTRACT,calcul_F
+   from Macro.reca_message import *
+   from Macro.reca_algo    import *
+   from Macro.reca_interp  import *
+   ier=0
+   # La macro compte pour 1 dans l'execution des commandes
+   self.icmd=1
+   self.DeclareOut('nomres',self.sd)
+
+   # Gestion des erreurs de syntaxe
+   texte_erreur = gestion(UNITE_ESCL,LIST_PARA,RESU_CALC,RESU_EXP)
+   if (texte_erreur != ""):
+      ier=ier+1
+      self.cr.fatal(texte_erreur)
+
+   # On declare toutes les commandes Aster
+   for k,v in cata.__dict__.items() :
+     if type(v)==types.InstanceType:
+        if v.__class__.__name__ in ('OPER','MACRO'):
+           self.current_context[k]= v
+   self.current_context['_F']=cata.__dict__['_F']
+   self.g_context['EXTRACT']=EXTRACT
+
+   #initialisation
+   iter = 0
+   para,val,borne_inf,borne_sup = transforme_list_Num(LIST_PARA,RESU_EXP)
+   val_init = copy.copy(val)
+   L_init = calcul_F(self,UNITE_ESCL,para,val,RESU_CALC)
+   #instance de la classe gérant l'affichage des resultats du calcul de l'optimisation
+   Mess = Message(para,RESU_EXP,copy.copy(val_init),UNITE_RESU) 
+   #instances des classes pour le calcul de l'erreur et le dimensionnemnt/adim
+   Simul = Sim_exp(RESU_EXP)
+   Dim = Dimension(copy.copy(val_init),para)
+   L_J_init,erreur = Simul.multi_interpole(L_init, RESU_CALC)
+   J_init = Simul.norme_J(copy.copy(L_J_init),copy.copy(L_J_init),UNITE_RESU)
+   J = J_init
+   A = Simul.sensibilite(self,UNITE_ESCL,L_init,val,para,RESU_CALC,PARA_DIFF_FINI,UNITE_RESU)
+   A = Dim.adim_sensi(A)
+   l = lambda_init(Numeric.matrixmultiply(Numeric.transpose(A),A))
+   gradient_init =calcul_gradient(A,erreur)  #utile pour le test de convergence, on prend les valeurs dimensionner
+   residu = test_convergence(gradient_init,erreur,A)
+   Mess.affiche_result_iter(iter,J,val,residu,UNITE_RESU)
+   
+   #boucle principale de l'algo
+   epsilon = 10.*RESI_GLOB_RELA
+   while((residu > RESI_GLOB_RELA) & (iter<ITER_MAXI)):   #boucle principale de l'algo
+      iter = iter +1
+      testbornes = 0  #variable pour tester si les paramatres  sont dans les bornes
+      while(testbornes == 0 ) :  #boucle secondaire pour avoir des valeurs bornees
+         d = Levenberg(val,A,erreur,l) # Résolution,d est adimensionné
+         d = Dim.redim(d)
+         testbornes,l = test_bornes(l,val,d,borne_inf,borne_sup)
+      #actualisation
+      new_val = copy.copy(val + d)
+      L_F = calcul_F(self,UNITE_ESCL,para,new_val,RESU_CALC)
+      new_L_J,new_erreur = Simul.multi_interpole(L_F, RESU_CALC)
+      new_J = Simul.norme_J(L_J_init,new_L_J,UNITE_RESU)
+      l = actualise_lambda(l,new_J,J)
+      val = copy.copy(new_val)
+      erreur = copy.copy(new_erreur)
+      J = new_J
+      A = Simul.sensibilite(self,UNITE_ESCL,L_F,val,para,RESU_CALC,PARA_DIFF_FINI,UNITE_RESU)
+      A = Dim.adim_sensi(A)
+      residu = test_convergence(gradient_init,erreur,A)
+      Mess.affiche_result_iter(iter,J,val,residu,UNITE_RESU)
+      if GRAPHIQUE:
+         GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
+         interactif=(GRAPHIQUE['INTERACTIF']=='OUI')
+         graphique(L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,interactif)
+   Mess.affiche_etat_final_convergence(iter,ITER_MAXI,RESI_GLOB_RELA,residu,UNITE_RESU)
+   calcul_etat_final(A,iter,ITER_MAXI,RESI_GLOB_RELA,residu,Mess,UNITE_RESU)
+   # creations de la liste de reels contenant les valeurs des parametres a convergence
+   lival=[]
+   for i in range(len(val)):
+       lival.append(val[i])
+   nomres=DEFI_LIST_REEL(VALE=lival)
+   return 
index a1d4f709fca1fc21ad10ef81e3f67d9ceb950e62..9f84885d677132cfe8d21a3e3e7e1760d4b1949e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_mode_meca_ops Macro  DATE 11/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF macro_mode_meca_ops Macro  DATE 11/09/2002   AUTEUR VABHHTS J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -60,20 +60,6 @@ def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
         motscfa['FREQ']=(CALC_FREQ['FREQ'][i],CALC_FREQ['FREQ'][i+1])
      else:
         motscfa['FREQ']=(lborne[i],lborne[i+1])
-     if METHODE=='TRI_DIAG':
-        motscfa['NMAX_ITER_ORTHO'] =CALC_FREQ['NMAX_ITER_ORTHO']
-        motscfa['PREC_ORTHO']      =CALC_FREQ['PREC_ORTHO']
-        motscfa['PREC_LANCZOS']    =CALC_FREQ['PREC_LANCZOS']
-        motscfa['NMAX_ITER_QR']    =CALC_FREQ['NMAX_ITER_QR']
-     elif METHODE=='JACOBI':
-        motscfa['NMAX_ITER_BATHE'] =CALC_FREQ['NMAX_ITER_BATHE']
-        motscfa['PREC_BATHE']      =CALC_FREQ['PREC_BATHE']
-        motscfa['NMAX_ITER_JACOBI']=CALC_FREQ['NMAX_ITER_JACOBI']
-        motscfa['PREC_JACOBI']     =CALC_FREQ['PREC_JACOBI']
-     elif METHODE=='SORENSEN':
-        motscfa['NMAX_ITER_SOREN'] =CALC_FREQ['NMAX_ITER_SOREN']
-        motscfa['PARA_ORTHO_SOREN']=CALC_FREQ['PARA_ORTHO_SOREN']
-        motscfa['PREC_SOREN']      =CALC_FREQ['PREC_SOREN']
      motscit['CALC_FREQ']=_F(OPTION          ='BANDE',
                              SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
                              NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
@@ -85,6 +71,33 @@ def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
                              STURM      =VERI_MODE['STURM'],
                              PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
      motscit['STOP_FREQ_VIDE']=CALC_FREQ['STOP_FREQ_VIDE']
+
+     if METHODE=='TRI_DIAG':
+        if args.has_key('NMAX_ITER_ORTHO'):
+           motscit['NMAX_ITER_ORTHO'] =args['NMAX_ITER_ORTHO']
+        if args.has_key('PREC_ORTHO'):
+           motscit['PREC_ORTHO']      =args['PREC_ORTHO']
+        if args.has_key('PREC_LANCZOS'):
+           motscit['PREC_LANCZOS']    =args['PREC_LANCZOS']
+        if args.has_key('MAX_ITER_QR'):
+           motscit['NMAX_ITER_QR']    =args['NMAX_ITER_QR']
+     elif METHODE=='JACOBI':
+        if args.has_key('NMAX_ITER_BATHE'):
+           motscit['NMAX_ITER_BATHE'] =args['NMAX_ITER_BATHE']
+        if args.has_key('PREC_BATHE'):
+           motscit['PREC_BATHE']      =args['PREC_BATHE']
+        if args.has_key('NMAX_ITER_JACOBI'):
+           motscit['NMAX_ITER_JACOBI']=args['NMAX_ITER_JACOBI']
+        if args.has_key('PREC_JACOBI'):
+           motscit['PREC_JACOBI']     =args['PREC_JACOBI']
+     elif METHODE=='SORENSEN':
+        if args.has_key('NMAX_ITER_SOREN'):
+           motscit['NMAX_ITER_SOREN'] =args['NMAX_ITER_SOREN']
+        if args.has_key('PARA_ORTHO_SOREN'):
+           motscit['PARA_ORTHO_SOREN']=args['PARA_ORTHO_SOREN']
+        if args.has_key('PREC_SOREN'):
+           motscit['PREC_SOREN']      =args['PREC_SOREN']
+
      __nomre0=MODE_ITER_SIMULT(MATR_A  =MATR_A,
                                   MATR_B  =MATR_B,
                                   INFO    =INFO,
diff --git a/Aster/Cata/Macro/reca_algo.py b/Aster/Cata/Macro/reca_algo.py
new file mode 100644 (file)
index 0000000..9577e38
--- /dev/null
@@ -0,0 +1,142 @@
+#@ MODIF reca_algo Macro  DATE 24/09/2002   AUTEUR PABHHHH N.TARDIEU 
+#            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 Numeric
+import copy
+import LinearAlgebra 
+
+
+
+def calcul_gradient(A,erreur):
+   grad = Numeric.dot(Numeric.transpose(A),erreur)
+   return grad
+
+
+#-------------------------------------------
+#classe gérant l'adimensionnement et le dimensionnemnt
+class Dimension:
+   #le constructeur calcul la matrice D et son inverse
+   def __init__(self,val_initiales,para):
+      self.val_init = val_initiales
+      dim =len(self.val_init)
+      self.D = Numeric.zeros((dim,dim),Numeric.Float)
+      for i in range(dim):
+         self.D[i][i] = self.val_init[i]
+      self.inv_D=LinearAlgebra.inverse(self.D)
+   
+
+   def adim_sensi(self,A):
+      for i in range(A.shape[0]):
+         for j in range(A.shape[1]):
+            A[i,j] = A[i,j] * self.val_init[j]
+      return A
+
+
+
+   def redim_sensi(self,A):
+      for i in range(A.shape[0]):
+         for j in range(A.shape[1]):
+            A[i,j] = A[i,j] / self.val_init[j]
+      return A
+
+
+   def adim(self,tab):
+      tab_adim = Numeric.dot(self.inv_D,copy.copy(tab))
+      return tab_adim
+
+
+   def redim(self,tab_adim):
+      tab = Numeric.dot(self.D,tab_adim)
+      return tab
+   
+#------------------------------------------
+def cond(matrix):
+    e=LinearAlgebra.eigenvalues(matrix)
+    size=len(e)
+    e=Numeric.sort(e)
+    try:
+      condi=e[size-1]/e[0]
+    except ZeroDivisionError:
+      condi=0.0
+    return condi
+
+#-----------------------------------------
+def norm(matrix):
+    e=LinearAlgebra.eigenvalues(matrix)
+    size=len(e)
+    e=Numeric.sort(e)
+    norm=e[size-1]
+    return norm
+
+#-----------------------------------------
+def lambda_init(matrix):
+# Routine qui calcule la valeur initial du parametre
+# de regularisation l. On le choisit tel que 
+# l = alpha*[plus grande valeur propre de AtA]
+# ou alpha = 1.e-3 si AtA est singuliere et 1.e-16 sinon
+     condi=cond(matrix)
+     id=Numeric.identity(matrix.shape[0])
+     if (condi==0.0):
+         l=1.e-3*norm(matrix)
+     else:
+         l=1.e-16*norm(matrix)
+     return l
+
+#-----------------------------------------
+
+def Levenberg(val,A,erreur,l):  
+   #on resoud un systeme lineaire afin que l'on puisse réactualiser les valeurs des parametres
+   dim_val = len(val)
+   id = Numeric.identity(dim_val)
+   delta = LinearAlgebra.solve_linear_equations(Numeric.matrixmultiply(Numeric.transpose(A),A) +l*id ,-1*Numeric.matrixmultiply(Numeric.transpose(A),erreur))
+   return delta
+
+def test_bornes(l,val,d,borne_inf,borne_sup):
+   test=1
+   for i in range(len(val)):
+      if((val[i] + d[i] < borne_inf[i]) or (val[i] + d[i] > borne_sup[i])):
+         test = 0
+   if (test == 0):
+      l= l*2  
+   return test,l
+   
+def actualise_lambda(l,new_J,J):
+   if (new_J<J):
+      l = l/10.
+   else:
+      l = l*10.
+   return l
+
+
+def test_convergence(gradient_init,erreur,A):
+   gradient = calcul_gradient(A,erreur)
+   epsilon = Numeric.dot(gradient,gradient)/Numeric.dot(gradient_init,gradient_init)
+   epsilon = epsilon**0.5
+   return epsilon
+
+
+#fonction appellée quand la convergence est atteinte
+#on calcule le Hessien et les valeurs propres et vecteurs propre associés à l'inverse du Hessien
+# a est la sensibilite
+#le hessien=At*A
+def calcul_etat_final(A,iter,max_iter,prec,residu,Messg,ul_out):
+   if ((iter < max_iter) or (residu < prec)):
+      Hessien = Numeric.matrixmultiply(Numeric.transpose(A),A)
+      valeurs_propres,vecteurs_propres = LinearAlgebra.eigenvectors(Hessien) 
+      Messg.affiche_calcul_etat_final(Hessien,valeurs_propres,vecteurs_propres,ul_out)
diff --git a/Aster/Cata/Macro/reca_interp.py b/Aster/Cata/Macro/reca_interp.py
new file mode 100644 (file)
index 0000000..675e902
--- /dev/null
@@ -0,0 +1,174 @@
+#@ MODIF reca_interp Macro  DATE 24/09/2002   AUTEUR PABHHHH N.TARDIEU 
+#            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
+import Numeric
+import Macro
+from Macro.recal import *
+
+#===========================================================================================
+# INTERPOLATION, CALCUL DE SENSIBILITE, ETC....
+
+#--------------------------------------
+class Sim_exp :
+
+   def __init__ (self,result_exp) :
+      self.resu_exp = result_exp
+
+# Distance verticale d'un point M à une ligne brisée composée de n points
+             
+   def DistVertAdimPointLigneBrisee (self, M, points) :
+   # M      = Point               (2 colonnes, 1 ligne)
+   # points = Tableau de n points (2 colonnes, n lignes)
+   # on suppose qu'il existe au moins 2 points, 
+   # et que les points sont classés selon les abscisses croissantes
+         n = len(points)
+         if ( M[0] < points[0][0] ) or ( M[0] > points[n-1][0] ) :
+           return 0.
+         i = 1
+         while M[0] > points[i][0] :
+            i = i+1
+         y_proj_vert = (M[0]-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]  
+         d = (M[1] - y_proj_vert)
+              # Attention: la distance n'est pas normalisée
+              # Attention: problème si points[0][0] = points[1][0] = M[0]
+              # Attention: problème si M[1] = 0
+         return d
+
+
+# La Fonction Interpole ,interpole une et une seule F_calc sur F_exp et renvoie l'erreur seulement
+   def Interpole (self, F_calc,experience) :   #ici on passe en argument "une" experience
+      n = 0
+      resu_num = F_calc
+      n_exp = len(experience)    # nombre de points sur la courbe expérimentale num.i    
+      stockage = Numeric.ones(n_exp, Numeric.Float)     # matrice de stockage des erreurs en chaque point
+      for j in xrange(n_exp) :
+         d = self.DistVertAdimPointLigneBrisee(experience[j], resu_num)
+         try:
+            stockage[n] = d/experience[j][1]
+         except ZeroDivisionError:
+            stockage[n] = d
+         n = n + 1         # on totalise le nombre de points valables
+      err = Numeric.ones(n, Numeric.Float) 
+      for i in xrange(n) :
+          err[i] = stockage[i]
+      return  err
+
+   #cette fonction appelle la fonction interpole et retourne les sous fonctionnelle J et l'erreur
+   def multi_interpole(self,L_F, reponses):    #on interpole toutes les reponses une à une en appelent la methode interpole
+      L_erreur=[]
+      for i in range(len(reponses)):   
+         err = self.Interpole(L_F[i],self.resu_exp[i])
+         L_erreur.append(err)
+      #on transforme L_erreur en tab num
+      dim=[]
+      J=[]
+      for i in range(len(L_erreur)):
+         dim.append(len(L_erreur[i]))
+      dim_totale = Numeric.sum(dim)
+      L_J = self.calcul_J(L_erreur)
+      a=0
+      erreur = Numeric.zeros((dim_totale),Numeric.Float)
+      for n in range(len(L_erreur)):
+         for i in range(dim[n]):
+            erreur[i+a] = L_erreur[n][i]
+         a = dim[n]
+      del(L_erreur) #on vide la liste puisqu'on n'en a plus besoin
+      return L_J,erreur
+
+   #cette fonction retourne seulement l'erreur ,je l'appelle dans la methode sensibilité
+   #on interpole toutes les reponses une à une en appelent la methode interpole
+   def multi_interpole_sensib(self,L_F,reponses):    
+      L_erreur=[]
+      for i in range(len(reponses)):   
+         err = self.Interpole(L_F[i],self.resu_exp[i])
+         L_erreur.append(err)
+      #on transforme L_erreur en tab num
+      return L_erreur
+       
+   def calcul_J(self,L_erreur):
+      L_J = []
+      for i in range(len(L_erreur)):
+         total = 0
+         for j in range(len(L_erreur[i])):
+            total = total + L_erreur[i][j]**2
+         L_J.append(total)
+      return L_J
+   
+   def norme_J(self,L_J_init,L_J,unite_resu):
+   #cette fonction calcul une valeur normée de J
+      for i in range(len(L_J)):
+         try:
+            L_J[i] = L_J[i]/L_J_init[i]
+         except ZeroDivisionError:
+            fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+            fic.write('\012 Problème de division par zéro dans la normalisation de la fonctionnelle.')
+            fic.write('\012 Une des valeurs de  la fonctionnelle initiale est nulle ou inférieure à la précision machine :'+ str(L_J_init))
+            fic.close()
+            FIN()
+            
+      J = Numeric.sum(L_J)
+      J = J/len(L_J)
+      return J  
+   
+   def sensibilite(self,objet,UL,F,val,para,reponses,pas,unite_resu):
+      F_interp=self.multi_interpole_sensib(F, reponses)  #F_interp est une liste contenant des tab num des reponses interpolés
+      L_A=[]                              #creation de la liste des matrices de sensibilités
+      for i in range(len(reponses)):     
+         L_A.append(Numeric.zeros((len(self.resu_exp[i]),len(val)),Numeric.Float) )
+      #calcul de la sensibilité 
+      fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+      fic.write('\012Calcul de la sensibilité par rapport à :')
+      fic.close() 
+      for k in range(len(val)): #pour une colone de A
+         h = val[k]*pas
+         val[k] = val[k] + h
+         F_perturbe = calcul_F(objet,UL,para,val,reponses)
+         fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+         fic.write(' '+para[k])
+         fic.close() 
+         F_perturbe_interp =self.multi_interpole_sensib(F_perturbe, reponses)
+         val[k] = val[k] - h
+         for j in range(len(reponses)):
+            for i in range(len(self.resu_exp[j])):
+               try:
+                  L_A[j][i,k] = -1*(F_interp[j][i] - F_perturbe_interp[j][i])/h
+               except ZeroDivisionError:
+                  fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+                  fic.write('\012 Probleme de division par zéro dans le calcul de la matrice de sensiblité')
+                  fic.write('\012 Le parametre '+para[k]+'est nul ou plus petit que la précision machine')
+                  fic.close() 
+                  FIN()
+      #on construit la matrice de sensiblité sous forme d'un tab num
+      dim =[]
+      for i in range(len(L_A)):
+         dim.append(len(L_A[i]))
+      dim_totale = Numeric.sum(dim)
+      a=0
+      A = Numeric.zeros((dim_totale,len(val)),Numeric.Float)
+      for n in range(len(L_A)):
+         for k in range(len(val)):
+            for i in range(dim[n]):
+               A[i+a][k] = L_A[n][i,k]
+         a=dim[n]
+      del(L_A) #on ecrase tout ce qu'il y a dans L_A puisqu'on n'en a plus besoin   
+      return A
+
+
+
diff --git a/Aster/Cata/Macro/reca_message.py b/Aster/Cata/Macro/reca_message.py
new file mode 100644 (file)
index 0000000..8068d9e
--- /dev/null
@@ -0,0 +1,71 @@
+#@ MODIF reca_message Macro  DATE 24/09/2002   AUTEUR PABHHHH N.TARDIEU 
+#            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
+
+#===========================================================================================
+# AFFICHAGE DES MESSAGES
+
+class Message :
+   """classe gérant l'affichage des messages concernant le déroulement de l'optmisation """
+   #Constructeur de la classe
+   def __init__(self,para,val_init,resu_exp,ul_out):
+      self.nom_para = para
+      self.res_exp = resu_exp
+      res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
+      res.write(' <INFO>  MACR_RECAL V1.0 \012\012\012')
+      res.close()
+      
+   
+   def affiche_result_iter(self,iter,J,val,residu,ul_out):
+      res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
+      res.write('\012=======================================================\012')
+      res.write('Iteration '+str(iter)+' :\012')
+      res.write('\012=> Fonctionnelle = '+str(J))
+      res.write('\012=> Résidu        = '+str(residu))
+      res.write('\012=> Paramètres    = ')
+      for i in range(len(val)):
+         res.write('\012         '+ self.nom_para[i]+' = '+str(val[i]) )
+      res.write('\012=======================================================\012\012')
+      res.close()
+   
+   def affiche_etat_final_convergence(self,iter,max_iter,prec,residu,ul_out):
+      res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
+      if ((iter < max_iter) or (residu < prec)):
+        res.write('\012=======================================================\012') 
+        res.write('                   CONVERGENCE ATTEINTE                ')
+        res.write('\012=======================================================\012') 
+        res.close()
+      else:
+        res.write("\012=======================================================\012")
+        res.write('               CONVERGENCE  NON ATTEINTE              ')
+        res.write("\012  Le nombre maximal  d'itération ("+str(max_iter)+") a été dépassé")                    
+        res.write('\012=======================================================\012')
+        res.close()
+   def affiche_calcul_etat_final(self,Hessien,valeurs_propres,vecteurs_propres,ul_out):
+        res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
+        res.write('\012Hessien adimensionnel de la fonctionnelle cout: \012')
+        res.write(str(Hessien))
+        res.write('\012\012Valeurs propres du Hessien:\012')
+        res.write(str( valeurs_propres))
+        res.write('\012\012Vecteurs propres associés:\012')
+        res.write(str(vecteurs_propres))
+      
+   
+
diff --git a/Aster/Cata/Macro/recal.py b/Aster/Cata/Macro/recal.py
new file mode 100644 (file)
index 0000000..70932cd
--- /dev/null
@@ -0,0 +1,373 @@
+#@ MODIF recal Macro  DATE 24/09/2002   AUTEUR PABHHHH N.TARDIEU 
+#            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 string
+import copy
+import Numeric
+import types
+import Gnuplot
+import Cata
+from Cata.cata import *
+from Accas import _F
+
+import os
+
+
+#===========================================================================================
+# DIVERS UTILITAIRES POUR LA MACRO
+
+#transforme_list_Num tranforme transforme les donneés entrées par l'utilsateur en tableau Numeric
+def transforme_list_Num(parametres,res_exp):
+   dim_para = len(parametres)  #donne le nb de parametres
+   val_para = Numeric.zeros(dim_para,Numeric.Float)
+   borne_inf = Numeric.zeros(dim_para,Numeric.Float)
+   borne_sup = Numeric.zeros(dim_para,Numeric.Float)
+   para = []
+   for i in range(dim_para):
+      para.append(parametres[i][0])
+      val_para[i] = parametres[i][1]
+      borne_inf[i] = parametres[i][2]
+      borne_sup[i] = parametres[i][3]
+      
+   return para,val_para,borne_inf,borne_sup
+
+def mes_concepts(list_concepts=[],base=None):
+  # Fonction qui liste les concepts créés
+   for e in base.etapes:
+      if e.__class__.__name__ == 'MACRO_ETAPE':
+        list_concepts=list(mes_concepts(list_concepts=list_concepts,base=e))
+      elif e.sd != None:
+        nom_concept=e.sd.get_name()
+        if not(nom_concept in list_concepts):
+          list_concepts.append( nom_concept )
+   return tuple(list_concepts)
+
+
+def detr_concepts(objet):
+     liste_concepts=mes_concepts(base=objet.parent)
+     for e in liste_concepts:
+        nom = string.strip(e)
+        DETRUIRE( CONCEPT =objet.g_context['_F'](NOM = nom))
+        if objet.jdc.g_context.has_key(nom) : del objet.jdc.g_context[nom]
+     del(liste_concepts)
+
+
+def calcul_F(objet,UL,para,val,reponses):
+      fic = open('fort.'+str(UL),'r')
+      #On stocke le contenu de fort.UL dans la variable fichier qui est un string 
+      fichier=fic.read()
+      #On stocke le contenu initial de fort.UL dans la variable fichiersauv 
+      fichiersauv=copy.copy(fichier)
+      fic.close()
+
+      #L est une liste ou l'on va stocker le fichier modifié
+      #idée générale :on délimite des 'blocs' dans fichier
+      #on modifie ou non ces blocs suivant les besoins 
+      #on ajoute ces blocs dans la liste L
+      L=[]                      
+      
+      try: 
+         #cherche l'indice de DEBUT()
+         index_deb=string.index(fichier,'DEBUT(')
+         while( fichier[index_deb]!='\012'):
+            index_deb=index_deb+1
+         fichier = fichier[index_deb+1:]   
+                  #on restreind fichier en enlevant 'DEBUT();'
+      except :
+         #on va dans l'except si on a modifié le fichier au moins une fois
+         pass 
+         
+      try:
+         #cherche l'indice de FIN()
+         index_fin = string.index(fichier,'FIN(')
+         fichier = fichier[:index_fin]   
+                  #on restreind fichier en enlevant 'FIN();'
+      except :
+         #on va dans l'except si on a modifié le fichier au moins une fois 
+         index_retour = string.index(fichier,'RETOUR')
+         fichier=fichier[:index_retour]
+      #--------------------------------------------------------------------------------
+      #on cherche à délimiter le bloc des parametres dans le fichier
+      #Tout d'abord on cherche les indices  d'apparition des paras dans le fichier 
+      #en effet l'utilisateur n'est pas obligé de rentrer les paras dans optimise
+      #avec le meme ordre de son fichier de commande
+      index_para = Numeric.zeros(len(para))
+      for i in range(len(para)):
+         index_para[i] = string.index(fichier,para[i])
+      #On range les indices par ordre croissant afin de déterminer
+      #les indice_max et indice_min
+      index_para = Numeric.sort(index_para)
+      index_first_para = index_para[0]
+      index_last_para = index_para[len(index_para)-1]
+      
+      
+      #on va délimiter les blocs intermédiaires entre chaque para "utiles" à l'optimsation
+      bloc_inter ='\012'
+      for i in range(len(para)-1):
+         j = index_para[i]
+         k = index_para[i+1]
+         while(fichier[j]!= '\012'):
+            j=j+1
+         bloc_inter=bloc_inter + fichier[j:k] + '\012'
+         
+      #on veut se placer sur le premier retour chariot que l'on trouve sur la ligne du dernier para
+      i = index_last_para 
+      while(fichier[i] != '\012'):
+         i = i + 1
+      index_last_para  = i
+      #on délimite les blocs suivants:
+      pre_bloc = fichier[:index_first_para]       #fichier avant premier parametre
+      post_bloc = fichier[ index_last_para+ 1:]    #fichier après dernier parametre
+      
+      #on ajoute dans L tous ce qui est avant le premier paramètre 
+      L.append(pre_bloc)
+      #On ajoute à L tous ce qui est entre les parametres
+      L.append(bloc_inter)
+      #On ajoute la nouvelle valeur des parametres
+      dim_para=len(para)
+      for j in range(dim_para):
+         L.append(para[j]+'='+str(val[j]) + ';' + '\012')
+      
+      L.append(post_bloc)
+      #--------------------------------------------------------------------------------
+      #on va ajouter la fonction EXTRACT 
+      #et on stocke les réponses calculées dans la liste Lrep
+      #qui va etre retournée par la fonction calcul_F
+      objet.g_context['Lrep'] = []
+      L.append('Lrep=[]'+'\012')
+      for i in range(len(reponses)):
+         L.append('F = EXTRACT('+str(reponses[i][0])+','+"'"+str(reponses[i][1])+"'"+','+"'"+str(reponses[i][2])+"'"+')'+'\012')
+         L.append('Lrep.append(F)'+'\012')
+      #on ajoute à RETOUR
+      L.append('RETOUR();\012')
+      
+      #ouverture du fichier fort.3 et mise a jour de celui ci
+      x=open('fort.'+str(UL),'w')
+      x.writelines('from Accas import _F \012from Cata.cata import * \012')
+      x.writelines(L)
+      x.close()
+      del(L)
+      del(pre_bloc)
+      del(post_bloc)
+      del(fichier)
+      
+      INCLUDE(UNITE = str(UL))
+      detr_concepts(objet)
+      # on remet le fichier dans son etat initial
+      x=open('fort.'+str(UL),'w')
+      x.writelines(fichiersauv)
+      x.close()
+      return objet.g_context['Lrep']
+
+#----------------------------------------------------------
+
+
+def EXTRACT(Table,Para,Champ):
+# Definition des variables
+  #Table = reponse[0]
+  #Para = reponse[1]
+  #Champ = reponse[2] 
+  Result = [[None]*2]
+  nb_temp = 0
+# Boucle de lecture sur les temps
+  while 1: 
+#   Si on n'a pas lu tous les temps
+    try:
+#     alors on lit les 2 champs abscisse et ordonnee
+        Result[nb_temp][0] = Table[Para,nb_temp+1]
+        Result[nb_temp][1] = Table[Champ,nb_temp+1]
+        nb_temp = nb_temp + 1  
+#     on ajoute une dimension temporelle supplementaire au resultat
+        Result.append([None]*2)
+#   Si on a lu tous les temps alors on sort de la boucle
+    except KeyError:
+      break
+# on renvoie le resultat en fin
+  Rep = Result[0:nb_temp]
+  F=Numeric.zeros((len(Rep),2),Numeric.Float)   #on transforme Rep en array Numeric
+  for i in range(len(Rep)):
+   for j in range(2) :
+      F[i][j] = Rep[i][j]
+  del(Rep)
+  del(Result)
+  return F
+  
+
+#-------------------------------------------
+def graphique(L_F,res_exp,reponses,iter,UL_out,interactif):
+   graphe=[]
+   impr=Gnuplot.Gnuplot()
+   Gnuplot.GnuplotOpts.prefer_inline_data=1
+   impr('set data style linespoints')
+   impr('set grid')
+   impr('set pointsize 2.')
+   impr('set terminal postscript color')
+   impr('set output "fort.'+str(UL_out)+'"')
+   for i in range(len(L_F)):
+         if interactif:
+            graphe.append(Gnuplot.Gnuplot(persist=0))
+            graphe[i]('set data style linespoints')
+            graphe[i]('set grid')
+            graphe[i]('set pointsize 2.')
+            graphe[i].xlabel(reponses[i][1])
+            graphe[i].ylabel(reponses[i][2])
+            graphe[i].title(reponses[i][0]+'  Iteration '+str(iter))
+            graphe[i].plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+            graphe[i]('pause 5')
+#
+         impr.xlabel(reponses[i][1])
+         impr.ylabel(reponses[i][2])
+         impr.title(reponses[i][0]+'  Iteration '+str(iter))
+         impr.plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+
+
+#===========================================================================================
+# CONTROLE DES ENTREES UTILISATEUR
+
+def erreur_de_type(code_erreur,X):
+   #code_erreur ==0 --> X est une liste
+   #code erreur ==1 --> X est un char
+   #code erreur ==2 --> X est un float
+   #test est un boolean (test = 0 défaut et 1 si un test if est verifier
+   txt=""
+   if(code_erreur == 0 ):
+      if type(X) is not types.ListType:
+         txt="\012Cette entrée: " +str(X)+" n'est pas une liste valide"
+   if(code_erreur == 1 ):
+      if type(X) is not types.StringType:
+         txt="\012Cette entrée: " +str(X)+" n'est pas une chaine de caractère valide ; Veuillez la ressaisir en lui appliquant le type char de python"
+   if(code_erreur == 2 ):
+      if type(X) is not types.FloatType:
+         txt="\012Cette entrée:  " +str(X)+" n'est pas une valeur float valide ; Veuillez la ressaisir en lui appliquant le type float de python"
+   return txt
+   
+   
+def erreur_dimension(PARAMETRES,REPONSES):
+#On verifie que la dimension de chaque sous_liste de parametre est 4
+#et que la dimension de chaque sous_liste de REPONSES est 3
+   txt=""
+   for i in range(len(PARAMETRES)):
+      if (len(PARAMETRES[i]) != 4):
+         txt=txt + "\012La sous-liste de la variable paramètre numéro " + str(i+1)+" n'est pas de longueur 4"
+   for i in range(len(REPONSES)):
+      if (len(REPONSES[i]) != 3):
+         txt=txt + "\012La sous-liste de la variable réponse numéro " + str(i+1)+" n'est pas de longueur 3"
+   return txt
+
+
+def compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP):
+   # X et Y sont deux arguments qui doivent avoir la meme dimension
+   # pour éviter l'arret du programme
+   txt=""
+   if( len(REPONSES) != len(RESU_EXP)):
+      txt="\012Vous avez entré " +str(len(REPONSES))+ " réponses et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de réponses que de résultats expérimentaux"
+   return txt
+
+
+def verif_fichier(UL,PARAMETRES,REPONSES):
+#On verifie les occurences des noms des PARAMETRES et REPONSES 
+#dans le fichier de commande ASTER
+   txt=""
+   fichier = open('fort.'+str(UL),'r')
+   fic=fichier.read()
+   for i in range(len(PARAMETRES)):
+      if((string.find(fic,PARAMETRES[i][0])==-1) or ((string.find(fic,PARAMETRES[i][0]+'=')==-1) and (string.find(fic,PARAMETRES[i][0]+' ')==-1))):
+         txt=txt + "\012Le paramètre "+PARAMETRES[i][0]+" que vous avez entré pour la phase d'optimisation n'a pas été trouvé dans votre fichier de commandes ASTER"
+   for i in range(len(REPONSES)):
+      if((string.find(fic,REPONSES[i][0])==-1) or ((string.find(fic,REPONSES[i][0]+'=')==-1) and (string.find(fic,REPONSES[i][0]+' ')==-1))):
+         txt=txt + "\012La réponse  "+REPONSES[i][0]+" que vous avez entrée pour la phase d optimisation n'a pas été trouvée dans votre fichier de commandes ASTER"
+   return txt
+
+
+def verif_valeurs_des_PARAMETRES(PARAMETRES):
+#On verifie que pour chaque PARAMETRES de l'optimisation
+# les valeurs entrées par l'utilisateur sont telles que :
+#              val_inf<val_sup
+#              val_init appartient à [val_inf, val_sup] 
+#              val_init!=0         
+   #verification des bornes
+   txt=""
+   for i in range(len(PARAMETRES)):
+      if( PARAMETRES[i][2] >PARAMETRES[i][3]):
+         txt=txt + "\012La borne inférieure "+str(PARAMETRES[i][2])+" de  "+PARAMETRES[i][0]+ "est plus grande que sa borne supérieure"+str(PARAMETRES[i][3])
+   #verification de l'encadrement de val_init 
+   for i in range(len(PARAMETRES)):
+      if( (PARAMETRES[i][1] < PARAMETRES[i][2]) or (PARAMETRES[i][1] > PARAMETRES[i][3])):
+         txt=txt + "\012La valeur initiale "+str(PARAMETRES[i][1])+" de "+PARAMETRES[i][0]+ " n'est pas dans l'intervalle [borne_inf,born_inf]=["+str(PARAMETRES[i][2])+" , "+str(PARAMETRES[i][3])+"]"
+   #verification que val_init !=0
+   for  i in range(len(PARAMETRES)):
+      if (PARAMETRES[i][1] == 0. ):
+         txt=txt + "\012Problèmes de valeurs initiales pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur initiale nulle mais un ordre de grandeur."
+   return txt
+
+
+
+
+def gestion(UL,PARAMETRES,REPONSES,RESU_EXP):
+   #Cette methode va utiliser les methodes de cette classe declarée ci_dessus
+   #test  est un boolean: test=0 -> pas d'erreur
+   #                      test=1 -> erreur détectée
+
+   texte=""
+   #On vérifie d'abord si PARAMETRES, REPONSES, RESU_EXP sont bien des listes au sens python
+   #test de PARAMETRES
+   texte = texte + erreur_de_type(0,PARAMETRES)
+   #test de REPONSES
+   texte = texte + erreur_de_type(0,REPONSES)
+   #test de RESU_EXP
+   texte = texte + erreur_de_type(0,RESU_EXP) 
+   
+   #On vérifie si chaque sous liste de PARAMETRES, REPONSES,  possède le type adéquat
+   #test des sous_listes de PARAMETRES
+   for i in range(len(PARAMETRES)):
+      texte = texte +  erreur_de_type(0,PARAMETRES[i]) 
+   #test des sous_listes de REPONSES
+   for i in range(len(REPONSES)):
+      texte = texte + erreur_de_type(0,REPONSES[i])
+   #On verifie si la dimension de chaque sous-liste de : PARAMETRES, REPONSES
+   #il faut que:la dimension d'une sous-liste de PARAMETRES = 4
+   #et   que    la dimension d'une sous liste de REPONSES   = 3
+   texte = texte + erreur_dimension(PARAMETRES,REPONSES)
+
+   #on verifie que l'on a autant de réponses que de résultats expérimentaux
+   texte = texte + compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP)
+
+   #on verifie les types des arguments de chaque sous liste de PARAMETRES et REPONSES
+      #verification du type stringet type float des arguments de PARAMETRES
+   for i in range(len(PARAMETRES)):
+      texte = texte + erreur_de_type(1,PARAMETRES[i][0])
+      for k in [1,2,3]:
+         texte = texte + erreur_de_type(2,PARAMETRES[i][k])
+         
+   #verification du type string pour les arguments  de REPONSES
+   for i in range(len(REPONSES)):
+      for j in range(len(REPONSES[i])):
+         texte = texte + erreur_de_type(1,REPONSES[i][j])
+   
+   #verification du fichier de commndes ASTER
+   texte = texte + verif_fichier(UL,PARAMETRES,REPONSES)
+
+   #verifiaction des valeurs des PARAMETRES entrées par l'utilisteur 
+   texte = texte + verif_valeurs_des_PARAMETRES(PARAMETRES)
+
+   return texte
+   
+
index 4204f5e08f6e97f14bf68af984cfb23c717743af..42f8edf1bc1ed0ba03aefa1a98f4cf4dbdce1d6f 100755 (executable)
@@ -326,7 +326,7 @@ class vect_elem_pres_c(vect_elem):pass
 class vect_elem_pres_r(vect_elem):pass
 class vect_elem_temp_r(vect_elem):pass
 
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -337,13 +337,14 @@ class vect_elem_temp_r(vect_elem):pass
 AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
                     fr="Affectation de caractéristiques à des éléments de structure",
                     docu="U4.42.01-g3",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','MASSIF',
                              'ASSE_GRIL','GRILLE','AFFE_SECT','AFFE_FIBRE'),),
          MODELE          =SIMP(statut='o',typ=modele ),
          INFO            =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
          VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
 
-         POUTRE          =FACT(statut='f',min=01,max='**',
+         POUTRE          =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -383,7 +384,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            FCX             =SIMP(statut='f',typ=(fonction) ),
          ),
 
-         BARRE           =FACT(statut='f',min=01,max='**',
+         BARRE           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -403,7 +404,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            FCX             =SIMP(statut='f',typ=(fonction) ),
          ),
 
-         COQUE           =FACT(statut='f',min=01,max='**',
+         COQUE           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA' ),
                    PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
@@ -418,7 +419,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            MODI_METRIQUE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 
-         CABLE           =FACT(statut='f',min=01,max='**',
+         CABLE           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),
                    UN_PARMI('A','SECTION') ),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
@@ -429,7 +430,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            FCX             =SIMP(statut='f',typ=(fonction) ),
          ),
 
-         DISCRET         =FACT(statut='f',min=01,max='**',
+         DISCRET         =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
@@ -447,7 +448,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            VALE            =SIMP(statut='o',typ='R',max='**'),
          ),
 
-         ORIENTATION     =FACT(statut='f',min=01,max='**',
+         ORIENTATION     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -460,7 +461,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
          ),
 
-         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+         DEFI_ARC        =FACT(statut='f',min=1,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'),
@@ -491,7 +492,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
          ),
 
-         MASSIF          =FACT(statut='f',min=01,max='**',
+         MASSIF          =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),
                    UN_PARMI('ANGL_REP','ANGL_AXE'),
                    EXCLUS('ANGL_REP','ANGL_AXE'),
@@ -504,7 +505,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
          ),
 
-         POUTRE_FLUI     =FACT(statut='f',min=01,max='**',
+         POUTRE_FLUI     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -516,7 +517,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            COEF_ECHELLE    =SIMP(statut='o',typ='R'),
          ),
 
-         GRILLE          =FACT(statut='f',min=01,max='**',
+         GRILLE          =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),
                    EXCLUS('ANGL_REP','ORIG_AXE'),
                    ENSEMBLE('ORIG_AXE','AXE')),
@@ -534,7 +535,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,min=1,max=1 ),
          ),
 
-         RIGI_PARASOL    =FACT(statut='f',min=01,max='**',
+         RIGI_PARASOL    =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('COEF_GROUP','FONC_GROUP'),
                    UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
            GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
@@ -548,7 +549,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
          ),
 
-         ASSE_GRIL       =FACT(statut='f',min=01,max='**',
+         ASSE_GRIL       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -596,7 +597,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
 
 
 ) ;
-#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -617,10 +618,11 @@ 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",
                     docu="U4.44.04-e",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
          MODELE          =SIMP(statut='o',typ=modele ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         PRES_IMPO       =FACT(statut='f',min=01,max='**',
+         PRES_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -629,7 +631,7 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            PRES            =SIMP(statut='o',typ='C' ),
          ),
-         VITE_FACE       =FACT(statut='f',min=01,max='**',
+         VITE_FACE       =FACT(statut='f',min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -637,7 +639,7 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            VNOR            =SIMP(statut='o',typ='C' ),
          ),
-         IMPE_FACE       =FACT(statut='f',min=01,max='**',
+         IMPE_FACE       =FACT(statut='f',min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -645,7 +647,7 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            IMPE            =SIMP(statut='o',typ='C' ),
          ),
-         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
@@ -654,7 +656,7 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/06/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -682,12 +684,13 @@ def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_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 pour traitement sans dualisation",
                      docu="U4.44.03-e",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO','ACOU_IMPO'),
                  EXCLUS('MECA_IMPO','THER_IMPO'),
                  EXCLUS('MECA_IMPO','ACOU_IMPO'),
                  EXCLUS('THER_IMPO','ACOU_IMPO'),),
          MODELE          =SIMP(statut='o',typ=modele ),
-         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+         MECA_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -704,7 +707,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
            TEMP            =SIMP(statut='f',typ='R' ),
            PHI             =SIMP(statut='f',typ='R' ),
          ),
-         THER_IMPO       =FACT(statut='f',min=01,max='**',
+         THER_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -714,7 +717,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',min=01,max='**',
+         ACOU_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
@@ -723,7 +726,7 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -749,10 +752,11 @@ def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
 AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_prod
                     ,fr="Affectation de conditions aux limites cinématiques pour traitement sans dualisation",
                      docu="U4.44.03-e",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'),
                  EXCLUS('MECA_IMPO','THER_IMPO'),),
          MODELE          =SIMP(statut='o',typ=modele ),
-         MECA_IMPO       =FACT(statut='f',min=01,max='**',
+         MECA_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -769,7 +773,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
            TEMP            =SIMP(statut='f',typ=fonction ),
            PHI             =SIMP(statut='f',typ=fonction ),
          ),
-         THER_IMPO       =FACT(statut='f',min=01,max='**',
+         THER_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -781,7 +785,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 13/08/2002   AUTEUR ADBHHPM P.MASSIN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -803,27 +807,21 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,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",
                      docu="U4.44.01-g2",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',  
                              'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',       
                              'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',        
                              'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',      
                              'VITE_FACE','TEMP_CALCULEE','RELA_CINE_BP','EPSI_INIT','CONTACT', 
-                             'LIAISON_UNIL_NO','LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',  
+                             'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP',  
                              'LIAISON_SOLIDE','LIAISON_ELEM','ONDE_FLUI','PRES_CALCULEE',      
                              'EPSA_CALCULEE','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',     
                              'LIAISON_MAIL','FORCE_TUYAU','SECH_CALCULEE','HYDR_CALCULEE',     
                              'EFFE_FOND','EVOL_CHAR','ARLEQUIN'),
-                 EXCLUS('PRES_CALCULEE','EVOL_CHAR'),
-                 EXCLUS('LIAISON_UNIL_NO','CONTACT'),),            
-         
-         MODELE          =SIMP(statut='o',typ=(modele) ),
+                 EXCLUS('PRES_CALCULEE','EVOL_CHAR'),),            
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-#    A TERME PRES_CALCULEE N'EXISTERA PLUS
-         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
-                               typ=evol_char ),
-         PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
-                               typ=evol_char ),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
          TEMP_CALCULEE   =SIMP(statut='f',fr="Champ de température issu d'un autre calcul",
                                typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
          HYDR_CALCULEE   =SIMP(statut='f',fr="Champ d hydratation issu d'un autre calcul",
@@ -832,105 +830,18 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                                typ=(evol_ther,cham_no_temp_r,carte_temp_r,carte_temp_f ) ),
          EPSA_CALCULEE   =SIMP(statut='f',fr="Champ de déformation anélastique issu d'un autre calcul",
                                typ=evol_noli ),
-         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+#    A TERME PRES_CALCULEE N'EXISTERA PLUS
+         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+         PRES_CALCULEE   =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
          
-         ARLEQUIN        =FACT(statut='f',min=1,max='**',
-           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
-           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
-           GROUP_MA_COLL  =SIMP(statut='o',typ=grma,max='**'),
-           CARA_ELEM      =SIMP(statut='f',typ=(cara_elem) ),
-           regles        =(UN_PARMI('POIDS_1','POIDS_2'),),
-           POIDS_1       =SIMP(statut='f',typ='R'),
-           POIDS_2       =SIMP(statut='f',typ='R'),
-         ),
-
-         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
-           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
-           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
-           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
-           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),                 
-           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
-                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),           
-           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","QUADRATIQUE") ),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
-                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
-                regles=(EXCLUS('DIST_2','COEF_IMPO'),
-                        EXCLUS('DIST_1','COEF_IMPO'),),
-                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_act_reac      =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
-                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
-                COEF_IMPO       =SIMP(statut='f',typ='R'),
-                COEF_MULT_2     =SIMP(statut='f',typ='R'),
-                VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                DIST_1          =SIMP(statut='f',typ='R'),
-                DIST_2          =SIMP(statut='f',typ='R'),),
-           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
-                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
-                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_lag_reac      =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
-                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
-                DIST_1          =SIMP(statut='f',typ='R'),
-                DIST_2          =SIMP(statut='f',typ='R'),
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',max=1),
-                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
-                     ),),
-           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
-                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
-                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
-                E_N             =SIMP(statut='f',typ='R'), 
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
-                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
-                b_pen_reac      =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                                 fr="Paramètre de la réactualisation géométrique",
-                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
-                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
-                DIST_1          =SIMP(statut='f',typ='R'),
-                DIST_2          =SIMP(statut='f',typ='R'),
-                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',max=1),
-                     E_T             =SIMP(statut='f',typ='R',
-                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
-                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
-                     ),),
-           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
-                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
-                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
-                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
-                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2")),
-                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
-                DIRECTION_APPA  =SIMP(statut='f',typ='R',max=3),
-                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
-                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
-                     COULOMB         =SIMP(statut='o',typ='R',max=1),
-                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
-         ),
+         PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
+         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),),     
 
-        DDL_IMPO        =FACT(statut='f',min=1,max='**',
+         DDL_IMPO        =FACT(statut='f',min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                      AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
                                  'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
@@ -990,39 +901,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              GONF            =SIMP(statut='f',typ='R' ),
            ),
 
-         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=1,max='**',
-           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
-           GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           PRES            =SIMP(statut='o',typ='R' ),
-         ),
-         
-         EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
-                                 min=1,max='**',
-             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
-                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
-             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             EPXX            =SIMP(statut='f',typ='R' ),
-             EPYY            =SIMP(statut='f',typ='R' ),
-             EPZZ            =SIMP(statut='f',typ='R' ),
-             EPXY            =SIMP(statut='f',typ='R' ),
-             EPXZ            =SIMP(statut='f',typ='R' ),
-             EPYZ            =SIMP(statut='f',typ='R' ),
-             EPX             =SIMP(statut='f',typ='R' ),
-             KY              =SIMP(statut='f',typ='R' ),
-             KZ              =SIMP(statut='f',typ='R' ),
-             EXX             =SIMP(statut='f',typ='R' ),
-             EYY             =SIMP(statut='f',typ='R' ),
-             EXY             =SIMP(statut='f',typ='R' ),
-             KXX             =SIMP(statut='f',typ='R' ),
-             KYY             =SIMP(statut='f',typ='R' ),
-             KXY             =SIMP(statut='f',typ='R' ),
-           ),
+
          
            FACE_IMPO       =FACT(statut='f',min=1,max='**',
              regles=(UN_PARMI('GROUP_MA','MAILLE',),
@@ -1059,126 +938,268 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              PRE2            =SIMP(statut='f',typ='R' ),
            ),
 
-         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
-             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
-             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             FLUN            =SIMP(statut='f',typ='R' ),
-             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
-             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
            ),
-         
-         FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
+
+           LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
                                  min=1,max='**',
-             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
-                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             FX              =SIMP(statut='f',typ='R' ),
-             FY              =SIMP(statut='f',typ='R' ),
-             FZ              =SIMP(statut='f',typ='R' ),
-             MX              =SIMP(statut='f',typ='R' ),
-             MY              =SIMP(statut='f',typ='R' ),
-             MZ              =SIMP(statut='f',typ='R' ),
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
            ), 
-         
-           FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=1,max='**',
-             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),               
-                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
-                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
-                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
-                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
-                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
-                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
-                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
-                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
-                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
-                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
-                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
-                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
-#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
-             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),        
+                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                     EXCLUS('GROUP_MA_1','NOEUD_2'),      
+                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                     EXCLUS('GROUP_NO_1','MAILLE_2'),
+                     EXCLUS('MAILLE_1','GROUP_NO_2'),
+                     EXCLUS('MAILLE_1','NOEUD_2'),
+                     EXCLUS('NOEUD_1','GROUP_MA_2'),
+                     EXCLUS('NOEUD_1','MAILLE_2'),
+                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
              
-               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' ),
+               GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
              
-               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",) ),
+             SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             TRAN            =SIMP(statut='f',typ='R',max=3),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
            ),
 
-         FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
+           LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'), 
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'), 
+              TRAN            =SIMP(statut='f',typ='R',max=3 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+         ),
+
+         
+           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+
+           LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=1,max='**',
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
+             AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
+             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+
+           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
+                                 min=1,max='**',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ), 
+
+         LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls d'un concept cham_nno",
+                                 min=1,max='**',
+#  type de cham_no CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ), 
+
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
+
+         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),                 
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),           
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","QUADRATIQUE") ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                regles=(EXCLUS('DIST_2','COEF_IMPO'),
+                        EXCLUS('DIST_1','COEF_IMPO'),),
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                COEF_IMPO       =SIMP(statut='f',typ='R'),
+                COEF_MULT_2     =SIMP(statut='f',typ='R'),
+                VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     ),),
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                E_N             =SIMP(statut='f',typ='R'), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ='R'),
+                DIST_2          =SIMP(statut='f',typ='R'),
+                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     ),),
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2")),
+                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+                DIRECTION_APPA  =SIMP(statut='f',typ='R',max=3,defaut=(0.,0.,0.,)),
+                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+         ),         
+         
+         FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+         ),
+
+         FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
                                  min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+                     AU_MOINS_UN('FX','FY','FZ'),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              FX              =SIMP(statut='f',typ='R' ),
              FY              =SIMP(statut='f',typ='R' ),
              FZ              =SIMP(statut='f',typ='R' ),
-             MX              =SIMP(statut='f',typ='R' ),
-             MY              =SIMP(statut='f',typ='R' ),
-             MZ              =SIMP(statut='f',typ='R' ),
            ), 
 
-         FORCE_ELEC      =FACT(statut='f',
-                                 fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
+         FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
                                  min=1,max='**',
-             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
-                     EXCLUS('FX','POSITION'),
-                     EXCLUS('FY','POSITION'),   
-                     EXCLUS('FZ','POSITION'),),
-#  trop de regles : les blocs conditionnels permettent d en suprimer              
-             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-              
-             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             
-             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
-             b_para     =BLOC ( condition = "POSITION == 'PARA'",
-               regles=(UN_PARMI('TRANS','DIST'),),
-               TRANS           =SIMP(statut='f',typ='R',max=3),
-               DIST            =SIMP(statut='f',typ='R' ),
-               b_point2        =BLOC ( condition = "DIST != None", 
-                 POINT2           =SIMP(statut='o',typ='R',max=3),
-               ),
-             ),
-             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
-               POINT1          =SIMP(statut='o',typ='R',max=3),
-               POINT2          =SIMP(statut='o',typ='R',max=3),
-             ), 
-           ),
-
-         FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ), 
+         
+         FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
                                  min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('FX','FY','FZ'),),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              FX              =SIMP(statut='f',typ='R' ),
              FY              =SIMP(statut='f',typ='R' ),
              FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
            ), 
 
          FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
@@ -1194,27 +1215,62 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              FZ              =SIMP(statut='f',typ='R' ),
            ), 
 
-         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
-             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+         PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             IMPE            =SIMP(statut='o',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
            ),
          
-         FORCE_NODALE    =FACT(statut='f',fr="Imposer des forces nodales en des noeuds",min=1,max='**',
-           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
-                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           FX              =SIMP(statut='f',typ='R' ),
-           FY              =SIMP(statut='f',typ='R' ),
-           FZ              =SIMP(statut='f',typ='R' ),
-           MX              =SIMP(statut='f',typ='R' ),
-           MY              =SIMP(statut='f',typ='R' ),
-           MZ              =SIMP(statut='f',typ='R' ),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",min=1,max='**',
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
          ),
-
+        
+         EPSI_INIT       =FACT(statut='f',fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             EPXX            =SIMP(statut='f',typ='R' ),
+             EPYY            =SIMP(statut='f',typ='R' ),
+             EPZZ            =SIMP(statut='f',typ='R' ),
+             EPXY            =SIMP(statut='f',typ='R' ),
+             EPXZ            =SIMP(statut='f',typ='R' ),
+             EPYZ            =SIMP(statut='f',typ='R' ),
+             EPX             =SIMP(statut='f',typ='R' ),
+             KY              =SIMP(statut='f',typ='R' ),
+             KZ              =SIMP(statut='f',typ='R' ),
+             EXX             =SIMP(statut='f',typ='R' ),
+             EYY             =SIMP(statut='f',typ='R' ),
+             EXY             =SIMP(statut='f',typ='R' ),
+             KXX             =SIMP(statut='f',typ='R' ),
+             KYY             =SIMP(statut='f',typ='R' ),
+             KXY             =SIMP(statut='f',typ='R' ),
+           ),
+           
+         ARLEQUIN        =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_COLL  =SIMP(statut='o',typ=grma,max='**'),
+           CARA_ELEM      =SIMP(statut='f',typ=(cara_elem) ),
+           regles        =(UN_PARMI('POIDS_1','POIDS_2'),),
+           POIDS_1       =SIMP(statut='f',typ='R'),
+           POIDS_2       =SIMP(statut='f',typ='R'),
+         ),
+         
         FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
@@ -1242,12 +1298,105 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
          
          FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+          
+         FORCE_COQUE     =FACT(statut='f',fr="Appliquer des forces surfaciques sur des coques",min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),               
+                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+               MX              =SIMP(statut='f',typ='R' ),
+               MY              =SIMP(statut='f',typ='R' ),
+               MZ              =SIMP(statut='f',typ='R' ),
+             
+               F1              =SIMP(statut='f',typ='R' ),
+               F2              =SIMP(statut='f',typ='R' ),
+               F3              =SIMP(statut='f',typ='R' ),
+               MF1             =SIMP(statut='f',typ='R' ),
+               MF2             =SIMP(statut='f',typ='R' ),
+              
+             PRES            =SIMP(statut='f',typ='R' ),
+             PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+           ),
+
+
+           LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+         RELA_CINE_BP    =FACT(statut='f',min=1,max='**',
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+           
+         FORCE_ELEC      =FACT(statut='f',
+                                 fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
+                                 min=1,max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
+                     EXCLUS('FX','POSITION'),
+                     EXCLUS('FY','POSITION'),   
+                     EXCLUS('FZ','POSITION'),),
+#  trop de regles : les blocs conditionnels permettent d en suprimer              
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             PRES            =SIMP(statut='f',typ='R' ),
+              
+             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_para     =BLOC ( condition = "POSITION == 'PARA'",
+               regles=(UN_PARMI('TRANS','DIST'),),
+               TRANS           =SIMP(statut='f',typ='R',max=3),
+               DIST            =SIMP(statut='f',typ='R' ),
+               b_point2        =BLOC ( condition = "DIST != None", 
+                 POINT2           =SIMP(statut='o',typ='R',max=3),
+               ),
+             ),
+             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+               POINT1          =SIMP(statut='o',typ='R',max=3),
+               POINT2          =SIMP(statut='o',typ='R',max=3),
+             ), 
            ),
+
+
+
              
         INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
                                  min=1,max='**',
@@ -1264,161 +1413,23 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              SYME            =SIMP(statut='f',typ='R',max='**'),
            ),
          
-         LIAISON_CHAMNO  =FACT(statut='f',fr="définir une relation linéaire entre tous les ddls d'un concept cham_nno",
-                                 min=1,max='**',
-#  type de cham_no CO()
-             CHAM_NO         =SIMP(statut='o',typ=cham_no), #CO()
-             COEF_IMPO       =SIMP(statut='o',typ='R' ),
-             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
-           ), 
-
-           LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
-             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-             GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
-             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
-             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
-           ),
-           LIAISON_DDL     =FACT(statut='f',fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
-                                 min=1,max='**',
-             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD           =SIMP(statut='f',typ=no,max='**'),
-             DDL             =SIMP(statut='o',typ='TXM',max='**'),
-             COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
-             COEF_IMPO       =SIMP(statut='o',typ='R' ),
-           ),
-
-           LIAISON_ELEM    =FACT(statut='f',fr="Raccorder une poutre à une partie massive 3D ou une coque", min=1,max='**',
-             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
-                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
-             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
-             GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-             GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
-             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
-             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
-             AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
-             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
-           ),
-
-           LIAISON_GROUP   =FACT(statut='f',fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
-                                 min=1,max='**',
-             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),        
-                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
-                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
-                     EXCLUS('GROUP_MA_1','NOEUD_2'),      
-                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
-                     EXCLUS('GROUP_NO_1','MAILLE_2'),
-                     EXCLUS('MAILLE_1','GROUP_NO_2'),
-                     EXCLUS('MAILLE_1','NOEUD_2'),
-                     EXCLUS('NOEUD_1','GROUP_MA_2'),
-                     EXCLUS('NOEUD_1','MAILLE_2'),
-                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
-             
-               GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-               MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-               GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-               MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-               GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
-               NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
-               GROUP_NO_2      =SIMP(statut='f',typ=no,max='**'),
-               NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
-             
-             SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
-             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
-             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
-             COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
-             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
-             COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
-             COEF_IMPO       =SIMP(statut='o',typ='R' ),
-             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             TRAN            =SIMP(statut='f',typ='R',max=3),
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
-             CENTRE          =SIMP(statut='f',typ='R',max=3),
-           ),
 
-           LIAISON_OBLIQUE =FACT(statut='f',fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
-                                 min=1,max='**',
-             regles=(UN_PARMI('GROUP_NO','NOEUD'),
-                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD           =SIMP(statut='f',typ=no,max='**'),
-             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
-             DX              =SIMP(statut='f',typ='R' ),
-             DY              =SIMP(statut='f',typ='R' ),
-             DZ              =SIMP(statut='f',typ='R' ),
-             DRX             =SIMP(statut='f',typ='R' ),
-             DRY             =SIMP(statut='f',typ='R' ),
-             DRZ             =SIMP(statut='f',typ='R' ),
-           ), 
-
-           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
-             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
-           ), 
-
-           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
-                                 min=1,max='**',
-             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+         
+         VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             DDL             =SIMP(statut='o',typ='TXM',max='**'),
-           ), 
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+           
+
 
-         LIAISON_UNIL_NO =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
-                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
-           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           TRAN            =SIMP(statut='f',typ='R',max=3 ),  
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),  
-           CENTRE          =SIMP(statut='f',typ='R',max=3 ),  
-           ANGLE_MAX       =SIMP(statut='f',typ='R' ),  
-           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",   
-                                 into=("SANS","TRESCA","COULOMB") ),
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
-                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
-           COULOMB         =SIMP(statut='f',typ='R' ),  
-           TRESCA          =SIMP(statut='f',typ='R' ),  
-           E_T             =SIMP(statut='f',typ='R' ),  
-           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
-           CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
-           JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
-         ),
-         
-           LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
-             regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
-                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
-                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
-              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
-              MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'), 
-              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
-              MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'), 
-              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
-              NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'), 
-              TRAN            =SIMP(statut='f',typ='R',max=3 ),
-              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
-              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
-              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
-              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
-         ),
-         
          ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -1426,39 +1437,21 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              PRES            =SIMP(statut='o',typ='R' ),
            ),
          
-         PRES_REP        =FACT(statut='f',fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
-                                 min=1,max='**',
+         FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                     AU_MOINS_UN('PRES','CISA_2D' ),),
+                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             PRES            =SIMP(statut='f',typ='R' ),
-             CISA_2D         =SIMP(statut='f',typ='R' ),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
            ),
-         
-         PESANTEUR       =SIMP(statut='f',typ='R',fr="Champ de pesanteur",min=4,max=4),
-
-         RELA_CINE_BP    =FACT(statut='f',min=1,max='**',
-           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
-           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         ),
 
-        ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation",min=4,max=4),
-         b_rotation      =BLOC ( condition = "ROTATION != None",
-           CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),     
-         
-         VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",min=1,max='**',
-             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             VNOR            =SIMP(statut='o',typ='R' ),
-           ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1480,10 +1473,11 @@ 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",
                      docu="U4.44.05-d2",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
          MODELE          =SIMP(statut='o',typ=modele ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         DDL_IMPO        =FACT(statut='f',min=01,max='**',
+         DDL_IMPO        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI', ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -1501,7 +1495,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
            PRES            =SIMP(statut='f',typ='C' ),
            PHI             =SIMP(statut='f',typ='C' ),
          ),
-         FORCE_POUTRE    =FACT(statut='f',min=01,max='**',
+         FORCE_POUTRE    =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FX','FY','FZ','N','VY','VZ',),
@@ -1522,7 +1516,7 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
            VY              =SIMP(statut='f',typ='C' ),
            VZ              =SIMP(statut='f',typ='C' ),
          ),
-         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
@@ -1532,7 +1526,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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1554,15 +1548,16 @@ 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 une grandeur",
                       docu="U4.44.01-g3",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
                             'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
                             'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
                             'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
                             'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
                             'CONTACT'),),
-         MODELE          =SIMP(statut='o',typ=modele ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         MODELE          =SIMP(statut='o',typ=modele ),
 
          DDL_IMPO        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
@@ -1579,56 +1574,14 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DRX             =SIMP(statut='f',typ=(fonction) ),
            DRY             =SIMP(statut='f',typ=(fonction) ),
            DRZ             =SIMP(statut='f',typ=(fonction) ),
-           GRX             =SIMP(statut='f',typ=(fonction) ),
-           PRES            =SIMP(statut='f',typ=(fonction) ),
-           PHI             =SIMP(statut='f',typ=(fonction) ),
-           TEMP            =SIMP(statut='f',typ=(fonction) ),
-           PRE1            =SIMP(statut='f',typ=(fonction) ),
-           PRE2            =SIMP(statut='f',typ=(fonction) ),
-         ),
-         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
-                               fr="Imposer une meme valeur (inconnue) a des ddls d un emsemble de noeuds",
-           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           DDL             =SIMP(statut='o',typ='TXM',max='**'),
-         ),
-         LIAISON_SOLIDE  =FACT(statut='f',min=1,max='**',
-                               fr="Modéliser une partie indéformable d une structure",
-           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
-         ),
-         LIAISON_OBLIQUE =FACT(statut='f',min=1,max='**',
-                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
-           regles=(UN_PARMI('GROUP_NO','NOEUD'),
-                   UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
-           DX              =SIMP(statut='f',typ=(fonction) ),
-           DY              =SIMP(statut='f',typ=(fonction) ),
-           DZ              =SIMP(statut='f',typ=(fonction) ),
-           DRX             =SIMP(statut='f',typ=(fonction) ),
-           DRY             =SIMP(statut='f',typ=(fonction) ),
-           DRZ             =SIMP(statut='f',typ=(fonction) ),
-         ),
-         LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
-           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
          ),
+
          FACE_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_MA','MAILLE'),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
@@ -1662,6 +1615,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DNOR            =SIMP(statut='f',typ=(fonction) ),
            DTAN            =SIMP(statut='f',typ=(fonction) ),
          ),
+         
          LIAISON_DDL     =FACT(statut='f',min=1,max='**',
                                fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
            regles=(UN_PARMI('GROUP_NO','NOEUD'),),
@@ -1671,6 +1625,22 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
            COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
          ),
+
+         LIAISON_OBLIQUE =FACT(statut='f',min=1,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+         ),         
+         
          LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
                                fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
            regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
@@ -1705,6 +1675,117 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            CENTRE          =SIMP(statut='f',typ='R',max=3),
          ),
 
+         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME")),
+           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",into=("NOEUD_BOUCLE","NOEUD_VOISIN")),
+           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),                 
+           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
+                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION","CONTINUE") ),           
+           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","QUADRATIQUE") ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           b_active        =BLOC(condition = "METHODE == 'CONTRAINTE' ",
+                                 fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                regles=(EXCLUS('DIST_2','COEF_IMPO'),
+                        EXCLUS('DIST_1','COEF_IMPO'),),
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP")),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS",) ), 
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                COEF_IMPO       =SIMP(statut='f',typ='R'),
+                COEF_MULT_2     =SIMP(statut='f',typ='R'),
+                VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
+                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+                DIST_1          =SIMP(statut='f',typ=(fonction)),
+                DIST_2          =SIMP(statut='f',typ=(fonction)),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),),
+           b_lagrangien    =BLOC(condition = "METHODE == 'LAGRANGIEN' ",
+                                 fr="Paramètres de la méthode Lagrangienne (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ=(fonction)),
+                DIST_2          =SIMP(statut='f',typ=(fonction)),
+                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     ),),
+           b_penalisation       =BLOC(condition = "METHODE == 'PENALISATION' ",
+                                      fr="Paramètres de la méthode pénalisée (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                E_N             =SIMP(statut='f',typ='R'), 
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
+                b_reac_geom     =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                 fr="Paramètre de la réactualisation géométrique",
+                      NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+                DIST_1          =SIMP(statut='f',typ=(fonction)),
+                DIST_2          =SIMP(statut='f',typ=(fonction)),
+                VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+                STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     E_T             =SIMP(statut='f',typ='R',
+                                           fr="Active la pénalisation sur le frottement et définit le coefficient de pénalisation"),
+                     COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),  
+                     ),),
+           b_continue      =BLOC(condition = "METHODE == 'CONTINUE' ",
+                                 fr="Paramètres de la méthode continue (contact avec ou sans frottement)",
+                NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL",)),
+                FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ), 
+                INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2")),
+                COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                MODL_AXIS       =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+                DIRECTION_APPA  =SIMP(statut='f',typ='R',max=3),
+                ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
+                b_frottement    =BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement de Coulomb",
+                     COULOMB         =SIMP(statut='o',typ='R',max=1),
+                     ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
+                     COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                     SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),),),
+         ),        
+         
+          LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+                               fr="Imposer une meme valeur (inconnue) a des ddls d un emsemble de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+
+         LIAISON_SOLIDE  =FACT(statut='f',min=1,max='**',
+                               fr="Modéliser une partie indéformable d une structure",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+
+
+
          FORCE_NODALE    =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_NO','NOEUD'),
                    AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
@@ -1718,17 +1799,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MZ              =SIMP(statut='f',typ=(fonction) ),
            ANGL_NAUT       =SIMP(statut='f',typ=(fonction),max=3 ),
          ),
-         FORCE_INTERNE   =FACT(statut='f',min=1,max='**',
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                   AU_MOINS_UN('FX','FY','FZ'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           FX              =SIMP(statut='f',typ=(fonction) ),
-           FY              =SIMP(statut='f',typ=(fonction) ),
-           FZ              =SIMP(statut='f',typ=(fonction) ),
-         ),
+
          FORCE_FACE      =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FX','FY','FZ'),),
@@ -1762,6 +1833,19 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MY              =SIMP(statut='f',typ=(fonction) ),
            MZ              =SIMP(statut='f',typ=(fonction) ),
          ),
+
+         FORCE_INTERNE   =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+         ),
+         
          PRES_REP        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
@@ -1773,41 +1857,21 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            CISA_2D         =SIMP(statut='f',typ=(fonction) ),
          ),
 
-         FORCE_COQUE     =FACT(statut='f',min=1,max='**',
+         EPSI_INIT       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                   AU_MOINS_UN('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
+                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           FX              =SIMP(statut='f',typ=(fonction) ),
-           FY              =SIMP(statut='f',typ=(fonction) ),
-           FZ              =SIMP(statut='f',typ=(fonction) ),
-           MX              =SIMP(statut='f',typ=(fonction) ),
-           MY              =SIMP(statut='f',typ=(fonction) ),
-           MZ              =SIMP(statut='f',typ=(fonction) ),
-           F1              =SIMP(statut='f',typ=(fonction) ),
-           F2              =SIMP(statut='f',typ=(fonction) ),
-           F3              =SIMP(statut='f',typ=(fonction) ),
-           MF1             =SIMP(statut='f',typ=(fonction) ),
-           MF2             =SIMP(statut='f',typ=(fonction) ),
-           PRES            =SIMP(statut='f',typ=(fonction) ),
-           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
-                                 into=("SUP","INF","MOY","MAIL") ),
+           EPXX            =SIMP(statut='f',typ=(fonction) ),
+           EPYY            =SIMP(statut='f',typ=(fonction) ),
+           EPZZ            =SIMP(statut='f',typ=(fonction) ),
+           EPXY            =SIMP(statut='f',typ=(fonction) ),
+           EPXZ            =SIMP(statut='f',typ=(fonction) ),
+           EPYZ            =SIMP(statut='f',typ=(fonction) ),
          ),
+         
          FORCE_POUTRE    =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
@@ -1830,6 +1894,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            VY              =SIMP(statut='f',typ=(fonction) ),
            VZ              =SIMP(statut='f',typ=(fonction) ),
          ),
+
          FORCE_TUYAU     =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
@@ -1838,6 +1903,56 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            PRES            =SIMP(statut='f',typ=(fonction) ),
          ),
+         
+         FORCE_COQUE     =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('F1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F3','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FX              =SIMP(statut='f',typ=(fonction) ),
+           FY              =SIMP(statut='f',typ=(fonction) ),
+           FZ              =SIMP(statut='f',typ=(fonction) ),
+           MX              =SIMP(statut='f',typ=(fonction) ),
+           MY              =SIMP(statut='f',typ=(fonction) ),
+           MZ              =SIMP(statut='f',typ=(fonction) ),
+           F1              =SIMP(statut='f',typ=(fonction) ),
+           F2              =SIMP(statut='f',typ=(fonction) ),
+           F3              =SIMP(statut='f',typ=(fonction) ),
+           MF1             =SIMP(statut='f',typ=(fonction) ),
+           MF2             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                                 into=("SUP","INF","MOY","MAIL") ),
+         ),
+
+         LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),         
+         
+
          VITE_FACE       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('GROUP_MA','MAILLE'),),
@@ -1848,79 +1963,19 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
          IMPE_FACE       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('GROUP_MA','MAILLE'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           IMPE            =SIMP(statut='o',typ=(fonction) ),
-         ),
-         ONDE_PLANE      =FACT(statut='f',min=1,max='**',
-           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
-           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
-           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction) ),
-           DIST_ORIG       =SIMP(statut='o',typ='R' ),
-         ),
-         EPSI_INIT       =FACT(statut='f',min=1,max='**',
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           EPXX            =SIMP(statut='f',typ=(fonction) ),
-           EPYY            =SIMP(statut='f',typ=(fonction) ),
-           EPZZ            =SIMP(statut='f',typ=(fonction) ),
-           EPXY            =SIMP(statut='f',typ=(fonction) ),
-           EPXZ            =SIMP(statut='f',typ=(fonction) ),
-           EPYZ            =SIMP(statut='f',typ=(fonction) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           IMPE            =SIMP(statut='o',typ=(fonction) ),
          ),
-
-         CONTACT         =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),
-                   EXCLUS('DIST_2','COEF_IMPO'),
-                   EXCLUS('DIST_1','COEF_IMPO'),
-                   EXCLUS('COEF_MULT_2','GROUP_MA_1'),
-                   EXCLUS('COEF_MULT_2','MAILLE_1'),
-                   EXCLUS('COEF_IMPO','GROUP_MA_1'),
-                   EXCLUS('COEF_IMPO','MAILLE_1'),),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP") ),
-           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME") ),
-           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",
-                                 into=("NOEUD_BOUCLE","NOEUD_VOISIN") ),
-           INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
-           COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-           COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-           MODL_AXIS       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-           ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-           ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
-           ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-           SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),
-           REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",into=("AUTOMATIQUE","CONTROLE","SANS")),
-             b_act_reac      =BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
-                              fr="Paramètre de la réactualisation géométrique",
-                   NB_REAC_GEOM   =SIMP(statut='o',typ='I'),),
-           NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",into=("MAIT","MAIT_ESCL")),
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",
-                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
-           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","COULOMB",) ),
-           COULOMB         =SIMP(statut='f',typ='R',max=1,defaut=0.E+0),
-           E_N             =SIMP(statut='f',typ='R' ),
-           E_T             =SIMP(statut='f',typ='R' ),
-           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
-           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-           VECT_NORM_2     =SIMP(statut='f',typ='R',max=3),
-           PROJECTION      =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE",) ),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'  ),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'  ),
-           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'  ),
-           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
-           DIST_1          =SIMP(statut='f',typ=(fonction) ),
-           DIST_2          =SIMP(statut='f',typ=(fonction) ),
-           COEF_IMPO       =SIMP(statut='f',typ='R',defaut=0.E+0),
-           COEF_MULT_2     =SIMP(statut='f',typ='R',defaut=1.E+0),
+         ONDE_PLANE      =FACT(statut='f',min=1,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
+           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction) ),
+           DIST_ORIG       =SIMP(statut='o',typ='R' ),
          ),
+
+
+
          FLUX_THM_REP    =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
@@ -1935,7 +1990,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1956,18 +2011,19 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
 AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
                       fr=" ",
                       docu="",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
          regles=(AU_MOINS_UN('CARA_TORSION', ),),
          MODELE          =SIMP(statut='o',typ=modele ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",
                                into=("OUI","NON") ),
-         CARA_TORSION    =FACT(statut='f',min=01,max='**',
+         CARA_TORSION    =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1988,21 +2044,14 @@ 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",
                     docu="U4.44.02-g2",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
       regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','ECHANGE',
                           'ECHANGE_PAROI','GRAD_TEMP_INIT','LIAISON_DDL','LIAISON_GROUP',
                           'LIAISON_UNIF','LIAISON_CHAMNO','RAYONNEMENT','LIAISON_MAIL' ),),
-         MODELE          =SIMP(statut='o',typ=(modele) ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="OUI"),
-         LIAISON_DDL     =FACT(statut='f',min=01,max='**',
-           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           DDL             =SIMP(statut='f',typ='TXM',max='**',
-                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
-           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
-           COEF_IMPO       =SIMP(statut='o',typ='R' ),
-         ),
-         TEMP_IMPO       =FACT(statut='f',min=01,max='**',
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+
+         TEMP_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -2013,31 +2062,8 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            TEMP            =SIMP(statut='f',typ='R'),
            TEMP_INF        =SIMP(statut='f',typ='R'),
            TEMP_SUP        =SIMP(statut='f',typ='R'), ),
-         LIAISON_UNIF    =FACT(statut='f',min=01,max='**',
-           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
-                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
-         ),
-         LIAISON_CHAMNO  =FACT(statut='f',min=01,max='**',
-           CHAM_NO         =SIMP(statut='o',typ=cham_no),# CO()# "il faut definir une structure de donnee generique chamno"
-           COEF_IMPO       =SIMP(statut='o',typ='R' ),
-           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
-         ),
-         SOURCE          =FACT(statut='f',min=01,max='**',
-           regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           SOUR            =SIMP(statut='f',typ='R'),
-           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem_sour_r) ),
-         ),
-         FLUX_REP        =FACT(statut='f',min=01,max='**',
+
+         FLUX_REP        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_PRESENT('CARA_TORSION','GROUP_MA'),
@@ -2050,7 +2076,21 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            FLUN_SUP        =SIMP(statut='f',typ='R'),
            CARA_TORSION    =SIMP(statut='f',typ=tabl_aire_int ),
          ),
-         ECHANGE         =FACT(statut='f',min=01,max='**',
+        
+
+         RAYONNEMENT     =FACT(statut='f',min=1,max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ='R'),
+           EPSILON         =SIMP(statut='o',typ='R'),
+           TEMP_EXT        =SIMP(statut='o',typ='R'),
+         ),
+         
+         ECHANGE         =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                    AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
@@ -2066,20 +2106,20 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            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',min=1,max='**',
+           regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='f',typ='R'),
+           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem_sour_r) ),
          ),
-         ECHANGE_PAROI   =FACT(statut='f',min=01,max='**',
-           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
-                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-           COEF_H          =SIMP(statut='f',typ='R'),
-           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
-           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
-                         ),
-         GRAD_TEMP_INIT  =FACT(statut='f',min=01,max='**',
+         
+         GRAD_TEMP_INIT  =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
@@ -2090,7 +2130,18 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            FLUX_Y          =SIMP(statut='f',typ='R' ),
            FLUX_Z          =SIMP(statut='f',typ='R' ),
                          ),
-         LIAISON_GROUP   =FACT(statut='f',min=01,max='**',
+                         
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+         ),
+         
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
                    UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
                              EXCLUS('GROUP_MA_1','GROUP_NO_2'),
@@ -2124,21 +2175,8 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
            CENTRE          =SIMP(statut='f',typ='R',max='**'),
          ),
-         CONVECTION      =FACT(statut='f',min=01,max='**',
-           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
-         ),
-         RAYONNEMENT     =FACT(statut='f',min=01,max='**',
-           fr="Attention, exprimer les températures en Celsius si rayonnement",
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           SIGMA           =SIMP(statut='o',typ='R'),
-           EPSILON         =SIMP(statut='o',typ='R'),
-           TEMP_EXT        =SIMP(statut='o',typ='R'),
-         ),
-         LIAISON_MAIL    =FACT(statut='f',min=01,max='**',
+
+         LIAISON_MAIL    =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
                    AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL',
                                'NOEUD_ESCL'),),
@@ -2151,10 +2189,45 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            TRAN            =SIMP(statut='f',typ='R',max='**' ),
            ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),
            CENTRE          =SIMP(statut='f',typ='R',max='**' ),
+         ),      
+         
+         ECHANGE_PAROI   =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+                         ),
+
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+
+         LIAISON_CHAMNO  =FACT(statut='f',min=1,max='**',
+           CHAM_NO         =SIMP(statut='o',typ=cham_no),# CO()# "il faut definir une structure de donnee generique chamno"
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+
+         CONVECTION      =FACT(statut='f',min=1,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
          ),
+
+
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2175,19 +2248,13 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
 AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
                      fr="Affectation de charges et conditions aux limites thermiques fonction dune grandeur (temps, ...)",
                      docu="U4.44.02-g2",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
       regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
                           'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
                           'GRAD_TEMP_INIT','RAYONNEMENT'),),
-         MODELE          =SIMP(statut='o',typ=(modele) ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
-           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
-           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
-         ),
+         MODELE          =SIMP(statut='o',typ=(modele) ),
+
          TEMP_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF','EVOL_THER'),
@@ -2203,22 +2270,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            TEMP_INF        =SIMP(statut='f',typ=(fonction) ),
            TEMP_SUP        =SIMP(statut='f',typ=(fonction) ),
          ),
-         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
-                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
-         ),
-         SOURCE          =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           SOUR            =SIMP(statut='o',typ=(fonction) ),
-         ),
+         
          FLUX_REP        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
@@ -2233,6 +2285,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
            FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
          ),
+
          FLUX_NL         =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
@@ -2240,7 +2293,23 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUN            =SIMP(statut='o',typ=(fonction) ),
+         ), 
+         
+
+         RAYONNEMENT     =FACT(statut='f',min=1,max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SIGMA           =SIMP(statut='o',typ=(fonction) ),
+           EPSILON         =SIMP(statut='o',typ=(fonction) ),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction) ),
          ),
+         
+
+
          ECHANGE         =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
@@ -2258,6 +2327,28 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            COEF_H_SUP      =SIMP(statut='f',typ=(fonction) ),
            TEMP_EXT_SUP    =SIMP(statut='f',typ=(fonction) ),
          ),
+         
+
+         SOURCE          =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           SOUR            =SIMP(statut='o',typ=(fonction) ),
+         ),
+         
+         GRAD_TEMP_INIT  =FACT(statut='f',min=1,max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+         ),
+         
          ECHANGE_PAROI   =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
                         UN_PARMI('GROUP_MA_2','MAILLE_2'),),
@@ -2270,17 +2361,16 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
            CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
          ),
-         GRAD_TEMP_INIT  =FACT(statut='f',min=1,max='**',
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           FLUX_X          =SIMP(statut='f',typ=(fonction) ),
-           FLUX_Y          =SIMP(statut='f',typ=(fonction) ),
-           FLUX_Z          =SIMP(statut='f',typ=(fonction) ),
+
+        LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
          ),
+
          LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
                    UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
@@ -2315,23 +2405,24 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
            CENTRE          =SIMP(statut='f',typ='R',max='**'),
          ),
-         CONVECTION      =FACT(statut='f',min=1,max='**',
-           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
-         ),
-         RAYONNEMENT     =FACT(statut='f',min=1,max='**',
-           fr="Attention, exprimer les températures en Celsius si rayonnement",
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+
+         LIAISON_UNIF    =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           SIGMA           =SIMP(statut='o',typ=(fonction) ),
-           EPSILON         =SIMP(statut='o',typ=(fonction) ),
-           TEMP_EXT        =SIMP(statut='o',typ=(fonction) ),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+
+         CONVECTION      =FACT(statut='f',min=1,max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_depl_r) ),
          ),
+
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2353,9 +2444,10 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
 AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
                    fr="Affectation de caractéristiques de matériaux à un maillage",
                          docu="U4.43.03-f",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          MAILLAGE        =SIMP(statut='o',typ=maillage),
          MODELE          =SIMP(statut='f',typ=modele),
-         AFFE            =FACT(statut='o',min=01,max='**',
+         AFFE            =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -2366,7 +2458,7 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
            TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2386,18 +2478,19 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
 # ======================================================================
 # RESPONSABLE JMBHH01 J.M.PROIX
 AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g3",
+            UIinfo={"groupes":("Modélisation",)},
                  fr="Affectation des éléments finis sur le maillage",reentrant='n',
          regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
          MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
-         AFFE_SOUS_STRUC =FACT(statut='f',min=01,max=01,
+         AFFE_SOUS_STRUC =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('TOUT','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
          ),
-         AFFE            =FACT(statut='f',min=01,max='**',
+         AFFE            =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -2409,7 +2502,6 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g3",
                 b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
                                         fr="modelisations mécaniques",
                     MODELISATION    =SIMP(statut='o',typ='TXM', into=(
-                                                                      "2D_CONTACT",
                                                                       "2D_DIS_T",
                                                                       "2D_DIS_TR",
                                                                       "2D_FLUI_ABSO",
@@ -2418,7 +2510,6 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g3",
                                                                       "2D_FLUIDE",
                                                                       "3D",
                                                                       "3D_ABSO",
-                                                                      "3D_CONTACT",
                                                                       "3D_FAISCEAU",
                                                                       "3D_FLUI_ABSO",
                                                                       "3D_FLUIDE",
@@ -2474,16 +2565,19 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g3",
                                                                        "3D_HHMD",
                                                                        "3D_HMD",
                                                                        "3D_THHD",
+                                                                       "3D_THVD",
                                                                        "3D_THHMD",
                                                                        "3D_THMD",
                                                                        "AXIS_HHMD",
                                                                        "AXIS_HMD",
                                                                        "AXIS_THHD",
+                                                                       "AXIS_THVD",
                                                                        "AXIS_THHMD",
                                                                        "AXIS_THMD",
                                                                        "D_PLAN_HHMD",
                                                                        "D_PLAN_HMD",
                                                                        "D_PLAN_THHD",
+                                                                       "D_PLAN_THVD",
                                                                        "D_PLAN_THHMD",
                                                                        "D_PLAN_THMD", 
                                                                       "DIS_T",
@@ -2528,7 +2622,7 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g3",
 
          ),
 ) ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2547,15 +2641,16 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g3",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-g1",
+            UIinfo={"groupes":("Modélisation",)},
           fr="Interrogation sur le catalogue des commandes et les concepts produits",
          regles=(AU_MOINS_UN('CONCEPT','TYPE_ELEM', ),),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
          TYPE_ELEM       =FACT(fr="couple type_elem option",
-                               statut='f',min=01,max=01,
+                               statut='f',min=1,max=1,
            INITEL          =SIMP(statut='f',typ='TXM',defaut="NON",
                                  into=("OUI","NON",) ),
          ),
-         CONCEPT         =FACT(statut='f',min=01,max='**',
+         CONCEPT         =FACT(statut='f',min=1,max='**',
            NOM             =SIMP(fr="liste des noms de concept", 
                                  statut='f',typ='TXM',max='**',defaut="*"),
            OPTION          =SIMP(fr="option d'édition de concept",
@@ -2563,7 +2658,7 @@ AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-g1",
                                  into=("TOUT_TYPE","CREER","A_CREER",) ),
          ),
 ) ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2585,9 +2680,10 @@ AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-g1",
 ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage,
                    fr="Assembler deux maillages sous un seul nom",
                    docu="U4.23.03-e",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
          MAILLAGE        =SIMP(statut='o',typ=maillage,min=2,max=2 ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2608,10 +2704,11 @@ ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage,
 ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
                     fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
                     docu="U4.65.04-d",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","MASS_GENE","AMOR_GENE") ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2639,13 +2736,14 @@ 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",docu="U4.61.22-f",reentrant='n',
+            UIinfo={"groupes":("Matrices/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),
          CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2666,13 +2764,14 @@ ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
 ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
                     fr="Assemblage de vecteurs de chargement en coordonnées généralisées",
                     docu="U4.65.05-d",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
-         CHAR_SOUS_STRUC =FACT(statut='o',min=01,max='**',
+         CHAR_SOUS_STRUC =FACT(statut='o',min=1,max='**',
            SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
            VECT_ASSE       =SIMP(statut='o',typ=cham_no_depl_r ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2700,11 +2799,12 @@ def asse_vecteur_prod(VECT_ELEM,**args):
 
 ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=asse_vecteur_prod,
                   fr="Assemblage d un second membre",docu="U4.61.23-f",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2725,7 +2825,8 @@ ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=asse_vecteur_prod,
 CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
                      fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
                      docu="U4.52.13-c",reentrant='n',
-         ENER_SOL        =FACT(statut='o',min=01,max=01,
+            UIinfo={"groupes":("Résolution",)},
+         ENER_SOL        =FACT(statut='o',min=1,max=1,
            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')
@@ -2748,21 +2849,21 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
            KRZ             =SIMP(statut='f',typ='R' ),
            GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
            NOEUD_CENTRE    =SIMP(statut='f',typ=no),
-           COOR_CENTRE     =SIMP(statut='f',typ='R',max=03),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max=3),
          ),
-         AMOR_INTERNE    =FACT(statut='o',min=01,max=01,
+         AMOR_INTERNE    =FACT(statut='o',min=1,max=1,
            ENER_POT        =SIMP(statut='o',typ=tabl_ener_pot ),
            GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
            AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
          ),
-         AMOR_SOL        =FACT(statut='o',min=01,max=01,
+         AMOR_SOL        =FACT(statut='o',min=1,max=1,
            AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            FONC_AMOR_GEO   =SIMP(statut='o',typ=fonction,max='**' ),
            HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2826,6 +2927,7 @@ def calc_cham_elem_prod(OPTION,**args):
 CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
                     fr="Calcul de champs par éléments à partir de champs solution ou de champs par éléments",
                     docu="U4.81.03-g1",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
@@ -2952,7 +3054,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
 
 
 
-         EXCIT           =FACT(statut='f',min=01,max='**',
+         EXCIT           =FACT(statut='f',min=1,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),
@@ -2965,7 +3067,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
          MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
          ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2993,12 +3095,13 @@ def calc_char_cine_prod(CHAR_CINE,**args):
 CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=calc_char_cine_prod,
                     fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
                     docu="U4.61.03-e",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
          CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ) ),
          INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3022,9 +3125,10 @@ def calc_char_seisme_prod(MATR_MASS,**args ):
 
 CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
                       docu="U4.63.01-e",reentrant='n',
+            UIinfo={"groupes":("Matrices/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=06,fr="Directions du séisme imposé"),
+         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_stat_depl,mode_stat_acce,mode_stat_forc,) ),
          b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
@@ -3034,7 +3138,7 @@ 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 08/08/2002   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3047,6 +3151,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,docu="U4.81.01-g3",reentrant='f',
+            UIinfo={"groupes":("Post traitements",)},
                     fr="Compléter un résultat en calculant des champs par éléments (contraintes, déformations,... )",
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
@@ -3092,7 +3197,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g3",r
                                      "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","HYDR_ELNO_ELGA",
                                      "SOUR_ELGA_ELEC","VARI_ELNO_COQU","CRIT_ELNO_RUPT",
                                      "PRES_ELNO_DBEL","PRES_DBEL_DEPL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
-                                     "INTE_ELNO_ACTI","INTE_ELNO_REAC","ERTH_ELEM_TEMP","ERTH_ELNO_ELEM"
+                                     "INTE_ELNO_ACTI","INTE_ELNO_REAC","ERTH_ELEM_TEMP","ERTH_ELNO_ELEM",
+                                     "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","VALE_NCOU_MAXI"
                                      ) ),
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
                                     mode_stat,mode_stat_depl,mode_stat_acce,mode_stat_forc,
@@ -3120,10 +3226,13 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g3",r
          SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                fr="Liste des paramètres de sensibilité.",
                                ang="List of sensitivity parameters"),
+         b_maxi          =BLOC( condition = "OPTION=='VALE_NCOU_MAXI'",
+             NOM_CHAM            =SIMP(statut='o',typ='TXM',max=1 ),
+             NOM_CMP             =SIMP(statut='o',typ='TXM',max=1 ),),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 24/06/2002   AUTEUR F1BHHAJ J.ANGLES 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3138,6 +3247,7 @@ def calc_fatigue_prod(TYPE_CALCUL,**args):
 CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant='n',
                   fr="Calcul d un cham de dommage ou d un cisaillement maximal dans le plan critique.",
                   docu="U4.83.02-c",
+            UIinfo={"groupes":("Post traitements",)},
 
          TYPE_CALCUL = SIMP(statut='o',typ='TXM',
                                into=("CUMUL_DOMMAGE","FATIGUE_MULTI",) ),
@@ -3149,7 +3259,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") ),
-           HISTOIRE        =FACT(statut='o',min=01,max=01,
+           HISTOIRE        =FACT(statut='o',min=1,max=1,
              RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
                                                    evol_noli) ),
              EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
@@ -3173,7 +3283,7 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 23/04/2001   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3193,13 +3303,14 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
 # ======================================================================
 CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu,
                     docu="U4.66.02-d",reentrant='n',
-         VITE_FLUI       =FACT(statut='o',min=01,max=01,
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         VITE_FLUI       =FACT(statut='o',min=1,max=1,
                                fr="Définir la plage de vitesse fluide étudiée",
            VITE_MIN        =SIMP(statut='o',typ='R' ),
            VITE_MAX        =SIMP(statut='o',typ='R' ),
            NB_POIN         =SIMP(statut='o',typ='I' ),
          ),
-         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+         BASE_MODALE     =FACT(statut='o',min=1,max=1,
                                
            regles=(UN_PARMI('AMOR_REDUIT','AMOR_UNIF'),),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
@@ -3208,13 +3319,13 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu,
            AMOR_UNIF       =SIMP(statut='f',typ='R' ),
          ),
          TYPE_FLUI_STRU  =SIMP(statut='o',typ=type_flui_stru ),
-         IMPRESSION      =FACT(statut='f',min=01,max=01,
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
                                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 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3234,6 +3345,7 @@ CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu,
 # ======================================================================
 CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
                       docu="U4.32.01-e1",reentrant='f',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('VALE_R','LIST_PARA'),),
          FONCTION        =SIMP(statut='o',typ=fonction ),
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
@@ -3245,7 +3357,7 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3254,7 +3366,7 @@ CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=fonction,
 # ======================================================================
 # RESPONSABLE MCOURTOI M.COURTOIS
 def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,RMS,NOCI_SEISME,MAX,COMB,COMB_C,ENVELOPPE,
-                       SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE, NORME, **args):
+                       SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,LISS_ENVELOP,NORME, **args):
   if (RMS != None)        : return tabl_fonc_rms
   if (MAX != None)        : return tabl_fonc_max
   if (NOCI_SEISME != None): return tabl_fonc_noci
@@ -3272,6 +3384,7 @@ def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,RMS,NOCI_SEISME,MAX,COMB,COMB_C
      if (AsType(vale) == fonction )  : return fonction_c
      if (AsType(vale) == fonction_c) : return fonction
   if (CORR_ACCE != None) : return fonction
+  if (LISS_ENVELOP != None)  : return fonction
   if (PUISSANCE != None) : return fonction
   if (NORME != None) : return table
   raise AsException("type de concept resultat non prevu")
@@ -3279,8 +3392,10 @@ def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,RMS,NOCI_SEISME,MAX,COMB,COMB_C
 CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
                     ,fr="Opérations mathématiques sur des concepts de type fonction",
                      docu="U4.32.04-f2",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','MAX','COMB','COMB_C','ENVELOPPE','RMS',
-                          'NOCI_SEISME','COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE' ,'NORME'),),
+                          'NOCI_SEISME','COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE',
+                          'NORME','LISS_ENVELOP'),),
          FFT             =FACT(statut='f',min=1,max=1,fr="Calcul de la transformee de Fourier ou de son inverse",
            FONCTION        =SIMP(statut='o',typ=(fonction,fonction_c) )
          ),
@@ -3325,6 +3440,32 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            ),
          ),
+         LISS_ENVELOP    = FACT(statut='f',min=1,max=1,fr="Lissage d une enveloppe",
+           FONCTION        =SIMP(statut='o',typ=fonction ),
+           AMOR            =SIMP(statut='f',typ='R',max='**'),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut=0.2),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut=33.0),
+           FREQ_CREUX      =SIMP(statut='f',typ='R',max='**'),
+           ELARG           =SIMP(statut='f',typ='TXM',defaut="GLOBAL",into=("GLOBAL","LOCAL") ),
+              b_elarg_glob = BLOC ( condition = " (ELARG=='GLOBAL') ",
+                   GAUCHE       =SIMP(statut='f',typ='R',defaut =10.0E0 ),  
+                   DROITE       =SIMP(statut='f',typ='R',defaut =10.0E0 ),  
+                ),
+              b_elarg_loc = BLOC ( condition = " (ELARG=='LOCAL') ",
+                   FREQ_1       =SIMP(statut='o',typ='R'),  
+                   FREQ_2       =SIMP(statut='o',typ='R' ),  
+                   GAUCHE       =SIMP(statut='f',typ='R',defaut =10.0E0 ),  
+                   DROITE       =SIMP(statut='f',typ='R',defaut =10.0E0 ),  
+                ),
+           LARG_PLAT      =SIMP(statut='f',typ='R',defaut=90.0E0),
+           TOLE_LISS      =SIMP(statut='f',typ='R',defaut=25.0E0),
+           ECH_FREQ_REF = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+               b_oui    =BLOC ( condition = "(ECH_FREQ_REF=='OUI') ",
+                    regles=(UN_PARMI("LIST_FREQ", "AMOR_ECH"),),
+                       LIST_FREQ   =SIMP(statut='f',typ=listr8 ),
+                       AMOR_ECH    =SIMP(statut='f',typ='R',max='**'),
+                              ),
+         ),
          SPEC_OSCI       =FACT(statut='f',min=1,max=1,fr="Calcul du spectre d oscillateur",
            METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
            FONCTION        =SIMP(statut='o',typ=fonction ),
@@ -3394,7 +3535,7 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3415,6 +3556,7 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
 CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
                    fr="calcul de la force ajoutee ",
                    docu="U4.66.03-a1",reentrant ='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
 
         regles=(EXCLUS('MODE_MECA','MODELE_GENE'),
                 PRESENT_PRESENT( 'MODELE_GENE','NUME_DDL_GENE'),
@@ -3466,7 +3608,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
            EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0),  ),
 
            ) ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3486,6 +3628,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
 # ======================================================================
 CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
                     fr="Calcul du taux de restitution local d énergie",docu="U4.82.04-f3",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          regles=(UN_PARMI('FOND','FOND_FISS' ),
@@ -3514,7 +3657,7 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
          CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
          SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
  
-         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
                                      into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
                ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
@@ -3527,7 +3670,7 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
  
-         COMP_INCR       =FACT(statut='f',min=01,max=01,
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
                                      into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
                ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
@@ -3541,7 +3684,7 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
          
-         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
            DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
          ),
@@ -3564,7 +3707,7 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
            LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE") ),
          ), 
          b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
-           BORNES          =FACT(statut='o',min=01,max='**',
+           BORNES          =FACT(statut='o',min=1,max='**',
               NUME_ORDRE     =SIMP(statut='o',typ='I'),
               VALE_MIN       =SIMP(statut='o',typ='R'),
               VALE_MAX       =SIMP(statut='o',typ='R'),
@@ -3583,7 +3726,7 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/07/2002   AUTEUR CIBHHPD D.NUNEZ 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3604,6 +3747,7 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
 CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
                     fr="Calcul du taux de restitution d énergie par la méthode theta en thermo-élasticité en 2D ou en 3D",
                     docu="U4.82.03-f2",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          regles=(UN_PARMI('RESULTAT','DEPL'),
                  EXCLUS('COMP_ELAS','COMP_INCR'),),
          MODELE          =SIMP(statut='o',typ=modele),
@@ -3629,7 +3773,7 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
          CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
          SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
  
-         COMP_ELAS       =FACT(statut='f',min=01,max=01,
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
                                      into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC") ),
                ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
@@ -3641,7 +3785,7 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),  
-         COMP_INCR       =FACT(statut='f',min=01,max=01,
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
                RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
                                      into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE") ),
                ELAS            =SIMP(statut='f',typ='I',defaut=1,into=(1,) ),
@@ -3654,14 +3798,14 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
-         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            SIGM            =SIMP(statut='f',typ=cham_elem_sief_r),
            DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
          ),
          OPTION          =SIMP(statut='f',typ='TXM',defaut="CALC_G",
                                into=("CALC_G","CALC_G_LAGR","CALC_K_G","G_BILINEAIRE","CALC_G_MAX","CALC_DG",) ),
          b_calc_g_max    =BLOC(condition="OPTION=='CALC_G_MAX'",
-           BORNES          =FACT(statut='o',min=01,max='**',
+           BORNES          =FACT(statut='o',min=1,max='**',
                 NUME_ORDRE     =SIMP(statut='o',typ='I'),
                 VALE_MIN       =SIMP(statut='o',typ='R'),
                 VALE_MAX       =SIMP(statut='o',typ='R'),
@@ -3676,7 +3820,7 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
            PROPAGATION     =SIMP(statut='o',typ='R'),
          ),
          b_calc_dg       =BLOC(condition="OPTION=='CALC_DG'",
-           SENSIBILITE     =FACT(statut='f',min=01,max=01,
+           SENSIBILITE     =FACT(statut='f',min=1,max=1,
                  THETA          =SIMP(statut='o',typ=theta_geom ),
                                ),  
          ),
@@ -3684,7 +3828,7 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3705,6 +3849,7 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
 CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
                     fr="Calcul d une matrice interspectrale d une fonction du temps",
                     docu="U4.36.03-e",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          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' ),
@@ -3714,7 +3859,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3735,6 +3880,7 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
 CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
                     fr="Calcul des matrices de masse, d amortissement ou de raideur ajoutées",
                     docu="U4.66.01-c",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
                  PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
                  PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
@@ -3778,7 +3924,7 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
            EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3823,6 +3969,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",docu="U4.61.01-g1",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          OPTION          =SIMP(statut='o',typ='TXM',
                                into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
                                      "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
@@ -3947,7 +4094,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3966,17 +4113,23 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-b1",reentrant='o',
+            UIinfo={"groupes":("Post traitements",)},
                fr="Calcule la métallurgie a partir du résultat du calcul thermique",
          MODELE          =SIMP(statut='o',typ=modele ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          RESULTAT        =SIMP(statut='o',typ=evol_ther ),
-         ETAT_INIT       =FACT(statut='o',min=01,max=01,
-      regles=(UN_PARMI('NUME_INIT','META_INIT',),),
+         ETAT_INIT       =FACT(statut='o',min=1,max=1,
+      regles=(UN_PARMI('NUME_INIT', 'INST_INIT', 'META_INIT',),),
            EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
            NUME_INIT       =SIMP(statut='f',typ='I' ),  
+           INST_INIT       =SIMP(statut='f',typ='R'),
+             b_inst     =BLOC(condition="(INST_INIT != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                             ),
            META_INIT       =SIMP(statut='f',typ=carte_var2_r ),
          ),
-         COMP_INCR       =FACT(statut='o',min=01,max='**',
+         COMP_INCR       =FACT(statut='o',min=1,max='**',
            RELATION        =SIMP(statut='o',typ='TXM',into=("ACIER","ZIRC",) ),
            ACIER           =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
            ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,) ),
@@ -3988,7 +4141,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-b1",reent
          OPTION          =SIMP(statut='f',typ='TXM'     
                              ,into=("META_ELNO_TEMP",) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4012,6 +4165,7 @@ def calc_no_prod(RESULTAT,**args):
    raise AsException("type de concept resultat non prevu")
 
 CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-f3",reentrant='o',
+            UIinfo={"groupes":("Post traitements",)},
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
                                                mode_acou,mode_stat,mode_stat_depl,mode_stat_acce,
                                               mode_stat_forc,evol_ther,evol_noli,base_modale,
@@ -4085,7 +4239,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-f3",reent
          GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 03/07/2002   AUTEUR CIBHHPD D.NUNEZ 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4104,6 +4258,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-f3",reent
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-d",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
                 fr="Affectation d un champ sur le maillage (mécanique de la rupture)",
          regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
                  PRESENT_ABSENT('THETA_2D','DIRE_THETA'),
@@ -4112,7 +4267,7 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-d",reen
          MODELE          =SIMP(statut='o',typ=(modele) ),
          FOND_FISS       =SIMP(statut='f',typ=fond_fiss),
          FOND_3D         =SIMP(statut='f',typ=(fond_fiss) ),
-         THETA_3D        =FACT(statut='f',min=01,max='**',
+         THETA_3D        =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
                    UN_PARMI('MODULE','MODULE_FO'),
                    ENSEMBLE('MODULE','R_INF','R_SUP'),
@@ -4129,7 +4284,7 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-d",reen
                          ),
          DIRE_THETA      =SIMP(statut='f',typ=(cham_no_depl_r) ),
          DIRECTION       =SIMP(statut='f',typ='R',max='**'),
-         THETA_2D        =FACT(statut='f',min=01,max='**',
+         THETA_2D        =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_NO','NOEUD'),),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
@@ -4137,19 +4292,19 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-d",reen
            R_INF           =SIMP(statut='o',typ='R'),
            R_SUP           =SIMP(statut='o',typ='R'),
          ),
-         THETA_BANDE     =FACT(statut='f',min=01,max='**',
+         THETA_BANDE     =FACT(statut='f',min=1,max='**',
            MODULE          =SIMP(statut='o',typ='R'),
            R_INF           =SIMP(statut='o',typ='R'),
            R_SUP           =SIMP(statut='o',typ='R'),
          ),
          GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
-         IMPRESSION      =FACT(statut='f',min=01,max=01,
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4177,6 +4332,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,docu="U4.61.02-f",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
                     fr="Calcul des seconds membres élémentaires",
          OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
                                                            "FORC_NODA","CHAR_MECA_LAGR") ),
@@ -4224,7 +4380,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="
            INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 ) ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4266,9 +4422,10 @@ def comb_cham_elem_prod(COMB_R=None,COMB_C=None,COMB_FOURIER=None,**args):
 
 COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,reentrant='f',
                     fr="Combinaison linéaire de champs par éléments",docu="U4.72.03-e",
+            UIinfo={"groupes":("Résultats et champs",)},
       regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),
               PRESENT_PRESENT('COMB_FOURIER','ANGL'),),
-      COMB_R          =FACT(statut='f',min=01,max='**',
+      COMB_R          =FACT(statut='f',min=1,max='**',
         PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
         COEF_R          =SIMP(statut='o',typ='R'),
         CHAM_ELEM       =SIMP(statut='o',
@@ -4276,13 +4433,13 @@ COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,ree
                                    cham_elem_ener_r,cham_elem_crit_r,cham_elem_dbel_r,
                                    cham_elem_pres_r,cham_elem_sief_c ) ),
       ),
-      COMB_C          =FACT(statut='f',min=01,max='**',
+      COMB_C          =FACT(statut='f',min=1,max='**',
         regles=(UN_PARMI('COEF_R','COEF_C', ),),
         COEF_R          =SIMP(statut='f',typ='R'),
         COEF_C          =SIMP(statut='f',typ='C'),
         CHAM_ELEM       =SIMP(statut='o',typ=(cham_elem_sief_r) ),
       ),
-      COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+      COMB_FOURIER    =FACT(statut='f',min=1,max='**',
         COEF_R          =SIMP(statut='f',typ='R',defaut= 1.),
         NUME_MODE       =SIMP(statut='o',typ='I'),
         TYPE_MODE       =SIMP(statut='o',typ='TXM',into=("SYME","ANTI") ),
@@ -4291,7 +4448,7 @@ COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,ree
       ANGL            =SIMP(statut='f',typ='R' ),
 )  ;
 
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4332,21 +4489,22 @@ def comb_cham_no_prod(COMB_R,COMB_C,COMB_FOURIER,**args):
 COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
                     ,fr="Combinaison linéaire de champs aux noeuds",
                      docu="U4.72.02-f",reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
          regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),),
-         COMB_R          =FACT(statut='f',min=01,max='**',
+         COMB_R          =FACT(statut='f',min=1,max='**',
            PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG",) ),
            CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_temp_c,cham_no_depl_r,cham_no_depl_c
                                                 ,cham_no_pres_r,cham_no_pres_c ) ),
            COEF_R          =SIMP(statut='o',typ='R' ),
          ),
-         COMB_C          =FACT(statut='f',min=01,max='**',
+         COMB_C          =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('COEF_R','COEF_C' ),),
            CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,cham_no_temp_c
                                                 ,cham_no_depl_c,cham_no_pres_c ) ),
            COEF_R          =SIMP(statut='f',typ='R' ),
            COEF_C          =SIMP(statut='f',typ='C' ),
          ),
-         COMB_FOURIER    =FACT(statut='f',min=01,max='**',
+         COMB_FOURIER    =FACT(statut='f',min=1,max='**',
            CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r) ),
            COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),
            NUME_MODE       =SIMP(statut='o',typ='I' ),
@@ -4356,7 +4514,7 @@ COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
            ANGL            =SIMP(statut='o',typ='R' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4377,12 +4535,13 @@ COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
 # RESPONSABLE G8BHHXD X.DESROCHES
 COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
                   docu="U4.83.31-c",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          RESULTAT        =SIMP(statut='o',typ=fourier_elas ),
          ANGL            =SIMP(statut='o',typ='R',max='**'),
-         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=05,
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=5,
                                into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL") ),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4401,7 +4560,7 @@ COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
-def comb_matr_asse_prod(COMB_R,COMB_C,**args):
+def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
   if COMB_C != None:
     type_mat = AsType(COMB_C.get_child('MATR_ASSE').get_valeur())
     if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
@@ -4414,28 +4573,37 @@ def comb_matr_asse_prod(COMB_R,COMB_C,**args):
     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="Combinaison linéaire de matrices assemblées",
                     docu="U4.72.01-g1",reentrant='f',
-         regles=(UN_PARMI('COMB_R','COMB_C' ),),
-         COMB_R          =FACT(statut='f',min=01,max='**',
+            UIinfo={"groupes":("Résultats et champs",)},
+         regles=(UN_PARMI('COMB_R','COMB_C','CALC_AMOR_GENE' ),),
+         COMB_R          =FACT(statut='f',min=1,max='**',
            PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
            MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
                                                 ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
            COEF_R          =SIMP(statut='o',typ='R' ),
          ),
-         COMB_C          =FACT(statut='f',min=01,max='**',
+         COMB_C          =FACT(statut='f',min=1,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',min=1,max=1,
+           regles=(UN_PARMI('AMOR_REDUIT','LIST_AMOR' ),),
+           MASS_GENE    = SIMP(statut='f', typ=matr_asse_gene_r),
+           RIGI_GENE    = SIMP(statut='f', typ=matr_asse_gene_r),
+           AMOR_REDUIT  = SIMP(statut='f',typ='R',max='**'),
+           LIST_AMOR    = SIMP(statut='f',typ=listr8 ),
+         ),         
          SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
 )  ;
-#& MODIF COMMANDE  DATE 18/06/2002   AUTEUR CIBHHPD D.NUNEZ 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4456,6 +4624,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
 COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
                      fr="Réponse sismique par recombinaison modale par une méthode spectrale",
                      docu="U4.84.01-e1",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
                  UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),),
          MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
@@ -4478,7 +4647,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
          MASS_INER       =SIMP(statut='f',typ=tabl_mass_iner ),
          CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          
-         EXCIT           =FACT(statut='o',min=01,max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'),
                    UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
            
@@ -4486,33 +4655,33 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            AXE             =SIMP(statut='f',fr="Excitation suivant un seul axe",
-                                 typ='R',max=03),  
+                                 typ='R',max=3),
            TRI_AXE         =SIMP(statut='f',fr="Excitation suivant les trois axes mais avec le meme spectre",
-                                 typ='R',max=03),
+                                 typ='R',max=3),
            TRI_SPEC        =SIMP(statut='f',fr="Excitation suivant les trois axes  avec trois spectres",
                                  typ='TXM',into=("OUI",) ),
            b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
-             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
-             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=1 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=1),
            ),
            b_tri_axe       =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
-             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=01 ),
-             ECHELLE         =SIMP(statut='f',typ='R',max=01),
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,max=1 ),
+             ECHELLE         =SIMP(statut='f',typ='R',max=1),
            ),
            b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
-             SPEC_OSCI       =SIMP(statut='o',typ=fonction,min=03,max=03 ),
-             ECHELLE         =SIMP(statut='f',typ='R',min=03,max=03),
+             SPEC_OSCI       =SIMP(statut='o',typ=fonction,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") ),
          ),
-         COMB_MODE       =FACT(statut='o',min=01,max=01,
+         COMB_MODE       =FACT(statut='o',min=1,max=1,
            TYPE            =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
            DUREE           =SIMP(statut='f',typ='R' ),
          ),
-         COMB_DIRECTION  =FACT(statut='f',min=01,max=01,
+         COMB_DIRECTION  =FACT(statut='f',min=1,max=1,
            TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
          ),
-         COMB_MULT_APPUI =FACT(statut='f',min=01,max='**',
+         COMB_MULT_APPUI =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),
                    UN_PARMI('TYPE_COMBI','TYPE' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -4521,7 +4690,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
            TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
            TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
          ),
-         COMB_DEPL_APPUI=FACT(statut='f',min=01,max='**',
+         COMB_DEPL_APPUI=FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','LIST_CAS'),
                    UN_PARMI('TYPE_COMBI','TYPE' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
@@ -4529,7 +4698,7 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
            TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
            TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
          ),
-         DEPL_MULT_APPUI =FACT(statut='f',min=01,max='**',
+         DEPL_MULT_APPUI =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO'),
                    AU_MOINS_UN('DX','DY','DZ' ),),
            NOM_CAS         =SIMP(statut='o',typ='TXM',max='**'),
@@ -4547,14 +4716,15 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
                                      "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
                                      "SIPO_ELNO_DEPL") ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
-         IMPRESSION      =FACT(statut='f',min=01,max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('TOUT','NIVEAU'),),
-           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),max=03 ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),max=3 ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 29/04/2002   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
+# RESPONSABLE VABHHTS J.PELLET
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4567,7 +4737,7 @@ def crea_champ_prod(TYPE_CHAM,**args):
   if TYPE_CHAM == "CART_DEPL_F" : return carte_depl_f
   if TYPE_CHAM == "CART_DEPL_R" : return carte_depl_r
   if TYPE_CHAM == "CART_DURT_R" : return carte_durt_r
-  if TYPE_CHAM == "CART_ENER_R" : return carte_ener_r 
+  if TYPE_CHAM == "CART_ENER_R" : return carte_ener_r
   if TYPE_CHAM == "CART_EPSI_R" : return carte_epsi_r
   if TYPE_CHAM == "CART_ERREUR" : return carte_erreur
   if TYPE_CHAM == "CART_FLUX_R" : return carte_flux_r
@@ -4691,85 +4861,88 @@ def crea_champ_prod(TYPE_CHAM,**args):
 
 CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
                 fr="  ",docu="U4.72.04-b1",reentrant='n',
-         TYPE_CHAM       =SIMP(statut='o',typ='TXM',     
-                        into=("CART_DBEL_R","NOEU_DBEL_R","ELEM_DBEL_R",  
-                             "ELNO_DBEL_R","ELGA_DBEL_R","CART_DEPL_C",         
-                             "NOEU_DEPL_C","ELEM_DEPL_C","ELNO_DEPL_C",         
-                             "ELGA_DEPL_C","CART_DEPL_F","NOEU_DEPL_F",         
-                             "ELEM_DEPL_F","ELNO_DEPL_F","ELGA_DEPL_F",         
-                             "CART_DEPL_R","NOEU_DEPL_R","ELEM_DEPL_R",         
-                             "ELNO_DEPL_R","ELGA_DEPL_R","CART_DURT_R",         
-                             "NOEU_DURT_R","ELEM_DURT_R","ELNO_DURT_R",         
-                             "ELGA_DURT_R","CART_ENER_R","NOEU_ENER_R",         
-                             "ELEM_ENER_R","ELNO_ENER_R","ELGA_ENER_R",         
-                             "CART_EPSI_R","NOEU_EPSI_R","ELEM_EPSI_R",         
-                             "ELNO_EPSI_R","ELGA_EPSI_R","CART_ERREUR",         
-                             "NOEU_ERREUR","ELEM_ERREUR","ELNO_ERREUR",         
-                             "ELGA_ERREUR","CART_FLUX_R","NOEU_FLUX_R",         
-                             "ELEM_FLUX_R","ELNO_FLUX_R","ELGA_FLUX_R",         
-                             "CART_GEOM_R","NOEU_GEOM_R","ELEM_GEOM_R",         
-                             "ELNO_GEOM_R","ELGA_GEOM_R","CART_G_DEPL_R",       
-                             "NOEU_G_DEPL_R","ELEM_G_DEPL_R","ELNO_G_DEPL_R",   
-                             "ELGA_G_DEPL_R","CART_HYDR_R","NOEU_HYDR_R",       
-                             "ELEM_HYDR_R","ELNO_HYDR_R","ELGA_HYDR_R",         
-                             "CART_INST_R","NOEU_INST_R","ELEM_INST_R",         
-                             "ELNO_INST_R","ELGA_INST_R","CART_INTE_R",         
-                             "NOEU_INTE_R","ELEM_INTE_R","ELNO_INTE_R",         
-                             "ELGA_INTE_R","CART_META_R","NOEU_META_R",         
-                             "ELEM_META_R","ELNO_META_R","ELGA_META_R",         
-                             "CART_NEUT_F","NOEU_NEUT_F","ELEM_NEUT_F",         
-                             "ELNO_NEUT_F","ELGA_NEUT_F","CART_NEUT_R",         
-                             "NOEU_NEUT_R","ELEM_NEUT_R","ELNO_NEUT_R",         
-                             "ELGA_NEUT_R","CART_PRES_R","NOEU_PRES_R",         
-                             "ELEM_PRES_R","ELNO_PRES_R","ELGA_PRES_R",         
-                             "CART_SIEF_R","NOEU_SIEF_R","ELEM_SIEF_R",         
-                             "ELNO_SIEF_R","ELGA_SIEF_R","CART_SOUR_R",         
-                             "NOEU_SOUR_R","ELEM_SOUR_R","ELNO_SOUR_R",         
-                             "ELGA_SOUR_R","CART_TEMP_F","NOEU_TEMP_F",         
-                             "ELEM_TEMP_F","ELNO_TEMP_F","ELGA_TEMP_F",         
-                             "CART_TEMP_R","NOEU_TEMP_R","ELEM_TEMP_R",         
-                             "ELNO_TEMP_R","ELGA_TEMP_R","CART_VAR2_R",         
-                             "NOEU_VAR2_R","ELEM_VARI_R","ELNO_VARI_R",         
-                             "ELGA_VARI_R","CART_VNOR_C","NOEU_VNOR_C",         
+            UIinfo={"groupes":("Résultats et champs",)},
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',
+                        into=("CART_DBEL_R","NOEU_DBEL_R","ELEM_DBEL_R",
+                             "ELNO_DBEL_R","ELGA_DBEL_R","CART_DEPL_C",
+                             "NOEU_DEPL_C","ELEM_DEPL_C","ELNO_DEPL_C",
+                             "ELGA_DEPL_C","CART_DEPL_F","NOEU_DEPL_F",
+                             "ELEM_DEPL_F","ELNO_DEPL_F","ELGA_DEPL_F",
+                             "CART_DEPL_R","NOEU_DEPL_R","ELEM_DEPL_R",
+                             "ELNO_DEPL_R","ELGA_DEPL_R","CART_DURT_R",
+                             "NOEU_DURT_R","ELEM_DURT_R","ELNO_DURT_R",
+                             "ELGA_DURT_R","CART_ENER_R","NOEU_ENER_R",
+                             "ELEM_ENER_R","ELNO_ENER_R","ELGA_ENER_R",
+                             "CART_EPSI_R","NOEU_EPSI_R","ELEM_EPSI_R",
+                             "ELNO_EPSI_R","ELGA_EPSI_R","CART_ERREUR",
+                             "NOEU_ERREUR","ELEM_ERREUR","ELNO_ERREUR",
+                             "ELGA_ERREUR","CART_FLUX_R","NOEU_FLUX_R",
+                             "ELEM_FLUX_R","ELNO_FLUX_R","ELGA_FLUX_R",
+                             "CART_GEOM_R","NOEU_GEOM_R","ELEM_GEOM_R",
+                             "ELNO_GEOM_R","ELGA_GEOM_R","CART_G_DEPL_R",
+                             "NOEU_G_DEPL_R","ELEM_G_DEPL_R","ELNO_G_DEPL_R",
+                             "ELGA_G_DEPL_R","CART_HYDR_R","NOEU_HYDR_R",
+                             "ELEM_HYDR_R","ELNO_HYDR_R","ELGA_HYDR_R",
+                             "CART_INST_R","NOEU_INST_R","ELEM_INST_R",
+                             "ELNO_INST_R","ELGA_INST_R","CART_INTE_R",
+                             "NOEU_INTE_R","ELEM_INTE_R","ELNO_INTE_R",
+                             "ELGA_INTE_R","CART_META_R","NOEU_META_R",
+                             "ELEM_META_R","ELNO_META_R","ELGA_META_R",
+                             "CART_NEUT_F","NOEU_NEUT_F","ELEM_NEUT_F",
+                             "ELNO_NEUT_F","ELGA_NEUT_F","CART_NEUT_R",
+                             "NOEU_NEUT_R","ELEM_NEUT_R","ELNO_NEUT_R",
+                             "ELGA_NEUT_R","CART_PRES_R","NOEU_PRES_R",
+                             "ELEM_PRES_R","ELNO_PRES_R","ELGA_PRES_R",
+                             "CART_SIEF_R","NOEU_SIEF_R","ELEM_SIEF_R",
+                             "ELNO_SIEF_R","ELGA_SIEF_R","CART_SOUR_R",
+                             "NOEU_SOUR_R","ELEM_SOUR_R","ELNO_SOUR_R",
+                             "ELGA_SOUR_R","CART_TEMP_F","NOEU_TEMP_F",
+                             "ELEM_TEMP_F","ELNO_TEMP_F","ELGA_TEMP_F",
+                             "CART_TEMP_R","NOEU_TEMP_R","ELEM_TEMP_R",
+                             "ELNO_TEMP_R","ELGA_TEMP_R","CART_VAR2_R",
+                             "NOEU_VAR2_R","ELEM_VARI_R","ELNO_VARI_R",
+                             "ELGA_VARI_R","CART_VNOR_C","NOEU_VNOR_C",
                              "ELEM_VNOR_C","ELNO_VNOR_C","ELGA_VNOR_C",
                              "CART_IRRA_R","NOEU_IRRA_R","ELEM_IRRA_R",
                              "ELNO_IRRA_R","ELGA_IRRA_R",) ),
 
 #        SI CREATION D'UN CHAM_NO, POUR IMPOSER LA NUMEROTATION DES DDLS :
 #        ------------------------------------------------------------------
-         regles=(EXCLUS('NUME_DDL','CHAM_NO',)),         
+         regles=(EXCLUS('NUME_DDL','CHAM_NO',)),
          NUME_DDL        =SIMP(statut='f',typ=(nume_ddl) ),
          CHAM_NO         =SIMP(statut='f',typ=(cham_no) ),
 
          OPERATION       =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC",) ),
 
-         b_affe          =BLOC(condition = "OPERATION == 'AFFE'", 
-             regles=(UN_PARMI('MAILLAGE','MODELE'),EXCLUS('MAILLAGE','PROL_ZERO'),),         
+         b_affe          =BLOC(condition = "OPERATION == 'AFFE'",
+             regles=(UN_PARMI('MAILLAGE','MODELE'),),
              MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
              MODELE          =SIMP(statut='f',typ=(modele) ),
-             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-             AFFE            =FACT(statut='o',min=01,max='**',
-                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),         
+             b_affe_modele   =BLOC(condition = "MODELE != None",
+                 PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+             AFFE            =FACT(statut='o',min=1,max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
                         UN_PARMI('VALE','VALE_I','VALE_C','VALE_F', ),),
                 TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
                 GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
                 MAILLE          =SIMP(statut='f',typ=ma,max='**'),
                 GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
                 NOEUD           =SIMP(statut='f',typ=no,max='**'),
-                NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
-                VALE            =SIMP(statut='f',typ='R',max='**' ),  
-                VALE_I          =SIMP(statut='f',typ='I',max='**' ),  
-                VALE_C          =SIMP(statut='f',typ='C',max='**' ),  
-                VALE_F          =SIMP(statut='f',typ=fonction,max='**'), 
+                NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+                VALE            =SIMP(statut='f',typ='R',max='**' ),
+                VALE_I          =SIMP(statut='f',typ='I',max='**' ),
+                VALE_C          =SIMP(statut='f',typ='C',max='**' ),
+                VALE_F          =SIMP(statut='f',typ=fonction,max='**'),
                                    ),
                              ),
-         b_asse          =BLOC(condition = "OPERATION == 'ASSE'", 
-             regles=(UN_PARMI('MAILLAGE','MODELE'),EXCLUS('MAILLAGE','PROL_ZERO'),),         
+         b_asse          =BLOC(condition = "OPERATION == 'ASSE'",
+             regles=(UN_PARMI('MAILLAGE','MODELE'),),
              MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
              MODELE          =SIMP(statut='f',typ=(modele) ),
-             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-             ASSE            =FACT(statut='o',min=01,max='**',
-                regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),      
+             b_asse_modele   =BLOC(condition = "MODELE != None",
+                 PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+             ASSE            =FACT(statut='o',min=1,max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
                 PRESENT_PRESENT('NOM_CMP_RESU','NOM_CMP', ),),
                 TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
                 GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -4777,91 +4950,91 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
                 MAILLE          =SIMP(statut='f',typ=ma,max='**'),
                 NOEUD           =SIMP(statut='f',typ=no,max='**'),
                 CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
-                NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),  
-                NOM_CMP_RESU    =SIMP(statut='f',typ='TXM',max='**' ),  
+                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_R          =SIMP(statut='f',typ='R',defaut= 1. ),
                                     ),
                              ),
-         b_eval          =BLOC(condition = "OPERATION == 'EVAL'", 
+         b_eval          =BLOC(condition = "OPERATION == 'EVAL'",
              CHAM_F          =SIMP(statut='o',typ=(cham_gd)),
              CHAM_PARA       =SIMP(statut='o',typ=(cham_gd),max='**'),
                              ),
-         b_disc          =BLOC(condition = "OPERATION == 'DISC'", 
+         b_disc          =BLOC(condition = "OPERATION == 'DISC'",
              MODELE          =SIMP(statut='f',typ=(modele) ),
              PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
              CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
                              ),
-         b_extr          =BLOC(condition = "OPERATION == 'EXTR'", 
-             regles=(UN_PARMI('MAILLAGE','RESULTAT'),),         
+         b_extr          =BLOC(condition = "OPERATION == 'EXTR'",
+             regles=(UN_PARMI('MAILLAGE','RESULTAT'),),
              MAILLAGE        =SIMP(statut='f',typ=(maillage) ),
              RESULTAT        =SIMP(statut='f',typ=(resultat) ),
              b_extr_maillage =BLOC(condition = "MAILLAGE != None",
                  NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
                                   ),
              b_extr_resultat =BLOC(condition = "RESULTAT != None",
-                 regles=(EXCLUS('TYPE_MAXI','NUME_ORDRE','INST','FREQ','NUME_MODE',        
+                 regles=(EXCLUS('TYPE_MAXI','NUME_ORDRE','INST','FREQ','NUME_MODE',
                                 'NOEUD_CMP','NOM_CAS','ANGL', ),),
                  SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                    fr="Liste des paramètres de sensibilité.",
                                    ang="List of sensitivity parameters"),
-                 NOM_CHAM        =SIMP(statut='o',typ='TXM',     
-                           into=("DEPL","VITE","ACCE",          
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',
+                           into=("DEPL","VITE","ACCE",
                              "DEPL_ABSOLU","VITE_ABSOLU",
-                             "TEMP","IRRA","ACCE_ABSOLU",  
-                             "FORC_NODA","REAC_NODA","EFGE_NOEU_DEPL",          
-                             "EFGE_NOEU_CART","EPSI_NOEU_DEPL",                 
-                             "SIGM_NOEU_DEPL","SIGM_NOEU_CART",                 
-                             "SIPO_NOEU_DEPL","EQUI_NOEU_SIGM",                 
-                             "EQUI_NOEU_EPSI","FLUX_NOEU_TEMP",                 
-                             "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",                 
-                             "META_ELGA_TEMP","META_ELNO_TEMP",                 
-                             "META_NOEU_TEMP","DURT_ELGA_META",                 
-                             "DURT_ELNO_META","DURT_NOEU_META","SIEF_ELGA",     
-                             "SIEF_ELNO_ELGA","SIEF_ELGA_DEPL",                 
-                             "VARI_ELNO_ELGA","VARI_ELGA","EPOT_ELEM_DEPL",     
-                             "ECIN_ELEM_DEPL","SOUR_ELGA_ELEC",                 
-                             "PRES_ELNO_REEL","PRES_ELNO_IMAG",                 
-                             "PRES_ELNO_DBEL","INTE_ELNO_ACTI",                 
-                             "INTE_ELNO_REAC","EFGE_ELNO_DEPL",                 
-                             "SIGM_ELNO_DEPL","EFGE_ELNO_CART",                 
-                             "SIGM_ELNO_CART","SIPO_ELNO_DEPL",                 
-                             "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL",                 
-                             "EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO",     
-                             "EPSP_ELGA","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",     
-                             "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",                 
-                             "ERRE_ELNO_ELGA","ERRE_ELGA_NORE",                 
-                             "ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",                 
-                             "SIGM_NOZ1_ELGA","SIGM_NOZ2_ELGA",                 
-                             "DEGE_ELNO_DEPL","SIRE_ELNO_DEPL",                 
-                             "VNOR_ELEM_DEPL","SIEF_ELNO","VARI_ELNO",          
-                             "SIEF_NOEU_ELGA","VARI_NOEU_ELGA",                 
-                             "PRES_NOEU_DBEL","PRES_NOEU_REEL",                 
-                             "PRES_NOEU_IMAG","INTE_NOEU_ACTI",                 
-                             "INTE_NOEU_REAC","DCHA_ELGA_SIGM",                 
-                             "DCHA_ELNO_SIGM","RADI_ELGA_SIGM",                 
-                             "RADI_ELNO_SIGM","ENDO_ELNO_SIGA",                 
-                             "ENDO_ELNO_SINO","ENDO_ELNO_SIGM",                 
-                             "SIGM_ELNO_VARI","SIGM_NOEU_VARI",                 
-                             "EPME_ELNO_DEPL","EPME_ELGA_DEPL",                 
-                             "EPME_ELNO_DPGE","EPMG_ELNO_DEPL",                 
-                             "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",                
+                             "TEMP","IRRA","ACCE_ABSOLU",
+                             "FORC_NODA","REAC_NODA","EFGE_NOEU_DEPL",
+                             "EFGE_NOEU_CART","EPSI_NOEU_DEPL",
+                             "SIGM_NOEU_DEPL","SIGM_NOEU_CART",
+                             "SIPO_NOEU_DEPL","EQUI_NOEU_SIGM",
+                             "EQUI_NOEU_EPSI","FLUX_NOEU_TEMP",
+                             "FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
+                             "META_ELGA_TEMP","META_ELNO_TEMP",
+                             "META_NOEU_TEMP","DURT_ELGA_META",
+                             "DURT_ELNO_META","DURT_NOEU_META","SIEF_ELGA",
+                             "SIEF_ELNO_ELGA","SIEF_ELGA_DEPL",
+                             "VARI_ELNO_ELGA","VARI_ELGA","EPOT_ELEM_DEPL",
+                             "ECIN_ELEM_DEPL","SOUR_ELGA_ELEC",
+                             "PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                             "PRES_ELNO_DBEL","INTE_ELNO_ACTI",
+                             "INTE_ELNO_REAC","EFGE_ELNO_DEPL",
+                             "SIGM_ELNO_DEPL","EFGE_ELNO_CART",
+                             "SIGM_ELNO_CART","SIPO_ELNO_DEPL",
+                             "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL",
+                             "EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO",
+                             "EPSP_ELGA","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                             "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",
+                             "ERRE_ELNO_ELGA","ERRE_ELGA_NORE",
+                             "ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",
+                             "SIGM_NOZ1_ELGA","SIGM_NOZ2_ELGA",
+                             "DEGE_ELNO_DEPL","SIRE_ELNO_DEPL",
+                             "VNOR_ELEM_DEPL","SIEF_ELNO","VARI_ELNO",
+                             "SIEF_NOEU_ELGA","VARI_NOEU_ELGA",
+                             "PRES_NOEU_DBEL","PRES_NOEU_REEL",
+                             "PRES_NOEU_IMAG","INTE_NOEU_ACTI",
+                             "INTE_NOEU_REAC","DCHA_ELGA_SIGM",
+                             "DCHA_ELNO_SIGM","RADI_ELGA_SIGM",
+                             "RADI_ELNO_SIGM","ENDO_ELNO_SIGA",
+                             "ENDO_ELNO_SINO","ENDO_ELNO_SIGM",
+                             "SIGM_ELNO_VARI","SIGM_NOEU_VARI",
+                             "EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+                             "EPME_ELNO_DPGE","EPMG_ELNO_DEPL",
+                             "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",
                              "GTHE_ELNO_ELGA","GRAD_NOEU_THETA",
-                             "HYDR_ELGA","HYDR_ELNO_ELGA","HYDR_NOEU_ELGA",    
+                             "HYDR_ELGA","HYDR_ELNO_ELGA","HYDR_NOEU_ELGA",
                              "THETA","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
                              "VALE_CONT",) ),
                  TYPE_MAXI       =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
                  TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
                  TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
                  LIST_INST       =SIMP(statut='f',typ=(listr8) ),
-                 NUME_ORDRE      =SIMP(statut='f',typ='I'),  
-                 INST            =SIMP(statut='f',typ='R'),  
-                 FREQ            =SIMP(statut='f',typ='R'),  
-                 NUME_MODE       =SIMP(statut='f',typ='I'),  
-                 NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),  
-                 NOM_CAS         =SIMP(statut='f',typ='TXM'),  
-                 ANGL            =SIMP(statut='f',typ='R'),  
-                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),  
+                 NUME_ORDRE      =SIMP(statut='f',typ='I'),
+                 INST            =SIMP(statut='f',typ='R'),
+                 FREQ            =SIMP(statut='f',typ='R'),
+                 NUME_MODE       =SIMP(statut='f',typ='I'),
+                 NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+                 NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                 ANGL            =SIMP(statut='f',typ='R'),
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
                  INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
                               ),
@@ -4870,9 +5043,9 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
 # FIN DU CATALOGUE : INFO,TITRE ET TYPAGE DU RESULAT :
 #-----------------------------------------------------
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
-         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4892,12 +5065,13 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
 # ======================================================================
 CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
                      docu="U4.23.02-d1",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
          regles=(EXCLUS('ECLA_PG','CREA_MAILLE'),
                  EXCLUS('ECLA_PG','CREA_GROUP_MA'),
                  EXCLUS('ECLA_PG','DETR_GROUP_MA'),
                  EXCLUS('ECLA_PG','MODI_MAILLE'),),
          MAILLAGE        =SIMP(statut='o',typ=maillage ),
-         CREA_POI1       =FACT(statut='f',min=01,max='**',fr="Création de mailles de type POI1 à partir de noeuds",
+         CREA_POI1       =FACT(statut='f',min=1,max='**',fr="Création de mailles de type POI1 à partir de noeuds",
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
            NOM_GROUP_MA    =SIMP(statut='f',typ=grma,max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -4906,7 +5080,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
          ),
-         CREA_MAILLE     =FACT(statut='f',min=01,max='**',fr="Duplication de mailles",
+         CREA_MAILLE     =FACT(statut='f',min=1,max='**',fr="Duplication de mailles",
            regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
@@ -4914,7 +5088,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
            PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
            PREF_NUME       =SIMP(statut='f',typ='I' ),
          ),
-         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',fr="Duplication de mailles et création de groupes de mailles",
+         CREA_GROUP_MA   =FACT(statut='f',min=1,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",) ),
@@ -4923,12 +5097,12 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
            PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
            PREF_NUME       =SIMP(statut='f',typ='I' ),
          ),
-         DETR_GROUP_MA   =FACT(statut='f',min=01,max=01,fr="Destruction de groupes de mailles",
+         DETR_GROUP_MA   =FACT(statut='f',min=1,max=1,fr="Destruction de groupes de mailles",
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,
                                  fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit",  ),  
          ),
-         MODI_MAILLE     =FACT(statut='f',min=01,max='**',fr="Modification du type de mailles",
+         MODI_MAILLE     =FACT(statut='f',min=1,max='**',fr="Modification du type de mailles",
            regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            MAILLE          =SIMP(statut='f',typ=grma,max='**'),
@@ -4937,7 +5111,7 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
            PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
            PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
          ),
-         REPERE          =FACT(statut='f',min=01,max='**',
+         REPERE          =FACT(statut='f',min=1,max='**',
                                fr="changement de repère servant à déterminer les caractéristiques d une section de poutre",
            TABLE           =SIMP(statut='o',typ=tabl_cara_geom,
                                  fr="Nom de la table contenant les caractéristiques de la section de poutre" ),
@@ -4948,14 +5122,14 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
                                    fr="Nom du groupe de mailles dont le centre de gravité sera l origine du nouveau repère"),
            ),
          ),
-         ECLA_PG         =FACT(statut='f',min=01,max=01,
+         ECLA_PG         =FACT(statut='f',min=1,max=1,
                                fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
            MODELE          =SIMP(statut='o',typ=modele ),
            SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4983,6 +5157,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,docu="U4.44.12-e3",reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
                fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
 
          OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ECLA_PG","PERM_CHAM","PROL_RTZ",),
@@ -4993,7 +5168,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e3",
            TYPE_RESU    =SIMP(statut='o',typ='TXM',into=("MULT_ELAS","EVOL_ELAS","EVOL_NOLI","FOURIER_ELAS",
                                                          "EVOL_THER","EVOL_VARC",) ),
            NOM_CHAM     =SIMP(statut='f',typ='TXM',into=("DEPL","TEMP","IRRA","HYDR_ELGA",),max=1 ),
-           AFFE         =FACT(statut='f',min=01,max='**',
+           AFFE         =FACT(statut='f',min=1,max='**',
              regles=(UN_PARMI('NOM_CAS','NUME_MODE','LIST_INST','INST',),),
              CHAM_GD         =SIMP(statut='f',typ=(cham_gd)),
              NOM_CAS         =SIMP(statut='f',typ='TXM' ),
@@ -5012,7 +5187,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e3",
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
 
-           ECLA_PG         =FACT(statut='f',min=01,max=01,
+           ECLA_PG         =FACT(statut='f',min=1,max=1,
              regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
              NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
                                    into=("SIEF_ELGA","VARI_ELGA","SIEF_ELGA_DEPL","FLUX_ELGA_TEMP",) ),
@@ -5040,7 +5215,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e3",
            MAILLAGE_INIT   =SIMP(statut='o',typ=maillage,),
            RESU_FINAL      =SIMP(statut='o',typ=evol_noli,),
            MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage,),
-           PERM_CHAM       =FACT(statut='o',min=01,max=01,
+           PERM_CHAM       =FACT(statut='o',min=1,max=1,
               GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
               GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
               TRAN           =SIMP(statut='o',typ='R',max='**'),
@@ -5052,7 +5227,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e3",
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER",) ),
 
-           PROL_RTZ        =FACT(statut='f',min=01,max=01,
+           PROL_RTZ        =FACT(statut='f',min=1,max=1,
               regles=(EXCLUS('INST','LIST_INST'),),
               MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage,),
               TABLE           =SIMP(statut='o',typ=tabl_post_rele,fr="Table issue de post_releve_t"),
@@ -5065,13 +5240,13 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e3",
               PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
               PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
               REPERE          =SIMP(statut='o',typ='TXM',into=("CYLINDRIQUE",),),
-              ORIGINE         =SIMP(statut='o',typ='R',min=03,max=03),
-              AXE_Z           =SIMP(statut='o',typ='R',min=03,max=03),
+              ORIGINE         =SIMP(statut='o',typ='R',min=3,max=3),
+              AXE_Z           =SIMP(statut='o',typ='R',min=3,max=3),
            ),
          ),
 
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5090,6 +5265,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e3",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-g2",repetable='n',
+            UIinfo={"groupes":("Gestion du travail",)},
            fr="Ouverture d une étude. Allocation des ressources mémoire et disque",
           sd_prod=ops.DEBUT,
 
@@ -5129,7 +5305,7 @@ DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-g2",repetable='n',
            ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
                                  statut='f',typ='TXM',into=('TEST',)),
          ),
-         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=01,max=01,
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='f',min=1,max=1,
            GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
            TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
            TAILLE          =SIMP(statut='f',typ='I'),
@@ -5137,7 +5313,7 @@ DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-g2",repetable='n',
            PARTITION       =SIMP(statut='f',typ='R'),
          ),
  );
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5157,13 +5333,14 @@ DEBUT=MACRO(nom="DEBUT",op=0 ,docu="U4.11.01-g2",repetable='n',
 # ======================================================================
 DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
                      docu="U4.64.02-f1",reentrant='f',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS'),),
-         CLASSIQUE       =FACT(statut='f',min=01,max=01,
+         CLASSIQUE       =FACT(statut='f',min=1,max=1,
            INTERF_DYNA     =SIMP(statut='o',typ=interf_dyna_clas ),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**' ),
            NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 10 ),
          ),
-         RITZ            =FACT(statut='f',min=01,max='**',
+         RITZ            =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MODE_STAT','MODE_MECA','MULT_ELAS','BASE_MODALE'),),
            MODE_MECA       =SIMP(statut='f',typ=mode_meca,max='**'  ),
            NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 999 ),
@@ -5171,7 +5348,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
            MULT_ELAS       =SIMP(statut='f',typ=mult_elas ),
            BASE_MODALE     =SIMP(statut='f',typ=base_modale ),
          ),
-        DIAG_MASS        =FACT(statut='f',min=01,max='**',
+        DIAG_MASS        =FACT(statut='f',min=1,max='**',
            MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**'  ),
            MODE_STAT       =SIMP(statut='o',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
          ),
@@ -5184,7 +5361,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5205,6 +5382,7 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
 DEFI_CABLE_BP=OPER(nom="DEFI_CABLE_BP",op= 180,sd_prod=cabl_precont,
                    fr=" ",
                    docu="U4.42.04-a",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          MODELE          =SIMP(statut='o',typ=modele ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
@@ -5226,7 +5404,7 @@ DEFI_CABLE_BP=OPER(nom="DEFI_CABLE_BP",op= 180,sd_prod=cabl_precont,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5247,11 +5425,12 @@ DEFI_CABLE_BP=OPER(nom="DEFI_CABLE_BP",op= 180,sd_prod=cabl_precont,
 DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
                     fr="Définition d une fonction constante",
                     docu="U4.31.01-f",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
-         VALE            =SIMP(statut='o',typ='R',max=01 ),
+         VALE            =SIMP(statut='o',typ='R',max=1 ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5270,20 +5449,21 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-e",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
                     fr="Définition d une coque composite couche par couche",
-         COUCHE          =FACT(statut='o',min=01,max='**',
+         COUCHE          =FACT(statut='o',min=1,max='**',
            EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
            MATER           =SIMP(statut='o',typ=(mater) ),
            ORIENTATION     =SIMP(statut='f',typ='R',defaut= 0.E+0,
                                  val_min=-90.E+0,val_max=90.E+0   ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
-         IMPRESSION      =FACT(statut='f',min=01,max=01,
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
                                  into=("RESULTAT",) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5303,8 +5483,9 @@ DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-e",r
 # ======================================================================
 DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
                     docu="U4.25.01-d",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
          regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
-         FAISCEAU_TRANS  =FACT(statut='f',min=01,max='**',
+         FAISCEAU_TRANS  =FACT(statut='f',min=1,max='**',
            COUPLAGE        =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
            CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
            PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
@@ -5318,7 +5499,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
            UNITE_CK        =SIMP(statut='f',typ='I',defaut=71),            
            PAS             =SIMP(statut='f',typ='R' ),
          ),
-         GRAPPE          =FACT(statut='f',min=00,max=01,
+         GRAPPE          =FACT(statut='f',max=1,
            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  
@@ -5333,7 +5514,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
            UNITE_CA        =SIMP(statut='f',typ='I',defaut=70),
            UNITE_KA        =SIMP(statut='f',typ='I',defaut=71),            
          ),
-         FAISCEAU_AXIAL  =FACT(statut='f',min=01,max='**',
+         FAISCEAU_AXIAL  =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
                    UN_PARMI('CARA_ELEM','RAYON_TUBE'),
                    ENSEMBLE('RAYON_TUBE','COOR_TUBE'),
@@ -5344,17 +5525,17 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
 #  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire                            
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
-           VECT_X          =SIMP(statut='f',typ='R',max=03),
+           VECT_X          =SIMP(statut='f',typ='R',max=3),
            PROF_RHO_FLUI   =SIMP(statut='f',typ=fonction ),
            PROF_VISC_CINE  =SIMP(statut='f',typ=fonction ),
            CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
            RAYON_TUBE      =SIMP(statut='f',typ='R' ),
            COOR_TUBE       =SIMP(statut='f',typ='R',max='**'),
-           PESANTEUR       =SIMP(statut='f',typ='R',min=04,max=04),
+           PESANTEUR       =SIMP(statut='f',typ='R',min=4,max=4),
            RUGO_TUBE       =SIMP(statut='f',typ='R' ),
-           CARA_PAROI      =SIMP(statut='f',typ='TXM',max=05,
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',max=5,
                                  into=("YC","ZC","R","HY","HZ") ),
-           VALE_PAROI      =SIMP(statut='f',typ='R',max=05),
+           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),
@@ -5365,7 +5546,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
            COOR_GRILLE     =SIMP(statut='f',typ='R',max='**'),
            TYPE_GRILLE     =SIMP(statut='f',typ='I',max='**'),
          ),
-         COQUE_COAX      =FACT(statut='f',min=00,max=01,
+         COQUE_COAX      =FACT(statut='f',max=1,
            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),
@@ -5383,7 +5564,7 @@ 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 23/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5402,6 +5583,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.MK.10-e",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
                     fr="Définition d une fonction du temps pour calculer des forces de LAPLACE",
       regles=(UN_PARMI('COUR_PRIN','COUR'),
               EXCLUS('COUR','COUR_SECO'), ),
@@ -5451,7 +5633,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.MK.10-e
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5471,6 +5653,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.MK.10-e
 # ======================================================================
 DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction,
                     docu="U4.35.01-c",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
          NOEUD_INIT      =SIMP(statut='o',typ=no),
          NOEUD_FIN       =SIMP(statut='o',typ=no),
@@ -5488,7 +5671,7 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5517,6 +5700,7 @@ def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args):
 DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
                     ,fr="Définition des valeurs réelles ou complexes d une fonction réelle",
                      docu="U4.31.02-g3",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA'),),
          NOM_PARA        =SIMP(statut='o',typ='TXM',
                                into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
@@ -5547,7 +5731,7 @@ 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/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5566,6 +5750,7 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-e",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
                     fr="Définition de lèvres et d un fond de fissure en 3D",
          regles=(UN_PARMI('FOND','FOND_FERME'),
                  EXCLUS('FOND_FERME','DTAN_ORIG'),
@@ -5579,7 +5764,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-
                       EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
                       EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
            MAILLAGE        =SIMP(statut='o',typ=maillage ),
-           FOND            =FACT(statut='f',min=01,max=01,
+           FOND            =FACT(statut='f',min=1,max=1,
              regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
                      EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
                           EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
@@ -5593,7 +5778,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-
              NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
              GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
            ),
-           FOND_FERME      =FACT(statut='f',min=01,max=01,
+           FOND_FERME      =FACT(statut='f',min=1,max=1,
              regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
                           EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
@@ -5605,12 +5790,12 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-
              MAILLE_ORIG     =SIMP(statut='f',typ=ma,max=1),
              GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,max=1),
            ),
-           LEVRE_SUP       =FACT(statut='f',min=01,max=01,
+           LEVRE_SUP       =FACT(statut='f',min=1,max=1,
              regles=(UN_PARMI('GROUP_MA','MAILLE'),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            ),
-           LEVRE_INF       =FACT(statut='f',min=01,max=01,
+           LEVRE_INF       =FACT(statut='f',min=1,max=1,
              regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
@@ -5622,7 +5807,7 @@ DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,docu="U4.82.01-
            VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,max=2),
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5649,10 +5834,11 @@ def defi_group_prod(MAILLAGE,**args):
 DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
                 fr="Définition de nouveaux groupes de noeuds et/ou de mailles dans un concept maillage",
                 docu="U4.22.01-f1",reentrant='o',
+            UIinfo={"groupes":("Maillage",)},
          regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO'),),            
          MAILLAGE        =SIMP(statut='o',typ=(maillage,squelette) ),
          
-         CREA_GROUP_MA   =FACT(statut='f',min=01,max='**',
+         CREA_GROUP_MA   =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
 #  quel est le concept attendu deriere NOM
            NOM             =SIMP(statut='o',typ=grma),
@@ -5673,37 +5859,37 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
            ),
            b_face_normale  =BLOC(condition = "OPTION == 'FACE_NORMALE'",
              regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
-             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             ANGL_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'),),
-             POINT           =SIMP(statut='f',typ='R',max=03),
+             POINT           =SIMP(statut='f',typ='R',max=3),
              NOEUD_CENTRE    =SIMP(statut='f',typ=no),
              RAYON           =SIMP(statut='o',typ='R' ),    
            ),
            b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
              regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R',max=03),
+             POINT           =SIMP(statut='f',typ='R',max=3),
              NOEUD_CENTRE    =SIMP(statut='f',typ=no),
              RAYON           =SIMP(statut='o',typ='R' ), 
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
-             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),   
            ),
            b_bande         =BLOC(condition = "OPTION == 'BANDE'",
              regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R',max=03),
+             POINT           =SIMP(statut='f',typ='R',max=3),
              NOEUD_CENTRE    =SIMP(statut='f',typ=no),
              DIST            =SIMP(statut='o',typ='R' ),
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=02),
-             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),   
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),   
            ),
          ),
-         CREA_GROUP_NO   =FACT(statut='f',min=01,max='**',
+         CREA_GROUP_NO   =FACT(statut='f',min=1,max='**',
            regles = (
          AU_MOINS_UN ('TOUT_GROUP_MA','GROUP_MA','NOEUD',
                      'INTERSEC','UNION','DIFFE','GROUP_NO','OPTION'),
@@ -5737,8 +5923,8 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
            ),
            b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
              regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
-             POINT           =SIMP(statut='f',typ='R',max=03),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             POINT           =SIMP(statut='f',typ='R',max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
              RAYON           =SIMP(statut='o',typ='R' ),
              PRECISION       =SIMP(statut='f',typ='R' ),
              CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
@@ -5746,21 +5932,21 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
            b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
              regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R',max=03),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
+             POINT           =SIMP(statut='f',typ='R',max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
              RAYON           =SIMP(statut='o',typ='R' ),
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
-             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
              PRECISION       =SIMP(statut='f',typ='R' ),
              CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
            ),
            b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
              regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R',max=03),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=01),
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
-             VECT_NORMALE    =SIMP(statut='f',typ='R',max=03),
+             POINT           =SIMP(statut='f',typ='R',max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
              PRECISION       =SIMP(statut='f',typ='R' ),
              CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
            ),
@@ -5787,7 +5973,7 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
          ),
          INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5807,6 +5993,7 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
 # ======================================================================
 DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
                     docu="U4.36.02-f2",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
 
          DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
 
@@ -5846,7 +6033,7 @@ DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),               
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5866,8 +6053,9 @@ DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
 # ======================================================================
 DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
                       docu="U4.64.01-e",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
-         INTERFACE       =FACT(statut='o',min=01,max='**',
+         INTERFACE       =FACT(statut='o',min=1,max='**',
            regles=(ENSEMBLE('NOM','TYPE'),
 #  erreur doc U sur la condition qui suit
                    UN_PARMI('NOEUD','GROUP_NO'),),
@@ -5881,7 +6069,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 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5903,11 +6091,12 @@ 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,
                     fr="Définition d une suite croissante d entiers",
                     docu="U4.34.02-f",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('VALE','DEBUT'),
                  EXCLUS('VALE','INTERVALLE'),),
          VALE            =SIMP(statut='f',typ='I',max='**'),
          DEBUT           =SIMP(statut='f',typ='I'),
-         INTERVALLE      =FACT(statut='f',min=01,max='**',
+         INTERVALLE      =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOMBRE','PAS'),),
            JUSQU_A         =SIMP(statut='o',typ='I'),
            NOMBRE          =SIMP(statut='f',typ='I',val_min=1,),
@@ -5916,7 +6105,7 @@ DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5938,12 +6127,13 @@ DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis,
 DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
                     fr="Définition d une suite croissante de réels",
                     docu="U4.34.01-g1",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('VALE','DEBUT',),
                  EXCLUS('VALE','INTERVALLE'),
                  ENSEMBLE('DEBUT','INTERVALLE')),
          VALE            =SIMP(statut='f',typ='R',max='**'),
          DEBUT           =SIMP(statut='f',typ='R'),
-         INTERVALLE      =FACT(statut='f',min=01,max='**',
+         INTERVALLE      =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOMBRE','PAS'),),
            JUSQU_A         =SIMP(statut='o',typ='R'),
            NOMBRE          =SIMP(statut='f',typ='I'),
@@ -5952,7 +6142,7 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5974,23 +6164,24 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
 DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
                    fr="Définition d un nouveau maillage à partir de macro éléments",
                    docu="U4.23.01-e",reentrant='n',
-         DEFI_MAILLE     =FACT(statut='o',min=01,max='**',
+            UIinfo={"groupes":("Maillage",)},
+         DEFI_MAILLE     =FACT(statut='o',min=1,max='**',
            MACR_ELEM_STAT  =SIMP(statut='o',typ=macr_elem_stat,max='**' ),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           TRAN            =SIMP(statut='f',typ='R',max=03),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
+           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=03),
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
            ),
          ),
-         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+         RECO_GLOBAL     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
          ),
-         RECO_MAILLE     =FACT(statut='f',min=01,max='**',
+         RECO_MAILLE     =FACT(statut='f',min=1,max='**',
            MAILLE          =SIMP(statut='o',typ=ma,max='**'),
            GROUP_NO        =SIMP(statut='o',typ=grno,max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="GEOMETRIQUE",into=("GEOMETRIQUE","NOEUD_A_NOEUD","INVERSE") ),
@@ -5999,7 +6190,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
            ),
          ),
-         DEFI_NOEUD      =FACT(statut='f',min=01,max='**',
+         DEFI_NOEUD      =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','NOEUD_INIT'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
                                  fr="Renommage de tous les noeuds" ),
@@ -6014,7 +6205,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
              NOEUD_FIN       =SIMP(statut='o',typ=no),
            ),        
          ),
-         DEFI_GROUP_NO   =FACT(statut='f',min=01,max='**',
+         DEFI_GROUP_NO   =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','MAILLE'),
                 AU_MOINS_UN('INDEX','GROUP_NO_FIN'),
                    ENSEMBLE('GROUP_NO_INIT','GROUP_NO_FIN'),),
@@ -6030,7 +6221,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
            GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6051,6 +6242,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
 DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
                    fr="Définition des paramètres décrivant le comportement d un matériau",
                    docu="U4.43.01-g4",reentrant='n',
+            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',
                       'SURF_ETAT_SATU','CAM_CLAY_THM','SURF_ETAT_NSAT'),
@@ -6069,13 +6261,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
                EXCLUS('LMARC','LMARC_FO'),
                EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
                EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
-               PRESENT_PRESENT('BPEL_BETON','ELAS'),
                PRESENT_PRESENT('BPEL_ACIER','ELAS'),
                EXCLUS('RCCM','RCCM_FO'),
                EXCLUS('WEIBULL','WEIBULL_FO'),
                PRESENT_PRESENT('CAM_CLAY','ELAS'),
                PRESENT_PRESENT('LAIGLE','ELAS'),
-               PRESENT_PRESENT('MAZARS','ELAS'),
+               EXCLUS('MAZARS','MAZARS_FO'),
                PRESENT_PRESENT('GRANGER_FD','ELAS_FO'),
                ),
 
@@ -6800,7 +6991,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              KT_ULTM         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-             EFFO_N_INIT     =SIMP(statut='f',typ='R'),
+             EFFO_N_INIT     =SIMP(statut='f',typ=fonction),
              regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',),),
              RIGI_N_IRRA     =SIMP(statut='f',typ=fonction),
              RIGI_N_FO       =SIMP(statut='f',typ=fonction),
@@ -6808,6 +6999,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_PRAGER_MZ     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="DRZ",into=("DRZ",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
            NADAI_B         =FACT(statut='f',min=0,max=1,
              F_C             =SIMP(statut='o',typ='R'),
@@ -6852,7 +7044,16 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AT              =SIMP(statut='o',typ='R'),
              BT              =SIMP(statut='o',typ='R'),
            ),
-           VENDOCHAB       =FACT(statut='f',min=0,max=1,
+         MAZARS_FO=FACT(statut='f',min=0 ,max=1,
+             EPSD0           =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ=fonction),
+             BC              =SIMP(statut='o',typ=fonction),
+             AT              =SIMP(statut='o',typ=fonction),
+             BT              =SIMP(statut='o',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+          VENDOCHAB       =FACT(statut='f',min=0,max=1,
              S_VP            =SIMP(statut='o',typ='R'),
              SEDVP1          =SIMP(statut='o',typ='R'),
              SEDVP2          =SIMP(statut='o',typ='R'),
@@ -6910,11 +7111,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              PA              =SIMP(statut='o',typ='R'),
            ),
            CJS             =FACT(statut='f',min=0,max=1,
-             regles=(ENSEMBLE('B_CJS','C_CJS','MU_CJS','PCO',),
-                     ENSEMBLE('N_CJS','KP','RC',),
-                     PRESENT_ABSENT('A_CJS','B_CJS',),
-                     PRESENT_PRESENT('A_CJS','N_CJS',),
-                     PRESENT_PRESENT('B_CJS','N_CJS', ),),
              BETA_CJS        =SIMP(statut='o',typ='R'),
              RM              =SIMP(statut='o',typ='R'),
              N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -6953,9 +7149,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              TAUX_6          =SIMP(statut='f',typ='R'),
              TAUX_7          =SIMP(statut='f',typ='R'),
              TAUX_8          =SIMP(statut='f',typ='R'),
-             FONC_DESORP     =SIMP(statut='f',typ=fonction),
              QSR_K           =SIMP(statut='f',typ='R'),
-             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
            ),
            V_GRANGER_FP    =FACT(statut='f',min=0,max=1,
              QSR_VEIL        =SIMP(statut='f',typ='R'),
@@ -7050,8 +7244,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D1              =SIMP(statut='o',typ='R'),
              ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
-             FONC_DESORP     =SIMP(statut='o',typ=fonction),
-             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
            SECH_NAPPE      =FACT(statut='f',min=0,max=1,
              FONCTION        =SIMP(statut='o',typ=fonction),
@@ -7378,6 +7570,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              S               =SIMP(statut='f',typ=fonction),
              N_KE            =SIMP(statut='f',typ=fonction),
              M_KE            =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
            LAIGLE          =FACT(statut='f',min=0,max=1,
              GAMMA_ULT       =SIMP(statut='o',typ='R'),
@@ -7398,7 +7591,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
            ),
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7418,26 +7611,27 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 # ======================================================================
 DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
                       docu="U4.65.02-d",reentrant='n',
-         SOUS_STRUC      =FACT(statut='o',min=01,max='**',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         SOUS_STRUC      =FACT(statut='o',min=1,max='**',
            NOM             =SIMP(statut='o',typ='TXM' ),
            MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=03),
-           TRANS           =SIMP(statut='f',typ='R',max=03),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           TRANS           =SIMP(statut='f',typ='R',max=3),
          ),
-         LIAISON         =FACT(statut='o',min=01,max='**',
+         LIAISON         =FACT(statut='o',min=1,max='**',
            SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
            INTERFACE_1     =SIMP(statut='o',typ='TXM' ),
            SOUS_STRUC_2    =SIMP(statut='o',typ='TXM' ),
            INTERFACE_2     =SIMP(statut='o',typ='TXM' ),
          ),
-         VERIF           =FACT(statut='f',min=01,max='**',
+         VERIF           =FACT(statut='f',min=1,max='**',
 #  dans la doc U stop_erreur est obligatoire         
            STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7458,16 +7652,19 @@ DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
 DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=fonction,
                 fr="Définition des valeurs d une fonction de deux variables réelles",
                 docu="U4.31.03-g1",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
                  EXCLUS('FONCTION','NOM_PARA_FONC',),
                  ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
          NOM_PARA        =SIMP(statut='o',typ='TXM',into=("TEMP","INST","X","Y","Z","FREQ","PULS",
-                                                          "AMOR","EPAIS","TSEC","HYDR","SECH") ),
+                                                          "AMOR","EPAIS","TSEC","HYDR","SECH",
+                                                          "SAT", "PGAZ","PCAP"
+                                                          ) ),
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
          PARA            =SIMP(statut='o',typ='R',max='**'),
          FONCTION        =SIMP(statut='f',typ=fonction,max='**' ),
          NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=("TEMP","INST","X","Y","Z","EPSI","FREQ",
-                                                          "PULS","AMOR","EPAIS") ),
+                                                          "PULS","AMOR","EPAIS","SAT", "PGAZ","PCAP") ),
          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") ),
@@ -7481,7 +7678,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=fonction,
          VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7502,6 +7699,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=fonction,
 DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
                     ,fr="Définition d un obstacle plan perpendiculaire à une structure filaire",
                      docu="U4.44.21-e",reentrant='n',
+            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",
@@ -7533,7 +7731,7 @@ DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=obstacle
          VALE            =SIMP(statut='f',typ='R',max='**'),
          VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
 )  ;
-#& MODIF COMMANDE  DATE 10/10/2001   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7556,15 +7754,16 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
                     fr="Définition d'un paramètre de sensibilité",
                     ang="Definition of a sensitive parameter",
                     docu="U4.31.xx-a",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          NOM_RESU        =SIMP(statut='c',typ='TXM',into=("TOUTRESU",),defaut="TOUTRESU",
                                fr="Nom du concept créé",
                                ang="Name of the concept"),
-         VALE            =SIMP(statut='o',typ='R',max=01,
+         VALE            =SIMP(statut='o',typ='R',max=1,
                                fr="Valeur du parametre",
                                ang="Value of the parameter"),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 07/03/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7585,15 +7784,16 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
 DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
                     fr="Définition d'un spectre d'excitation turbulente",
                     docu="U4.44.31-c",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          regles=(UN_PARMI('SPEC_LONG_COR_1','SPEC_LONG_COR_2','SPEC_LONG_COR_3',
                           'SPEC_LONG_COR_4','SPEC_CORR_CONV_1','SPEC_CORR_CONV_2',
                           'SPEC_FONC_FORME','SPEC_EXCI_POINT'),),
-         SPEC_LONG_COR_1 =FACT(statut='f',min=00,max=01,
+         SPEC_LONG_COR_1 =FACT(statut='f',max=1,
            LONG_COR        =SIMP(statut='o',typ='R' ),
            PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
            VISC_CINE       =SIMP(statut='o',typ='R' ),
          ),
-         SPEC_LONG_COR_2 =FACT(statut='f',min=00,max=01,
+         SPEC_LONG_COR_2 =FACT(statut='f',max=1,
            regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
            LONG_COR        =SIMP(statut='o',typ='R' ),
            PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
@@ -7601,7 +7801,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
            PHI0            =SIMP(statut='f',typ='R',defaut= 1.5E-3 ),
            BETA            =SIMP(statut='f',typ='R',defaut= 2.7 ),
          ),
-         SPEC_LONG_COR_3 =FACT(statut='f',min=00,max=01,
+         SPEC_LONG_COR_3 =FACT(statut='f',max=1,
            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 ),
@@ -7611,7 +7811,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
            PHI0_2          =SIMP(statut='f',typ='R',defaut= 4.E-5 ),
            BETA_2          =SIMP(statut='f',typ='R',defaut= 3.5 ),
          ),
-         SPEC_LONG_COR_4 =FACT(statut='f',min=00,max=01,
+         SPEC_LONG_COR_4 =FACT(statut='f',max=1,
            regles=(ENSEMBLE('BETA','GAMMA'),),
            LONG_COR        =SIMP(statut='o',typ='R' ),
            PROF_VITE_FLUI  =SIMP(statut='o',typ=fonction ),
@@ -7619,7 +7819,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
            BETA            =SIMP(statut='f',typ='R',defaut= 2. ),
            GAMMA           =SIMP(statut='f',typ='R',defaut= 4. ),
          ),
-         SPEC_CORR_CONV_1=FACT(statut='f',min=00,max=01,
+         SPEC_CORR_CONV_1=FACT(statut='f',max=1,
            LONG_COR_1      =SIMP(statut='o',typ='R' ),
            LONG_COR_2      =SIMP(statut='f',typ='R' ),
            VITE_FLUI       =SIMP(statut='o',typ='R' ),
@@ -7632,7 +7832,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
                                  into=("AU_YANG","GENERALE","CORCOS") ),
          ),
-         SPEC_CORR_CONV_2=FACT(statut='f',min=00,max=01,
+         SPEC_CORR_CONV_2=FACT(statut='f',max=1,
            FONCTION        =SIMP(statut='o',typ=fonction ),
            VITE_FLUI       =SIMP(statut='o',typ='R' ),
            FREQ_COUP       =SIMP(statut='f',typ='R' ),
@@ -7641,7 +7841,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
            COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
            COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
          ),
-         SPEC_FONC_FORME =FACT(statut='f',min=00,max=01,
+         SPEC_FONC_FORME =FACT(statut='f',max=1,
            regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
                    ENSEMBLE('INTE_SPEC','FONCTION'),),
            INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
@@ -7651,7 +7851,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
            CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
            MODELE          =SIMP(statut='o',typ=modele ),
          ),
-         SPEC_EXCI_POINT =FACT(statut='f',min=00,max=01,
+         SPEC_EXCI_POINT =FACT(statut='f',max=1,
            regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),
            INTE_SPEC       =SIMP(statut='f',typ=tabl_intsp ),
            GRAPPE_2        =SIMP(statut='f',typ='TXM',
@@ -7671,7 +7871,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7692,6 +7892,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
 DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
                     fr="Définition d un maillage de visualisation",
                     docu="U4.24.01-e",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
          regles=(UN_PARMI('MODE_CYCL','MODELE_GENE','MAILLAGE'),
                  PRESENT_PRESENT('MODE_CYCL','SECTEUR'),
                  EXCLUS('SOUS_STRUC','SECTEUR'),
@@ -7700,7 +7901,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
          MODE_CYCL       =SIMP(statut='f',typ=mode_cycl ),
          MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
          SQUELETTE       =SIMP(statut='f',typ=squelette ),
-         RECO_GLOBAL     =FACT(statut='f',min=01,max='**',
+         RECO_GLOBAL     =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('TOUT','GROUP_NO_1'),
                    PRESENT_PRESENT('GROUP_NO_1','GROUP_NO_2'),
                    PRESENT_PRESENT('GROUP_NO_1','SOUS_STRUC_1'),
@@ -7715,7 +7916,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            DIST_REFE       =SIMP(statut='f',typ='R' ),
          ),
-         NOM_GROUP_MA    =FACT(statut='f',min=01,max='**',
+         NOM_GROUP_MA    =FACT(statut='f',min=1,max='**',
            NOM             =SIMP(statut='o',typ='TXM' ),
            SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
            GROUP_MA        =SIMP(statut='o',typ=grma),
@@ -7727,20 +7928,20 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          TRANS           =SIMP(statut='f',typ='R',min=3,max=3),
          ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),
-         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+         SOUS_STRUC      =FACT(statut='f',min=1,max='**',
            NOM             =SIMP(statut='f',typ='TXM' ),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          ),
-         SECTEUR         =FACT(statut='f',min=01,max='**',
+         SECTEUR         =FACT(statut='f',min=1,max='**',
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7760,6 +7961,7 @@ DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
 # ======================================================================
 DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
                   fr=" ",docu="U4.43.05-a",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
          SYST_GLISSEMENT =FACT(statut='o',min=3,max=3,
            N               =SIMP(statut='o',typ='R',min=12,max=12 ),  
            L               =SIMP(statut='o',typ='R',max='**' ),  
@@ -7770,7 +7972,7 @@ DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7789,6 +7991,7 @@ DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.20-d",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
                     fr="Calculer la fonction d évolution temporelle de température due à l effet JOULE dans un cable",
          LIST_INST       =SIMP(statut='o',typ=listr8),
          INST_CC_INIT    =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
@@ -7798,7 +8001,7 @@ DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.
          TEMP_EXT_POSE   =SIMP(statut='f',typ='R',defaut= 15.0E+0),
          TEMP_EXT        =SIMP(statut='f',typ='R',defaut= 15.0E+0),
          TEMP_RESI_REF   =SIMP(statut='f',typ='R',defaut= 20.0E+0),
-         PARA_COND_1D    =FACT(statut='f',min=01,max='**',
+         PARA_COND_1D    =FACT(statut='f',min=1,max='**',
            INTE_CC         =SIMP(statut='f',typ='R',defaut= 0.0E+0),
            INTE_RENC       =SIMP(statut='f',typ='R',defaut= 0.0E+0),
            A               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
@@ -7811,7 +8014,7 @@ DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.
          ),
 )  ;
 
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7830,22 +8033,23 @@ DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.MK.
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=tabl_trc,docu="U4.43.04-e",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
               fr="Définition d un diagramme de transformations en refroidissement continu d un acier",
-         HIST_EXP        =FACT(statut='o',min=01,max='**',
+         HIST_EXP        =FACT(statut='o',min=1,max='**',
            VALE            =SIMP(statut='o',typ='R',max='**'),
          ),
-         TEMP_MS         =FACT(statut='o',min=01,max='**',
+         TEMP_MS         =FACT(statut='o',min=1,max='**',
            SEUIL           =SIMP(statut='o',typ='R'),
            AKM             =SIMP(statut='o',typ='R'),
            BKM             =SIMP(statut='o',typ='R'),
            TPLM            =SIMP(statut='o',typ='R'),
          ),
-         GRAIN_AUST      =FACT(statut='f',min=01,max='**',
+         GRAIN_AUST      =FACT(statut='f',min=1,max='**',
            DREF           =SIMP(statut='f',typ='R'),
            A              =SIMP(statut='f',typ='R'),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7874,6 +8078,7 @@ def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
 DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
                  fr="Affectation d une valeur à une variable Superviseur",
                  docu="U4.31.04-f1",reentrant='f',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
          IS              =SIMP(statut='f',typ='I',max='**'),
          R8              =SIMP(statut='f',typ='R',max='**'),
@@ -7881,7 +8086,7 @@ DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
          C8              =SIMP(statut='f',typ='C',max='**'),
          LS              =SIMP(statut='f',typ='L',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7900,13 +8105,14 @@ DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEFUFI=PROC(nom="DEFUFI",op=21,docu="U4.12.01-d",
+            UIinfo={"groupes":("Gestion du travail",)},
             fr="Modification / ajout d une unité logique en sortie en complément de celles définies dans DEBUT",
-         IMPRESSION      =FACT(statut='o',min=01,max='**',
+         IMPRESSION      =FACT(statut='o',min=1,max='**',
            NOM             =SIMP(statut='o',typ='TXM',max='**'),
            UNITE           =SIMP(statut='o',typ='I' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7925,12 +8131,13 @@ DEFUFI=PROC(nom="DEFUFI",op=21,docu="U4.12.01-d",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=cham_no_depl_r,docu="U4.62.02-e",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
                   fr="Récupération du champ de déplacement interne à une sous-structure",
          DEPL_GLOBAL     =SIMP(statut='o',typ=cham_no_depl_r),
          MAILLE          =SIMP(statut='o',typ=ma,max=1),
          NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7949,13 +8156,14 @@ DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=cham_no_depl_r,docu="U4.62.02
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-d",
+            UIinfo={"groupes":("Gestion du travail",)},
               fr="Destruction d un concept utilisateur dans la base GLOBALE",
              op_init=ops.detruire,
             CONCEPT     =FACT(statut='o',min=01,
             NOM         =SIMP(statut='o',typ=assd,max='**'),
         ),
 );
-#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7974,6 +8182,7 @@ DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-d",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.MK.30-d",reentrant='n', 
+            UIinfo={"groupes":("Outils métier",)},
                   fr="Calcul sous forme d une fonction du temps de la distance minimale entre deux structures filaires",
       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),
               UN_PARMI('GROUP_MA_2','POIN_FIXE'),),
@@ -7991,7 +8200,7 @@ DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.MK.30-d",
          POIN_FIXE       =SIMP(statut='f',typ='R',min=3,max=3),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8012,10 +8221,11 @@ DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.MK.30-d",
 DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
                     ,fr="Calcule la réponse spectrale d une structure linéaire sous une excitation connue par sa DSP",
                      docu="U4.53.22-d",reentrant='n',
-         BASE_MODALE     =FACT(statut='o',min=01,max=01,
+            UIinfo={"groupes":("Résolution",)},
+         BASE_MODALE     =FACT(statut='o',min=1,max=1,
            regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
-           BANDE           =SIMP(statut='f',typ='R',max=02),
+           BANDE           =SIMP(statut='f',typ='R',max=2),
            NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            b_bande =BLOC(condition = "BANDE != None",
              AMOR_UNIF       =SIMP(statut='o',typ='R' ),
@@ -8025,7 +8235,7 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
            ),
          ),
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
-         EXCIT           =FACT(statut='o',min=01,max=01,
+         EXCIT           =FACT(statut='o',min=1,max=1,
            regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'), 
                    EXCLUS('CHAM_NO','NOEUD'),),
            DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
@@ -8053,10 +8263,10 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
              NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
            ),           
          ),
-         REPONSE         =FACT(statut='f',min=01,max=01,
-           regles=(EXCLUS('FREQ_MIN','NB_POIN_MODE'),
-                   EXCLUS('FREQ_MIN','FREQ_EXCIT'),
-                   ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+         REPONSE         =FACT(statut='f',min=1,max=1,
+#           regles=(EXCLUS('FREQ_MIN','NB_POIN_MODE'),
+#                   EXCLUS('FREQ_MIN','FREQ_EXCIT'),
+           regles=(ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
 #  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
            DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
@@ -8069,7 +8279,7 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 26/03/2002   AUTEUR CAMBIER S.CAMBIER 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8097,6 +8307,7 @@ def dyna_line_harm_prod(MATR_MASS,**args):
 DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
                     fr="Réponse dynamique complexe d un système à une excitation harmonique",
                     docu="U4.53.11-e",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
                  PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
                  PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
@@ -8114,8 +8325,8 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
          FREQ            =SIMP(statut='f',typ='R',max='**'),
          LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
-         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=03,into=("DEPL","VITE","ACCE") ),
-         EXCIT           =FACT(statut='o',min=01,max='**',
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=3,into=("DEPL","VITE","ACCE") ),
+         EXCIT           =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('VECT_ASSE','CHARGE'),
                    UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
            VECT_ASSE       =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_pres_c,vect_asse_gene ) ),
@@ -8136,7 +8347,7 @@ 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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8157,6 +8368,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="Réponse temporelle d un système à une excitation transitoire",
                     docu="U4.53.02-g1",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
 #         regles=(UN_PARMI('WILSON','DIFF_CENTRE','ADAPT'),),
          regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),),
          MODELE          =SIMP(statut='f',typ=modele ),
@@ -8166,18 +8378,18 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
          MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
          MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
-         NEWMARK         =FACT(statut='f',min=01,max=01,
+         NEWMARK         =FACT(statut='f',min=1,max=1,
            ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
            DELTA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
          ),
-         WILSON          =FACT(statut='f',min=01,max=01,
+         WILSON          =FACT(statut='f',min=1,max=1,
            THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
          ),
-         DIFF_CENTRE     =FACT(statut='f',min=01,max=01,
+         DIFF_CENTRE     =FACT(statut='f',min=1,max=1,
          ),
-         ADAPT           =FACT(statut='f',min=01,max=01,
+         ADAPT           =FACT(statut='f',min=1,max=1,
          ),
-         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            regles=(AU_MOINS_UN('DYNA_TRANS', 'DEPL_INIT', 'VITE_INIT',),
                    PRESENT_ABSENT('DYNA_TRANS', 'DEPL_INIT', 'VITE_INIT'),),
            DYNA_TRANS      =SIMP(statut='f',typ=dyna_trans ),
@@ -8193,7 +8405,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            DEPL_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
            VITE_INIT       =SIMP(statut='f',typ=(cham_no_depl_r) ),
          ),
-         EXCIT           =FACT(statut='f',min=01,max='**',
+         EXCIT           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('CHARGE','VECT_ASSE'),
                    EXCLUS('CHARGE','COEF_MULT'),
                    EXCLUS('FONC_MULT','COEF_MULT'),
@@ -8209,26 +8421,26 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            ACCE            =SIMP(statut='f',typ=fonction ),
            VITE            =SIMP(statut='f',typ=fonction ),
            DEPL            =SIMP(statut='f',typ=fonction ),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
          ),
-         AMOR_MODAL      =FACT(statut='f',min=01,max=01,
+         AMOR_MODAL      =FACT(statut='f',min=1,max=1,
            MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
            AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
            NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
            REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 #  ce n est pas le mot clesolveur standard
-         SOLVEUR         =FACT(statut='d',min=01,max=01,
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
            STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
            NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
          ),
-         INCREMENT       =FACT(statut='o',min=01,max='**',
+         INCREMENT       =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('LIST_INST','FONC_INST','PAS'),),
            LIST_INST       =SIMP(statut='f',typ=listr8 ), 
            FONC_INST       =SIMP(statut='f',typ=fonction ),       
@@ -8250,7 +8462,7 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
            PAS_CALCUL      =SIMP(statut='f',typ='I',defaut= 1 ),
          ),
-         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
            LIST_ARCH       =SIMP(statut='f',typ=listis ),
            PAS_ARCH        =SIMP(statut='f',typ='I' ),
@@ -8259,7 +8471,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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8279,6 +8491,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="Analyse mécanique dynamique non linéaire",docu="U4.53.01-f2",
+            UIinfo={"groupes":("Résolution",)},
          regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
                  UN_PARMI('NEWMARK','HHT', ),),
          MODELE          =SIMP(statut='o',typ=modele),
@@ -8296,7 +8509,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            DEPL            =SIMP(statut='f',typ=fonction),
            ACCE            =SIMP(statut='f',typ=fonction),
            VITE            =SIMP(statut='f',typ=fonction),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
@@ -8352,8 +8565,8 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                         "VISC_TAHERI",
                                         "CHABOCHE",
                                         "VISCOCHAB",
-                                        "VMIS_CIN1_CHAB",
-                                        "VMIS_CIN2_CHAB",
+                                        "VISC_CIN1_CHAB",
+                                        "VISC_CIN2_CHAB",
                                         "POLY_CFC",
                                         "LMARC",
                                         "ROUSSELIER",
@@ -8390,6 +8603,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                         "KIT_HM",
                                         "KIT_HHM",
                                         "KIT_THH",
+                                        "KIT_THV",
                                         "KIT_THM",
                                         "KIT_THHM",
                                         "VMIS_ASYM_LINE",
@@ -8399,19 +8613,18 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                         "CAM_CLAY_THM",
                                         "KIT_DDI",
                                      ) ),
-           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
-           VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
-           LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
-           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           ENDO_ISOT_BETON =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           MAZARS          =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           BETON_GRAD_EPSI =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           BARENBLATT      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          VMIS_ISOT_LINE  =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          VMIS_ECMI_TRAC  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+          VMIS_ECMI_LINE  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+          LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+          ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          ENDO_ISOT_BETON =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          MAZARS          =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          BARENBLATT      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           META_P_IL_PT       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           META_P_IL_RE       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           META_P_IL_PT_RE    =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
@@ -8435,59 +8648,60 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
           META_V_CL_PT       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
           META_V_CL_RE       =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
           META_V_CL_PT_RE    =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-           VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
-           CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
-           VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
-           VMIS_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
-           VMIS_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
-           POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
-           LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
-           VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
-           ROUSSELIER      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
-           ROUSS_PR        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           ROUSS_VISC      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
-           VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
-           COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-           ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-           ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
-           NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
-           VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
-           GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-           GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-           GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
-           DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
-           DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
-           DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
-           CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
-           CAM_CLAY        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           LAIGLE          =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
-           OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
-           GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
-           GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
-           GRANGER_FD       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
-           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
-           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
-           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
-           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
-           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
-           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+          VMIS_CINE_LINE  =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+          CHABOCHE        =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+          VISCOCHAB       =SIMP(statut='c',typ='I',defaut=28,into=(28,)),
+          VISC_CIN1_CHAB  =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+          VISC_CIN2_CHAB  =SIMP(statut='c',typ='I',defaut=14,into=(14,)),
+          POLY_CFC        =SIMP(statut='c',typ='I',defaut=1688,into=(1688,)),
+          LMARC           =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
+          VISC_TAHERI     =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+          ROUSSELIER      =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+          ROUSS_PR        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          ROUSS_VISC      =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+          VMIS_POU_LINE   =SIMP(statut='c',typ='I',defaut=9,into=(9,)),
+          VMIS_POU_FLEJOU =SIMP(statut='c',typ='I',defaut=9 ,into=(9,)),
+          COULOMB         =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+          ASSE_CORN       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+          ARME            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          NORTON_HOFF     =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          LEMAITRE        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          ZIRC_CYRA2      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          ZIRC_EPRI       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          ASSE_COMBU      =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
+          NADAI_B         =SIMP(statut='c',typ='I',defaut=34,into=(34,)),
+          VENDOCHAB       =SIMP(statut='c',typ='I',defaut=10,into=(10,)),
+          GRILLE_ISOT_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+          GRILLE_CINE_LINE=SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+          GRILLE_PINTO_MEN=SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+          DIS_CONTACT     =SIMP(statut='c',typ='I',defaut=6,into=(6,)),
+          DIS_CHOC        =SIMP(statut='c',typ='I',defaut=7,into=(7,)),
+          DIS_GOUJ2E_PLAS =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          DIS_GOUJ2E_ELAS =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          PINTO_MENEGOTTO =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+          CJS             =SIMP(statut='c',typ='I',defaut=16,into=(16,)),
+          CAM_CLAY        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          LAIGLE          =SIMP(statut='c',typ='I',defaut=8,into=(8,)),
+          OHNO            =SIMP(statut='c',typ='I',defaut=32,into=(32,)),
+          GRANGER_FP      =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+          GRANGER_FP_V    =SIMP(statut='c',typ='I',defaut=55,into=(55,)),
+          GRANGER_FD       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
+          BETON_DOUBLE_DP =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+          KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          KIT_THV         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
 
            RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',
                                  into=(
 # MECA
                                        "ELAS",
                                        "CJS",
-                                       "LAIGLE",
                                        "CAM_CLAY",
+                                       "LAIGLE",
                                        "ELAS_THM",
                                        "SURF_ETAT_NSAT",
                                        "SURF_ETAT_SATU",
@@ -8498,6 +8712,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                        "LIQU_SATU_GAT",
                                        "LIQU_GAZ_ATM",
                                        "LIQU_VAPE_GAZ",
+                                       "LIQU_VAPE",
                                        "LIQU_NSAT_GAT",
                                        "LIQU_GAZ",
 # THER
@@ -8528,10 +8743,11 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
            LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           LIQU_VAPE       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
            LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
            THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
@@ -8744,7 +8960,7 @@ into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8765,14 +8981,15 @@ into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","
 DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
                      fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
                      docu="U4.53.23-c",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
-         EXCIT           =FACT(statut='o',min=00,max=01,
+         EXCIT           =FACT(statut='o',max=1,
            INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
          ),
          OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8793,6 +9010,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
 DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
                      fr="Réponse dynamique transitoire en coordonnées généralisées par recombinaison modale",
                      docu="U4.53.21-f1",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
       regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'), 
               PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
          METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
@@ -8805,7 +9023,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc) ),
          MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_stat_acce) ,),
          
-         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
                    EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
            RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
@@ -8817,7 +9035,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
            VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
          ),
-         INCREMENT       =FACT(statut='o',min=01,max='**',
+         INCREMENT       =FACT(statut='o',min=1,max='**',
            INST_INIT       =SIMP(statut='f',typ='R' ),
            INST_FIN        =SIMP(statut='o',typ='R' ),
            PAS             =SIMP(statut='f',typ='R' ),
@@ -8829,7 +9047,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 ),
          ),
-         ARCHIVAGE       =FACT(statut='f',min=01,max=01,
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
            LIST_ARCH       =SIMP(statut='f',typ=listis ),
            PAS_ARCH        =SIMP(statut='f',typ='I' ),
@@ -8839,12 +9057,12 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
          RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
          LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
          
-         EXCIT           =FACT(statut='f',min=01,max='**',
+         EXCIT           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
                    PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
                    PRESENT_ABSENT('NUME_MODE','VECT_GENE','COEF_MULT'),
-                   PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                   EXCLUS('MULT_APPUI','CORR_STAT'),
                    PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
                    PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
            VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
@@ -8854,18 +9072,18 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            ACCE            =SIMP(statut='f',typ=fonction ),
            VITE            =SIMP(statut='f',typ=fonction ),
            DEPL            =SIMP(statut='f',typ=fonction ),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
            b_loca          =BLOC(condition= "DIRECTION != None",
              regles=(EXCLUS('NOEUD','GROUP_NO'),),
              NOEUD           =SIMP(statut='f',typ=no,max='**'),
              GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            ),
-           CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            D_FONC_DT       =SIMP(statut='f',typ=fonction ),
            D_FONC_DT2      =SIMP(statut='f',typ=fonction ),
          ),
-         CHOC            =FACT(statut='f',min=01,max='**',
+         CHOC            =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD_1','GROUP_NO_1' ),
                    PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
                    PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
@@ -8898,11 +9116,11 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
                DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
          ),
-         VERI_CHOC       =FACT(statut='f',min=01,max='**',
+         VERI_CHOC       =FACT(statut='f',min=1,max='**',
            STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
          ),
-         FLAMBAGE        =FACT(statut='f',min=01,max='**',
+         FLAMBAGE        =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
                    PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
                    PRESENT_ABSENT('NOEUD_2','GROUP_NO_2'),),
@@ -8923,7 +9141,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
            RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
          ),
-         ANTI_SISM       =FACT(statut='f',min=01,max='**',
+         ANTI_SISM       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
                    UN_PARMI('NOEUD_2','GROUP_NO_2'),
                    PRESENT_ABSENT('NOEUD_1','GROUP_NO_1'),
@@ -8939,19 +9157,19 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
          ),
-         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max='**',
+         RELA_EFFO_DEPL  =FACT(statut='f',min=1,max='**',
            NOEUD           =SIMP(statut='o',typ=no),
            SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
            RELATION        =SIMP(statut='o',typ=fonction ),
          ),
-         RELA_TRANSIS    =FACT(statut='f',min=01,max='**',
+         RELA_TRANSIS    =FACT(statut='f',min=1,max='**',
            NOEUD           =SIMP(statut='o',typ=no),
            SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
            RELATION        =SIMP(statut='o',typ=fonction ),
          ),
-         RELA_EFFO_VITE  =FACT(statut='f',min=01,max='**',
+         RELA_EFFO_VITE  =FACT(statut='f',min=1,max='**',
            NOEUD           =SIMP(statut='o',typ=no),
            SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
@@ -8970,16 +9188,16 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
                 TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
-         IMPRESSION      =FACT(statut='f',min=01,max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('TOUT','NIVEAU'),),
-           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           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' ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
  )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8999,6 +9217,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-b",
+            UIinfo={"groupes":("Impression",)},
       regles=(UN_PARMI('TOUT','CO'),),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
@@ -9007,7 +9226,7 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-b",
          FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
          PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-5"),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9026,12 +9245,13 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-b",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 EXEC_LOGICIEL=PROC(nom="EXEC_LOGICIEL",op= 183,fr="",docu="U7.00.01-a",
+            UIinfo={"groupes":("Impression",)},
          LOGICIEL        =SIMP(statut='f',typ='TXM' ),  
-         ARGUMENT        =FACT(statut='f',min=01,max='**',
+         ARGUMENT        =FACT(statut='f',min=1,max='**',
            NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9049,8 +9269,6 @@ EXEC_LOGICIEL=PROC(nom="EXEC_LOGICIEL",op= 183,fr="",docu="U7.00.01-a",
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-#def extr_mode_prod(FILTRE_MODE,TITRE,IMPRESSION ):
-#  Sait-on faire  
 def extr_mode_prod(FILTRE_MODE,**args):
   vale=FILTRE_MODE[0]['MODE']
   if AsType(vale) == mode_meca   : return mode_meca
@@ -9060,7 +9278,8 @@ def extr_mode_prod(FILTRE_MODE,**args):
 
 EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
                docu="U4.52.12-c",reentrant='n',
-         FILTRE_MODE     =FACT(statut='o',min=01,max='**',
+            UIinfo={"groupes":("Résolution",)},
+         FILTRE_MODE     =FACT(statut='o',min=1,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") ),
@@ -9068,8 +9287,7 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
            NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
            NUME_MODE_EXCLU =SIMP(statut='f',typ='I',max='**'),
            FREQ_MIN        =SIMP(statut='f',typ='R' ),
-           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN"
-                                  ,into=("MASS_EFFE_UN","MASS_GENE") ),
+           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 ),
@@ -9079,12 +9297,12 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
            ),    
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-         IMPRESSION      =FACT(statut='f',min=01,max=01,
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9109,6 +9327,7 @@ def extr_resu_prod(RESULTAT,**args):
   raise AsException("type de concept resultat non prevu")
 
 EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-c2",reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,          
                                                mode_acou,mode_stat_depl,mode_stat_acce,mode_stat_forc,evol_ther,evol_noli,   
                                                mult_elas,fourier_elas ) ),
@@ -9141,7 +9360,7 @@ EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-c2",
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9166,6 +9385,7 @@ def fact_grad_prod(MATR_ASSE,**args):
   raise AsException("type de concept resultat non prevu")
 
 FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-e",
+            UIinfo={"groupes":("Résolution",)},
                fr="Préconditionnement pour résolution par gradient conjugué",
                reentrant='n',
          MATR_ASSE       =SIMP(statut='o',
@@ -9175,7 +9395,7 @@ FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-e",
          NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9196,6 +9416,7 @@ FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-e",
 FACT_INTE_SPEC=OPER(nom="FACT_INTE_SPEC",op= 117,sd_prod=interspfact,
                     fr="Factorisation d une matrice interspectrale hermitienne",
                     docu="U4.36.04-e",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(ENSEMBLE('FREQ_FIN','NB_POIN'),),
 #  regle non indiquée dans la doc U         
          INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
@@ -9206,7 +9427,7 @@ FACT_INTE_SPEC=OPER(nom="FACT_INTE_SPEC",op= 117,sd_prod=interspfact,
          SUR_ECHAN       =SIMP(statut='f',typ='R',defaut= 1. ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9236,6 +9457,7 @@ def fact_ldlt_prod(MATR_ASSE,**args):
 
 FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en place ou hors place",
                docu="U4.55.01-f",reentrant='f',
+            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,
@@ -9253,7 +9475,7 @@ FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9274,9 +9496,10 @@ FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en
 # NEW 5.3.23
 FERMER=PROC(nom="FERMER",op=  10,fr=" ",
             docu="U4.12.02-a",
+            UIinfo={"groupes":("Gestion du travail",)},
          UNITE           =SIMP(statut='o',typ='I',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9296,6 +9519,7 @@ FERMER=PROC(nom="FERMER",op=  10,fr=" ",
 # ======================================================================
 FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
          docu="U4.11.02-f",
+            UIinfo={"groupes":("Gestion du travail",)},
          RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
                                statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
          PERFORMANCE     =SIMP(fr="provoque l'impression d'un résumé des mesures de temps ",
@@ -9304,7 +9528,7 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
                                statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="MESSAGE"),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9324,8 +9548,34 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
 # ======================================================================
 FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction,
                     docu="U4.35.02-c",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
 )  ;
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
+#            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.      
+# ======================================================================
+FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
+                fr="Définition d une fonction",reentrant = 'n',
+                regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
+                REEL = SIMP(typ = 'shell',max=1),
+                ENTIER = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
+) ;
 #& MODIF COMMANDE  DATE 17/09/2001   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -9351,7 +9601,7 @@ FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
                 ENTIER = SIMP(typ = 'shell',max=1),
                 COMPLEXE = SIMP(typ = 'shell',max=1),
 ) ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9372,13 +9622,14 @@ FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
 GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=tabl_fonc,
                     fr="Génération de la fonction temporelle à partir d une matrice interspectrale factorisée",
                     docu="U4.36.05-e",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          INTE_SPEC_FACT  =SIMP(statut='o',typ=interspfact ),
          INIT_ALEA       =SIMP(statut='f',typ='I',defaut= 12312745 ),
          NB_TIRAGE       =SIMP(statut='f',typ='I',defaut= 1 ),
          NB_POIN         =SIMP(statut='f',typ='I' ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/07/2002   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9399,12 +9650,13 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=tabl_fonc,
 GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op=  27,sd_prod=matr_asse_gene_r,
                fr="Generateur de matrice aleatoire",
                docu="U4.36.06",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
    MATR_MOYEN   = SIMP(statut='o', typ=matr_asse_gene_r),
    DELTA        = SIMP(statut='f', typ='R', defaut=0.1),
    INIT         = SIMP(statut='f', typ='TXM', into=("OUI","NON"),defaut="NON"),
 ) ;
    
-#& MODIF COMMANDE  DATE 16/07/2002   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9425,6 +9677,7 @@ GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op=  27,sd_prod=matr_asse_gene_r,
 GENE_VARI_ALEA=OPER(nom="GENE_VARI_ALEA",op=  28,sd_prod=table,
                fr="Generateur de variable aleatoire",
                docu="U4.36.07",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
    TYPE       = SIMP(statut='f', typ='TXM', into=("EXP_TRONQUEE", "EXPONENTIELLE", "GAMMA"), defaut="EXP_TRONQUEE"),
    VALE_MOY   = SIMP(statut='f', typ='R', defaut=0.),
    DELTA      = SIMP(statut='f', typ='R', defaut=0.1),
@@ -9433,7 +9686,7 @@ GENE_VARI_ALEA=OPER(nom="GENE_VARI_ALEA",op=  28,sd_prod=table,
    INIT       = SIMP(statut='f', typ='TXM', into=("OUI","NON"),defaut="NON"),
 ) ;
    
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9454,12 +9707,13 @@ GENE_VARI_ALEA=OPER(nom="GENE_VARI_ALEA",op=  28,sd_prod=table,
 IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
                  fr="Impression des charges mécaniques de type ddl imposés et relations linéaires entre les ddl",
                  docu="U7.04.31-c",
+            UIinfo={"groupes":("Fonction",)},
          FICHIER         =SIMP(statut='f',typ='TXM' ),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",) ),
          VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
          CHARGE          =SIMP(statut='o',typ=char_meca,max='**', ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9478,6 +9732,7 @@ IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-a",
+            UIinfo={"groupes":("Fonction",)},
          regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ',
                         'LIST_ORDRE' ),),
          UNITE_CLASSI    =SIMP(statut='o',typ='I' ),
@@ -9493,7 +9748,7 @@ IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-a",
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
                                    into=("RELATIF","ABSOLU") ),
          ),
-         IMPRESSION      =FACT(statut='f',min=01,max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO', ),),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
@@ -9501,7 +9756,7 @@ IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-a",
          ),
          AMOR            =SIMP(statut='o',typ='R',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9521,6 +9776,7 @@ IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-a",
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-f",
+            UIinfo={"groupes":("Impression",)},
              fr="Impression du contenu d un concept utilisateur (pour développeur)",
          regles=(UN_PARMI('CO','CHAINE', ),),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
@@ -9532,7 +9788,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-f",
          CHAINE          =SIMP(statut='f',typ='TXM'),
          POSITION        =SIMP(statut='f',typ='I',defaut=1),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9553,6 +9809,7 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-f",
 # RESPONSABLE MCOURTOI M.COURTOIS
 IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
                  docu="U4.33.01-e2",
+            UIinfo={"groupes":("Fonction",)},
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
          FORMAT          =SIMP(statut='f',typ='TXM',position='global'
                               ,into=("AGRAF","EXCEL","POSTSCRIPT","RESULTAT","COMMANDE","SEISME") ),
@@ -9588,7 +9845,7 @@ IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
            FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECTANGLE",into=("CARREE","RECTANGLE"),
                                  fr="Forme de la fenetre contenant le graphique" ),
          ),  
-         COURBE          =FACT(statut='o',min=01,max='**',fr="Définition de la courbe à tracer",
+         COURBE          =FACT(statut='o',min=1,max='**',fr="Définition de la courbe à tracer",
            regles=(UN_PARMI('FONCTION','LIST_RESU','TABLE','FONC_X','RESU_GENE'),),
            FONCTION        =SIMP(statut='f',typ=(fonction, fonction_c),
                                  fr="Fonction réelle ou complexe", ),
@@ -9658,7 +9915,7 @@ IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
             ), 
          ),
 )  ;
-#& MODIF COMMANDE  DATE 05/03/2002   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9678,6 +9935,7 @@ IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b2",
+            UIinfo={"groupes":("Fonction",)},
                     fr="Imprime le fichier de configuration de HOMARD.",
                     ang="Writes the configuration file for HOMARD.",
 #
@@ -9702,7 +9960,7 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b2",
 #
 # 5. LE TYPE DE TRAITEMENT :
 #
-         TRAITEMENT      =FACT(statut='o',min=01,max=01,
+         TRAITEMENT      =FACT(statut='o',min=1,max=1,
 #
 # 5.1. QUATRE CHOIX EXCLUSIFS :
 #
@@ -9881,7 +10139,7 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b2",
 #
 # 6. L'ANALYSE DU MAILLAGE
 #
-         ANALYSE         =FACT(statut='f',min=01,max=01,
+         ANALYSE         =FACT(statut='f',min=1,max=1,
                                fr="Analyse du maillage.",
                                ang="Mesh analysis.",
 #
@@ -9917,7 +10175,7 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b2",
          ),
 #
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9938,7 +10196,8 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b2",
 IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
                fr="Calcul du dommage subi par une structure soumise à une sollicitation de type aléatoire",
                docu="U4.91.02-c",
-         GENE            =FACT(statut='o',min=01,max='**',
+            UIinfo={"groupes":("Impression",)},
+         GENE            =FACT(statut='o',min=1,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',
@@ -9978,7 +10237,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
            INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9997,6 +10256,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-f",
+            UIinfo={"groupes":("Impression",)},
                  fr="Impression de caractéristiques d'objets JEVEUX (pour développeur)",
          ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
                                into=("DISQUE","MEMOIRE","REPERTOIRE",    
@@ -10026,13 +10286,13 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-f",
          b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
             CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V','L',' '),defaut=' '),  
          ),
-         IMPRESSION      =FACT(statut='f',min=01,max=01,
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            NOM             =SIMP(statut='f',typ='TXM' ),  
            UNITE           =SIMP(statut='f',typ='I'),  
          ),
          COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10052,6 +10312,7 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-f",
 # ======================================================================
 IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
                     docu="U7.04.33-d1",
+            UIinfo={"groupes":("Impression",)},
          MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
          FICHIER         =SIMP(statut='f',typ='TXM' ),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
@@ -10084,7 +10345,7 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
          ),
 
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10105,9 +10366,10 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
 IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
                   fr="Impression des matrices élémentaires et des matrices assemblées",
                   docu="U7.04.32-c",
+            UIinfo={"groupes":("Impression",)},
          regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
          
-         MATR_ELEM       =FACT(statut='f',min=01,max='**',
+         MATR_ELEM       =FACT(statut='f',min=1,max='**',
            FICHIER         =SIMP(statut='f',typ='TXM' ),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
                                  into=("IDEAS","RESULTAT") ),
@@ -10127,7 +10389,7 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
                                  into=("VALEUR","NOEUD","MAILLE") ),
            NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
          ),
-         MATR_ASSE       =FACT(statut='f',min=01,max='**',
+         MATR_ASSE       =FACT(statut='f',min=1,max='**',
            FICHIER         =SIMP(statut='f',typ='TXM' ),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
                                  into=("IDEAS","RESULTAT") ),
@@ -10149,7 +10411,7 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
            VALE_ZERO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10169,17 +10431,18 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
 # ======================================================================
 IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
                   docu="U7.04.11-c",
+            UIinfo={"groupes":("Impression",)},
          regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
                  PRESENT_PRESENT('INST_INIT','INST_FIN'),
                  PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
          MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
-         EXCIT           =FACT(statut='f',min=01,max='**',
+         EXCIT           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
            VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
            FONC_MULT       =SIMP(statut='f',typ=fonction ),
            COEF_MULT       =SIMP(statut='f',typ='R' ),
          ),
-         EXCIT_SOL       =FACT(statut='f',min=01,max='**',
+         EXCIT_SOL       =FACT(statut='f',min=1,max='**',
            DIRECTION       =SIMP(statut='o',typ='R',max='**'),
            FONC_SIGNAL     =SIMP(statut='f',typ=fonction ),
            NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
@@ -10194,7 +10457,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 05/03/2002   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10213,9 +10476,10 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g1",
+            UIinfo={"groupes":("Impression",)},
                fr="Impression du résultat d un calcul (différents formats)",
          MODELE          =SIMP(statut='f',typ=modele),
-         RESU            =FACT(statut='o',min=01,max='**',
+         RESU            =FACT(statut='o',min=1,max='**',
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
                                  into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
 
@@ -10314,7 +10578,7 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g1",
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 ) ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10334,6 +10598,7 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g1",
 # ======================================================================
 IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
                 docu="U4.52.01-f",
+            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 ) ),
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
@@ -10354,7 +10619,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val
          PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
          SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10374,6 +10639,7 @@ IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de val
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-d2",
+            UIinfo={"groupes":("Impression",)},
                 fr="Impression d un concept de type table",
          TABLE           =SIMP(statut='o',typ=table),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT", ),
@@ -10409,7 +10675,7 @@ IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-d2",
          TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",)),
          IMPR_FONCTION   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10428,12 +10694,13 @@ IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-d2",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
+            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 14/02/2001   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10452,6 +10719,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=-1,docu="U4.13.01-e",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
+            UIinfo={"groupes":("Modélisation",)},
                        fr=" ",
          sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
          NOM_AFNOR       =SIMP(statut='o',typ='TXM' ),  
@@ -10463,13 +10731,13 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
          TYPE_VALE       =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
          NOM_MATER       =SIMP(statut='o',typ='TXM' ),  
          UNITE           =SIMP(statut='f',typ='I',defaut= 32 ),  
-         EXTRACTION      =FACT(statut='f',min=01,max=99,
+         EXTRACTION      =FACT(statut='f',min=1,max=99,
            COMPOR          =SIMP(statut='o',typ='TXM' ),  
            TEMP_EVAL       =SIMP(statut='o',typ='R' ),  
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10489,6 +10757,7 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-a",
 # ======================================================================
 # RESPONSABLE G8BHHXD X.DESROCHES
 INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
+            UIinfo={"groupes":("Post traitements",)},
                   fr="Définition d une courbe sur un maillage 2D",reentrant='n',
 
          MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
@@ -10506,7 +10775,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
          GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 
-         DEFI_SEGMENT    =FACT(statut='f',min=01,max='**',
+         DEFI_SEGMENT    =FACT(statut='f',min=1,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),  
@@ -10517,7 +10786,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
            GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
          ),
 
-         DEFI_ARC        =FACT(statut='f',min=01,max='**',
+         DEFI_ARC        =FACT(statut='f',min=1,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'),               
@@ -10539,7 +10808,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
                                  into=("RELATIF","ABSOLU",) ),
          ),
 
-         DEFI_CHEMIN     =FACT(statut='f',min=01,max='**',
+         DEFI_CHEMIN     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
@@ -10550,7 +10819,7 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10570,12 +10839,13 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-e",
 # ======================================================================
 # RESPONSABLE G8BHHXD X.DESROCHES
 INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-e",
+            UIinfo={"groupes":("Post traitements",)},
                   fr="Définition d un chemin sur un maillage 3D",reentrant='n',
          MAILLAGE        =SIMP(statut='o',typ=maillage),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-         DEFI_SEGMENT    =FACT(statut='o',min=01,max='**',
+         DEFI_SEGMENT    =FACT(statut='o',min=1,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),  
@@ -10588,7 +10858,7 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-e",
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10615,6 +10885,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
                 fr="Lire un champ dans un fichier et le stocker dans un concept.",
                 ang="To read a field in a file and to save it in a concept.",
                 docu="U7.02.02-b2",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
 #
 # 1. Le maillage support du champ
 #
@@ -10684,7 +10955,7 @@ 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 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10705,6 +10976,7 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
 LIRE_FONCTION=OPER(nom="LIRE_FONCTION",op=  83,sd_prod=fonction,
                    fr="Lecture d une fonction dans un fichier ",
                    docu="U4.32.02-f1",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          UNITE           =SIMP(statut='o',typ='I' ),
          NOM_PARA        =SIMP(statut='f',typ='TXM',
                                into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
@@ -10722,7 +10994,7 @@ LIRE_FONCTION=OPER(nom="LIRE_FONCTION",op=  83,sd_prod=fonction,
          INFO            =SIMP(statut='f',typ='I',defaut= 2,into=( 1 , 2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10743,6 +11015,7 @@ LIRE_FONCTION=OPER(nom="LIRE_FONCTION",op=  83,sd_prod=fonction,
 LIRE_INTE_SPEC=OPER(nom="LIRE_INTE_SPEC",op= 116,sd_prod=tabl_intsp,
                     fr="Lecture sur un fichier externe de  fonctions complexes pour créer une matrice interspectrale",
                     docu="U4.36.01-f2",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          UNITE           =SIMP(statut='o',typ='I' ),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
          NOM_PARA        =SIMP(statut='f',typ='TXM',
@@ -10755,7 +11028,7 @@ LIRE_INTE_SPEC=OPER(nom="LIRE_INTE_SPEC",op= 116,sd_prod=tabl_intsp,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10778,6 +11051,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
                    fr="Lecture d'un fichier de maillage",
                    ang="Readings of a mesh file",
                    docu="U4.21.01-g1",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
 #
          UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
 #
@@ -10812,7 +11086,7 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 #
 )  ;
-#& MODIF COMMANDE  DATE 16/07/2002   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10827,13 +11101,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="Restitution au format MISS3D d une évolution harmonique ou transitoire",
                   docu="U7.02.31-c",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
          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 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10854,6 +11129,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=" ",
                  docu="U7.02.11-a",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
          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",)),
@@ -10872,7 +11148,7 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 16/07/2002   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10892,6 +11168,7 @@ def lire_resu_prod(TYPE_RESU,**args):
   raise AsException("type de concept resultat non prevu")
 
 LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d2",reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
                fr="Lecture de champs aux noeuds ou par éléments aux noeuds sur un fichier IDEAS ou EnSight",
 
 
@@ -11004,7 +11281,10 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d2",
          ),
          b_mode_meca     =BLOC(condition="TYPE_RESU=='MODE_MECA'",
            NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
-                                 into=("DEPL",) ),
+                                 into=("DEPL",) 
+                                                 ),
+           MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,min=1,max=1,),
+           MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,min=1,max=1,),
          ),
          b_dyna          =BLOC(condition="((TYPE_RESU=='DYNA_TRANS') or (TYPE_RESU=='DYNA_HARMO') or\
                                           (TYPE_RESU=='HARM_GENE')) and (DATASET_58=='NON')",
@@ -11031,7 +11311,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d2",
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 08/08/2002   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11058,6 +11338,7 @@ def lire_table_prod(TYPE_TABLE,**args):
   raise AsException("type de concept resultat non prevu")
 LIRE_TABLE=OPER(nom="LIRE_TABLE",op=29,sd_prod=lire_table_prod,
                 docu="U7.02.03",fr="Lecture d un concept de type table",
+            UIinfo={"groupes":("Maillage",)},
          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),
@@ -11070,7 +11351,7 @@ LIRE_TABLE=OPER(nom="LIRE_TABLE",op=29,sd_prod=lire_table_prod,
          SEPARATEUR      =SIMP(statut='o',typ='TXM'),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          )  ;
-#& MODIF COMMANDE  DATE 16/07/2002   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 08/10/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11112,8 +11393,8 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=-24,sd_prod=macr_adap_mail_prod,
 #
 # 2. Version de HOMARD
 #
-         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_3",
-                               into=("V5_3", "V5_N", "V5_N_PERSO"),
+         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_5",
+                               into=("V5_5", "V5_N", "V5_N_PERSO"),
                            fr="Version de HOMARD",
                            ang="HOMARD release"),
 #
@@ -11323,7 +11604,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=-24,sd_prod=macr_adap_mail_prod,
          MENAGE         = SIMP(statut='f',typ='TXM',into=("MAILLAGE","SOLUTION","TOUT") ),
 #
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11354,11 +11635,13 @@ def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,CHARGE,RESU
 MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_prod,
                       fr=" ",
                       docu="U4.CF.20-b1",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
          regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
 
          TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
                                into=("SAIN",
                                      "FISS_COUDE",
+                                     "FISS_AXIS_DEB",
                                      "SOUS_EPAIS_COUDE"
                                      ) ),
 
@@ -11386,6 +11669,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
          PRES_REP        =FACT(statut='f',min=1,max=1,
            PRES            =SIMP(statut='o',typ='R' ),
            EFFE_FOND_P1    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRES_LEVRE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
            FONC_MULT       =SIMP(statut='f',typ=fonction ),
          ),
 
@@ -11527,7 +11811,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11548,6 +11832,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
 # RESPONSABLE F1BHHAJ J.ANGLES
 MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
                       fr=" ",docu="U4.CF.10-b1",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
 
          regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
 
@@ -11673,7 +11958,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11704,6 +11989,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=-17,sd_prod=macr_aspic_calc_prod,
                     fr=" ",docu="U4.PC.20-b2",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
          regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
 
          TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
@@ -11739,6 +12025,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            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),
          ),
 
@@ -11890,7 +12177,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
          TITRE           =SIMP(statut='f',typ='TXM'),
 )  ;
 # debut entete
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11911,6 +12198,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
 # RESPONSABLE F1BHHAJ J.ANGLES
 MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='n',
                     fr=" ",docu="U4.PC.10-b1",
+            UIinfo={"groupes":("Outils métier",)},
 
          EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
            LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
@@ -11983,7 +12271,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='
 
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12004,6 +12292,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='
 MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
                     fr="Définition d un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
                     docu="U4.65.01-e1",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),),
          BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
          MATR_RIGI       =SIMP(statut='f',typ=matr_asse_depl_r ),
@@ -12013,7 +12302,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
          OPTION          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","RITZ",
                           "DIAG_MASS") ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12032,6 +12321,7 @@ MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.62.01-f1",reentrant='f',
+            UIinfo={"groupes":("Matrices/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'),),
@@ -12061,7 +12351,7 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.6
            INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12081,8 +12371,9 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.6
 # ======================================================================
 MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
                       fr=" ",docu="U4.GJ.20-a",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
          MAILLAGE        =SIMP(statut='o',typ=maillage),
-         DEFI_GOUJ       =FACT(statut='o',min=01,max=01,
+         DEFI_GOUJ       =FACT(statut='o',min=1,max=1,
            TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
            VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
                                                             "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")),
@@ -12093,15 +12384,15 @@ MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
            FILET_JEU_HTA   =SIMP(statut='f',typ='I',max='**'),  
            FILET_JEU_HTB   =SIMP(statut='f',typ='I',max='**'),  
          ),
-         EXCIT           =FACT(statut='o',min=01,max=01,
+         EXCIT           =FACT(statut='o',min=1,max=1,
            TYPE_BLOCAGE    =SIMP(statut='o',typ='I',defaut=2,into=(1,2,3)),
            FORCE_GOUJ      =SIMP(statut='o',typ='R'),  
          ),
-         CALCUL          =FACT(statut='o',min=01,max=01,
+         CALCUL          =FACT(statut='o',min=1,max=1,
            TYPE_CALCUL     =SIMP(statut='o',typ='TXM',into=("ELASTIQUE","ELASTOPLASTIQUE")),
            NB_INCR         =SIMP(statut='o',typ='I'),  
          ),
-         IMPRESSION      =FACT(statut='f',min=01,max=01,
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="TABLE",    
                                  into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","TABLE")),
            VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
@@ -12109,7 +12400,7 @@ MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
          TITRE           =SIMP(statut='f',typ='TXM'),  
          INFO            =SIMP(statut='f',typ='I',defaut=1 ,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 03/10/2001   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12129,6 +12420,7 @@ MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
 # ======================================================================
 MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
                       fr=" ",docu="U4.GJ.10-a",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
          EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
            LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
            UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
@@ -12159,7 +12451,7 @@ MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 16/07/2002   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 08/10/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12188,8 +12480,8 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=-24,docu="U7.03.02-b2",
 #
 # 2. Version de HOMARD
 #
-         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_3",
-                               into=("V5_3", "V5_N","V5_N_PERSO"),
+         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V5_5",
+                               into=("V5_5", "V5_N","V5_N_PERSO"),
                            fr="Version de HOMARD",
                            ang="HOMARD release"),
 #
@@ -12238,7 +12530,7 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=-24,docu="U7.03.02-b2",
                           ang="Overlapping checking." ),
 #
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12268,6 +12560,7 @@ def macr_lign_coupe_prod(self,LIGN_COUPE,**args):
 
 MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=macr_lign_coupe_prod,
                        docu="",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
                        fr="extraction d un résultat sur des lignes de coupes définies par 2 points et un intervalle",
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther) ),
          b_meca        =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique",
@@ -12285,7 +12578,47 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=macr_
            TABLE           =SIMP(statut='o',typ=(table,CO)), 
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
+#            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 Macro.macr_recal_ops import macr_recal_ops
+
+def macr_recal_prod(self,**args ):
+  return listr8
+
+MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,docu="U4.73.02",
+            UIinfo={"groupes":("Résultats et champs",)},
+                      sd_prod=macr_recal_prod,
+                      fr="Réalise le recalage de modèles Aster",
+         UNITE_ESCL      =SIMP(statut='o',typ='I'),
+         RESU_EXP        =SIMP(statut='o',typ=assd,min = 1, max='**'),
+         RESU_CALC       =SIMP(statut='o',typ=assd,min = 1, max='**'),
+         LIST_PARA       =SIMP(statut='o',typ=assd,min = 1, max='**'),
+         ITER_MAXI       =SIMP(statut='f',typ='I',defaut=10),
+         RESI_GLOB_RELA  =SIMP(statut='f',typ='R',defaut=1.E-3),
+         UNITE_RESU      =SIMP(statut='f',typ='I',defaut=91),
+         PARA_DIFF_FINI  =SIMP(statut='f',typ='R',defaut=0.001),
+         GRAPHIQUE       =FACT(statut='d',min=1,max=1,
+           UNITE           =SIMP(statut='f',typ='I',defaut=90),
+           INTERACTIF      =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON")),)
+)  ;
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12309,13 +12642,14 @@ from Macro.macro_cara_poutre_ops import macro_cara_poutre_ops
 
 MACRO_CARA_POUTRE=MACRO(nom="MACRO_CARA_POUTRE",op=macro_cara_poutre_ops,sd_prod=tabl_cara_geom,
                        docu="U4.42.02-d1",reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
                        fr="caractéristiques d'une section transversale de poutre à partir d'un maillage 2D",
          regles=(EXCLUS('SYME_X','GROUP_MA_BORD'),
                  EXCLUS('SYME_Y','GROUP_MA_BORD'),
                  ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 20 ),  
-         SYME_X          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-         SYME_Y          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         SYME_X          =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         SYME_Y          =SIMP(statut='f',typ='TXM',into=("OUI",)),
          GROUP_MA_BORD   =SIMP(statut='f',typ=grma,max='**'),
          GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          ORIG_INER       =SIMP(statut='f',typ='R',max='**',defaut=(0.E+0,0.E+0)),  
@@ -12326,7 +12660,7 @@ MACRO_CARA_POUTRE=MACRO(nom="MACRO_CARA_POUTRE",op=macro_cara_poutre_ops,sd_prod
          LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12346,6 +12680,7 @@ MACRO_CARA_POUTRE=MACRO(nom="MACRO_CARA_POUTRE",op=macro_cara_poutre_ops,sd_prod
 # ======================================================================
 MACRO_CHAR_F_U=MACRO(nom="MACRO_CHAR_F_U",op=-15,sd_prod=char_meca,
                     fr=" ",docu="U4.72.07-a",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          CHARGE          =SIMP(statut='o',typ=char_meca),
@@ -12354,7 +12689,7 @@ MACRO_CHAR_F_U=MACRO(nom="MACRO_CHAR_F_U",op=-15,sd_prod=char_meca,
          NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="APRES",into=("NORMAL","APRES")),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12383,6 +12718,7 @@ def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
   raise AsException("type de concept resultat non prevu")
 
 MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro_elas_mult_prod,docu="U4.51.02-d2",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
          regles=(UN_PARMI('CHAR_MECA_GLOBAL','CHAR_CINE_GLOBAL','LIAISON_DISCRET', ),),
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
@@ -12433,7 +12769,7 @@ 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 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12452,6 +12788,7 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 MACRO_MADMACS=MACRO(nom="MACRO_MADMACS",op=-9,docu="U7.03.21-c",
+            UIinfo={"groupes":("Résolution",)},
                     fr="Impression au format IDEAS des données pour chainage entre Code_Aster et MADMACS",
          regles=(UN_PARMI('MATR_ELEM_RIGI','MATR_RIGI'),
                  UN_PARMI('MATR_ELEM_MASS','MATR_MASS'),
@@ -12470,7 +12807,7 @@ MACRO_MADMACS=MACRO(nom="MACRO_MADMACS",op=-9,docu="U7.03.21-c",
          MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r),
          MODE_MECA       =SIMP(statut='o',typ=mode_meca),
          NMAX_MODE       =SIMP(statut='f',typ='I',defaut=10),  
-         INTERFACE       =FACT(statut='f',min=01,max='**',
+         INTERFACE       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO'),
                    UN_PARMI('DDL_ACTIF','MASQUE'),),
            NOM             =SIMP(statut='o',typ='TXM'),  
@@ -12481,7 +12818,7 @@ MACRO_MADMACS=MACRO(nom="MACRO_MADMACS",op=-9,docu="U7.03.21-c",
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12510,6 +12847,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=-13,docu="U4.66.11-c1",sd_prod=macro_matr_ajou_prod,
+            UIinfo={"groupes":("Matrices/vecteurs",)},
       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'),
@@ -12583,7 +12921,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-c1",sd_prod=ma
          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/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12627,6 +12965,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,docu="U4.61.21-d1",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
                       sd_prod=macro_matr_asse_prod,
                       fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
          MODELE          =SIMP(statut='o',typ=modele),
@@ -12659,7 +12998,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.2
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 11/06/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12681,6 +13020,7 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.2
 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=" ",docu="U7.03.11-a",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          OPTION          =FACT(statut='o',min=1,max=1,
            regles=(UN_PARMI('TOUT','MODULE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
@@ -12693,7 +13033,7 @@ MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,fr=" ",docu="U7.03.
          UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
          UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),  
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12721,12 +13061,30 @@ def macro_mode_meca_prod(self,MATR_A,MATR_B,**args ):
 
 MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=macro_mode_meca_prod,
                      docu="U4.52.02-d1",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          MATR_A          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
          MATR_B          =SIMP(statut='o',typ=(CO,matr_asse_depl_r) ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 #  ce mot cle ne devrait il pas etre dans calc_freq  
          METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",    
                                into=("TRI_DIAG","JACOBI","SORENSEN",) ),
+         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,max=1,
@@ -12743,17 +13101,6 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=macro
            NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),  
            NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),  
            PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),  
-           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-10 ),  
-           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12 ),  
-           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5 ),  
-           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30 ),  
-           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.4E-10 ),  
-           NMAX_ITER_BATHE =SIMP(statut='f',typ='I' ,defaut= 12 ),  
-           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2 ),  
-           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12 ),  
-           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E0 ),  
-           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20 ),  
-           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717 ),  
            SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
            STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
          ),
@@ -12782,7 +13129,7 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=macro
                                  into=("MASS_EFFE_UN","MASS_GENE",) ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12814,17 +13161,18 @@ def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,**args ):
   return None
 
 MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.11-d1",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
                       sd_prod=macro_proj_base_prod,
                       fr="Projection des matrices et/ou vecteurs assemblés sur une base de vecteurs",
          BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
          NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
-         MATR_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+         MATR_ASSE_GENE  =FACT(statut='f',min=1,max='**',
            MATRICE         =SIMP(statut='o',typ=(CO,matr_asse)),
            MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
            MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
            PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
          ),
-         VECT_ASSE_GENE  =FACT(statut='f',min=01,max='**',
+         VECT_ASSE_GENE  =FACT(statut='f',min=1,max='**',
            VECTEUR         =SIMP(statut='o',typ=(CO,vect_asse)),
            TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
            VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
@@ -12832,7 +13180,7 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.1
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12851,12 +13199,13 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.1
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 MAJ_CATA=PROC(nom="MAJ_CATA",op=20,docu="U4.15.01-e1",
+            UIinfo={"groupes":("Gestion du travail",)},
               fr="Compilation des catalogues de commandes et d éléments",
 
-         ELEMENT         =FACT(statut='f',min=01,max=01,),
+         ELEMENT         =FACT(statut='f',min=1,max=1,),
 
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12866,6 +13215,7 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20,docu="U4.15.01-e1",
 # RESPONSABLE VABHHTS J.PELLET
 MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
                    fr="Analyse mécanique statique linéaire",docu="U4.51.01-g1",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
                    regles=(EXCLUS("INST","LIST_INST"),
                            AU_MOINS_UN('CHAM_MATER','CARA_ELEM',), ),
          MODELE          =SIMP(statut='o',typ=modele),
@@ -12921,7 +13271,7 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 17/06/2002   AUTEUR GNICOLAS G.NICOLAS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12941,6 +13291,7 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
 MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.xx-a",
+            UIinfo={"groupes":("Fonction",)},
                     fr="Mémorisation des noms des concepts dérivés.",
                     ang="Memorisation of the names of the sensitive concepts.",
 
@@ -12980,7 +13331,7 @@ MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.xx-a",
                        ang="Name of the one fonction"),
 
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13001,29 +13352,30 @@ MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.xx-a",
 MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
                     fr="Modes propres d une structure à répétitivité cyclique à partir d une base de modes propres réels",
                     docu="U4.52.05-e",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          BASE_MODALE     =SIMP(statut='o',typ=base_modale ),
          NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
          NB_SECTEUR      =SIMP(statut='o',typ='I' ),
-         LIAISON         =FACT(statut='o',min=01,max=01,
+         LIAISON         =FACT(statut='o',min=1,max=1,
            DROITE          =SIMP(statut='o',typ='TXM' ),
            GAUCHE          =SIMP(statut='o',typ='TXM' ),
            AXE             =SIMP(statut='f',typ='TXM' ),
          ),
-         VERI_CYCL       =FACT(statut='f',min=01,max=01,
+         VERI_CYCL       =FACT(statut='f',min=1,max=1,
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF",) ),
            DIST_REFE       =SIMP(statut='f',typ='R' ),
          ),
-         CALCUL          =FACT(statut='o',min=01,max=01,
+         CALCUL          =FACT(statut='o',min=1,max=1,
            TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            NB_DIAM         =SIMP(statut='f',typ='I',max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
                                 ,into=("PLUS_PETITE","CENTRE","BANDE") ),
            b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
-             FREQ            =SIMP(statut='o',typ='R',min=01,max=01),
+             FREQ            =SIMP(statut='o',typ='R',min=1,max=1),
            ),
            b_bande       =BLOC(condition = "OPTION == 'BANDE'",
-             FREQ            =SIMP(statut='o',typ='R',min=02,max=02),
+             FREQ            =SIMP(statut='o',typ='R',min=2,max=2),
            ),
 #  NMAX_FREQ n a-t-il pas un sens qu avec OPTION CENTRE                                
            NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
@@ -13033,7 +13385,7 @@ 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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13062,6 +13414,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="Modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
                      docu="U4.52.04-g1",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          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 ),
@@ -13117,7 +13470,7 @@ 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',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13146,11 +13499,29 @@ def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
 MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
                       fr="Modes propres par itérations simultanées ; valeurs propres et modes propres réels ou complexes",
                       docu="U4.52.03-f2",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
          MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
          MATR_C          =SIMP(statut='f',position='global',typ=matr_asse_depl_r ),
          METHODE         =SIMP(statut='f',position='global',typ='TXM',defaut="SORENSEN",
                                into=("TRI_DIAG","JACOBI","SORENSEN") ),
+         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 ),
+         ),
          TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",
                                into=("MODE_FLAMB","DYNAMIQUE"),
                                fr="Type d analyse" ),
@@ -13179,23 +13550,6 @@ 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' ),
-             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
-               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
-               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
-               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
-               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
-             ),
-             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
-               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
-               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
-               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
-               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
-             ),
-             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
-               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
-               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
-               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
-             ),
              NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
              NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
              PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
@@ -13227,23 +13581,6 @@ 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' ),
-             b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
-               PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
-               NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
-               PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
-               NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
-             ),
-             b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
-               PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
-               NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
-               PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
-               NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
-             ),
-             b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
-               PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
-               NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
-               PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
-             ),
              NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
              NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
              PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
@@ -13262,7 +13599,7 @@ 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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13288,10 +13625,11 @@ def mode_stat_prod(MODE_STAT,FORCE_NODALE,PSEUDO_MODE,**args):
 MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
                    fr="Calcul de modes statiques",
                    docu="U4.52.14-f2",reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
          MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
          MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
                regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
-         MODE_STAT       =FACT(statut='f',min=01,max='**',
+         MODE_STAT       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
                    UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
@@ -13301,7 +13639,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
            AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
            SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
          ),
-         FORCE_NODALE    =FACT(statut='f',min=01,max='**',
+         FORCE_NODALE    =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
                    UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",), ),
@@ -13311,7 +13649,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
            AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
            SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
          ),
-         PSEUDO_MODE       =FACT(statut='f',min=01,max='**',
+         PSEUDO_MODE       =FACT(statut='f',min=1,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),
@@ -13330,7 +13668,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13350,6 +13688,7 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
 # ======================================================================
 MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
                       docu="U4.66.21-c",reentrant='f',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
 #  la commande modi_base _modale : reentrant = f ou o                      
          regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
          BASE            =SIMP(statut='o',typ=mode_meca ),
@@ -13361,39 +13700,47 @@ 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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            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.      
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
 # ======================================================================
 # RESPONSABLE G8BHHXD X.DESROCHES
 MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
                    fr="Modification de la connectivité de groupes de mailles 2D ou 3D affectées à la modélisation de contact",
                    docu="U4.23.04-d1",reentrant='o',
-      regles=(UN_PARMI('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
-                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE'),
+            UIinfo={"groupes":("Maillage",)},
+      regles=(AU_MOINS_UN('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'TRANSLATION','ROTATION','MODI_BASE','ECHELLE',),
+              PRESENT_ABSENT('ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('DEFORME','ORIE_CONTACT','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('EQUE_PIQUA','ORIE_CONTACT','DEFORME','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_CONTACT','DEFORME','EQUE_PIQUA',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('PLAQ_TUBE','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE',),
+              PRESENT_ABSENT('MODI_MAILLE','ORIE_CONTACT','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE',),
               EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
-              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),),
+              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),
+              EXCLUS('ROTATION','MODI_BASE'),),
          MAILLAGE        =SIMP(statut='o',typ=maillage ),
 
-         ORIE_CONTACT    =FACT(statut='f',min=01,max=01,
+         ORIE_CONTACT    =FACT(statut='f',min=1,max=1,
            GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
          ),
 
-         DEFORME         =FACT(statut='f',min=01,max=01,
+         DEFORME         =FACT(statut='f',min=1,max=1,
            OPTION          =SIMP(statut='o',typ='TXM',into=("TRAN","TRAN_APPUI") ),
            DEPL            =SIMP(statut='o',typ=cham_no_depl_r ),
         b_deform        =BLOC(condition = "OPTION=='TRAN_APPUI'", 
@@ -13401,12 +13748,13 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
            GROUP_NO_STRU = SIMP(statut='o',typ=grno,max='**' ),),
          ),
 
-         EQUE_PIQUA      =FACT(statut='f',min=01,max=01,
+         EQUE_PIQUA      =FACT(statut='f',min=1,max=1,
            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' ),
@@ -13416,37 +13764,37 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
            RAFF_MAIL       =SIMP(statut='o',typ='TXM' ),
            X_MAX           =SIMP(statut='o',typ='R' ),
          ),
-         ORIE_PEAU_2D    =FACT(statut='f',min=01,max='**',
+         ORIE_PEAU_2D    =FACT(statut='f',min=1,max='**',
            GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
          ),
-         ORIE_PEAU_3D    =FACT(statut='f',min=01,max='**',
+         ORIE_PEAU_3D    =FACT(statut='f',min=1,max='**',
            GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
          ),
-         ORIE_NORM_COQUE =FACT(statut='f',min=01,max='**',
+         ORIE_NORM_COQUE =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('NOEUD','GROUP_NO'),
                    PRESENT_PRESENT('NOEUD','VECT_NORM'),
                    PRESENT_PRESENT('GROUP_NO','VECT_NORM'),),
            GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
-           VECT_NORM       =SIMP(statut='f',typ='R',max=03),
+           VECT_NORM       =SIMP(statut='f',typ='R',max=3),
            NOEUD           =SIMP(statut='f',typ=no),
            GROUP_NO        =SIMP(statut='f',typ=grno),
          ),
          b_modele        =BLOC(condition = "(ORIE_PEAU_2D != None) or (ORIE_PEAU_3D != None) or(ORIE_NORM_COQUE != None)",
            MODELE          =SIMP(statut='o',typ=modele ),
          ),
-         PLAQ_TUBE       =FACT(statut='f',min=01,max=01,
+         PLAQ_TUBE       =FACT(statut='f',min=1,max=1,
            DEXT            =SIMP(statut='o',typ='R' ),
            EPAIS           =SIMP(statut='o',typ='R' ),
            L_TUBE_P1       =SIMP(statut='o',typ='R' ),
            AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
            COUTURE         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",)  ),
          ),
-         TUBE_COUDE      =FACT(statut='f',min=01,max=01,
+         TUBE_COUDE      =FACT(statut='f',min=1,max=1,
            ANGLE           =SIMP(statut='o',typ='R' ),
            R_CINTR         =SIMP(statut='o',typ='R' ),
            L_TUBE_P1       =SIMP(statut='o',typ='R' ),
          ),
-         MODI_MAILLE     =FACT(statut='f',min=01,max=01,
+         MODI_MAILLE     =FACT(statut='f',min=1,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,max='**'),
@@ -13454,9 +13802,23 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
            GROUP_NO_FOND   =SIMP(statut='f',typ=grno,max='**'),
            NOEUD_FOND      =SIMP(statut='f',typ=no,max='**'),
          ),
+         MODI_BASE       =FACT(statut='f',min=1,max=1,
+           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',min=1,max=1),        
+         TRANSLATION     =SIMP(statut='f',typ='R',min=2,max=3),
+         ROTATION        =FACT(statut='f',min=1,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),
+         ),
+
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 15/01/2002   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13476,6 +13838,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
 # ======================================================================
 MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=obstacle,
                    fr=" ",docu="U4.44.22-a",reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
       regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),
               PRESENT_PRESENT('TUBE_NEUF','TABL_USURE'),
               PRESENT_PRESENT('V_USUR_TUBE','V_USUR_OBST'),),
@@ -13491,7 +13854,7 @@ MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=obstacle,
          PERCEMENT       =SIMP(statut='f',typ='R',defaut=1),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13523,6 +13886,7 @@ def modi_repere_prod(RESULTAT,**args):
   raise AsException("type de concept resultat non prevu")
 
 MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.01-a3",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
                     fr="Impression des resultats dans un repere cylindrique",
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,mode_meca,
                                                evol_noli,mult_elas,
@@ -13543,7 +13907,7 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.0
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
 
-         MODI_CHAM       =FACT(statut='o',min=01,max='**',
+         MODI_CHAM       =FACT(statut='o',min=1,max='**',
            TYPE_CHAM       =SIMP(statut='o',typ='TXM', max=1,    
                                  into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),),
            NOM_CHAM        =SIMP(statut='o',typ='TXM',max=1 ),  
@@ -13568,7 +13932,7 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.0
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13595,6 +13959,7 @@ def norm_mode_prod(MODE,**args ):
 NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
                fr="Normalisation de modes propres",
                docu="U4.52.11-e",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
          regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),),
          MODE       =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
          NORME      =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
@@ -13606,7 +13971,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
          AVEC_CMP   =SIMP(statut='f',typ='TXM',max='**'),
          SANS_CMP   =SIMP(statut='f',typ='TXM',max='**'),
          MASS_INER  =SIMP(statut='f',typ=tabl_mass_iner ),
-         MODE_SIGNE =FACT(statut='f',min=00,max=01,fr="Imposer un signe sur une des composantes des modes",
+         MODE_SIGNE =FACT(statut='f',max=1,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"),
@@ -13615,7 +13980,7 @@ 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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13635,6 +14000,7 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-g1",reentrant='n',
+            UIinfo={"groupes":("Matrices/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',typ=(matr_elem_depl_r ,matr_elem_depl_c,
@@ -13655,7 +14021,7 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-g1",reentrant
          ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13676,6 +14042,7 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-g1",reentrant
 NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
                    fr="Etablissement de la numérotation des ddl d un modèle établi en coordonnées généralisées",
                     docu="U4.65.03-e1",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=UN_PARMI('MODELE_GENE','BASE'),
          MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
              b_modele_gene     =BLOC(condition = "MODELE_GENE != None",
@@ -13687,7 +14054,7 @@ 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 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13708,6 +14075,7 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
 POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
                     fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
                     docu="U4.84.04-d",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
          INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
          NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
@@ -13723,7 +14091,7 @@ POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
            NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
            NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
          ),  
-         DEPASSEMENT     =FACT(statut='f',min=01,max='**',
+         DEPASSEMENT     =FACT(statut='f',min=1,max='**',
            fr="Loi de dépassement d un seuil pendant une durée donnée",
            regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
            VALE_MIN        =SIMP(statut='f',typ='R' ),  
@@ -13731,21 +14099,21 @@ POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
            PAS             =SIMP(statut='f',typ='R' ),  
            DUREE           =SIMP(statut='f',typ='R',defaut= 1. ),  
          ),
-         RAYLEIGH        =FACT(statut='f',min=01,max='**',
+         RAYLEIGH        =FACT(statut='f',min=1,max='**',
            fr="Densité de probabilité de pic positif, loi adaptée à des signaux à bande étroite",
            regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
            VALE_MIN        =SIMP(statut='f',typ='R' ),  
            VALE_MAX        =SIMP(statut='f',typ='R' ),  
            PAS             =SIMP(statut='f',typ='R' ),  
          ),
-         GAUSS           =FACT(statut='f',min=01,max='**',
+         GAUSS           =FACT(statut='f',min=1,max='**',
            fr="Densité de probabilité de pic positif, loi normale adaptée à des signaux large bande",
            regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
            VALE_MIN        =SIMP(statut='f',typ='R' ),  
            VALE_MAX        =SIMP(statut='f',typ='R' ),  
            PAS             =SIMP(statut='f',typ='R' ),  
          ),
-         VANMARCKE       =FACT(statut='f',min=01,max='**',
+         VANMARCKE       =FACT(statut='f',min=1,max='**',
            fr="Probabilité de non dépassement de seuil pendant une durée donnée (analyse sismique)",
            regles=(ENSEMBLE('VALE_MIN','VALE_MAX'),),
            VALE_MIN        =SIMP(statut='f',typ='R' ),  
@@ -13757,7 +14125,7 @@ POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13778,9 +14146,10 @@ POST_DYNA_ALEA=OPER(nom="POST_DYNA_ALEA",op= 132,sd_prod=tabl_post_alea,
 POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
                       fr="Post-traitements en coordonnées généralisées issus de DYNA_TRAN_MODAL",
                       docu="U4.84.02-d",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
         regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
          RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
-         CHOC            =FACT(statut='f',min=01,max='**',
+         CHOC            =FACT(statut='f',min=1,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. ),  
@@ -13790,7 +14159,7 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
            OPTION          =SIMP(statut='f',typ='TXM',defaut="USURE",into=("IMPACT","USURE") ),
            NB_CLASSE       =SIMP(statut='f',typ='I',defaut= 10 ),  
          ),
-         RELA_EFFO_DEPL  =FACT(statut='f',min=01,max=01,
+         RELA_EFFO_DEPL  =FACT(statut='f',min=1,max=1,
                                fr="Analyse des relationsnon linéaires effort-déplacement",
            NOEUD           =SIMP(statut='o',typ=no),
            NOM_CMP         =SIMP(statut='o',typ='TXM' ),  
@@ -13798,7 +14167,7 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13838,6 +14207,7 @@ def post_elem_prod( MASS_INER,ENER_POT,ENER_CIN,TRAV_EXT,WEIBULL,
   raise AsException("type de concept resultat non prevu")
 
 POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e3",reentrant='f',
+            UIinfo={"groupes":("Post traitements",)},
                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',
@@ -14202,7 +14572,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e3",
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 
  )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14221,6 +14591,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e3",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=tabl_post_f_alea,docu="U4.84.03-c",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
                     fr="Calcul du dommage subi par une structure soumise à unesollicitation de type aléatoire",
          regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
                  PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
@@ -14236,7 +14607,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=tabl_post_f_alea,docu="U
          MATER           =SIMP(statut='o',typ=mater),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14255,6 +14626,7 @@ POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=tabl_post_f_alea,docu="U
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.01-d1",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
                   fr="Calcul du dommage subi par une structure soumise à une histoire de chargement",
 
          CHARGEMENT = SIMP(statut='o',typ='TXM',into=("UNIAXIAL","PERIODIQUE","QUELCONQUE")),
@@ -14313,7 +14685,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14333,9 +14705,10 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.
 # ======================================================================
 POST_GOUJ2E=OPER(nom="POST_GOUJ2E",op=187,sd_prod=tabl_post_gouj2e,reentrant='n', 
                  fr=" ",docu="U4.GJ.30-a",
+            UIinfo={"groupes":("Outils métier",)},
          TABLE           =SIMP(statut='o',typ=tabl_post_rele),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14357,6 +14730,7 @@ POST_GOUJ2E=OPER(nom="POST_GOUJ2E",op=187,sd_prod=tabl_post_gouj2e,reentrant='n'
 POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
                    fr="Calcul des FIC par extrapolation du champ de déplacements sur les lèvres de la fissure",
                    docu="U4.82.05-b2",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
 
            regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'),
                    PRESENT_PRESENT('TABL_DEPL_SUP','TABL_DEPL_INF'),),
@@ -14399,7 +14773,7 @@ POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
                              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 29/03/2002   AUTEUR CIBHHBC R.FERNANDES 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14423,6 +14797,7 @@ POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
 POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=tabl_post_beta,
                    fr="Calcul des FIC par la méthode K_BETA",
                    docu="U4.82.07-a",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          MAILLAGE      = SIMP(statut='o',typ=maillage),
          MATER_REV     = SIMP(statut='o',typ=mater),
          EPAIS_REV     = SIMP(statut='o',typ='R'),
@@ -14442,7 +14817,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=tabl_post_beta,
          INFO          = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE         = SIMP(statut='f',typ='TXM',max='**'),  
 );
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14453,8 +14828,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=tabl_post_beta,
 #
 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# 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,       
@@ -14464,17 +14838,22 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=tabl_post_beta,
 POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
                fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
                docu="U4.83.11-d1",reentrant='n',
-         MATER           =SIMP(statut='o',typ=mater ),
+            UIinfo={"groupes":("Post traitements",)},
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","VALE_INST") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-         MAILLAGE        =SIMP(statut='f',typ=maillage),
          OPTION          =SIMP(statut='o',typ='TXM',max='**',
                                into=("PM_PB",
                                      "SN",
                                      "FATIGUE_SPMAX",
-                                     "FATIGUE_ZH210"
+                                     "FATIGUE_ZH210",
+                                     "FATIGUE_B3200",
+                                     "FATIGUE_B3600",
                                      ) ),
-         SEGMENT         =FACT(statut='o',min=01,max='**',fr="Segment sur lequel s effectue le depouillement",
+     b_pm_sn  =BLOC(condition="(OPTION == 'PM_PB')or(OPTION == 'SN')or(OPTION == 'FATIGUE_SPMAX')or(OPTION == 'FATIGUE_ZH210')",
+         MATER           =SIMP(statut='o',typ=mater ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage),
+         SEGMENT         =FACT(statut='o',min=1,max='**',fr="Segment sur lequel s effectue le depouillement",
            regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
                    EXCLUS('CHEMIN','GROUP_NO'),
                    EXCLUS('CHEMIN','NOEUD'),),
@@ -14485,9 +14864,9 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
              b_acce_noeud     =BLOC(condition="(NOEUD != None)or(GROUP_NO != None)",
                PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-             ),
-         ),
-         TRANSITOIRE     =FACT(statut='o',min=01,max='**',fr="transitoire à dépouiller",
+                                   ),
+                               ),
+         TRANSITOIRE     =FACT(statut='o',min=1,max='**',fr="transitoire à dépouiller",
            regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
            RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli) ),
            RESU_SIGM_THER  =SIMP(statut='f',typ=(evol_elas,evol_noli),fr="résultat sous chargement thermique seul" ),
@@ -14501,10 +14880,146 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
            b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
-           ), 
+                                 ), 
+                             ),
          ),
+
+     b_3200  =BLOC(condition="(OPTION == 'FATIGUE_B3200')",
+         MATER           =SIMP(statut='o',typ=mater ),
+         CHAR_MECA   =FACT(statut='o',min=1,max='**',fr="Chargements mécaniques",
+           NUME_CHAR     =SIMP(statut='o',typ='I',max=1,fr="numéro du chargement" ),
+           NOM_CHAR      =SIMP(statut='f',typ='TXM',max=1,fr="nom du chargement" ),
+           TYPE_CHAR     =SIMP(statut='f',typ='TXM',max=1,fr="nature du chargement",into=( "SEISME","AUTRE"),defaut="AUTRE",),
+           FX            =SIMP(statut='f',typ='R',max=1,fr="effort suivant x", ),
+           FY            =SIMP(statut='f',typ='R',max=1,fr="effort suivant y", ),
+           FZ            =SIMP(statut='f',typ='R',max=1,fr="effort suivant z", ),
+           MX            =SIMP(statut='o',typ='R',max=1,fr="moment suivant x", ),
+           MY            =SIMP(statut='o',typ='R',max=1,fr="moment suivant y", ),
+           MZ            =SIMP(statut='o',typ='R',max=1,fr="moment suivant z", ),
+                         ),
+         RESU_MECA_UNIT =FACT(statut='o',min=1,max=1,fr="resultats mécaniques unitaires",
+           TABL_FX       =SIMP(statut='f',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire FX"),
+           TABL_FY       =SIMP(statut='f',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire FY"),
+           TABL_FZ       =SIMP(statut='f',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire FZ"),
+           TABL_MX       =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire MX"),
+           TABL_MY       =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire MY"),
+           TABL_MZ       =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire MZ"),
+           TABL_PRES     =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement unitaire de pression"),
+                         ),
+          RESU_THER   =FACT(statut='f',min=1,max='**',fr="resultats thermiques",
+           NUME_RESU_THER =SIMP(statut='o',typ='I',max=1,fr="numéro de la table de résultat thermique" ),
+           TABL_RESU_THER =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des contraintes pour chargement thermique"),
+                           ),
+         SITUATION         =FACT(statut='o',min=1,max='**',fr="Situation",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NB_CYCL_SEISME   =SIMP(statut='f',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" ),
+              COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
+              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+              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"),
+                               ),
+                      ),
+     b_3600  =BLOC(condition="(OPTION == 'FATIGUE_B3600')",
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         MODELE          =SIMP(statut='o',typ=modele),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem),
+         ZONE_ANALYSE =FACT(statut='o',min=1,max=1,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,max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+            ),
+         RESU_MECA   =FACT(statut='o',min=1,max='**',fr="Chargements mécaniques",
+           regles=(UN_PARMI('CHAM_GD','RESULTAT'),),
+           NUME_CHAR     =SIMP(statut='o',typ='I',max=1,fr="numéro du chargement" ),
+           NOM_CHAR      =SIMP(statut='f',typ='TXM',max=1,fr="nom du chargement" ),
+           TYPE_CHAR     =SIMP(statut='f',typ='TXM',max=1,fr="nature du chargement",into=( "SEISME","AUTRE"),defaut="AUTRE",),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd),
+           RESULTAT        =SIMP(statut='f',typ=resultat),
+           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',max=1,into=("EFGE_ELNO_DEPL","SIEF_ELNO_ELGA"),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max=1),
+             INST            =SIMP(statut='f',typ='R',max=1),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             b_acce_reel     =BLOC(condition="(INST != None)",
+               PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"), ),
+             ),
+           ),
+                          ),
+         INDI_SIGM =FACT(statut='o',min=1,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',max=1,defaut=1.0,fr="indice de contraintes C1 du RCCM"),
+            K1              =SIMP(statut='f',typ='R',max=1,defaut=1.0,fr="indice de contraintes K1 du RCCM"),
+            C2              =SIMP(statut='f',typ='R',max=1,defaut=1.0,fr="indice de contraintes C2 du RCCM"),
+            K2              =SIMP(statut='f',typ='R',max=1,defaut=1.0,fr="indice de contraintes K2 du RCCM"),
+            C3              =SIMP(statut='f',typ='R',max=1,defaut=0.5,fr="indice de contraintes C3 du RCCM"),
+            K3              =SIMP(statut='f',typ='R',max=1,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,max='**',
+                             fr="groupe(s) de mailles ou sont affectés les indices de contraintes"),
+            MAILLE          =SIMP(statut='f',typ=ma,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,max='**'),
+               NOEUD           =SIMP(statut='f',typ=no,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',min=1,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',max=1,fr="numéro de la table de résultat thermique" ),
+            TABL_RESU_THER =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des températures sur la section"),
+            TABL_MOYE_THER =SIMP(statut='o',typ=table,max=1,
+                              fr="table relevé des moyennes sur la section"),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+            b_grma     =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+               GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD           =SIMP(statut='f',typ=no,max='**'),
+            ),
+                           ),
+         SITUATION         =FACT(statut='o',min=1,max='**',fr="Situation",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NB_CYCL_SEISME   =SIMP(statut='f',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" ),
+              COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéro du groupe de la situation" ),
+              NUME_PASSAGE     =SIMP(statut='f',typ='I',max=2,fr="numéro des deux groupes en relation" ),
+              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 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 # ======================================================================
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14524,7 +15039,8 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
 # ======================================================================
 # RESPONSABLE G8BHHXD X.DESROCHES
 POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.21-e1",reentrant='n',
-         ACTION          =FACT(statut='o',min=01,max='**',
+            UIinfo={"groupes":("Post traitements",)},
+         ACTION          =FACT(statut='o',min=1,max='**',
            regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
                    EXCLUS('CHEMIN','GROUP_NO'),
                    EXCLUS('CHEMIN','NOEUD'),
@@ -14606,7 +15122,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14626,8 +15142,9 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.
 # ======================================================================
 POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
                     fr=" ",docu="U4.PS.10-a",reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
          MATER           =SIMP(statut='o',typ=(mater) ),
-         DEF_EQUI        =FACT(statut='f',min=01,max=01,
+         DEF_EQUI        =FACT(statut='f',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',max='**',defaut="UTO_2_3",
                                  into=("UTO_2_3",) ),
            EPAIS           =SIMP(statut='o',typ='R'),  
@@ -14637,7 +15154,7 @@ POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
            TEMP_ANALYSE    =SIMP(statut='f',typ='R'),  
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14656,11 +15173,12 @@ POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1",reentrant='f',
+            UIinfo={"groupes":("Post traitements",)},
                 fr="Calcul des volumes d'usure et des profondeurs d'usure",
          regles=(UN_PARMI('RESU_GENE','PUIS_USURE'),
                  PRESENT_PRESENT('RESU_GENE','NOEUD'),
                  UN_PARMI('INST','LIST_INST'),),
-         ETAT_INIT       =FACT(statut='f',min=01,max=01,
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            TABL_USURE      =SIMP(statut='f',typ=tabl_post_usur),
            INST_INIT       =SIMP(statut='f',typ='R'),  
                          ),
@@ -14675,13 +15193,13 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1
            regles=(UN_PARMI('MOBILE','MATER_USURE','SECTEUR'), 
                    EXCLUS('MATER_USURE','OBSTACLE'),
                    EXCLUS('MOBILE','USURE_OBST'),),
-           MOBILE          =FACT(statut='f',min=01,max=01,
+           MOBILE          =FACT(statut='f',min=1,max=1,
              COEF_USURE      =SIMP(statut='o',typ='R'), 
            ),   
-           OBSTACLE        =FACT(statut='f',min=01,max=01,
+           OBSTACLE        =FACT(statut='f',min=1,max=1,
              COEF_USURE      =SIMP(statut='o',typ='R'), 
            ),
-           SECTEUR         =FACT(statut='f',min=01,max='**',
+           SECTEUR         =FACT(statut='f',min=1,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")),
@@ -14691,20 +15209,20 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1
              ANGL_FIN        =SIMP(statut='f',typ='R'),  
            ),
            MATER_USURE     =SIMP(statut='f',typ='TXM'),  
-           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           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',min=01,max=01,
+           MOBILE          =FACT(statut='f',min=1,max=1,
              COEF_FNOR       =SIMP(statut='f',typ='R'),  
              COEF_VTAN       =SIMP(statut='f',typ='R'),  
              COEF_USURE      =SIMP(statut='f',typ='R'),  
              COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
              COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
            ),   
-           OBSTACLE        =FACT(statut='f',min=01,max=01,
+           OBSTACLE        =FACT(statut='f',min=1,max=1,
              COEF_FNOR       =SIMP(statut='f',typ='R' ),  
              COEF_VTAN       =SIMP(statut='f',typ='R' ),  
              COEF_USURE      =SIMP(statut='o',typ='R'), 
@@ -14712,7 +15230,7 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1
              COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
            ),   
            MATER_USURE     =SIMP(statut='f',typ='TXM'),  
-           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           USURE_OBST      =SIMP(statut='f',typ='TXM',into=("OUI",)),
            FNOR_MAXI       =SIMP(statut='f',typ='R' ),  
            VTAN_MAXI       =SIMP(statut='f',typ='R' ),  
          ),
@@ -14720,20 +15238,20 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1
            regles=(UN_PARMI('MOBILE','MATER_USURE'), 
                    EXCLUS('MATER_USURE','OBSTACLE'),
                    EXCLUS('MOBILE','USURE_OBST'),),
-           MOBILE          =FACT(statut='f',min=01,max=01,
+           MOBILE          =FACT(statut='f',min=1,max=1,
              COEF_USURE      =SIMP(statut='f',typ='R',defaut=1.0E-13),  
              COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
              COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
              COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
            ),   
-           OBSTACLE        =FACT(statut='f',min=01,max=01,
+           OBSTACLE        =FACT(statut='f',min=1,max=1,
              COEF_USURE      =SIMP(statut='o',typ='R',defaut=1.0E-13), 
              COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
              COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
              COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
            ),   
            MATER_USURE     =SIMP(statut='f',typ='TXM'),  
-           USURE_OBST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           USURE_OBST      =SIMP(statut='f',typ='TXM',into=("OUI",)),
          ),
          CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",    
                                                           "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",        
@@ -14750,7 +15268,7 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14769,10 +15287,11 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d1
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
               fr="Donne l'état adapté ou accommodé d'une structure sous chargement cyclique élastique affine ou non",
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
-         EXCIT           =FACT(statut='o',min=01,max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=char_meca),
            FONC_MULT       =SIMP(statut='f',typ=fonction),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",into=("FIXE_CSTE",)),
@@ -14793,7 +15312,7 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentra
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
 
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14813,6 +15332,7 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentra
 # ======================================================================
 POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une étude",
                 docu="U4.11.03-g2",sd_prod = ops.POURSUITE,
+            UIinfo={"groupes":("Gestion du travail",)},
                 op_init = ops.POURSUITE_context,fichier_ini = 1,
          PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
                            into=("OUI","NON"),defaut="OUI"),
@@ -14856,31 +15376,7 @@ POURSUITE=MACRO(nom="POURSUITE",op=0,repetable='n',fr="Poursuite d une 
            UNITE           =SIMP(statut='f',typ='I',defaut=15),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
-# ======================================================================
-PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
-                    fr="Conversion de conditions aux limites et chargements IDEAS en commandes Aster",
-         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
-         UNITE_ASTER     =SIMP(statut='f',typ='I',defaut=21),  
-         MODELE          =SIMP(statut='o',typ=modele),
-)  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14899,11 +15395,12 @@ PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 PRE_GIBI=PROC(nom="PRE_GIBI",op=49,docu="U7.01.11-f",
+            UIinfo={"groupes":("Gestion du travail",)},
               fr="Conversion d un fichier de maillage GIBI",
          UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-#& MODIF COMMANDE  DATE 11/06/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14925,12 +15422,13 @@ PRE_GIBI=PROC(nom="PRE_GIBI",op=49,docu="U7.01.11-f",
 from Macro.pre_gmsh_ops import pre_gmsh_ops
 
 PRE_GMSH=MACRO(nom="PRE_GMSH",op=pre_gmsh_ops,docu="U7.01.01-f",
+            UIinfo={"groupes":("Gestion du travail",)},
                fr="Conversion d un fichier universel GMSH au format Aster",
          UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
          MODI_QUAD       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
 )  ;
-#& MODIF COMMANDE  DATE 11/06/2002   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14950,11 +15448,12 @@ PRE_GMSH=MACRO(nom="PRE_GMSH",op=pre_gmsh_ops,docu="U7.01.01-f",
 # ======================================================================
 
 PRE_GMSH_LECT=PROC(nom="PRE_GMSH_LECT",op=47,docu="U7.01.01-f",
+            UIinfo={"groupes":("Gestion du travail",)},
                fr="Conversion d un fichier universel GMSH au format Aster",
          UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14973,11 +15472,12 @@ PRE_GMSH_LECT=PROC(nom="PRE_GMSH_LECT",op=47,docu="U7.01.01-f",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,docu="U7.01.01-f",
+            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),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14996,10 +15496,11 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,docu="U7.01.01-f",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 PROCEDURE=PROC(nom="PROCEDURE",op=-3, docu="U4.13.03-e",
+            UIinfo={"groupes":("Gestion du travail",)},
           fr="Nommer le fichier de commandes secondaires",
           NOM  =SIMP(statut='f',typ='TXM',defaut=" "),
 ) ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15027,11 +15528,12 @@ def prod_matr_cham_prod(MATR_ASSE,**args):
 PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=prod_matr_cham_prod,
                     fr="Effectuer le produit d une matrice par un vecteur",
                     docu="U4.72.06-b",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
          MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_pres_c ) ),
          CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_depl_c,cham_no_temp_r,cham_no_pres_c ) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15065,6 +15567,7 @@ def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ):
     raise AsException("type de concept resultat non prevu")
 
 PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-d2",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
                 fr="Projection d'un champ aux noeuds sur les noeuds d'un autre maillage",
 #
          METHODE         =SIMP(statut='f',typ='TXM',defaut="NUAGE_DEG_1",
@@ -15096,7 +15599,7 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-
            LIST_FREQ       =SIMP(statut='f',typ=listr8),
          ),
 
-         VIS_A_VIS       =FACT(statut='f',min=01,max='**',
+         VIS_A_VIS       =FACT(statut='f',min=1,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",) ),
@@ -15113,7 +15616,7 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15141,6 +15644,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)",
                     docu="U4.63.12-f1",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
          BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
@@ -15148,7 +15652,7 @@ 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 19/12/2001   AUTEUR CIBHHAB N.RAHNI 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15166,46 +15670,49 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-def proj_mesu_modal_prod(MESURE,**args):
-     vale=MESURE['NOM_PARA']
+def proj_mesu_modal_prod(MODELE_MESURE,**args):
+     vale=MODELE_MESURE['NOM_PARA']
      if  vale == 'INST'   : return tran_gene
+     if  vale == 'FREQ'   : return harm_gene
+     if  vale == 'DEFORMEE'   : 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,
                      docu="U4.73.01-a",reentrant='n',
-                     fr="Extrapolation de resultats experimentaux sur un modele numerique en dynamique",
-
-# commentaire C. Durand-13/10/2000 :
-#le mot cle NOM_PARA, par construction, vaut tjs INST : donc on retourne TRAN_GENE a chaque fois
-#def proj_mesu_modal_prod(**args):
-#     vale=args['MESURE'].get_child('NOM_PARA').get_valeur()
-#     if  vale == 'INST'   : return tran_gene
-#     raise AsException("type de concept resultat non prevu")
-#PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,sd_prod=proj_mesu_modal_prod,)
-
-         MODELE          =SIMP(statut='f',typ=(modele) ),
-         MASS_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
-         RIGI_GENE       =SIMP(statut='o',typ=(matr_asse_gene_r) ),
-         MESURE          =FACT(statut='o',min=01,max=01,
+            UIinfo={"groupes":("Résultats et champs",)},
+                     fr="Calcul de coordonnees generalisees de mesure experimentale relatives a une base de projection",
+
+         MODELE_CALCUL   =FACT(statut='o',min=1,max=1,
            MODELE          =SIMP(statut='o',typ=(modele) ),
-           MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
-           CARA_ELEM       =SIMP(statut='o',typ=(cara_elem) ),
-           UNITE           =SIMP(statut='f',typ='I',defaut= 33 ),  
-           NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST",) ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
-           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","SIGM_NOEU_DEPL","EPSI_NOEU_DEPL",) ),
+           BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,) ),
+                         ),
+         MODELE_MESURE   =FACT(statut='o',min=1,max=1,
+           MODELE          =SIMP(statut='o',typ=(modele) ),
+           MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,base_modale,) ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="INST",into=("INST","FREQ","DEFORMEE",),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
                          ),
-         REGULARISATION  =FACT(statut='f',min=01,max=01,
-      regles=(UN_PARMI('COEF_PONDER','COEF_PONDER_F', ),),
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="TIKHONOV",into=("TIKHONOV",) ),
-           NORM_MIN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-           COEF_PONDER     =SIMP(statut='f',typ='R',max='**' ),  
-           COEF_PONDER_F   =SIMP(statut='f',typ=(fonction),max='**' ),
+         CORR_MANU       =FACT(statut='f',min=1,max='**',
+           regles=(PRESENT_PRESENT('NOEU_CALCUL','NOEU_MESURE'),),
+           NOEU_CALCUL     =SIMP(statut='f',typ=no),
+           NOEU_MESURE     =SIMP(statut='f',typ=no),
                          ),
-                       )  ;
-#& MODIF COMMANDE  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+         RESOLUTION      =FACT(statut='f',min=1,max=1,
+           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',max='**',defaut=0. ),  
+                         COEF_PONDER_F =SIMP(statut='f',typ=(fonction),max='**' ),
+                        ),
+             ),
+
+          ); 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15224,6 +15731,7 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.14-c",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
                     fr="Projection d un ou plusieurs spectres de turbulenc sur un ensemble de bases modales ",
       regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),
               ENSEMBLE('FREQ_INIT','FREQ_FIN','NB_POIN'),),
@@ -15243,7 +15751,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.
          ORIG_AXE        =SIMP(statut='f',typ='R',min=3,max=3 ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15264,6 +15772,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.
 PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
                     fr="Projection d un vecteur assemblé sur une base (modale ou de RITZ)",
                     docu="U4.63.13-f1",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
          BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
@@ -15271,7 +15780,7 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
          VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
          VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
 )  ;
-#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15291,8 +15800,9 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
 # ======================================================================
 RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=tabl_reca_weib,
                      fr=" ",docu="U4.82.06-a",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
          LIST_PARA       =SIMP(statut='o',typ='TXM',max='**',into=("SIGM_REFE","M",) ),
-         RESU            =FACT(statut='o',min=01,max='**',
+         RESU            =FACT(statut='o',min=1,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) ),
@@ -15316,7 +15826,7 @@ RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=tabl_reca_weib,
          ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
                        )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15356,6 +15866,7 @@ def recu_fonction_prod(RESULTAT=None,TABLE=None,OBSTACLE=None,
 RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
                    fr="Extraire sous forme d une fonction, l évolution temporelle d une composante d un champ ou d une table",
                    docu="U4.32.03-f2",reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
          regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','OBSTACLE'),),
 
          CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_elem_sief_r,
@@ -15372,9 +15883,9 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
          b_tran_gene = BLOC ( condition = "RESU_GENE != None",
                               fr="Récupération de la fonction concernant les chocs à partir d un concept TRAN_GENE",
             regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),
-                    PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),),
-             MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-             CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                    EXCLUS('MULT_APPUI','CORR_STAT'),),
+             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),
              PARA_X          =SIMP(statut='f',typ='TXM' ),
              PARA_Y          =SIMP(statut='f',typ='TXM' ),
@@ -15539,7 +16050,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 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15558,6 +16069,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-e",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
                fr="Récupération d un champ de grandeur à partir d un résultat en coordonnées généralisées",
          RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
          INST            =SIMP(statut='o',typ='R' ),
@@ -15566,7 +16078,7 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-e",
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ),
          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15587,13 +16099,14 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-e",
 # RESPONSABLE VABHHTS J.PELLET
 RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table,
                 fr=" ",docu="U4.71.02-b2",reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
          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 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15620,6 +16133,7 @@ def reso_grad_prod(MATR_ASSE,**args ):
 RESO_GRAD=OPER(nom="RESO_GRAD",op=  84,sd_prod=reso_grad_prod,
                fr="Résolution par la méthode du gradient conjugué préconditionné",
                docu="U4.55.04-e",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
          MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
          CHAM_NO         =SIMP(statut='o',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r ) ),
          CHAM_CINE       =SIMP(statut='f',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r ) ),
@@ -15629,7 +16143,7 @@ RESO_GRAD=OPER(nom="RESO_GRAD",op=  84,sd_prod=reso_grad_prod,
          RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1E-6 ),  
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15659,6 +16173,7 @@ def reso_ldlt_prod(CHAM_NO,**args ):
 
 RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=reso_ldlt_prod,reentrant='f',
                fr="Résolution en place ou hors place d un système factorisé",docu="U4.55.02-f",
+            UIinfo={"groupes":("Résolution",)},
          MATR_FACT       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
                                                matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
          CHAM_NO         =SIMP(statut='o',typ=(cham_no_temp_r,cham_no_depl_r,cham_no_pres_r,
@@ -15667,7 +16182,7 @@ RESO_LDLT=OPER(nom="RESO_LDLT",op=15,sd_prod=reso_ldlt_prod,reentrant='f',
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 17/04/2002   AUTEUR BOYERE E.BOYERE 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15697,11 +16212,12 @@ def rest_base_phys_prod(RESU_GENE,RESULTAT,**args ):
 REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
                     fr="Restituer dans la base physique des résultats en coordonnées généralisées",
                     docu="U4.63.21-e",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
         regles=(UN_PARMI('RESU_GENE','RESULTAT'),
                 EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
                 EXCLUS('TOUT_INST','NUME_ORDRE','INST','LIST_INST','TOUT_ORDRE'),
 #  Doc U à revoir
-                PRESENT_ABSENT('MULT_APPUI','CORR_STAT'),
+                EXCLUS('MULT_APPUI','CORR_STAT'),
                 EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
                 EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),             
                 EXCLUS('NOEUD','GROUP_NO'), 
@@ -15721,8 +16237,8 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
          INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
-         MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-         CORR_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          NOM_CHAM        =SIMP(statut='f',typ='TXM',max=8,defaut="ACCE",   
                                into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
                                      "SIGM_ELNO_DEPL","FORC_NODA",) ),
@@ -15738,7 +16254,7 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
          SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 28/03/2001   AUTEUR CIBHHLV L.VIVAN 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15758,20 +16274,21 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
 # ======================================================================
 REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
                     docu="U4.63.22-c",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),
          BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
          MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
-         BANDE           =SIMP(statut='f',typ='R',min=02,max=02 ),  
+         BANDE           =SIMP(statut='f',typ='R',min=2,max=2 ),  
          NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
          INTE_SPEC_GENE  =SIMP(statut='o',typ=tabl_intsp ),
          NOEUD           =SIMP(statut='o',typ=no,max='**'),
          NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
          MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=07,    
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',max=7,    
                                into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",      
                                      "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc), ),
-         EXCIT           =FACT(statut='f',max=01,
+         EXCIT           =FACT(statut='f',max=1,
            NOEUD           =SIMP(statut='o',typ=no,max='**'),
            NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
          ),
@@ -15780,7 +16297,7 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
                                into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-#& MODIF COMMANDE  DATE 21/12/2000   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15799,9 +16316,10 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
+            UIinfo={"groupes":("Gestion du travail",)},
             fr="Retour au fichier de commandes appelant", 
 ) ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15823,6 +16341,7 @@ RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
 STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                    fr="Analyse mécanique statique non linéaire",
                    docu="U4.51.03-f4",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
          regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),),
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
@@ -15916,6 +16435,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                                         "KIT_HM",
                                         "KIT_HHM",
                                         "KIT_THH",
+                                        "KIT_THV",
                                         "KIT_THM",
                                         "KIT_THHM",
                                         "VMIS_ASYM_LINE",
@@ -15933,7 +16453,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
           LABORD_1D   =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
           ENDO_FRAGILE    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           ENDO_ISOT_BETON =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-          MAZARS          =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+          MAZARS          =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
           RUPT_FRAG       =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
           BARENBLATT      =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
           META_P_IL         =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
@@ -16002,6 +16522,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
           KIT_HM          =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           KIT_HHM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           KIT_THH         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
+          KIT_THV         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           KIT_THM         =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           KIT_THHM        =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
@@ -16023,6 +16544,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
                                        "LIQU_SATU_GAT",
                                        "LIQU_GAZ_ATM",
                                        "LIQU_VAPE_GAZ",
+                                       "LIQU_VAPE",
                                        "LIQU_NSAT_GAT",
                                        "LIQU_GAZ",
 # THER
@@ -16053,10 +16575,11 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            GAZ             =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            LIQU_SATU       =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
            LIQU_SATU_GAT   =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
-           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_GAZ_ATM    =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
+           LIQU_VAPE_GAZ   =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
+           LIQU_VAPE       =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
            LIQU_NSAT_GAT   =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=2,into=(2,)),
+           LIQU_GAZ        =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
            THER_HOMO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
@@ -16250,7 +16773,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
  )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16271,9 +16794,10 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
 # RESPONSABLE MCOURTOI M.COURTOIS
 TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur numérique ou d un attribut de fonction",
                    docu="U4.92.02-f2",
+            UIinfo={"groupes":("Impression",)},
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
          TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-         VALEUR          =FACT(statut='f',min=01,max='**',
+         VALEUR          =FACT(statut='f',min=1,max='**',
                                fr="Tester la valeur d une fonction ou d une nappe",
            regles=(UN_PARMI('VALE_REFE','VALE_REFE_C', ),),
            FONCTION        =SIMP(statut='o',typ=fonction ),
@@ -16291,7 +16815,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur num
              VERSION         =SIMP(statut='f',typ='TXM' ),
            ),
          ),
-         ATTRIBUT        =FACT(statut='f',min=01,max='**',
+         ATTRIBUT        =FACT(statut='f',min=1,max='**',
                                fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
            FONCTION        =SIMP(statut='o',typ=fonction ),
            PARA            =SIMP(statut='f',typ='R' ),
@@ -16307,7 +16831,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur num
              VERSION         =SIMP(statut='f',typ='TXM' ),
            ),
          ),
-         TABL_INTSP      =FACT(statut='f',min=01,max='**',
+         TABL_INTSP      =FACT(statut='f',min=1,max='**',
                                fr="Tester la valeur d une fonction contenue dans une table interspectrale",
            regles=(UN_PARMI('NUME_ORDRE_I','NOEUD_I'),),
            INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
@@ -16335,7 +16859,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur num
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 # RESPONSABLE VABHHTS J.PELLET
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -16357,11 +16881,12 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur num
 #
 # ======================================================================
 TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g3",
+            UIinfo={"groupes":("Impression",)},
          fr="Extraction d une valeur et comparaison à une valeur de référence",
          regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','OBJET')),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
 
-         CHAM_NO         =FACT(statut='f',min=01,max='**',
+         CHAM_NO         =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO','TYPE_TEST'),
                    EXCLUS('NOEUD','GROUP_NO'),
                    PRESENT_PRESENT('NOEUD','NOM_CMP'),
@@ -16382,7 +16907,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g3",
            VERSION         =SIMP(statut='f',typ='TXM'),
          ),
 
-         CHAM_ELEM       =FACT(statut='f',min=01,max='**',
+         CHAM_ELEM       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','TYPE_TEST',),
                    EXCLUS('NOEUD','GROUP_NO','POINT'),
                    PRESENT_PRESENT('NOEUD','NOM_CMP'),
@@ -16407,7 +16932,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g3",
            VERSION         =SIMP(statut='f',typ='TXM' ),
          ),
 
-         RESU            =FACT(statut='f',min=01,max='**',
+         RESU            =FACT(statut='f',min=1,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'),
@@ -16440,8 +16965,8 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g3",
            VALE            =SIMP(statut='f',typ='R'),
            VALE_I          =SIMP(statut='f',typ='I'),
            VALE_C          =SIMP(statut='f',typ='C'),
-           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=02),
-           PRECISION       =SIMP(statut='f',typ='R',max=02),
+           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' ),
@@ -16466,7 +16991,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g3",
            VERSION         =SIMP(statut='f',typ='TXM' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 06/03/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16487,6 +17012,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g3",
 # RESPONSABLE VABHHTS J.PELLET
 TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
                 docu="U4.92.03-c1",
+            UIinfo={"groupes":("Impression",)},
          regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
 #  concept table à créer
@@ -16520,7 +17046,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
              VERSION         =SIMP(statut='f',typ='TXM' ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16539,6 +17065,7 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g2",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
                    fr="Analyse thermique linéaire stationnaire ou transitoire",
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
@@ -16608,7 +17135,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g2
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 28/08/2002   AUTEUR MCOURTOI M.COURTOIS 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16627,6 +17154,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g2
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-e2",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
                    fr="Analyse thermique non linéaire stationnaire ou transitoire" ,
          MODELE          =SIMP(statut='o',typ=(modele) ),
          CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
@@ -16718,7 +17246,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
   
 )  ;
-#& MODIF COMMANDE  DATE 05/12/2001   AUTEUR VABHHTS J.PELLET 
+#& MODIF COMMANDE  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16739,6 +17267,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-
 THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
                      fr="Thermique non lineaire en repere mobile",
                      docu="U4.54.03-b",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
          MODELE          =SIMP(statut='o',typ=modele ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
index 9d1b418992d7113daef5ed09e2ee91d998553c4d..9f63dd0fa26a410eedc2650449667238819d4437 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 26/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF ops Cata  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -241,4 +241,4 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
     d={}
     self.g_context = d
     self.contexte_fichier_init = d
-    exec code in self.parent.g_context,d
+    exec code in self.parent.get_global_contexte(),d
diff --git a/Aster/INSTALL b/Aster/INSTALL
new file mode 100644 (file)
index 0000000..e3a5d8f
--- /dev/null
@@ -0,0 +1,40 @@
+
+
+1- Installation standard
+
+Pour installer EFICAS a partir de la distribution : <nom_distrib>.tgz
+faire :
+       tar xzvf <nom_distrib>.tgz
+
+ce qui a pour effet de créer un répertoire de nom <nom_distrib>.
+
+Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader,
+les catalogues, il faut modifier le fichier editeur.ini dans le répertoire Aster.
+
+
+ATTENTION : 
+Si Eficas est installé dans un répertoire particulier d'administration 
+dans lequel les utilisateurs n'ont pas le droit d'écriture, il faut que
+l'administrateur lance Eficas pour générer
+les fichiers et catalogues compilés .pyc et _pickled.py
+
+
+
+2- Utilisation d'Eficas
+
+Pour utiliser Eficas, aller dans le répertoire Aster et faire :
+       python eficas_aster.py
+
+
+
+3- Installation avec un noyau pré-installé
+
+Aller dans le répertoire Aster du répertoire Eficas
+et modifier le fichier prefs.py comme suit :
+Mettre dans la variable CODE_PATH le chemin absolu vers
+le répertoire contenant les deux répertoires Noyau et Validation que vous voulez
+utiliser à la place de ceux fournis dans la livraison d'Eficas
+
+Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster
+
+
diff --git a/Aster/LICENSE.TERMS b/Aster/LICENSE.TERMS
new file mode 100644 (file)
index 0000000..8c88a1e
--- /dev/null
@@ -0,0 +1,21 @@
+ ======================================================================
+ THIS PROGRAM IS FREE SOFTWARE. YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+ IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+ THE FREE SOFTWARE FOUNDATION, EITHER VERSION 2 OF THE LICENSE, AND 
+ ANY LATER VERSION.                   
+ THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+ WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF          
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.             
+ SEE THE GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.             
+ ======================================================================
+          TRADUCTION EDF ( POUR INFORMATION )         
+ ======================================================================
+ CE PROGRAMME EST UN LOGICIEL LIBRE. VOUS POUVEZ LE DIFFUSER ET/OU LE  
+ MODIFIER SELON LES DISPOSITIONS DE LA LICENCE GRAND PUBLIC GNU (GPL)  
+ TELLE QU'ELLE EST PUBLIEE PAR LA FREE SOFTWARE FOUNDATION, VERSION 2  
+ DE LA LICENCE ET TOUTE VERSION ULTERIEURE.          
+ CE PROGRAMME EST DIFFUSE AVEC L'ESPOIR QU'IL SERA UTILE, MAIS SANS    
+ GARANTIE, SANS MEME LA GARANTIE IMPLICITE DE QUALIFICATION DE MISE SUR
+ LE MARCHE OU D'ADAPTATION A UNE UTILISATION PARTICULIERE.        
+ VOIR POUR DE PLUS AMPLES DETAILS LA LICENCE GRAND PUBLIC GNU (GPL)    
+ ======================================================================
diff --git a/Aster/README b/Aster/README
new file mode 100644 (file)
index 0000000..0597ecb
--- /dev/null
@@ -0,0 +1,2 @@
+
+Pour installer EFICAS voir dans le fichier INSTALL
diff --git a/Aster/Tests/README b/Aster/Tests/README
new file mode 100644 (file)
index 0000000..bea2386
--- /dev/null
@@ -0,0 +1,8 @@
+Ce repertoire contient quelques tests d'Eficas pour Aster.
+
+Les fichiers tests doivent etre lisibles par Eficas sans probleme.
+Le repertoire Recette contient le cas de recette d'eficas_aster.
+On doit pouvoir le relire tel que et le reconstruire de zero (fichier
+normal et poursuite).
+
+Le test torsion.comm est un test pour format AsterV5
diff --git a/Aster/Tests/Recette/efica01a.11 b/Aster/Tests/Recette/efica01a.11
new file mode 100755 (executable)
index 0000000..57c140d
--- /dev/null
@@ -0,0 +1,21 @@
+DEPL2 = FORMULE(REEL="""(REEL:INST) =
+SIN(OMEGAA*INST)/(OMEGAA**2) """)
+DEPLACE2=CALC_FONC_INTERP( FONCTION=DEPL2,
+                           LIST_PARA=L_INST,
+                           PROL_DROITE='LINEAIRE',
+                           PROL_GAUCHE='LINEAIRE',
+                           NOM_RESU='DEPL'       )
+
+MONO_X=CALC_CHAR_SEISME(  MATR_MASS=MASSE,
+                          DIRECTION=( 1., 0., 0.,),
+                          MONO_APPUI='OUI' )
+
+
+MACRO_PROJ_BASE(BASE=MODE_MEC,MATR_ASSE_GENE=(
+                _F( MATRICE = CO("MASS_GEN"), MATR_ASSE = MASSE),
+                _F( MATRICE = CO("RIGI_GEN"), MATR_ASSE = RIGIDITE)),
+                VECT_ASSE_GENE=_F( VECTEUR = CO("VECT_X"), VECT_ASSE = MONO_X)
+               )
+
+
+RETOUR()
diff --git a/Aster/Tests/Recette/efica01a.com0 b/Aster/Tests/Recette/efica01a.com0
new file mode 100755 (executable)
index 0000000..ed4ca2d
--- /dev/null
@@ -0,0 +1,77 @@
+POURSUITE(CODE=_F(  NOM = 'EFICA01A'))
+
+
+TRAN_GE2=DYNA_TRAN_MODAL(  MASS_GENE=MGEN_BIC,   RIGI_GENE=RGEN_BIC,
+                 METHODE='EULER',
+                 AMOR_REDUIT=( 0.07,  0.07, ),
+                MODE_STAT=MSTA_BIC,EXCIT=(
+                _F(  VECT_GENE = VECT_X1,  ACCE = ACCELER1,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,), NOEUD = 'NO1',
+                       VITE = VITESSE1, DEPL = DEPLACE1), 
+                _F(  VECT_GENE = VECT_X2,  ACCE = ACCELER2,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,), NOEUD = 'NO11',
+                       VITE = VITESSE2, DEPL = DEPLACE2)), 
+                CHOC=_F(  GROUP_NO_1 = 'MASSES1',
+                       GROUP_NO_2 = 'MASSES2',
+                       OBSTACLE = GRILLE,
+                       INTITULE = 'NO2/NO12',
+                       NORM_OBST = (0., 0., 1.,),
+                       DIST_1 = 0.4495,
+                       DIST_2 = 0.4495,
+                       RIGI_NOR = 2.88E7,
+                       AMOR_NOR = 0.,
+                       RIGI_TAN = 0.,
+                       COULOMB = 0.),
+                 INCREMENT=_F( INST_INIT = 0.,  INST_FIN = 1.,  PAS = 0.00025),
+                ARCHIVAGE=_F(  PAS_ARCH = 8)
+                )
+
+LISTIMP=DEFI_LIST_REEL(  DEBUT=0.,
+                    INTERVALLE=_F(  JUSQU_A = 1.,  NOMBRE = 500))
+
+RESUA1=REST_BASE_PHYS(  RESU_GENE=TRAN_GE1,
+                        LIST_INST=LISTIMP,
+                        INTERPOL='LIN',
+                        NOM_CHAM='DEPL',
+                        MULT_APPUI='OUI'
+                       )
+
+RESUR1=REST_BASE_PHYS(  RESU_GENE=TRAN_GE1,
+                        LIST_INST=LISTIMP,
+                        INTERPOL='LIN',
+                        NOM_CHAM='DEPL',
+                        MULT_APPUI='NON'
+                       )
+
+
+NO2_DXA=RECU_FONCTION(  NOEUD='NO2',  NOM_CMP='DX',  NOM_CHAM='DEPL',
+                        RESULTAT=RESUA1,  
+                        LIST_INST=LISTIMP,   INTERPOL='LIN' )
+
+NO2_DX_A=RECU_FONCTION(  NOEUD='NO2',  NOM_CMP='DX',  NOM_CHAM='DEPL',
+                         RESU_GENE=TRAN_GE2,  
+                         MULT_APPUI='OUI',        INTERP_NUME='LIN',
+                         LIST_INST=LISTIMP,   INTERPOL='LIN' )
+
+DIFF=CALC_FONCTION(COMB=(
+               _F(  FONCTION = NO2_DX_A,  COEF = 1.),
+               _F(  FONCTION = NO2_DXA,   COEF = -1.))
+                    )
+
+TEST_FONCTION(VALEUR=(
+    _F(  FONCTION = DIFF, VALE_PARA = 0.10, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 0.30, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 0.50, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 0.70, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5),
+    _F(  FONCTION = DIFF, VALE_PARA = 1.00, VALE_REFE = 0.,
+             CRITERE = 'ABSOLU', PRECISION = 3.E-5))
+             )
+
+
+FIN()
diff --git a/Aster/Tests/Recette/efica01a.comm b/Aster/Tests/Recette/efica01a.comm
new file mode 100755 (executable)
index 0000000..e5eeb90
--- /dev/null
@@ -0,0 +1,204 @@
+# MODIF  DATE 16/01/2002   AUTEUR DURAND C.DURAND 
+# TITRE TEST DE NON REGRESSION DE L IHM EFICAS - DERIVE DE SDND102A
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
+# ======================================================================
+# Ce cas test est gere en configuration dans la base ASTER, il sert de
+# modele pour prononcer la recette de l IHM d EFICAS : l objectif est de
+# pouvoir recreer ce test a l identique dans EFICAS a partir d une page
+# blanche.
+# On a donc essaye d y placer toutes les commandes un peu particulieres
+# du langage de commandes d ASTER
+#
+# Il s agit en fait du test SDND102A auquel on a ajoute :
+#      la definition d un parametre (VAL)
+#      l inclusion d un fichier (INCLUDE)
+#      une poursuite (POURSUITE)
+# Il contient ainsi :
+# des parametres, des formules, des macros, des mots cles facteurs repetes
+# (y compris conditionnes par des regles : calc_fonction / COMB),
+# des blocs  (mode_iter_simult,calc_char_seisme), un defi_valeur, un parametre.
+#
+#
+# Il faudra y associer quelques recommandations pour la recette :
+# - verifier qu en ouvrant le .com0, il demande bien a browser le .comm puis, en cascade, le .11
+# - verifier qu on peut bien supprimer une commande, un mot cle simple et facteur
+# - verifier les acces a la doc
+#
+
+DEBUT(CODE=_F( NOM = 'EFICA01A'))
+
+MAILLAGE=LIRE_MAILLAGE( )
+
+MAILLA2=LIRE_MAILLAGE(  UNITE=19 )
+
+MODELE=AFFE_MODELE(  MAILLAGE=MAILLAGE,
+                     AFFE=(
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_MA = 'RESSORT'),
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_NO = 'MASSES')    )
+                    )
+
+BICHOC=AFFE_MODELE(  MAILLAGE=MAILLA2,
+                     AFFE=(
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_MA = 'RESSORTS'),
+              _F(  PHENOMENE = 'MECANIQUE', MODELISATION = 'DIS_T',
+                   GROUP_NO = ( 'MASSES1', 'MASSES2',)))
+                    )
+
+VAL = 98696.0
+
+CARA_ELE=AFFE_CARA_ELEM(  MODELE=MODELE,
+                          DISCRET=(
+           _F(  CARA = 'K_T_D_L',  REPERE = 'GLOBAL', GROUP_MA = 'RESSORT',
+                VALE = (VAL, 0., 0., )),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES', VALE = 25.0))
+                         )
+
+CARA_BIC=AFFE_CARA_ELEM(  MODELE=BICHOC,
+                          DISCRET=(
+           _F(  CARA = 'K_T_D_L',  REPERE = 'GLOBAL', GROUP_MA = 'RESSORTS',
+                VALE = (VAL, 0., 0., )),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES1', VALE = 25.0),
+           _F(  CARA = 'M_T_D_N',  GROUP_NO = 'MASSES2', VALE = 25.0))
+                         )
+
+
+CON_LIM=AFFE_CHAR_MECA(  MODELE=MODELE,DDL_IMPO=(
+              _F(  GROUP_NO = 'ENCASTRE',  DX = 0.,  DY = 0.,  DZ = 0.),
+              _F(  GROUP_NO = 'MASSES',              DY = 0.,  DZ = 0.))
+                       )
+
+CL_BICHO=AFFE_CHAR_MECA(  MODELE=BICHOC,DDL_IMPO=(
+              _F(  GROUP_NO = 'ENCBICHO',     DX = 0.,  DY = 0.,  DZ = 0.),
+              _F(  GROUP_NO = ( 'MASSES1', 'MASSES2',), DY = 0.,  DZ = 0.))
+                       )
+
+MACRO_MATR_ASSE(  MODELE=MODELE,
+                  CHARGE=CON_LIM,
+                  CARA_ELEM=CARA_ELE,
+                  NUME_DDL=CO("NUMEDDL"),
+                  MATR_ASSE=(
+                 _F(  MATRICE = CO("RIGIDITE"),  OPTION = 'RIGI_MECA'),
+                 _F(  MATRICE = CO("MASSE"),     OPTION = 'MASS_MECA'))
+               )
+
+MACRO_MATR_ASSE(  MODELE=BICHOC,
+                  CHARGE=CL_BICHO,
+                  CARA_ELEM=CARA_BIC,
+                  NUME_DDL=CO("NUMDDLC"),
+                  MATR_ASSE=(
+                 _F(  MATRICE = CO("RIGI_BIC"),  OPTION = 'RIGI_MECA'),
+                 _F(  MATRICE = CO("MASS_BIC"),  OPTION = 'MASS_MECA'))
+               )
+
+MODE_MEC=MODE_ITER_SIMULT(  MATR_A=RIGIDITE,   MATR_B=MASSE )
+
+MODE_MEC=NORM_MODE(reuse=MODE_MEC,  MODE=MODE_MEC,   NORME='MASS_GENE' )
+
+MODE_BIC=MODE_ITER_SIMULT(  MATR_A=RIGI_BIC,   MATR_B=MASS_BIC,
+                  METHODE='JACOBI',
+                  OPTION='SANS',
+                  CALC_FREQ=_F(  OPTION = 'BANDE',  FREQ = (1., 10., ))
+                            )
+
+MODE_BIC=NORM_MODE(reuse=MODE_BIC,  MODE=MODE_BIC,   NORME='MASS_GENE' )
+
+MODE_STA=MODE_STATIQUE(  MATR_RIGI=RIGIDITE,   MATR_MASS=MASSE,
+                          MODE_STAT=_F(  TOUT = 'OUI', AVEC_CMP = 'DX') )
+
+MSTA_BIC=MODE_STATIQUE(  MATR_RIGI=RIGI_BIC,   MATR_MASS=MASS_BIC,
+                          MODE_STAT=_F(  TOUT = 'OUI', AVEC_CMP = 'DX') )
+
+
+L_INST=DEFI_LIST_REEL(  DEBUT=0.,
+                           INTERVALLE=_F(  JUSQU_A = 1., PAS = 0.0001) )
+
+OMEGAA=DEFI_VALEUR( R8=EVAL("""2.*PI*10.""") )
+
+ACCE1 = FORMULE(REEL="""(REEL:INST) = SIN(OMEGAA*INST) """)
+ACCELER1=CALC_FONC_INTERP( FONCTION=ACCE1, LIST_PARA=L_INST,
+                               PROL_DROITE='LINEAIRE',
+                              PROL_GAUCHE='LINEAIRE',
+                               NOM_RESU='ACCE'       )
+
+ACCE2 = FORMULE(REEL="""(REEL:INST) =- SIN(OMEGAA*INST) """)
+ACCELER2=CALC_FONC_INTERP( FONCTION=ACCE2, LIST_PARA=L_INST,
+                               PROL_DROITE='LINEAIRE',
+                              PROL_GAUCHE='LINEAIRE',
+                               NOM_RESU='ACCE'       )
+
+VITE1 = FORMULE(REEL="""(REEL:INST) =-COS(OMEGAA*INST)/OMEGAA """)
+VITESSE1=CALC_FONC_INTERP( FONCTION=VITE1, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='VITE'       )
+
+DEPL1 = FORMULE(REEL="""(REEL:INST) =-SIN(OMEGAA*INST)/(OMEGAA**2) """)
+DEPLACE1=CALC_FONC_INTERP( FONCTION=DEPL1, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='DEPL'       )
+
+VITE2 = FORMULE(REEL="""(REEL:INST) =COS(OMEGAA*INST)/OMEGAA """)
+VITESSE2=CALC_FONC_INTERP( FONCTION=VITE2, LIST_PARA=L_INST,
+                       PROL_DROITE='LINEAIRE',
+                      PROL_GAUCHE='LINEAIRE',
+                      NOM_RESU='VITE'       )
+
+INCLUDE(   UNITE=11,   INFO=1 )
+
+MUR=DEFI_OBSTACLE(   TYPE='PLAN_Z' )
+
+TRAN_GE1=DYNA_TRAN_MODAL(  MASS_GENE=MASS_GEN,   RIGI_GENE=RIGI_GEN,
+                METHODE='EULER',
+                AMOR_REDUIT=0.07, 
+                MODE_STAT=MODE_STA,
+                EXCIT=_F(
+                       VECT_GENE = VECT_X,
+                       ACCE = ACCELER1,
+                       VITE = VITESSE1,
+                       DEPL = DEPLACE1,
+                       MULT_APPUI = 'OUI',
+                       DIRECTION = ( 1., 0., 0.,),
+                       NOEUD = 'NO1'),
+                CHOC=_F(  GROUP_NO_1 = 'MASSES',
+                      OBSTACLE = MUR,
+                      INTITULE = 'NO2/MUR',
+                      ORIG_OBST = ( -1., 0., 0., ),
+                      NORM_OBST = (  0., 0., 1., ),
+                      JEU = 1.1005,
+                      RIGI_NOR = 5.76E7,
+                      AMOR_NOR = 0.,
+                      RIGI_TAN = 0.,
+                      COULOMB = 0.0),
+                INCREMENT=_F( INST_INIT = 0.,  INST_FIN = 1.,  PAS = 0.0002),
+                ARCHIVAGE=_F(  PAS_ARCH = 8)
+                          )
+
+
+MULT_X1=CALC_CHAR_SEISME(  MATR_MASS=MASS_BIC,  DIRECTION=( 1., 0., 0.,),
+                           MODE_STAT=MSTA_BIC,  NOEUD='NO1' )
+
+MULT_X2=CALC_CHAR_SEISME(  MATR_MASS=MASS_BIC,  DIRECTION=( 1., 0., 0.,),
+                           MODE_STAT=MSTA_BIC,  NOEUD='NO11' )
+
+MACRO_PROJ_BASE(BASE=MODE_BIC,
+                MATR_ASSE_GENE=(
+                _F( MATRICE = CO("MGEN_BIC"), MATR_ASSE = MASS_BIC),
+                _F( MATRICE = CO("RGEN_BIC"), MATR_ASSE = RIGI_BIC)),
+                VECT_ASSE_GENE=(
+                _F( VECTEUR = CO("VECT_X1"),  VECT_ASSE = MULT_X1),
+                _F( VECTEUR = CO("VECT_X2"),  VECT_ASSE = MULT_X2))
+               )
+
+
+GRILLE=DEFI_OBSTACLE(   TYPE='BI_PLAN_Z' )
+
+
+FIN()
diff --git a/Aster/Tests/err.comm b/Aster/Tests/err.comm
new file mode 100644 (file)
index 0000000..f037ce5
--- /dev/null
@@ -0,0 +1,16 @@
+
+
+DEBUT();
+
+MA=LIRE_MAILLAGE();
+
+kk=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+uu=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                           NU=0.3,),);
+
+FIN();
diff --git a/Aster/Tests/err2.comm b/Aster/Tests/err2.comm
new file mode 100644 (file)
index 0000000..1f14ec0
--- /dev/null
@@ -0,0 +1,19 @@
+
+
+DEBUT();
+
+MA=LIRE_MAILLAGE();
+
+kk=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+uu=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                         NU=0.3,),);
+
+sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                           NU=0.3,),);
+
+sansnom=DEFI_MATERIAU(ELAS=_F(E=56.24,
+                           NU=0.3,),);
+
+FIN();
diff --git a/Aster/Tests/err3.comm b/Aster/Tests/err3.comm
new file mode 100644 (file)
index 0000000..371a242
--- /dev/null
@@ -0,0 +1,60 @@
+
+
+DEBUT();
+
+ma=LIRE_MAILLAGE();
+
+air=DEFI_MATERIAU();
+
+champmat=AFFE_MATERIAU(MAILLAGE=ma,
+                       AFFE=_F(TOUT='OUI',
+                               MATER=air,),);
+
+mo=AFFE_MODELE(MAILLAGE=ma,
+               AFFE=_F(TOUT='OUI',
+                       PHENOMENE='ACOUSTIQUE',
+                       MODELISATION='3D',),);
+
+characou=AFFE_CHAR_ACOU(MODELE=mo,
+                        VITE_FACE=_F(GROUP_MA=('ENTREE','SORTIE','TOTO','TITI',),
+                                     VNOR=('RI',0.014,0.0,),),);
+
+MACRO_MATR_ASSE(MODELE=mo,
+                NUME_DDL=CO('num'),
+                MATR_ASSE=_F(MATRICE=CO('matasm'),
+                             OPTION='MASS_ACOU',),);
+
+vectelem=CALC_VECT_ELEM(OPTION='CHAR_ACOU',
+                        CHAM_MATER=champmat,
+                        CHARGE=characou,);
+
+sansnom=ASSE_VECTEUR(VECT_ELEM=None,
+                     NUME_DDL=num,);
+
+sansnom=ASSE_VECTEUR(VECT_ELEM=vectelem,
+                     NUME_DDL=num,);
+
+ch=ASSE_VECTEUR(VECT_ELEM=vectelem,
+                     NUME_DDL=num,);
+
+sansnom=COMB_CHAM_NO(COMB_C=_F(CHAM_NO=None,),);
+
+sansnom=COMB_CHAM_NO(COMB_C=_F(CHAM_NO=ch,
+                            COEF_R=1,),);
+
+chno=COMB_CHAM_NO(COMB_C=_F(CHAM_NO=ch,
+                            COEF_R=1,),);
+
+matasm=FACT_LDLT(reuse =matasm,
+                 MATR_ASSE=matasm,);
+
+sansnom=RESO_LDLT(MATR_FACT=matasm,
+                  CHAM_NO=None,
+                  );
+sansnom=RESO_LDLT(MATR_FACT=matasm,
+                  CHAM_NO=chno,
+                  );
+rr =RESO_LDLT(MATR_FACT=matasm,
+                  CHAM_NO=chno,
+                  );
+
diff --git a/Aster/Tests/torsion.comm b/Aster/Tests/torsion.comm
new file mode 100755 (executable)
index 0000000..83f5609
--- /dev/null
@@ -0,0 +1,340 @@
+              DEBUT();
+
+
+              INCLUDE(UNITE: 80);
+TPS =  1.     ;
+
+
+
+SY = 90. ;
+
+
+
+A   =  1.     ;
+H   =  0.01   ;
+N   =  50     ;
+T   =  0.01   ;
+TD = DEFI_VALEUR(R8: EVAL(T*180./PI)) ;
+CT = DEFI_VALEUR(R8: EVAL(COS(T))) ;
+ST = DEFI_VALEUR(R8: EVAL(SIN(T))) ;     
+MST= DEFI_VALEUR(R8: EVAL(-ST));
+RAT= DEFI_VALEUR(R8: EVAL(H/A));
+
+
+K_REF = DEFI_VALEUR( R8: EVAL(0.9845615*Q1) );
+EPS_Y = DEFI_VALEUR( R8: EVAL( (1./K_REF)**5. ));
+YOUNG = DEFI_VALEUR( R8: EVAL(SY/EPS_Y) );
+
+!FORMULE( REEL: (
+  RP(REEL:EPSI) = K_REF * SY * EPSI**0.2
+  ) );
+  
+ECH_EPSI = DEFI_LIST_REEL (
+              DEBUT: EPS_Y
+              INTERVALLE: (
+                JUSQU_A: 3.
+                NOMBRE : 300
+                )
+              ) ;
+  
+TRAC      = CALC_FONC_INTERP (
+              FONCTION: RP
+              LIST_PARA  :  ECH_EPSI
+              PROL_GAUCHE: 'LINEAIRE'
+              PROL_DROIT : 'LINEAIRE'
+              ) ;
+              
+              
+            PRE_GIBI();
+ MA =       LIRE_MAILLAGE();
+
+&MA =       DEFI_GROUP
+              (
+              MAILLAGE: MA
+              CREA_GROUP_NO:
+                (
+                TOUT_GROUP_MA: 'OUI'
+                )
+              ) ;
+              
+
+ CUIVRE   = DEFI_MATERIAU
+              (
+              ELAS :
+                (
+                E : YOUNG               
+                NU: 0.3             
+                )
+              TRACTION : (
+                SIGM: TRAC
+                )
+              NON_LOCAL: (
+                LONG_CARA: LC
+                )
+              ) ;
+
+ CHMAT =    AFFE_MATERIAU
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA: TRANCHE
+                MATER   : CUIVRE
+                )
+              ) ;
+              
+
+ MO_MECA =   AFFE_MODELE
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA     : TRANCHE
+                PHENOMENE    : 'MECANIQUE'
+                MODELISATION : '3D_SI'
+                )
+              ) ;
+
+ MO_DELO = AFFE_MODELE (
+             MAILLAGE: MA
+             AFFE: 
+               (
+               GROUP_MA: TRANCHE
+               PHENOMENE: 'NON_LOCAL'
+               MODELISATION: '3D'
+               )
+             ) ;
+             
+
+!FORMULE ( REEL : ( UX_IMP(REEL: INST, REEL:X, REEL:Y) =
+                   -INST*RAT*Y
+          ));
+!FORMULE ( REEL : ( UY_IMP(REEL: INST, REEL:X, REEL:Y) = 
+                    INST*RAT*X
+          ));
+!FORMULE ( REEL : ( UZ_IMP(REEL:X, REEL:Y) =  0. ));
+
+
+ ANCRAGE   = AFFE_CHAR_MECA   (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: BAS
+                DX: 0.
+                DY: 0.
+                DZ: 0.
+                )
+              ) ;
+
+ TORSION  = AFFE_CHAR_MECA_F (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: HAUT
+                DX      : UX_IMP
+                DY      : UY_IMP
+                DZ      : UZ_IMP
+                )
+              ) ;
+                
+
+ SYMETRIE = AFFE_CHAR_MECA (
+              MODELE: MO_MECA
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DX' )
+                COEF_MULT_1  : (CT MST)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DY' )
+                COEF_MULT_1  : (ST CT)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DZ')
+                DDL_2        : ('DZ')
+                COEF_MULT_1  : (1.)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              ) ;
+              
+            
+ INSTANTS = DEFI_LIST_REEL
+              (
+              DEBUT: 0.
+              INTERVALLE:
+                (JUSQU_A: TPS  NOMBRE: 50)
+              ) ;
+
+
+
+ EVOL =     STAT_NON_LINE
+              (
+              MODELE: MO_MECA
+              CHAM_MATER: CHMAT
+              EXCIT :
+               (CHARGE: TORSION)
+               (CHARGE: ANCRAGE)
+               (CHARGE: SYMETRIE)                
+              INCREMENT:
+                (
+                LIST_INST: INSTANTS
+                SUBD_PAS : 5
+                SUBD_PAS_MINI: 0.0001
+                )
+              COMP_INCR:
+                (
+                RELATION: 'PLAS_GRAD_TRAC'
+                DEFORMATION: 'PETIT'
+                )
+              NEWTON:
+                (
+                MATRICE:'ELASTIQUE'
+                )
+              CONVERGENCE:
+                (
+                RESI_GLOB_RELA: 1.E-4
+                ITER_GLOB_MAXI: 500
+                ITER_INTE_MAXI: 250
+                RESI_INTE_RELA: 1.E-9
+                )
+              ARCHIVAGE: (
+                ARCH_ETAT_INIT: 'OUI'
+                LIST_INST     : INSTANTS
+                )
+
+              MODELE_NON_LOCAL: MO_DELO
+              LAGR_NON_LOCAL: (
+                RESI_PRIM_ABSO: 1.E-9
+                RESI_DUAL_ABSO: 1.E-4
+                RHO: 1000.
+                ITER_PRIM_MAXI: 100
+                ITER_DUAL_MAXI: 10
+                )
+              ) ;
+
+          
+
+&EVOL       = CALC_ELEM (
+                MODELE: MO_MECA
+                CHAM_MATER: CHMAT
+                RESULTAT  : EVOL
+                OPTION: ('SIEF_ELNO_ELGA' 'VARI_ELNO_ELGA')
+                ) ;
+
+&EVOL       = CALC_NO (
+                RESULTAT: EVOL
+                OPTION: ('FORC_NODA' 
+                         'SIEF_NOEU_ELGA' 'VARI_NOEU_ELGA')
+                ) ;
+
+  
+ECHAN       = INTE_MAIL_3D (
+                MAILLAGE    : MA
+                DEFI_SEGMENT: (
+                  GROUP_NO_ORIG: O1
+                  GROUP_NO_EXTR: A1
+                  )
+                ) ;
+                
+ PLAS_CUM = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'P'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'VARI_NOEU_ELGA'
+                NOM_CMP  : 'V1'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+ SIGMA    = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'SIYZ'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'SIEF_NOEU_ELGA'
+                NOM_CMP  : 'SIYZ'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+
+ MOM_A   = POST_RELEVE_T (
+              ACTION: (
+                INTITULE  : 'MOMENT'
+                GROUP_NO  :  HAUT
+                RESULTAT  :  EVOL
+                NOM_CHAM  : 'FORC_NODA'
+                RESULTANTE: ('DX' 'DY' 'DZ')
+                MOMENT    : ('DRX' 'DRY' 'DRZ')
+                POINT     : (0. 0. H)
+                TOUT_ORDRE: 'OUI'
+                OPERATION : 'EXTRACTION'
+                )
+              ) ;
+
+ MOM_KA_A   = RECU_FONCTION (
+              TABLE : MOM_A
+              PARA_X: 'INST'
+              PARA_Y: 'MOMENT_Z'
+              ) ;
+
+!FORMULE ( REEL:( MA3_KA(REEL: INST) = MOM_KA_A(INST)*360/TD/A**3/SY));
+
+
+
+              DEFUFI(
+                IMPRESSION: (
+                  NOM: 'POST_PY'
+                  UNITE: 81
+                )
+              ) ;
+              
+              
+              
+ IMPR_COURBE( 
+   FORMAT: 'AGRAF'
+   FICHIER: 'POST_PY'
+   COURBE: (
+     FONCTION : MA3_KA
+     LIST_PARA: INSTANTS
+     )
+   ) ;
+
+
+              FIN();
+              
+              
+IMPR_TABLE(TABLE:SIGMA);
+IMPR_TABLE(TABLE:PLAS_CUM);
+            FIN();              
\ No newline at end of file
diff --git a/Aster/alphasdist.py b/Aster/alphasdist.py
new file mode 100644 (file)
index 0000000..b7c7006
--- /dev/null
@@ -0,0 +1,120 @@
+"""
+     Ce module sert à construire les distributions de versions alpha d'EFICAS en fonction
+     du tag CVS courant (Vx_yaz). Une version alpha est une version dont toutes les fonctionnalités
+     ne sont pas implémentées. On utilise pour ces versions, les packages Noyau Validation Cata et Macro
+     locaux.
+     Les distributions sont :
+      - un tar.gz pour UNIX ne contenant pas mxTextTools
+      - un zip pour Windows contenant mx TextTools préinstallé
+     L'utilisation de ce module est la suivante :
+      1- Se mettre dans un répertoire de travail
+      2- Configurer son environnement pour utiliser le référentiel CVS EFICAS
+      3- Exporter les sources d'Eficas par la commande :
+            cvs export -r TAG -d Eficas_export EficasV1_2
+         ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_3a1)
+      4- Aller dans le répertoire Eficas_export
+      4- Executer le script alphasdist.py
+             python alphasdist.py
+         Ce qui a pour effet de creer un repertoire dist contenant les 2 distributions
+         et de les copier dans le répertoire indiqué par dir_download s'il est accessible
+
+"""
+import os,shutil,glob,sys
+import types
+
+version="$Name:  $"[7:-2] or 'Test1_3'
+# ==========Path du noyau local           ====================
+path_Noyau=".."
+# ============================================================
+nom_distrib="Eficas"+version+"AsterSTA6"
+path_distrib=os.path.join("dist",nom_distrib)
+path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools"
+dir_download= "/home/eficas/WWW/telechargement/eficas"
+
+def main():
+   if os.path.isdir('dist'):shutil.rmtree('dist')
+
+   copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL'])
+
+   copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+   copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
+   copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+   copyfiles('Cata/Macro',os.path.join(path_distrib,'Aster','Cata','Macro'),['*.py'])
+   copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+   copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
+   copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
+                                                            'editeur.ini',
+                                                            'eficas_aster.py',
+                                                           ])
+   copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
+   copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py'])
+
+   copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
+
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+
+   copyfiles(os.path.join(path_Noyau,'Noyau'),os.path.join(path_distrib,'Noyau'),['*.py'])
+   copyfiles(os.path.join(path_Noyau,'Validation'),os.path.join(path_distrib,'Validation'),['*.py'])
+   copyfiles('../Aster/Cata',os.path.join(path_distrib,'Aster','Cata'),['*.py',
+                                                                                       ])
+
+   copyfiles('../Tools',os.path.join(path_distrib,'Tools'),['*.py'])
+   copyfiles('../Tools/foztools',os.path.join(path_distrib,'Tools','foztools'),['*.py'])
+   
+   tarball= maketarball('dist',nom_distrib,nom_distrib)
+   try:
+      shutil.copy(tarball,dir_download)
+   except:
+      print "Repertoire de download inconnu : ",dir_download
+
+   try:
+      shutil.copytree(path_TextTools,os.path.join(path_distrib,'Tools','TextTools'))
+   except:
+      print "Impossible de recuperer mxTextTools : ",dir_download
+      sys.exit(1)
+
+   zipfile= makezipfile('dist',nom_distrib,nom_distrib)
+   try:
+      shutil.copy(zipfile,dir_download)
+   except:
+      print "Repertoire de download inconnu : ",dir_download
+
+def make_dir(dir_cible):
+   if type(dir_cible) is not types.StringType:
+      raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible`
+   head,tail=os.path.split(dir_cible)
+   tails=[tail]
+   while head and tail and not os.path.isdir(head):
+      head,tail=os.path.split(head)
+      tails.insert(0, tail)
+
+   for d in tails:
+      head = os.path.join(head, d)
+      if not os.path.isdir(head):os.mkdir(head)
+
+
+def copyfiles(dir_origin,dir_cible,listfiles):
+   if not os.path.isdir(dir_cible):make_dir(dir_cible)
+   for glob_files in listfiles:
+      for file in glob.glob(os.path.join(dir_origin,glob_files)):
+         shutil.copy(file,dir_cible)
+
+def maketarball(dir_trav,dir_cible,nom_tar):
+   prev=os.getcwd()
+   print prev
+   os.chdir(dir_trav)
+   os.system("tar -cf "+nom_tar+".tar "+dir_cible)
+   os.system("gzip -f9 "+nom_tar+".tar ")
+   os.chdir(prev)
+   return os.path.join(dir_trav,nom_tar+".tar.gz")
+
+def makezipfile(dir_trav,dir_cible,nom_tar):
+   prev=os.getcwd()
+   os.chdir(dir_trav)
+   os.system("zip -rq "+nom_tar+".zip "+dir_cible)
+   os.chdir(prev)
+   return os.path.join(dir_trav,nom_tar+".zip")
+
+main()
+
index e86dc06901b9f0f3199f02b47190d782c403d5c3..c9e1a9e7f551effb1f349b447444c910a7aaba83 100644 (file)
@@ -1,3 +1,23 @@
+#            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
 
 import prefs
@@ -12,11 +32,14 @@ isdeveloppeur   =       "NON"
 path_cata_dev   =       "/tmp/cata"
 # Répertoire temporaire
 rep_travail     =   "/tmp"
+# Répertoire initial
+initialdir=os.curdir
 
 # Choix des catalogues
 rep_mat="bidon"
 
-catalogues = (('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'),
+catalogues = (
+              #('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'),
               ('ASTER','v6',os.path.join(rep_cata,'cata_STA6.py'),'python','defaut'),
              )
 
index 2debb64d1a3fb15ec9c28852a860e8db0513a828..ca862a9415587e737c6c870212ef6b260a65743e 100755 (executable)
@@ -1,4 +1,24 @@
 #!/usr/bin/env python
+#            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
 """
index f3d82ae82ca0c1fd12e7aeb21ce229035306274d..261ee3b2d3db9d67c007c946c2c70c55578466d4 100644 (file)
@@ -1,3 +1,23 @@
+#            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
@@ -19,3 +39,50 @@ CODE_PATH = None
 # Par défaut on utilise le répertoire icons dans Editeur
 ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
 
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+labels= ('Fichier','Edition','Jeu de commandes',
+#               'Catalogue','Browsers',
+                'Options',
+                'Aide',
+           )
+
+appli_composants=['readercata','bureau',
+#                  'browser',
+                   'options',
+           ]
+
+menu_defs={ 'bureau': [
+              ('Fichier',[
+                           ('Nouveau','newJDC'),
+                           ('Ouvrir','openJDC'),
+                           ('Enregistrer','saveJDC'),
+                           ('Enregistrer sous','saveasJDC'),
+                           None,
+                           ('Fermer','closeJDC'),
+                           ('Quitter','exitEFICAS'),
+                         ]
+              ),
+              ('Edition',[
+                           ('Copier','copy'),
+                           ('Couper','cut'),
+                           ('Coller','paste'),
+                         ]
+              ),
+              ('Jeu de commandes',[
+                                   ('Rapport de validation','visuCRJDC'),
+           #                        ('Fichier à plat','visu_a_plat'),
+                                   ('Fichier format v6','visuJDC_py'),
+                                   ('Fichier source','visu_txt_brut_JDC'),
+                                   ('Paramètres Eficas','affichage_fichier_ini'),
+                                   ('Mots-clés inconnus','mc_inconnus'),
+                                  ]
+              ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS'),
+                      ]
+              ),
+             ]
+           }
+
diff --git a/Aster/sdist.py b/Aster/sdist.py
new file mode 100644 (file)
index 0000000..f95b682
--- /dev/null
@@ -0,0 +1,118 @@
+"""
+     Ce module sert à construire les distributions d'EFICAS en fonction
+     du tag CVS courant
+     Les distributions sont :
+      - un tar.gz pour UNIX ne contenant pas mxTextTools
+      - un zip pour Windows contenant mx TextTools préinstallé
+     L'utilisation de ce module est la suivante :
+      1- Se mettre dans un répertoire de travail
+      2- Configurer son environnement pour utiliser le référentiel CVS EFICAS
+      3- Exporter les sources d'EficasV1 par la commande :
+            cvs export -r TAG -d Eficas_export EficasV1
+         ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_1p1)
+      4- Copier le répertoire fourni par Aster (ACCAS6.2.0) au meme niveau que Eficas_export
+      5- Aller dans le répertoire Eficas_export
+      6- Executer le script sdist.py
+             python sdist.py
+         Ce qui a pour effet de creer un repertoire dist contenant les 2 distributions
+         et de les copier dans le répertoire indiqué par dir_download s'il est accessible
+
+"""
+import os,shutil,glob,sys
+import types
+
+version="$Name:  $"[7:-2] or 'Test1_2'
+# ==========Path du noyau fourni par Aster====================
+path_Noyau="../../Accas6.3.0"
+# ============================================================
+nom_distrib="Eficas"+version+"AsterSTA6"
+path_distrib=os.path.join("dist",nom_distrib)
+path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools"
+dir_download= "/home/eficas/WWW/telechargement/eficas"
+
+def main():
+   if os.path.isdir('dist'):shutil.rmtree('dist')
+
+   copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL'])
+
+   copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+   copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
+   copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+   copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+   copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE/fichiers'),['*'])
+   copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
+                                                            'editeur.ini',
+                                                            'eficas_aster.py',
+                                                           ])
+   copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
+   copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py'])
+
+   copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
+
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+
+   copyfiles(os.path.join(path_Noyau,'Noyau'),os.path.join(path_distrib,'Noyau'),['*.py'])
+   copyfiles(os.path.join(path_Noyau,'Validation'),os.path.join(path_distrib,'Validation'),['*.py'])
+   copyfiles(os.path.join(path_Noyau,'Cata'),os.path.join(path_distrib,'Aster','Cata'),['*.py',
+                                                                                       ])
+
+   copyfiles('../Tools',os.path.join(path_distrib,'Tools'),['*.py'])
+   copyfiles('../Tools/foztools',os.path.join(path_distrib,'Tools','foztools'),['*.py'])
+   
+   tarball= maketarball('dist',nom_distrib,nom_distrib)
+   try:
+      shutil.copy(tarball,dir_download)
+   except:
+      print "Repertoire de download inconnu : ",dir_download
+
+   try:
+      shutil.copytree(path_TextTools,os.path.join(path_distrib,'Tools','TextTools'))
+   except:
+      print "Impossible de recuperer mxTextTools : ",dir_download
+      sys.exit(1)
+
+   zipfile= makezipfile('dist',nom_distrib,nom_distrib)
+   try:
+      shutil.copy(zipfile,dir_download)
+   except:
+      print "Repertoire de download inconnu : ",dir_download
+
+def make_dir(dir_cible):
+   if type(dir_cible) is not types.StringType:
+      raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible`
+   head,tail=os.path.split(dir_cible)
+   tails=[tail]
+   while head and tail and not os.path.isdir(head):
+      head,tail=os.path.split(head)
+      tails.insert(0, tail)
+
+   for d in tails:
+      head = os.path.join(head, d)
+      if not os.path.isdir(head):os.mkdir(head)
+
+
+def copyfiles(dir_origin,dir_cible,listfiles):
+   if not os.path.isdir(dir_cible):make_dir(dir_cible)
+   for glob_files in listfiles:
+      for file in glob.glob(os.path.join(dir_origin,glob_files)):
+         shutil.copy(file,dir_cible)
+
+def maketarball(dir_trav,dir_cible,nom_tar):
+   prev=os.getcwd()
+   print prev
+   os.chdir(dir_trav)
+   os.system("tar -cf "+nom_tar+".tar "+dir_cible)
+   os.system("gzip -f9 "+nom_tar+".tar ")
+   os.chdir(prev)
+   return os.path.join(dir_trav,nom_tar+".tar.gz")
+
+def makezipfile(dir_trav,dir_cible,nom_tar):
+   prev=os.getcwd()
+   os.chdir(dir_trav)
+   os.system("zip -rq "+nom_tar+".zip "+dir_cible)
+   os.chdir(prev)
+   return os.path.join(dir_trav,nom_tar+".zip")
+
+main()
+
diff --git a/Descartes/cata_descartes.py b/Descartes/cata_descartes.py
new file mode 100755 (executable)
index 0000000..ae8d16a
--- /dev/null
@@ -0,0 +1,1655 @@
+# debut entete
+
+import Accas
+from Accas import *
+
+JdC = JDC_CATA(code="DESCARTES",
+               execmodul=None
+              )
+
+import string
+
+class TObjet(ASSD):
+  def __init__(self,**args):
+    apply(ASSD.__init__,(self,),args)
+    name=string.ljust(self.__class__.__name__[:12],12)
+
+  def __getitem__(self,attrname):
+    return self.etape[attrname]
+    
+  def db(self):
+    if hasattr(self,'_dbsun'):return self._dbsun
+    else:
+      self._dbsun={'t':1}
+      return self._dbsun
+
+  def putdb(self,o):
+    self._dbsun=o
+
+#
+# Definition des types d'objet qui seront produits par les commandes
+# Il suffit de declarer une classe qui derive de la classe mere TObjet
+# qui derive elle meme de la classe ASSD utilisee dans EFICAS
+#
+class Isotope (TObjet):pass
+class BornesEnergie (TObjet):pass
+class BibliothequeIsotopes (TObjet):pass
+class ChaineFiliation(TObjet) :pass
+class Materiau (TObjet):pass
+class Point (TObjet):pass
+class Vecteur (TObjet):pass
+class Droite (TObjet):pass
+class Segment (TObjet):pass
+class ArcCercle (TObjet):pass
+class Secteur (TObjet):pass
+class Conique (TObjet):pass
+class Triangle (TObjet):pass
+class Rectangle (TObjet):pass
+class Carre (TObjet):pass
+class Hexagone (TObjet):pass
+class Polygone (TObjet):pass
+class Sphere (TObjet):pass
+class BoiteRectangulaire (TObjet):pass
+class BoiteGenerale (TObjet):pass
+class CylindreX (TObjet):pass
+class CylindreY (TObjet):pass
+class CylindreZ (TObjet):pass
+class Cylindre (TObjet):pass
+class Cone (TObjet):pass
+class PrismeHexagonal (TObjet):pass
+class Tore (TObjet):pass
+class Plan (TObjet):pass
+class PlanX (TObjet):pass
+class PlanY (TObjet):pass
+class PlanZ (TObjet):pass
+class Polyedre (TObjet):pass
+class Quadrique (TObjet):pass
+class Cellule(TObjet) :pass
+class Cluster(TObjet):pass
+class Orientation(TObjet):pass
+class FormePositionnee (TObjet):pass
+class GeometrieSurfacique(TObjet):pass
+class GeometrieCombinatoire(TObjet):pass
+class Reseau(TObjet):pass
+class GrilleAssemblage (TObjet):pass
+class PartieInferieureAssemblageCombustible (TObjet):pass
+class PartieSuperieureAssemblageCombustible (TObjet):pass
+class OptionsAutoprotection(TObjet):pass
+class AssemblageType(TObjet):pass
+class AssemblageCombustibleCharge (TObjet):pass
+class ElementBarre (TObjet):pass
+class ElementsGrappeCommande (TObjet):pass
+class ElementsAbsorbantsFixes (TObjet):pass
+class GrappeBouchonAssemblage (TObjet):pass
+#class ElementsAssemblage (TObjet):pass
+class SystemeUnitesMesure (TObjet):pass
+class Vide (TObjet):pass
+class ReflexionIsotrope (TObjet):pass
+class ReflexionSpeculaire (TObjet):pass
+class Albedo (TObjet):pass
+class Translation (TObjet):pass
+class Rotation (TObjet):pass
+class ConditionLimiteSpeciale (TObjet):pass
+class ConditionLimiteGenerale (TObjet):pass
+class CorrespondanceReperePositionReseau (TObjet):pass
+class PositionAssemblageCombustible (TObjet):pass
+class PositionInstrumentationInterne (TObjet):pass
+class PositionGrappesCommande (TObjet):pass
+class StructuresInternesReacteur (TObjet):pass
+class CaracteristiquesPalier (TObjet):pass
+class SiteNucleaire (TObjet):pass
+class EspaceVariations (TObjet):pass
+class DonneesEvolutionIrradiation (TObjet):pass
+class ConditionsFonctionnementMoyennes (TObjet):pass
+#class PlanChargementCoeur (TObjet):pass
+class DateClesCampagne (TObjet):pass
+class OptionsCodes (TObjet):pass
+class DonneesGeneralesEtude (TObjet):pass
+# fin entete
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ISOTOPE : Classe de definition d'un isotope
+#                   Caracteristiques elementaires des isotopes ou molecules et liens avec les bibliotheques de donnees nucleaires
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ISOTOPE=OPER(nom="ISOTOPE",sd_prod=Isotope,op=0,
+
+  fr                           = "Definition d'un isotope ou d'une molecule et de ses bibliotheques",
+  ang = "Isotope or Molecule definition and data libraries",
+  Symbole                      = SIMP (typ='TXM',statut='o'),
+  MasseAtomique                = SIMP (typ='R',statut='o',fr="Masse atomique en uma"),
+  NombreDeCharge               = SIMP (typ='I',statut='o',fr="Nombre de charge atomique Z"),
+  NombreDeMasse                = SIMP (typ='I',statut='o',fr="Nombre de masse atomique A"),
+  Type                        = SIMP (typ='TXM',statut='f',into=('Standard','Detecteur','Structure','Poison'),fr="Type de l'isotope"),
+  ConstituantsChimiques        = SIMP (typ='TXM',max='**',statut='f',fr="Symboles des constituants elementaires de la molecule"),
+  NomsBibliotheque             = NUPL ( max      = '**',
+                                         statut   = 'o',
+                                         elements = (  SIMP (typ='TXM',fr="Identificateur Procedure Bibliotheque"),
+                                                       SIMP (typ='TXM',fr="Identifiant de l'isotope dans la bibliotheque"))),
+  NomsBibliothequeAutoprotegee = NUPL ( max      = '**',
+                                         statut   = 'f',
+                                         elements = (  SIMP (typ='TXM',fr="Identificateur Procedure Bibliotheque"),
+                                                       SIMP (typ='TXM',fr="Identifiant Bibliotheque autoprotegee de l'isotope")))
+ ); 
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BORNES_ENERGIE : Classe de definition des limites en energie d'un maillage multigroupe
+#                   
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BORNES_ENERGIE=OPER(nom="BORNES_ENERGIE",sd_prod=BornesEnergie,op=0,
+    fr                 = "Definition d une discretisation de l espace energetique",
+    ang                = "Definition of an energy discretisation",
+    NbMacrogroupes     = SIMP (typ='I',statut='o',fr="Nombre de macrogroupes du maillage energetique"),
+    BornesEnergetiques  = SIMP (typ='R',max='**',statut='o',fr="Bornes en energie du maillage energetique"),
+ ); 
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BIBLIOTHEQUE_ISOTOPES : Classe de definition d'une bibliotheque des donnees nucleaires d'isotopes ou de molecules 
+#                                 Caracteristiques elementaires des isotopes ou molecules
+#                                 et liens avec les bibliotheques de donnees nucleaires
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BIBLIOTHEQUE_ISOTOPES=OPER(nom="BIBLIOTHEQUE_ISOTOPES",sd_prod=BibliothequeIsotopes,op=0, 
+
+  fr                        = "Definition d une bibliotheque de donnees nucleaires des isotopes",
+  ang = "Definition of an isotopic nuclear data library",
+  Description               = SIMP (typ='TXM',statut='f'),
+  Fichiers                  = FACT (
+      max      = '**',
+      statut   = 'o',
+      SystemeExploitation       = SIMP (typ='TXM',fr="Systeme d'exploitation"),
+      NomFichier                = SIMP (typ='TXM',fr="Nom du fichier"),
+      FormatFichier             = SIMP (typ='TXM',fr="Format du fichier",statut='f'),
+      BornesEnergetiques        = SIMP (typ=BornesEnergie,statut='f',fr="Bornes en eV du maillage en energie"))
+  );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CHAINE_FILIATION : Classe de definition des filiations isotopiques dues aux transmutations
+#                            sous irradiation neutronique. 
+#                            Description textuelle sous format (APOLLO2, SUNSET ou DARWIN) ou description particuliere Descartes.
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CHAINE_FILIATION = OPER (nom="CHAINE_FILIATION",op=0,sd_prod=ChaineFiliation,
+
+  fr                   = "Definition d'une chaine de filiation isotopique sous irradiation",
+  ang                  = "Definition of a depletion chain",
+  NombreIsotopes       = SIMP (typ='I',statut='o',fr="Nombre d'isotopes decrits dans la chaine"),
+  ChaineAPOLLO2        = SIMP (typ='TXM',statut='f',fr="Description de la chaine sous format APOLLO2"),
+  ChaineSUNSET         = SIMP (typ='TXM',statut='f',fr="Description de la chaine sous format SUNSET"),
+  ChaineDARWIN         = SIMP (typ='TXM',statut='f',fr="Nom du fichier contenant la description DARWIN de la chaine"),
+  Isotopes          = FACT ( max      = '**', statut   = 'f',
+                              Isotope = FACT ( max      = '**', statut   = 'f',
+                                               IsotopePere = SIMP (typ=Isotope,fr="Nom isotope pere",statut='o'),
+                                               TypeReaction = SIMP (typ='TXM',fr="Type de reaction",statut='o'),
+                                               RapportBranchement =  SIMP (typ='R',fr="Rapport de branchement",defaut=1.,statut='f')
+                                             )
+                           )
+ );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe MATERIAU : Classe de définition d'un matériau à partir de mélange d'isotopes ou de matériaux.
+#                   Définition alternative par donnée des enrichissements
+#                    Caractéristiques fournies a 20 C.
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+MATERIAU=OPER(nom="MATERIAU",op=0,sd_prod=Materiau,
+
+  fr                   = "Definition d'un materiau",
+  ang = "Definition of a mixture",
+  TypeDefinition       = SIMP (typ='TXM',statut='f',defaut="Isotopique",into=("Isotopique","Enrichissement")),
+  BlocIsotopique       = BLOC (condition = "TypeDefinition=='Isotopique'",
+        Type           = SIMP (        statut = 'o',
+                               typ    = 'TXM',
+                               into   = ('Absorbant','Combustible','Melange','ModerateurInterne','ModerateurExterne','Detecteur',
+                                                 'Grille','Gaine','Tube','Poison','PoisonConsommable','AbsorbantIntegre',
+                                                 'Solide','Liquide','Gaz','MateriauVide'),
+                               defaut = 'Combustible'),
+        MethodeMelange = SIMP (statut='o',typ='TXM',into=('Isotopique','Massique','Concentration'),defaut='Massique'),
+        Constituants   = NUPL (        statut   = 'o',
+                               max      = '**',
+                               elements = (SIMP (typ=(Isotope,Materiau)),SIMP (typ='R')),
+                               fr       = "Couples (Isotope ou Materiau) et (Pourcentage ou Cencentration)")
+  ),
+  BlocEnrichissement   = BLOC (condition = "TypeDefinition=='Enrichissement'",
+        Type                 = SIMP (typ='TXM',into=('UO2','MOX','UO2Gadolinium','MOXGadolinium'),statut='o'),
+        EnrichissementU235   = SIMP (typ=('R','TXM'),defaut=3.7,statut='f',fr="Enrichissement % en U235 du combustible"),
+        EnrichissementPu     = SIMP (typ=('R','TXM'),defaut=0.,statut='f',fr="Enrichissement % en plutonium du combustible"),
+        EnrichissementGado   = SIMP (typ=('R','TXM'),defaut=0.,statut='f',fr="Enrichissement % en Gd2O3 du combustible"),
+        VecteurPu            = NUPL (  max='**',statut='f',
+                               elements=(      SIMP (typ=Isotope,fr="Nom isotope du plutonium"), 
+                                               SIMP (typ='R',fr="Pourcentage isotopique"))),
+        DateReference        = SIMP (typ='I',min=3,max=3,statut='f',fr="Date J M A de reference du combustible"),
+        DateDivergence       = SIMP (typ='I',min=3,max=3,statut='f',fr="Date J M A de divergence du reacteur ou ce combustible est charge"),
+        VieillissementJours  = SIMP (  typ    = 'R',
+                               defaut = 0.,
+                               statut = 'f',
+                               fr     = "Nbre de jours de vieillissement du combustible, calculable si on donne DateDivergence")),
+  MasseVolumique       = SIMP (statut='f',typ=('R','I','TXM'),fr="Masse volumique theorique du materiau g/cm3"),
+  TauxEvidement        = SIMP (statut='f',typ=('R','I'),fr="Taux % d'evidement du materiau"),
+  TauxPorosite         = SIMP (statut='f',typ=('R','I'),fr="Taux % de porosite du materiau"),
+  Temperature          = SIMP (statut='f',typ=('R','I','TXM'),fr="Temperature en Celsius du materiau"),
+  GazRemplissage       = SIMP (statut='f',typ=(Isotope,Materiau),defaut='HE4',fr="Gaz de remplissage des evidements du materiau solide"),
+  PressionInitialeGaz  = SIMP (statut='f',typ=('R','I'),defaut=32.,fr="Pression en bars du gaz de remplissage des evidements"),
+  DilatationLineaire   = SIMP (statut='f',typ=('R','I'),fr="Coefficient de dilatation thermique lineaire cm/C du materiau"),
+  Chaine              = SIMP (statut='f',typ=ChaineFiliation,defaut='ChaineSaturee',fr="Chaine de filiation isotopique associee au materiau"),
+  TauxImpuretes = SIMP (statut='f',typ=('R','I'),fr="Taux % d'impuretes")
+ );
+# ==================================================================================================================================
+#                                    Definition des Classes elementaires pour la geometrie
+# ==================================================================================================================================
+#  Classe POINT : Classe de definition d'un point de l'espace
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POINT = OPER (nom="POINT",op=0,sd_prod=Point,
+
+  fr          = "Definition d'un point de l'espace",
+  ang = "Definition of a point in space",
+  Coordonnees = SIMP (typ='R',min=2,max=3,statut='o',fr="Coordonnees du point dans l'espace")
+ );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe VECTEUR : Classe de definition d'un vecteur dans l'espace
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+VECTEUR = OPER (nom="VECTEUR",op=0,sd_prod=Vecteur,
+
+  fr          = "Definition d'un vecteur dans l'espace",
+  ang = "Definition of a vector in space",
+  regles = (UN_PARMI ('Composantes','Points')),
+  Composantes = SIMP (typ='R',min=2,max=3,statut='f',fr="Composantes du vecteur en 2D ou 3D"),
+  Points      = SIMP (typ=Point,min=2,max=2,statut='f',fr="Vecteur defini par deux points") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DROITE : Classe de definition d'une droite
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DROITE = OPER (nom="DROITE",op=0,sd_prod=Droite,
+
+  fr       = "Definition d'une droite par 2 POINTs, 1 POINT et 1 VECTEUR, ou Equation ax + by + cz + d = 0",
+  ang = "Definition of a straight line with 2 POINTs or with Equation ax + by + cz + d = 0",
+  regles = (UN_PARMI ('Points','Equation','VecteurOrigine')),
+  Points   = SIMP (typ=Point,min=2,max=2,statut='f',fr="Deux points de definition de la droite"),
+  Equation = SIMP (typ='R',min=2,max=4,statut='f',fr="Coefficients successifs abcd de l'equation d'une droite"),
+  VecteurOrigine = FACT (statut='f',
+  Vecteur  = SIMP (typ=Vecteur,statut='f',fr="Donnee du vecteur directeur de la droite"),
+  Origine  = SIMP (typ=Point,statut='f',fr="Donnee d'un point de passage de la droite"))) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SEGMENT : Classe de definition d'un segment (Idem DROITE + Longueur et Origine)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SEGMENT = OPER (nom="SEGMENT",op=0,sd_prod=Segment,
+
+  fr       = "Definition d'un segment 2 Points ou Origine + ((Longueur + Equation ax + by + d = 0) ou vecteur)",
+  ang = "Definition of a segment ax + by + cz + d = 0",
+  regles = (UN_PARMI ('Points','Equation','Vecteur')),
+  Points   = SIMP (typ=Point,min=2,max=2,statut='f',fr="Deux points de definition du segment"),
+  Equation = SIMP (typ='R',min=2,max=4,statut='f',fr="Coefficients successifs abcd de l'equation de la droite "),
+  Vecteur  = SIMP (typ=Vecteur,statut='f',fr="Donnee du vecteur directeur du segment"),
+  Longueur = SIMP (typ='R',statut='f',fr="Longueur du segment"),
+  Origine  = SIMP (typ=Point,statut='f',fr="Donnee de l'origine du segment") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ARC_CERCLE : Classe de definition d'un arc de cercle
+#                      Angles donnes en degres 
+#                       Dans le cas 2D on peut positionner l'arc de cercle en donnant l'angle du debut de l'arc par rapport a l'axe Ox
+#                       Dans le cas 3D on donne en plus la hauteur et l'axe directeur de l'arc
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ARC_CERCLE = OPER (nom="ARC_CERCLE",op=0,sd_prod=ArcCercle,
+
+  fr         = "Definition d'un arc de cercle",
+  ang = "Definition of a circular arc",
+  Type       = SIMP (typ='TXM',statut='f',defaut='2D',into=('2D','3D'),fr="Type d'arc 2D ou 3D"),
+  Rayon      = SIMP (typ='R',statut='o',fr="Rayon de l'arc de cercle"),
+  Angles     = SIMP (typ='R',max=2,defaut=(360.,0.),statut='f',fr="Angles en degres de l'arc : Total et Debut"),
+  VecteurAxe = SIMP (typ=Vecteur,statut='f',fr="Vecteur directeur de l'axe de l'arc") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SECTEUR :     Classe de definition d'un disque ou d'un secteur d'une couronne circulaire
+#                       Angle du secteur donne en degres (360° par defaut)
+#                       Dans le cas 2D on peut positionner le secteur en donnant l'angle du debut de secteur par rapport a l'axe Ox
+#                       Dans le cas 3D on donne en plus la hauteur et l'axe directeur du secteur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SECTEUR = OPER (nom="SECTEUR",op=0,sd_prod=Secteur,
+
+  fr         = "Definition d'un disque ou d'un secteur d'une couronne",
+  ang = "Definition of a circular sector",
+  Type       = SIMP (typ='TXM',statut='o',into=('2D','3D'),fr="Type de secteur 2D ou 3D"),
+  Rayons     = SIMP (typ='R',min=2,max=2,statut='o',fr="Rayons interne et externe de la couronne"),
+  Angles     = SIMP (typ='R',max=2,defaut=(360.,0.),statut='f',fr="Angles en degres du secteur"),
+  Hauteur    = SIMP (typ='R',defaut=0.,statut='f',fr="Hauteur du secteur"),
+  VecteurAxe = SIMP (typ=Vecteur,defaut=0.,statut='f',fr="Vecteur directeur de l'axe du secteur") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONIQUE : Classe de definition d'une conique 2D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONIQUE = OPER (nom="CONIQUE",op=0,sd_prod=Conique,
+
+  fr             = "Definition d'une conique 2D ax2+by2+cxy+dx+ey+f=0",
+  ang = "Definition of a quadratic curve 2D",
+  Equation       = SIMP (typ='R',min=2,max=6,statut='o',fr="Coefficients successifs abcdef de l'equation d'une conique"),
+  OrigineVecteur = NUPL (
+      elements = (SIMP (typ=Point),SIMP (typ=Vecteur)),
+      statut   = 'f',
+      fr       = "Donnee de l'origine et du vecteur directeur") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe TRIANGLE : Classe de definition d'un triangle
+#                      Angles donnes en degres par rapport a l'axe Ox horizontal
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+TRIANGLE = OPER (nom="TRIANGLE",op=0,sd_prod=Triangle,
+
+  fr     = "Definition d'un triangle",
+  ang = "Definition of a triangle",
+  regles = (UN_PARMI ('Points','AngleCotes')),
+  Points = SIMP (typ=Point,min=3,max=3,statut='f'),
+  AngleCotes = SIMP (typ='R',min=3,max=3,statut='f',fr="Donnee d'un Angle en degres et Longueurs de deux cotes")
+ );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RECTANGLE : Classe de definition d'un rectangle
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RECTANGLE = OPER (nom="RECTANGLE",op=0,sd_prod=Rectangle,
+
+  fr     = "Definition d'un rectangle",
+  ang = "Definition of a rectangle",
+  regles = (UN_PARMI ('Points','Cotes')),
+  Points = SIMP (typ=Point,min=3,max=3,statut='f',fr="Definition du rectangle par trois points"),
+  Cotes  = SIMP (typ='R',min=2,max=2,statut='f',fr="Donnee de la longueur de deux cotes") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CARRE : Classe de definition d'un carre
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CARRE = OPER (nom="CARRE",op=0,sd_prod=Carre,
+
+  fr     = "Definition d'un carre",
+  ang = "Definition of a square",
+  regles = (UN_PARMI ('Points','Cote')),
+  Points = SIMP (typ=Point,min=2,max=2,statut='f',fr="Definition du carre par deux points"),
+  Cote   = SIMP (typ='R',statut='f',fr="Donnee de la longueur du cote du carre")
+ );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe HEXAGONE : Classe de definition d'un hexagone
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+HEXAGONE = OPER (nom="HEXAGONE",op=0,sd_prod=Hexagone,
+
+  fr    = "Definition d'un hexagone",
+  ang = "Definition of an hexagon",
+  Rayon = SIMP (typ='R',statut='f',fr="Rayon du cercle inscrit dans l'hexagone")
+ );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POLYGONE : Classe de definition d'un polygone
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POLYGONE = OPER (nom="POLYGONE",op=0,sd_prod=Polygone,
+
+  fr     = "Definition d'un polygone",
+  ang = "Definition of a polygon",
+  Points = SIMP (typ=Point,max='**',statut='f',fr="Definition d'un polygone par tous ses points")
+ );
+# ==================================================================================================================================
+#            Definition des Classes pour une geometrie 3D : Elements geometriques combinatoires ou surfaciques
+# L'utilisation de certaines classes de combinatoire en surfacique consiste a simplement specifier la position de l'objet
+# ou a eliminer certaines surfaces limites de la classe
+# Pour une sphere : donnee du centre de la sphere
+# Pour un cylindre : Pas de donnee de la hauteur, mais donnee d'un point de l'axe du cylindre
+# ==================================================================================================================================
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SPHERE : Classe de definition d'une sphere (ou d'une sphere sectorisee ou decoupee en rondelles)
+#                  Des portions de la sphere peuvent etre selectionnees en donnant leurs cotes limites sur un axe de la sphere
+#                  (origine de l'axe au centre de la sphere, donc cotes comprises entre -R, +R si R est le rayon de la sphere)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SPHERE = OPER (nom="SPHERE",op=0,sd_prod=Sphere,
+
+  fr              = "Definition d'une forme spherique",
+  ang = "Definition of a spherical form",
+  Rayon           = SIMP (typ='R',statut='o',fr="Rayon de la sphere"),
+  Secteur         = SIMP (typ='R',statut='f',fr="Angle du secteur de la sphere"),
+  TranchesAxiales = NUPL (
+      max      = '**',
+      statut   = 'f',
+      fr       = "Limites des tranches axiales de la sphere sectorisee",
+      elements = (SIMP (typ='R',fr="Cote depart de la tranche"),SIMP (typ='R',fr="Cote finale de la tranche"))) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BOITE_RECTANGULAIRE : Classe de definition d'une forme parallelepipedique de cotes paralleles aux axes de reference
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BOITE_RECTANGULAIRE = OPER (nom="BOITE_RECTANGULAIRE",op=0,sd_prod=BoiteRectangulaire,
+
+  fr    = "Definition d'une d'une forme parallelepipedique rectangulaire",
+  ang = "Definition of a rectangular box form",
+  Cotes = SIMP (typ='R',min=3,max=3,statut='o',fr="Longueurs des Cotes de la boite rectangulaire") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BOITE_GENERALE : Classe de definition d'une forme parallelepipedique quelconque
+#        Le plan de base de la boite doit etre le plan xOy. On donne donc uniquement les 2 vecteurs **normaux**
+#        aux 2 autres plans, et les 3 longueurs des arretes principales.
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BOITE_GENERALE = OPER (nom="BOITE_GENERALE",op=0,sd_prod=BoiteGenerale,
+
+  fr                 = "Definition d'une forme parallelepipedique quelconque",
+  ang = "Definition of a general box form",
+  VecteursDirecteurs = SIMP (typ=Vecteur,min=2,max=2,statut='o',fr="Vecteurs normaux aux faces non horizontales de la boite"),
+  Cotes              = SIMP (typ='R',min=3,max=3,statut='o',fr="Longueurs des Cotes de la boite") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE_X : Classe de definition d'une forme cylindrique d'axe parallele a Ox
+#         Pour tous les cylindres, la donnee de deux rayons transforme le cylindre circulaire en cylindre elliptique
+#         La donnee d'un angle limite le cylindre a ce secteur
+#         Pour un secteur d'un cylindre elliptique, il est necessaire de donner en plus l'angle de depart du secteur
+#         par rapport a l'axe majeur de l'ellipse
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE_X = OPER (nom="CYLINDRE_X",op=0,sd_prod=CylindreX,
+
+  fr      = "Definition d'une forme cylindrique d'axe parallele a Ox",
+  ang = "Definition of a right cylinder form // Ox",
+  Rayons  = SIMP (typ='R',max=2,statut='o',fr="Rayons mineur et majeur du cylindre X"),
+  Hauteur = SIMP (typ='R',statut='f',fr="Hauteur du cylindre X"),
+  Angles  = SIMP (typ='R',max=2,statut='f',fr="Angles du secteur du cylindre X") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE_Y : Classe de definition d'une forme cylindrique d'axe parallele a Oy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE_Y = OPER (nom="CYLINDRE_Y",op=0,sd_prod=CylindreY,
+
+  fr      = "Definition d'une forme cylindrique d'axe parallele a Oy",
+  ang = "Definition of a right cylinder form // Oy",
+  Rayons  = SIMP (typ='R',max=2,statut='o',fr="Rayons mineur et majeur du cylindre Y"),
+  Hauteur = SIMP (typ='R',statut='f',fr="Hauteur du cylindre Y"),
+  Angles  = SIMP (typ='R',max=2,statut='f',fr="Angles du secteur du cylindre Y") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE_Z : Classe de definition d'une forme cylindrique d'axe parallele a Oz
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE_Z = OPER (nom="CYLINDRE_Z",op=0,sd_prod=CylindreZ,
+
+  fr      = "Definition d'une forme cylindrique d'axe parallele a Oz",
+  ang = "Definition of a right cylinder form // Oz",
+  Rayons  = SIMP (typ='R',max=2,statut='o',fr="Rayons mineur et majeur du cylindre Z"),
+  Hauteur = SIMP (typ='R',statut='f',fr="Hauteur du cylindre Z"),
+  Angles  = SIMP (typ='R',max=2,statut='f',fr="Angles du secteur du cylindre Z") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE : Classe de definition d'une forme cylindrique quelconque
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE = OPER (nom="CYLINDRE",op=0,sd_prod=Cylindre,
+
+  fr         = "Definition d'une forme cylindrique quelconque",
+  ang = "Definition of a general cylinder form",
+  Rayons     = SIMP (typ='R',max=2,statut='o',fr="Rayons mineur et majeur du cylindre"),
+  VecteurAxe = SIMP (typ=Vecteur,statut='o',fr="Vecteur directeur de l'axe du cylindre"),
+  Hauteur    = SIMP (typ='R',statut='f',fr="Hauteur du cylindre"),
+  Angles     = SIMP (typ='R',max=2,statut='f',fr="Angles du secteur du cylindre") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONE : Classe de definition d'un forme conique
+#           Une portion de cone peut etre definie en donnant les cotes axiales (origine de l'axe du cone au sommet du cone) de
+#           la zone retenue
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONE = OPER (nom="CONE",op=0,sd_prod=Cone,
+
+  fr              = "Definition d'une forme conique",
+  ang = "Definition of a conic form",
+  DemiAngleSommet = SIMP (typ='R',statut='o',fr="Demi-angle au sommet"),
+  LimitesAxiales  = SIMP (typ='R',min=2,max=2,statut='f',fr="Limites axiales du cone"),
+  VecteurAxe      = SIMP (typ=Vecteur,statut='o',fr="Vecteur directeur de l'axe du cone") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PRISME_HEXAGONAL : Classe de definition d'une forme de prisme hexagonal 3D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PRISME_HEXAGONAL = OPER (nom="PRISME_HEXAGONAL",op=0,sd_prod=PrismeHexagonal,
+
+  fr         = "Definition d'une forme de prisme hexagonal 3D",
+  ang = "Definition of a 3D hexagonal form",
+  Rayon      = SIMP (typ='R',statut='o',fr="Rayon du cercle circonscrit (=cote de l'hexagone)"),
+  Hauteur    = SIMP (typ='R',statut='f',fr="Hauteur de l'hexagone"),
+  VecteurAxe = SIMP (typ=Vecteur,statut='o',fr="Vecteur directeur de l'axe de l'hexagone") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe TORE : Classe de definition d'une forme toroidale
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+TORE = OPER (nom="TORE",op=0,sd_prod=Tore,
+
+  fr     = "Definition d'une forme toroidale",
+  ang = "Definition of a toroidal form",
+  Rayons = SIMP (typ='R',min=2,max=2,statut='o',fr="Rayons du tore : 1/2 distance a l'axe et rayon de la section du tore") ) ;
+# ==================================================================================================================================
+#               Definition des Classes pour une geometrie 3D : Elements geometriques surfaciques
+# ==================================================================================================================================
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN : Classe de definition d'un plan
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN = OPER (nom="PLAN",op=0,sd_prod=Plan,
+
+  fr       = "Definition d'un plan ax + by + cz + d = 0",
+  ang = "Definition of a plane surface ax + by + cz + d = 0",
+  Points   = SIMP (typ=Point,min=3,max=3,statut='f',fr="Donnee de 3 points non alignes"),
+  Equation = SIMP (typ='R',min=2,max=4,statut='f',fr="Coefficients successifs abcd de l'equation du plan")
+ );
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_X : Classe de definition d'un plan perpendiculaire a l'axe Ox
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN_X = OPER (nom="PLAN_X",op=0,sd_prod=PlanX,
+
+  fr   = "Definition d'un plan perpendiculaire a Ox",
+  ang = "Definition of a plane surface perpendicular to Ox",
+  Cote = SIMP (typ='R',statut='o',fr="Cote du plan // OyOz") ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_Y : Classe de definition d'un plan perpendiculaire a l'axe Oy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN_Y = OPER (nom="PLAN_Y",op=0,sd_prod=PlanY,
+
+  fr   = "Definition d'un plan perpendiculaire a Oy",
+  ang = "Definition of a plane surface perpendicular to Oy",
+  Cote = SIMP (typ='R',statut='o',fr="Cote du plan // OxOz") ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_Z : Classe de definition d'un plan perpendiculaire a l'axe Oz
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN_Z = OPER (nom="PLAN_Z",op=0,sd_prod=PlanZ,
+
+  fr   = "Definition d'un plan perpendiculaire a Oz",
+  ang = "Definition of a plane surface perpendicular to Oz",
+  Cote = SIMP (typ='R',statut='o',fr="Cote du plan // OxOy") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POLYEDRE : Classe de definition d'une forme polyhedrique 3D quelconque (N faces, N > 4)
+#                    Definition surfacique : Donnee des N plans et du choix du cote positif ou negatif
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POLYEDRE = OPER (nom="POLYEDRE",op=0,sd_prod=Polyedre,
+
+  fr    = "Definition d'une forme polyhedrique 3D quelconque ",
+  ang = "Definition of a 3D polyhedron form with N > 4 plane faces",
+  Plans = NUPL (
+      min      = 5,
+      max      = '**',
+      statut   = 'o',
+      fr       = "Surfaces planes limites du polyedre",
+      elements = (SIMP (typ=(Plan,PlanX,PlanY,PlanZ),fr="Plans limites du polyedre"),
+                  SIMP (typ='TXM',into=('Plus','Moins'),fr="Choix du cote positif ou negatif de l'espace"))) 
+                ) ;
+
+#     elements = (SIMP (typ=(Plan,PlanX,PlanY,PlanZ),fr="Plans limites du polyedre"),
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe QUADRIQUE : Classe de definition d'une quadrique 3D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+QUADRIQUE = OPER (nom="QUADRIQUE",op=0,sd_prod=Quadrique,
+
+  fr       = "Definition d'une quadrique 3D ax2+by2+cz2+dxy+eyz+fxz+gx+hy+iz+j=0",
+  ang = "Definition of a quadratic curve 3D ax2+by2+cz2+dxy+eyz+fxz+gx+hy+iz+j=0",
+  Equation = SIMP (typ='R',min=2,max=10,statut='o',fr="Coefficients successifs abcdefghij de l'equation d'une quadrique") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CELLULE : Classe de definition d'une cellule (ensemble elementaire  de regions annulaires et sectorisees)
+#                   Apres la hauteur de la cellule, entree des donnees par listes successives pour l'ensemble des couronnes de la
+#                   cellule, la zone externe etant decrite a part dans l'attribut FormeTechnologique :
+#                   - Liste des materiaux
+#                   - Liste des rayons des couronnes correspondantes
+#                   - Liste des sous-couronnes : - Numero de couronne a discretiser (Numero 1 a partir du centre),
+#                                                 - Nombre de sous-couronnes,
+#                                                 - Mot-cle Equivolumique si decoupage en sections transverses egales,
+#                                                 - Rayons des couronnes intermediaires ou proportions volumiques si mot-cle
+#                                                   Proportions indique anterieurement.
+#                   - Liste des sectorisations :  - Nom de couronne a sectoriser ,
+#                                                 - Nombre de secteurs,
+#                                                 - Mot-cle Equivolumique si decoupage en secteurs egaux et positionnement du premier
+#                                                   secteur par rapport a l'axe x, et pas de changement de composition du secteur,
+#                                                 - Mot-cle alternatif Angle si on veut modifier ou positionner les secteurs dans la
+#                                                   couronne : on donne alors des triplets de donnees pour chaque secteur :
+#                                                               - nom du materiau composant le le secteur,
+#                                                               - position trigonometrique en \260 du debut du secteur
+#                                                               - et angle en \260 du secteur.
+#                                                 Le trace des secteurs sont definis en partant du centre de la couronne.
+#                                                 Pour la sectorisation de la forme externe, deux cas se presentent :
+#                                                       - soit pas de couronnes internes : les secteurs se tracent alors en partant
+#                                                         du centre de la forme externe,
+#                                                       - dans le cas contraire, les secteurs partent du centre des couronnes.
+#                                                 Les secteurs peuvent ne pas couvrir l'ensemble de la couronne.
+#                   Pour la zone peripherique, on doit definir les cotes de la cellule (cas cartesien), son materiau, sa
+#                   discretisation, et le decentrage du centre des couronnes par rapport au centre de ce contour peripherique
+#                   (Coordonnees x,y du centre des couronnes / au centre du contour)
+#                   Pour le moment, limitation a 2D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CELLULE = OPER (nom="CELLULE",op=0,sd_prod=Cellule,
+
+  fr             = "Definition d'une cellule elementaire d'un assemblage",
+  ang = "Definition of a basic pin cell",
+  Type           = SIMP (typ='TXM',defaut='Combustible',
+                         into=( 'Combustible','BarreGrise','BarreNoire','BarreAcier','BarreAic','BarreB4c',
+                                'Detecteur','Trou','TubeGuide','Postiche','Pyrex','ExPyrex','Gadolinium',
+                                'CellType1','CellType2','CellType3'),statut='o'),
+  HauteurMoyenne = SIMP (typ='R',defaut=1.,statut='o',fr="Hauteur moyenne de la cellule de base"),
+  Couronnes      = FACT (
+      NomsSymboliques = SIMP (typ='TXM',max='**',statut='o',fr="Liste des noms arbitraires des couronnes"),
+      Materiaux       = SIMP (typ=Materiau,max='**',statut='o',fr="Liste des materiaux des couronnes"),
+      Temperatures    = SIMP (typ=('R','I','TXM'),max='**',statut='o',fr="Liste des temperatures des couronnes"),
+      Rayons          = SIMP (typ='R',max='**',statut='o',fr="Liste des rayons des couronnes"),
+      RayonsMineurs   = SIMP (typ='R',max='**',statut='f',fr="Liste des rayons mineurs des couronnes elliptiques"),
+      Hauteurs        = SIMP (typ='R',max='**',statut='f',fr="Liste des hauteurs des couronnes")),
+  SousCouronnes   = FACT (
+      max      = '**',
+      statut   = 'f',
+      NomCouronne              = SIMP (typ='TXM',fr="Nom symbolique de la couronne"),
+      NbSousCouronnes          = SIMP (typ='I',fr="Nombre de sous-couronnes de discretisation"),
+      TypeDiscretisation       = SIMP (typ='TXM',defaut='Equivolumique',into=('Equivolumique','Proportions','Equidistant'),statut='f'),
+      ProportionsVolumiques    = SIMP (typ='R',statut='f',max='**',fr="Proportions volumiques optionnelles des sous-couronnes"),
+      ProfilTemperature        = SIMP (typ='R',max='**',statut='f',fr="Profil de temperature")), 
+  Homogeneisation = FACT (
+      max      = '**',
+      statut   = 'f',
+      NomCouronne      = SIMP (typ='TXM',fr="Nom arbitraire de la couronne homogeneisee"),
+      ListeCouronnes   = SIMP (typ='TXM',max='**',fr="Liste des noms des couronnes jointives a homogeneiser")),
+  Secteurs     = FACT (
+      max      = '**',
+      statut   = 'f',
+      NomCouronne = SIMP (typ='TXM',statut='o',fr="Nom de la couronne ou de la forme externe a sectoriser"),
+      NbSecteurs  = SIMP (typ='I',fr="Nombre de secteurs de la couronne",statut='o'),
+      TypeSectorisation = SIMP (typ='TXM',defaut='Coins',into=('Equivolumique','Angle','Coins','MilieuxCotes'),statut='f'),
+      Sectorisation = FACT (
+              max       = '**',
+              statut    = 'f',
+              Materiaux = SIMP (typ=Materiau,max='**',fr="Materiau des secteurs"),
+              Temperatures = SIMP (typ=('R','I','TXM'),max='**',fr="Temperature des secteurs"),
+              AnglesDepart = SIMP (typ='R',max='**',fr="Angle de depart du secteur"),
+              Angles       = SIMP (typ='R',max='**',fr="Angle du secteur"))),
+  FormeExterne = FACT (
+      NomSymbolique = SIMP (typ='TXM',statut='f'),
+      Type          = SIMP (
+          typ=(ArcCercle,Carre,Rectangle,Hexagone,Triangle,Polygone),
+          statut = 'f',  # la donnee est facultative si la cellule est inserree dans un reseau
+          fr     = "Forme geometrique exterieure"),
+      Materiau      = SIMP (typ=Materiau,fr="Materiau de la forme externe"),
+      Temperature   = SIMP (typ=('R','I','TXM'),fr="Temperature du materiau de la forme externe"),
+      Decentrement  = SIMP (
+          typ    = 'R',
+          min    = 2,
+          max    = 3,
+          defaut = (0.,0.,0.),
+          statut = 'f',
+          fr     = "Coordonnees xyz du centre des couronnes / centre du contour")) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CLUSTER : Classe de definition d'un cluster de cellules cylindriques de forme exterieure quelconque
+#                   Un cluster est defini comme une superposition centree de cadrans telephoniques (a l'ancienne mode), chaque
+#                   cadran ayant des trous de tailles differentes, l'ensemble etant dispose dans un contour de forme quelconque.
+#                   Possibilites donnees ci-dessous : 
+#                       - Positionnement des couronnes de canaux, chaque canal etant une CELLULE predefinie,
+#                       - Definition du fond du cluster : 
+#                               - Serie de couronnes de materiaux distincts
+#                               - Forme exterieure quelconque
+#                       - Sectorisation eventuelle de la zone peripherique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CLUSTER = OPER (nom="CLUSTER",op=0,sd_prod=Cluster,
+  fr               = "Definition d'un cluster de cellules cylindriques",
+  ang = "Definition of a cylindrical cell cluster",
+  Hauteur          = SIMP (typ='R',defaut=1.,statut='f',fr="Hauteur du cluster"),
+  Couronnes        = FACT (
+      Cellules = SIMP (typ=Cellule,max='**',fr="Liste des cellules sur chaque cercle"),
+      Rayons   = SIMP (typ='R',max='**',fr="Liste des rayons des couronnes de cellules"),
+      Angles   = SIMP (typ='R',max='**',fr="Liste des pas angulaires de positionnement des cellules cylindriques")),
+  FormeGlobale     = FACT (
+      NomSymbolique        = SIMP (typ='TXM'),
+      RayonsInternes       = SIMP (typ='R',max='**',fr="Liste des rayons des couronnes internes",statut='f'),
+      MateriauxInternes    = SIMP (typ=Materiau,max='**',fr="Materiaux Couronnes internes",statut='f'),
+      TemperaturesInternes = SIMP (typ=('R','I','TXM'),max='**',fr="Temperatures des materiaux internes",statut='f'),
+      FormeExterne         = SIMP (
+          typ    = (ArcCercle,Carre,Rectangle,Hexagone,Triangle,Polygone),
+          statut = 'o',
+          fr     = "Forme geometrique exterieure"),
+      MateriauExterne      = SIMP (typ=Materiau,fr="Materiau de la forme externe",statut='o'),
+      TemperatureExterne   = SIMP (typ=('R','I','TXM'),max='**',fr="Temperature du materiau externe",statut='f'),
+      Decentrement         = SIMP (
+          typ    = 'R',
+          min    = 2,
+          max    = 3,
+          defaut = (0.,0.,0.),
+          statut = 'f',
+          fr     = "Coordonnees xyz du centre des couronnes / centre du contour")),
+  SecteursExternes = FACT (
+      NbSecteurs   = SIMP (typ='I',fr="Nombre de secteurs de la couronne externe",statut='o'),
+      TypeSecteur  = SIMP (
+          typ    = 'TXM',
+          defaut = 'Coins',
+          into   = ('Equivolumique','Angle','Coins','MilieuxCotes'),
+          statut = 'f'),
+      Materiaux    = SIMP (max='**',typ=Materiau,fr="Materiau des secteurs",statut='f'),
+      AngleDepart  = SIMP (max='**',typ='R',fr="Angle de depart des secteurs",statut='f'),
+      AngleSecteur = SIMP (max='**',typ='R',fr="Angle des secteurs",statut='f')) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ORIENTATION :         Classe de definition d'une orientation angulaire dans un plan 2D apres symetrie eventuelle / Ox
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ORIENTATION = OPER (nom="ORIENTATION",op=0,sd_prod=Orientation,
+
+  fr              = "Definition d'une orientation d'un reseau ou d'une cellule",
+  ang = "Definition of a cell or lattice orientation",
+  Symetrie      = SIMP (typ=(Plan,PlanX,PlanY,PlanZ),statut='f',fr="Indication d'une operation de symetrie / Plan"),
+  AngleRotation = SIMP (typ='R',defaut=0.,statut='f',fr="Angle de rotation en degres"),
+  CentreRotation = SIMP (typ=Point,statut='f',fr='Centre de rotation'),
+  AxeRotation    = SIMP (typ=Vecteur,statut='f',fr="Vecteur de l'axe de rotation") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe FORME_POSITIONNEE :   Classe de definition d'une forme geometrique positionnee
+#                               La position est definie a l'aide du centre de la forme geometrique, 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+FORME_POSITIONNEE = OPER (nom="FORME_POSITIONNEE",op=0,sd_prod=FormePositionnee,
+
+  fr             = "Definition d'une forme positionnee",
+  ang = "Definition of a shape and its position",
+  Forme          = SIMP (
+      typ    = (Sphere,BoiteRectangulaire,BoiteGenerale,CylindreX,CylindreY,CylindreZ,Cylindre,Cone,
+                PrismeHexagonal,Tore,Polyedre,Cellule,Cluster),
+      statut = 'o',
+      fr     = "Forme geometrique de base a positionner"),
+  PositionCentre   = SIMP (typ=Point,statut='o',fr="Coordonnees du centre de la forme geometrique"),
+  OrientationForme = SIMP (typ=Orientation,statut='f',fr="Orientation de la forme")
+ ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GEOMETRIE_SURFACIQUE : Classe de definition d'une geometrie surfacique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GEOMETRIE_SURFACIQUE = OPER (nom="GEOMETRIE_SURFACIQUE",op=0,sd_prod=GeometrieSurfacique,
+
+  fr            = "Definition d'une geometrie surfacique",
+  ang = "Definition of a surfacic geometry",
+  MateriauRemplissage = SIMP (typ=Materiau,statut='o',fr="Materiau de remplissage de la geometrie surfacique"),
+  Surfaces      = NUPL (
+      max      = '**',
+      statut   = 'o',
+      fr       = "Serie de couples (Surface,Plus ou Moins) definissant les surfaces limites de la geometrie",
+      elements = (
+          SIMP (typ='TXM'),
+          SIMP (typ='TXM',into=('Plus','Moins'))))
+ );
+
+#         simp (typ=(PlanX,PlanY,PlanZ,Plan,CylindreX,CylindreY,CylindreZ,Cylindre,Sphere,Cone,Quadrique)),
+
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GEOMETRIE_COMBINATOIRE : Classe de definition d'une geometrie combinatoire
+#                                  Ecrasement : Constitution par ecrasements successifs (dans l'ordre des donnees) de la
+#                                               Geometrie Initiale, la frontiere externe etant celle de la geometrie initiale
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GEOMETRIE_COMBINATOIRE = OPER (nom="GEOMETRIE_COMBINATOIRE",op=0,sd_prod=GeometrieCombinatoire,
+
+  fr                    = "Definition d'une geometrie combinatoire",
+  ang = "Definition of a combinatorial geometry",
+  GeometriePremierPlan = SIMP (typ=FormePositionnee,statut='o',fr="Geometrie se trouvant au premier plan"),
+  GeometrieEcrasee     = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries ecrasées et surchargées par la GeometriePremierPlan"),
+  GeometrieUnion        = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries a reunir a la GeometriePremierPlan en gardant les interfaces, les intersections etant des volumes particuliers"),
+  GeometrieReunion      = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries a reunir a la GeometriePremierPlan pour former un volume unique"),
+  GeometrieIntersection        = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries a intersecter avec la GeometriePremierPlan")
+ ) ; 
+
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CORRESPONDANCE_REPERE_POSITION_RESEAU : Classe de definition de la position des assemblages combustibles dans un REP
+#                                           Reperes (bataille navale ou autre) et
+#                                           Coordonnees cartesiennes entieres des assemblages combustibles pour un type de palier
+#                                           Origine des coordonnees en bas a gauche d'un systeme en xy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CORRESPONDANCE_REPERE_POSITION_RESEAU = OPER (nom="CORRESPONDANCE_REPERE_POSITION_RESEAU",op=0,sd_prod=CorrespondanceReperePositionReseau,
+
+  fr                        = "Correspondance entre reperes alphanumeriques et cases d'un reseau",
+  ang = "Alphanumeric identificators and lattice coordinates",
+  Positions                 = NUPL (   max='**',statut='o',
+                                        elements=(SIMP (typ='TXM',fr="Repere alphanumerique arbitraire de l'assemblage"),
+                                                  SIMP (typ='I',fr="Premiere Coordonnee entiere de l'assemblage"),
+                                                  SIMP (typ='I',fr="Seconde Coordonnee entiere de l'assemblage")))
+ );
+
+# -----------------------------------------------------------------------------------------------------------------------------------
+# Classe RESEAU :
+#   Classe de definition d'un reseau de juxtapositions de cellules ou de reseaux
+#   Assemblage de cellules ou de reseaux dans une grille rectangulaire ou hexagonale
+#   Les positions des cellules et des reseaux dans le nouveau reseau sont a fournir sur les mailles 
+#   du reseau sans tenir compte des symetries, 
+#   Le reseau peut etre charge :
+#     - de maniere uniforme : un seul type de CELLULE ou de RESEAU 
+#     - de maniere complete : a chaque maille doit etre affecte un reseau ou une cellule et optionnellement son 
+#       orientation, l'ordre des donnees dans le plan radial etant celui obtenu en partant de l'element le plus
+#       bas a gauche, et dans le sens axial ensuite (eventuellement si 3D) 
+#     - de maniere partielle : liste des cellules et reseaux charges et leur position xyz dans le nouveau reseau
+#       et orientations correspondantes de ces cellules et reseaux
+#   Des reperes alphanumeriques arbitraires peuvent etre associes a chaque maille du reseau, ce qui permet
+#   si necessaire de manipuler ces elements du reseau par l'intermediaire de ces symboles (exemple des 
+#   reperes bataille navale des assemblages dans le reseau d'un coeur REP).
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESEAU = OPER (nom="RESEAU",op=0,sd_prod=Reseau,
+
+  fr                   = "Definition d'un reseau compose de juxtapositions de cellules, de reseaux ou d'assemblages",
+  en                   = "Definition of a lattice",
+  Identificateur       = SIMP (typ='TXM',statut='f',fr="Identificateur arbitraire du reseau"),
+  TypeGeometrie                = SIMP (typ='TXM',into=('cartesienne','hexagonale'),defaut='cartesienne',statut='f'),
+  NbMaillesX           = SIMP (typ='I',defaut=17,statut='o',fr="Nbre de mailles sur le premier axe du reseau"),
+  NbMaillesY            = SIMP (typ='I',defaut=17,statut='f',fr="Nbre de mailles sur le second axe du reseau"),
+  NbMaillesZ            = SIMP (typ='I',defaut=1 ,statut='f',fr="Nbre de mailles sur l'axe vertical du reseau"),
+  PasReseau             = SIMP (typ='R',defaut=1.26 ,statut='f',max=2,fr="Pas du reseau en X et Y"),
+  MateriauRemplissage   = SIMP (typ=Materiau,defaut='ModExt',statut='f',fr="Materiau de remplissage du reseau"),
+  TypeDefinition        = SIMP (typ='TXM',statut='f',defaut="Complet",into=("Uniforme","Complet","Partiel")),
+  BlocUniforme          = BLOC (condition = "TypeDefinition=='Uniforme'",
+                                ElementsBase  = SIMP (typ=(Cellule,Reseau,Cluster,GeometrieCombinatoire,AssemblageCombustibleCharge),statut='o',
+                                                           fr = "Remplissage uniforme du nouveau reseau par un element particulier"),
+                                OrientationElement = SIMP (typ=Orientation,fr="Orientation de l'element geometrique de base",statut='f')),
+  BlocComplet           = BLOC (condition = "TypeDefinition=='Complet'",      
+                                ElementsBase    = NUPL (max='**', statut='f',
+                                                        elements=(SIMP (typ=(Cellule, Reseau, GeometrieCombinatoire,AssemblageCombustibleCharge)),
+                                                                  SIMP (typ='TXM',fr="Sigle ou repere associe a l'element geometrique de base"))),
+                                Chargement     = SIMP (typ='TXM',statut='f',max='**',
+                                                        fr="Liste ordonnee des sigles associes aux elements geometriques charges"),                                                                                                
+                                Regroupement   = SIMP (typ='I',statut='f',max='**',
+                                                        fr="Indices de regroupement des elements en approximation multicellule"),                                                                                                
+                                Reperes                = SIMP (typ='TXM',max='**',statut='f',fr="Reperes arbitraires des elements charges"),
+                                ),
+  BlocPartiel           = BLOC (condition = "TypeDefinition=='Partiel'",
+                                Chargement  = FACT (max='**',
+                                        ElementsPositionnes = NUPL (max='**', statut='f',
+                                                        elements=(SIMP (typ=(Cellule, Reseau, GeometrieCombinatoire,AssemblageCombustibleCharge)),
+                                                                  SIMP (typ='I',min=2,max=2,fr="Coordonnees i j de l'element geometrique de base"))),                                 
+                                        ElementsReperes    = NUPL (max='**', statut='f',
+                                                        elements=(SIMP (typ=(Cellule, Reseau, GeometrieCombinatoire,AssemblageCombustibleCharge)),
+                                                                  SIMP (typ='TXM',fr="Repere associe a l'element geometrique de base"))),                                
+                                        CorrespondanceReperePositions = SIMP (typ=CorrespondanceReperePositionReseau,
+                                                                              statut='f',
+                                                                              fr="Correspondance entre Repere alphanumerique et coordonnees dans le reseau"),
+                                        OrientationElement = SIMP (typ=Orientation,max='**',statut='f',fr="Orientation des elements a positionner"),
+                                        )),
+ ZonePeripherique      = FACT (
+                          Epaisseurs      = SIMP (typ='R',max='**',statut='f',fr="Liste des epaisseurs des couches peripheriques"),
+                          Materiaux       = SIMP (typ=Materiau,max='**',statut='f',fr="Liste des materiaux des couches peripheriques"),
+                          MateriauExterne = SIMP (typ=Materiau,statut='f',fr="Materiau de remplissage de la zone externe du reseau hexagonal"))
+ );
+
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GRILLE_ASSEMBLAGE : Classe de definition des grilles composant le squelette des assemblages combustibles
+#                             Caracteristiques  technologiques (dimension, materiaux de composition) et positionnement simplifie   
+#                             des materiaux dans les canaux de l'assemblage pour dilution homogene a 2D dans le milieu peripherique.
+#                               - Materiaux fournis sous forme de couples (nom de materiau et masse en g)
+#                               - Repartition decrite en donnant pour une liste de materiaux (faisant partie des materiaux
+#                                 precedemment indiques) la liste des types de cellules (precedee du mot-cle TypeCellule) et des 
+#                                 types de materiaux (precedes du mot-cle TypeMateriau) devant etre modifies par la presence des
+#                                 grilles 
+#                                                    < liste de MATERIAU >, 
+#                                       TypeCellule  < liste de types de cellule >,
+#                                       TypeMateriau < liste de types de materiau >
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GRILLE_ASSEMBLAGE = OPER (nom="GRILLE_ASSEMBLAGE",op=0,sd_prod=GrilleAssemblage,
+
+  fr             = "Definition d'une grille d'assemblage",
+  ang = "Definition of an elementary assembly grid",
+  TypeGrille     = SIMP (typ='TXM',defaut='GrilleMelange',statut='f',fr="Type de grille de structure assemblage"),
+  Hauteur        = SIMP (typ='R',defaut=3.3,statut='f',fr="Hauteur de la grille de structure assemblage"),
+  Largeur        = SIMP (typ='R',defaut=21.338,statut='f',fr="Largeur de la grille de structure assemblage"),
+  MateriauxMasse = NUPL (
+      elements = (SIMP (typ=Materiau),SIMP (typ='R')),
+      max      = '**',
+      statut   = 'f',
+      fr       = "Serie de couples (Materiau,masse en g) de composition de la grille"),
+  Repartition    = FACT (
+      max      = '**',
+      statut   = 'o',
+      MateriauGrille = SIMP (typ=Materiau,fr="Nom du materiau a repartir",statut='o'),          
+      TypeCellule    = SIMP (typ='TXM',max='**',statut='o',fr="Liste des types de cellule ou est reparti le materiau"),
+      TypeMateriau   = SIMP (typ='TXM',max='**',statut='o') )
+                        ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE  :   Classe de definition de l'embout inferieur d'un assemblage combustible
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE = OPER (nom="PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE",op=0,sd_prod=PartieInferieureAssemblageCombustible,
+
+  fr                                       = "Definition de la partie inferieure d'un assemblage combustible",
+  ang = "Definition of the bottom part of a fuel assembly",
+  MateriauEmbout                          = SIMP (typ=Materiau, statut='f',defaut='ACIER',fr="Materiau de l'embout inferieur"),
+  MasseBouchonInferieurCrayonCombustible   = SIMP (typ='R',statut='o',fr="Masse du bouchon inferieur du crayon combustible"),
+  HauteurBouchonInferieurCrayonCombustible = SIMP (typ='R',statut='o',fr="Hauteur du bouchon inferieur du crayon combustible"),
+  MateriauBouchonInferieurCrayonCombustible    = SIMP (typ=Materiau, statut='f',defaut='ZIRCALOY',fr="Materiau du bouchon inferieur du crayon combustible"),
+  MasseEmbout                              = SIMP (typ='R',statut='o',fr="Masse de l'embout inferieur"),
+  EpaisseurPlaqueAdaptatrice               = SIMP (typ='R',statut='o',fr="Epaisseur de la plaque adaptatrice de l'embout inferieur"),
+  LargeurPlaqueAdaptatrice                 = SIMP (typ='R',statut='o',fr="Largeur de la plaque adaptatrice de l'embout inferieur"),
+  TrousPlaqueAdaptatrice                   = NUPL (
+      max      = '**',
+      statut   = 'o',
+      elements = ( SIMP (typ='I',statut='o',fr="Nombre de trous de taille definie ci-apres"),
+                   SIMP (typ='TXM',into=('Rayon','Cotes'),statut='o',fr="Choix de la forme des trous, elliptique ou rectangulaire"),
+                   SIMP (typ='R',min=2,max=2,statut='o',fr="Rayons ou cotes des trous"),
+                   SIMP (typ='TXM',defaut='Hauteur',into=('Hauteur','Epaisseur'),statut='o',fr="Mot-cle au choix"),
+                   SIMP (typ='R',statut='o',fr="Hauteur des trous dans la plaque adaptatrice"))),
+  JeuBouchonCombustiblePlaque  = SIMP (typ='R',statut='o',fr="Hauteur du jeu entre bouchon combustible et plaque adaptatrice"),
+  HauteurPied                   = SIMP (typ='R',statut='o',fr="Hauteur du pied de l'embout inferieur"),
+  CapuchonRint                 = SIMP (typ='R',statut='f',fr="Rayon interne du capuchon"),
+  CapuchonRext                 = SIMP (typ='R',statut='f',fr="Rayon externe du capuchon"),
+  HauteurVisEpaulee             = SIMP (typ='R',statut='f',fr="Hauteur des vis epaulees des tubes guides"),
+  MasseVisEpaulee               = SIMP (typ='R',statut='f',fr="Masse totale des vis epaulees des tubes guides"),
+  VisEpauleeRint               = SIMP (typ='R',statut='f',fr="Rayon interne d'une vis epaulee"),
+  VisEpauleeRext               = SIMP (typ='R',statut='f',fr="Rayon externe d'une vis epaulee"),
+  MasseFiltre                   = SIMP (typ='R',statut='f',fr="Masse du filtre anti-debris"),
+  MateriauFiltre               = SIMP (typ=Materiau, statut='f', defaut='INCONEL',fr="Materiau du filtre anti-debris"),
+  HauteurCale                   = SIMP (typ='R',statut='f',fr="Hauteur de la cale dans le crayon combustible"),
+  MateriauCale                 = SIMP (typ=Materiau, statut='f', defaut='ACIER',fr="Materiau de la cale dans le crayon combustible"),
+  RayonPionCentrage             = SIMP (typ='R',statut='f',fr="Rayon externe des pions de centrage de la plaque inferieure coeur"),
+  HauteurPionCentrage           = SIMP (typ='R',statut='f',fr="Hauteur des pions de centrage de la plaque inferieure coeur"),
+  HauteurOgivePionCentrage      = SIMP (typ='R',statut='f',fr="Hauteur de l'ogive des pions de centrage de la plaque inferieure coeur"),
+  MateriauPionCentrage         = SIMP (typ=Materiau, statut='f',defaut='ACIER',fr="Materiau des pions de centrage de la plaque inferieure coeur"),
+  HauteurBouchonTubeGuide       = SIMP (typ='R',statut='f',fr="Hauteur des bouchons des tubes guides"),
+  MateriauBouchonTubeGuide     = SIMP (typ=Materiau, statut='f',defaut='ACIER',fr="Materiau des bouchons des tubes guides") 
+                                          ) ;
+
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE :    Classe de definition de l'embout superieur d'un assemblage combustible
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE = OPER (nom="PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE",op=0,sd_prod=PartieSuperieureAssemblageCombustible,
+
+  fr                                       = "Definition de la partie superieure d'un assemblage combustible",
+  ang = "Definition of the top part of a fuel assembly",
+  MateriauEmbout                          = SIMP (typ=Materiau, statut='f',defaut='ACIER',fr="materiau  de l'embout superieur"),
+  MasseBouchonSuperieurCrayonCombustible   = SIMP (typ='R',statut='o',fr="Masse du bouchon superieur du crayon combustible"),
+  HauteurBouchonSuperieurCrayonCombustible = SIMP (typ='R',statut='o',fr="Hauteur du bouchon superieur du crayon combustible"),
+  MateriauBouchonSuperieurCrayonCombustible    = SIMP (typ=Materiau, statut='f',defaut='ZIRCALOY',fr="Materiau du bouchon superieur du crayon combustible"),
+  RessortCrayonCombustible                 = SIMP (typ='R',statut='o',fr="Masse du ressort du crayon combustible"),
+  HauteurChambreExpansion                  = SIMP (typ='R',statut='o',fr="Hauteur de la chambre d'expansion"),
+  MasseEmbout                              = SIMP (typ='R',statut='o',fr="Masse de l'embout superieur"),
+  HauteurEmbout                            = SIMP (typ='R',statut='o',fr="Hauteur de l'embout superieur"),
+  MasseRessortsEmbout                      = SIMP (typ='R',statut='o',fr="Masse des ressorts de l'embout superieur"),
+  MateriauRessortsEmbout                  = SIMP (typ=Materiau,  statut='f', defaut='INCONEL',fr="Materiau des ressorts de l'embout superieur"),
+  EpaisseurPlaqueAdaptatrice               = SIMP (typ='R',statut='o',fr="Epaisseur de la plaque adaptatrice"),
+  LargeurPlaqueAdaptatrice                 = SIMP (typ='R',statut='o',fr="Largeur de la plaque adaptatrice"),
+  TrousPlaqueAdaptatrice                   = NUPL (
+      max      = '**',
+      statut   = 'o',
+      elements = (      SIMP (typ='I',),
+                        SIMP (typ='TXM',into=('Rayon','Cotes')),
+                        SIMP (typ='R',min=2,max=2,fr="Rayons mineur et majeur ou Cotes du trou"),
+                        SIMP (typ='TXM',into=('Hauteur','Epaisseur')),
+                        SIMP (typ='R',fr="Hauteur du trou"))), 
+  JeuBouchonCombustiblePlaque              = SIMP (typ='R',statut='o',fr="Hauteur du jeu entre Bouchon combustible et Plaque adaptatrice"),
+  EpaisseurJupe                            = SIMP (typ='R',statut='o',fr="Epaisseur de la jupe de l'embout superieur"),
+  HauteurJupe                              = SIMP (typ='R',statut='f',fr="Hauteur de la jupe de l'embout superieur"),
+  RayonPionCentrage                        = SIMP (typ='R',statut='f',fr="Rayon des pions de centrage superieurs"),
+  HauteurPionCentrage                      = SIMP (typ='R',statut='f',fr="Hauteur des pions de centrage superieurs"),
+  HauteurOgivePionCentrage                 = SIMP (typ='R',statut='f',fr="Hauteur de l'ogive des pions de centrage superieurs"),
+  MateriauPionCentrage                    = SIMP (typ=Materiau, statut='f',defaut='ACIER',fr="Materiau des pions de centrage superieurs"),
+  RayonInterneManchon                     = SIMP (typ='R',statut='f',fr="Rayon interne des manchons des tubes guides"),
+  RayonExterneManchon                     = SIMP (typ='R',statut='f',fr="Rayon externe des manchons des tubes guides"),
+  HauteurManchon                           = SIMP (typ='R',statut='f',fr="Hauteur des manchons des tubes guides"),
+  MasseManchon                             = SIMP (typ='R',statut='f',fr="Masse d'un manchon des tubes guides") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_AUTOPROTECTION : Classe de definition des donnees d'autoprotection du code de reseau
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_AUTOPROTECTION = OPER (nom="OPTIONS_AUTOPROTECTION",op=0,sd_prod=OptionsAutoprotection,
+
+  fr                    = "Definition des donnees d'autoprotection des resonances",
+  ang = "Definition of resonance self shielding data",
+  TypeCombustible      = SIMP (typ='TXM',max='**',statut='o',fr="Type de combustible auquel s'appliquent ces options d'autoprotection"),
+  MethodeAutoprotection = SIMP (typ='TXM',into=('SanchezCoste','SousGroupes'),defaut='SanchezCoste',statut='f'),
+  IsotopesAutoproteges  = NUPL (
+      max      = '**',
+      elements = (SIMP (typ=Isotope,statut='o',fr="Nom de l'isotope a autoproteger"),
+                   SIMP (typ='TXM',into=('Moyenne','Detaillee','Couronne'),statut='o'),
+                   SIMP (typ='TXM',into=('Materiaux','Cellules'),statut='f',fr="Choix d'autoprotection sur les materiaux ou les cellules"),
+                   SIMP (typ='TXM',max='**',statut='f',fr="Liste des types de materiaux ou de cellules concernes"))),
+  Irradiations  = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs d'autoprotection"),
+  IrradiationsPoison  = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs d'autoprotection des poisons integres au combustible")
+  ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ASSEMBLAGE_TYPE : Classe de definition d'un type d'assemblage (ensemble de crayons ou de reseaux quelconques)
+#                           Rajout des structures grilles et embouts (dans le cas des REP)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ASSEMBLAGE_TYPE = OPER (nom="ASSEMBLAGE_TYPE",op=0,sd_prod=AssemblageType,
+
+  fr                    = "Definition d'un assemblage type et des elements associes eventuels",
+  ang = "Definition of an assembly type and its associated elements",
+# TypeGeometrie         = SIMP (typ='TXM',into=('Cartesienne','Hexagonale','Generale'),defaut='Cartesienne',statut='f'),
+# TypeAbsorbant         = SIMP (typ='TXM',defaut='0P',statut='f'),
+# Identificateur        = SIMP (typ='TXM',defaut='AFA  17 0P 0P',statut='f'),
+  Geometrie             = SIMP (typ=(Cellule,Reseau,GeometrieCombinatoire),statut='o',max='**',
+                                fr="Liste des geometries associees a l'assemblage"),
+#    Symetrie           = SIMP (typ='TXM',into=('1/4','1/8','1/2','PI','PI/2','PI/6','PI/3','2PI/3','SansSymetrie'),
+#                               defaut='SansSymetrie',statut='f'),
+#    ZoneCalculee       = SIMP (typ='TXM',defaut='Entiere',
+#                               into=('Entiere','1/2 N','1/2 S','1/2 E','1/2 O','1/4 N-E','1/4 N-O','1/4 S-E',
+#                                               '1/4 S-O','1/8 E-NE','1/8 N-NE','1/8 N-NO',
+#                                               '1/8 O-SO','1/8 S-SO','1/8 S-SE','1/8 E-SE',
+#                                               '1/6 E','1/6 NE','1/6 NO','1/6 O''1/6 SO','1/6 SE'),statut='f'),
+  GrillesStructure      = NUPL (
+                         max      = '**',
+                         statut   = 'f',
+                         elements = (  SIMP (typ=GrilleAssemblage,fr="Type de grille"),
+                                       SIMP (typ='R',max='**',fr="Positions axiales du type de grille"))),
+  PartieInferieure      = SIMP (typ=PartieInferieureAssemblageCombustible,statut='f',fr="Type d'embout inferieur"),
+  PartieSuperieure      = SIMP (typ=PartieSuperieureAssemblageCombustible,statut='f',fr="Type d'embout superieur"),
+  ElementsAssocies     = SIMP (typ=(ElementsGrappeCommande,ElementsAbsorbantsFixes,GrappeBouchonAssemblage),max='**',statut='f')
+#  ZoneCalculee          = SIMP (typ='DROITE',min=2,max=2,statut='f',fr="Droites delimitant la zone de calcul"),
+#  DonneesAutoprotection = SIMP (typ=Autoprotection,statut='f')
+ ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ASSEMBLAGE_COMBUSTIBLE_CHARGE : Classe de definition d'un assemblage combustible charge dans un coeur REP
+#                               
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ASSEMBLAGE_COMBUSTIBLE_CHARGE = OPER (nom="ASSEMBLAGE_COMBUSTIBLE_CHARGE",op=0,sd_prod=AssemblageCombustibleCharge,
+
+  fr                          = "Definition d'un assemblage combustible charge en reacteur",
+  ang = "Definition of a core loaded fuel assembly ",
+  Identificateur              = SIMP (typ='TXM',statut='o',fr="Code d'identification de l'assemblage combustible"),
+  Constructeur                = SIMP (typ='TXM',statut='o',into=('FRAMATOME','SIEMENS','ABB','ENUSA','WESTINGHOUSE')),
+  TypeAssemblage              = SIMP (typ=AssemblageType,statut='o'),
+  CleControle                 = SIMP (typ='TXM',statut='o'),
+  Engagement                  = SIMP (typ='TXM',statut='o'),
+  NumeroLot                   = SIMP (typ='I',statut='o'),
+  EnrichissementTheoriqueU235 = SIMP (typ='R',statut='o'),
+  EnrichissementTheoriquePu   = SIMP (typ='R',statut='f'),
+  MasseTheoriqueNL            = SIMP (typ='R',statut='o'),
+  MasseInitialeUPu            = SIMP (typ='R',statut='o'),
+  MasseInitialeU232          = SIMP (typ='R',statut='f'),
+  MasseInitialeU234           = SIMP (typ='R',statut='f'),
+  MasseInitialeU235           = SIMP (typ='R',statut='f'),
+  MasseInitialeU236           = SIMP (typ='R',statut='f'),
+  MasseInitialePu239          = SIMP (typ='R',statut='f'),
+  MasseInitialePu240          = SIMP (typ='R',statut='f'),
+  MasseInitialePu241          = SIMP (typ='R',statut='f'),
+  MasseInitialePu242          = SIMP (typ='R',statut='f'),
+  MasseInitialeAm241          = SIMP (typ='R',statut='f'),
+  AbsorbantFixe                      = SIMP (typ='TXM',statut='f'),
+  Campagnes                   = NUPL (
+      max      = '**',
+      statut   = 'f',
+      elements = ( SIMP (typ='TXM',fr="Identificateur de la campagne"),SIMP (typ='TXM',fr="Etat de l'assemblage"))),
+  BibliothequeNeutronique = SIMP (typ='TXM',statut='f',fr="Repertoire des Bibliothèques neutroniques associees") ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENT_BARRE :       Classe de définition d'une barre element d'un assemblage
+#                               Definition des barres des grappes de commande (barre et gaine, et composants axiaux)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ELEMENT_BARRE = OPER (nom="ELEMENT_BARRE",op=0,sd_prod=ElementBarre,
+
+  fr                           = "Définition d'une barre element d'un assemblage",
+  en                           = "Definition of an assembly rod element",
+  MateriauPartieInferieure     = SIMP (typ=Materiau,statut='o',defaut='ACIER',fr="Materiau composant la partie inferieure de la barre"),
+  MateriauPartieSuperieure     = SIMP (typ=Materiau,statut='o',defaut='ACIER',fr="Materiau composant la partie superieure de la barre"),
+  HauteurBarre                 = SIMP (typ='R',statut='o',fr="Hauteur de la barre"),
+  HauteurPartieInferieure      = SIMP (typ='R',statut='f',fr="Hauteur de la partie inferieure de la barre"),
+  HauteurPartieSuperieure      = SIMP (typ='R',statut='f',fr="Hauteur de la partie superieure de la barre"),
+  RayonInternePartieInferieure = SIMP (typ='R',statut='f',defaut=0.,fr="Rayon Interne de la partie inferieure de la barre"),
+  RayonInternePartieSuperieure = SIMP (typ='R',statut='f',defaut=0.,fr="Rayon Interne de la partie superieure de la barre"),
+  RayonExternePartieInferieure = SIMP (typ='R',statut='o',fr="Rayon Externe de la partie inferieure de la barre"),
+  RayonExternePartieSuperieure = SIMP (typ='R',statut='f',fr="Rayon Externe de la partie superieure de la barre"),
+  MasseRessort                 = SIMP (typ='R',statut='o',fr="Masse du ressort de la barre"),
+  MateriauRessort              = SIMP (typ=Materiau,statut='o',fr="Materiau du ressort de la barre"),
+  HauteurRessort               = SIMP (typ='R',statut='o',fr="Hauteur du ressort de la barre"),
+  HauteurBouchonInferieur      = SIMP (typ='R',defaut=0.,statut='f',fr="Hauteur du bouchon inferieur de la barre"),
+  HauteurBouchonSuperieur      = SIMP (typ='R',defaut=0.,statut='f',fr="Hauteur du bouchon superieur de la barre"),
+  RayonBouchonInferieur                = SIMP (typ='R',defaut=0.,statut='f',fr="Rayon externe du bouchon inferieur de la barre"),
+  RayonBouchonSuperieur                = SIMP (typ='R',defaut=0.,statut='f',fr="Rayon externe du bouchon superieur de la barre"),
+  MateriauGaine                        = SIMP (typ=Materiau,defaut='ACIER',statut='o',fr="Materiau de la gaine externe de la barre"),
+  RayonInterneGaine            = SIMP (typ='R',defaut=0.,statut='f', fr="Rayon Interne de la gaine externe de la barre"),
+  RayonExterneGaine            = SIMP (typ='R',defaut=0.,statut='f', fr="Rayon Externe de la gaine externe de la barre")
+ ) ;
+#----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENTS_GRAPPE_COMMANDE :   Classe de définition des éléments des grappes de commande
+#                              Association avec les différents types de barres absorbantes
+#                              Description simplifiée de l'araignée et du bouchon des barres
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ELEMENTS_GRAPPE_COMMANDE = OPER (nom="ELEMENTS_GRAPPE_COMMANDE",op=0,sd_prod=ElementsGrappeCommande,
+
+  fr                   = "Définition des éléments des grappes de commande",
+  en                   = "Definition of control rod cluster components",
+  ElementsBarre                = SIMP (typ= ElementBarre,      max='**',statut='f',fr="Liste des barres absorbantes associees"),
+  HauteurPasInsertion  = SIMP (typ='R',defaut=1.5875,  statut='f'),
+  HauteurInsertionMax  = SIMP (typ='R',defaut=300.,    statut='f'),
+  NbPasInsertion       = SIMP (typ='I',defaut=0,       statut='f'),
+  HauteurAraignee16P   = SIMP (typ='R',defaut=0.,      statut='f'),
+  HauteurAraignee4M    = SIMP (typ='R',defaut=0.,      statut='f'),
+  HauteurAraignee4G    = SIMP (typ='R',defaut=0.,      statut='f'),
+  HauteurPommeau       = SIMP (typ='R',defaut=0.,      statut='f'),
+  RayonPommeau         = SIMP (typ='R',defaut=0.,      statut='f') ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENTS_ABSORBANTS_REP : Classe de definition des elements des grappes d'absorbants fixes
+#                                 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ELEMENTS_ABSORBANTS_FIXES = OPER (nom="ELEMENTS_ABSORBANTS_FIXES",op=0,sd_prod=ElementsAbsorbantsFixes,
+
+  fr                                 = "Definition des elements des grappes d'absorbants fixes",
+  ang = "Definition of non movable absorber control rod cluster elements",
+# Limitation a 12 caracteres
+# HBouchInfPyrex       = SIMP (typ='R',statut='f'),
+# RBouchInfPyrex       = SIMP (typ='R',statut='f'),
+# HZoneVidePyrex        = SIMP (typ='R',statut='f'),
+# HBouchSupPyrex       = SIMP (typ='R',statut='f'),
+# RBouchSupPyrex       = SIMP (typ='R',statut='f'),
+# MatBouchonPyrex       = SIMP (typ=Materiau,statut='f')
+  CrayonPyrexHauteurBouchonInferieur = SIMP (typ='R',statut='f'),
+  CrayonPyrexRayonBouchonInferieur   = SIMP (typ='R',statut='f'),
+  CrayonPyrexHauteurZoneVide         = SIMP (typ='R',statut='f'),
+  CrayonPyrexHauteurBouchonSuperieur = SIMP (typ='R',statut='f'),
+  CrayonPyrexRayonBouchonSuperieur   = SIMP (typ='R',statut='f'),
+  CrayonPyrexMateriauBouchon         = SIMP (typ=Materiau,statut='f') ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GRAPPE_BOUCHON_ASSEMBLAGE_REP : Classe de definition d'une grappe bouchon
+#                                 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GRAPPE_BOUCHON_ASSEMBLAGE = OPER (nom="GRAPPE_BOUCHON_ASSEMBLAGE",op=0,sd_prod=GrappeBouchonAssemblage,
+
+  fr                                 = "Definition d'une grappe bouchon d'assemblage combustible",
+  ang = "Definition of ",
+  HauteurBouchonPartieBasse          = SIMP (typ='R',statut='f'),
+  RayonBouchonPartieBasse            = SIMP (typ='R',statut='f'),
+  HauteurBouchonPartieIntermediaire1 = SIMP (typ='R',statut='f'),
+  RayonBouchonPartieIntermediaire1   = SIMP (typ='R',statut='f'),
+  HauteurBouchonPartieIntermediaire2 = SIMP (typ='R',statut='f'),
+  RayonBouchonPartieIntermediaire2   = SIMP (typ='R',statut='f'),
+  HauteurBouchonRegionSousPlaque     = SIMP (typ='R',statut='f'),
+  HauteurBouchonRegionSurPlaque      = SIMP (typ='R',statut='f'),
+  RayonBouchonRegionPlaque           = SIMP (typ='R',statut='f'),
+  HauteurSupport                     = SIMP (typ='R',statut='f'),
+  MasseGrappe                        = SIMP (typ='R',statut='f'),
+  Materiau                           = SIMP (typ=Materiau,statut='f') ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENTS_ASSEMBLAGE : Classe de définition des éléments associes a l'assemblage combustibe REP
+#                                 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - class ReflexionIsotrope (TObjet):pass
+#ELEMENTS_ASSEMBLAGE = OPER (nom="ELEMENTS_ASSEMBLAGE",op=0,sd_prod=ElementsAssemblage,
+#
+#  fr  = "Definition des elements associes a l'assemblage",
+#  ang = "Definition of the fuel assembly associated elements",
+#  GrappeBouchon         = SIMP (typ=GrappeBouchonAssemblage,statut='o'),
+#  CrayonsAbsorbants     = SIMP (typ=ElementsAbsorbants,statut='o'),
+#  GrappesCommande       = SIMP (typ=ElementsGrappeCommande,statut='o')
+# ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SYSTEME_UNITES_MESURE :       Classe de definition du systeme d'unites pour l'expression des donnees 
+#                               Sauf indication contraire dans les attributs des classes, les unites utilisees sont definies
+#                               dans la classe ci-dessous
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SYSTEME_UNITES_MESURE = OPER (nom="SYSTEME_UNITES_MESURE",op=0,sd_prod=SystemeUnitesMesure,
+
+  fr                           = "Definition du systeme d'unites pour l'expression des donnees",
+  ang = "Definition of data unit system",
+  Longueur                     = SIMP (typ='TXM',statut='o',defaut='cm'),
+  Masse                        = SIMP (typ='TXM',statut='o',defaut='g'),
+  Temps                        = SIMP (typ='TXM',statut='o',defaut='s'),
+  Irradiation                  = SIMP (typ='TXM',statut='o',defaut='MWj/t'),
+  Fluence                      = SIMP (typ='TXM',statut='o',defaut='n/kb'),
+  SectionEfficaceMicroscopique = SIMP (typ='TXM',statut='o',defaut='barn'),
+  SectionEfficaceMacroscopique = SIMP (typ='TXM',statut='o',defaut='cm-1'),
+  MasseVolumique               = SIMP (typ='TXM',statut='o',defaut='g/cm3'),
+  Concentration                = SIMP (typ='TXM',statut='o',defaut='E24*atome/cm3'),
+  Temperature                  = SIMP (typ='TXM',statut='o',defaut='C'),
+  ProportionMateriau           = SIMP (typ='R',statut='o',defaut=0.01),
+  Taux                         = SIMP (typ='R',statut='o',defaut=0.01),
+  Enrichissement               = SIMP (typ='R',statut='o',defaut=0.01),
+  Pression                     = SIMP (typ='TXM',statut='o',defaut='bar') ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classes CONDITION_LIMITE elementaires :     Classes de definition de Conditions limites elementaires
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+VIDE = OPER (nom="VIDE",op=0,sd_prod=Vide,
+                               fr  = "Condition aux limites de vide",
+                               ang= "Void boundary condition" ) ;
+
+REFLEXION_ISOTROPE = OPER (nom="REFLEXION_ISOTROPE",op=0,sd_prod=ReflexionIsotrope,
+                               fr  = "Condition aux limites de reflexion isotrope",
+                               ang= "Isotropic Reflexion boundary condition" ) ;
+
+REFLEXION_SPECULAIRE = OPER (nom="REFLEXION_SPECULAIRE",op=0,sd_prod=ReflexionSpeculaire,
+                               fr  = "Condition aux limites de reflexion speculaire",
+                               ang= "Specular Reflexion boundary condition" ) ;
+ALBEDO = OPER (nom="ALBEDO",op=0,sd_prod=Albedo,
+                               fr   = "Condition aux limites d'albedo",
+                               ang= "Albedo boundary condition",
+                               albedo = SIMP (typ='R',statut='o',max='**') ) ;
+TRANSLATION = OPER (nom="TRANSLATION",op=0,sd_prod=Translation,
+                               fr      = "Condition aux limites de translation",
+                               ang = "Translation boundary condition",
+                               Vecteur = SIMP (typ=Vecteur,statut='o') ) ;
+ROTATION = OPER (nom="ROTATION",op=0,sd_prod=Rotation,
+                               fr     = "Condition aux limites de rotation",
+                               ang = "Rotational boundary condition",
+                               Centre = SIMP (typ=Point,statut='o'),
+                               Angle  = SIMP (typ='R',statut='o',defaut=90.) ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITION_LIMITE_SPECIALE :  Classe de definition de Conditions limites sur les surfaces elementaires de la geometrie
+#                                      modifiant la CL generale
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITION_LIMITE_SPECIALE = OPER (nom="CONDITION_LIMITE_SPECIALE",op=0,sd_prod=ConditionLimiteSpeciale,
+
+  fr     = "Condition limite particuliere qui sera plaquee sur la geometrie",
+  ang = "Special boundary condition added to the geometry",
+  Type = SIMP (typ=(Vide,ReflexionIsotrope,ReflexionSpeculaire, Albedo, Translation, Rotation),statut='o'),
+  ZonesApplication = SIMP (    typ=(Segment,ArcCercle,Conique),max='**',statut='o',
+                               fr="Liste des segments ou surfaces sur lesquels porte la condition limite")
+ ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITION_LIMITE_GENERALE : Classe de definition des conditions limites de l'objet geometrique complet
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITION_LIMITE_GENERALE = OPER (nom="CONDITION_LIMITE_GENERALE",op=0,sd_prod=ConditionLimiteGenerale,
+
+  fr  = "Condition limite a la surface externe de la geometrie complete",
+  ang = "Boundary condition for the complete geometry",
+  ZoneCalculee          = NUPL (statut='f',min=2,max=2,fr="Droites ou plans delimitant la zone de calcul",
+                                elements = (SIMP (typ=(Droite,Plan)), SIMP (typ='TXM',into=('Plus','Moins')))),
+  ConditionParDefaut   = SIMP (typ=(Vide, ReflexionIsotrope, ReflexionSpeculaire, Albedo),
+                               defaut=ReflexionIsotrope,
+                               statut='f',
+                               fr="Condition limite par defaut"),
+  ConditionsParticulieres  = NUPL (
+                               fr       = "Conditions particulieres modifiant localement la condition limite par defaut",
+                               max      = '**',
+                               statut   = 'f',
+                               elements = (SIMP (typ='TXM',into=('X-','X+','Y-','Y+','Z-','Z+','R+','X','Y','Z')),
+                                           SIMP (typ=(Vide,ReflexionIsotrope,ReflexionSpeculaire, Albedo, Translation, Rotation)))),
+  ConditionsSupplementaires = SIMP (
+                               typ    = ConditionLimiteSpeciale,
+                               statut = 'f',
+                               max    = '**',
+                               fr     = "Conditions limites non exprimables avec les donnees precedentes") 
+ ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POSITION_ASSEMBLAGE_COMBUSTIBLE : Classe de definition de la position des assemblages combustibles dans un REP
+#                                           Reperes (bataille navale ou autre) et
+#                                           Coordonnees cartesiennes entieres des assemblages combustibles pour un type de palier
+#                                           Origine des coordonnees en bas a gauche d'un systeme en xy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POSITION_ASSEMBLAGE_COMBUSTIBLE = OPER (nom="POSITION_ASSEMBLAGE_COMBUSTIBLE",op=0,sd_prod=PositionAssemblageCombustible,
+
+  fr                        = "Position des assemblages combustibles",
+  ang = "Position of fuel assemblies",
+  NbAssemblagesCombustibles = SIMP (typ='I',statut='o',defaut=157),
+  regles=(UN_PARMI('PositionReseau', 'Positions'),),
+  PositionReseau            = SIMP (typ=CorrespondanceReperePositionReseau,statut="f"),
+  Positions                 = NUPL (   max='**',statut='f',
+                                        elements=(SIMP (typ='TXM',fr="Repere alphanumerique arbitraire de l'assemblage"),
+                                                  SIMP (typ='I'  ,fr="Premiere Coordonnee entiere de l'assemblage"),
+                                                  SIMP (typ='I'  ,fr="Seconde Coordonnee entiere de l'assemblage")))
+ ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POSITION_INSTRUMENTATION : Classe de definition de la position des assemblages instrumentes dans un REP 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POSITION_INSTRUMENTATION_INTERNE = OPER (nom="POSITION_INSTRUMENTATION_INTERNE",op=0,sd_prod=PositionInstrumentationInterne,
+
+  fr                        = "Definition de la position des assemblages instrumentes",
+  ang = "Definition of neutron flux detector position",
+# TypePalier                = SIMP (typ='TXM',max='**',statut='o'),
+  NbAssemblagesInstrumentes = SIMP (typ='I',statut='o'),
+  Positions                 = NUPL (
+      max      = '**',
+      statut   = 'o',
+      elements = (SIMP (typ='TXM',fr= "Type d'instrumentation"),
+                  SIMP (typ='I',min=2,max=2,fr= "Coordonnees entieres de l'assemblage instrumente dans le reseau"))) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POSITION_GRAPPES_COMMANDE : Classe de definition des grappes de commande pour un type de schema de grappe
+#                                     Donnees de la position (coordonnees entieres en xy), du type de grappe et du groupe d'appartenance 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POSITION_GRAPPES_COMMANDE = OPER (nom="POSITION_GRAPPES_COMMANDE",op=0,sd_prod=PositionGrappesCommande,
+
+  fr              = "Definition des grappes de commande pour un schema d'implantation particulier",
+  ang = "Definition of control rod cluster position ant type",
+  TypeSchema      = SIMP (typ='TXM',statut='o'),
+  NbTotalGrappes  = SIMP (typ='I',statut='o'),
+  PositionsEtType = NUPL (max='**',statut='o',
+                          elements=(SIMP (typ='TXM',fr="Nom du groupe de grappes"),
+                                    SIMP (typ='I',fr="Nombre de grappes du groupe"),
+                                    SIMP (typ='TXM',fr="Type de grappes"),
+                                    SIMP (typ='I',max='**',fr="Coordonnees des grappes"))) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe STRUCTURES_INTERNES_REACTEUR :        Classe de definition des structures internes du coeur du reacteur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+STRUCTURES_INTERNES_REACTEUR = OPER (nom="STRUCTURES_INTERNES_REACTEUR",op=0,sd_prod=StructuresInternesReacteur,
+
+  fr                      = "Definition des structures internes du coeur",
+  ang = "Definition of core internal structures",
+  PlaqueInferieureCoeur   = FACT (
+      Epaisseur = SIMP (typ='R',statut='o',                    fr="Epaisseur de la plaque inferieure du coeur"),
+      Materiau  = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau  de la plaque inferieure du coeur"),
+      Trous     = NUPL (
+          max      = '**',
+          elements = (
+              SIMP (typ='I',                           fr="Nombre de trous dont on donne les dimensions"),
+              SIMP (typ='TXM',into=('Rayon','Cotes'),  fr="Mot-cle indiquant si on donne le rayon ou les cotes"),
+              SIMP (typ='R',min=2,max=2,               fr="Rayon ou cotes des trous"),
+              SIMP (typ='TXM',into=('Hauteur','Epaisseur'),fr="Mot-cle indiquant l'entree de la hauteur du trou"),
+              SIMP (typ='R',                           fr="Hauteur du trou")))),
+  PlaqueSuperieureCoeur   = FACT (
+      Epaisseur = SIMP (typ='R',                                fr="Epaisseur de la plaque superieure du coeur"),
+      Materiau  = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau  de la plaque superieure du coeur"),
+      Trous     = NUPL (
+          max      = '**',
+          elements = (
+              SIMP (typ='I',                           fr="Nombre de trous dont on donne les dimensions"),
+              SIMP (typ='TXM',into=('Rayon','Cotes'),  fr="Mot-cle indiquant si on donne le rayon ou les cotes"),
+              SIMP (typ='R',min=2,max=2,               fr="Rayon ou cotes des trous"),
+              SIMP (typ='TXM',into=('Hauteur','Epaisseur'),fr="Mot-cle indiquant l'entree de la hauteur du trou"),
+              SIMP (typ='R',                           fr="Hauteur du trou")))),
+  CloisonnementCoeur      = FACT (
+      Epaisseur             = SIMP (typ='R',                                   fr="Epaisseur du cloisonnement du coeur"),
+      Materiau              = SIMP (typ=Materiau,statut='f',defaut='ACIER',    fr="Materiau  du cloisonnement du coeur"),
+      DimensionsInterieures = NUPL (
+          max      = '**',
+          elements = (
+              SIMP (typ='I',                                   fr="Nombre d'assemblages dans la rangee"),
+              SIMP (typ='TXM',into=('Assemblages','Assemblies'),fr="Mot-cle suivant le nombre d'assemblages"),
+              SIMP (typ='TXM',into=('Largeur','Cote'),         fr="Mot-cle precedant la largeur interieure du cloisonnement"),
+              SIMP (typ='R',                                   fr="Largeur interieure du cloisonnement"),
+              SIMP (typ='TXM',into=('NbJeuCloisonGrille','NbJeu'),fr="Mot-cle precedant le nombre de jeux CloisonGrille"),
+              SIMP (typ='I',                                   fr="Nombre de jeux CloisonGrille"))),
+      TrousDepressurisation = NUPL (elements=(SIMP (typ='I',fr="Nombre de trous de depressurisation"),
+                                               SIMP (typ='TXM',into=('Rayon','Radius'),fr="Mot-cle precedant la valeur du rayon des trous"),
+                                               SIMP (typ='R',fr="Rayon des trous de depressurisation"))),
+      TemperatureMoyenne    = SIMP (typ='R',fr="Temperature Moyenne du cloisonnement")),
+  RenfortsInternes        = FACT (
+      Nombre                      = SIMP (typ='I',max='**'),
+      Epaisseur                   = SIMP (typ='R',max='**'),
+      Materiau                    = SIMP (typ=Materiau,max='**',statut='f',defaut='ACIER'),
+      NbTrousDepressurisation     = SIMP (typ='I',max='**'),
+      RayonsTrousDepressurisation = SIMP (typ='R',max='**'),
+      TemperatureMoyenne          = SIMP (typ='R'),statut='f'),
+  EnveloppeVirole        = FACT (
+      RayonInterne       = SIMP (typ='R'),
+      RayonExterne       = SIMP (typ='R'),
+      Materiau           = SIMP (typ=Materiau,statut='f',defaut='ACIER'),
+      TemperatureMoyenne = SIMP (typ='R')),
+  Boucliers              = FACT (
+      RayonInterne       = SIMP (typ='R'),
+      RayonExterne       = SIMP (typ='R'),
+      Materiau           = SIMP (typ=Materiau,statut='f',defaut='ACIER'),
+      Secteurs           = NUPL (max='**',elements=(SIMP (typ='R'),SIMP (typ='R'))),
+      TemperatureMoyenne = SIMP (typ='R')),
+  Cuve                    = FACT (
+      RayonInterne       = SIMP (typ='R'),
+      RayonExterne       = SIMP (typ='R'),
+      Materiau           = SIMP (typ=Materiau,statut='f',defaut='ACIER'),
+      TemperatureMoyenne = SIMP (typ='R')) ) ; # Fin STRUCTURES_INTERNES_REACTEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CARACTERISTIQUES_PALIER : Classe de definition des donnees generales d'un type de palier de reacteur 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CARACTERISTIQUES_PALIER = OPER (nom="CARACTERISTIQUES_PALIER",op=0,sd_prod=CaracteristiquesPalier,
+
+  fr                  = "Definition des donnees generales d'un type de palier de reacteur",
+  ang = "Definition of general data for a type of nuclear reactor",
+  TypePalier         = SIMP (typ='TXM',statut='o',fr="Identificateur du type de palier"),
+  PositionCombustible = SIMP (typ=PositionAssemblageCombustible,statut='o'),
+  PositionDetecteur   = SIMP (typ=PositionInstrumentationInterne,statut='o'),
+  StructuresInternes  = SIMP (typ=StructuresInternesReacteur,statut='o'),
+  NbBouclesPrimaires  = SIMP (typ='I',statut='o',defaut=3,fr="Nombre de boucles primaires"),
+  NbTubesParGV        = SIMP (typ='I',statut='f',fr="Nombre de tubes par GV") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SITE_NUCLEAIRE_EDF : Classe de definition d'un site nucleaire EDF (Tranches, paliers et numero comptable) 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SITE_NUCLEAIRE = OPER (nom="SITE_NUCLEAIRE",op=0,sd_prod=SiteNucleaire,
+
+  fr       = "Definition d'un site nucleaire EDF",
+  ang = "Definition of a nuclear power plant site",
+  NomSite  = SIMP (typ='TXM',statut='o',fr="Nom du site nucleaire",defaut='TRICASTIN'),
+  Tranches = NUPL (max='**',elements=( SIMP (typ='I'  ,statut='o',fr="Numero de la tranche nucleaire"),
+                                       SIMP (typ='TXM',statut='o',fr="Trigramme de la tranche nucleaire"),
+                                       SIMP (typ=CaracteristiquesPalier,statut='o',fr="Type de palier"),
+                                       SIMP (typ='I'  ,statut='o',fr="Numero comptable de la tranche"))) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ESPACE_VARIATIONS :     Classe de definition des parametres de contre-reactions neutroniques et de leurs variations
+#                                       Donnees definissant l'espace des parametres dont dependent les bibliotheques
+#                                       neutroniques et la discretisation de leur espace de variation.
+#                                       Definition de la methode de balayage de cet espace (Suite d'options complementaires) :
+#                                       1) ParametresIndependants :     Calculs independants en donnant successivement a chacun
+#                                                                       des parametres leurs valeurs individuelles
+#                                       2) CoinsDomaine :               Rajout des calculs aux limites extremes du domaine
+#                                       3) BordsDomaine :               Rajout des calculs aux bords du domaine
+#                                       4) Grilles2D :                  Rajout des calculs sur les grilles 2D 
+#                                                                       passant par un point de reference
+#                                       5) CasParticuliers :            Rajout de points specifiques de calcul
+#                                       6) EspaceComplet :              Balayage complet du domaine des parametres
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ESPACE_VARIATIONS = OPER (nom="ESPACE_VARIATIONS",op=0,sd_prod=EspaceVariations,
+
+  fr              = "Definition de l'espace de variation des parametres neutroniques",
+  ang = "Definition of feedback or variable parameters",
+  Variations      = NUPL (max='**',statut='f',
+                          elements=(   SIMP (typ='TXM',fr="Nom du parametre a faire varier"),
+                                        SIMP (typ='R',max='**',fr="Valeurs discretes de variation du parametre"))),
+  MethodeBalayage = SIMP (
+      typ    = 'TXM',
+      max    = '**',
+      defaut = 'ParametresIndependants',
+      into   = ('ParametresIndependants','CoinsDomaine','BordsDomaine','Grilles2D','CasParticuliers','EspaceComplet'),
+      statut = 'f'),
+  TypeVariation   = SIMP (typ='TXM',defaut='absolu',into=('relatif','absolu'),statut='f'),
+  CasParticuliers = NUPL (max='**',statut='f',fr="Liste des couples (Parametre, Valeur du parametre) pour les cas particuliers",
+                          elements=(SIMP (typ='TXM'),SIMP (typ='R'))),
+  CasReference    = NUPL (max='**',statut='f',fr="Liste des couples (Parametre, Valeur du parametre) pour le cas de reference",
+                          elements=(SIMP (typ='TXM'),SIMP (typ='R'))) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_EVOLUTION_IRRADIATION : Classe de definition des valeurs d'irradiation intervenant dans les phases de calcul et d'edition
+#                       Pour le moment, on ne considere que l'Evolution, les Editions, l'Autoprotection et les ContreReactions
+#                       ou les irradiations de reprise (Normale, Gs et Beta pour EDF).
+#                       Donnees consistant pour chaque phase d'une liste d'irradiations en MWj/t
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_EVOLUTION_IRRADIATION = OPER (nom="DONNEES_EVOLUTION_IRRADIATION",op=0,sd_prod=DonneesEvolutionIrradiation,
+
+  fr                   = "Definition des donnees du calcul d'evolution et des irradiations de reprise",
+  ang = "Definition of depletion calculation data and burnup restart calculations",
+  Unite                       = SIMP (typ='TXM',defaut='MWj/t',into=('MWj/t','Jours'),statut='f',fr="Unite pour les irradiations"),
+  Minimum              = SIMP (typ='R',defaut=0.,statut='f',fr="Irradiation du debut de calcul"),
+  Maximum              = SIMP (typ='R',defaut=100000.,statut='f',fr="Irradiation maximum des calculs"),
+  Evolution            = SIMP (typ='R',max='**',defaut=0.,statut='f',fr="Irradiations du calcul d'evolution"),
+  Editions             = SIMP (typ='R',max='**',defaut=0.,statut='f',fr="Irradiations ou se font les editions"),
+  ContreReactions      = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs de reprise de contre-reactions"),
+  ReprisesGs           = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs de reprise GS EDF"),
+  ReprisesBeta         = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs de reprise BETA EDF"),
+  Reprises             = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs de reprise"),
+  Refroidissement      = FACT (
+                         Instants = SIMP (typ='R',max='**',fr="Irradiations de debut de refroidissement du combustible"),
+                         Jours    = SIMP (typ=('R','I'),max='**',fr="Nombre de jours de refroidissement correspondant aux instants de refroidissement")),
+  InsertionGrappe      = NUPL (max='**',statut='f',elements=(
+                                SIMP (typ='TXM',fr="Type de grappe inseree"),
+                                SIMP (typ=('R','I'), min=2,max=2,fr="Irradiations de Debut et Fin d'insertion de la grappe"),
+                                SIMP (typ='R',fr="Cote axiale de la limite inferieure de la grappe inseree"))) ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITIONS_FONCTIONNEMENT : Classe de definition des conditions de fonctionnement Reacteur pour une campagne donnee
+#                               
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITIONS_FONCTIONNEMENT_MOYENNES = OPER (nom="CONDITIONS_FONCTIONNEMENT_MOYENNES",op=0,sd_prod=ConditionsFonctionnementMoyennes,
+
+  fr                          = "Definition des conditions de fonctionnement pour une campagne donnee",
+  ang = "Definition of a campaign operating conditions ",
+  IdentificateurCampagne      = SIMP (typ='TXM',statut='f',fr="Identificateur de la campagne"),
+  PuissanceElectriqueMW       = SIMP (typ='R',statut='o',defaut=900.,fr="Puissance electrique du reacteur en MW"),
+  PuissanceThermiqueMWth      = SIMP (typ='R',statut='o',defaut=2775.,fr="Puissance thermique du reacteur en MWth"),
+  PressionPrimaireEntreeBar   = SIMP (typ='R',statut='o',defaut=155.1,fr="Pression du moderateur en bars a l'entree du coeur actif"),
+  PressionPrimaireSortieBar   = SIMP (typ='R',statut='o',defaut=155.1,fr="Pression du moderateur en bars en sortie du coeur actif"),
+  TitreMoyenBorePpm           = SIMP (typ='R',statut='o',defaut=500.,fr="Titre moyen en ppm en bore dans le moderateur"),
+  TmodEntreePnulleC           = SIMP (typ='R',statut='o',defaut=286.0,fr="Temperature en C du moderateur a puissance nulle a l'entree du coeur"),
+  TmodEntreePnomC             = SIMP (typ='R',statut='o',defaut=286.4,fr="Temperature en C du moderateur a puissance nominale a l'entree du coeur"),
+  DeltaTmodEntreeSortiePnomC  = SIMP (typ='R',statut='o',defaut=39.0,fr="Ecart en C de temperature entre entree et sortie du coeur a puissance nominale"),
+  TmodMoyenneCoeurPnomC       = SIMP (typ='R',statut='o',defaut=305.3,fr="Temperature moyenne en C du moderateur dans le coeur actif"),
+  TmodMoyenneCuvePnomC        = SIMP (typ='R',statut='f',defaut=305.0,fr="Temperature moyenne en C du moderateur dans la cuve"),
+  TcomMoyennePnomC            = SIMP (typ='R',statut='f',defaut=600.0,fr="Temperature moyenne en C du combustible dans le coeur"),
+  TmodMoyenneReflecteurPnomC  = SIMP (typ='R',statut='f',defaut=296.0,fr="Temperature moyenne en C du reflecteur radial"),
+  PositionGrappeHaute         = SIMP (typ='I',statut='f',defaut=225,fr="Position haute des grappes, en nombre de pas extraits"),
+  DebitPrimaireConceptionM3_h = SIMP (typ='R',statut='f',defaut=70500.,fr="Debit primaire de conception dans le coeur en m3/h"),
+  ProportionDebitCoeurCuve    = SIMP (typ='R',statut='f',defaut=0.97,fr="Rapport du debit coeur / debit cuve"),
+  NbTubesGVBouches            = SIMP (typ='I',statut='f',defaut=0,fr="Nombre de tubes GV bouches"),
+  SectionEcoulementCoeur      = SIMP (typ='R',statut='f',defaut=3.87,fr="Section d'ecoulement du moderateur dans le coeur en m2")
+ ) ; # Fin CONDITIONS_FONCTIONNEMENT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_CHARGEMENT_COEUR : Classe de definition du plan de chargement combustible d'un coeur pour une campagne donnee                               
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#PLAN_CHARGEMENT_COEUR = OPER (nom="PLAN_CHARGEMENT_COEUR",op=0,sd_prod=PlanChargementCoeur,
+#
+#  fr                     = "Definition du plan de chargement combustible d'un coeur",
+#  ang = "Definition of a fuel loading core map ",
+#  IdentificateurCampagne = SIMP (typ='TXM',statut='o'),
+#  TypePlan               = SIMP (typ='TXM',into=('STD','FR','FF','FFG'), statut='f'),
+#  AssemblagePosition     = NUPL (
+#      max      = '**',
+#      elements = (      SIMP (typ=AssemblageCombustibleCharge,fr="Identificateur de l'assemblage"),
+#                        SIMP (typ='TXM',statut='f',fr="Repere alphanumerique de la Position dans le coeur"),
+#                        SIMP (typ='I',min=2,max=2,statut='f',fr="Coordonnees ij dans le plan radial du reseau du coeur")))
+# );
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DATES_CLES_CAMPAGNE : Classe de definition des dates cles d'une campagne et de sa longueur
+#                               
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DATES_CLES_CAMPAGNE = OPER (nom="DATES_CLES_CAMPAGNE",op=0,sd_prod=DateClesCampagne,
+
+  fr                                  = "Definition des dates cles d'une campagne et de sa longueur",
+  ang = "Definition of the campaign dates and length",
+  IdentificateurCampagne              = SIMP (typ='TXM',statut='o',defaut='CZ101'),
+  DateDDC                             = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de debut de campagne"),
+  DatePnom                            = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A d'atteinte de la puissance nominale"),
+  DateFDC                             = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de fin de campagne"),
+  LongueurNaturelleTheoriqueMWj_t     = SIMP (typ='R',statut='f',fr="Longueur naturelle theorique calculee de la campagne en MWj/t"),
+  LongueurNaturelleRecaleeMWj_t       = SIMP (typ='R',statut='f',fr="Longueur naturelle recalee calculee de la campagne en MWj/t"),
+  LongueurNaturelleExperimentaleMWj_t = SIMP (typ='R',statut='f',fr="Longueur naturelle mesuree de la campagne en MWj/t"),
+  LongueurAnticipationJepp            = SIMP (typ='R',statut='f',fr="Nombre de JEPP d'anticipation"),
+  LongueurProlongationJepp            = SIMP (typ='R',statut='f',fr="Nombre de JEPP de prolongation"),
+  LongueurTotaleExperimentaleMWj_t    = SIMP (typ='R',statut='f',fr="Longueur totale de la campagne en MWj/t") ) ;
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_CODES :      Classe de definition des options generales et du type de calcul demande
+#                               
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_CODES = OPER (nom="OPTIONS_CODES",op=0,sd_prod=OptionsCodes,
+  fr                 = "Definition des options des codes de calcul",
+  ang = "Definition of calculation code options",
+# TypeCalcul         = SIMP (typ='TXM',defaut='Evolution',statut='f'),
+# CodeCalcul         = SIMP (typ='TXM',defaut='SUNSET',statut='f'),
+# ConditionLimite    = SIMP (typ=ConditionLimiteGenerale,statut='o'),
+  OptionsCodeReseau  = FACT (
+      OptionMulticellule        = SIMP (typ='TXM',defaut='ROTH',statut='f',into=('ROTH','MULTICELLULE'),fr="Option du calcul multicellule"),
+      OptionPij                 = SIMP (typ='TXM',defaut='&UP0 &ROTH',statut='f',into=('&UP0 &ROTH','&UP0 &HETE','&UP1 &HETE'),fr="Option du calcul des Pij"),
+      ParametresIntegration     = SIMP (typ='TXM',defaut='MAIL_INT 7 7 7 7',statut='f',fr="Donnees du maillage d'integration en heterogene"),
+      ProportionNoyauxParDefaut = SIMP (typ='R',defaut=1.E-12,statut='f',fr="Valeur initiale des concentrations des noyaux lourds non definis"),
+      OptionLaplacienB2         = SIMP (typ='TXM',defaut='CRITIQUE',statut='f',into=('CRITIQUE','NUL','IMPOSE'),fr="Option du calcul des fuites homogenes"),
+      LaplacienB2               = SIMP (typ='R',defaut=0.,statut='f',fr="Valeur initiale du laplacien du calcul des fuites"),
+      OrdreAnisotropie          = SIMP (typ='I',defaut=1,statut='f',fr="Ordre d'anisotropie des sections de transfert"),
+      Autoprotection            = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Calcul d'autoprotection ou non"),
+      DonneesAutoprotection     = SIMP (typ=OptionsAutoprotection,statut='f',max='**',fr="Nom des objets decrivant les isotopes a autoproteger et les options associees"),
+      RecalculAutoprotection    = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Demande ou non de recalcul de l'autoprotection"),
+      Equivalence               = SIMP (typ='TXM',defaut='Non',statut='f',into=('Oui','Non'),fr="Demande ou non de calcul d'equivalence"),
+      NbGroupesEquivalence      = SIMP (typ='I',max='**',defaut=(2,6,16),statut='f',fr="Liste des nombres de groupes des calculs d'quivalence"),
+      EditionAssemblage         = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Demande d'edition des sections efficaces homogeneisees sur l'ensemble du domaine"),
+      EditionCellule            = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Demande d'edition des sections efficaces homogeneisees par cellule"),
+      EditionFluxDetaille       = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Demande d'edition des flux moyens sur l'ensemble du domaine sur la maillage multigroupe detaille"),
+      EditionMilieu             = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Demande d'edition des compositions isotopiques detaillees sur tous les milieux de calcul"),
+      EditionTrimaran           = SIMP (typ='TXM',defaut='Non',statut='f',into=('Oui','Non'),fr="Demande d'edition des sections efficaces pour TRIPOLI multigroupe"),
+      SpectreNeutrons           = SIMP (typ='TXM',defaut='Prompt',statut='f',into=('Prompt','Retarde'),fr="Type de spectre de neutrons pour le calcul de transport"),
+      ListeIsotopesEdites       = SIMP (typ='TXM',statut='f',max='**',fr="Liste des initiales des symboles des isotopes a editer"),
+      FichierBickley            = SIMP (typ='TXM',statut='f',fr="Nom du fichier des fonctions Bickley"),
+      EditionIsotopeHomogene    = SIMP (typ='TXM',defaut='Non',statut='f',into=('Oui','Non'),fr="Demande d'edition de constitution d'isotopes homogeneises sous forme APOLLIB"),
+      RepertoireHomoge          = SIMP (typ='TXM',statut='f',fr="Nom du repertoire du fichier des isotopes homogenes sous forme APOLLIB"),
+      FichierHomoge             = SIMP (typ='TXM',statut='f',fr="Nom du fichier des isotopes homogenes sous forme APOLLIB"),
+      ExecutableAPOLLO          = NUPL (
+          elements = ( SIMP (typ='TXM',fr="Systeme d'exploitation"),SIMP (typ='TXM',fr="Nom du fichier executable")),
+          statut   = 'f'),
+      ProceduresApollo2         = FACT (
+                OptionsListing  = SIMP (typ='TXM',statut='f'),
+                Evolution       = SIMP (typ='TXM',statut='f'),
+                Reprise         = SIMP (typ='TXM',statut='f'),
+                Equivalence     = SIMP (typ='TXM',statut='f'),
+                EditionCellule  = SIMP (typ='TXM',statut='f'),
+                EditionHomoge   = SIMP (typ='TXM',statut='f')),
+      ProceduresSunset          = FACT (
+                Evolution       = SIMP (typ='TXM',statut='f'),
+                Reprise         = SIMP (typ='TXM',statut='f'),
+                Equivalence     = SIMP (typ='TXM',statut='f'),
+                EditionCellule  = SIMP (typ='TXM',statut='f'),
+                EditionHomoge   = SIMP (typ='TXM',statut='f'))),
+# --------------------------------------------------------------
+  OptionsCodeCoeur  = FACT (
+      ReactiviteVisee = SIMP (typ='R',defaut=0.,statut='f',fr="Valeur en pcm de la reactivite visee en calcul critique"),
+      EfficaciteBoreEstimee = SIMP (typ='R',defaut=-6.,statut='f',fr="Valeur estimee en pcm/ppm de l'efficacite du bore"),
+      TitreBoreInitiale = SIMP (typ='R',defaut=600.,statut='f',fr="Valeur estimee en ppm du titre en bore du moderateur"),
+      ApproximationTransport = SIMP (typ='TXM',defaut='SPn',statut='f',into=('SPn','Sn')),
+      BlocSPn  = BLOC (condition = "ApproximationTransport=='SPn'",
+                        OrdreApproximation = SIMP (typ='I',defaut=1,statut='f',fr="Ordre n impair de la methode SPn"),
+                        ElementFini       = SIMP (typ='TXM',defaut='RTN0',statut='f',into=('RTN0','RTN1'),fr="Type d'element fini"),
+                        MaxIterationsDiffusion = SIMP (typ='I',defaut=1,into=(1,2,3,4,5),statut='f',fr="Nombre maximal d'iterations de diffusion")),
+      BlocSn   = BLOC (condition = "ApproximationTransport=='Sn'",
+                        OrdreApproximation = SIMP (typ='I',defaut=4,statut='f',fr="Ordre n pair de la methode Sn"),
+                        ElementFini       = SIMP (typ='TXM',defaut='RTN',statut='f',into=('RTN','BDM'),fr="Type d'element fini"),
+                        Acceleration      = SIMP (typ='TXM',defaut='Oui',statut='f',into=('Oui','Non'),fr="Acceleration par la diffusion"),
+                        MaxIterationsDiffusion = SIMP (typ='I',defaut=20,statut='f',fr="Nombre maximal d'iterations de calcul de diffusion") ),
+      PrecisionValeurPropre = SIMP (typ='R',defaut=1.E-5,statut='f',fr="Precision sur la valeur propre"),
+      PrecisionFlux = SIMP (typ='R',defaut=1.E-3,statut='f',fr="Precision sur le flux"),
+      PrecisionResolutionMultigroupe = SIMP (typ='R',defaut=1.E-6,statut='f',fr="Precision de la resolution multigroupe"),
+      PrecisionIterationTermeDiffusion = SIMP (typ='R',defaut=1.E-6,statut='f',fr="Precision des iterations sur le terme de diffusion"),
+      MaxIterationsEnEnergie = SIMP (typ='I',defaut=1,statut='f',fr="Nombre maximal d'iterations pour la resolution Gauss Seidel en energie"),
+      MaxIterationsTermeDiffusion = SIMP (typ='I',defaut=1,statut='f',fr="Nombre maximal d'iterations sur le terme de diffusion"),
+      MaxIterationsDecompositionDomaine = SIMP (typ='I',defaut=1,statut='f',fr="Nombre d'iterations de decomposition de domaine"),
+      MaxIterationsKeffAvantCR = SIMP (typ='I',defaut=1,statut='f',fr="Nombre de calculs de keff avant appel aux contre-reactions"),
+      GestionAutomatiquePasCinetique = SIMP (typ='TXM',defaut='Oui',into=('Oui','Non'),statut='f',fr="Gestion automatique du pas de temps du calcul cinetique"),
+      PrecisionIterationsFluxPrecurseurs = SIMP (typ='R',defaut=1.E-6,statut='f',fr="Precision sur les iterations Flux Precurseurs"),
+      PrecisionParametreGestionAutomatique = SIMP (typ='R',defaut=0.0008,statut='f',fr="Precision sur les iterations Flux Precurseurs"),
+      MaxIterationsFluxPrecurseurs = SIMP (typ='I',defaut=50,statut='f',fr="Nombre maximal d'iterations Flux Precurseurs"),
+      ThetaSchemaCinetique = SIMP (typ='R',defaut=0.5,statut='f',fr="Valeur du parametre theta du schema cinetique") ),
+#  ------------------------------------------------------------------------------------------------------------------------------------
+   OptionsThermiqueThermohydraulique = FACT (
+       CoefficientEchangeGaineFluide = SIMP (typ='TXM',defaut='DITTUS_BOELTER',into=('FLICA','DITTUS_BOELTER'),statut='f',
+                                             fr="Option du Coefficient d'échange gaine-fluide (flux < au flux critique)"),
+       CoefficientEchangeGaineFluideEbullition = SIMP (typ='TXM',defaut='BST',into=('BST','TONG'),statut='f',
+                                                       fr="Option du Coefficient d'échange gaine-fluide (Ebullition en film)"),
+       CoefficientEchangeJeuPastilleGaineConstantTransitoire = SIMP (typ='TXM',defaut='Non',into=('Non','Oui'),statut='f',
+                                                                     fr="Option de constance des coefficients d'échange gap"),
+       CoefficientEchangeJeuPastilleGaine = SIMP (typ='TXM',defaut='HGAP_88',into=('EJECTION','TUO2','PLIN_BU','FIXE','HGAP_88'),statut='f',
+                                                       fr="Option du Coefficient d'échange du jeu pastille-gaine"),
+       BlocHgapTuo2    = BLOC (condition = "CoefficientEchangeJeuPastilleGaine=='TUO2'",
+                                 Tuo2Initiale = SIMP (typ='R',statut='o',
+                                                      fr="Température initiale combustible pour le calcul du coefficient d'échange") ),
+       BlocHgapFixe    = BLOC (condition = "CoefficientEchangeJeuPastilleGaine=='FIXE'",
+                                 Hgap = SIMP (typ='R',statut='o',defaut=5850.,fr="Valeur imposée du coefficient d'échange") ),
+       ConductiviteCombustible = SIMP (typ='TXM',defaut='HGAP_88',into=('STORA','WESTINGHOUSE','HGAP_88','COMETHE'),statut='f',
+                                                       fr="Option du Coefficient de conductivité du combustible"),
+       CapaciteCalorifiqueCombustible = SIMP (typ='TXM',defaut='UO2_FRAMATOME',into=('UO2_BATES','UO2_FRAMATOME','UO2_THYC'),statut='f',
+                                                       fr="Option du Coefficient de conductivité du combustible"),
+       MateriauGaine = SIMP (typ='TXM',defaut='ZIRCALOY_CYRANO',into=('ZIRCALOY_CYRANO', 'ZIRCALOY_THYC', 'INCOLOY_800',
+                                                                    'CHROMESCO_3', 'INOX_16', 'INOX_321', 'INOX_347', 'INOX_347_OXYDE',
+                                                                    'INCONEL_600', 'NICKEL_75', 'PLATINE'),statut='f',
+                           fr="Materiau de la gaine pour le calcul du roCp de la gaine et de sa conductivite"),
+       FluxCritique = SIMP (typ='R',defaut=180.E4,fr="Valeur du flux critique en W/m2"),
+       FractionPuissanceCombustible = SIMP (typ='R',defaut=0.974,fr="Fraction de la puissance degagee dans le combustible"),
+       Creusement = SIMP (typ='TXM',defaut='Uniforme',statut='f',into=('Uniforme','Runnals','Framatome','Twinkle','Mox','EDF','Specifique')),
+       BlocCreusement  = BLOC (condition = "Creusement=='Specifique'", 
+                           RayonsCreusement = SIMP (typ='R',statut='o',fr="Rayons de definition du creusement de puissance (nz)"),
+                           IrradiationsCreusement = SIMP (typ='R',statut='o',fr="Irradiations de definition du creusement de puissance (nbu)"),
+                           EnrichissementsCreusement = SIMP (typ='R',statut='o',fr="Enrichissements de definition du creusement de puissance (nen)"),
+                           PuissancesUO2 = SIMP (typ='R',max='**',statut='f',fr="Valeurs des creusements de puissance P(nz,nbu,nen) dans une pastille UO2"),
+                           PuissancesMOX = SIMP (typ='R',statut='f',fr="Valeurs des creusements de puissance P(nz,nbu,nen) dans une pastille MOX") ),
+       DiscretisationPastilleCombustible = SIMP (typ='I',defaut=4,statut='f',fr="Nombre de points de discretisation radiale de la pastille combustible"),
+       DiscretisationGaine = SIMP (typ='I',defaut=2,statut='f',fr="Nombre de points de discretisation radiale de la gaine de la pastille combustible"),
+       PrecisionCalculThermique = SIMP (typ='R',defaut=0.1,fr="Precision en Celsius du calcul thermique radiale du crayon"),
+       PrecisionCalculThermohydraulique = SIMP (typ='R',defaut=0.01,fr="Precision en Celsius du calcul thermohydraulique de la temperature du moderateur"),
+       MaxIterationsThermique = SIMP (typ='I',defaut=100,statut='f',fr="Nombre maximum d'iterations du calcul de thermique"),
+       MaxIterationsThermohydraulique = SIMP (typ='I',defaut=100,statut='f',fr="Nombre maximum d'iterations du calcul de thermohydraulique"),
+       MethodeIntegrationThermohydraulique = SIMP (typ='TXM',defaut='Gauss',statut='f',into=('Gauss','NonGauss'),fr="Methode d'integration thermohydraulique"),
+       PerteDeCharge = SIMP (typ='TXM',defaut='Non',statut='f',into=('Non','Oui'),fr="Prise en compte ou non de la perte de charge axiale"),
+       TableEau = SIMP (typ='TXM',defaut='Thetis',statut='f',into=('Thetis','Interne'),
+                        fr="Calcul des caracteristiques du moderateur par THETIS ou par des tables internes") ),
+#  ----------------------------------------------------------------------------------------------------------------------------------
+   OptionsContreReactions = FACT (
+       ContreReactions = SIMP (typ='TXM',defaut='Oui',into=('Oui','Non'),fr="Prise en compte des contre-reactions ou non"),
+       PrecisionPuissance = SIMP (typ='R',defaut=1.E-4,fr="Precision sur la puissance a la fin des iterations de contre-reactions"),
+       PrecisionKeff = SIMP (typ='R',defaut=1.E-5,fr="Precision sur keff a la fin des iterations de contre-reactions"),
+       MethodeCalculSection = SIMP (typ='TXM',defaut='Spline1D',into=('Spline1D','SplinenD','Tabulation'),
+                                    fr="Methode de calcul des sections efficaces avec Contre-reactions") )
+ ) ; # Fin OPTIONS_CODES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_GENERALES_ETUDE :     Classe de definition des caracteristiques globales de l'etude
+#                                       Definition de la centrale (site, numero de tranche) et numero de campagne d'irradiation
+#                                       Ces caracteristiques  d'environnement de l'etude doivent permettre de recuperer l'ensemble 
+#                                       des parametres de fonctionnement nominales du reacteur sujet de l'etude (creation de
+#                                       bibliotheques ou calcul de coeur)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_GENERALES_ETUDE = OPER (nom="DONNEES_GENERALES_ETUDE",op=0,sd_prod=DonneesGeneralesEtude,
+
+  fr                     = "Definition de la centrale sujet de l'etude et des options globales de l'etude",
+  ang = "Definition of the power plant and of the global options",
+  TypeCode              = SIMP (typ='TXM',defaut='Reseau',into=('Reseau','Coeur'),statut='o'),
+  SiteNucleaire          = SIMP (typ=SiteNucleaire,defaut='TRICASTIN',statut='o'),
+  BlocCoeur              = BLOC (condition = "TypeCode=='Coeur'",
+                           NumeroTranche          = SIMP (typ='I',defaut=1,statut='f'),
+                           NumeroCampagne         = SIMP (typ='I',defaut=1,statut='f'),
+                           IdentificateurCampagne = SIMP (typ='TXM',defaut='TN101',statut='f'),
+                           DatesCampagne          = SIMP (typ=DateClesCampagne,statut='f'),
+                           TypeGestion            = SIMP (typ    = 'TXM',
+                                                          defaut = '370Q',
+                                                          statut = 'f',
+                                                          into   = ('310Q','310T','325T','325Q','340Q','345AL',
+                                                                    '370Q','370T','400T','HMOX','MOXNT','TMOX')),
+                           TypeSchemaGrappe       = SIMP (typ    = 'TXM',
+                                                          defaut = '900CPYUO2',
+                                                          statut = 'f',
+                                                          into   = ('900CP0','900CPYUO2INITIAL','900CPYUO2',
+                                                                    '900CPYUO2AL','900CPYMOX','1300','N4')),
+                           PositionGrappe        = SIMP (typ=PositionGrappesCommande,statut='f'),
+                           TypeEvaluationSurete  = SIMP (typ='TXM',defaut='900STD',statut='f',
+                                                         into=('900STD','900GARANCE','1300STD','1300GEMMES','N4STD')),
+                           ModePilotage          = SIMP (typ='TXM',defaut='G',statut='f',into=('A','G','X')),
+                           PlanChargement        = SIMP (typ=Reseau,statut='f'),
+                           CodeCalcul            = SIMP (typ='TXM',defaut='SNCODE',statut='f')),
+  BlocReseau            = BLOC (condition = "TypeCode=='Reseau'",
+                           Assemblage            = SIMP (typ=AssemblageType,statut='f'),
+                           ContreReactions       = SIMP (typ=EspaceVariations,statut='f'),
+                           CodeCalcul            = SIMP (typ='TXM',defaut='SUNSET',statut='f')),
+  ConditionsMoyennes    = SIMP (typ=ConditionsFonctionnementMoyennes,statut='f'),
+  Options               = SIMP (typ=OptionsCodes,statut='f'),
+  PasIrradiation        = SIMP (typ=DonneesEvolutionIrradiation,statut='f'),
+# ConditionLimite       = SIMP (typ=ConditionLimiteGenerale,statut='o'),
+  TypeCalcul            = SIMP (typ='TXM',max='**',defaut='Evolution',
+                                into=('Evolution','EvolutionMicroscopique','Reprise','Statique','Cinetique',
+                                      'BoreImpose','BoreCritique'),statut='f')
+ ) ;
+class resultat(TObjet): pass
+class resultat2(resultat): pass
+
+CALCUL=OPER(nom="CALCUL",op=10,sd_prod=resultat,
+             materiau=SIMP(typ=Materiau),
+            PRESSION=SIMP(defaut=10000.,typ="R")
+           );
+
+CALCUL2=OPER(nom="CALCUL2",op=11,sd_prod=resultat2,
+             donnee=SIMP(typ=resultat),
+             materiau=SIMP(typ=Materiau),
+            );
+
diff --git a/Descartes/cata_descartes_new.py b/Descartes/cata_descartes_new.py
new file mode 100755 (executable)
index 0000000..bd36059
--- /dev/null
@@ -0,0 +1,3084 @@
+# debut entete
+
+import Accas
+from Accas import *
+#
+
+JdC = JDC_CATA(code='DESCARTES',
+               execmodul=None,
+               niveaux=(NIVEAU(nom='Isotopes',label='Donnees des Isotopes ou molecules et Bibliotheques associees'),
+                        NIVEAU(nom='ChaineFiliationIsotopique',label='Chaines de filiation isotopique'),
+                        NIVEAU(nom='MaillagesEnergie',label='Maillages en energie'),
+                        NIVEAU(nom='DonneesNucleaires',label='Bibliotheques de donnees nucleaires et Fichiers'),
+                        NIVEAU(nom='Materiaux',label='Materiaux'),
+                        NIVEAU(nom='ElementsGeometriques',label='Elements geometriques elementaires'),
+                        NIVEAU(nom='Geometries',label='Geometries globales'),
+                        NIVEAU(nom='MaillagesSpatiaux',label='Maillages en espace'),
+                        NIVEAU(nom='ElementsTechnologiquesAssemblages',label='Elements technologiques des assemblages combustibles'),
+                        NIVEAU(nom='ElementsTechnologiquesReacteur',label='Elements technologiques des reacteurs'),
+                        NIVEAU(nom='AssemblagesReels',label='Assemblages combustibles reels'),
+                        NIVEAU(nom='ConditionsLimites',label='Conditions aux limites'),
+                        NIVEAU(nom='ParametresCalcul',label='Parametres des calculs'),
+                        NIVEAU(nom='SectionsEfficaces',label ='Bibliotheques de sections efficaces'),
+                        NIVEAU(nom='OptionsCodesCalcul',label='Options des codes de calcul'),
+                        NIVEAU(nom='ConfigurationInformatique',label='Choix des ressources informatiques'),
+                        NIVEAU(nom='DonneesDesAccidents',label ='Donnees des etudes d_accidents'),
+                        NIVEAU(nom='DonneesPilotage',label ='Donnees de pilotage du reacteur'),
+                        NIVEAU(nom='DonneesEtude',label ='Donnees des cas de l etude'),
+                        NIVEAU(nom='Operateurs',label ='Definition des operateurs de calcul'),
+                        NIVEAU(nom='Resultats',label ='Resultats des calculs'),
+                        NIVEAU(nom='ResultatsExperimentaux',label ='Resultats issus de mesures experimentales'),
+                        NIVEAU(nom='ResultatsAccidents',label ='Resultats issus de la simulation des accidents'),
+                        NIVEAU(nom='EtudeGenerale',label ="Cas d'etude et resultats")
+                       )
+              )
+
+import string
+#import lcm
+
+class TObjet(ASSD):
+  def __init__(self,**args):
+    apply(ASSD.__init__,(self,),args)
+    name=string.ljust(self.__class__.__name__[:12],12)
+
+  def __getitem__(self,attrname):
+    return self.etape[attrname]
+
+  def db(self):
+    if hasattr(self,'_dbsun'):return self._dbsun
+    else:
+      self._dbsun={'t':1}
+      return self._dbsun
+
+  def putdb(self,o):
+    self._dbsun=o
+
+#
+# Definition des types d'objet qui seront produits par les commandes
+# Il suffit de declarer une classe qui derive de la classe mere TObjet
+# qui derive elle meme de la classe ASSD utilisee dans EFICAS
+#
+#     Isotopes
+class Isotope                          (TObjet):pass
+#     ChaineFiliationIsotopique
+class ChaineFiliation                  (TObjet):pass
+#     MaillagesEnergie
+class BornesEnergie                    (TObjet):pass
+#     DonneesNucleaires
+class FichierBibliothequeIsotopes      (TObjet):pass
+#     Materiaux
+class Materiau                         (TObjet):pass
+#     MaillagesSpatiaux
+class Maillage1D                       (TObjet):pass
+#     ElementsGeometriques
+class Point                            (TObjet):pass
+class Vecteur                          (TObjet):pass
+class Droite                           (TObjet):pass
+class Segment                          (TObjet):pass
+class ArcCercle                                (TObjet):pass
+class SecteurDisque                    (TObjet):pass
+class Conique                          (TObjet):pass
+class Triangle                         (TObjet):pass
+class Rectangle                                (TObjet):pass
+class Carre                            (TObjet):pass
+class Hexagone                         (TObjet):pass
+class Polygone                         (TObjet):pass
+class Sphere                           (TObjet):pass
+class BoiteRectangulaire               (TObjet):pass
+class BoiteGenerale                    (TObjet):pass
+class CylindreX                                (TObjet):pass
+class CylindreY                                (TObjet):pass
+class CylindreZ                                (TObjet):pass
+class Cylindre                         (TObjet):pass
+class Cone                             (TObjet):pass
+class PrismeHexagonal                  (TObjet):pass
+class Tore                             (TObjet):pass
+class Plan                             (TObjet):pass
+class PlanX                            (TObjet):pass
+class PlanY                            (TObjet):pass
+class PlanZ                            (TObjet):pass
+class Polyedre                         (TObjet):pass
+class Quadrique                                (TObjet):pass
+class Orientation                      (TObjet):pass
+class FormePositionnee                 (TObjet):pass
+#     Geometries
+class Cellule                          (TObjet):pass
+class Cluster                          (TObjet):pass
+class GeometrieSurfacique              (TObjet):pass
+class GeometrieCombinatoire            (TObjet):pass
+class Reseau                           (TObjet):pass
+class DecompositionDomaines            (TObjet):pass
+#     ElementsTechnologiquesAssemblages
+class GrilleAssemblage                         (TObjet):pass
+class PartieInferieureAssemblageCombustible    (TObjet):pass
+class PartieSuperieureAssemblageCombustible    (TObjet):pass
+class AssemblageType                           (TObjet):pass
+class ElementBarre                             (TObjet):pass
+class ElementsGrappeCommande                   (TObjet):pass
+class ElementsAbsorbantsFixes                  (TObjet):pass
+class GrappeBouchonAssemblage                  (TObjet):pass
+#     AssemblagesReels
+class AssemblageCombustibleReel                (TObjet):pass
+class ReparationAssemblage             (TObjet):pass
+class PenaliteAssemblage               (TObjet):pass
+#class SystemeUnitesMesure             (TObjet):pass
+#     ConditionsLimites
+class Vide                             (TObjet):pass
+class ReflexionIsotrope                        (TObjet):pass
+class ReflexionSpeculaire              (TObjet):pass
+class Albedo                           (TObjet):pass
+class Translation                      (TObjet):pass
+class Rotation                         (TObjet):pass
+class SpecialeConditionLimite          (TObjet):pass
+class GeneraleConditionLimite          (TObjet):pass
+#     ElementsTechnologiquesReacteur
+class CorrespondanceReperePositionReseau(TObjet):pass
+class PositionAssemblageCombustible    (TObjet):pass
+class PositionInstrumentationInterne   (TObjet):pass
+class ImplantationGrappesCommande      (TObjet):pass
+class StructuresInternesReacteur       (TObjet):pass
+class PompePrimaire                    (TObjet):pass
+class Pressuriseur                     (TObjet):pass
+class GenerateurVapeur                 (TObjet):pass
+class CaracteristiquesPalier           (TObjet):pass
+class SiteNucleaire                    (TObjet):pass
+#     ParametresCalcul
+class EspaceVariations                 (TObjet):pass
+class DonneesIrradiation               (TObjet):pass
+class ConditionsFonctionnementMoyennes (TObjet):pass
+class ConditionsTransitoire            (TObjet):pass
+class PositionAxialeGrappesCommande    (TObjet):pass
+class ParametresCalculGestion          (TObjet):pass
+#     SectionsEfficaces
+class Macrolib                         (TObjet):pass
+class SectionsReflecteur               (TObjet):pass
+#     OptionsCodesCalcul
+class OptionsAutoprotection            (TObjet):pass
+class OptionsCodes                     (TObjet):pass
+class OptionsCodeReseau                        (TObjet):pass
+class OptionsCodeCoeurStatique         (TObjet):pass
+class OptionsCodeCoeurCinetique                (TObjet):pass
+class OptionsThermiqueThermohydraulique        (TObjet):pass
+class OptionsContreReactionsCoeur      (TObjet):pass
+#     ConfigurationInformatique
+class RessourcesInformatiques          (TObjet):pass
+#     DonneesDesAccidents
+class AccidentDilution                 (TObjet):pass
+class AccidentRTV                      (TObjet):pass
+class AccidentChuteGrappe              (TObjet):pass
+class AccidentEjection                 (TObjet):pass
+class CriteresSurete                   (TObjet):pass
+class DonneesAccidents                 (TObjet):pass
+#     DonneesPilotage
+class ProlongationCampagne             (TObjet):pass
+class DonneesPilotageGeneral           (TObjet):pass
+class CalibrageGroupes                 (TObjet):pass
+#     DonneesEtude
+class DatesClesCampagne                        (TObjet):pass
+class DonneesCasEtude                  (TObjet):pass
+class DonneesAjustement                        (TObjet):pass
+#     Resultats
+class ResultatsGlobauxCoeur            (TObjet):pass
+class ResultatFlux                     (TObjet):pass
+class ResultatPuissances               (TObjet):pass
+class ResultatIrradiations             (TObjet):pass
+class ResultatActivites                        (TObjet):pass
+class ResultatRadial                   (TObjet):pass
+class ResultatAxial                    (TObjet):pass
+class ResultatsCalculGestion           (TObjet):pass
+class ResultatsEtude                   (TObjet):pass
+#     ResultatsAccidents
+class AccidentDilutionResultat         (TObjet):pass
+class AccidentChuteGrappeResultat      (TObjet):pass
+class AccidentEjectionResultat         (TObjet):pass
+class AccidentsResultats               (TObjet):pass
+#     ResultatsExperimentaux
+class ActivitesExperimentales          (TObjet):pass
+#     EtudeGenerale
+class DictionnaireCasEtude             (TObjet):pass
+# fin entete
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ISOTOPE : Classe de definition d'un isotope ou d'une molecule
+#                   Caracteristiques elementaires des isotopes ou molecules et liens avec les bibliotheques de donnees nucleaires
+#                   Ces caracteristiques elementaires ne devraient pas apparaître dans ce type d'objet, mais etre recuperees directement
+#                   dans la bibliotheque de donnees de base. La structure des APOLLIB n'etant pas simple d'acces, la solution
+#                   adoptee permet de mettre a disposition ces informations de maniere simple. A revoir ulterieurement
+#                   apres redefinition du contenu d'une bibliotheque de base.
+#                   La decomposition en éléments chimiques simples est utile pour les calculs de type TRIPOLI, les données nucléaires
+#                   étant définies parfois pour chaque élément et non pour la molécule (cas de l'eau par exemple)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ISOTOPE = OPER (nom="ISOTOPE", sd_prod=Isotope, op=0, niveau = 'Isotopes',
+  fr  = "Definition d'un isotope ou d'une molecule et de ses bibliotheques",
+  ang = "Isotope or Molecule definition and data libraries",
+  Symbole                = SIMP (typ='TXM',statut='o',fr="Symbole de l'isotope ou de la molecule"),
+  MasseAtomique          = SIMP (typ='R',  statut='o',fr="Masse atomique en uma"),
+  NombreDeCharge         = SIMP (typ='I',  statut='o',fr="Nombre de charge atomique Z"),
+  NombreDeMasse          = SIMP (typ='I',  statut='o',fr="Nombre de masse atomique A"),
+  Type                   = SIMP (typ='TXM',statut='f',into=('Standard','Detecteur','Structure','Poison'),fr="Type de l'isotope"),
+  NomsBibliotheque       = NUPL (max = '**', statut = 'o',fr="Association Procedure Bibliotheque et Nom isotope dans le Fichier",
+                                 elements = ( SIMP (typ='TXM',fr="Identificateur Procedure Bibliotheque"),
+                                              SIMP (typ='TXM',fr="Identifiant de l'isotope dans la bibliotheque"))),
+  NomsBiblioAutoprotegee = NUPL (max = '**', statut = 'f',
+                                 elements = ( SIMP (typ='TXM',fr="Identificateur Procedure Bibliotheque"),
+                                              SIMP (typ='TXM',fr="Identifiant Bibliotheque autoprotegee de l'isotope"))),
+  ComposantsElementaires = SIMP (typ=Isotope, max = '**', statut = 'f',
+                                 fr="Liste des elements chimiques composant la molecule")
+ ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BORNES_ENERGIE : Classe de definition des limites en energie d'un maillage multigroupe
+#                          Objets utilises pour la définition du maillage des bibliothèques de base
+#                          ou des macro-groupes d'énergie de condensation des sections efficaces sur le flux détaillé
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BORNES_ENERGIE = OPER (nom="BORNES_ENERGIE", sd_prod=BornesEnergie, op=0, niveau = 'MaillagesEnergie',
+    fr  = "Definition d'une discretisation de l'espace energetique",
+    ang = "Definition of an energy discretisation",
+    NbMacrogroupes     = SIMP (statut='o',typ='I',         fr="Nombre de macrogroupes du maillage energetique"),
+    BornesEnergetiques = SIMP (statut='o',typ='R',max='**',fr="Bornes en energie (MeV) du maillage energetique"),
+ ) ; # Fin BORNES_ENERGIE
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe MAILLAGE_1D : Classe de definition d'un maillage spatial 1D : 4 possiblilites de definition :
+#  1 et 2) Equidistant et Equivolumique : Largeur totale a fournir
+#       3) Liste des dimensions des mailles
+#       4) Abscisse initiale et couples (Nb sous-pas, Abscisse suivante)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+MAILLAGE_1D = OPER (nom="MAILLAGE_1D", sd_prod=Maillage1D, op=0, niveau = 'MaillagesSpatiaux',
+    fr  = "Definition d'une discretisation d'un espace 1D",
+    ang = "Definition of a 1D spatial discretisation",
+    ModeDefinition  = SIMP (typ='TXM',statut='o',defaut='LargeurMaille',into=('Equidistant','Equivolumique','LargeurMaille','SousMaille'),
+                            fr="Mode de definition du maillage"),
+    NbMailles       = SIMP (typ='I',statut='o',fr="Nombre de mailles de discretisation"),
+    BlocEqui        = BLOC (condition = "ModeDefinition=='Equidistant' or ModeDefinition=='Equivolumique'",
+                            DimensionTotale = SIMP (typ='R',statut='o',fr="Largeur totale du maillage en cm")
+                            ),
+    BlocMailles     = BLOC (condition = "ModeDefinition=='LargeurMaille'",
+                            LargeursMailles = SIMP (typ='R',max='**',statut='o',fr="Largeurs des mailles en cm")
+                             ),
+    BlocSousMailles = BLOC (condition = "ModeDefinition=='SousMaille'",
+                            SousMailles = SIMP (typ=('I','R'),max='**',statut='o',fr="Abscisse initiale et couples (Nb sous-pas, Abscisse suivante)")
+                            )
+    ) ; # Fin MAILLAGE_1D
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe FICHIER_BIBLIOTHEQUE_ISOTOPES : Classe de definition des fichiers des bibliotheques des donnees nucleaires d'isotopes ou de molecules
+#                                         Noms et formats des fichiers d'isotopes suivant le systeme d'exploitation
+#                                         Dans le cas de TRIPOLI 4, on fournit le nom du dictionnaire ou se trouve la description des
+#                                         isotopes disponibles pour le code et le chemin d'accès aux fichiers de sections de ces isotopes
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+FICHIER_BIBLIOTHEQUE_ISOTOPES = OPER (nom="FICHIER_BIBLIOTHEQUE_ISOTOPES", sd_prod=FichierBibliothequeIsotopes, op=0, niveau = 'DonneesNucleaires',
+  fr  = "Definition d'une bibliotheque de donnees nucleaires des isotopes",
+  ang = "Definition of a nuclear data isotope library",
+  Description = SIMP (typ='TXM',statut='o',fr="Identificateur Bibliotheque ou Dictionnaire"),
+  Fichiers    = FACT (max='**', statut='o',fr="Donnee des fichiers associes a la bibliotheque et du maillage energetique",
+                      SystemeExploitation  = SIMP (typ='TXM',statut='o',fr="Systeme d'exploitation du reseau informatique"),
+                      NomFichier           = SIMP (typ='TXM',statut='o',fr="Nom du fichier de la bibliotheque de donnees de base"),
+                      FormatFichier        = SIMP (typ='TXM',statut='o',fr="Format du fichier"),
+                      BornesEnergetiques   = SIMP (typ=BornesEnergie,statut='o',fr="Bornes en MeV du maillage en energie")
+                     )
+  ) ; # Fin FICHIER_BIBLIOTHEQUE_ISOTOPES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CHAINE_FILIATION : Classe de definition des filiations isotopiques dues aux transmutations
+#                            sous irradiation neutronique.
+#                            Description textuelle sous format (APOLLO2, SUNSET ou DARWIN)
+#                            ou description particuliere des filiations.
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CHAINE_FILIATION = OPER (nom="CHAINE_FILIATION", op=0, sd_prod=ChaineFiliation, niveau = 'ChaineFiliationIsotopique',
+  fr              = "Definition d'une chaine de filiation isotopique sous irradiation",
+  ang             = "Definition of a depletion chain",
+  NombreIsotopes  = SIMP (typ='I'  ,statut='o',fr="Nombre d'isotopes decrits dans la chaine"),
+  ChaineAPOLLO2   = SIMP (typ='TXM',statut='f',fr="Description de la chaine sous format APOLLO2"),
+  ChaineSUNSET    = SIMP (typ='TXM',statut='f',fr="Description de la chaine sous format SUNSET"),
+  ChaineDARWIN    = SIMP (typ='TXM',statut='f',fr="Nom du fichier contenant la description DARWIN de la chaine"),
+  ListeIsotopes   = FACT (max = '**',statut = 'f',
+                          Isotope = SIMP (typ=Isotope,fr="Nom de l'isotope",statut='o'),
+                          Peres   = FACT (max = '**',statut = 'o',
+                                          IsotopePere        = SIMP (statut='o',typ=Isotope,fr="Nom de l'isotope pere"),
+                                          TypeReaction       = SIMP (statut='o',typ='TXM'  ,fr="Type de reaction nucleaire",
+                                                                     into=('nGamma','n2n','n3n','n4n','np','nalpha')),
+                                          RapportBranchement = SIMP (statut='o',typ='R'    ,fr="Rapport de branchement",defaut=1.)
+                                         )
+                         )
+ ) ; # Fin CHAINE_FILIATION
+# regles = (UN_PARMI ('ChaineAPOLLO2','ChaineSUNSET','ChaineDARWIN','ListeIsotopes'),),
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe MATERIAU : Classe de définition d'un matériau à partir de mélange d'isotopes ou de matériaux.
+#                    Définition alternative par donnée des enrichissements (Possibilités limitées aux combustibles UO2, MOX, Gd)
+#                    Caractéristiques fournies a 20 C.
+#                    Proprietes thermiques et thermomécaniques éventuelles
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+MATERIAU = OPER(nom="MATERIAU", op=0, sd_prod=Materiau, niveau = 'Materiaux',
+  fr  = "Definition d'un materiau",
+  ang = "Definition of a mixture",
+  TypeDefinition       = SIMP (typ='TXM',statut='o',defaut="Isotopique",into=("Isotopique","Enrichissement")),
+  TypeMateriau         = SIMP (statut = 'o', typ = 'TXM',     
+                               into   = ('Combustible','Absorbant','Melange','ModerateurInterne','ModerateurExterne','Detecteur',
+                                         'Grille','Gaine','Tube','Poison','PoisonConsommable','AbsorbantIntegre',
+                                         'CoucheCorrosion','Solide','Liquide','Gaz','MateriauVide'),
+                               defaut = 'Combustible'),
+  BlocIsotopique       = BLOC (condition = "TypeDefinition=='Isotopique'",
+                               MethodeMelange = SIMP (statut   = 'o',typ='TXM',into=('Isotopique','Massique','Concentration'),defaut='Massique'),
+                               Constituants   = NUPL (statut   = 'o', max = '**',
+                                                      fr       = "Couples (Isotope ou Materiau) et (Pourcentage ou Concentration)",
+                                                      elements = (SIMP (typ=(Isotope,Materiau),fr="Isotope ou Materiau constituant"),
+                                                                  SIMP (typ='R',fr="Pourcentage % ou Concentration 10E24 de l'isotope ou du materiau"))
+                                                      )
+                               ),
+  BlocEnrichissement   = BLOC (condition = "TypeDefinition=='Enrichissement'",
+        Type                 = SIMP (typ='TXM',into=('UO2','MOX','UO2Gadolinium','MOXGadolinium'),statut='o',defaut='UO2',fr="Type de combustible"),
+        U235Enrichissement   = SIMP (typ='R',defaut=3.7,statut='o',val_min=0.,val_max=100.,
+                                     fr="Enrichissement % en U235 du combustible"),
+        TeneurU234Naturel    = SIMP (typ='R',defaut=110.,statut='f',fr="Teneur (ppm) en U234 de l'uranium naturel"),
+        DonneesGado          = BLOC (condition = "Type=='UO2Gadolinium' or Type=='MOXGadolinium'",
+                                     EnrichissementGado   = SIMP (typ=('R','TXM'),defaut=8.,statut='o',fr="Enrichissement % en Gd2O3 du combustible")),
+        DonneesMOX           = BLOC (condition = "Type=='MOX' or Type=='MOXGadolinium'",
+                                     PuEnrichissement     = SIMP (typ=('R','TXM'),defaut=5.3,statut='o',val_min=0.,val_max=100.,
+                                                                  fr="Enrichissement % en plutonium du combustible"),
+                                     VecteurPu            = FACT (statut='o',fr="Definition du vecteur isotopique du plutonium",
+                                                                 Pu238PourcentageMassique = SIMP (typ='R',statut='o',fr="Pourcentage Massique en Pu238"),
+                                                                 Pu239PourcentageMassique = SIMP (typ='R',statut='o',fr="Pourcentage Massique en Pu239"),
+                                                                 Pu240PourcentageMassique = SIMP (typ='R',statut='o',fr="Pourcentage Massique en Pu240"),
+                                                                 Pu241PourcentageMassique = SIMP (typ='R',statut='o',fr="Pourcentage Massique en Pu241"),
+                                                                 Pu242PourcentageMassique = SIMP (typ='R',statut='o',fr="Pourcentage Massique en Pu242"),
+                                                                 Am241PourcentageMassique = SIMP (typ='R',statut='o',fr="Pourcentage Massique en Am241"),
+                                                                ),
+                                     DateReference        = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de reference du combustible"),
+                                     DateDivergence       = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de divergence du reacteur ou ce combustible est charge"),
+                                     VieillissementJours  = SIMP (typ='R',defaut = 0.,statut = 'f',
+                                                                 fr = "Nbre de jours de vieillissement du combustible, calculable si on donne DateDivergence")
+                                     )
+                              ),
+  TauxEvidement        = SIMP (statut='f',typ='R',fr="Taux % d'evidement du materiau"),
+  TauxPorosite         = SIMP (statut='f',typ='R',fr="Taux % de porosite du materiau"),
+  Temperature          = SIMP (statut='f',typ='R',fr="Temperature en Celsius du materiau"),
+  PlenumGaz            = SIMP (statut='f',typ=(Isotope,Materiau),defaut='HE4',fr="Gaz de remplissage des evidements du materiau solide et dans le plenum"),
+# PlenumGaz            = SIMP (statut='f',typ=(Isotope,Materiau),fr="Gaz de remplissage des evidements du materiau solide et dans le plenum"),
+  PressionPlenumGaz    = SIMP (statut='f',typ='R',defaut=32.,fr="Pression en bars du gaz de remplissage des evidements et dans le plenum"),
+  Chaine              = SIMP (statut='f',typ=ChaineFiliation,defaut='ChaineSaturee',fr="Chaine de filiation isotopique associee au materiau"),
+  TauxImpuretes        = SIMP (statut='f',typ='R',fr="Taux % d'impuretes"),
+  ChaleurSpecifiquePressionCte  = SIMP (statut='f',typ='R',fr="Chaleur Specifique a Pression Constante J/(kg.C)"),
+  ConductiviteThermique = SIMP (statut='f',typ='R',fr="Conductivite Thermique W/(cm.C)"),
+  MateriauGazBloc       = BLOC (condition = "TypeMateriau=='Gaz'",
+                                GazLongueurExtrapolation = SIMP (statut='f',typ='R',fr="Longueur Extrapolation en cm"),
+                                GazPression              = SIMP (statut='f',typ='R',fr="Pression du gaz en bars")
+                               ),
+  MateriauLiquideBloc   = BLOC (condition = "TypeMateriau in ('Liquide','ModerateurInterne','ModerateurExterne')",
+                                RoLiquide             = SIMP (statut='f',typ='R',fr="Masse volumique theorique du liquide g/cm3"),
+                                PressionLiquide       = SIMP (statut='f',typ='R',fr="Pression du liquide en bars"),
+                                EbullitionTemperature = SIMP (statut='f',typ='R',fr="Temperature Ebullition en Celsius"),
+                                EbullitionPression    = SIMP (statut='f',typ='R',fr="Pression Ebullition en bars")
+                               ),
+  MateriauSolideBloc    = BLOC (condition = "TypeMateriau not in ('Liquide','ModerateurInterne','ModerateurExterne','Gaz','MateriauVide')",
+                                RoSolide           = SIMP (statut='f',typ='R',fr="Masse volumique theorique du materiau g/cm3"),
+                                DilatationLineaire = SIMP (statut='f',typ='R',fr="Coefficient de dilatation thermique lineaire cm/C du materiau"),
+                                LimiteElastique    = SIMP (statut='f',typ='R',fr="Limite Elastique en Pa"),
+                                Fluence            = SIMP (statut='f',typ='R',fr="Fluence subie par le materiau en n/cm2"),
+                                Emissivite         = SIMP (statut='f',typ='R',fr="Valeur d'emissivite"),
+                                ModuleYoung        = SIMP (statut='f',typ='R',fr="Module d'Young en Pa"),
+                                CoefficientPoisson = SIMP (statut='f',typ='R',fr="Coefficient de Poisson"),
+                                RugositeSurface    = SIMP (statut='f',typ='R',fr="Rugosite de Surface en cm")
+                               )
+ ) ; # Fin MATERIAU
+# ==================================================================================================================================
+#                                    Definition des Classes elementaires pour la geometrie
+# ==================================================================================================================================
+#  Classe POINT : Classe de definition d'un point de l'espace
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POINT = OPER (nom="POINT", op=0, sd_prod=Point, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un point de l'espace",
+  ang = "Definition of a point in space",
+  Coordonnees = SIMP (typ='R',min=2,max=3,statut='o',fr="Coordonnees du point dans l'espace")
+ ) ;# Fin POINT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe VECTEUR : Classe de definition d'un vecteur dans l'espace
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+VECTEUR = OPER (nom="VECTEUR", op=0, sd_prod=Vecteur, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un vecteur dans l'espace",
+  ang = "Definition of a vector in space",
+  regles = (UN_PARMI ('Composantes','Points'),),
+  Composantes = SIMP (typ='R'  ,min=2,max=3,statut='f',fr="Composantes du vecteur en 2D ou 3D"),
+  Points      = SIMP (typ=Point,min=2,max=2,statut='f',fr="Vecteur defini par deux points")
+ ) ; # Fin VECTEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DROITE : Classe de definition d'une droite
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DROITE = OPER (nom="DROITE", op=0, sd_prod=Droite, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une droite par 2 POINTs, 1 POINT et 1 VECTEUR, ou Equation ax + by + cz + d = 0",
+  ang = "Definition of a straight line by 2 POINTs or through an Equation ax + by + cz + d = 0",
+  regles   = (UN_PARMI ('Points','Equation','VecteurOrigine'),),
+  Points   = SIMP (typ=Point,min=2,max=2,statut='f',fr="Deux points de definition de la droite"),
+  Equation = SIMP (typ='R'  ,min=2,max=4,statut='f',fr="Coefficients successifs abcd de l'equation d'une droite"),
+  VecteurOrigine = FACT (statut='f',
+                         Vecteur  = SIMP (typ=Vecteur,statut='o',fr="Donnee du vecteur directeur de la droite"),
+                         Origine  = SIMP (typ=Point  ,statut='o',fr="Donnee d'un point de passage de la droite"))
+ ) ; # Fin DROITE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SEGMENT : Classe de definition d'un segment (Idem DROITE + Longueur et Origine)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SEGMENT = OPER (nom="SEGMENT", op=0, sd_prod=Segment, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un segment 2 Points ou Origine + ((Longueur + Equation ax + by + d = 0) ou vecteur)",
+  ang = "Definition of a segment ax + by + cz + d = 0",
+  regles   = (UN_PARMI ('Points','Equation','Vecteur'),),
+  Points   = SIMP (typ=Point,min=2,max=2,statut='f',fr="Deux points de definition du segment"),
+  Equation = FACT (statut='f',fr="Donnee du segment par son equation, sa longueur et son origine",
+                   Coefficients = SIMP (typ='R'  ,min=2,max=4,statut='o',fr="Coefficients successifs abcd de l'equation de la droite"),
+                   Longueur     = SIMP (typ='R',             statut='o',fr="Longueur du segment en cm"),
+                   Origine      = SIMP (typ=Point,           statut='o',fr="Donnee de l'origine du segment")
+                   ),
+  Vecteur  = FACT (statut='f',fr="Donnee du segment par un vecteur, sa longueur et son origine",
+                   Vecteur      = SIMP (typ=Vecteur,min=2,max=4,statut='o',fr="Coefficients successifs abcd de l'equation de la droite"),
+                   Longueur     = SIMP (typ='R',               statut='o',fr="Longueur du segment en cm"),
+                   Origine      = SIMP (typ=Point,             statut='o',fr="Donnee de l'origine du segment")
+                   )
+ ) ; # Fin SEGMENT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ARC_CERCLE : Classe de definition d'un arc de cercle
+#                      Angles donnes en degres
+#                      Dans le cas 2D on peut positionner l'arc de cercle en donnant l'angle du debut de l'arc par rapport a l'axe Ox
+#                      Dans le cas 3D on donne en plus la hauteur et l'axe directeur de l'arc
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ARC_CERCLE = OPER (nom="ARC_CERCLE", op=0, sd_prod=ArcCercle, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un arc de cercle",
+  ang = "Definition of a circular arc",
+  Type       = SIMP (typ='TXM'  ,statut='o',defaut='2D',into=('2D','3D'), fr="Type d'arc 2D ou 3D"),
+  Rayon      = SIMP (typ='R'    ,statut='o',                              fr="Rayon de l'arc de cercle en cm"),
+  Angles     = SIMP (typ='R'    ,statut='f',max=2,defaut=(360.,0.),       fr="Angles en degres de l'arc : Total et Debut"),
+  VecteurAxe = SIMP (typ=Vecteur,statut='f',                              fr="Vecteur directeur de l'axe de l'arc")
+ ) ; # Fin ARC_CERCLE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SECTEUR_DISQUE : Classe de definition d'un disque ou d'un secteur d'une couronne circulaire
+#                          Angle du secteur donne en degres (360° par defaut)
+#                          Dans le cas 2D on peut positionner le secteur en donnant l'angle du debut de secteur par rapport a l'axe Ox
+#                          Dans le cas 3D on donne en plus la hauteur et l'axe directeur du secteur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SECTEUR_DISQUE = OPER (nom="SECTEUR_DISQUE", op=0, sd_prod=SecteurDisque, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un disque ou d'un secteur d'une couronne",
+  ang = "Definition of a circular sector",
+  Type       = SIMP (typ='TXM'  ,statut='o',into=('2D','3D'),defaut='2D',fr="Type de secteur 2D ou 3D"),
+  Rayons     = SIMP (typ='R'    ,statut='o',min=2,max=2,                fr="Rayons interne et externe de la couronne en cm"),
+  Angles     = SIMP (typ='R'    ,statut='f',max=2,defaut=(360.,0.),     fr="Angles en degres du secteur"),
+  Hauteur    = SIMP (typ='R'    ,statut='f',defaut=0.,                  fr="Hauteur du secteur en cm"),
+  VecteurAxe = SIMP (typ=Vecteur,statut='f',defaut=0.,                  fr="Vecteur directeur de l'axe du secteur")
+ ) ;  # Fin SECTEUR_DISQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONIQUE : Classe de definition d'une conique 2D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONIQUE = OPER (nom="CONIQUE", op=0, sd_prod=Conique, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une conique 2D ax2+by2+cxy+dx+ey+f=0",
+  ang = "Definition of a 2D quadratic curve ax2+by2+cxy+dx+ey+f=0",
+  Equation = SIMP (typ='R',min=2,max=6,statut='o',fr="Coefficients successifs abcdef de l'equation d'une conique")\r
+  ) ; # Fin CONIQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe TRIANGLE : Classe de definition d'un triangle
+#                    Angles donnes en degres par rapport a l'axe Ox horizontal
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+TRIANGLE = OPER (nom="TRIANGLE", op=0, sd_prod=Triangle, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un triangle",
+  ang = "Definition of a triangle",
+  regles = (UN_PARMI ('Points','AngleCotes'),),
+  Points     = SIMP (typ=Point,min=3,max=3,statut='f',fr="Donnee des 3 sommets du triangle"),
+  AngleCotes = SIMP (typ='R'  ,min=3,max=3,statut='f',fr="Donnee d'un Angle en degres et Longueurs de deux cotes en cm")
+ ) ;  # Fin TRIANGLE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RECTANGLE : Classe de definition d'un rectangle
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RECTANGLE = OPER (nom="RECTANGLE", op=0, sd_prod=Rectangle, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un rectangle",
+  ang = "Definition of a rectangle",
+  regles = (UN_PARMI ('Points','Cotes'),),
+  Points = SIMP (typ=Point,min=3,max=3,statut='f',fr="Definition du rectangle par trois points"),
+  LongueursCotes  = SIMP (typ='R'  ,min=2,max=2,statut='f',fr="Donnee de la longueur de deux cotes en cm")
+   ) ; # Fin RECTANGLE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CARRE : Classe de definition d'un carre
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CARRE = OPER (nom="CARRE", op=0, sd_prod=Carre, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un carre",
+  ang = "Definition of a square",
+  regles = (UN_PARMI ('Points','Cote'),),
+  Points = SIMP (typ=Point,min=2,max=2, statut='f',fr="Definition du carre par deux points"),
+  LongueurCote   = SIMP (typ='R',      statut='f',fr="Donnee de la longueur du cote du carre en cm")
+ ) ;  # Fin CARRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe HEXAGONE : Classe de definition d'un hexagone
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+HEXAGONE = OPER (nom="HEXAGONE", op=0, sd_prod=Hexagone, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un hexagone",
+  ang = "Definition of an hexagon",
+  Rayon = SIMP (typ='R',statut='f',fr="Rayon du cercle inscrit dans l'hexagone en cm")
+ ) ;  # Fin HEXAGONE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POLYGONE : Classe de definition d'un polygone
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POLYGONE = OPER (nom="POLYGONE", op=0, sd_prod=Polygone, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un polygone",
+  ang = "Definition of a polygon",
+  Points = SIMP (typ=Point,max='**',statut='f',fr="Definition d'un polygone par tous ses points")
+ ) ;   # Fin POLYGONE
+# ==================================================================================================================================
+#            Definition des Classes pour une geometrie 3D : Elements geometriques combinatoires ou surfaciques
+# L'utilisation de certaines classes de combinatoire en surfacique consiste a simplement specifier la position de l'objet
+# ou a eliminer certaines surfaces limites de la classe
+# Pour une sphere : donnee du centre de la sphere
+# Pour un cylindre : Pas de donnee de la hauteur, mais donnee d'un point de l'axe du cylindre
+# ==================================================================================================================================
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SPHERE : Classe de definition d'une sphere (ou d'une sphere sectorisee ou decoupee en rondelles)
+#                  Des portions de la sphere peuvent etre selectionnees en donnant leurs cotes limites sur un axe de la sphere
+#                  (origine de l'axe au centre de la sphere, donc cotes comprises entre -R, +R si R est le rayon de la sphere)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SPHERE = OPER (nom="SPHERE", op=0, sd_prod=Sphere, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme spherique",
+  ang = "Definition of a spherical form",
+  Rayon           = SIMP (typ='R',statut='o',fr="Rayon de la sphere en cm"),
+  Secteur         = SIMP (typ='R',statut='f',fr="Angle du secteur de la sphere en degre"),
+  TranchesAxiales = NUPL (max = '**', statut = 'f', fr = "Limites des tranches axiales de la sphere sectorisee",
+                          elements = ( SIMP (typ='R',statut = 'o', fr="Cote depart de la tranche"),
+                                        SIMP (typ='R',statut = 'o', fr="Cote finale de la tranche")))
+ ) ;  # Fin SPHERE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BOITE_RECTANGULAIRE : Classe de definition d'une forme parallelepipedique de cotes paralleles aux axes de reference
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BOITE_RECTANGULAIRE = OPER (nom="BOITE_RECTANGULAIRE", op=0, sd_prod=BoiteRectangulaire, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une d'une forme parallelepipedique rectangulaire",
+  ang = "Definition of a rectangular box form",
+  Cotes = SIMP (typ='R',min=3,max=3,statut='o',fr="Longueurs des Cotes de la boite rectangulaire en cm")
+ ) ;  # Fin BOITE_RECTANGULAIRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe BOITE_GENERALE : Classe de definition d'une forme parallelepipedique quelconque
+#        Le plan de base de la boite doit etre le plan xOy. On donne donc uniquement les 2 vecteurs **normaux**
+#        aux 2 autres plans, et les 3 longueurs des aretes principales.
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+BOITE_GENERALE = OPER (nom="BOITE_GENERALE", op=0, sd_prod=BoiteGenerale, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme parallelepipedique quelconque",
+  ang = "Definition of a general box form",
+  VecteursDirecteurs = SIMP (typ=Vecteur,min=2,max=2,statut='o',fr="Vecteurs normaux aux faces non horizontales de la boite"),
+  Cotes              = SIMP (typ='R'    ,min=3,max=3,statut='o',fr="Longueurs des Cotes de la boite en cm")
+ ) ;  # Fin BOITE_GENERALE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE_X : Classe de definition d'une forme cylindrique d'axe parallele a Ox
+#         Pour tous les cylindres, la donnee de deux rayons transforme le cylindre circulaire en cylindre elliptique
+#         La donnee d'un angle limite le cylindre a ce secteur
+#         Pour un secteur d'un cylindre elliptique, il est necessaire de donner en plus l'angle de depart du secteur
+#         par rapport a l'axe majeur de l'ellipse
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE_X = OPER (nom="CYLINDRE_X", op=0, sd_prod=CylindreX, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme cylindrique d'axe parallele a Ox",
+  ang = "Definition of a right cylinder form // Ox",
+  Rayons  = SIMP (typ='R', max=2, statut='o', fr="Rayons mineur et majeur du cylindre X en cm"),
+  Hauteur = SIMP (typ='R',        statut='f', fr="Hauteur du cylindre X en cm"),
+  Angles  = SIMP (typ='R', max=2, statut='f', fr="Angles du secteur du cylindre X en degres")
+ ) ;  # Fin CYLINDRE_X
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE_Y : Classe de definition d'une forme cylindrique d'axe parallele a Oy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE_Y = OPER (nom="CYLINDRE_Y", op=0, sd_prod=CylindreY, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme cylindrique d'axe parallele a Oy",
+  ang = "Definition of a right cylinder form // Oy",
+  Rayons  = SIMP (statut='o',typ='R',max=2,fr="Rayons mineur et majeur du cylindre Y en cm"),
+  Hauteur = SIMP (statut='f',typ='R',      fr="Hauteur du cylindre Y en cm"),
+  Angles  = SIMP (statut='f',typ='R',max=2,fr="Angles du secteur du cylindre Y en degres")
+ ) ;  # Fin CYLINDRE_Y
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE_Z : Classe de definition d'une forme cylindrique d'axe parallele a Oz
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE_Z = OPER (nom="CYLINDRE_Z", op=0, sd_prod=CylindreZ, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme cylindrique d'axe parallele a Oz",
+  ang = "Definition of a right cylinder form // Oz",
+  Rayons  = SIMP (statut='o',typ='R',max=2,fr="Rayons mineur et majeur du cylindre Z en cm"),
+  Hauteur = SIMP (statut='f',typ='R',      fr="Hauteur du cylindre Z en cm"),
+  Angles  = SIMP (statut='f',typ='R',max=2,fr="Angles du secteur du cylindre Z en degres")
+ ) ;  # Fin CYLINDRE_Z
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CYLINDRE : Classe de definition d'une forme cylindrique quelconque
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CYLINDRE = OPER (nom="CYLINDRE", op=0, sd_prod=Cylindre, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme cylindrique quelconque",
+  ang = "Definition of a general cylinder form",
+  Rayons     = SIMP (statut='o',typ='R',max=2,fr="Rayons mineur et majeur du cylindre en cm"),
+  VecteurAxe = SIMP (statut='o',typ=Vecteur,  fr="Vecteur directeur de l'axe du cylindre"),
+  Hauteur    = SIMP (statut='f',typ='R',      fr="Hauteur du cylindre en cm"),
+  Angles     = SIMP (statut='f',typ='R',max=2,fr="Angles du secteur du cylindre en degres")
+ ) ;  # Fin CYLINDRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONE : Classe de definition d'un forme conique
+#           Une portion de cone peut etre definie en donnant les cotes axiales (origine de l'axe du cone au sommet du cone) de
+#           la zone retenue
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONE = OPER (nom="CONE", op=0, sd_prod=Cone, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme conique",
+  ang = "Definition of a conic form",
+  DemiAngleSommet = SIMP (statut='o',typ='R',            fr="Demi-angle au sommet en degres"),
+  LimitesAxiales  = SIMP (statut='f',typ='R',min=2,max=2,fr="Limites axiales du cone"),
+  VecteurAxe      = SIMP (statut='o',typ=Vecteur,        fr="Vecteur directeur de l'axe du cone")
+ ) ;  # Fin CONE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PRISME_HEXAGONAL : Classe de definition d'une forme de prisme hexagonal 3D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PRISME_HEXAGONAL = OPER (nom="PRISME_HEXAGONAL",op=0,sd_prod=PrismeHexagonal,
+                           niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme de prisme hexagonal 3D",
+  ang = "Definition of a 3D hexagonal form",
+  Rayon      = SIMP (statut='o',typ='R',    fr="Rayon du cercle circonscrit (=cote de l'hexagone) en cm"),
+  Hauteur    = SIMP (statut='f',typ='R',    fr="Hauteur de l'hexagone en cm"),
+  VecteurAxe = SIMP (statut='o',typ=Vecteur,fr="Vecteur directeur de l'axe de l'hexagone")
+ ) ;  # Fin PRISME_HEXAGONAL
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe TORE : Classe de definition d'une forme toroidale
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+TORE = OPER (nom="TORE",op=0,sd_prod=Tore,
+               niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme toroidale",
+  ang = "Definition of a toroidal form",
+  Rayons = SIMP (typ='R',min=2,max=2,statut='o',
+                 fr="Rayons du tore : 1/2 distance a l'axe et rayon de la section du tore en cm")
+ ) ;  # Fin TORE
+# ==================================================================================================================================
+#               Definition des Classes pour une geometrie 3D : Elements geometriques surfaciques
+# ==================================================================================================================================
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN : Classe de definition d'un plan
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN = OPER (nom="PLAN", op=0, sd_prod=Plan, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un plan ax + by + cz + d = 0",
+  ang = "Definition of a plane surface ax + by + cz + d = 0",
+  regles = (UN_PARMI ('Points','Equation'),),
+  Points   = SIMP (typ=Point,min=3,max=3,statut='f',fr="Donnee de 3 points non alignes"),
+  Equation = SIMP (typ='R'  ,min=2,max=4,statut='f',fr="Coefficients successifs abcd de l'equation du plan")
+ ) ;  # Fin PLAN
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_X : Classe de definition d'un plan perpendiculaire a l'axe Ox
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN_X = OPER (nom="PLAN_X", op=0, sd_prod=PlanX, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un plan perpendiculaire a Ox",
+  ang = "Definition of a plane surface perpendicular to Ox",
+  Cote = SIMP (typ='R',statut='o',fr="Cote du plan // OyOz")
+ ) ;  # Fin PLAN_X
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_Y : Classe de definition d'un plan perpendiculaire a l'axe Oy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN_Y = OPER (nom="PLAN_Y", op=0, sd_prod=PlanY, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un plan perpendiculaire a Oy",
+  ang = "Definition of a plane surface perpendicular to Oy",
+  Cote = SIMP (typ='R',statut='o',fr="Cote du plan // OxOz")
+ ) ;  # Fin PLAN_Y
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PLAN_Z : Classe de definition d'un plan perpendiculaire a l'axe Oz
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PLAN_Z = OPER (nom="PLAN_Z", op=0, sd_prod=PlanZ, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'un plan perpendiculaire a Oz",
+  ang = "Definition of a plane surface perpendicular to Oz",
+  Cote = SIMP (typ='R',statut='o',fr="Cote du plan // OxOy")
+ ) ;  # Fin PLAN_Z
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POLYEDRE : Classe de definition d'une forme polyhedrique 3D quelconque (N faces, N > 4)
+#                    Definition surfacique : Donnee des N plans et du choix du cote positif ou negatif
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POLYEDRE = OPER (nom="POLYEDRE", op=0, sd_prod=Polyedre, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme polyhedrique 3D quelconque ",
+  ang = "Definition of a 3D polyhedron form with N > 4 plane faces",
+  Plans = NUPL (min = 5, max = '**', statut = 'o', fr = "Surfaces planes limites du polyedre",
+      elements = (SIMP (typ=(Plan,PlanX,PlanY,PlanZ)   ,fr="Plans limites du polyedre"),
+                  SIMP (typ='TXM',into=('Plus','Moins'),fr="Choix du cote positif ou negatif de l'espace")))
+  ) ;  # Fin POLYEDRE
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe QUADRIQUE : Classe de definition d'une quadrique 3D
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+QUADRIQUE = OPER (nom="QUADRIQUE", op=0, sd_prod=Quadrique, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une quadrique 3D ax2+by2+cz2+dxy+eyz+fxz+gx+hy+iz+j=0",
+  ang = "Definition of a quadratic curve 3D ax2+by2+cz2+dxy+eyz+fxz+gx+hy+iz+j=0",
+  Equation = SIMP (typ='R',min=2,max=10,statut='o',fr="Coefficients successifs abcdefghij de l'equation d'une quadrique")
+ ) ;  # Fin QUADRIQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#   Classe CELLULE : Classe de definition d'une cellule (ensemble elementaire  de regions annulaires et sectorisees)
+#   Apres la hauteur de la cellule, entree des donnees par listes successives pour l'ensemble des couronnes de la
+#   cellule, la zone externe etant decrite a part dans l'attribut FormeTechnologique :
+#   - Liste des materiaux
+#   - Liste des rayons des couronnes correspondantes
+#   - Liste des sous-couronnes : - Numero de couronne a discretiser (Numero 1 a partir du centre),
+#                                - Nombre de sous-couronnes,
+#                                - Mot-cle Equivolumique si decoupage en sections transverses egales,
+#                                - Rayons des couronnes intermediaires ou proportions volumiques si mot-cle Proportions indique anterieurement.
+#   - Liste des sectorisations : - Nom de couronne a sectoriser ,
+#                                - Nombre de secteurs,
+#                                - Mot-cle Equivolumique si decoupage en secteurs egaux et positionnement du premier
+#                                  secteur par rapport a l'axe x, et pas de changement de composition du secteur,
+#                                - Mot-cle alternatif Angle si on veut modifier ou positionner les secteurs dans la
+#                                  couronne : on donne alors des triplets de donnees pour chaque secteur :
+#                                - nom du materiau composant le le secteur,
+#                                - position trigonometrique en degres du debut du secteur
+#                                - et angle en degres du secteur.
+#     Le trace des secteurs sont definis en partant du centre de la couronne.
+#     Pour la sectorisation de la forme externe, deux cas se presentent :
+#     - soit pas de couronnes internes : les secteurs se tracent alors en partant du centre de la forme externe,
+#     - dans le cas contraire, les secteurs partent du centre des couronnes.
+#     Les secteurs peuvent ne pas couvrir l'ensemble de la couronne.
+#   - Pour la zone peripherique, on doit definir les cotes de la cellule (cas cartesien), son materiau, sa
+#     discretisation, et le decentrage du centre des couronnes par rapport au centre de ce contour peripherique
+#     (Coordonnees x,y du centre des couronnes / au centre du contour)
+#   - Pour le moment, limitation a 2D, sauf la donnee optionnelle des positions axiales des couronnes
+#   - Une cellule peut etre definie a partir d'une cellule d'un autre assemblage antérieurement calcule
+#   - Cette classe sert aussi a definir des microstructures (double heterogeneite) a inclure dans des regions
+#     d'autres cellules d'ou les attributs relatifs aux microstructures (une microstructure étant une petite cellule
+#     cylindrique ou spherique a disseminer dans des regions particulieres d'une cellule de taille plus importante
+#     dans des proportions fixees par l'attribut ProportionsMicroStructures
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CELLULE = OPER (nom="CELLULE", op=0, sd_prod=Cellule, niveau = 'Geometries',
+  fr  = "Definition d'une cellule elementaire",
+  ang = "Definition of a basic cell",
+  regles = (UN_PARMI ('Couronnes', 'CelluleIrradiee'),),
+  Type = SIMP (typ='TXM',defaut='Combustible',
+               into=( 'Combustible','BarreGrise','BarreNoire','BarreAcier','BarreAic','BarreB4c',
+                      'Detecteur','Trou','TubeGuide','Postiche','Pyrex','ExPyrex','Gadolinium',
+                      'CellType1','CellType2','CellType3'),statut='o'),
+  HauteurTotale  = SIMP (typ='R',defaut=1.,statut='o',fr="Hauteur totale de la cellule"),
+  Cluster        = SIMP (typ=Cluster,statut='f',fr="Cluster a integrer dans la cellule de base en cm"),
+  TypeGeometrie  = SIMP (typ='TXM',defaut='Cylindrique',statut='o',into=('Cylindrique','Spherique'),fr="Type de geometrie de la cellule"),
+  Couronnes      = FACT (statut='f',fr="Definition des couronnes cylindriques physiques de materiaux",
+        NomsSymboliques = SIMP (typ='TXM',    max='**',statut='o',fr="Liste des noms arbitraires des couronnes"),
+        Materiaux       = SIMP (typ=Materiau, max='**',statut='o',fr="Liste des materiaux des couronnes"),
+        Temperatures    = SIMP (typ='R',      max='**',statut='f',fr="Liste des temperatures des couronnes en Celsius"),
+        PressionGaz     = SIMP (typ='R',               statut='f',fr="Valeur de pression de gaz (en bars)"),
+        Rayons          = SIMP (typ='R',      max='**',statut='o',fr="Liste des rayons des couronnes en cm"),
+        RayonsMineurs   = SIMP (typ='R',      max='**',statut='f',fr="Liste des rayons mineurs des couronnes elliptiques en cm"),
+        Hauteurs        = SIMP (typ='R',      max='**',statut='f',fr="Liste des hauteurs des couronnes en cm"),
+        AxialPositions  = SIMP (typ='R',     max='**',statut='f',
+                                fr="Positions axiales de la base des couronnes en cm / au zero de la hauteur maximum")
+                         ),
+  MicroStructures  = FACT (max = '**', statut = 'f',fr="Chargement de la double heterogeneite dans chaque couronne",
+        NomCouronne     = SIMP (typ='TXM',statut='o',fr="Nom symbolique de la couronne ou inserer des microstructures"),
+        MicroStructures = SIMP (typ=Cellule,max='**',statut='o',fr="Liste des microstructures dans la couronne"),
+        ProportionsMicroStructures = SIMP (typ='R',max='**',statut='o',fr="Proportions des microstructures dans la couronne")
+                         ),
+  SousCouronnes  = FACT (max = '**', statut = 'f',fr="Discretisation des couronnes de la cellule",
+        NomCouronne        = SIMP (typ='TXM',statut='o',fr="Nom symbolique de la couronne"),
+        NbSousCouronnes    = SIMP (typ='I'  ,statut='o',fr="Nombre de sous-couronnes de discretisation"),
+        TypeDiscretisation = SIMP (typ='TXM',defaut='Equivolumique',statut='o',into=('Equivolumique','Proportions','Equidistant')),
+        BlocProportions    = BLOC (condition = "TypeDiscretisation=='Proportions'",
+                             ProportionsVolumiques = SIMP (typ='R',statut='o',max='**',fr="Proportions volumiques des sous-couronnes")),
+        ProfilTemperature  = SIMP (typ='R',max='**',statut='f',fr="Profil de temperature")
+                         ),
+  Homogeneisation = FACT (max = '**', statut = 'f', fr="Homogeneisation de couronnes de la cellule",
+        NomCouronne    = SIMP (typ='TXM'          , fr="Nom arbitraire de la couronne homogeneisee"),
+        ListeCouronnes = SIMP (typ='TXM',max='**' , fr="Liste des noms des couronnes jointives a homogeneiser")
+                          ),
+  Secteurs     = FACT (max = '**', statut = 'f', fr="Sectorisation des couronnes de la cellule",
+        NomCouronne       = SIMP (typ='TXM',statut='o',fr="Nom de la couronne ou de la forme externe a sectoriser"),
+        NbSecteurs        = SIMP (typ='I'  ,statut='o',fr="Nombre de secteurs de la couronne"),
+        TypeSectorisation = SIMP (typ='TXM',statut='o',defaut='Coins',into=('Equivolumique','Angle','Coins','MilieuxCotes')),
+        AngleDepart       = SIMP (typ='R'  ,statut='o',defaut=0.,fr="Angle en degres de depart des secteurs (Origine 0 sur l'axe Ox)"),
+        Sectorisation     = FACT (statut       = 'f',
+                                  Materiaux    = SIMP (typ=Materiau,       max='**',statut='f',fr="Materiau des secteurs"),
+                                  Temperatures = SIMP (typ=('R','I','TXM'),max='**',statut='f',fr="Temperature des secteurs en Celsius"),
+                                  Angles       = SIMP (typ='R',            max='**',statut='f',fr="Angles en degres des secteurs")
+                                                )
+                       ),
+  FormeExterne = FACT (statut='f',fr="Definition de la region externe au systeme cylindrique interne",
+        NomSymbolique = SIMP (typ='TXM',statut='f',fr="Nom arbitraire de la zone externe"),
+        Type          = SIMP (typ    = (ArcCercle,Carre,Rectangle,Hexagone,Triangle,Polygone),
+                              statut = 'f',  # la donnee est facultative si la cellule est inserree dans un reseau
+                              fr     = "Forme geometrique exterieure"),
+        Materiau      = SIMP (typ=(Materiau,Cellule),fr="Materiau de la forme externe"),
+        MicroStructures = SIMP (typ=Cellule,max='**',statut='f',fr="Microstructures de la region externe"),
+        ProportionsMicroStructures = SIMP (typ='R',max='**',statut='f',
+                                           fr="Proportions des microstructures dans la region externe"),
+        Temperature   = SIMP (typ='R',fr="Temperature en Celsius du materiau de la forme externe"),
+        PressionGaz   = SIMP (typ='R',statut='f',fr="Valeur de pression de gaz (en bars)"),
+        Decentrement  = SIMP (typ    = 'R',
+                              min    = 2,
+                              max    = 3,
+#                             defaut = (0.,0.,0.),
+                              statut = 'f',
+                              fr     = "Coordonnees xyz du centre des couronnes / barycentre du contour") ),
+  CelluleIrradiee = FACT (statut='f',fr="Utilisation d'une cellule irradiee d'un assemblage existant",
+        AssemblageOrigine  = SIMP (typ=(AssemblageType,AssemblageCombustibleReel),statut='o',
+                                   fr="Assemblage d'origine de la cellule a extraire"),
+        IrradiationMoyenne = SIMP (typ='R',statut='o',fr="Irradiation moyenne MWj/t de l'assemblage d'origine"),
+        Position           = SIMP (typ='I', min=2, max=2, statut='o',
+                                   fr="Coordonnees entieres ix,jy du crayon a extraire de l'assemblage") )
+ ) ;  # Fin CELLULE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CLUSTER : Classe de definition d'un cluster de cellules
+#                   Un cluster est defini comme une superposition centree de cadrans telephoniques (a l'ancienne mode), chaque
+#                   cadran ayant des trous de tailles differentes, l'ensemble devant etre dispose ensuite dans une cellule de forme
+#                   quelconque.
+#                   Donnees de Positionnement des couronnes de canaux, chaque canal etant une CELLULE predefinie,
+#                   Pour chaque type de cellule, on donne :
+#                   - le nombre de cellules a positionner (de maniere uniformement repartie sur le cercle)
+#                   - le rayon du cercle sur lequel on les positionne
+#                   - l'angle / Ox du centre de la premiere cellule (en degres)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CLUSTER = OPER (nom="CLUSTER", op=0, sd_prod=Cluster, niveau = 'Geometries',
+  fr  = "Definition d'un cluster de cellules cylindriques",
+  ang = "Definition of a cylindrical cell cluster",
+  Hauteur          = SIMP (typ='R',defaut=1.,statut='f',fr="Hauteur du cluster"),
+  Couronnes        = FACT (statut='o',fr="Definition des couronnes de cellules",min=1,
+      Cellules   = SIMP (typ=Cellule,max='**',statut='o',fr="Liste des types de cellules sur chaque cercle"),
+      NbCellules = SIMP (typ='I'    ,max='**',statut='o',fr="Liste des nombres de cellules de chaque type sur chaque cercle"),
+      Rayons     = SIMP (typ='R'    ,max='**',statut='o',fr="Liste des rayons des cercles correspondants en cm"),
+      Angles     = SIMP (typ='R'    ,max='**',statut='o',fr="Liste des angles de positionnement / Ox de la premiere cellule de chaque type"))
+ ) ;  # Fin CLUSTER
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ORIENTATION :         Classe de definition d'une orientation angulaire dans un plan 2D apres symetrie eventuelle / Ox
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ORIENTATION = OPER (nom="ORIENTATION", op=0, sd_prod=Orientation, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une orientation d'un reseau ou d'une cellule",
+  ang = "Definition of a cell or lattice orientation",
+  Symetrie       = SIMP (typ=(Plan,PlanX,PlanY,PlanZ),statut='f',
+                         fr="Indication d'une operation de symetrie / Plan, avant rotation"),
+  AngleRotation  = SIMP (typ='R'    ,statut='f',fr="Angle de rotation en degres",defaut=0.),
+  CentreRotation = SIMP (typ=Point  ,statut='f',fr="Centre de rotation"),
+  AxeRotation    = SIMP (typ=Vecteur,statut='f',fr="Vecteur de l'axe de rotation")
+ ) ;  # Fin ORIENTATION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe FORME_POSITIONNEE :   Classe de definition d'une forme geometrique positionnee
+#                               La position est definie a l'aide du centre de la forme geometrique,
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+FORME_POSITIONNEE = OPER (nom="FORME_POSITIONNEE", op=0, sd_prod=FormePositionnee, niveau = 'ElementsGeometriques',
+  fr  = "Definition d'une forme positionnee",
+  ang = "Definition of a shape and its position",
+  Forme = SIMP (
+      typ    = (Sphere,BoiteRectangulaire,BoiteGenerale,CylindreX,CylindreY,CylindreZ,Cylindre,SecteurDisque,Cone,
+                Carre,Rectangle,Triangle,Hexagone,Polygone,PrismeHexagonal,Tore,Polyedre,Cellule,Cluster),
+      statut = 'o',
+      fr     = "Forme geometrique de base a positionner"),
+  PositionCentre   = SIMP (typ=Point      ,statut='o',fr="Coordonnees du centre de la forme geometrique"),
+  OrientationForme = SIMP (typ=Orientation,statut='f',fr="Orientation de la forme")
+ ) ;  # Fin FORME_POSITIONNEE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GEOMETRIE_SURFACIQUE : Classe de definition d'une geometrie surfacique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GEOMETRIE_SURFACIQUE = OPER (nom="GEOMETRIE_SURFACIQUE", op=0, sd_prod=GeometrieSurfacique, niveau = 'Geometries',
+  fr  = "Definition d'une geometrie surfacique",
+  ang = "Definition of a surfacic geometry",
+  MateriauRemplissage = SIMP (typ=Materiau,statut='o',fr="Materiau de remplissage de la geometrie surfacique"),
+  Surfaces      = NUPL (
+      max      = '**',
+      statut   = 'o',
+      fr       = "Serie de couples (Surface,Plus ou Moins) definissant les surfaces limites de la geometrie",
+      elements = (
+          SIMP (typ=(PlanX,PlanY,PlanZ,Plan,CylindreX,CylindreY,CylindreZ,Cylindre,Sphere,Cone,Conique,Quadrique)),
+          SIMP (typ='TXM',into=('Plus','Moins'))))
+ ) ;  # Fin GEOMETRIE_SURFACIQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GEOMETRIE_COMBINATOIRE : Classe de definition d'une geometrie combinatoire
+#                                  Ecrasement : Constitution par ecrasements successifs (dans l'ordre des donnees) de la
+#                                               Geometrie Initiale, la frontiere externe etant celle de la geometrie initiale
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GEOMETRIE_COMBINATOIRE = OPER (nom="GEOMETRIE_COMBINATOIRE", op=0, sd_prod=GeometrieCombinatoire, niveau = 'Geometries',
+  fr  = "Definition d'une geometrie combinatoire",
+  ang = "Definition of a combinatorial geometry",
+  GeometriePremierPlan  = SIMP (typ=FormePositionnee,statut='o',fr="Geometrie se trouvant au premier plan"),
+  GeometrieEcrasee      = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries ecrasées et surchargées par la GeometriePremierPlan"),
+  GeometrieUnion        = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries a reunir a la GeometriePremierPlan en gardant les interfaces, les intersections etant des volumes particuliers"),
+  GeometrieReunion      = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries a reunir a la GeometriePremierPlan pour former un volume unique"),
+  GeometrieIntersection = SIMP (typ=FormePositionnee,max='**',statut='f',
+                                fr="Geometries a intersecter avec la GeometriePremierPlan")
+ ) ;   # Fin GEOMETRIE_COMBINATOIRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CORRESPONDANCE_REPERE_POSITION_RESEAU :
+#  Classe de definition des reperes alphanumeriques des cases d'un reseau
+#  Reperes (bataille navale ou autre) et Coordonnees cartesiennes entieres des cases dans un systeme i,j du reseau
+#  Origine des coordonnees en bas a gauche d'un systeme en xy
+#  Ceci n'a d'interet que pour l'utilisateur ou pour se conformer aux reperes industriels habituels dans le cas des REP
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CORRESPONDANCE_REPERE_POSITION_RESEAU = OPER (nom="CORRESPONDANCE_REPERE_POSITION_RESEAU",op=0,sd_prod=CorrespondanceReperePositionReseau,
+                                              niveau = 'Geometries',
+  fr  = "Correspondance entre reperes alphanumeriques et cases d'un reseau",
+  ang = "Alphanumeric identificators and lattice coordinates",
+  Positions = NUPL (max='**',statut='o',
+                    elements=(SIMP (typ='TXM',fr="Repere alphanumerique arbitraire d'une case du reseau"),
+                              SIMP (typ='I'  ,fr="Premiere Coordonnee entiere dans le systeme i,j du reseau"),
+                              SIMP (typ='I'  ,fr="Seconde Coordonnee entiere dans le systeme i,j du reseau")))
+ ) ;  # Fin CORRESPONDANCE_REPERE_POSITION_RESEAU
+# -----------------------------------------------------------------------------------------------------------------------------------
+# Classe RESEAU :
+#   Classe de definition d'un reseau de juxtapositions de cellules ou de reseaux
+#   Assemblage de cellules ou de reseaux dans une grille rectangulaire ou hexagonale
+#   Les positions des cellules et des reseaux dans le nouveau reseau sont a fournir sur les mailles
+#   du reseau sans tenir compte des symetries,
+#   Le reseau peut etre charge :
+#     - de maniere uniforme : un seul type de CELLULE ou de RESEAU
+#     - de maniere complete : a chaque maille doit etre affecte un reseau ou une cellule et optionnellement son
+#       orientation, l'ordre des donnees dans le plan radial etant celui obtenu en partant de l'element le plus
+#       bas a gauche, et dans le sens axial ensuite (eventuellement si 3D)
+#     - de maniere partielle : liste des cellules et reseaux charges et leur position xyz dans le nouveau reseau
+#       et orientations correspondantes de ces cellules et reseaux
+#   Des reperes alphanumeriques arbitraires peuvent etre associes a chaque maille du reseau, ce qui permet
+#   si necessaire de manipuler ces elements du reseau par l'intermediaire de ces symboles (exemple des
+#   reperes bataille navale des assemblages dans le reseau d'un coeur REP).
+#   Le reseau peut etre entoure de zones peripheriques homogenes ou heterogenes.
+#     - Le cas Homogene peut s'appliquer aux reseaux hexagonaux ou cartesiens ;
+#     - Dans le cas Heterogene, la reflexion s'est uniquement portee sur la situation cartesienne et particulierement en donnant la
+#       la possibilite de decrire un assemblage bouillant (avec croix de contrôle et instrumentation)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESEAU = OPER (nom="RESEAU", op=0, sd_prod=Reseau, niveau = 'Geometries',
+  fr  = "Definition d'un reseau compose de juxtapositions de cellules, de reseaux ou d'assemblages",
+  ang = "Definition of a lattice",
+  Identificateur          = SIMP (typ='TXM',statut='o',fr="Identificateur arbitraire du reseau"),
+  ReseauReference         = SIMP (typ='TXM',statut='f',fr="Identificateur du reseau de reference dans le cas d'une composition de reseaux de reseau"),
+  DifferenciationCellules = SIMP (typ='I',defaut=0,statut='f',fr="Nombre de couches de cellules a differencier autour du reseau de reference"),
+  TypeGeometrie           = SIMP (typ='TXM',into=('cartesienne','hexagonale'),defaut='cartesienne',statut='f'),
+  NbMaillesX              = SIMP (typ='I',defaut=17,statut='o',fr="Nbre de mailles sur le premier axe du reseau"),
+  NbMaillesY              = SIMP (typ='I',defaut=17,statut='f',fr="Nbre de mailles sur le second axe du reseau"),
+  NbMaillesZ              = SIMP (typ='I',defaut=1 ,statut='f',fr="Nbre de mailles sur l'axe vertical du reseau"),
+  PasReseau               = SIMP (typ='R',defaut=1.26 ,statut='f',max=2,fr="Pas du reseau en X et Y (en cm)"),
+  MateriauRemplissage     = SIMP (typ=Materiau,defaut='ModExt',statut='f',fr="Materiau de remplissage du reseau"),
+  TypeDefinition          = SIMP (typ='TXM',statut='f',defaut="Complet",into=("Uniforme","Complet","Partiel"),fr="Mode de chargement du reseau"),
+  ReseauUniforme          = BLOC (condition = "TypeDefinition=='Uniforme'",fr="Chargement uniforme du reseau",
+       ElementGeomU       = SIMP (typ=(Cellule,Reseau,Cluster,GeometrieCombinatoire,AssemblageCombustibleReel,AssemblageType),statut='o',
+                                  fr = "Remplissage uniforme du nouveau reseau par un element particulier"),
+       OrientationU       = SIMP (typ=Orientation,fr="Orientation de l'element geometrique de base",statut='f')),
+  ReseauComplet           = BLOC (condition = "TypeDefinition=='Complet'",fr="Chargement complet du reseau",
+        ElementsGeomC     = NUPL (max='**', statut='o',
+                                  fr="Liste des couples (ElementGeometrique,SigleTextuel) les sigles textuels servant ensuite au chargement complet du reseau",
+                elements  =(SIMP (typ=(Cellule, Reseau, GeometrieCombinatoire, GeometrieSurfacique, AssemblageCombustibleReel,AssemblageType),
+                                  fr="Element geometrique a associer au sigle"),
+                            SIMP (typ='TXM',fr="Sigle alphanumerique associe a l'element geometrique"))),
+        ChargementC       = SIMP (typ='TXM',statut='o',max='**',
+                                  fr="Affectation des sigles aux cases geometriques du reseau"),
+        RegroupementC     = SIMP (typ='I',statut='f',max='**',
+                                  fr="Numeros des cellules de calcul en approximation multicellule dans chaque case du reseau"),
+        OrientationC      = SIMP (typ=Orientation,max='**',statut='f',fr="Orientation des elements geometriques dans les cases du reseau"),
+        ReperesC          = SIMP (typ='TXM',max='**',statut='f',fr="Reperes arbitraires des cases geometriques"),
+                                ),
+  ReseauPartiel           = BLOC (condition = "TypeDefinition=='Partiel'",fr="Chargement partiel du reseau",
+        ChargementP       = FACT (max='**',fr="Chargement partiel du reseau",
+                regles = (UN_PARMI ('ElementsPositionnesP', 'ElementsReperesP'),),
+                ElementsPositionnesP = NUPL (max='**', statut='f',fr="Donnee des Positions des elements geometriques dans le systeme des coordonnees du reseau",
+                        elements=(SIMP (typ=(Cellule, Reseau, GeometrieCombinatoire, GeometrieSurfacique, AssemblageCombustibleReel,AssemblageType),
+                                        fr="Element geometrique a positionner"),
+                                  SIMP (typ='I',min=2,max=2,fr="Coordonnees i j de l'element geometrique dans le reseau"))),
+                ElementsReperesP    = NUPL (max='**', statut='f',fr="Donnee des reperes positionnels des elements geometriques",
+                        elements=(SIMP (typ=(Cellule, Reseau, GeometrieCombinatoire, GeometrieSurfacique, AssemblageCombustibleReel,AssemblageType),
+                                        fr="Element geometrique a positionner"),
+                                  SIMP (typ='TXM',fr="Repere alphanumerique de l'element geometrique"))),
+                CorrespondanceReperePositions = SIMP (typ=CorrespondanceReperePositionReseau,
+                                                      statut='f',
+                                                      fr="Correspondance entre Repere alphanumerique et coordonnees dans le reseau"),
+                OrientationP = SIMP (typ=Orientation,max='**',statut='f',fr="Orientation des elements geometriques du chargement partiel"),
+                             )),
+  ZonesPeripheriquesHomogenes      = FACT (statut='f',fr="Zones homogenes peripheriques au reseau",
+        Epaisseurs      = SIMP (typ='R'     ,max='**',statut='o',fr="Liste des epaisseurs (cm) des couches peripheriques"),
+        Materiaux       = SIMP (typ=Materiau,max='**',statut='f',fr="Liste des materiaux des couches peripheriques"),
+        MateriauExterne = SIMP (typ=Materiau         ,statut='f',fr="Materiau de remplissage de la zone externe du reseau hexagonal")),
+  ZonesPeripheriquesHeterogenes  = FACT (max='**',statut='f',fr="Zones heterogenes peripheriques au reseau",
+        DimensionsExternes = SIMP (typ='R',min=2,max=2,        statut='o',
+                                   fr=" Dimensions (cm) externes X et Y zone peripherique comprise"),
+        Decentrement = SIMP (typ='R',min=2,max=2,      statut='f',
+                             fr=" Coordonnees (cm) X et Y du centre de la zone peripherique / au centre du réseau"),
+        MateriauRemplissage = SIMP (typ=Materiau,      statut='f',
+                                    fr="Materiau de remplissage de la zone"),
+        Boitier = FACT (statut='f',fr="Definition d'un boitier",
+                Epaisseur = SIMP (typ='R',statut='o',fr= "Epaisseur (cm) du boitier dans sa partie lineaire"),
+                LongueurPartieLineaire  = SIMP (typ='R',statut='o',fr= "Longueur (cm) de la partie lineaire du boitier"),
+                RayonExterneCoinBoitier = SIMP (typ='R',statut='o',fr= "Rayon externe (cm) du coin arrondi du boitier"),
+                MateriauExterne = SIMP (typ=Materiau,statut='f',fr="Materiau de remplissage de la zone externe au boitier"),
+                PositionBoitier = SIMP (typ='TXM',statut='o',defaut='Exterieure',into=('Exterieure','Interieure'),
+                                        fr="Position du boitier dans la zone")),
+        CroixControle = FACT (statut='f',fr="Definition d'une croix de controle",
+                Epaisseur = SIMP (typ='R',statut='o',fr= "Epaisseur (cm) des branches de la croix de controle"),
+                EpaisseurEnveloppe = SIMP (typ='R',statut='o',fr= "Epaisseur (cm) de l'enveloppe de la croix de controle"),
+                DemiLongueurCroixCentrale = SIMP (typ='R',statut='o',
+                                                  fr= "Demi-longueur (cm) de la partie homogene au centre de la croix de controle"),
+                NombreBarres   = SIMP (typ='I',statut='o',fr= "Nombre de barres dans une aile de la croix de controle"),
+                CellulesBarres = SIMP (typ=Cellule,max='**',statut='o',
+                                       fr= "Liste des cellules correspondant aux barres de la croix de contrôle, en partant du centre de la croix"),
+                MateriauCroix = SIMP (typ=Materiau,statut='o',fr="Materiau de la croix de controle"),
+                BranchesCroix = SIMP (typ='TXM',statut='o',defaut='NordOuest',into=('NordOuest','NordEst','SudOuest','SudEst'),
+                                      fr="Choix des deux branches de la croix de contrôle decrites"),
+                PositionCroix = SIMP (typ='TXM',statut='o',defaut='AxeExterieure',into=('AxeExterieure','Exterieure','Interieure'),
+                                      fr="Position de la croix dans la zone")),
+        Instrumentation = FACT (statut='f',fr="Definition de l'instrumentation",
+                Cellule  = SIMP (typ=Cellule,statut='o',fr= "Cellule decrivant la geometrie de l'instrumentation"),
+                Position = SIMP (typ='TXM',statut='o',defaut='SudEst',into=('NordOuest','NordEst','SudOuest','SudEst'),
+                                 fr="Choix du coin ou sera centree la cellule"))
+                                )
+ ) ;  # Fin RESEAU
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DECOMPOSITION_DOMAINES : Classe de definition de domaines de calcul
+#                                  Pour le moment, on ne considere qu'une partition en 2D d'un reseau
+#                                  (a completer ulterieurement pour une geometrie generale)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DECOMPOSITION_DOMAINES = OPER (nom="DECOMPOSITION_DOMAINES", op=0, sd_prod=DecompositionDomaines, niveau = 'Geometries',
+  fr  = "Decomposition en domaines d'un reseau",
+  ang = "Domain decomposition of a lattice",
+  NbDomainesOx          = SIMP (statut='o', typ='I',           fr="Nombre de domaines sur l'axe Ox"),
+  NbDomainesOy          = SIMP (statut='o', typ='I',           fr="Nombre de domaines sur l'axe Oy"),
+  OxRepartitionDomaines = SIMP (statut='o', typ='I', max='**', fr="Nombre de mailles du reseau pour chaque domaine de l'axe Ox"),
+  OyRepartitionDomaines = SIMP (statut='o', typ='I', max='**', fr="Nombre de mailles du reseau pour chaque domaine de l'axe Oy")
+ ) ;  # Fin DECOMPOSITION_DOMAINES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GRILLE_ASSEMBLAGE : Classe de definition des grilles composant le squelette des assemblages combustibles
+#                             Caracteristiques  technologiques (dimension, materiaux de composition) et positionnement simplifie
+#                             des materiaux dans les canaux de l'assemblage pour dilution homogene a 2D dans le milieu peripherique.
+#                               - Materiaux fournis sous forme de couples (nom de materiau et masse en g)
+#                               - Repartition decrite en donnant pour une liste de materiaux (faisant partie des materiaux
+#                                 precedemment indiques) la liste des types de cellules (precedee du mot-cle TypeCellule) et des
+#                                 types de materiaux (precedes du mot-cle TypeMateriau) devant etre modifies par la presence des
+#                                 grilles
+#                                                    < liste de MATERIAU >,
+#                                       TypeCellule  < liste de types de cellule >,
+#                                       TypeMateriau < liste de types de materiau >
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GRILLE_ASSEMBLAGE = OPER (nom="GRILLE_ASSEMBLAGE", op=0, sd_prod=GrilleAssemblage, niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition d'une grille d'assemblage",
+  ang = "Definition of an elementary assembly grid",
+  TypeGrille     = SIMP (typ='TXM',defaut='GrilleMelange',statut='f',fr="Type de grille de structure assemblage"),
+  Hauteur        = SIMP (typ='R',defaut=3.3,statut='f',fr="Hauteur de la grille de structure assemblage en cm"),
+  Largeur        = SIMP (typ='R',defaut=21.338,statut='f',fr="Largeur de la grille de structure assemblage en cm"),
+  MateriauxMasse = NUPL (max = '**', statut = 'o',
+                         elements = (SIMP (typ=Materiau),SIMP (typ='R')),
+                         fr       = "Serie de couples (Materiau,masse en g) de composition de la grille"),
+  Repartition    = FACT (max = '**', statut = 'o',fr="Repartition des materiaux par type de cellule ou par type de materiau",\r
+                         regles = (AU_MOINS_UN ('TypeCellule', 'TypeMateriau'),),
+                         MateriauGrille = SIMP (typ=Materiau,fr="Nom du materiau a repartir",statut='o'),
+                         TypeCellule    = SIMP (typ='TXM',max='**',statut='f',fr="Liste des types de cellule ou est reparti le materiau"),
+                         TypeMateriau   = SIMP (typ='TXM',max='**',statut='f',fr="Liste des types de materiaux  ou est reparti le materiau") ),
+  CoefficientsThermohydrauliques = FACT (statut = 'f',fr="Donnees de thermohydraulique",
+      CoeffPerteCharge  = SIMP (typ='R',statut='f',
+                                fr="Coefficient Cn de perte de charge au sens monodimensionnel de la singularite"),
+      CoeffRedressement = SIMP (typ='R',statut='f',val_min=0,
+                                fr="Coefficient R de redressement de l'ecoulement au passage de la singularite"),
+      CoeffCkg          = SIMP (typ='R',statut='f',
+                                fr="Coefficient lie au type de grille et de geometrie")),
+  Ailettes = FACT (statut = 'f',fr="Donnees des ailettes de melange",
+      PerteChargeSansAilettes       = SIMP (typ='R',statut='f',fr="Coefficient Cn de perte de charge monodimensionnel sans ailettes"),
+      PerteChargeAvecAilettes       = SIMP (typ='R',statut='f',fr="Coefficient Cn de perte de charge avec ailettes"),
+      CoeffRedressementSansAilettes = SIMP (typ='R',statut='f',val_min=0,
+                                            fr="Coefficient R de redressement de l'ecoulement sans ailettes"),
+      CoeffCkg                      = SIMP (typ='R',statut='f',fr="Coefficient lie au type de grille et de geometrie"),
+      AngleOrientation              = SIMP (typ='R',statut='f',fr="Angle d'orientation des ailettes"),
+      Repartition                   = SIMP (typ='TXM',max='**',into=('Rien','Droite','Gauche','Haut','Bas'),statut='f',
+        fr="Positionnement des ailettes dans chaque quart de sous-canal (soit 4 donnees par sous-canal)"))
+ ) ;  # Fin GRILLE_ASSEMBLAGE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE  :   Classe de definition de l'embout inferieur d'un assemblage combustible REP
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE = OPER (nom="PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE",op=0,sd_prod=PartieInferieureAssemblageCombustible,
+                                                 niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition de la partie inferieure d'un assemblage combustible REP",
+  ang = "Definition of the bottom part of a PWR fuel assembly",
+  MateriauEmbout                            = SIMP (typ=Materiau,statut='f',fr="Materiau de l'embout inferieur",defaut='ACIER'),
+  MasseBouchonInferieurCrayonCombustible    = SIMP (typ='R'     ,statut='o',fr="Masse (g) du bouchon inferieur du crayon combustible"),
+  HauteurBouchonInferieurCrayonCombustible  = SIMP (typ='R'     ,statut='o',fr="Hauteur (cm) du bouchon inferieur du crayon combustible"),
+  MateriauBouchonInferieurCrayonCombustible = SIMP (typ=Materiau,statut='f',fr="Materiau du bouchon inferieur du crayon combustible",defaut='ZIRCALOY'),
+  MasseEmbout                               = SIMP (typ='R'     ,statut='o',fr="Masse (g) de l'embout inferieur"),
+  EpaisseurPlaqueAdaptatrice                = SIMP (typ='R'     ,statut='o',fr="Epaisseur (cm) de la plaque adaptatrice de l'embout inferieur en cm"),
+  LargeurPlaqueAdaptatrice                  = SIMP (typ='R'     ,statut='o',fr="Largeur (cm) de la plaque adaptatrice de l'embout inferieur"),
+  TrousPlaqueAdaptatrice                    = NUPL (fr="Dimensions des trous de la plaque adaptatrice",
+      max      = '**',
+      statut   = 'o',
+      elements = ( SIMP (typ='I'  ,statut='o',fr="Nombre de trous de taille definie ci-apres"),
+                   SIMP (typ='TXM',statut='o',into=('Rayon','Cotes'),fr="Choix de la forme des trous, elliptique ou rectangulaire"),
+                   SIMP (typ='R'  ,statut='o',min=2,max=2,fr="Rayons ou cotes (cm) des trous"),
+                   SIMP (typ='TXM',statut='o',defaut='Hauteur',into=('Hauteur','Epaisseur'),fr="Mot-cle au choix"),
+                   SIMP (typ='R'  ,statut='o',fr="Hauteur  (cm) des trous dans la plaque adaptatrice"))),
+  JeuBouchonCombustiblePlaque = SIMP (typ='R',      statut='o',fr="Hauteur (cm) du jeu entre bouchon combustible et plaque adaptatrice"),
+  HauteurPied                 = SIMP (typ='R',      statut='o',fr="Hauteur (cm) du pied de l'embout inferieur"),
+  CapuchonRint                = SIMP (typ='R',      statut='f',fr="Rayon interne (cm) du capuchon"),
+  CapuchonRext                = SIMP (typ='R',      statut='f',fr="Rayon externe (cm) du capuchon"),
+  HauteurVisEpaulee           = SIMP (typ='R',      statut='f',fr="Hauteur des vis epaulees des tubes guides en cm"),
+  MasseVisEpaulee             = SIMP (typ='R',      statut='f',fr="Masse totale des vis epaulees des tubes guides en g"),
+  RintVisEpaulee              = SIMP (typ='R',      statut='f',fr="Rayon interne (cm) d'une vis epaulee"),
+  RextVisEpaulee              = SIMP (typ='R',      statut='f',fr="Rayon externe (cm) d'une vis epaulee"),
+  MasseFiltre                 = SIMP (typ='R',      statut='f',fr="Masse (g) du filtre anti-debris"),
+  MateriauFiltre              = SIMP (typ=Materiau, statut='f',fr="Materiau du filtre anti-debris", defaut='INCONEL'),
+  HauteurCale                 = SIMP (typ='R',      statut='f',fr="Hauteur (cm) de la cale dans le crayon combustible"),
+  MateriauCale                = SIMP (typ=Materiau, statut='f',fr="Materiau de la cale dans le crayon combustible",defaut='ACIER'),
+  RayonPionCentrage           = SIMP (typ='R',      statut='f',fr="Rayon externe des pions de centrage de la plaque inferieure coeur en cm"),
+  HauteurPionCentrage         = SIMP (typ='R',      statut='f',fr="Hauteur des pions de centrage de la plaque inferieure coeur en cm"),
+  HauteurOgivePionCentrage    = SIMP (typ='R',      statut='f',fr="Hauteur de l'ogive des pions de centrage de la plaque inferieure coeur en cm"),
+  MateriauPionCentrage        = SIMP (typ=Materiau, statut='f',fr="Materiau des pions de centrage de la plaque inferieure coeur",defaut='ACIER'),
+  BouchonTubGHauteur          = SIMP (typ='R',      statut='f',fr="Hauteur des bouchons des tubes guides en cm"),
+  BouchonTubGMateriau         = SIMP (typ=Materiau, statut='f',fr="Materiau des bouchons des tubes guides",defaut='ACIER')
+  ) ;  # Fin PARTIE_INFERIEURE_ASSEMBLAGE_COMBUSTIBLE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE :    Classe de definition de l'embout superieur d'un assemblage combustible REP
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE = OPER (nom="PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE",op=0,sd_prod=PartieSuperieureAssemblageCombustible,
+                                                   niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition de la partie superieure d'un assemblage combustible REP",
+  ang = "Definition of the top part of a PWR fuel assembly",
+  MateriauEmbout                             = SIMP (typ=Materiau, statut='f',fr="Materiau  de l'embout superieur",defaut='ACIER'),
+  MasseBouchonSuperieurCrayonCombustible     = SIMP (typ='R',      statut='o',fr="Masse du bouchon superieur du crayon combustible en g"),
+  HauteurBouchonSuperieurCrayonCombustible   = SIMP (typ='R',      statut='o',fr="Hauteur du bouchon superieur du crayon combustible en cm"),
+  MateriauBouchonSuperieurCrayonCombustible  = SIMP (typ=Materiau, statut='f',fr="Materiau du bouchon superieur du crayon combustible",defaut='ZIRCALOY'),
+  RessortCrayonCombustible                   = SIMP (typ='R',      statut='o',fr="Masse du ressort du crayon combustible en g"),
+  ForceRessortCrayonCombustible              = SIMP (typ='R',      statut='f',fr="Force du ressort du crayon combustible en N"),
+  HauteurChambreExpansion                    = SIMP (typ='R',      statut='o',fr="Hauteur de la chambre d'expansion en cm"),
+  MasseEmbout                                = SIMP (typ='R',      statut='o',fr="Masse de l'embout superieur en g"),
+  HauteurEmbout                              = SIMP (typ='R',      statut='o',fr="Hauteur de l'embout superieur en cm"),
+  MasseRessortsEmbout                        = SIMP (typ='R',      statut='o',fr="Masse des ressorts de l'embout superieur en g"),
+  MateriauRessortsEmbout                     = SIMP (typ=Materiau, statut='f',fr="Materiau des ressorts de l'embout superieur", defaut='INCONEL'),
+  EpaisseurPlaqueAdaptatrice                 = SIMP (typ='R',      statut='o',fr="Epaisseur de la plaque adaptatrice en cm"),
+  LargeurPlaqueAdaptatrice                   = SIMP (typ='R',      statut='o',fr="Largeur de la plaque adaptatrice en cm"),
+  TrousPlaqueAdaptatrice                     = NUPL (fr="Dimensions des trous de la plaque adaptatrice",
+      max      = '**',
+      statut   = 'o',
+      elements = (      SIMP (typ='I',                                 fr="Nombre de trous d'un type donne"),
+                        SIMP (typ='TXM',into=('Rayon','Cotes'),                fr="Mot indiquant la donnee des rayons ou cotes des trous"),
+                        SIMP (typ='R'  ,min=2,max=2,                   fr="Rayons mineur et majeur ou Cotes du trou en cm"),
+                        SIMP (typ='TXM',into=('Hauteur','Epaisseur'),  fr="Mot cle introduisant la hauteur des trous"),
+                        SIMP (typ='R',                                 fr="Hauteur du trou en cm"))),
+  JeuBouchonCombustiblePlaque = SIMP (typ='R',      statut='o',fr="Hauteur du jeu entre Bouchon combustible et Plaque adaptatrice en cm"),
+  EpaisseurJupe               = SIMP (typ='R',      statut='o',fr="Epaisseur de la jupe de l'embout superieur en cm"),
+  HauteurJupe                 = SIMP (typ='R',      statut='f',fr="Hauteur de la jupe de l'embout superieur en cm"),
+  RayonPionCentrage           = SIMP (typ='R',      statut='f',fr="Rayon des pions de centrage superieurs en cm"),
+  HauteurPionCentrage         = SIMP (typ='R',      statut='f',fr="Hauteur des pions de centrage superieurs en cm"),
+  HauteurOgivePionCentrage    = SIMP (typ='R',      statut='f',fr="Hauteur de l'ogive des pions de centrage superieurs en cm"),
+  MateriauPionCentrage        = SIMP (typ=Materiau, statut='f',fr="Materiau des pions de centrage superieurs",defaut='ACIER'),
+  RayonInterneManchon         = SIMP (typ='R',      statut='f',fr="Rayon interne des manchons des tubes guides en cm"),
+  RayonExterneManchon         = SIMP (typ='R',      statut='f',fr="Rayon externe des manchons des tubes guides en cm"),
+  HauteurManchon              = SIMP (typ='R',      statut='f',fr="Hauteur des manchons des tubes guides en cm"),
+  MasseManchon                = SIMP (typ='R',      statut='f',fr="Masse d'un manchon des tubes guides en g")
+ ) ;  # Fin PARTIE_SUPERIEURE_ASSEMBLAGE_COMBUSTIBLE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ASSEMBLAGE_TYPE : Classe de definition d'un type d'assemblage (ensemble de crayons ou de reseaux quelconques)
+#                           Rajout des structures grilles et embouts (dans le cas des REP)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ASSEMBLAGE_TYPE = OPER (nom="ASSEMBLAGE_TYPE",op=0,sd_prod=AssemblageType,
+                          niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition d'un assemblage type et des elements associes eventuels",
+  ang = "Definition of an assembly type and its associated elements",
+  Geometrie         = SIMP (typ=(Cellule,Reseau,GeometrieCombinatoire),statut='o',max='**',
+                            fr="Liste des geometries composant l'assemblage"),
+  GrillesStructure  = NUPL (max = '**', statut = 'f',fr="Positions axiales des grilles",
+                            elements = ( SIMP (typ=GrilleAssemblage,fr="Type de grille"),
+                                         SIMP (typ='R',max='**',
+                                               fr="Positions axiales des milieux des grilles (en cm) / a la limite inferieure du pied de l'assemblage"))),
+  PartieInferieure  = SIMP (typ=PartieInferieureAssemblageCombustible,statut='f',fr="Type d'embout inferieur"),
+  PartieSuperieure  = SIMP (typ=PartieSuperieureAssemblageCombustible,statut='f',fr="Type d'embout superieur"),
+  ElementsAssocies  = SIMP (typ=(ElementsGrappeCommande,ElementsAbsorbantsFixes,GrappeBouchonAssemblage),max='**',statut='f',fr="Liste des elements technologiques associes")
+ ) ;  # Fin ASSEMBLAGE_TYPE
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENT_BARRE :       Classe de définition d'une barre element d'un assemblage
+#                         Definition des barres des grappes de commande (barre et gaine, et composants axiaux)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ELEMENT_BARRE = OPER (nom="ELEMENT_BARRE", op=0, sd_prod=ElementBarre, niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition d'une barre element d'un assemblage",
+  ang = "Definition of an assembly rod element",
+  MateriauInferieur    = SIMP (typ=Materiau,defaut='ACIER' ,statut='o',fr="Materiau composant la partie inferieure de la barre"),
+  MateriauSuperieur    = SIMP (typ=Materiau,defaut='ACIER' ,statut='o',fr="Materiau composant la partie superieure de la barre"),
+  HauteurBarre         = SIMP (typ='R'                     ,statut='o',fr="Hauteur (cm) de la barre"),
+  HauteurInferieure    = SIMP (typ='R'                     ,statut='f',fr="Hauteur (cm) de la partie inferieure de la barre"),
+  HauteurSuperieure    = SIMP (typ='R'                     ,statut='f',fr="Hauteur (cm) de la partie superieure de la barre"),
+  RintPartieInferieure = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Rayon Interne (cm) de la partie inferieure de la barre"),
+  RintPartieSuperieure = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Rayon Interne (cm) de la partie superieure de la barre"),
+  RextPartieInferieure = SIMP (typ='R'                     ,statut='o',fr="Rayon Externe (cm) de la partie inferieure de la barre"),
+  RextPartieSuperieure = SIMP (typ='R'                     ,statut='f',fr="Rayon Externe (cm) de la partie superieure de la barre"),
+  MasseRessort         = SIMP (typ='R'                     ,statut='o',fr="Masse (g) du ressort de la barre"),
+  MateriauRessort      = SIMP (typ=Materiau                ,statut='o',fr="Materiau du ressort de la barre"),
+  HauteurRessort       = SIMP (typ='R'                     ,statut='o',fr="Hauteur (cm) du ressort de la barre"),
+  BouchonInfHauteur    = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Hauteur (cm) du bouchon inferieur de la barre"),
+  BouchonSupHauteur    = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Hauteur (cm) du bouchon superieur de la barre"),
+  BouchonInfRayon      = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Rayon externe (cm) du bouchon inferieur de la barre"),
+  BouchonSupRayon      = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Rayon externe (cm) du bouchon superieur de la barre"),
+  MateriauGaine        = SIMP (typ=Materiau,defaut='ACIER' ,statut='o',fr="Materiau de la gaine externe de la barre"),
+  RayonInterneGaine    = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Rayon Interne (cm) de la gaine externe de la barre"),
+  RayonExterneGaine    = SIMP (typ='R'     ,defaut=0.      ,statut='f',fr="Rayon Externe (cm) de la gaine externe de la barre")
+ ) ;  # Fin ELEMENT_BARRE
+#----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENTS_GRAPPE_COMMANDE : Classe de définition des éléments des grappes de commande
+#                                    Association avec les différents types de barres absorbantes
+#                                    Description simplifiée de l'araignée et du bouchon des barres
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ELEMENTS_GRAPPE_COMMANDE = OPER (nom="ELEMENTS_GRAPPE_COMMANDE",op=0,sd_prod=ElementsGrappeCommande,niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Définition des éléments des grappes de commande",
+  ang = "Definition of control rod cluster components",
+  ElementsBarre        = SIMP (typ= ElementBarre, max='**',statut='o',fr="Liste des barres absorbantes associees"),
+  HauteurPasInsertion  = SIMP (typ='R',defaut=1.5875      ,statut='o',fr="Hauteur (cm) d'un pas d'insertion des grappes"),
+  CourseTotalePossible = SIMP (typ='R',defaut=361.8       ,statut='o',fr="Course totale possible (cm) d'insertion d'une grappe"),
+  CoteInferieureGrappe = SIMP (typ='R',defaut=8.5705      ,statut='o',fr="Cote inferieure (cm) d'une grappe / zone active ?"),
+  VitesseDeplacement   = SIMP (typ='R',defaut=72.         ,statut='o',fr="Vitesse de deplacement d'une grappe en pas/mn"),
+  NbPasInsertion       = SIMP (typ='I',defaut=225         ,statut='o',fr="Nombre maximum de pas d'insertion "),
+  Araignee16Phauteur   = SIMP (typ='R',defaut=0.          ,statut='o',fr="Hauteur (cm) d'une des 16 petites tiges d'accrochage des barres"),
+  Araignee4Mhauteur    = SIMP (typ='R',defaut=0.          ,statut='o',fr="Hauteur (cm) d'une des 4 tiges moyennes d'accrochage des barres"),
+  Araignee4Ghauteur    = SIMP (typ='R',defaut=0.          ,statut='o',fr="Hauteur (cm) d'une des 4  grandes tiges d'accrochage des barres"),
+  HauteurPommeau       = SIMP (typ='R',defaut=0.          ,statut='o',fr="Hauteur (cm) du pommeau d'accrochage de la grappe"),
+  RayonPommeau         = SIMP (typ='R',defaut=0.          ,statut='o',fr="Rayon (cm) du pommeau d'accrochage de la grappe")
+ ) ;  # Fin ELEMENTS_GRAPPE_COMMANDE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENTS_ABSORBANTS_FIXES :   Classe de definition des elements des grappes d'absorbants fixes
+#                                       Description des pyrex uniquement pour le moment
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ELEMENTS_ABSORBANTS_FIXES = OPER (nom="ELEMENTS_ABSORBANTS_FIXES",op=0,sd_prod=ElementsAbsorbantsFixes,
+                          niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition des elements des grappes d'absorbants fixes",
+  ang = "Definition of non movable absorber control rod cluster elements",
+# Limitation a 12 caracteres
+# HBouchInfPyrex        = SIMP (typ='R',statut='f'),
+# RBouchInfPyrex        = SIMP (typ='R',statut='f'),
+# HZoneVidePyrex        = SIMP (typ='R',statut='f'),
+# HBouchSupPyrex        = SIMP (typ='R',statut='f'),
+# RBouchSupPyrex        = SIMP (typ='R',statut='f'),
+# MatBouchonPyrex       = SIMP (typ=Materiau, statut='f')
+  BIPyrexHauteur        = SIMP (typ='R',      statut='o',fr="Hauteur en cm du bouchon inferieur du crayon pyrex"),
+  BIPyrexRayon          = SIMP (typ='R',      statut='o',fr="Rayon en cm du bouchon inferieur du crayon pyrex"),
+  PyrexZoneVideHauteur  = SIMP (typ='R',      statut='o',fr="Hauteur en cm de la zone vide dans le crayon pyrex"),
+  BSPyrexHauteur        = SIMP (typ='R',      statut='o',fr="Hauteur en cm du bouchon superieur du crayon pyrex"),
+  BSPyrexRayon          = SIMP (typ='R',      statut='o',fr="Rayon en cm du bouchon superieur du crayon pyrex"),
+  PyrexMateriauBouchon  = SIMP (typ=Materiau, statut='o',fr="Materiau du bouchon du crayon pyrex")
+ ) ;  # Fin ELEMENTS_ABSORBANTS_FIXES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GRAPPE_BOUCHON_ASSEMBLAGE : Classe de definition d'une grappe bouchon REP
+#  Rappel : Les grappes bouchons se trouvent dans le cas des REP inseres dans la partie embout superieur de tous les assemblages
+#           ne comportant pas de grappe d'absorbant.
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GRAPPE_BOUCHON_ASSEMBLAGE = OPER (nom="GRAPPE_BOUCHON_ASSEMBLAGE",op=0,sd_prod=GrappeBouchonAssemblage,
+                          niveau = 'ElementsTechnologiquesAssemblages',
+  fr  = "Definition d'une grappe bouchon d'assemblage combustible",
+  ang = "Definition d'une grappe bouchon d'assemblage combustible",
+  HauteurPartieBasseBouchon           = SIMP (typ='R'     ,statut='o',fr="Hauteur en cm de la partie basse du bouchon"),
+  RayonPartieBasseBouchon             = SIMP (typ='R'     ,statut='o',fr="Rayon en cm de la partie basse du bouchon"),
+  Hauteur1PartieIntermediaire1Bouchon = SIMP (typ='R'     ,statut='o',fr="Hauteur en cm de la 1ere partie intermédiaire du bouchon"),
+  Rayon1PartieIntermediaire1Bouchon   = SIMP (typ='R'     ,statut='o',fr="Rayon en cm de la 1ere partie intermédiaire du bouchon"),
+  Hauteur2PartieIntermediaire2Bouchon = SIMP (typ='R'     ,statut='o',fr="Hauteur en cm de la 2eme partie intermédiaire du bouchon"),
+  Rayon2PartieIntermediaire2Bouchon   = SIMP (typ='R'     ,statut='o',fr="Rayon en cm de la 2eme partie intermédiaire du bouchon"),
+  RegionSousPlaqueHauteurBouchon      = SIMP (typ='R'     ,statut='o',fr="Hauteur en cm de la region sous plaque"),
+  RegionSurPlaqueHauteurBouchon       = SIMP (typ='R'     ,statut='o',fr="Hauteur en cm de la region au-dessus de la plaque"),
+  Rayon3BouchonRegionPlaque           = SIMP (typ='R'     ,statut='o',fr="Rayon en cm du bouchon au niveau de la plaque"),
+  HauteurSupport                      = SIMP (typ='R'     ,statut='o',fr="Hauteur en cm du support des bouchons"),
+  MasseGrappe                         = SIMP (typ='R'     ,statut='o',fr="Masse en g de la grappe bouchon"),
+  Materiau                            = SIMP (typ=Materiau,statut='o',fr="Materiau de la grappe bouchon",defaut='ACIER')
+ ) ;  # Fin GRAPPE_BOUCHON_ASSEMBLAGE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ELEMENTS_ASSEMBLAGE : Classe de définition des éléments associes a l'assemblage combustible REP
+#
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+#ELEMENTS_ASSEMBLAGE = OPER (nom="ELEMENTS_ASSEMBLAGE",op=0,sd_prod=ElementsAssemblage,
+#
+#  fr  = "Definition des elements associes a l'assemblage",
+#  ang = "Definition of the fuel assembly associated elements",
+#  GrappeBouchon         = SIMP (typ=GrappeBouchonAssemblage,statut='o'),
+#  CrayonsAbsorbants     = SIMP (typ=ElementsAbsorbants,statut='o'),
+#  GrappesCommande       = SIMP (typ=ElementsGrappeCommande,statut='o')
+# ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classes CONDITION_LIMITE elementaires :     Classes de definition de Conditions limites elementaires
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+VIDE = OPER (nom="VIDE",op=0,sd_prod=Vide,   niveau = 'ConditionsLimites',
+             fr  = "Condition aux limites de vide",
+             ang = "Void boundary condition" ) ;
+REFLEXION_ISOTROPE = OPER (nom="REFLEXION_ISOTROPE",op=0,sd_prod=ReflexionIsotrope, niveau = 'ConditionsLimites',
+                           fr  = "Condition aux limites de reflexion isotrope",
+                           ang = "Isotropic Reflexion boundary condition" ) ;
+REFLEXION_SPECULAIRE = OPER (nom="REFLEXION_SPECULAIRE",op=0,sd_prod=ReflexionSpeculaire, niveau = 'ConditionsLimites',
+                             fr  = "Condition aux limites de reflexion speculaire",
+                             ang = "Specular Reflexion boundary condition" ) ;
+ALBEDO  = OPER (nom="ALBEDO",op=0,sd_prod=Albedo,   niveau = 'ConditionsLimites',
+                fr  = "Condition aux limites d'albedo",
+                ang = "Albedo boundary condition",
+                albedo = SIMP (typ='R',statut='o',max='**',fr="Valeurs des albedos") ) ;
+TRANSLATION = OPER (nom="TRANSLATION",op=0,sd_prod=Translation, niveau = 'ConditionsLimites',
+                    fr  = "Condition aux limites de translation",
+                    ang = "Translation boundary condition",
+                    Vecteur = SIMP (typ=Vecteur,statut='o',fr="Axe de translation") ) ;
+ROTATION = OPER (nom="ROTATION",op=0,sd_prod=Rotation,   niveau = 'ConditionsLimites',
+                fr  = "Condition aux limites de rotation",
+                ang = "Rotational boundary condition",
+                Centre  = SIMP (typ=Point  ,statut='o',fr="Centre de la rotation"),
+                Vecteur = SIMP (typ=Vecteur,statut='o',fr="Axe de rotation"),
+                Angle   = SIMP (typ='R'    ,statut='o',fr="Angle de rotation",defaut=90.) ) ;
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITION_LIMITE_SPECIALE :  Classe de definition de Conditions limites sur les surfaces elementaires de la geometrie
+#                                      modifiant la CL generale
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITION_LIMITE_SPECIALE = OPER (nom="CONDITION_LIMITE_SPECIALE",op=0,sd_prod=SpecialeConditionLimite,
+                                    niveau = 'ConditionsLimites',
+  fr  = "Condition limite particuliere qui sera plaquee sur la geometrie",
+  ang = "Special boundary condition added to the geometry",
+  Type = SIMP (typ=(Vide,ReflexionIsotrope,ReflexionSpeculaire, Albedo, Translation, Rotation),statut='o',
+               fr="Type de condition limite a appliquer aux surfaces listees"),
+  ZonesApplication = SIMP (typ=(Segment,ArcCercle,Conique),max='**',statut='o',
+                           fr="Liste des segments ou surfaces sur lesquels porte la condition limite")
+ ) ;  # Fin CONDITION_LIMITE_SPECIALE
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITION_LIMITE_GENERALE : Classe de definition des conditions limites de l'objet geometrique complet
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITION_LIMITE_GENERALE = OPER (nom="CONDITION_LIMITE_GENERALE",op=0,sd_prod=GeneraleConditionLimite,
+                                    niveau = 'ConditionsLimites',
+  fr  = "Condition limite a la surface externe de la geometrie complete",
+  ang = "Boundary condition for the complete geometry",
+  ZoneCalculee              = NUPL (statut='f',min=2,max=2,fr="Droites ou plans delimitant la zone de calcul",
+                                    elements = (SIMP (typ=(Droite,Plan)), SIMP (typ='TXM',into=('Plus','Moins')))),
+  ParDefautCondition        = SIMP (typ=(Vide, ReflexionIsotrope, ReflexionSpeculaire, Albedo),
+                                    defaut=ReflexionIsotrope,
+                                    statut='f',
+                                    fr="Condition limite par defaut"),
+  ParticulieresConditions   = NUPL (fr       = "Conditions particulieres modifiant localement la condition limite par defaut",
+                                    statut   = 'f', max = '**',
+                                    elements = (SIMP (typ='TXM',into=('X-','X+','Y-','Y+','Z-','Z+','R+','X','Y','Z')),
+                                                SIMP (typ=(Vide,ReflexionIsotrope,ReflexionSpeculaire, Albedo, Translation, Rotation)))),
+  SupplementairesConditions = SIMP (typ    = SpecialeConditionLimite,
+                                    statut = 'f', max = '**',
+                                    fr     = "Conditions limites non exprimables avec les donnees precedentes")
+ ) ;  # Fin CONDITION_LIMITE_GENERALE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POSITION_ASSEMBLAGE_COMBUSTIBLE : Classe de definition de la position des assemblages combustibles dans un REP
+#                                           Reperes (bataille navale ou autre) et
+#                                           Coordonnees cartesiennes entieres des assemblages combustibles pour un type de palier
+#                                           Origine des coordonnees en bas a gauche d'un systeme en xy
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POSITION_ASSEMBLAGE_COMBUSTIBLE = OPER (nom="POSITION_ASSEMBLAGE_COMBUSTIBLE",op=0,sd_prod=PositionAssemblageCombustible,
+        niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Position des assemblages combustibles",
+  ang = "Position of fuel assemblies",
+  NbAssemblagesCombustibles = SIMP (typ='I',statut='o',defaut=157,fr="Nombre d'assemblages combustibles positionnes"),
+  regles = (UN_PARMI('PositionReseau', 'Positions'),),
+  PositionReseau = SIMP (typ=CorrespondanceReperePositionReseau,statut="f",fr="Objet donnant la correspondance entre Repere et Coordonnees entieres des assemblages"),
+  Positions      = NUPL (max='**',statut='f',
+                         elements=(SIMP (typ='TXM',fr="Repere alphanumerique arbitraire de l'assemblage"),
+                                   SIMP (typ='I'  ,fr="Premiere Coordonnee entiere de l'assemblage"),
+                                   SIMP (typ='I'  ,fr="Seconde  Coordonnee entiere de l'assemblage")))
+ ) ;  # Fin POSITION_ASSEMBLAGE_COMBUSTIBLE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POSITION_INSTRUMENTATION_INTERNE : Classe de definition de la position des assemblages instrumentes dans le c\9cur d'un REP
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POSITION_INSTRUMENTATION_INTERNE = OPER (nom="POSITION_INSTRUMENTATION_INTERNE",op=0,sd_prod=PositionInstrumentationInterne,
+        niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Definition de la position des assemblages instrumentes",
+  ang = "Definition of neutron flux detector position",
+# TypePalier                = SIMP (typ='TXM',max='**',statut='o'),
+  NbAssemblagesInstrumentes = SIMP (typ='I',statut='o',fr="Nombre d'assemblages instrumentes"),
+  Positions                 = NUPL (
+      max      = '**',
+      statut   = 'o',
+      elements = (SIMP (typ='TXM',fr= "Type d'instrumentation (CFM, Collectron, ou Autre)"),
+                  SIMP (typ='I',min=2,max=2,fr= "Coordonnees entieres de l'assemblage instrumente dans le reseau")))
+ ) ;  # Fin POSITION_INSTRUMENTATION_INTERNE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe IMPLANTATION_GRAPPES_COMMANDE : Classe de definition de l'implantation des grappes de commande pour un type de schema de grappe (REP)
+#                                         Donnees de la position (coordonnees entieres en xy), du type de grappe et du groupe d'appartenance
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+IMPLANTATION_GRAPPES_COMMANDE = OPER (nom="IMPLANTATION_GRAPPES_COMMANDE", op=0, sd_prod=ImplantationGrappesCommande,
+        niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Position radiale des grappes de commande pour un schema d'implantation particulier",
+  ang = "Control rod cluster radial positions and types",
+  TypeSchema      = SIMP (typ='TXM',statut='o',fr="Identificateur arbitraire du type de schema"),
+  NbTotalGrappes  = SIMP (typ='I'  ,statut='o',fr="Nombre total de grappes du schema"),
+  PositionsEtType = NUPL (max='**' ,statut='o',
+                          elements=(SIMP (typ='TXM',statut='o',fr="Nom du groupe de grappes"),
+                                    SIMP (typ='I'  ,statut='o',fr="Nombre de grappes du groupe"),
+                                    SIMP (typ='TXM',statut='o',fr="Type de grappes (exemple : '8B', '12B', '24B')"),
+                                    SIMP (typ='I'  ,statut='o',max='**',fr="Coordonnees entieres des grappes dans le reseau coeur")))
+ ) ;  # Fin IMPLANTATION_GRAPPES_COMMANDE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe STRUCTURES_INTERNES_REACTEUR : Classe de definition des structures internes d'un coeur de REP
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+STRUCTURES_INTERNES_REACTEUR = OPER (nom="STRUCTURES_INTERNES_REACTEUR", op=0, sd_prod=StructuresInternesReacteur,
+        niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Definition des structures internes d'un c\9cur REP",
+  ang = "Definition of a PWR core internal structures",
+  PlaqueInferieureCoeur   = FACT (
+      Epaisseur = SIMP (typ='R',statut='o',fr="Epaisseur de la plaque inferieure du coeur en cm"),
+      Materiau  = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau de la plaque inferieure du coeur"),
+      Trous     = NUPL (
+          max      = '**',
+          elements = (
+              SIMP (typ='I',                               fr="Nombre de trous dont on donne les dimensions"),
+              SIMP (typ='TXM',into=('Rayon','Cotes'),      fr="Mot-cle indiquant si on donne le rayon ou les cotes"),
+              SIMP (typ='R',min=2,max=2,                   fr="Rayons ou cotes des trous en cm"),
+              SIMP (typ='TXM',into=('Hauteur','Epaisseur'),fr="Mot-cle indiquant l'entree de la hauteur du trou"),
+              SIMP (typ='R',                               fr="Hauteur du trou en cm")))),
+  PlaqueSuperieureCoeur   = FACT (
+      Epaisseur = SIMP (typ='R',                               fr="Epaisseur de la plaque superieure du coeur en cm"),
+      Materiau  = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau  de la plaque superieure du coeur"),
+      Trous     = NUPL (
+          max      = '**',
+          elements = (
+              SIMP (typ='I',                               fr="Nombre de trous dont on donne les dimensions"),
+              SIMP (typ='TXM',into=('Rayon','Cotes'),      fr="Mot-cle indiquant si on donne le rayon ou les cotes"),
+              SIMP (typ='R',min=2,max=2,                   fr="Rayons ou cotes des trous en cm"),
+              SIMP (typ='TXM',into=('Hauteur','Epaisseur'),fr="Mot-cle indiquant l'entree de la hauteur du trou"),
+              SIMP (typ='R',                               fr="Hauteur du trou en cm")))),
+  CloisonnementCoeur      = FACT (
+      Epaisseur             = SIMP (typ='R',                                fr="Epaisseur du cloisonnement du coeur"),
+      Materiau              = SIMP (typ=Materiau,statut='f',defaut='ACIER', fr="Materiau  du cloisonnement du coeur"),
+      DimensionsInterieures = NUPL (
+          max      = '**',
+          elements = (
+              SIMP (typ='I',                                      fr="Nombre d'assemblages dans la rangee"),
+              SIMP (typ='TXM',into=('Assemblages','Assemblies'),  fr="Mot-cle suivant le nombre d'assemblages"),
+              SIMP (typ='TXM',into=('Largeur','Cote'),            fr="Mot-cle precedant la largeur interieure du cloisonnement"),
+              SIMP (typ='R',                                      fr="Largeur interieure du cloisonnement en cm"),
+              SIMP (typ='TXM',into=('NbJeuCloisonGrille','NbJeu'),fr="Mot-cle precedant le nombre de jeux CloisonGrille"),
+              SIMP (typ='I',                                      fr="Nombre de jeux CloisonGrille"))),
+      TrousDepressurisation = NUPL (elements=(SIMP (typ='I',      fr="Nombre de trous de depressurisation"),
+                                              SIMP (typ='TXM',into=('Rayon','Radius'),fr="Mot-cle precedant la valeur du rayon des trous"),
+                                              SIMP (typ='R',fr="Rayon des trous de depressurisation en cm"))),
+      TemperatureMoyenne    = SIMP (typ='R',fr="Temperature Moyenne du cloisonnement en Celsius")),
+  RenfortsInternes        = FACT (statut='f',
+      Nombre                      = SIMP (typ='I',max='**',statut='o',fr="Liste des nombres de chaque type de renfort interne"),
+      Epaisseur                   = SIMP (typ='R',max='**',statut='o',fr="Nombre de renforts internes pour chaque type de renfort"),
+      Materiau                    = SIMP (typ=Materiau,max='**',statut='f',defaut='ACIER',fr="Materiau de chaque type de renfort"),
+      NbTrousDepressurisation     = SIMP (typ='I',max='**',statut='o',fr="Nombre de trous dans chaque type de renfort"),
+      RayonsTrousDepressurisation = SIMP (typ='R',max='**',statut='o',fr="Rayons des trous dans chaque type de renfort en cm"),
+      TemperatureMoyenne          = SIMP (typ='R',statut='f',fr="Temperature moyenne des renforts internes en Celsius")),
+  EnveloppeVirole        = FACT (statut='f',
+      RayonInterne       = SIMP (typ='R',statut='o',fr="Rayon interne de l'enveloppe du coeur en cm"),
+      RayonExterne       = SIMP (typ='R',statut='o',fr="Rayon externe de l'enveloppe du coeur en cm"),
+      Materiau           = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau de l'enveloppe du coeur"),
+      TemperatureMoyenne = SIMP (typ='R',statut='f',fr="Temperature moyenne de l'enveloppe du coeur en Celsius")),
+  Boucliers              = FACT (statut='f',
+      RayonInterne       = SIMP (typ='R',statut='o',fr="Rayon interne des boucliers thermiques du coeur en cm"),
+      RayonExterne       = SIMP (typ='R',statut='o',fr="Rayon externe des boucliers thermiques du coeur en cm"),
+      Materiau           = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau des boucliers thermiques du coeur"),
+      Secteurs           = NUPL (max='**',statut='f',elements=(
+                                 SIMP (typ='R',statut='o',fr="Angle en degres du debut du secteur du bouclier / axe Ox"),
+                                 SIMP (typ='R',statut='o',fr="Angle en degres du secteur du bouclier"))),
+      TemperatureMoyenne = SIMP (typ='R',statut='f',fr="Temperature moyenne en Celsius des boucliers du coeur")),
+  Cuve                   = FACT (statut='f',
+      RayonInterne       = SIMP (typ='R',statut='o',fr="Rayon interne de la cuve en cm"),
+      RayonExterne       = SIMP (typ='R',statut='o',fr="Rayon externe de la cuve en cm"),
+      Materiau           = SIMP (typ=Materiau,statut='f',defaut='ACIER',fr="Materiau de la cuve"),
+      TemperatureMoyenne = SIMP (typ='R',statut='f',fr="Temperature moyenne en Celsius de la cuve"))
+ ) ; # Fin STRUCTURES_INTERNES_REACTEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PRESSURISEUR : Classe de definition d'un pressuriseur REP (Valeurs par defaut pour un CP2 900)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PRESSURISEUR = OPER (nom="PRESSURISEUR", op=0, sd_prod=Pressuriseur, niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Donnees d'un pressuriseur REP",
+  ang = "Definition of a PWR pressurizor",
+  TmNominale            = SIMP (typ='R',statut='o',defaut=345.0  ,fr="Temperature nominale en Celsius dans le pressuriseur"),
+  Volume                = SIMP (typ='R',statut='o',defaut=39.865 ,fr="Volume total du pressuriseur en m3"),
+  VolumeHaut            = SIMP (typ='R',statut='o',defaut=37.196 ,fr="Volume d'eau au niveau haut du pressuriseur en m3"),
+  VolumeBas             = SIMP (typ='R',statut='o',defaut=2.597  ,fr="Volume d'eau au niveau bas du pressuriseur en m3"),
+  DiametreExterne       = SIMP (typ='R',statut='o',defaut=235.   ,fr="Diametre externe du pressuriseur en cm"),
+  Hauteur               = SIMP (typ='R',statut='o',defaut=1280.  ,fr="Hauteur du pressuriseur en cm"),
+  Pression              = SIMP (typ='R',statut='o',defaut=172.37 ,fr="Pression de calcul du pressuriseur en bars"),
+  CapaciteChaufferette  = SIMP (typ='R',statut='o',defaut=1440.  ,fr="Capacite des chaufferettes du pressuriseur en kW"),
+  NbChaufferettes       = SIMP (typ='I',statut='o',defaut=60     ,fr="Nombre de chaufferettes du pressuriseur"),
+  MasseAVide            = SIMP (typ='R',statut='o',defaut=78.    ,fr="Masse a vide du pressuriseur en tonnes"),
+  MasseEnService        = SIMP (typ='R',statut='o',defaut=95.    ,fr="Masse du pressuriseur en service normal en tonnes"),
+  PressionDecharge      = SIMP (typ='R',statut='o',defaut=162.   ,fr="Pression d'ouverture de la decharge du pressuriseur en bars"),
+  PressionSoupape       = SIMP (typ='R',statut='o',defaut=171.5  ,fr="Pression de tarage des soupapes de surete du pressuriseur en bars"),
+  VolumeDecharge        = SIMP (typ='R',statut='o',defaut=37.    ,fr="Volume total du reservoir de decharge du pressuriseur en m3"),
+  VolumeliquideDecharge = SIMP (typ='R',statut='o',defaut=25.5   ,fr="Volume de liquide du reservoir de decharge du pressuriseur en fct normal en m3")
+ ) ;  # Fin PRESSURISEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe GENERATEUR_VAPEUR : Classe de definition d'un generateur de vapeur REP (Valeurs par defaut pour un CP2 900) 
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+GENERATEUR_VAPEUR = OPER (nom="GENERATEUR_VAPEUR", op=0, sd_prod=GenerateurVapeur, niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Donnees d'un generateur de vapeur REP",
+  ang = "Definition of a PWR Steam Generator",
+  HauteurTotale         = SIMP (typ='R',statut='o',defaut=2064.8 ,fr="Hauteur totale d'un GV en cm"),
+  DiametreMaximum       = SIMP (typ='R',statut='o',defaut=446.8  ,fr="Diametre maximum d'un GV en cm"),
+  DiametreMinimum       = SIMP (typ='R',statut='o',defaut=343.4  ,fr="Diametre minimum d'un GV en cm"),
+  NbTubes               = SIMP (typ='I',statut='o',defaut=3330   ,fr="Nombre de tubes d'un GV"),
+  TubeDiametre          = SIMP (typ='R',statut='o',defaut=2.222  ,fr="Diametre des tubes d'un GV en cm"),
+  TubeEpaisseur         = SIMP (typ='R',statut='o',defaut=0.127  ,fr="Epaisseur des tubes d'un GV en cm"),
+  PasReseau             = SIMP (typ='R',statut='o',defaut=3.254  ,fr="Pas du reseau des tubes d'un GV en cm"),
+  LongueurTube          = SIMP (typ='R',statut='o',defaut=963.7  ,fr="Longueur droite des tubes d'un GV en cm"),
+  SurfaceEchange        = SIMP (typ='R',statut='o',defaut=4700.  ,fr="Surface d'échange d'un GV en m2"),
+  PlaqueEpaisseur       = SIMP (typ='R',statut='o',defaut=53.4   ,fr="Epaisseur de la plaque tubulaire d'un GV en cm"),
+  PlaqueDiametre        = SIMP (typ='R',statut='o',defaut=345.4  ,fr="Diametre de la plaque tubulaire d'un GV en cm"),
+  NbEntretoises         = SIMP (typ='I',statut='o',defaut=8          ,fr="Nombre de plaques entretoises d'un GV"),
+  MasseAVide            = SIMP (typ='R',statut='o',defaut=300.   ,fr="Masse a vide d'un GV en tonnes"),
+  MasseFctNormal        = SIMP (typ='R',statut='o',defaut=364.   ,fr="Masse en fonctionnement normal d'un GV en tonnes"),
+  MasseFaisceau         = SIMP (typ='R',statut='o',defaut=51.5   ,fr="Masse du faisceau tubulaire d'un GV en tonnes"),
+  ViroleSupEpaisseur    = SIMP (typ='R',statut='o',defaut=9.4    ,fr="Epaisseur de la virole superieure d'un GV en cm"),
+  ViroleInfEpaisseur    = SIMP (typ='R',statut='o',max=3,defaut=(8.4,7.4),fr="Epaisseur(s) de la virole inferieure d'un GV en cm"),
+  MateriauEntretroises  = SIMP (typ=Materiau,statut='o',defaut='ACIER'  ,fr="Materiau des plaques entretoises d'un GV"),
+  MateriauTube          = SIMP (typ=Materiau,statut='o',defaut='INCONEL',fr="Materiau des tubes du faisceau d'un GV"),
+  GeomReseau            = SIMP (typ='TXM',statut='o',defaut='Carre',into=('Carre','Triangulaire'),
+                                fr="Type de geometrie du reseau des tubes d'un GV")
+ ) ;  # Fin GENERATEUR_VAPEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POMPE_PRIMAIRE : Classe de definition d'une pompe primaire REP (Valeurs par defaut pour un CP2 900)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POMPE_PRIMAIRE = OPER (nom="POMPE_PRIMAIRE", op=0, sd_prod=PompePrimaire, niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Donnees d'une pompe primaire REP",
+  ang = "Definition of a PWR primary pomp",
+  Type                = SIMP (typ='TXM',statut='o', defaut='93-D7'     ,fr="Type de pompe"),
+  TensionNominale     = SIMP (typ='R'  ,statut='o', defaut=6600.       ,fr="Tension nominale en Volts d'une pompe primaire"),
+  VitesseRotation     = SIMP (typ='I'  ,statut='o', defaut=1485                ,fr="Vitesse de rotation tours/mn ? d'une pompe primaire"),
+  DebitConception     = SIMP (typ='R'  ,statut='o', defaut=21250.      ,fr="Debit de conception m3/h d'une pompe primaire"),
+  HauteurManometrique = SIMP (typ='R'  ,statut='o', defaut=90.7                ,fr="Hauteur manometrique ds pompes en mCE"),
+  PuissanceFroid      = SIMP (typ='R'  ,statut='o', defaut=6600.       ,fr="Puissance absorbee a froid sur l'arbre de la pompe en kW"),
+  PuissanceChaud      = SIMP (typ='R'  ,statut='o', defaut=5000.       ,fr="Puissance absorbee a chaud sur l'arbre de la pompe en kW"),
+  PuissanceNominale   = SIMP (typ='R'  ,statut='o', defaut=5300.       ,fr="Puissance absorbee nominale par moteur en kW"),
+  TensionMinimale     = SIMP (typ='R'  ,statut='o', defaut=0.75                ,fr="Tension minimale de démarrage en fraction de la tension nominale"),
+  Masse               = SIMP (typ='R'  ,statut='o', defaut=93.9                ,fr="Masse d'une pompe primaire en tonnes avec huile et eau"),
+  HauteurTotale       = SIMP (typ='R'  ,statut='o', defaut=8.1         ,fr="Hauteur totale d'une pompe primaire en cm"),
+  Inertie             = SIMP (typ='R'  ,statut='o', defaut=3730.       ,fr="Inertie des pieces tournantes en kg.m2"),
+  DebitInjection      = SIMP (typ='R'  ,statut='o', defaut=1800.       ,fr="Debit d'injection aux joints en l/h")
+ ) ;  # Fin POMPE_PRIMAIRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CARACTERISTIQUES_PALIER : Classe de definition des donnees generales d'un type de palier de reacteur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CARACTERISTIQUES_PALIER = OPER (nom="CARACTERISTIQUES_PALIER",op=0,sd_prod=CaracteristiquesPalier,
+        niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Donnees generales pour un type de palier de reacteur",
+  ang = "General data for a particular type of nuclear reactor",
+  TypePalier                     = SIMP (typ='TXM',statut='o',fr="Identificateur du type de palier"),
+  PositionCombustible            = SIMP (typ=PositionAssemblageCombustible ,statut='o',
+                                         fr="Objet definissant la position des assemblages dans le coeur"),
+  PositionDetecteur              = SIMP (typ=PositionInstrumentationInterne,statut='o',
+                                         fr="Objet definissant la position des assemblages instrumentes"),
+  StructuresInternes             = SIMP (typ=StructuresInternesReacteur    ,statut='o',
+                                         fr="Objet definissant les structures internes du reacteur"),
+  Pressuriseur                   = SIMP (typ=Pressuriseur                  ,statut='f',
+                                         fr="Objet contenant les caracteristiques du pressuriseur du reacteur"),
+  Generateur                     = SIMP (typ=GenerateurVapeur              ,statut='f',
+                                         fr="Objet contenant les caracteristiques des GV du reacteur"),
+  Pompes                         = SIMP (typ=PompePrimaire                 ,statut='f',
+                                         fr="Objet contenant les caracteristiques des pompes primaires du reacteur"),
+  CoeurPElectriqueNominle        = SIMP (typ='R',statut='o',defaut= 900.,
+                                         fr="Puissance electrique nominale de coeur en MW"),
+  CoeurPThermiqueNominale        = SIMP (typ='R',statut='o',defaut=2775.,
+                                         fr="Puissance thermique nominale de coeur en MWth"),
+  ChaudierePThermiqueNominale    = SIMP (typ='R',statut='o',defaut=2785.,
+                                         fr="Puissance thermique nominale de la chaudiere MWth"),
+  ChaudierePmaxThermique         = SIMP (typ='R',statut='o',defaut=2905.,
+                                         fr="Puissance thermique maximum de la chaudiere MWth"),
+  NbBouclesPrimaires             = SIMP (typ='I',statut='o',defaut=3,
+                                         fr="Nombre de boucles primaires"),
+  ProportionDebitCoeurCuve       = SIMP (typ='R',statut='o',defaut=0.97,
+                                         fr="Rapport du debit coeur / debit cuve"),
+  PressionNominalePrimaire       = SIMP (typ='R',statut='o',defaut=155.,
+                                         fr="Pression nominale du circuit primaire en bars"),
+  PerteChargeCoeurNominale       = SIMP (typ='R',statut='o',defaut=1.24,
+                                         fr="Perte de charge nominale dans le coeur en bars"),
+  PerteChargeCuveNominale        = SIMP (typ='R',statut='o',defaut=2.34,
+                                         fr="Perte de charge nominale dans la cuve en bars"),
+  TmNomSortieCuveEntreeGV        = SIMP (typ='R',statut='o',defaut=323.2,
+                                         fr="Temperature nominale sortie Cuve / Entree GV en Celsius"),
+  TmNomSortieGVEntreePPrimaire   = SIMP (typ='R',statut='o',defaut=285.8,
+                                         fr="Temperature nominale sortie GV / Entree Pompe primaire en Celsius"),
+  TmNomSortiePPrimaireEntreeCuve = SIMP (typ='R',statut='o',defaut=286.,
+                                         fr="Temperature nominale sortie Pompe primaire / Entree Cuve en Celsius"),
+  TmEntreeCoeurPnulle            = SIMP (typ='R',statut='o',defaut=286.0,
+                                         fr="Temperature en Celsius du moderateur a puissance nulle a l'entree du coeur"),
+  TmEntreeCoeurPnom              = SIMP (typ='R',statut='o',defaut=286.4,
+                                         fr="Temperature en Celsius du moderateur a puissance nominale a l'entree du coeur"),
+  TmSortieCoeurPnom              = SIMP (typ='R',statut='o',defaut=324.7,
+                                         fr="Temperature en Celsius du moderateur a puissance nominale a l'entree du coeur"),
+  TmMoyenneCoeurPnom             = SIMP (typ='R',statut='o',defaut=305.3,
+                                         fr="Temperature moyenne en Celsius du moderateur dans le coeur actif"),
+  TmMoyenneCuvePnom              = SIMP (typ='R',statut='o',defaut=305.0,
+                                         fr="Temperature moyenne en Celsius du moderateur dans la cuve"),
+  TmMoyenneReflecteurPnom        = SIMP (typ='R',statut='o',defaut=296.0,
+                                         fr="Temperature moyenne en Celsius du reflecteur radial"),
+  TcMoyennePnom                  = SIMP (typ='R',statut='o',defaut=600.0,
+                                         fr="Temperature moyenne en Celsius du combustible dans le coeur"),
+  TcCentrePnom                   = SIMP (typ='R',statut='o',defaut=1830.,
+                                         fr="Temperature au centre Pastille en Celsius en fct nominal"),
+  SectionEcoulementCoeur         = SIMP (typ='R',statut='o',defaut=3.86,
+                                         fr="Section d'ecoulement du moderateur dans le coeur en m2"),
+  SurfaceEchangeCoeur            = SIMP (typ='R',statut='o',defaut=4520.,
+                                         fr="Surface d'échange dans le coeur en m2"),
+  VolumeEauCuve                  = SIMP (typ='R',statut='o',defaut=105.8,
+                                         fr="Volume d'eau primaire m3 dans la cuve (coeur et internes en place)"),
+  VolumeEauPrimaire              = SIMP (typ='R',statut='o',defaut=215.,
+                                         fr="Volume total d'eau primaire m3)"),
+  VolumeBallonRCV                = SIMP (typ='R',statut='o',defaut=7.,
+                                         fr="Volume du ballon RCV m3)"),
+  DebitThermohConception         = SIMP (typ='R',statut='o',defaut=63325.,
+                                         fr="Debit thermohydraulique de conception dans la cuve en m3/h"),
+  DebitMecaniqueConception       = SIMP (typ='R',statut='o',defaut=70920.,
+                                         fr="Debit mecanique de conception dans la cuve en m3/h"),
+  BypassConception               = SIMP (typ='R',statut='o',defaut=7.,
+                                         fr="Pourcentage de debit Conception dans le contournement du coeur en %"),
+  BypassSpin                     = SIMP (typ='R',statut='o',defaut=4.5,
+                                         fr="Pourcentage de debit dans le contournement du coeur en % utilise dans le SPIN"),
+  DebitBestEstimateBoucle        = SIMP (typ='R',statut='o',defaut=21075.,
+                                         fr="Debit best-estimate par boucle en m3/h"),
+  DebitMassiqueNominal           = SIMP (typ='R',statut='o',defaut=47675.,
+                                         fr="Debit massique nominal best-estimate dans la cuve en t/h"),
+  DebitEffMassiqueNominal        = SIMP (typ='R',statut='o',defaut=45530.,
+                                         fr="Debit massique effectif du coeur en t/h"),
+  FluxMoyenChaleurCoeur          = SIMP (typ='R',statut='o',defaut=60.,
+                                         fr="Flux de chaleur moyen dans le coeur W/cm2"),
+  FluxMaxChaleurCoeur            = SIMP (typ='R',statut='o',defaut=128.,
+                                         fr="Flux de chaleur maximal dans le coeur W/cm2"),
+  PlinMoyen                      = SIMP (typ='R',statut='o',defaut=178.,
+                                         fr="Puissance lineique Moyenne en W/cm"),
+  PlinMax                        = SIMP (typ='R',statut='o',defaut=382.,
+                                         fr="Puissance lineique Maximum en W/cm"),
+  FacteurFQN                     = SIMP (typ='R',statut='o',defaut=2.69,
+                                         fr="Facteur de point chaud de conception FQN"),
+  FacteurFDH                     = SIMP (typ='R',statut='o',defaut=1.55,
+                                         fr="Facteur total d'élévation d'enthalpie FDH de conception"),
+  RECMinimalNominal              = SIMP (typ='R',statut='o',defaut=1.78,
+                                         fr="REC minimal en fonctionnement nominal"),
+  VitesseMoyenneModerCoeur       = SIMP (typ='R',statut='o',defaut=4.72,
+                                         fr="Vitesse moyenne dans le coeur en m/s"),
+  VitesseMassiqueModerCoeur      = SIMP (typ='R',statut='o',defaut=328.,
+                                         fr="Vitesse massique moyenne dans le coeur en g/s.cm2"),
+  VitesseRechaufRefroid          = SIMP (typ='R',statut='o',defaut=28.,
+                                         fr="Vitesse normale maximale de rechauffage ou de refroidissementnormal en Celsius/h"),
+  VitesseMaxRechaufRefroid       = SIMP (typ='R',statut='o',defaut=56.,
+                                         fr="Vitesse maximale de rechauffage ou de refroidissementnormal en Celsius/h")
+ ) ;  # Fin CARACTERISTIQUES_PALIER
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SITE_NUCLEAIRE_EDF : Classe de definition d'un site nucleaire EDF (Tranches, paliers et numero EPN)
+#  Le numero EPN correspond au code de la tranche, cette donnee figure dans le fichier ASN transmis par la Division Combustible
+#  decrivant chaque recharge combustible (et identifie donc la tranche a laquelle elle est destinee)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SITE_NUCLEAIRE = OPER (nom="SITE_NUCLEAIRE", op=0, sd_prod=SiteNucleaire, niveau = 'ElementsTechnologiquesReacteur',
+  fr  = "Definition d'un site nucleaire EDF et de ses tranches",
+  ang = "Definition of a nuclear power plant site",
+  NomSite  = SIMP (typ='TXM',statut='o',fr="Nom du site nucleaire",defaut='TRICASTIN'),
+  Tranches = NUPL (max='**',elements=( SIMP (typ='I'  ,statut='o',fr="Numero de la tranche nucleaire"),
+                                       SIMP (typ='TXM',statut='o',fr="Trigramme de la tranche nucleaire"),
+                                       SIMP (typ=CaracteristiquesPalier,statut='o',fr="Type de palier"),
+                                       SIMP (typ='I'  ,statut='o',fr="Numero EPN de la tranche")))
+ ) ;   # Fin SITE_NUCLEAIRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ESPACE_VARIATIONS :  Classe de definition de l'espace des parametres variables et sa discretisation.
+#                              De manière generale, un parametre peut valoriser un attribut quelconque de plusieurs objets. L'association
+#                              Parametre-Attributs se fait par l'attribut ObjetsVariations de la classe definie ci-dessous
+#                              de maniere purement textuelle sous la forme 'NomObjet.NomAttribut(.NomSousAttribut)[Index]'.
+#                              L'attribut variable peut etre un objet, auquel cas les valeurs de variation sont les noms textuels
+#                              des objets a remplacer successivement dans chaque calcul elementaire.
+#                              Il n'y a pas de verification de coherence au niveau de la saisie des donnees mais immediatement apres
+#                              lors de l'interpretation de l'ensemble de l'objet DonneesCasEtude .
+#                              Definition de la methode de balayage de cet espace (Suite d'options complementaires) :
+#                              1) ParametresIndependants :     Calculs independants en donnant successivement a chacun
+#                                                               des parametres leurs valeurs individuelles
+#                              2) CoinsDomaine :               Rajout des calculs aux limites extremes du domaine
+#                              3) BordsDomaine :               Rajout des calculs aux bords du domaine
+#                              4) Grilles2D :                  Rajout des calculs sur les grilles 2D
+#                                                               passant par un point de reference
+#                              5) CasParticuliers :            Rajout de points specifiques de calcul
+#                              6) EspaceComplet :              Balayage complet du domaine des parametres
+#                              Par defaut, le cas de reference est le premier cas defini soit dans CasParticuliers si les cas sont fournis
+#                              de cette façon, soit par les premieres valeurs rentrees pour chacun des paramètres,
+#                              sauf entree explicite de l'attribut CasReference
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ESPACE_VARIATIONS = OPER (nom="ESPACE_VARIATIONS", op=0, sd_prod=EspaceVariations, niveau = 'ParametresCalcul',
+  fr  = "Definition de l'espace des parametres et de leurs variations",
+  ang = "Definition of feedback or variable parameters",
+  regles = (AU_MOINS_UN ('Variations', 'CasParticuliers'),),
+  Variations       = NUPL (max='**',statut='f',
+                           elements=( SIMP (typ='TXM',statut='o',fr="Nom arbitraire du parametre a faire varier"),
+                                      SIMP (typ=('R','I','TXM'),max='**',statut='o',fr="Valeurs discretes de variation du parametre"))),
+  ObjetsVariations = NUPL (max='**',statut='o',fr="Association Parametre et attributs des objets du modele de donnees",
+                           elements=( SIMP (typ='TXM',statut='o',fr="Nom arbitraire du parametre a faire varier"),
+                                      SIMP (typ='TXM',max='**',statut='o',fr="Objets, attributs et index associes au parametre"))),
+  MethodeBalayage = SIMP (
+      typ    = 'TXM',
+      max    = '**',
+      defaut = 'ParametresIndependants',
+      into   = ('ParametresIndependants','CoinsDomaine','BordsDomaine','Grilles2D','CasParticuliers','EspaceComplet'),
+      statut = 'o'),
+  TypeVariation   = SIMP (typ='TXM',defaut='Absolu',into=('Relatif','Absolu'),statut='o'),
+  CasParticuliers = NUPL (max='**',statut='f',fr="Liste des couples (Parametre, Valeur du parametre) pour les cas particuliers",
+                          elements=(SIMP (typ='TXM',fr="Nom arbitraire du parametre a faire varier"),
+                                    SIMP (typ=('I','R','TXM'),fr="Valeur du parametre"))),
+  CasReference    = NUPL (max='**',statut='f',fr="Liste des couples (Parametre, Valeur du parametre) pour le cas de reference",
+                          elements=(SIMP (typ='TXM',fr="Nom arbitraire du parametre a faire varier"),
+                                    SIMP (typ=('I','R','TXM'),fr="Valeur du parametre")))
+ ) ;   # Fin ESPACE_VARIATIONS
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_IRRADIATION : Classe de definition des valeurs d'irradiation intervenant dans les phases de calcul ou d'edition
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_IRRADIATION = OPER (nom="DONNEES_IRRADIATION",op=0,sd_prod=DonneesIrradiation,
+        niveau = 'ParametresCalcul',
+  fr  = "Definition des donnees d'irradiation",
+  ang = "Definition of burnup values",
+  regles = (AU_MOINS_UN ('Irradiations', 'Refroidissement','InsertionGrappeX'),),
+  Unite           = SIMP (typ='TXM',defaut='MWj/t',into=('MWj/t','Jours'),statut='o',fr="Unite pour les irradiations"),
+  Minimum         = SIMP (typ='R',defaut=0.,statut='f',fr="Irradiation du debut de calcul"),
+  Maximum         = SIMP (typ='R',defaut=100000.,statut='f',fr="Irradiation maximum des calculs"),
+  Irradiations    = SIMP (typ='R',max='**',defaut=0.,statut='f',fr="Liste previsionnelle des irradiations"),
+  Refroidissement = FACT (statut='f',fr="Definition de la periode de refroidissement",
+                          Instants = SIMP (typ='R',max='**',fr="Irradiations MWj/t de debut de refroidissement du combustible"),
+                          Duree    = SIMP (typ=('R','I'),max='**',fr="Nombre de jours de refroidissement correspondant aux instants de refroidissement")
+                         ),
+  InsertionGrappeX     = FACT (statut='f',fr="Simulation d'une insertion de grappe dans un assemblage seul (Mode X)",
+       TypeGrappe            = SIMP (typ='TXM',     statut='o',fr="Type de grappe inseree"),
+       IrradiationInsertion  = SIMP (typ=('R','I'), statut='o',max='**',fr="Irradiations MWj/t de debut d'insertion de la grappe"),
+       IrradiationExtraction = SIMP (typ=('R','I'), statut='o',max='**',fr="Irradiations MWj/t d'extraction de la grappe"),
+       CoteAxiale            = SIMP (typ='R',       statut='f',fr="Cote axiale (cm) de la limite inferieure de la grappe aux instants d'insertion")
+                               )
+ ) ;  # Fin DONNEES_IRRADIATION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITIONS_FONCTIONNEMENT_MOYENNES : Classe de definition des conditions de fonctionnement Reacteur pour une campagne donnee
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITIONS_FONCTIONNEMENT_MOYENNES = OPER (nom="CONDITIONS_FONCTIONNEMENT_MOYENNES",op=0,sd_prod=ConditionsFonctionnementMoyennes,
+        niveau = 'ParametresCalcul',
+  fr  = "Definition des conditions de fonctionnement moyennes pour une campagne donnee",
+  ang = "Definition of a campaign operating conditions ",
+  IdentificateurCampagne       = SIMP (typ='TXM',statut='f',fr="Identificateur de la campagne"),
+  DescriptifFonctionnement     = SIMP (typ='TXM',statut='f',fr="Descriptif textuel arbitraire du mode de fonctionnement"),
+  regles = (UN_PARMI ('PuissanceThermiqueCoeur', 'PuissanceRelativeCoeur'),),
+  PuissanceThermiqueCoeur      = SIMP (typ='R',statut='o',defaut=2775.,fr="Puissance thermique du reacteur en MWth"),
+  PuissanceRelativeCoeur       = SIMP (typ='R',statut='o',defaut=100. ,fr="Puissance relative du reacteur en %"),
+  FluxSurfaciquePn             = SIMP (typ='R',statut='o',defaut=59.74 ,fr="Flux a la surface du crayon en W/cm2"),
+  PressionEntreePrimaire       = SIMP (typ='R',statut='o',defaut=155.1,fr="Pression du moderateur en bars a l'entree du coeur actif"),
+  PressionSortiePrimaire       = SIMP (typ='R',statut='o',defaut=155.1,fr="Pression moyenne du moderateur en bars en sortie du coeur actif"),
+  TitreMoyenBore               = SIMP (typ='R',statut='o',defaut= 500.,fr="Titre moyen en ppm en bore dans le moderateur"),
+#
+  TmEntreePnulle               = SIMP (typ='R',statut='o',defaut=286.0,fr="Temperature en Celsius du moderateur a puissance nulle a l'entree du coeur"),
+  TmEntreePnom                 = SIMP (typ='R',statut='o',defaut=286.4,fr="Temperature en Celsius du moderateur a puissance nominale a l'entree du coeur"),
+  DeltaTmEntreeSortiePnom      = SIMP (typ='R',statut='o',defaut= 39.0,fr="Ecart en Celsius de temperature entre entree et sortie du coeur a puissance nominale"),
+  TmMoyenneCoeurPnom           = SIMP (typ='R',statut='o',defaut=305.3,fr="Temperature moyenne en Celsius du moderateur dans le coeur actif"),
+  TmMoyenneCuvePnom            = SIMP (typ='R',statut='f',defaut=305.0,fr="Temperature moyenne en Celsius du moderateur dans la cuve"),
+  TmMoyenneReflecteurPnom      = SIMP (typ='R',statut='f',defaut=296.0,fr="Temperature moyenne en Celsius du reflecteur radial"),
+  TcMoyennePnom                = SIMP (typ='R',statut='f',defaut=600.0,fr="Temperature moyenne en Celsius du combustible dans le coeur"),
+#
+  PositionGrappeHaute          = SIMP (typ='I',statut='f',defaut=225  ,fr="Position haute des grappes, en nombre de pas extraits"),
+  DebitMesureParBoucle         = FACT (statut='f',max='**',fr="Debit primaire mesure sur chaque boucle en m3/h",
+                                       DateEssai = SIMP (typ='I',min=3,max=3,fr="Date J M A de l'essai"),
+                                       Debits    = SIMP (typ='R',min=3,max=4,fr="Valeurs des debits primaire par boucle en m3/h")
+                                       ),
+  NbTubesGVBouches             = SIMP (typ='I',statut='f',min=3,max=4,fr="Nombre de tubes bouches pour chaque GV")
+ ) ; # Fin CONDITIONS_FONCTIONNEMENT_MOYENNES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CONDITIONS_TRANSITOIRE : Classe de definition des conditions de fonctionnement Reacteur pour une campagne donnee en transitoire
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CONDITIONS_TRANSITOIRE = OPER (nom="CONDITIONS_TRANSITOIRE", op=0, sd_prod=ConditionsTransitoire, niveau = 'ParametresCalcul',
+  fr  = "Definition des conditions de fonctionnement en transitoire pour une campagne donnee",
+  ang = "Definition of a campaign dynamic operating conditions ",
+  IdentificateurCampagne          = SIMP (typ='TXM',max='**',statut='f',fr="Identificateur de la campagne"),
+  NeutroniqueDiscretisation       = SIMP (typ='R',max='**',statut='f',fr="Liste des pas de temps successifs pour le calcul neutronique (en s)"),
+  ThermohydrauliqueDiscretisation = SIMP (typ='R',statut='f',fr="Liste des pas de temps successifs pour le calcul thermohydraulique (en s)"),
+  DureeTransitoire                = SIMP (typ='R',statut='o',fr="Duree totale en s du transitoire a simuler"),
+  PuissanceThermiqueRelative      = SIMP (typ='R',max='**',statut='f',fr="Couples (Instant en s, Puissance thermique relative du reacteur en %)"),
+  PressionPrimaireEntree          = SIMP (typ='R',max='**',statut='f',fr="Couples (Instant en s, Pression du moderateur en bars a l'entree du coeur actif)"),
+  TitreBore                       = SIMP (typ='R',max='**',statut='f',fr="Couples (Instant en s, Titre en bore dans le moderateur (en ppm))"),
+  DebitPrimaire                   = SIMP (typ='R',max='**',statut='f',fr="Couples (Instant en s, Debit primaire dans le coeur en m3/h)")
+# PositionsGrappes                = SIMP (typ=PositionAxialeGrappesCommande,statut='f')
+# PositionsGrappes                = FACT (max='**',statut='f',
+#                                         RepereGrappeouGroupe = SIMP (typ='TXM',fr="Repere du groupe de grappes ou de la grappe"),
+#                                         Positions            = SIMP (typ='R',max='**',
+#                                                                      fr="Couples (Instant en s, Position dans le coeur en nombre de pas extraits)"))
+ ) ;  # Fin CONDITIONS_TRANSITOIRE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe POSITION_AXIALE_GRAPPES_COMMANDE : Classe de definition des positions axiales des grappes de commande
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+POSITION_AXIALE_GRAPPES_COMMANDE = OPER (nom="POSITION_AXIALE_GRAPPES_COMMANDE",op=0,sd_prod=PositionAxialeGrappesCommande,
+        niveau = 'ParametresCalcul',
+  fr  = "Positions axiales des grappes de commande pour une campagne donnee ou pour un transitoire",
+  ang = "Control rod cluster axial positions for a campaign or for a static or dynamic calculation",
+  TypeDonnee    = SIMP (typ='TXM',statut='o',defaut='Statique',into=('Statique','Cinetique','Campagne'),
+                        fr="Indication de dependance ou non d'un parametre Temps ou Irradiation"),
+  UnitePosition = SIMP (typ='TXM',statut='o',defaut='PasExtrait',into=('PasExtrait', 'cm', 'Recouvrement')),
+  BlocStatique  = BLOC (condition = "TypeDonnee=='Statique'",
+                        PositionStatique = NUPL (max='**',statut='o',elements =(
+                                          SIMP (typ='TXM',fr="Nom du groupe de grappes ou de la grappe"),
+                                          SIMP (typ=('R','I'),fr="Position axiale"))
+                                          )
+                       ),
+  BlocCinetique  = BLOC (condition = "TypeDonnee=='Cinetique'",
+                         PositionCinetique = FACT (max='**',statut='o',
+                                           NomGrappeouGroupe = SIMP (typ='TXM',fr="Nom du groupe de grappes ou de la grappe"),
+                                           CotesAxiales      = SIMP (typ=('R','I'),max='**',
+                                                                     fr="Liste des Couples (Instant en s, Position axiale)")
+                                           )
+                        ),
+  BlocCampagne  = BLOC (condition = "TypeDonnee=='Campagne'",
+                        PositionCampagne = FACT (max='**',statut='o',
+                                          NomGrappeouGroupe = SIMP (typ='TXM',fr="Nom du groupe de grappes ou de la grappe"),
+                                          CotesAxiales      = SIMP (typ=('R','I'),max='**',
+                                                                    fr="Liste des Couples (Irradiation MWj/t, Position axiale)")
+                                          )
+                        )
+  ) ;  # Fin POSITION_AXIALE_GRAPPES_COMMANDE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DATES_CLES_CAMPAGNE : Classe de definition des dates cles d'une campagne et de sa longueur
+#  Definition des attributs :
+#  LongueurNaturelleExperimentaleMWj_t : Irradiation moyenne coeur depuis le debut de la campagne jusqu'au moment du passage en
+#                                        prolongation de campagne (valeur experimentale transmise par le site). En cas d'anticipation,
+#                                        c'est la valeur recalee qui y est stockee.
+#  LongueurNaturelleRecaleeMWj_t : Longueur naturelle previsionnelle estimee en cours de campagne (par le suivi du bore,
+#                                  a chaque carte de flux)
+#  LongueurNaturelleTheoriqueMWj_t : Longueur naturelle estimee par le code de coeur
+#  LongueurAnticipationJepp : Longueur d'anticipation de campagne en Jours Equivalents Pleine Puissance
+#  LongueurProlongationJepp : Longueur de prolongation de campagne en Jours Equivalents Pleine Puissance
+#  LongueurTotaleExperimentaleMWj_t : Longueur totale de la campagne en MWj/t (Donnee transmise par le site)
+#  TypePlanChargement : Type de plan pour la fluence cuve : Determine par les irradiations des assemblages places sur les axes medians
+#                      et sur les diagonales
+#                      - 3 Assemblages neufs aux bouts des deux axes : Plan Standard
+#                      - 3 Assemblages (Irradie, Neuf, Irradie) ou (Neuf, Irradie, Neuf) sur les axes : Fluence reduite (REP 900 ou N4)
+#                      - 2 assemblages irradies aux bouts des diagonales : Fluence reduite (REP 1300)
+#                      - 3 Assemblages irradies aux bouts des deux axes : Fluence Faible (REP 900 ou N4)
+#                      - 3 Assemblages irradies aux bouts des deux axes et
+#                        2 assemblages irradies aux bouts des diagonales : Faible Fluence Generalisee
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DATES_CLES_CAMPAGNE = OPER (nom="DATES_CLES_CAMPAGNE", op=0, sd_prod=DatesClesCampagne, niveau = 'DonneesEtude',
+  fr  = "Definition des dates cles d'une campagne et de ses longueurs caracteristiques",
+  ang = "Definition of the campaign dates and lengths",
+  IdentificateurCampagne         = SIMP (typ='TXM',statut='o',defaut='CZ101',fr="Identificateur de la campagne"),
+  TypePlanChargement             = SIMP (typ='TXM',statut='f',defaut='FluenceFaible',
+                                         into=('Standard','FluenceReduite','FluenceFaible','FaibleFluenceGeneralisee')),
+  DateDDC                        = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de debut de campagne"),
+  regles                               = (ENSEMBLE ('DatePnom','IrradiationDatePnom'),
+                                   ENSEMBLE ('DateCouplage','IrradiationDateCouplage'),
+                                   ENSEMBLE ('DatePassageEnProlongation','LongueurNaturelleExperimentale'),),
+  DatePnom                       = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A d'atteinte de la puissance nominale"),
+  IrradDatePnom                  = SIMP (typ='R',           statut='f',fr="Irradiation de la campagne a la date d'atteinte de la puissance nominale"),
+  DateCouplage                   = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de couplage au reseau"),
+  IrradDateCouplage              = SIMP (typ='R',           statut='f',fr="Irradiation de la campagne atteinte a la date de couplage au reseau"),
+  DateFDC                        = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de fin de campagne reelle"),
+  LNatTheorique                  = SIMP (typ='R',           statut='f',fr="Longueur naturelle theorique calculee de la campagne en MWj/t"),
+  LNatRecalee                    = SIMP (typ='R',           statut='f',fr="Longueur naturelle recalee calculee de la campagne en MWj/t"),
+  DatePassageEnProlongation      = SIMP (typ='I',min=3,max=3,statut='o',fr="Date J M A de passage en prolongation de campagne"),
+  LnatExperimentale              = SIMP (typ='R',           statut='f',fr="Longueur naturelle mesuree de la campagne en MWj/t"),
+  LongueurAnticipationJepp       = SIMP (typ='R',           statut='f',fr="Nombre de JEPP d'anticipation"),
+  LongueurProlongationJepp       = SIMP (typ='R',           statut='f',fr="Nombre de JEPP de prolongation"),
+  LongueurTotaleExperimentale    = SIMP (typ='R',           statut='f',fr="Longueur totale de la campagne en MWj/t")
+ ) ;  # Fin DATES_CLES_CAMPAGNE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_AUTOPROTECTION : Classe de definition des donnees d'autoprotection du code de reseau
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_AUTOPROTECTION = OPER (nom="OPTIONS_AUTOPROTECTION",op=0,sd_prod=OptionsAutoprotection,
+        niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des donnees d'autoprotection des resonances",
+  ang = "Definition of resonance self shielding data",
+  TypeCombustible          = SIMP (typ='TXM',max='**',statut='o',
+                             fr="Type de combustible auquel s'appliquent ces options d'autoprotection"),
+  MethodeAutoprotection    = SIMP (typ='TXM',into=('SanchezCoste','SousGroupes'),defaut='SanchezCoste',statut='f'),
+  EnergieSupAutoprotection = SIMP (typ='R',defaut=55.5952,statut='f',
+                                   fr="Energie superieure eV du premier groupe d'autoprotection, gpe 38 dans le cas a 99 groupes"),
+  IsotopesAutoproteges  = NUPL (
+      max      = '**',
+      elements = (SIMP (typ=Isotope,statut='o',fr="Nom de l'isotope a autoproteger"),
+                   SIMP (typ='TXM',into=('Moyenne','Detaillee','Couronne'),statut='o'),
+                   SIMP (typ='TXM',into=('Materiaux','Cellules'),statut='f',
+                         fr="Choix d'autoprotection sur les materiaux ou les cellules"),
+                   SIMP (typ='TXM',max='**',statut='f',fr="Liste des types de materiaux ou de cellules concernes"))),
+  Irradiations  = SIMP (typ='R',max='**',statut='f',fr="Irradiations ou se font les calculs d'autoprotection"),
+  PoisonIrradiations  = SIMP (typ='R',max='**',statut='f',
+                        fr="Irradiations ou se font les calculs d'autoprotection des poisons integres au combustible")
+  ) ;   # Fin OPTIONS_AUTOPROTECTION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_CODE_RESEAU : Classe de definition des options du code de reseau
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_CODE_RESEAU = OPER (nom="OPTIONS_CODE_RESEAU", op=0, sd_prod=OptionsCodeReseau, niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des options des codes de calcul de reseau",
+  ang = "Definition of lattice code options",
+  MethodeCalcul             = SIMP (typ='TXM',defaut='Multicellule',statut='o',
+                                    into=('Multicellule','Pij','Caracteristiques','Monte-Carlo/TRIPOLI','Monte-Carlo/MCNP'),
+                                    fr="Methode de calcul"),
+  ProcedureBibliothequeBase = SIMP (typ='TXM',defaut='CEA93_G99_V5',statut='o',
+                                    into=('CEA93_G99_V0','CEA93_G99_V2','CEA93_G99_V3','CEA93_G99_V4',
+                                          'CEA93_G99_V5','CEA93_G99_V6','CEA93_G172_V4'),
+                                    fr="Nom de la procedure Bibliotheque"),
+  CorrectionTransport       = SIMP (typ='TXM',defaut='APOLLO',statut='o',into=('APOLLO','WIMS','Non'),
+                                    fr="Demande ou non de correction de transport (de type APOLLO ou WIMS)"),
+  TypeBibliothequeBase      = SIMP (typ='TXM',defaut='APOLLIB_2',statut='o',
+                                    into=('APOLLIB_1','APOLLIB_2','DRAGON','NJOY_89','NJOY_91','WIMS_D4','WIMS_AECL'),
+                                    fr="Format de la bibliotheque de donnees nucleaires multigroupes"),
+  TableProbabilites         = SIMP (typ='TXM',defaut='CALENDF',statut='o',into=('CALENDF','SUBG','Non'),
+                                    fr="Calcul des tables de probabilites mathematiques CALENDF ou physiques SUBG"),
+  RegionPeripheriqueCellule = SIMP(typ='R',defaut=0.,statut='o',
+                                    fr="Proportion de Volume de la zone peripherique des cellules cylindrisees"),
+  OptionMulticellule        = SIMP (typ='TXM',defaut='ROTH',statut='o',into=('ROTH','MULTICELLULE'),
+                                    fr="Option du calcul multicellule"),
+  OptionPij                 = SIMP (typ='TXM',defaut='&UP0 &ROTH',statut='o',into=('&UP0 &ROTH','&UP0 &HETE','&UP1 &HETE'),
+                                    fr="Option du calcul des Pij"),
+  ParametresIntegration     = SIMP (typ='TXM',defaut='MAIL_INT 7 7 7 7',statut='f',
+                                    fr="Donnees du maillage d'integration en heterogene"),
+  ProportionNoyauxParDefaut = SIMP (typ='R',defaut=1.E-12,statut='o',
+                                    fr="Valeur initiale des concentrations des noyaux lourds non definis"),
+  OptionLaplacienB2         = SIMP (typ='TXM',defaut='CRITIQUE',statut='o',into=('CRITIQUE','NUL','IMPOSE'),
+                                    fr="Option du calcul des fuites homogenes"),
+  LaplacienB2               = SIMP (typ='R',defaut=0.,statut='o',fr="Valeur initiale du laplacien du calcul des fuites"),
+  OrdreAnisotropie          = SIMP (typ='I',defaut=1 ,statut='o',fr="Ordre d'anisotropie des sections de transfert"),
+  Autoprotection            = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),
+                                    fr="Calcul d'autoprotection ou non"),
+  BlocAutoprotection  = BLOC (condition = "Autoprotection=='Oui'",
+        DonneesAutoprotection     = SIMP (typ=OptionsAutoprotection,statut='f',max='**',
+                                    fr="Nom des objets decrivant les isotopes a autoproteger et les options associees"),
+        RecalculAutoprotection    = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),
+                                    fr="Demande ou non de recalcul de l'autoprotection")),
+  Equivalence               = SIMP (typ='TXM',defaut='Non',statut='o',into=('Oui','Non'),
+                                    fr="Demande ou non de calcul d'equivalence"),
+  NbGroupesEquivalence      = SIMP (typ='I',max='**',defaut=(2,6,16),statut='o',
+                                    fr="Liste des nombres de groupes des calculs d'equivalence"),
+  EditionSaphyb             = SIMP (typ='TXM',defaut='Non',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition des bibliotheques de type Saphyb"),
+  EditionAssemblage         = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition des sections efficaces homogeneisees sur l'ensemble du domaine"),
+  EditionCellule            = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition des sections efficaces homogeneisees par cellule"),
+  EditionFluxDetaille       = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition des flux moyens sur l'ensemble du domaine sur la maillage multigroupe detaille"),
+  EditionMilieu             = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition des compositions isotopiques detaillees sur tous les milieux de calcul"),
+  EditionTrimaran           = SIMP (typ='TXM',defaut='Non',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition des sections efficaces pour TRIPOLI multigroupe"),
+  SpectreNeutrons           = SIMP (typ='TXM',defaut='Prompt',statut='o',into=('Prompt','Retarde'),
+                                    fr="Type de spectre de neutrons pour le calcul de transport"),
+  ListeIsotopesEdites       = SIMP (typ='TXM',statut='f',max='**',fr="Liste des initiales des symboles des isotopes a editer"),
+  FichierBickley            = SIMP (typ='TXM',statut='f',fr="Nom du fichier des fonctions Bickley"),
+  EditionIsotopeHomogene    = SIMP (typ='TXM',defaut='Non',statut='o',into=('Oui','Non'),
+                                    fr="Demande d'edition de constitution d'isotopes homogeneises sous forme APOLLIB"),
+  BlocHomoge  = BLOC (condition = "EditionIsotopeHomogene=='Oui'",
+        RepertoireHomoge          = SIMP (typ='TXM',statut='f',
+                                    fr="Nom du repertoire du fichier des isotopes homogenes sous forme APOLLIB"),
+        FichierHomoge             = SIMP (typ='TXM',statut='f',fr="Nom du fichier des isotopes homogenes sous forme APOLLIB")),
+  Executable                = NUPL (statut   = 'f', elements = (
+                                    SIMP (typ='TXM',fr="Systeme d'exploitation"),
+                                    SIMP (typ='TXM',fr="Nom du fichier executable"))),
+  ProceduresApollo2         = FACT (statut='f',
+                                    OptionsListing  = SIMP (typ='TXM',statut='f',fr="Commandes Gibiane des options d'edition listing"),
+                                    Evolution       = SIMP (typ='TXM',statut='f',fr="Procedure d'evolution"),
+                                    Reprise         = SIMP (typ='TXM',statut='f',fr="Procedure de reprise"),
+                                    Equivalence     = SIMP (typ='TXM',statut='f',fr="Procedure d'equivalence"),
+                                    EditionCellule  = SIMP (typ='TXM',statut='f',fr="Procedure d'edition par cellule"),
+                                    EditionHomoge   = SIMP (typ='TXM',statut='f',fr="Procedure d'edition des isotopes Homoge")
+                                    ),
+  ProceduresSunset          = FACT (statut='f',
+                                    Evolution       = SIMP (typ='TXM',statut='f',fr="Procedure d'evolution"),
+                                    Reprise         = SIMP (typ='TXM',statut='f',fr="Procedure de reprise")
+                                    )
+  ) ;  # Fin OPTIONS_CODE_RESEAU
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_CODE_COEUR_STATIQUE : Classe de definition des options du code de coeur en statique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_CODE_COEUR_STATIQUE = OPER (nom="OPTIONS_CODE_COEUR_STATIQUE", op=0, sd_prod=OptionsCodeCoeurStatique, niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des options des codes de calcul de coeur en statique",
+  ang = "Definition of core code static options",
+  DeltaReactivite = SIMP (typ='TXM',statut='o',defaut='DeltaRo',into=('DeltaRo','LogKeff'),
+                          fr="Methode de calcul de variation de reactivite entre deux etats"),
+  OxMaillageFlux = SIMP (typ=Maillage1D,statut='o',fr="Maillage du calcul de flux suivant l'axe x d'un assemblage"),
+  OyMaillageFlux = SIMP (typ=Maillage1D,statut='o',fr="Maillage du calcul de flux suivant l'axe y d'un assemblage"),
+  OzMaillageFlux = SIMP (typ=Maillage1D,statut='o',fr="Maillage du calcul de flux suivant l'axe z d'un assemblage"),
+  ReactiviteVisee           = SIMP (typ='R',defaut=  0.,statut='o',fr="Valeur en pcm de la reactivite visee en calcul critique"),
+  EfficaciteBoreEstimee     = SIMP (typ='R',defaut= -6.,statut='o',fr="Valeur estimee en pcm/ppm de l'efficacite du bore"),
+  TitreBoreInitiale         = SIMP (typ='R',defaut=600.,statut='o',fr="Valeur estimee en ppm du titre en bore du moderateur"),
+  Factorisation             = SIMP (typ='TXM',defaut='Non',statut='o',into=('Coeur2D','Assemblage','Non'),
+                                    fr="Option ou non de factorisation par le flux fin Coeur ou Assemblage"),
+  AxialTypeReflecteurs      = SIMP (typ='TXM',defaut='Equivalent',statut='o',into=('Equivalent','Homogeneise')),
+  RadialTypeReflecteurs     = SIMP (typ='TXM',defaut='Equivalent',statut='o',into=('Equivalent','Homogeneise')),
+  ReflAxiauxEquivalents     = BLOC (condition = "TypeReflecteursAxiaux=='Equivalent'",
+                                    ReflecteurInferieur = SIMP (typ=SectionsReflecteur,statut='o'),
+                                    MaillageInferieur   = SIMP (typ=Maillage1D,statut='o'),
+                                    ReflecteurSuperieur = SIMP (typ=SectionsReflecteur,statut='o'),
+                                    MaillageSuperieur   = SIMP (typ=Maillage1D,statut='o')
+                                    ),
+  ReflAxiauxHomogeneises = BLOC (condition = "TypeReflecteursAxiaux=='Homogeneise'",
+                                 AxialAbscisses = SIMP (typ='R'     ,statut='o',max='**'),
+                                 AxialMateriaux = SIMP (typ=Materiau,statut='o',max='**')
+                                 ),
+  ReflRadialEquivalent    = BLOC (condition = "TypeReflecteurRadial=='Equivalent'",
+                                  ReflecteurRadial = SIMP (typ=SectionsReflecteur,statut='o'),
+                                  Epaisseur        = SIMP (typ='R'     ,statut='o')
+                                  ),
+  ReflRadialHomogeneise   = BLOC (condition = "TypeReflecteurRadial=='Homogeneise'",
+                                  RadialAbscisses = SIMP (typ='R'     ,statut='o',max='**'),
+                                  RadialMateriaux = SIMP (typ=Materiau,statut='o',max='**')
+                                  ),
+  ApproximationMigration    = SIMP (typ='TXM',defaut='SPn',statut='o',into=('SPn','Sn','Diffusion')),
+  BlocSPn = BLOC (condition = "ApproximationTransport=='SPn'",
+                        SPnOrdreApproximation = SIMP (typ='I'  ,defaut=1,statut='o',fr="Ordre n impair de la methode SPn"),
+                        SPnElementFini        = SIMP (typ='TXM',defaut='RTN0',statut='o',into=('RTN0','RTN1'),fr="Type d'element fini"),
+                        SPnMaxIterDiffusion   = SIMP (typ='I'  ,defaut=1,into=(1,2,3,4,5),statut='o',
+                                                      fr="Nombre maximal d'iterations de diffusion")
+                       ),
+  BlocSn = BLOC (condition = "ApproximationTransport=='Sn'",
+                        SnOrdreApproximation = SIMP (typ='I'  ,defaut=4,statut='o',fr="Ordre n pair de la methode Sn"),
+                        SnElementFini        = SIMP (typ='TXM',defaut='RTN',statut='o',into=('RTN','BDM'),fr="Type d'element fini"),
+                        SnAcceleration       = SIMP (typ='TXM',defaut='Oui',statut='o',into=('Oui','Non'),fr="Acceleration par la diffusion"),
+                        SnMaxIterDiffusion   = SIMP (typ='I'  ,defaut=20,statut='o',fr="Nombre maximal d'iterations de calcul de diffusion")
+                       ),
+  BlocDiff = BLOC (condition = "ApproximationTransport=='Diffusion'",
+                        MaxIterFlux     = SIMP (typ='I',defaut= 5       ,statut='o',fr="Maximum d'iterations du calcul de flux"),
+                        MaxIterKeff     = SIMP (typ='I',defaut=50       ,statut='o',fr="Maximum d'iterations du calcul de keff"),
+                        PrecPuissance   = SIMP (typ='R',defaut=0.005    ,statut='o',fr="Precision sur la puissance"),
+                        PrecKeff        = SIMP (typ='R',defaut=0.0001   ,statut='o',fr="Precision sur keff")
+                       ),
+  PrecisionValeurPropre       = SIMP (typ='R',defaut=1.E-5,statut='o',fr="Precision sur la valeur propre"),
+  PrecisionFlux               = SIMP (typ='R',defaut=1.E-3,statut='o',fr="Precision sur le flux"),
+  PrecisionMultigroupe        = SIMP (typ='R',defaut=1.E-6,statut='o',fr="Precision de la resolution multigroupe"),
+  PrecisionIterTermeDiffusion = SIMP (typ='R',defaut=1.E-6,statut='o',fr="Precision des iterations sur le terme de diffusion"),
+  MaxIterEnergie              = SIMP (typ='I',defaut=1,statut='o',
+                                      fr="Nombre maximal d'iterations pour la resolution Gauss Seidel en energie"),
+  MaxIterTermeDiffusion       = SIMP (typ='I',defaut=1,statut='o',fr="Nombre maximal d'iterations sur le terme de diffusion"),
+  MaxIterDecompositionDomaine = SIMP (typ='I',defaut=1,statut='o',fr="Nombre d'iterations de decomposition de domaine"),
+  MaxIterKeffAvantCR          = SIMP (typ='I',defaut=1,statut='o',fr="Nombre de calculs de keff avant appel aux contre-reactions")
+  ) ;  # Fin OPTIONS_CODE_COEUR_STATIQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_CODE_COEUR_CINETIQUE : Classe de definition des options du code de coeur en cinetique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_CODE_COEUR_CINETIQUE = OPER (nom="OPTIONS_CODE_COEUR_CINETIQUE", op=0, sd_prod=OptionsCodeCoeurCinetique, niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des options des codes de calcul de coeur en cinetique",
+  ang = "Definition of core code kinetic options",
+  NombrePrecurseurs              = SIMP (typ='I',defaut=6,statut='o',fr="Nombre de groupes de precurseurs"),
+  GestionAutomatiquePasCinetique = SIMP (typ='TXM',defaut='Oui',into=('Oui','Non'),statut='o',
+                                         fr="Gestion automatique du pas de temps du calcul cinetique"),
+  BlocSansGestionPas             = BLOC (condition = "GestionAutomatiquePasCinetique=='Non'",
+                                         DefinitionPasDeTemps = SIMP (typ='R',max='**',statut='o',
+                                         fr="Liste de couples (pas de temps, limite superieure de validite du pas de temps)"),
+                                               ),
+  PrecisionIterationFluxPrecurseurs    = SIMP (typ='R',defaut=1.E-6,statut='o',fr="Precision sur les iterations Flux Precurseurs"),
+  PrecisionParametreGestionAutomatique = SIMP (typ='R',defaut=0.0008,statut='o',fr="Precision sur les iterations Flux Precurseurs"),
+  MaxIterationsFluxPrecurseurs         = SIMP (typ='I',defaut=50,statut='o',fr="Nombre maximal d'iterations Flux Precurseurs"),
+  ThetaSchemaCinetique                 = SIMP (typ='R',defaut=0.5,statut='o',fr="Valeur du parametre theta du schema cinetique")
+  ) ;  # Fin OPTIONS_CODE_COEUR_CINETIQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_THERMIQUE_THERMOHYDRAULIQUE : Classe de definition des options du code de coeur en cinetique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_THERMIQUE_THERMOHYDRAULIQUE = OPER (nom="OPTIONS_THERMIQUE_THERMOHYDRAULIQUE", op=0, sd_prod=OptionsThermiqueThermohydraulique, niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des options des modules de calcul de coeur thermique et thermohydraulique simplifiees",
+  ang = "Definition of thermohydraulic and thermic module options",
+  HGaineFluide                        = SIMP (typ='TXM',defaut='DITTUS_BOELTER',into=('FLICA','DITTUS_BOELTER'),statut='o',
+                                              fr="Option du Coefficient d'echange gaine-fluide (flux < au flux critique)"),
+  HGaineFluideEbullition              = SIMP (typ='TXM',defaut='BST',into=('BST','TONG'),statut='o',
+                                              fr="Option du Coefficient d'echange gaine-fluide (Ebullition en film)"),
+  OptionHGapConstantTransitoire       = SIMP (typ='TXM',defaut='Non',into=('Non','Oui'),statut='o',
+                                                                     fr="Option de constance du coefficient d'echange JeuPastilleGaine"),
+  OptionHGap                          = SIMP (typ='TXM',defaut='HGAP_88',into=('EJECTION','TUO2','PLIN_BU','FIXE','HGAP_88'),statut='o',
+                                              fr="Option de calcul du Coefficient d'echange du jeu pastille-gaine"),
+  BlocHgapTuo2                        = BLOC (condition = "CoefficientEchangeJeuPastilleGaine=='TUO2'",
+                                              Tuo2Initiale = SIMP (typ='R',statut='o',
+                                                                   fr="Temperature initiale combustible pour le calcul du coefficient d'echange") ),
+  BlocHgapFixe                        = BLOC (condition = "CoefficientEchangeJeuPastilleGaine=='FIXE'",
+                                              Hgap = SIMP (typ='R',statut='o',defaut=5850.,fr="Valeur imposée du coefficient d'echange") ),
+  ConductiviteCombustible             = SIMP (typ='TXM',defaut='HGAP_88',into=('STORA','WESTINGHOUSE','HGAP_88','COMETHE'),statut='o',
+                                                       fr="Option du Coefficient de conductivite du combustible"),
+  CapaciteCalorifiqueCombustible      = SIMP (typ='TXM',defaut='UO2_FRAMATOME',into=('UO2_BATES','UO2_FRAMATOME','UO2_THYC'),statut='o',
+                                                       fr="Option du Coefficient de conductivite du combustible"),
+  MateriauGaine                       = SIMP (typ='TXM',defaut='ZIRCALOY_CYRANO',into=('ZIRCALOY_CYRANO', 'ZIRCALOY_THYC', 'INCOLOY_800',
+                                                               'CHROMESCO_3', 'INOX_16', 'INOX_321', 'INOX_347', 'INOX_347_OXYDE',
+                                                               'INCONEL_600', 'NICKEL_75', 'PLATINE'),statut='o',
+                                              fr="Materiau de la gaine pour le calcul du roCp de la gaine et de sa conductivite"),
+  FluxCritique                        = SIMP (typ='R',defaut=180.E4,statut='o',fr="Valeur du flux critique en W/m2"),
+  FractionPuissanceCombustible        = SIMP (typ='R',defaut=0.974,statut='o',fr="Fraction de la puissance degagee dans le combustible"),
+  Creusement                          = SIMP (typ='TXM',defaut='Uniforme',statut='o',
+                                              into=('Uniforme','Runnals','Framatome','Twinkle','Mox','EDF','Specifique')),
+  BlocCreusement                      = BLOC (condition = "Creusement=='Specifique'",
+                                              RayonsCreusement = SIMP (typ='R',statut='o',fr="Rayons de definition du creusement de puissance (nz)"),
+                                              IrradiationsCreusement = SIMP (typ='R',statut='o',fr="Irradiations de definition du creusement de puissance (nbu)"),
+                                              EnrichissementsCreusement = SIMP (typ='R',statut='o',fr="Enrichissements de definition du creusement de puissance (nen)"),
+                                              PuissancesUO2 = SIMP (typ='R',max='**',statut='f',fr="Valeurs des creusements de puissance P(nz,nbu,nen) dans une pastille UO2"),
+                                              PuissancesMOX = SIMP (typ='R',statut='f',fr="Valeurs des creusements de puissance P(nz,nbu,nen) dans une pastille MOX") ),
+  PastilleDiscretisation              = SIMP (typ='I',defaut=4,statut='o',fr="Nombre de points de discretisation radiale de la pastille combustible"),
+  GaineDiscretisation                 = SIMP (typ='I',defaut=2,statut='o',
+                                              fr="Nombre de points de discretisation radiale de la gaine de la pastille combustible"),
+  ThermiquePrecision                  = SIMP (typ='R',defaut=0.1,statut='o',fr="Precision en Celsius du calcul thermique radiale du crayon"),
+  ThermohydrauliquePrecision          = SIMP (typ='R',defaut=0.01,statut='o',
+                                              fr="Precision en Celsius du calcul thermohydraulique de la temperature du moderateur"),
+  MaxIterThermique                    = SIMP (typ='I',defaut=100,statut='o',
+                                              fr="Nombre maximum d'iterations du calcul de thermique"),
+  MaxIterThermohydraulique            = SIMP (typ='I',defaut=100,statut='o',
+                                              fr="Nombre maximum d'iterations du calcul de thermohydraulique"),
+  MethodeIntegrationThermohydraulique = SIMP (typ='TXM',defaut='Gauss',statut='o',into=('Gauss','NonGauss'),
+                                              fr="Methode d'integration thermohydraulique"),
+  PerteDeCharge                       = SIMP (typ='TXM',defaut='Non',statut='o',into=('Non','Oui'),
+                                              fr="Prise en compte ou non de la perte de charge axiale"),
+  TableEau                            = SIMP (typ='TXM',defaut='Thetis',statut='o',into=('Thetis','Interne'),
+                                              fr="Calcul des caracteristiques du moderateur par THETIS ou par des tables internes")
+ ) ;  # Fin OPTIONS_THERMIQUE_THERMOHYDRAULIQUE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_CONTRE_REACTIONS_COEUR : Classe de definition des options du code de coeur en cinetique
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_CONTRE_REACTIONS_COEUR = OPER (nom="OPTIONS_CONTRE_REACTIONS_COEUR", op=0, sd_prod=OptionsContreReactionsCoeur, niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des options des modules de calcul de contre-reactions coeur",
+  ang = "Definition of feedback module options",
+  Iter2dCRN            = SIMP (typ='I',defaut=30,statut='o',fr="Nombre maximal d'iterations de contre-reactions en 2D, si 0 pas de CRN"),
+  Iter3dCRN            = SIMP (typ='I',defaut=15,statut='o',fr="Nombre maximal d'iterations de contre-reactions en 3D, si 0 pas de CRN"),
+  CoeffAttenuation     = SIMP (typ='R',defaut=0.8,statut='o',fr="Coefficient d'attenuation des contre-reactions"),
+  PrecisionPuissance   = SIMP (typ='R',defaut=1.E-4,statut='o',fr="Precision sur la puissance a la fin des iterations de contre-reactions"),
+  PrecisionKeff        = SIMP (typ='R',defaut=1.E-5,statut='o',fr="Precision sur keff a la fin des iterations de contre-reactions"),
+  MethodeCalculSection = SIMP (typ='TXM',defaut='TabulationLineaire',into=('Spline1D','SplinenD','TabulationLineaire'),statut='o',
+                               fr="Methode d'interpolation des sections efficaces avec Contre-reactions"),
+  FigerCRN             = SIMP (typ='TXM',statut='f',max='**',fr="Liste des parametres de contre-reactions a figer")
+ ) ;  # Fin OPTIONS_CONTRE_REACTIONS_COEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe OPTIONS_CODES : Classe de definition des options generales et du type de calcul demande
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+OPTIONS_CODES = OPER (nom="OPTIONS_CODES", op=0, sd_prod=OptionsCodes, niveau = 'OptionsCodesCalcul',
+  fr  = "Definition des options des codes de calcul",
+  ang = "Definition of calculation code options",
+  regles = (AU_MOINS_UN('OptionsReseau', 'OptionsStatiqueCoeur', 'OptionsCinetiqueCoeur','OptionsThermo', 'OptionsCRNCoeur'),),
+  OptionsReseau         = SIMP (typ=OptionsCodeReseau                ,statut='f', fr="Options du code de reseau"),
+  OptionsStatiqueCoeur  = SIMP (typ=OptionsCodeCoeurStatique         ,statut='f', fr="Options du code de coeur en statique"),
+  OptionsCinetiqueCoeur = SIMP (typ=OptionsCodeCoeurCinetique        ,statut='f', fr="Options du code de coeur en cinetique"),
+  OptionsThermo         = SIMP (typ=OptionsThermiqueThermohydraulique,statut='f', fr="Options des modules de thermique et thermohydraulique simplifiées)"),
+  OptionsCRNCoeur       = SIMP (typ=OptionsContreReactionsCoeur      ,statut='f', fr="Prise en compte des contre-reactions ou non")
+ ) ;  # Fin OPTIONS_CODES
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESSOURCES_INFORMATIQUES : Classe de definition des ressources de calcul informatiques
+#                                    Cette classe est liee aux possibilites du gestionnaire du traitement par lots et pour le moment
+#                                    les attributs affiches sont dependants de LSF :
+#                                       si on donne un type   de serveur       : bsub -R "type=USPARC" monjob
+#                                       si on donne un modele de serveur       : bsub -R "model=HPK640" monjob
+#                                       si on donne un type   de ressource     : bsub -R "Solaris" monjob
+#                                       si on donne des machines particulieres : bsub -m " Nommachine1 NomMachine2 " monjob
+#                                   Dans le cas des machines particulieres, il est necessaire de fournir aussi le systeme d'exploitation
+#                                   associe (ceci pour distinguer les fichiers necessaires en entree, leurs noms devant contenir
+#                                   le nom du systeme d'exploitation (les fichiers etant differents a priori suivant l'OS utilise
+#                                   et de format non portable)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESSOURCES_INFORMATIQUES = OPER (nom="RESSOURCES_INFORMATIQUES",sd_prod=RessourcesInformatiques,op=0,niveau = 'ConfigurationInformatique',
+  fr    = "Definition des systemes d'exploitation et des calculateurs de l'etude",
+  ang   = "Software operating system and computers used",
+  regles = (UN_PARMI('TypesServeursCibles', 'ModelesServeursCibles','OSCible','CalculateursCibles'),),
+  TypesServeursCibles   = SIMP (typ='TXM',statut='f',max='**',defaut='USPARC' ,into=('SPARC', 'USPARC', 'PWR2', 'HPPA20', 'ALPHA'),
+                                fr="Liste des types de serveurs cibles pour la soumission des calculs"),
+  ModelesServeursCibles = SIMP (typ='TXM',statut='f',max='**',defaut='U2200'  ,into=('SS1000E','U2200','IBM3BT','HPK460','DEC5400','U1140'),
+                                fr="Liste des modeles de serveurs cibles pour la soumission des calculs"),
+  OSCible               = SIMP (typ='TXM',statut='f',         defaut='solaris',into=('solaris','aix','usparc','alpha','hpux'),
+                                fr="Type de ressource cible pour la soumission des calculs"),
+  CalculateursCibles    = NUPL (statut='f',max='**',fr="Liste des noms des calculateurs cibles pour la soumission des calculs",
+                                elements = (SIMP (typ='TXM',statut='o',fr="Nom du calculateur cible"),
+                                            SIMP (typ='TXM',statut='o',fr="Systeme d'exploitation de la machine cible",
+                                                  defaut='solaris',into=('solaris','aix','usparc','alpha','hpux')))
+                                )
+ ) ;  # Fin RESSOURCES_INFORMATIQUES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_CAS_ETUDE :     Classe de definition des caracteristiques globales d'un cas de l'etude
+#                                       Definition de la centrale (site, numero de tranche) et numero de campagne d'irradiation
+#                                       Ces caracteristiques  d'environnement de l'etude doivent permettre de recuperer l'ensemble
+#                                       des parametres de fonctionnement nominales du reacteur sujet de l'etude (creation de
+#                                       bibliotheques ou calcul de coeur)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_CAS_ETUDE = OPER (nom="DONNEES_CAS_ETUDE", op=0, sd_prod=DonneesCasEtude, niveau = 'DonneesEtude',
+  fr  = "Definition de la centrale sujet du cas de l'etude et des options globales du cas",
+  ang = "Definition of the power plant and of the global options of the calculation case",
+  TypeCode               = SIMP (typ='TXM',defaut='Reseau',into=('Reseau','Coeur'),statut='o'),
+  SiteNucleaire          = SIMP (typ=SiteNucleaire,defaut='TRICASTIN',statut='o'),
+  BlocCoeur              = BLOC (condition = "TypeCode=='Coeur'",
+                           NumeroTranche          = SIMP (typ='I',defaut=1,statut='o',fr="Numero de la tranche nucleaire"),
+                           NumeroCampagne         = SIMP (typ='I',defaut=1,statut='o',fr="Numero de la campagne d'irradiation"),
+                           IdentificateurCampagne = SIMP (typ='TXM',defaut='TN101',statut='o',fr="Identificateur de la campagne"),
+                           DatesCampagne          = SIMP (typ=DatesClesCampagne,statut='f',fr="Dates cles de la campagne"),
+                           TypeGestion            = SIMP (typ    = 'TXM',
+                                                          defaut = '370Q',
+                                                          statut = 'f', fr="Type de gestion du combustible",
+                                                          into   = ('310Q','310T','325T','325Q','340Q','345AL',
+                                                                    '370Q','370T','400T','HMOX','MOXNT','TMOX')),
+                           TypeSchemaGrappe       = SIMP (typ    = 'TXM',
+                                                          defaut = '900CPYUO2',
+                                                          statut = 'f',fr="Type de schema d'implantation des grappes",
+                                                          into   = ('900CP0','900CPYUO2INITIAL','900CPYUO2',
+                                                                    '900CPYUO2AL','900CPYMOX','1300','N4')),
+                           TypeEvaluationSurete  = SIMP (typ='TXM',defaut='900STD',statut='f',fr="Type d'evaluation de surete",
+                                                         into=('900STD','900GARANCE','1300STD','1300GEMMES','N4STD')),
+                           ModePilotage          = SIMP (typ='TXM',defaut='G',statut='f',into=('A','G','X'),fr="Mode de pilotage de la tranche"),
+                           ImplantationGrappe    = SIMP (typ=ImplantationGrappesCommande,statut='f',fr="Schema d'implantation des grappes de commande dans le coeur"),
+                           PositionAxialeGrappes = SIMP (typ=PositionAxialeGrappesCommande,statut='f',fr="Positions axiales des grappes de commande"),
+                           PlanChargement        = SIMP (typ=Reseau,statut='o',fr="Plan de chargement du reseau coeur"),
+                           Penalites             = SIMP (typ=PenaliteAssemblage,statut='f',max='**',fr="Liste des objets PenalitesAssemblage"),
+                           ActivitesMesurees     = SIMP (typ=ActivitesExperimentales,statut='f',fr="Carte d'activite experimentale"),
+#                          OptionsStatique       = SIMP (typ=OptionsCodeCoeurStatique,statut='f'),
+#                          OptionsCinetique      = SIMP (typ=OptionsCodeCoeurCinetique,statut='f'),
+                           CodeCalculC           = SIMP (typ='TXM',defaut='CodeSn',statut='o',fr="Type de code de coeur a utiliser")),
+  BlocReseau            = BLOC (condition = "TypeCode=='Reseau'",
+                           Assemblage            = SIMP (typ=(AssemblageType,ReparationAssemblage),statut='o',fr="Objet Assemblage a reparer et a calculer"),
+#                          Options               = SIMP (typ=OptionsCodeReseau,statut='f'),
+                           CodeCalculR           = SIMP (typ='TXM',defaut='SUNSET',statut='o',fr="Code de reseau a utiliser")),
+  Domaines              = SIMP (typ=DecompositionDomaines            ,statut='f',fr="Objet definissant la decomposition de domaines"),
+  ConditionsMoyennes    = SIMP (typ=ConditionsFonctionnementMoyennes ,statut='f',fr="Objet definissant les conditions de fonctionnement moyennes"),
+  Transitoire           = SIMP (typ=ConditionsTransitoire            ,statut='f',fr="Objet contenant les conditions du transtoire"),
+  Variations            = SIMP (typ=EspaceVariations                 ,statut='f',fr="Objet definissant l'espace de variations des parametres d'une etude parametrique"),
+  Irradiations          = SIMP (typ=DonneesIrradiation               ,statut='f',fr="Objet definissant les irradiations du calcul"),
+  Gestion               = SIMP (typ=ParametresCalculGestion              ,statut='f',fr="Parametres du calcul de gestion"),
+  Ajustement            = SIMP (typ=DonneesAjustement                ,statut='f',fr="Parametres d'ajustement du calcul"),
+  Accidents             = SIMP (typ=DonneesAccidents                 ,statut='f',fr="Donnees des calculs d'accidents"),
+  Pilotage              = SIMP (typ=DonneesPilotageGeneral           ,statut='f',fr="Donnees generales de pilotage du reacteur"),
+  Calibrage             = SIMP (typ=CalibrageGroupes                 ,statut='f',fr="Donnees de calibrage des groupes de commande du reacteur"),
+  Stretch               = SIMP (typ=ProlongationCampagne             ,statut='f',fr="Objet definissant la prolongation de campagne"),
+  Bibliotheques         = SIMP (typ=FichierBibliothequeIsotopes      ,statut='f',fr="Fichiers des bibliotheques de donnees de base"),
+  Ressources            = SIMP (typ=RessourcesInformatiques              ,statut='f',fr="Objet definissant les ressources informatiques a utiliser"),
+  ConditionLimite       = SIMP (typ=GeneraleConditionLimite              ,statut='o',fr="Objet definissant les conditions limites"),
+  Options               = SIMP (typ=OptionsCodes                     ,statut='o',fr="Options des codes impliques dans le calcul"),
+  TypeCalcul            = SIMP (typ='TXM',max='**',defaut='Evolution',statut='o',
+                                into=('Evolution','EvolutionMicroscopique','EvolutionRefroidissement','Reprise','Statique','Cinetique',
+                                      'BoreImpose','BoreCritique')     ,fr="Type de calcul demande")
+ ) ;  # Fin DONNEES_CAS_ETUDE
+class resultat(TObjet): pass
+class resultat2(resultat): pass
+CALCUL=OPER(nom="CALCUL",op=10,sd_prod=resultat,
+            niveau = 'Operateurs',
+            materiau=SIMP(typ=Materiau),
+            PRESSION=SIMP(defaut=10000.,typ="R")
+           );
+CALCUL2=OPER(nom="CALCUL2",op=11,sd_prod=resultat2,
+             niveau = 'Operateurs',
+             donnee=SIMP(typ=resultat),
+             materiau=SIMP(typ=Materiau),
+            );
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe SECTIONS_REFLECTEUR : Classe de definition des sections efficaces multigroupes des reflecteurs
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+SECTIONS_REFLECTEUR = OPER (nom="SECTIONS_REFLECTEUR",sd_prod=SectionsReflecteur,op=0,niveau = 'SectionsEfficaces',
+  fr  = "Definition des sections efficaces equivalentes d'un reflecteur",
+  ang = "Equivalent reflector cross sections",
+  NbGroupesEnergie     = SIMP (typ='I'  ,statut='o',defaut=2,fr="Nombre de groupes d'energie"),
+  LimitesEnergie       = SIMP (typ='R'  ,statut='o',defaut=(0.,0.0625,1.E7),max='**',fr="Limites des groupes d'energie"),
+  DeltaLethargie       = SIMP (typ='R'  ,statut='o',max='**',fr="Largeur en lethargie des groupes d'energie"),
+  Sections = FACT (min=1, max='**', statut='o',      
+                   TypeSection  = SIMP (typ='TXM',fr="Type de section efficace",statut='o',
+                                        into=( 'Totale','CorrectionTransport',
+                                               'Absorption','Capture','N2N',
+                                               'CoefficientDiffusionHomogene','CoefficientsDiffusionOrientes',
+                                               'SectionDiffusionTotale','Transfert')),
+                   Valeurs = SIMP (typ='R',min=1,max='**',statut='o',
+                                   fr="Valeurs des sections efficaces pour le reflecteur")
+                   )
+  ) ;  # Fin SECTIONS_REFLECTEUR
+# ----------------------------------------------------------------------------------------------------------------------------------
+#  Classe MACROLIB : Classe de definition des sections efficaces multigroupes
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+MACROLIB = OPER (nom="MACROLIB",sd_prod=Macrolib,op=0,niveau = 'SectionsEfficaces',
+  fr  = "Definition d'une macrolib",
+  ang = "Macrolib Definition",
+  Signature            = SIMP (typ='TXM',statut='o',defaut="MACROLIB",fr="Signature de l'objet MACROLIB"),
+  NbMateriaux          = SIMP (typ='I'  ,statut='o',defaut=1,fr="Nombre de materiaux"),
+  NomsMateriaux        = SIMP (typ='TXM',statut='o',max='**',fr="Noms des materiaux"),
+  OrdreAnisotropieMax  = SIMP (typ='I'  ,statut='o',defaut=1,fr="Ordre d'anisotropie"),
+  MaxIsotopesFissiles  = SIMP (typ='I'  ,statut='o',fr="Nombre maximum d'isotopes fissiles"),
+  NbTypesSections      = SIMP (typ='I'  ,statut='o',fr="Nombre de sections efficaces definies"),
+  CorrectionTransport  = SIMP (typ='TXM',statut='o',defaut='Non',into=('Oui','Non'),fr="Indication de Correction de transport"),
+  NbGroupesPrecurseurs = SIMP (typ='I'  ,statut='o',defaut=6,fr="Nombre de groupes de precurseurs de neutrons retardes"),
+  NbGroupesEnergie     = SIMP (typ='I'  ,statut='o',defaut=2,fr="Nombre de groupes d'energie"),
+  LimitesEnergie       = SIMP (typ='R'  ,statut='o',defaut=(0.,0.0625,1.E7),max='**',fr="Limites des groupes d'energie"),
+  DeltaLethargie       = SIMP (typ='R'  ,statut='o',max='**',fr="Largeur en lethargie des groupes d'energie"),
+  ListeSections        = SIMP (typ='TXM',statut='o',max='**',fr="Liste des sections efficaces decrites dans la Macrolib",
+                               into=('Totale','CorrectionTransport','Spectre','Vitesse',
+                                     'Production','Fission','Energie','Absorption','Capture','N2N',
+                                     'CoefficientDiffusionHomogene','CoefficientsDiffusionOrientes',
+                                     'CoefficientEquivalence','ProductionRetardee','SpectreRetarde',
+                                     'SectionDiffusionTotale','Transfert')),
+  ModeEntreeSections   = SIMP (typ='TXM',statut='o',defaut='ParGroupe',into=('ParGroupe','ParMilieu'),
+                               fr="Choix du mode d'entree des sections par groupe ou par milieu"),
+  SectionsParGroupe    = BLOC (condition = "ModeEntreeSections=='ParGroupe'",
+             SectionsG = FACT (min=1, max='**', statut='o',
+                TypeSectionG = SIMP (typ='TXM',fr="Type de section efficace",statut='o',
+                             into=('Totale','CorrectionTransport','Spectre','Vitesse',
+                                   'Production','Fission','Energie','Absorption','Capture','N2N',
+                                   'CoefficientDiffusionHomogene','CoefficientsDiffusionOrientes',
+                                   'CoefficientEquivalence','ProductionRetardee','SpectreRetarde',
+                                   'SectionDiffusionTotale','Transfert')),
+                Groupes = BLOC (condition = "TypeSection=='Transfert'",
+                        NumerosGroupes = SIMP (typ='I',min=2,max=2,statut='o',
+                                               fr="Numeros des groupes de depart et d'arrivee")),
+                Groupe = BLOC (condition = "TypeSection!='Transfert'",
+                        NumeroGroupe = SIMP (typ='I',statut='o',fr="Numero de groupe d'energie")),
+                BlocAnisotropie = BLOC (condition = "TypeSection=='Transfert' or TypeSection== 'SectionDiffusionTotale'",
+                        OrdreAnisotropie = SIMP (typ='I',statut='o',defaut=1,
+                                                 fr="Ordre d'anisotropie de la section de transfert")),
+                Valeurs = SIMP (typ='R',min=1,max='**',statut='o',
+                                fr="Valeurs des sections efficaces pour tous les materiaux")
+        )
+   ),
+  SectionsParMateriau     = BLOC (condition = "ModeEntreeSections=='ParMateriau'",
+        Materiau  = SIMP (typ='TXM',statut='o',fr="Nom du materiau dont on valorise les sections efficaces"),
+        SectionsM = FACT (min=1, max='**', statut='o',fr="Entree des valeurs de chaque type de section efficace",     
+                TypeSectionM  = SIMP (typ='TXM',fr="Type de section efficace definie",statut='o',
+                                     into=('Totale','CorrectionTransport','Spectre','Vitesse',
+                                           'Production','Fission','Energie','Absorption','Capture','N2N',
+                                           'CoefficientDiffusionHomogene','CoefficientsDiffusionOrientes',
+                                           'CoefficientEquivalence','ProductionRetardee','SpectreRetarde',
+                                           'SectionDiffusionTotale','Transfert')),
+                BlocPasTransfert = BLOC (condition = "TypeSection not in ('Transfert','SectionDiffusionTotale')",
+                                         ValeursS = SIMP (typ='R',min=1,max='**',statut='o',
+                                                          fr="Valeurs des sections efficaces pour tous les groupes")),
+                BlocDiffusion = BLOC (condition = "TypeSection=='SectionDiffusionTotale'",
+                        OrdreAnisotropieD = SIMP (typ='I',statut='o',defaut=1,
+                                                 fr="Ordre d'anisotropie de la section de diffusion totale"),
+                        ValeursD = SIMP (typ='R',min=1,max='**',statut='o',
+                                         fr="Valeurs des sections de diffusion totale pour tous les groupes")),
+                BlocTransfert = BLOC (condition = "TypeSection=='Transfert'",
+                        OrdreAnisotropieT = SIMP (typ='I',statut='o',defaut=1,
+                                                 fr="Ordre d'anisotropie de la section de transfert"),
+                        ValeursT = NUPL (min=1,max='**',statut='o',
+                                        elements=(SIMP (typ='I',min=2,max=2,fr="Groupes de depart et d'arrivee"),
+                                                  SIMP (typ='R',fr="Valeur de la section de transfert")))
+                 )
+         )
+   )
+ ) ;  # Fin MACROLIB
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ASSEMBLAGE_COMBUSTIBLE_REEL : Classe de definition d'un assemblage combustible reel charge ou decharge d'un coeur REP
+#  DefautFabrication     : Champ texte indicateur precisant si l'assemblage appartient a un lot de fabrication
+#                          ayant un defaut impactant les resultats neutroniques
+#  CleControle           : Donnee fournie par la Division Combustible (Fichier ASN) et calculee a partir du nom de l'assemblage
+#  IdentificateurInitial : En cas de remplacement de la structure de l'assemblage, ce dernier  change de nom
+#                         (donnee transmise par le site)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ASSEMBLAGE_COMBUSTIBLE_REEL = OPER (nom="ASSEMBLAGE_COMBUSTIBLE_REEL",op=0,sd_prod=AssemblageCombustibleReel,
+                                        niveau = 'AssemblagesReels',
+  fr  = "Definition d'un assemblage combustible a charger, charge en reacteur, ou decharge en coeur, en piscine ou pour retraitement",
+  ang = "Definition of a core loaded fuel assembly",
+  regles        = (ENSEMBLE('Identificateur','CampagneResquelettage'),
+                   ENSEMBLE('ProgrammeExperimental','NatureElementExperimental'),),
+  IdentInitial                = SIMP (typ='TXM',statut='o',fr="Code d'identification initial de l'assemblage combustible en cas de resquelettage"),
+  Identificateur              = SIMP (typ='TXM',statut='f',fr="Code d'identification de l'assemblage combustible apres resquelettage"),
+  CampagneResquelettage       = SIMP (typ='I',statut='f',fr="Numero de la campagne de rechargement de l'assemblage resquelette"),
+  Constructeur                = SIMP (typ='TXM',statut='o',into=('FRAMATOME','SIEMENS','ABB','ENUSA','WESTINGHOUSE','CEA','KWU','EXXON','ANF'),
+                                      fr="Constructeur de l'assemblage combustible"),
+  TypeTechnologique           = SIMP (typ='TXM',defaut='AFA2GE',statut='o',
+                                      into=('ABB-97','AB-DEMOS','AB-LFA','AEF-XL',
+                                            'AFA','AFA-XL','AFA-XL-N4','AFA2G','AFA2GE','AFA2GL','AFA2GLE','AFA3G','AA3GL','AGI','AGI-XL',
+                                            'AKA','ALIX','BM','CEA','DEMONSTRATIONS','ENUSA-LFA','HTP','KWU','X1'),
+                                      fr="Type technologique de l'assemblage"),
+  TypeAssemblage              = SIMP (typ=AssemblageType,statut='o',fr="Type de l'assemblage"),
+  CleControle                 = SIMP (typ='TXM',statut='o',fr="Cle de controle de l'assemblage"),
+  Engagement                  = SIMP (typ='TXM',statut='o',fr="Engagement de l'assemblage"),
+  NumeroLot                   = SIMP (typ='I', statut='o',fr="Numero du lot de combustible"),
+  TypeCombustibleDuLot        = SIMP (typ='TXM',statut='f',fr="Type combustible et nom du lot (exemple 'MOX FMO1')"),
+  U235EnrichissementTheorique = SIMP (typ='R', statut='o',fr="Enrichissement theorique en U235 du combustible en %"),
+  PuEnrichissementTheorique   = SIMP (typ='R', statut='o',fr="Enrichissement theorique en Pu du combustible en %",defaut=0.),
+  MasseTheoriqueNL            = SIMP (typ='R', statut='o',fr="Masse theorique en g des noyaux lourds  Z > 89 de l'assemblage"),
+  MasseInitialeNL             = SIMP (typ='R', statut='o',fr="Masse initiale reelle en g des noyaux lourds de l'assemblage a la date de reference"),
+  U232MasseInitiale           = SIMP (typ='R', statut='o',fr="Masse initiale reelle en g d'uranium 232",defaut=0.),
+  U234MasseInitiale           = SIMP (typ='R', statut='o',fr="Masse initiale reelle en g d'uranium 234",defaut=0.),
+  U235MasseInitiale           = SIMP (typ='R', statut='o',fr="Masse initiale reelle en g d'uranium 235",defaut=0.),
+  U236MasseInitiale           = SIMP (typ='R', statut='o',fr="Masse initiale reelle en g d'uranium 236",defaut=0.),
+  U238MasseInitiale           = SIMP (typ='R', statut='o',fr="Masse initiale reelle en g d'uranium 238",defaut=0.),
+  BlocPu                      = BLOC (condition = "EnrichissementTheoriquePu > 0.",
+                                DateReference      = SIMP (typ='I',min=3,max=3,statut='o',fr="Date de reference Jour, Mois, An du lot MOX"),
+                                DatePrevDivergence = SIMP (typ='I',min=3,max=3,statut='o',
+                                                                     fr="Date de divergence previsionnelle de la tranche chargee de cet assemblage MOX"),
+                                DateDivergence     = SIMP (typ='I',min=3,max=3,statut='o',
+                                                            fr="Date de divergence reelle de la tranche chargee de cet assemblage MOX"),
+                                U235EquivEnrichissement = SIMP (typ='R',statut='f',defaut=3.25,fr="Enrichissement en U235 equivalent"),
+                                Pu239MasseInitiale = SIMP (typ='R',statut='o',fr="Masse reelle initiale en g de plutonium 239 a la date de reference"),
+                                Pu240MasseInitiale = SIMP (typ='R',statut='o',fr="Masse reelle initiale en g de plutonium 240 a la date de reference"),
+                                Pu241MasseInitiale = SIMP (typ='R',statut='o',fr="Masse reelle initiale en g de plutonium 241 a la date de reference"),
+                                Pu24MasseInitiale2 = SIMP (typ='R',statut='o',fr="Masse reelle initiale en g de plutonium 242 a la date de reference"),
+                                Am241MasseInitiale = SIMP (typ='R',statut='o',fr="Masse reelle initiale en g  d'americium 241 a la date de reference")
+                                      ),
+  AbsorbantFixe               = SIMP (typ='TXM',statut='f',fr="Texte caracteristique des absorbants fixes inseres dans l'assemblage"),
+  DefautFabrication           = SIMP (typ='TXM',statut='f',fr="Libelle du defaut de fabrication"),
+  ProgrammeExperimental       = SIMP (typ='TXM',statut='f',fr="Nom du programme experimental s'il s'agit d'un assemblage experimental"),
+  NatureElementExperimental   = SIMP (typ='TXM',statut='f',into=('Combustible','Grille','Structure'),fr="Nature de l'element experimental"),
+  LocalisationAssemblage      = SIMP (typ='TXM',statut='f',into=('BR Coeur','BK Piscine','HAGUE'),fr="Localisation de l'assemblage"),
+  SituationAdministrative     = SIMP (typ='TXM',statut='f',into=('SansParticularite','EnReservePourGestionFuture','EnAttenteReparationExamen',
+                                                                 'aDispositionDAC','AccordCogema','IndisponibleSurSite'),
+                                      fr="Situation administrative de l'assemblage"),
+  EtatGCN                     = SIMP (typ='TXM',statut='f',into=('Evacuable 0','En attente 1','Rechargeable 2','PourAccordCogema 3'),
+                                      fr="Etat de l'assemblage au sens GCN"),
+  ContraintesPhysiques        = NUPL ( max      = '**',
+                                       statut   = 'f',
+                                       elements = ( SIMP (typ='TXM',statut='o',fr="Texte precisant la contrainte",
+                                                             into=('NonRechargeable','NonSain','aExaminer','aReparer',
+                                                                   'Repare','aSubiExtraction','aPenaliser','NonInstrumentable','NonGrappable','Resquelette')),
+                                                    SIMP (typ='TXM',statut='o',fr="Premiere Campagne concernee")
+                                                   )
+                                     ),
+  ContraintesNbCycles        = NUPL (max = '**', statut = 'f',
+                                     fr       = "Liste des contraintes en nombre de cycles",
+                                     elements = ( SIMP (typ='TXM',statut='o',fr="Texte precisant la contrainte",
+                                                        into=('NombreDeCyclesSuccessifsImperatif','NombreMaximumDeCycles')),
+                                                  SIMP (typ='I',statut='o',fr="Nombre de cycles")
+                                                 )
+                                    ),
+  Campagnes                  = NUPL (max = '**', statut = 'o',
+                                     fr       = "Liste des campagnes d'irradiation subies par l'assemblage et etats correspondants",
+                                     elements = ( SIMP (typ='TXM',fr="Identificateur de la campagne"),
+                                                  SIMP (typ='TXM',fr="Etat de l'assemblage")
+                                                 )
+                                     ),
+  BibliothequesNeutroniques = NUPL (statut='f',elements=(SIMP (typ='TXM',
+                                                               fr="Identificateur de non presence d'absorbants (TBH) ou d'insertion (24B, 12B, 8B, 12P, 12P0P, etc)"),
+                                                         SIMP (typ='TXM',fr="Nom du fichier de la bibliotheque neutronique associee"))
+                                    ),
+  TypeDescriptionCalcul = SIMP (typ='TXM',statut='f',defaut='HomogeneAssemblage',into=('HomogeneAssemblage','ParCrayon')),
+  OxMaillageIrradiation = SIMP (typ=Maillage1D,statut='f',fr="Maillage suivant l'axe x de l'assemblage"),
+  OyMaillageIrradiation = SIMP (typ=Maillage1D,statut='f',fr="Maillage suivant l'axe y de l'assemblage"),
+  OzMaillageIrradiation = SIMP (typ=Maillage1D,statut='f',fr="Maillage suivant l'axe z de l'assemblage, Origine en bas de la zone active"),
+  IrradiationHomogene  = FACT (max='**',statut='f',fr="Taux d'irradiation pseudo-experimentale de l'assemblage",
+                                TempsIrradiation   = SIMP (typ='R', statut='o', fr="Temps d'irradiation en s"),
+                                IrradiationMoyenne = SIMP (typ='R', statut='o', fr="Irradiation moyenne MWj/t de l'assemblage"),
+                                IrradiationCycle   = SIMP (typ='R', statut='o', fr="Irradiation moyenne MWj/t de l'assemblage lors du cycle en cours"),
+                                Irradiations       = SIMP (typ='R', max='**', statut='o', fr="Irradiations des mailles (MWj/t) (en partant du bas et a gauche et par plan)")
+                                ),
+  IrradiationCrayon    = FACT (max='**',statut='f',fr="Taux d'irradiation pseudo-experimentale des crayons de l'assemblage",
+                                TempsIrradiation   = SIMP (typ='R', statut='o', fr="Temps d'irradiation en s  de l'assemblage"),
+                                IrradiationMoyenne = SIMP (typ='R', statut='o', fr="Irradiation moyenne MWj/t de l'assemblage"),
+                                Irradiations       = SIMP (typ='R', max='**', statut='o', fr="Irradiations des crayons (MWj/t) (en partant du bas et a gauche et par plan)")
+                                ),
+  FluenceHomogene      = FACT (max='**',statut='f',
+                                TempsIrradiation = SIMP (typ='R', statut='o', fr="Temps d'irradiation en s de l'assemblage"),
+                                FluenceMoyenne   = SIMP (typ='R', statut='o', fr="Fluence moyenne n/kb de l'assemblage"),
+                                Fluences         = SIMP (typ='R', max='**', statut='o', fr="Fluences des mailles (n/kb) (en partant du bas et a gauche et par plan)")
+                                ),
+  FluenceCrayon        = FACT (max='**',statut='f',
+                                TempsIrradiation = SIMP (typ='R', statut='o', fr="Temps d'irradiation en s de l'assemblage"),
+                                FluenceMoyenne   = SIMP (typ='R', statut='o', fr="Fluence moyenne n/kb de l'assemblage"),
+                                Fluences         = SIMP (typ='R', max='**', statut='o', fr="Fluences des crayons (n/kb) (en partant du bas et a gauche et par plan)")
+                                ),
+  CompositionHomogene  = FACT (max='**',statut='f',
+                                TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+                                IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t de l'assemblage"),
+                                FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb de l'assemblage"),
+                                Isotopes           = SIMP (typ='TXM', statut='o', max='**',fr="Liste des noms des isotopes"),
+                                Concentrations     = SIMP (typ='R'  , statut='o', max='**',
+                                                           fr="Concentrations des isotopes pour chaque maille radiale et pour chaque plan axial")
+                                ),
+  CompositionCrayon    = FACT (max='**',statut='f',
+                                TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s de l'assemblage"),
+                                IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t de l'assemblage"),
+                                FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+                                Isotopes           = SIMP (typ='TXM', statut='o', max='**',fr="Liste des noms des isotopes"),
+                                Concentrations     = SIMP (typ='R'  , statut='o', max='**',
+                                                           fr="Concentrations des isotopes pour chaque crayon et pour chaque plan axial (du bas vers le haut)")
+                                )
+  ) ;  # Fin ASSEMBLAGE_COMBUSTIBLE_REEL
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe REPARATION_ASSEMBLAGE : Classe de definition des donnees de reparation d'un assemblage
+#                                 Donnee de l'assemblage a reparer et des crayons de remplacement
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+REPARATION_ASSEMBLAGE = OPER (nom="REPARATION_ASSEMBLAGE", op=0, sd_prod=ReparationAssemblage, niveau = 'AssemblagesReels',
+  fr  = "Donnee de reparation ou de restauration d'un assemblage",
+  ang = "Data for an assembly repair",
+  AssemblageInitial  = SIMP (typ=(AssemblageType,AssemblageCombustibleReel),statut='o',fr="Type de l'assemblage a reparer"),
+  IrradiationMoyenne = SIMP (typ='R',statut='o',fr="Taux d'irradiation moyenne MWj/t de l'assemblage a reparer"),
+  CrayonRemplacement = FACT (max='**',statut='o',
+                            Position            = SIMP (typ='I', min=2, max=2, statut='o', fr="Coordonnees x,y du crayon a remplacer dans l'assemblage"),
+                            CelluleRemplacement = SIMP (typ=Cellule, statut='o', fr="Cellule de remplacement")
+                             )
+   ) ; # Fin REPARATION_ASSEMBLAGE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PENALITE_ASSEMBLAGE : Classe de definition des penalites a appliquer aux puissances des crayons d'un assemblage
+#  Trois possibilites :        1) de maniere uniforme
+#                      2) a quelques crayons
+#                      3) a l'ensemble des crayons et en fonction du taux d'irradiation de l'assemblage
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PENALITE_ASSEMBLAGE = OPER (nom="PENALITE_ASSEMBLAGE", op=0, sd_prod=PenaliteAssemblage, niveau = 'AssemblagesReels',
+  fr  = "Penalites dues a la reparation ou a la restauration d'un assemblage",
+  ang = "Penalties applied to a repaired assembly",
+  Assemblage = SIMP (typ=(AssemblageType,AssemblageCombustibleReel),statut='o',fr="Type de l'assemblage concerne par les penalites"),
+  regles = (UN_PARMI('UniformeDeltaP', 'CrayonDeltaP','CarteDeltaP'),),
+  UniformeDeltaP = SIMP (typ='R', statut='f', fr="Penalite en % a appliquer de maniere uniforme sur l'assemblage"),
+  CrayonDeltaP = FACT (statut='f',fr="Liste des penalites pour une liste particuliere de crayons d'un assemblage",
+                 Crayons = SIMP (typ='I', statut='o', max='**', fr="Numeros des crayons de l'assemblage"),
+                 DeltaP  = SIMP (typ='R', statut='o', max='**', fr="Penalites en % a appliquer aux crayons listes")),
+  CarteDeltaP  = FACT (max='**',statut='f',fr="Penalites pour l'ensemble des crayons de l'assemblage",
+                 BuMoyen = SIMP (typ='R', statut='o',fr="Taux d'irradiation MWj/t de l'assemblage a reparer"),
+                 DeltaP  = SIMP (typ='R', statut='o', max='**', fr="Pourcentage de variation de puissance par crayon en %"))
+) ; # Fin PENALITE_ASSEMBLAGE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTATS_GLOBAUX_COEUR : Classe de stockage des resultats globaux du coeur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTATS_GLOBAUX_COEUR = OPER (nom="RESULTATS_GLOBAUX_COEUR", op=0, sd_prod=ResultatsGlobauxCoeur, niveau = 'Resultats',
+  fr  = "Resultats globaux du calcul de coeur",
+  ang = "Global Core Calculation Results",
+  ResultatsCoeur = FACT (max='**',statut='o',fr="Resultats globaux du calcul de coeur calcules a un instant et pour une configuration donnee",
+        Configuration       = SIMP (typ='TXM', statut='o', max='**', fr="Configuration du coeur : Liste des groupes ou grappes inseres"),
+        PasInsertion        = SIMP (typ='I'  , statut='o', max='**', fr="Niveau d'insertion des groupes ou grappes inseres en nombre de pas extraits"),
+        IndiceConvergence   = SIMP (typ='I'  , statut='o', fr="Indice de convergence du calcul"),
+        TempsIrradiation    = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne  = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne      = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        NiveauPuissance     = SIMP (typ='R'  , statut='o', fr="Niveau de puissance du calcul en %"),
+        TypeDeCalcul        = SIMP (typ='TXM', statut='o', fr="Type de calcul de coeur Critique ou non"),
+        ParametreCritique   = SIMP (typ='TXM', statut='o', fr="Parametre critique du calcul de coeur"),
+        TitreBore           = SIMP (typ='R'  , statut='o', fr="Titre en bore soluble du calcul de coeur en ppm"),
+        EfficaciteBore      = SIMP (typ='R'  , statut='o', fr="Efficacite differentielle du bore soluble pcm/ppm"),
+        Reactivite          = SIMP (typ='R'  , statut='o', fr="Reactivite du calcul en pcm"),
+        B2AxialRapide       = SIMP (typ='R'  , statut='o', fr="Laplacien axial rapide en cm-2"),
+        B2AxialThermique    = SIMP (typ='R'  , statut='o', fr="Laplacien axial thermique en cm-2"),
+        XeAntireactivite    = SIMP (typ='R'  , statut='o', fr="Antireactivite du xenon en pcm"),
+        FxyAssemblage       = SIMP (typ='R'  , statut='o', fr="Fxy Assemblage"),
+        DopplerCoefficient  = SIMP (typ='R'  , statut='o', fr="Coefficient Doppler en pcm/C"),
+        CTModerateur        = SIMP (typ='R'  , statut='o', fr="Coefficient Temperature moderateur en pcm/C"),
+        DopplerPuissance    = SIMP (typ='R'  , statut='o', fr="Coefficient Puissance Doppler seul en pcm/%P"),
+        CoeffPuissance      = SIMP (typ='R'  , statut='o', fr="Coefficient Puissance en pcm/%P"),
+        EfficDiffGrappes    = SIMP (typ='R'  , statut='f', max='**',
+                                    fr="Efficacites differentielles des grappes inserees, Couples de valeurs (Insertion,Efficacite differentielle)"),
+        Bite                = SIMP (typ='R'  , statut='f', fr="Position du bite en cours d'evolution, en nombre de pas extraits"),
+        RMBM                = SIMP (typ='R'  , statut='f', fr="Position Milieu de la bande de manoeuvre du groupe R, en nombre de pas extraits"),
+        FxyCrayon           = SIMP (typ='R'  , statut='f', fr="Fxy Crayon (apres factorisation eventuelle)"),
+        AssemblageChaud     = SIMP (typ='R'  , statut='f', fr="Assemblage portant le crayon chaud"),
+        LotAssemblageChaud  = SIMP (typ='I'  , statut='f', fr="Lot de l'assemblage portant le crayon chaud"),
+        NumeroCrayonChaud   = SIMP (typ='I'  , statut='f', fr="Numero du crayon chaud dans l'assemblage chaud"),
+        TmEntreeCoeur       = SIMP (typ='R'  , statut='o', fr="Temperature entree coeur en Celsius"),
+        TmMoyenneCuve       = SIMP (typ='R'  , statut='o', fr="Temperature moyenne cuve en Celsius"),
+        PressionEntreeCoeur = SIMP (typ='R'  , statut='o', fr="Pression entree coeur en bars"),
+        PressionSortieCoeur = SIMP (typ='R'  , statut='o', fr="Pression sortie coeur en bars"),
+        AOCoeur             = SIMP (typ='R'  , statut='o', fr="Axial Offset Coeur en %"),
+        DeltaICoeur         = SIMP (typ='R'  , statut='o', fr="Desequilibre Axial Coeur"),
+        AOXenon             = SIMP (typ='R'  , statut='o', fr="Axial Offset Xenon Coeur en %"),
+        AOIode              = SIMP (typ='R'  , statut='o', fr="Axial Offset Iode Coeur en %"),
+        FzCoeur             = SIMP (typ='R'  , statut='o', fr="Fz Coeur"),
+        FDH                 = SIMP (typ='R'  , statut='o', fr="Facteur d'elevation d'enthalpie Coeur"),
+        FQ                  = SIMP (typ='R'  , statut='o', fr="Facteur de point chaud Coeur Fq"),
+        FQCote              = SIMP (typ='R'  , statut='o', fr="Cote du Facteur de point chaud Coeur Fq"),
+        FQAssemblage        = SIMP (typ='R'  , statut='o', fr="Repere de l'assemblage portant le facteur de point chaud Fq"),
+        FQCrayon            = SIMP (typ='R'  , statut='o', fr="Numero de crayon de l'assemblage portant le facteur de point chaud Fq"),
+        FQLot               = SIMP (typ='R'  , statut='o', fr="Numero de lot de l'assemblage portant le facteur de point chaud Fq"),
+        TiltRadial4         = SIMP (typ='R'  , statut='o', fr="Desequilibre radial par quart de coeur NE, NO, SO, SE", min=4,max=4),
+        TiltRadial8         = SIMP (typ='R'  , statut='o',
+                                    fr="Desequilibre radial par huitieme de coeur, Origine en Ox et sens trigonometrique", min=8,max=8),
+        BetaTotal           = SIMP (typ='R'  , statut='f', fr="Contribution des neutrons retardes Beta total Coeur"),
+        BetaEffTotal        = SIMP (typ='R'  , statut='f', fr="Contribution des neutrons retardes Beta effectif total Coeur"),
+        ImportanceTotale    = SIMP (typ='R'  , statut='f', fr="Importance totale Coeur"),
+        TempsViePrompt      = SIMP (typ='R'  , statut='f', fr="Temps de vie effectif des neutrons prompts"),
+        ProductionU5        = SIMP (typ='R'  , statut='f', fr="Contribution U235 a la production totale nuSf"),
+        ProductionU8        = SIMP (typ='R'  , statut='f', fr="Contribution U238 a la production totale nuSf"),
+        ProductionPu        = SIMP (typ='R'  , statut='f', fr="Contribution Pu9+Pu0+Pu1+Pu2 a la production totale nuSf"),
+        Lambdai             = SIMP (typ='R'  , statut='f', fr="Constantes de decroissance moyennes des 6 groupes de precurseurs", min=6,max=6),
+        Betai               = SIMP (typ='R'  , statut='f', fr="Contribution des neutrons retardes Beta i des 6 groupes de precurseurs", min=6,max=6),
+        BetaiEff            = SIMP (typ='R'  , statut='f', fr="Contribution des neutrons retardes Beta i effectif des 6 groupes de precurseurs", min=6,max=6),
+        RoNordheim          = FACT (statut='f', fr="Reactivite en fct du temps de doublement par la relation de Nordheim",
+                                  Temps = SIMP (typ='R', statut='o', max='**', fr="Liste des temps de doublement en s"),
+                                  Ro    = SIMP (typ='R', statut='o', max='**', fr="Liste des reactivites correspondantes en pcm"))
+  )
+) ;  # Fin RESULTATS_GLOBAUX_COEUR
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTAT_FLUX : Classe de stockage des resultats de flux et des courants (a revoir pour ces derniers)
+#  L'edition se fait sur les mailles du reseau associe a l'etude (PlanChargement)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTAT_FLUX = OPER (nom="RESULTAT_FLUX", op=0, sd_prod=ResultatFlux, niveau = 'Resultats',
+  fr  = "Distributions de flux moyens et de courants",
+  ang = "Average Flux and current distributions",
+  NbAssemblages = SIMP (typ='I'  , statut='o', fr="Nombre d'assemblages edites"),
+  OzNbValeurs   = SIMP (typ='I'  , statut='o', fr="Nombre de mailles axiales par assemblage"),
+  OzMaillage    = SIMP (typ=Maillage1D  , statut='o', fr="Maillage axial d'edition"),
+  NbGroupes     = SIMP (typ='I'  , statut='o', fr="Nombre de groupes d'energie"),
+  NbFluxBord    = SIMP (typ='I'  , statut='o', fr="Nombre de flux au bord par assemblage et par groupe d'energie"),
+  NbCourant     = SIMP (typ='I'  , statut='o', fr="Nombre de courants par assemblage et par groupe d'energie"),
+  Flux = FACT (max='**',statut='o',fr="Flux calcules a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Flux moyens par assemblage (en partant du bas a gauche) et par groupe")
+               ),
+  FluxBord = FACT (max='**',statut='f',fr="Flux moyens au bord des assemblages calcules a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Flux moyens au bord par assemblage (en partant du bas a gauche) et par groupe")
+                  ),
+  Courant = FACT (max='**',statut='f',fr="Courants calcules a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Courants detailles par assemblage (en partant du bas a gauche) et par groupe")
+                  )
+  ) ;  # Fin RESULTAT_FLUX
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTAT_PUISSANCES : Classe de stockage des resultats de puissance
+#  L'edition se fait sur les mailles actives du reseau associe a l'etude (PlanChargement)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTAT_PUISSANCES = OPER (nom="RESULTAT_PUISSANCES", op=0, sd_prod=ResultatPuissances, niveau = 'Resultats',
+  fr  = "Distribution de puissance",
+  ang = "Power distributions",
+  NbAssemblages  = SIMP (typ='I'  , statut='o', fr="Nombre d'assemblages edites"),
+  OzNbValeurs    = SIMP (typ='I'  , statut='o', fr="Nombre de mailles axiales par assemblage"),
+  OzMaillage     = SIMP (typ=Maillage1D  , statut='o', fr="Maillage axial d'edition"),
+  Puissances               = FACT (max='**',statut='o',fr="Puissances calculees a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Puissances (en partant du bas a gauche) par assemblage")
+  )
+) ;  # Fin RESULTAT_PUISSANCES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTAT_RADIAL : Classe de stockage des resultats integres sur une zone axiale particuliere (par defaut, toute la zone active)
+#  L'edition se fait sur les mailles du reseau associe a l'etude (PlanChargement)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTAT_RADIAL = OPER (nom="RESULTAT_RADIAL", op=0, sd_prod=ResultatRadial, niveau = 'Resultats',
+  fr  = "Distribution radiale 2D apres integration axiale d'un type de resultat",
+  ang = "Radial Result Distribution",
+  TypeResultat = SIMP (typ='TXM', statut='o', into=('Puissance','Flux','Activite','Irradiation','IrradiationGradient4','Importance',
+                                                     'FDHmax','FDHcrayon','TauxReaction','TauxReactionParGroupe','SectionEfficace',
+                                                     'SectionEfficaceParGroupe','Kinf','AntireactiviteXenon','AntireactiviteIode',
+                                                     'AOPuissance','Tc','TcMax','Tm','TmMax','RoModerateur','Tgaine'),
+                                                      fr="Type de resultat"),
+# BlocGroupe   = BLOC (condition = "TypeResultat in ['Flux','TauxReactionParGroupe','SectionEfficaceParGroupe']",
+        NumeroGroupe      = SIMP (typ='I'  , statut='o', max=2, fr="Numeros de groupe d'energie associes"),
+# ),
+# BlocSection  = BLOC (condition = "TypeResultat in ['SectionEfficaceParGroupe','TauxReactionParGroupe','SectionEfficace','TauxReaction']",
+        TypeSection       = SIMP (typ='TXM'  , statut='o', fr="Type de section concerne"),
+# ),
+  CotesAxiales  = SIMP (typ='R', statut='f', min=2,max=2, fr="Cotes axiales de la zone moyennee"),
+  Radial = FACT (max='**',statut='o',fr="Distribution radiale 2D calculee a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ=('R','I'), statut='o', max='**',
+                                   fr="Valeurs (en partant du bas a gauche) par assemblage")
+  )
+) ;  # Fin RESULTAT_RADIAL
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTAT_AXIAL : Classe de stockage des resultats moyennes axialement sur l'ensemble du reseau combustible
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTAT_AXIAL = OPER (nom="RESULTAT_AXIAL", op=0, sd_prod=ResultatAxial, niveau = 'Resultats',
+  fr  = "Distribution axiale moyenne coeur",
+  ang = "Average Core Axial Distribution",
+  OzNbValeurs  = SIMP (typ='I', statut='o', fr="Nombre de mailles axiales"),
+  OzMaillage   = SIMP (typ=Maillage1D, statut='o', fr="Maillage axial d'edition"),
+  TypeResultat = SIMP (typ='TXM', statut='o', into=('Puissance','Flux','Xenon','Iode','Courant','Fxy(z)','Q(z)'), fr="Type de resultat"),
+  BlocGroupe   = BLOC (condition = "TypeResultat in ('Flux','Courant')",
+        NumeroGroupe      = SIMP (typ='I'  , statut='o', fr="Numero de groupe d'energie")),
+  Axial = FACT (max='**',statut='o',fr="Distribution axiale a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Distribution axiale moyenne (en partant du bas)")
+                                )
+  ) ;  # Fin RESULTAT_AXIAL
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTAT_IRRADIATIONS : Classe de stockage des resultats de taux d'irradiation
+#  L'edition se fait sur les mailles du reseau associe a l'etude (PlanChargement)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTAT_IRRADIATIONS = OPER (nom="RESULTAT_IRRADIATIONS", op=0, sd_prod=ResultatIrradiations, niveau = 'Resultats',
+  fr  = "Distribution de taux d'irradiation",
+  ang = "Burnup distributions",
+  NbAssemblages  = SIMP (typ='I', statut='o', fr="Nombre d'assemblages"),
+  OzNbValeurs    = SIMP (typ='I', statut='o', fr="Nombre de valeurs d'irradiation par assemblage"),
+  OzMaillage     = SIMP (typ=Maillage1D, statut='o', fr="Maillage axial d'edition des irradiations"),
+  Gradient       = SIMP (typ='I', statut='o', defaut=4, fr="Nombre de valeurs d'irradiation par assemblage"),
+  Irradiation              = FACT (max='**',statut='o',fr="Irradiations calculees a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Irradiations (en partant du bas a gauche) par assemblage")
+  )
+) ;  # Fin RESULTAT_IRRADIATIONS
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTAT_ACTIVITES : Classe de stockage des resultats d'activite au centre des assemblages instrumentes
+#  L'edition se fait sur une liste particuliere d'assemblages du reseau associe a l'etude (PlanChargement)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTAT_ACTIVITES = OPER (nom="RESULTAT_ACTIVITES", op=0, sd_prod=ResultatActivites, niveau = 'Resultats',
+  fr  = "Distributions d'activite des detecteurs",
+  ang = "Detector Activity distributions",
+  NbAssemblages      = SIMP (typ='I'        , statut='o', fr="Nombre d'assemblages dont on fournit l'activite calculee"),
+  ReperesAssemblages = SIMP (typ='TXM'      , statut='o', fr="Reperes des assemblages dont on fournit l'activite", max='**'),
+  OzNbValeurs        = SIMP (typ='I'        , statut='o', fr="Nombre de valeurs d'activite par assemblage"),
+  OzMaillage         = SIMP (typ=Maillage1D , statut='o', fr="Maillage axial d'edition des activites"),
+  CarteActivite            = FACT (max='**' , statut='o',fr="Activites calculees a un instant et pour une configuration donnee",
+        Configuration      = SIMP (typ='TXM', statut='o', fr="Configuration du coeur ou de l'assemblage"),
+        TempsIrradiation   = SIMP (typ='R'  , statut='o', fr="Temps d'irradiation en s"),
+        IrradiationMoyenne = SIMP (typ='R'  , statut='o', fr="Irradiation moyenne MWj/t"),
+        FluenceMoyenne     = SIMP (typ='R'  , statut='o', fr="Fluence moyenne n/kb"),
+        Valeurs            = SIMP (typ='R'  , statut='o', max='**',
+                                   fr="Activites par assemblage (en partant du bas) dans l'ordre de la liste fournie des assemblages")
+  )
+) ;  # Fin RESULTAT_ACTIVITES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACTIVITES_EXPERIMENTALES : Classe de stockage des cartes d'activite mesuree au centre des assemblages instrumentes
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACTIVITES_EXPERIMENTALES = OPER (nom="ACTIVITES_EXPERIMENTALES", op=0, sd_prod=ActivitesExperimentales, niveau = 'ResultatsExperimentaux',
+  fr  = "Distributions experimentales d'activite mesuree dans les detecteurs mobiles",
+  ang = "Measured Detector Activity distributions",
+  CaracteristiquesCarte       = FACT (statut='o',fr="Caracteristiques de la carte d'Activite mesurees",
+        Site                  = SIMP (typ=SiteNucleaire, statut='o', fr="Site nucleaire de realisation de la carte de flux"),
+        Tranche               = SIMP (typ='I', statut='o', fr="Numero de la tranche nucleaire"),
+        Campagne              = SIMP (typ='I', statut='o', fr="Numero de la campagne d'irradiation"),
+        IrradiationMoyenne    = SIMP (typ='R', statut='o', fr="Irradiation moyenne MWj/t au debut de la carte"),
+        TitreBoreSoluble      = SIMP (typ='I', statut='o', fr="Titre en ppm en bore soluble du moderateur"),
+        EnergieProduite       = SIMP (typ='R', statut='o', fr="Energie produite en MWh"),
+        NumeroCarte           = SIMP (typ='I', statut='o', fr="Numero de la carte de flux"),
+        ValiditeCarte         = SIMP (typ='TXM', statut='o', into=('Oui','Non'),fr="Validite ou non de la carte de flux"),
+        DateHeureCarte        = SIMP (typ='I', min=5, max=5, statut='o', fr="Date (Jour Mois An) et heure (Heure Minute)de realisation de la carte de flux"),
+        PuissanceElectrique   = SIMP (typ='R', statut='o', fr="Puissance electrique MW au debut de la carte de flux"),
+        PuissanceRelative     = SIMP (typ='R', statut='o', fr="Puissance relative % au debut de la carte de flux"),
+        ModePilotage          = SIMP (typ='TXM', statut='o', fr="Mode de pilotage du reacteur"),
+        GroupesInseres        = SIMP (typ='TXM', statut='f', fr="Groupes inseres dans le coeur"),
+        PositionsGroupes      = SIMP (typ='I'  , statut='f', fr="Positions des groupes inseres dans le coeur en nb de pas extraits"),
+        NbPointsAxiaux        = SIMP (typ='I'  , statut='o', fr="Nombre de points mesures par trace axiale"),
+        NbPasses              = SIMP (typ='I'  , statut='o', fr="Nombre de passes de mesures"),
+        NbTracesAxiales       = SIMP (typ='I'  , statut='o', fr="Nombre de traces axiales d'activite mesuree"),
+        NbThermocouples       = SIMP (typ='I'  , statut='o', fr="Nombre de thermocouples"),
+        ReperesThermocouples  = SIMP (typ='TXM', statut='f', max='**', fr="Reperes des thermocouples dans le coeur"),
+        NumerosThermocouples  = SIMP (typ='I'  , statut='f', max='**', fr="Numeros des thermocouples dans le coeur")
+                                ),
+  ActivitesAxiales = FACT (statut='o',max='**',fr="Trace axiale d'activite mesuree",
+        RepereAssemblage   = SIMP (typ='TXM', statut='o', fr="Repere de l'assemblage instrumente"),
+        HeureDeMesure      = SIMP (typ='I', min=5, max=5, statut='o', fr="Date (Jour Mois An) et heure (Heure Minute)de realisation de la carte de flux"),
+        NumeroDetecteur    = SIMP (typ='I', statut='o', fr="Numero du detecteur de mesure"),
+        NumeroFourreau     = SIMP (typ='I', statut='o', fr="Numero de fourreau de mesure"),
+        NumeroPasse        = SIMP (typ='I', statut='o', fr="Numero de la passe de mesure"),
+        PuissanceThermique = SIMP (typ='R', statut='o', fr="Puissance thermique MWth au moment de la passe"),
+        ValeursActivites   = SIMP (typ='R', statut='o', max='**',
+                                                        fr="Trace d'activite dans l'assemblage (en partant du bas)"),
+                          ),
+  ChambresExternes = FACT (statut='f',max='**',fr="Courants mesures dans les chambres externes",
+        NumeroPasse = SIMP (typ='I', statut='o',            fr="Numero de la passe de mesure"),
+        Courants    = SIMP (typ='R', statut='o', max= '**', fr="Valeurs des courants mesures")
+                          ),
+  Thermohydraulique = FACT (statut='f',max='**',fr="Temperatures et pressions mesurees dans les boucles primaires",
+        NumeroPasse       = SIMP (typ='I', statut='o',               fr="Numero de la passe de mesure"),
+        TemperatureEntree = SIMP (typ='R', statut='o', min=3,max= 4, fr="Valeurs des temperatures mesurees en entree des boucles"),
+        TemperatureSortie = SIMP (typ='R', statut='o', min=3,max= 4, fr="Valeurs des temperatures mesurees en sortie des boucles"),
+        DeltaTemperature  = SIMP (typ='R', statut='o', min=3,max= 4, fr="Ecarts de temperature mesurees sur les boucles"),
+        IndiceFctBoucles  = SIMP (typ='I', statut='o', min=3,max= 4, fr="Indices de fonctionnement des boucles")
+                          ),
+  Thermocouples = FACT (statut='f',max='**',fr="Temperatures mesurees par les thermocouples",
+        NumeroPasse = SIMP (typ='I', statut='o', fr="Numero de la passe de mesure"),
+        Temperature = SIMP (typ='R', statut='o', max= '**', fr="Temperatures mesurees par les thermocouples")
+                       )
+  ) ; # Fin ACTIVITES_EXPERIMENTALES
+# -----------------------------------------------------------------------------------------------------------------------------------
+#   Classe RESULTATS_ETUDE : Classe de definition des resultats d'une etude
+#                               Regroupement des resultats d'une etude en fonction des donnees
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+RESULTATS_ETUDE = OPER (nom="RESULTATS_ETUDE", op=0, sd_prod=ResultatsEtude, niveau = 'Resultats',
+  fr  = "Resultats de tous les cas d'une etude",
+  ang = "Cases and associated Results",
+  Resultats = FACT (statut='o',max='**',
+        Donnees          = SIMP (typ=DonneesCasEtude       ,statut='o',fr="Objet DonneesGeneralesEtude auquel sont associes les objets resultats "),
+        Sections         = SIMP (typ=Macrolib              ,statut='f',max='**',fr="Liste des Objets Sections issus du calcul"),
+        Flux             = SIMP (typ=ResultatFlux          ,statut='f',max='**',fr="Liste des Objets Flux issus du calcul"),
+        Puissances       = SIMP (typ=ResultatPuissances    ,statut='f',max='**',fr="Liste des Objets Puissances"),
+        Activites        = SIMP (typ=ResultatActivites     ,statut='f',max='**',fr="Liste des Objets Activites"),
+        Irradiations     = SIMP (typ=ResultatIrradiations  ,statut='f',max='**',fr="Liste des Objets Irradiations"),
+        ResultatsGlobaux = SIMP (typ=ResultatsGlobauxCoeur ,statut='f',max='**',fr="Liste des Objets contenant les resultats globaux"),
+        ResultatsAxiaux  = SIMP (typ=ResultatAxial        ,statut='f',max='**',fr="Liste des Objets contenant les resultats axiaux"),
+        ResultatsRadiaux = SIMP (typ=ResultatRadial       ,statut='f',max='**',fr="Liste des Objets contenant les resultats radiaux"),
+        Accidents        = SIMP (typ=AccidentsResultats,statut='f',         fr="Resultats des calculs d'accidents"),
+        Gestion          = SIMP (typ=ResultatsCalculGestion,statut='f',max='**',fr="Liste des Objets contenant les resultats de calcul de gestion")
+   )
+ ) ;  # Fin RESULTATS_ETUDE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DICTIONNAIRE_CAS_ETUDE : Classe de definition de l'ensemble des resultats d'une etude
+#                                  Regroupement des resultats d'une etude en fonction des donnees
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DICTIONNAIRE_CAS_ETUDE = OPER (nom="DICTIONNAIRE_CAS_ETUDE", op=0, sd_prod=DictionnaireCasEtude, niveau = 'EtudeGenerale',
+  fr  = "Dictionnaire des resultats de tous les cas d'une etude",
+  ang = "Cases and associated Results dictionary",
+  AssociationDonneesResultats = FACT (statut='o',max='**',
+        Donnees   = SIMP (typ=DonneesCasEtude,statut='o',fr="Objet DonneesGeneralesEtude auquel sont associes les objets resultats"),
+        Resultats = SIMP (typ=ResultatsEtude,statut='o',max='**',fr="Liste des Objets regroupement des resultats")
+   )
+ ) ;    # Fin DICTIONNAIRE_CAS_ETUDE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PROLONGATION_CAMPAGNE : Classe de definition des donnees de prolongation de campagne
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PROLONGATION_CAMPAGNE = OPER (nom="PROLONGATION_CAMPAGNE", op=0, sd_prod=ProlongationCampagne, niveau = 'DonneesPilotage',
+  fr  = "Donnees de la prolongation de campagne ",
+  ang = "Stretch out Data",
+  NbPas              = SIMP (typ='I',statut='o',fr="Nombre d'instants (en JEPP) descriptifs de la prolongation de campagne"),
+  Jepp               = SIMP (typ='R',statut='o',max='**',fr="Instants descriptifs de la prolongation de campagne, en JEPP"),
+  Puissance          = SIMP (typ='R',statut='o',max='**',fr="Niveaux de puissance % correspondant aux Jepp de la prolongation de campagne"),
+  Temperature        = SIMP (typ='R',statut='o',max='**',fr="Temperatures Moderateur (Celsius) correspondant aux Jepp de la prolongation de campagne"),
+  PositionRegulation = SIMP (typ='R',statut='o',defaut=221.,fr="Position du groupe de regulation en nombre de pas extraits")
+ ) ;  # Fin PROLONGATION_CAMPAGNE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_PILOTAGE_GENERAL : Classe de definition des donnees de pilotage general du reacteur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_PILOTAGE_GENERAL = OPER (nom="DONNEES_PILOTAGE_GENERAL", op=0, sd_prod=DonneesPilotageGeneral, niveau = 'DonneesPilotage',
+  fr  = "Donnees generales de pilotage du reacteur ",
+  ang = "General Reactor Control Data",
+  RegulationGroupe      = SIMP (typ='TXM',statut='o',defaut='R' ,fr="Nom symbolique du groupe de regulation"),
+  PnomDdcLimitInsR      = SIMP (typ='R'  ,statut='o',defaut=180.,fr="Limite d'insertion R a Pnom DDC en nombre de pas extraits"),
+  PnomFdcLimitInsR      = SIMP (typ='R'  ,statut='o',defaut=180.,fr="Limite d'insertion R a Pnom FDC en nombre de pas extraits"),
+  PnulDdcLimitInsR      = SIMP (typ='R'  ,statut='o',defaut=195.,fr="Limite d'insertion R a Pnul DDC en nombre de pas extraits"),
+  PnulFdcLimitInsR      = SIMP (typ='R'  ,statut='o',defaut=195.,fr="Limite d'insertion R a Pnul FDC en nombre de pas extraits"),
+  PuissanceGroupes      = SIMP (typ='TXM',statut='o',max='**',defaut=('G1','G2','N1','N2'),fr="Liste ordonnee des noms symboliques des groupes de compensation de puissance"),
+  Recouvrement          = SIMP (typ='I'  ,statut='o',max='**',defaut=(100,90,90),
+                                fr="Liste ordonnee des valeurs de recouvrement des groupes de compensation de puissance, en nombre de pas d'insertion"),
+  BiteDefinition        = SIMP (typ='R'  ,statut='o',defaut=-2.5, 
+                                fr="Efficacite differentielle minimale de la regulation donnant la definition du bite, en pcm/pas"),
+  BiteFDCPosition       = SIMP (typ='I'  ,statut='o',defaut=225.,      fr="Position imposee du bite en FDC, en nombre de pas extraits"),
+  BiteLimiteBasse       = SIMP (typ='I'  ,statut='o',defaut=207.,      fr="Position limite basse du bite, en nombre de pas extraits"),
+  GrappeExtraite        = SIMP (typ='R'  ,statut='o',defaut=225.,      fr="Position Grappe extraite en nombre de pas extraits"),
+  GrappeInseree         = SIMP (typ='R'  ,statut='o',defaut=5.,                fr="Position Grappe inseree en nombre de pas extraits"),
+  PositionR1ereDiverg   = SIMP (typ='R'  ,statut='o',defaut=170.,      fr="Position du groupe de Regulation R a la 1ere divergence"),
+  BandeManoeuvre        = SIMP (typ='R'  ,statut='o',defaut=24.,       fr="Largeur de la bande de manoeuvre du groupe de Regulation R"),
+  ConfigModeA           = SIMP (typ='TXM',statut='o',defaut=('D','CD','BCD','ABCD'),max='**', fr="Configuration des groupes en mode A"),
+  ConfigModeG           = SIMP (typ='TXM',statut='o',defaut=('G1','G1G2','G1G2N1','G1G2N1N2','R','RG1','RG1G2','RG1G2N1','RG1G2N1N2'),
+                                max='**', fr="Configuration des groupes en mode G"),
+  LimiteDomaineFct      = SIMP (typ='I',statut='o',defaut=0.05,fr="Limite du domaine de fonctionnement"),
+  NbPtsSpin             = SIMP (typ='I',statut='o',defaut=31,fr="Nombre de points SPIN"),
+  SeuilDnbrs            = FACT (statut='o',fr="Seuil DNBRS",
+                                PtsSpin = SIMP (typ='I',max='**',statut='o',fr="Liste des points Spin"),
+                                Seuils  = SIMP (typ='R',max='**',statut='o',fr="Liste des seuils DNBRS")),
+  CritereDNBRL          = SIMP (typ='R',statut='o',                 fr="Critere sur le REC"),
+  AlarmeBasDnbr         = SIMP (typ='R',statut='o',defaut=2.03,            fr="Alarme Bas DNBR"),
+  CsteCalibrage         = SIMP (typ='R',statut='o',defaut=-0.492,   fr="Constante A de calibrage des grappes SPIN"),
+  DebitCalibrage        = SIMP (typ='R',statut='o',defaut=99507.,   fr="Debit QCAL de calibrage de la puissance SPIN, m3/h"),
+  ConfigEpsilon         = SIMP (typ='TXM',statut='o',defaut=('TBH','R','RG1','RG1G2','RG1G2N1','G1G2N1','G1G2','G1'),
+                                max='**', fr="Configurations pour le calcul des epsilon(z)"),
+  IrradEpsilon          = SIMP (typ='R',statut='o',defaut=(150.,20000.),max='**',fr="Irradiations MWj/t du calcul des epsilon(z)")
+  ) ;  # Fin DONNEES_PILOTAGE_GENERAL
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_AJUSTEMENT : Classe de definition des donnees d'ajustement des parametres de calcul
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_AJUSTEMENT = OPER (nom="DONNEES_AJUSTEMENT", op=0, sd_prod=DonneesAjustement, niveau = 'DonneesEtude',
+  fr  = "Donnees generales d'ajustement",
+  ang = "Adjustment Data",
+  PnomReactivite = SIMP (typ='R',statut='o',defaut=0.,fr="Facteur additif correctif de la reactivite du coeur a Pnom, en pcm"),
+  PnulReactivite = SIMP (typ='R',statut='o',defaut=0.,fr="Facteur additif correctif de la reactivite du coeur a Pnul, en pcm"),
+  SectionsBore   = SIMP (typ='R',statut='o',defaut=1.,fr="Facteur multiplicatif correctif des sections du bore soluble du moderateur"),
+  AlphaIsotherme = SIMP (typ='R',statut='o',defaut=3.,fr="Facteur additif correctif du coefficient de temperature isotherme en pcm/C"),
+  Grappes        = NUPL (max = '**', statut = 'f',
+                         fr = "Liste des ajustements associes aux types de grappes de controle",
+                         elements = (SIMP (typ='TXM',statut='o',fr="Type de grappe 0P 24B 8B 12B etc."),
+                                     SIMP (typ='R'  ,statut='o',max='**',
+                                           fr="Coefficients multiplicatifs des sections d'absorption pour tous les groupes d'energie"))),
+  Configurations = NUPL (max = '**', statut = 'f',
+                         fr = "Liste des ajustements associes aux configurations de groupes de grappes de controle",
+                         elements = (SIMP (typ='TXM',statut='o',fr="Nom de la configuration"),
+                                     SIMP (typ='R'  ,statut='o',max='**',
+                                           fr="Coefficient multiplicatif de l'efficacites de la configuration"))),
+  Samarium       = NUPL (max = '**', statut = 'f',
+                         fr = "Liste des couples (Irradiation, Correction Reactivite due au samarium)",
+                         elements = (SIMP (typ='R',statut='o',fr="Taux d'irradiation en MWj/t"),
+                                     SIMP (typ='R',statut='o',fr="Correction de reactivite en pcm au taux d'irradiation precedent")))
+ ) ;  # Fin DONNEES_AJUSTEMENT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_DILUTION : Classe de definition des donnees du calcul d'accident de dilution
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_DILUTION = OPER (nom="ACCIDENT_DILUTION", op=0, sd_prod=AccidentDilution, niveau = 'DonneesDesAccidents',
+  fr  = "Donnees de la simulation de l'accident de dilution",
+  ang = "Data for dilution accident simulation",
+  ConfigArretChaud            = SIMP (typ='TXM',statut='o',defaut=('R','G1','G2','N1','N2'),max='**',
+                                      fr="Liste des groupes de grappes de la configuration a l'arret a chaud"),
+  ConfigArretFroid            = SIMP (typ='TXM',statut='o',defaut=('G1','G2','N1','N2'),max='**',
+                                      fr="Liste des groupes de grappes de la configuration a l'arret a froid"),
+  ConfigFroidDepassement      = SIMP (typ='TXM',statut='o',defaut=('G1','N1','N2'),max='**',
+                                      fr="Liste des groupes de la configuration a l'arret a froid en cas de depassement du delai"),
+  ConfigChaudDepassement      = SIMP (typ='TXM',statut='o',defaut=('R','G1','N1','N2'),max='**',
+                                      fr="Liste des groupes de la configuration a l'arret a chaud en cas de depassement du delai"),
+  IrradDepassement            = SIMP (typ='TXM',statut='o',max='**',    fr="Liste des irradiations de calcul en cas de depassement du delai"),
+  SousCriticiteArret          = SIMP (typ='R',statut='o', defaut=1000., fr="Sous-criticite a l'arret en pcm"),
+  CbDilutionCorrection        = SIMP (typ='R',statut='o', defaut=100. , fr="Correction du titre en bore de dilution, en ppm"),
+  EfficaciteGrappesCorrection = SIMP (typ='R',statut='o', defaut=10.  , fr="Correction de l'efficacite des grappes en %"),
+  DefautPuissanceCorrection   = SIMP (typ='R',statut='o', defaut=10.  , fr="Correction du defaut de puissance en %"),
+  DecalageGroupes             = SIMP (typ='R',statut='o', defaut=10.  , fr="Decalage des groupes, en nombre de pas extraits"),
+  PerteEfficacite             = SIMP (typ='R',statut='o', defaut=1.   , fr="Perte d'efficacite par pas des groupes, en pcm/pas"),
+  PmaxChaud                   = SIMP (typ='R',statut='o', defaut=35.  , fr="Puissance relative maximum en dilution a chaud, en %"),
+  DebitChaud                  = SIMP (typ='R',statut='o', defaut=31.  , fr="Debit de dilution a chaud en m3/h"),
+  DebitFroid                  = SIMP (typ='R',statut='o', defaut=31.  , fr="Debit de dilution a froid en m3/h"),
+  DebitDilution               = SIMP (typ='R',statut='o', defaut=60.  , fr="Debit de dilution en puissance en m3/h"),
+  RoEauRCV                    = SIMP (typ='R',statut='o', defaut=1.   , fr="Masse volumique de l'eau du ballon RCV en g/cm3"),
+  CRNFroid                    = SIMP (typ='R',statut='o', defaut=250. , fr="Effet des CRN en dilution a froid en pcm"),
+  TiltFroidMn                 = SIMP (typ='R',statut='o', defaut=-2.  , fr="Provision sur le delai operateur due au tilt radial en accident a froid, en mn"),
+  TiltChaudMn                 = SIMP (typ='R',statut='o', defaut=-2.  , fr="Provision sur le delai operateur due au tilt radial en accident a chaud, en mn"),
+  TiltFroidPpm                = SIMP (typ='R',statut='o', defaut=5.,
+                                      fr="Majoration de la teneur en bore a la criticite due au tilt radial en accident a froid, en ppm"),
+  TiltChaudPpm                = SIMP (typ='R',statut='o', defaut=22.,
+                                      fr="Majoration de la teneur en bore a la criticite due au tilt radial en accident a chaud, en ppm"),
+  TiltPnDdc                   = SIMP (typ='R',statut='o', defaut=53., fr="Provision due au tilt radial en accident a Pn DDDC, en pcm"),
+  DelaiOperateur              = SIMP (typ='R',statut='o', defaut=15., fr="Delai d'intervention en accident a froid ou a chaud en mn"),
+  DelaiRechargement           = SIMP (typ='R',statut='o', defaut=20., fr="Delai d'intervention en accident au rechargement en mn")
+ ) ;  # Fin ACCIDENT_DILUTION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_DILUTION_RESULTAT : Classe de definition des resultats du calcul d'accident de dilution
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_DILUTION_RESULTAT = OPER (nom="ACCIDENT_DILUTION_RESULTAT", op=0, sd_prod=AccidentDilutionResultat, niveau = 'ResultatsAccidents',
+  fr  = "Resultats de la simulation de l'accident de dilution",
+  ang = "Results from dilution accident simulation",
+  EtatArret               = SIMP (typ='TXM',statut='o', fr="Etat d'arret",into=('Chaud','Froid','Rechargement')),
+  BlocRechargement        = BLOC (condition = "EtatArret=='Rechargement'",
+        Keff              = SIMP (typ='R'  ,statut='o', fr="Keff au rechargement"),
+        Ebore             = SIMP (typ='R'  ,statut='o', fr="Efficacite du bore au rechargement pcm/ppm")),
+  BlocArret               = BLOC (condition = "EtatArret!='Rechargement'",
+        Configuration     = SIMP (typ='TXM',statut='o', fr="Configuration a l'arret"),
+        Irradiation       = SIMP (typ='R'  ,statut='o', fr="Irradiation de calcul MWj/t"),
+        CbArret           = SIMP (typ='R'  ,statut='o', fr="Titre en bore a l'arret en ppm"),
+        Eb                = SIMP (typ='R'  ,statut='o', fr="Efficacite du bore a l'arret en pcm/ppm"),
+        CbArretUrgence    = SIMP (typ='R'  ,statut='o', fr="Titre en bore a l'arret d'urgence en ppm"),
+        CbCriticite       = SIMP (typ='R'  ,statut='o', fr="Titre en bore a l'instant de criticite en ppm"),
+        EfficaciteAU      = SIMP (typ='R'  ,statut='o', fr="Efficacite de l'arret d'urgence en pcm"),
+        DelaiIntervention = SIMP (typ='R'  ,statut='o', fr="Delai d'intervention en mn"),
+        InstantCriticite  = SIMP (typ='R'  ,statut='f', fr="Instant de criticite en mn"),
+        IrradiationMin    = SIMP (typ='R'  ,statut='f', fr="Irradiation minimum MWj/t ou le delai d'intervention est suffisant"))
+ ) ;  # Fin ACCIDENT_DILUTION_RESULTAT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_RTV : Classe de definition des donnees du calcul d'accident de RTV
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_RTV = OPER (nom="ACCIDENT_RTV", op=0, sd_prod=AccidentRTV, niveau = 'DonneesDesAccidents',
+  fr  = "Donnees de la simulation de l'accident de RTV",
+  ang = "Data for Steam Line Break accident simulation",
+  CodeCalcul            = SIMP (typ='TXM' ,statut='o', defaut='COBRA',into=('COBRA','THYC','FLICA'),fr="Debit primaire en m3/h"),
+  DebitPrimaire         = SIMP (typ='R'   ,statut='o', defaut=70500.     ,fr="Debit primaire en m3/h"),
+  DebitContournement    = SIMP (typ='R'   ,statut='o', defaut=4.5        ,fr="Debit de contournement en % du debit primaire"),
+  PressionPrimaire      = SIMP (typ='R'   ,statut='o', defaut=57.5       ,fr="Pression primaire en bars"),
+  TmMoyenne             = SIMP (typ='R'   ,statut='o', defaut=239.8      ,fr="Temperature moyenne moderateur en Celsius"),
+  TmPnul                = SIMP (typ='R'   ,statut='o', defaut=286.       ,fr="Temperature moderateur a Pnul en Celsius"),
+  TmPnom                = SIMP (typ='R'   ,statut='o', defaut=287.8      ,fr="Temperature moderateur a Pnom en Celsius"),
+  BorePpm               = SIMP (typ='R'   ,statut='o', defaut=21.9       ,fr="Titre en bore du moderateur en ppm"),
+  NiveauPuissance       = SIMP (typ='R'   ,statut='o', defaut=14.1       ,fr="Puissance relative en %"),
+  GrappeCoincee         = SIMP (typ='TXM' ,statut='o', defaut='F14'      ,fr="Repere de la grappe coincee lors de l'accident"),
+  GrappesCorrespondance = SIMP (typ='TXM' ,statut='o', max='**'          ,fr="Correspondance entre grappes coincees lors de l'accident"),
+  AnglesBouclesFroides  = SIMP (typ='R'   ,statut='o', defaut=(0., 120., 240.),max=4,fr="Positions angulaires des boucles froides"),
+  TmBoucles             = SIMP (typ='R'   ,statut='o', defaut=(216.8,250.8,250.8),max=4,fr="Temperatures des boucles"),
+  TmCanaux              = SIMP (typ='R'   ,statut='o', max='**',fr="Temperatures moyennes d'entree des canaux COBRA"),
+  TmAssemblages         = SIMP (typ='R'   ,statut='o', max='**',fr="Temperatures moyennes a l'entree des assemblages du coeur"),
+  OrientationBoucles    = NUPL (max='**'  ,statut='o',fr="Orientation des boucles suivant la grappe coincee",
+               elements = (SIMP (typ='TXM',statut='o', fr="Repere de la grappe"),
+                           SIMP (typ='R'  ,statut='o', fr="Orientation des boucles suivant la grappe coincee, en degres")))
+ ) ;  # Fin ACCIDENT_RTV
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_CHUTE_GRAPPE : Classe de definition des donnees du calcul d'accident de chute de grappe(s)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_CHUTE_GRAPPE = OPER (nom="ACCIDENT_CHUTE_GRAPPE", op=0, sd_prod=AccidentChuteGrappe, niveau = 'DonneesDesAccidents',
+  fr  = "Donnees de la simulation de l'accident de chute de grappes",
+  ang = "Data for rod insertion accident simulation",
+  RecMinimum         = SIMP (typ='R',statut='o',defaut=1.225,fr="REC minimum"),
+  RoPenalite         = SIMP (typ='R',statut='f',defaut=10.,fr="Penalite en % a appliquer aux variations de reactivite"),
+  RoPenaliteSupp     = NUPL (statut='f',fr="Penalite supplementaire suivant la grappe chutee",elements = (
+                             SIMP (typ='TXM',statut='o',fr="Repere de la grappe"),
+                             SIMP (typ='R'  ,statut='o',fr="Penalite supplementaire en %"))),
+  DroiteDetection    = SIMP (typ='R',statut='o',min=4,max=4,defaut=(0.92, 50., 1.11, 250.),
+                             fr="Droite de detection de la chute de grappe dans le plan (Tilt,DeltaRo)(2 points a definir tilt1,deltaro1 et tilt2,deltaro2)"),
+  CoeffDesalignement = SIMP (typ='R',statut='o',min=8,max=8,defaut=(1.010,1.040,1.040,1.040,1.110,1.040,1.110,1.000),
+                             fr="Coefficients de desalignements K1 KP1 K2 KP2 K3 K4 K5 E"),
+  DeltaDnbrThermo    = SIMP (typ='R',statut='o',min=2,max=2,defaut=(5.7, 0.),
+                             fr="Variation du REC due aux effets thermohydrauliques, pour les chutes d'1 grappe et de 2 grappes"),
+  DeltaDnbrMax       = SIMP (typ='R',statut='o',min=2,max=2,defaut=(39., 74.),
+                             fr="Variation maximum du REC, pour les chutes d'1 grappe et de 2 grappes"),
+  RecEnveloppe       = SIMP (typ='R',statut='o',defaut=(1., 2., 1.5), min=3, max=3,
+                             fr="Definition du domaine REC pour la determination de l'enveloppe de la flyspeck : RecMin RecMax Pente"),
+  FxyIncertitude     = SIMP (typ='R',statut='o',defaut=(0.,1.03,150.,1.03,2000.,1.061), max='**',
+                             fr="Incertitude sur Fxy en fonction de l'irradiation (Couples (MWj/t, Facteur))")
+ ) ;  # Fin ACCIDENT_CHUTE_GRAPPE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_CHUTE_GRAPPE_RESULTAT : Classe de definition des resultats du calcul d'accident de chute de grappe(s)
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_CHUTE_GRAPPE_RESULTAT = OPER (nom="ACCIDENT_CHUTE_GRAPPE_RESULTAT", op=0, sd_prod=AccidentChuteGrappeResultat, niveau='ResultatsAccidents',
+  fr  = "Resultats de la simulation de l'accident de chute de grappes",
+  ang = "Rod insertion accident simulation Results",
+  Irradiation       = SIMP (typ='R'  ,statut='o', fr="Irradiation de calcul MWj/t"),
+  Chute             = FACT (max='**' ,statut='f', fr="Resultats de la chute d'1 ou 2 grappes",
+    Grappes         = SIMP (typ='TXM', statut='o', max=2, fr="Reperes des grappes chutees"),
+    DeltaRo         = SIMP (typ='R',statut='o', fr="Antireactivite introduite par la chute des grappes, en pcm"),
+    DeltaRoPen      = SIMP (typ='R',statut='o', fr="Antireactivite penalisee introduite par la chute des grappes, en pcm"),
+    Keff            = SIMP (typ='R',statut='o', fr="Keff apres chute des grappes"),
+    KeffPen         = SIMP (typ='R',statut='o', fr="Keff penalise apres la chute des grappes"),
+    DeltaFxy        = SIMP (typ='R',statut='o', fr="Rapport Fxy/FxyTBH"),
+    Tilt2emeMinimum = SIMP (typ='R',statut='o', fr="Valeur du 2eme tilt minimum")),
+  ChuteMax          = FACT (statut='f',fr="Valeurs maximales atteintes pour les chutes d'1 ou 2 grappes",
+    FDH             = SIMP (typ='R'  ,statut='o', fr="Facteur d'elevation d'enthalpie"),
+    DeltaRo         = SIMP (typ='R'  ,statut='o', fr="Antireactivite introduite par la chute des grappes, en pcm"),
+    DeltaRoPen      = SIMP (typ='R'  ,statut='o', fr="Antireactivite penalisee introduite par la chute des grappes, en pcm"),
+    Keff            = SIMP (typ='R'  ,statut='o', fr="Keff apres chute des grappes"),
+    KeffPen         = SIMP (typ='R'  ,statut='o', fr="Keff penalise apres la chute des grappes"),
+    DeltaFxy        = SIMP (typ='R'  ,statut='o', fr="Rapport Fxy/FxyTBH"),
+    PositionDeltaRo = SIMP (typ='TXM',statut='o', max=2,fr="Grappes associees a l'antireactivite max"),
+    PositionFxy     = SIMP (typ='TXM',statut='o', max=2,fr="Grappes associees au Fxy/FxyTBH max"))
+ ) ;  # Fin ACCIDENT_CHUTE_GRAPPE_RESULTAT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_EJECTION : Classe de definition des donnees du calcul d'accident d'ejection d'une grappe
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_EJECTION = OPER (nom="ACCIDENT_EJECTION", op=0, sd_prod=AccidentEjection, niveau = 'DonneesDesAccidents',
+  fr  = "Donnees de la simulation de l'accident d'ejection d'une grappe",
+  ang = "Data for rod ejection accident simulation",
+  Recouvrement     = SIMP (typ='R', statut='o', defaut=100., fr="Recouvrement en ejection Mode A, en nombre de pas"),
+  DeltaRoPenalite  = SIMP (typ='R', statut='o', defaut=1.10, fr="Facteur multiplicatif general des efficacites des grappes ejectees"),
+  FqPenalite       = SIMP (typ='R', statut='o', defaut=1.12, fr="Facteur multiplicatif general des Fq"),
+  DeltaRoPenGrappe = FACT (statut='f', fr="Corrections specifiques aux grappes ejectees : Couples RepereGrappe,PenaliteDeltaro",
+        Grappes    = SIMP (typ='TXM', statut='f', max='**', fr="Liste des grappes ejectees"),
+        Penalites  = SIMP (typ='R'  , statut='f', max='**', fr="Corrections des DeltaRo specifiques aux grappes ejectees")),
+  FqPenGrappe      = FACT (statut='f', fr="Corrections specifiques aux grappes ejectees : Couples RepereGrappe,PenaliteFq",
+        Grappes    = SIMP (typ='TXM', statut='f', max='**', fr="Liste des grappes ejectees"),
+        Penalites  = SIMP (typ='R'  , statut='f', max='**', fr="Corrections des Fq specifiques aux grappes ejectees"))
+ ) ;  # Fin ACCIDENT_EJECTION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENT_EJECTION_RESULTAT : Classe de definition des donnees du calcul d'accident d'ejection d'une grappe
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENT_EJECTION_RESULTAT = OPER (nom="ACCIDENT_EJECTION_RESULTAT", op=0, sd_prod=AccidentEjectionResultat, niveau = 'ResultatsAccidents',
+  fr  = "Resultats de la simulation de l'accident d'ejection d'une grappe",
+  ang = "Rod ejection accident simulation Results",
+  Ejection     = FACT (statut='o', max='**', fr="Resultats du calcul d'ejection d'une grappe",
+        Irradiation    = SIMP (typ='R'  , statut='o', fr="Irradiation MWj/t du calcul d'ejection"),
+        Puissance      = SIMP (typ='R'  , statut='o', fr="Niveau de du calcul d'ejection"),
+        Configuration  = SIMP (typ='TXM', statut='o', max='**',fr="Configuration d'ejection (liste des groupes inseres)"),
+        Grappe         = SIMP (typ='TXM', statut='o', fr="Repere de la grappe ejectee"),
+        Fxy            = SIMP (typ='R'  , statut='o', fr="Fxy dans la configuration d'ejection"),
+        Efficacite     = SIMP (typ='R'  , statut='o', fr="Efficacite de la grappe ejectee"),
+        Dollar         = SIMP (typ='R'  , statut='o', fr="Rapport DeltaRoEjectee/BetaTot"),
+        Fq             = SIMP (typ='R'  , statut='o', fr="Facteur de point chaud Fq"))
+ ) ;  # Fin ACCIDENT_EJECTION_RESULTAT
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CRITERES_SURETE : Classe de definition des criteres de surete et des valeurs limites des parametres cles des accidents
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+CRITERES_SURETE = OPER (nom="CRITERES_SURETE", op=0, sd_prod=CriteresSurete, niveau = 'DonneesDesAccidents',
+  fr  = "Criteres et valeurs limites des parametres cles de surete",
+  ang = "Safety Criteria and Accident Key Parameter Values",
+  FDHConception = SIMP (typ='R',statut='o',defaut=1.55 ,fr="Facteur d'elevation d'enthalpie de conception"),
+  RECMinimal    = SIMP (typ='R',statut='o',defaut=1.225,fr="Valeur minimale du REC"),
+  FxyLimite     = FACT (statut='o',fr="Liste des configurations de groupes et Fxy limites associes",
+                  Configurations  = SIMP (typ='TXM',max='**',statut='o',fr="Liste des configurations de groupes"),
+                  Fxy             = SIMP (typ='R'  ,max='**',statut='o',fr="Valeurs limites de Fxy pour toutes les configurations"))
+ ) ;  # Fin CRITERES_SURETE
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe DONNEES_ACCIDENTS : Agregation des donnees de tous les accidents et des criteres de surete
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+DONNEES_ACCIDENTS = OPER (nom="DONNEES_ACCIDENTS", op=0, sd_prod=DonneesAccidents, niveau = 'DonneesDesAccidents',
+  fr  = "Package des classes des donnees de simulation de tous les accidents",
+  ang = "All Accident Simulation Data",
+  regles = (AU_MOINS_UN('Dilution', 'RTV', 'ChuteGrappe','Ejection', 'CriteresSurete'),),
+  Dilution       = SIMP (typ=AccidentDilution    ,statut='f', fr="Donnees de l'accident de dilution"),
+  RTV            = SIMP (typ=AccidentRTV         ,statut='f', fr="Donnees de l'accident de RTV"),
+  ChuteGrappe    = SIMP (typ=AccidentChuteGrappe ,statut='f', fr="Donnees de l'accident de chute de grappe"),
+  Ejection       = SIMP (typ=AccidentEjection    ,statut='f', fr="Donnees de l'accident d'ejection"),
+  CriteresSurete = SIMP (typ=CriteresSurete      ,statut='f', fr="Criteres de surete")
+ ) ;  # Fin DONNEES_ACCIDENTS
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe ACCIDENTS_RESULTATS : Classe de definition des options generales et du type de calcul demande
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ACCIDENTS_RESULTATS = OPER (nom="ACCIDENTS_RESULTATS", op=0, sd_prod=AccidentsResultats, niveau = 'ResultatsAccidents',
+  fr  = "Package des classes des resultats de simulation de tous les accidents",
+  ang = "All Accident Simulation Results",
+# regles = (AU_MOINS_UN('Dilution', 'RTV', 'ChuteGrappe','Ejection'),),
+  Dilution     = SIMP (typ=AccidentDilutionResultat    ,statut='f', fr="Resultats de la simulation de l'accident de dilution"),
+# RTV          = SIMP (typ=AccidentRTVResultat         ,statut='f', fr="Resultats de la simulation de l'accident de RTV"),
+  ChuteGrappe  = SIMP (typ=AccidentChuteGrappeResultat ,statut='f', fr="Resultats de la simulation de l'accident de chute de grappe"),
+  Ejection     = SIMP (typ=AccidentEjectionResultat    ,statut='f', fr="Resultats de la simulation de l'accident d'ejection")
+ ) ;  # Fin ACCIDENTS_RESULTATS
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe PARAMETRES_CALCUL_GESTION : Classe de definition de parametres de calcul de gestion du coeur
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+PARAMETRES_CALCUL_GESTION = OPER (nom="PARAMETRES_CALCUL_GESTION", op=0, sd_prod=ParametresCalculGestion, niveau = 'ParametresCalcul',
+  fr  = "Parametres divers pour le calcul de gestion du coeur",
+  ang = "Core Management Calculation Parameters",
+  DecalageGroupes   = SIMP (typ='R',statut='o',defaut=0.,fr="Valeur du decalage (en nombre de pas) des groupes a chaque campagne"),
+  ErreurMaxLnat     = SIMP (typ='R',statut='o',defaut=5.,fr="Erreur maximale (MWj/t) du calcul de la longueur naturelle de campagne"),
+  ErreurBite        = SIMP (typ='R',statut='o',defaut=5.,fr="Erreur maximale (en nombre de pas) du calcul de la position du bite en evolution"),
+  LnatCbDdc         = SIMP (typ='R',statut='o',defaut=(7500., 758., 12060., 1300.), min=4, max=4,
+                            fr="Loi lineaire Lnat fonction de CbDDC : 2 points a fournir (MWj/t, Cb)"),
+  TiltBuMax         = SIMP (typ='R',statut='o',defaut=5.,fr="Pourcentage max de desequilibre radial admissible pour les calculs 1/4 coeur"),
+  CalculMarge       = FACT (statut='o',fr="Parametres du calcul de la marge d'antireactivite",
+                    MajorationDefP  = SIMP (typ='R' ,statut='o',defaut= 10.,fr="Majoration % du defaut de puissance"),
+                    Redistribution  = SIMP (typ='R' ,statut='o',defaut=950.,fr="Effet de redistribution en pcm"),
+                    EffetVide       = SIMP (typ='R' ,statut='o',defaut= 50.,fr="Effet de vide en pcm"),
+                    MinorationEFG   = SIMP (typ='R' ,statut='o',defaut= 10.,fr="Minoration de l'efficacite des grappes en %"),
+                    Regulation      = SIMP (typ='R' ,statut='o',defaut=500.,fr="Antireactivite de la regulation en pcm"),
+                    UsureGrappes    = SIMP (typ='R' ,statut='o',defaut=100.,fr="Effet de l'usure des grappes en pcm"),
+                    Calibrage       = SIMP (typ='R' ,statut='o',defaut=280.,fr="Incertitude de calibrage en pcm")),
+  SousCriticiteDdc = SIMP (typ='R',statut='o',defaut=1000.,fr="Sous-criticite initiale en etat d'arret, en pcm"),
+  SousCriticiteFdc = SIMP (typ='R',statut='o',defaut=1770.,fr="Sous-criticite minimale en etat d'arret FDC bore nul, en  pcm"),
+  CritereArChaud   = SIMP (typ='R',statut='o',defaut= 690.,fr="Cb (ppm) de changement de critere sur la sous-criticite minimale en etat d'arret (Ex: 1000 a 1770 pcm)"),
+  MajorCbArret    = SIMP (typ='R',statut='o',defaut= 100.,fr="Majoration (en ppm) des titres en bore en etat d'arret")
+ ) ;  # Fin PARAMETRES_CALCUL_GESTION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe RESULTATS_CALCUL_GESTION : Classe de stockage des resultats de calcul de gestion
+# -----------------------------------------------------------------------------------------------------------------------------------
+RESULTATS_CALCUL_GESTION = OPER (nom="RESULTATS_CALCUL_GESTION", op=0, sd_prod=ResultatsCalculGestion, niveau = 'Resultats',
+  fr  = "Resultats divers des calculs de gestion du coeur",
+  ang = "Core Management Calculation Results",
+  Cb1ereDivergence = SIMP (typ='R',statut='f',defaut=0.,fr="Titre en bore a la premiere divergence, en ppm"),
+  CTMNegatif = FACT (statut='f',
+    Cbore = SIMP (typ='R',statut='o',fr="Titre en bore (ppm) garantissant un CTM negatif en DDC Pnul"),
+    Irrad = SIMP (typ='R',statut='o',fr="Irradiation MWj/t au-dela de laquelle le CTM est negatif a Pnul"),
+    Pmax  = SIMP (typ='R',statut='o',defaut=100.,fr="Niveau % de puissance limite garantissant un CTM negatif en DDC"),
+    CTMP  = SIMP (typ='R',statut='o',max='**',fr="CTM pcm/C en fonction du niveau de puissance en DDC (Serie de couples Pr, CTM)"),
+    Position = SIMP (typ='R',statut='o',max='**',
+              fr="Chevauchement des groupes conduisant a un CTM nul suivant la puissance (Couples Pr, Chevauchement)"))
+ ) ;  # Fin RESULTATS_CALCUL_GESTION
+# -----------------------------------------------------------------------------------------------------------------------------------
+#  Classe CALIBRAGE_GROUPES : Classe de stockage des positions de calibrage des groupes gris
+# -----------------------------------------------------------------------------------------------------------------------------------
+CALIBRAGE_GROUPES = OPER (nom="CALIBRAGE_GROUPES", op=0, sd_prod=CalibrageGroupes, niveau = 'DonneesPilotage',
+  fr  = "Positions de calibrage des groupes gris et coefficients isothermes associes",
+  ang = "Grey Control Rod Cluster Positions Versus Power Level and Isothermal Coefficients",
+  PasPuissance    = SIMP (typ='R', statut='o', defaut=5.,
+                          fr="Pas en puissance (%) pour la donnee des positions de calibrage"),
+  Calibrage       = FACT (statut='o',max='**',
+     Irradiation  = SIMP (typ='R',statut='o', fr="Irradiation MWj/t"),
+     Positions    = SIMP (typ='I',statut='o',max='**',fr="Positions de calibrage pour tous les niveaux de puissance")),
+  AlphaIso        = FACT (statut='o',max='**',
+     Irradiation  = SIMP (typ='R',statut='o', fr="Irradiation MWj/t"),
+     Coefficients = SIMP (typ='R',statut='o',max='**',fr="Coefficients isothermes pour tous les niveaux de puissance pcm/C")),
+  Chevauchement   = FACT (statut='o',max='**',
+     Irradiation  = SIMP (typ='R',statut='o', fr="Irradiation MWj/t"),
+     Pas          = SIMP (typ='I',statut='o',max='**',fr="Pas de chevauchement des groupes pour tous les niveaux de puissance")),
+  PnulDDCPosition = SIMP (typ='I',statut='o',max='**',fr="Positions de groupes gris dans les conditions d'essai de demarrage")
+ ) ;  # Fin CALIBRAGE_GROUPES
diff --git a/Descartes/editeur.ini b/Descartes/editeur.ini
new file mode 100644 (file)
index 0000000..99f4d63
--- /dev/null
@@ -0,0 +1,23 @@
+import os
+
+import prefs
+
+rep_cata = prefs.REPINI
+
+# Accès à la documentation 
+path_doc              = os.path.join(rep_cata,'..','Doc')
+exec_acrobat    =       "/usr/bin/acroread"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+
+# Choix des catalogues
+rep_mat="bidon"
+
+catalogues = (
+              ('DESCARTES','v1',os.path.join(rep_cata,'cata_descartes.py'),'python'),
+              ('DESCARTES','v2',os.path.join(rep_cata,'cata_descartes_new.py'),'python','defaut'),
+             )
+
diff --git a/Descartes/eficas_descartes.py b/Descartes/eficas_descartes.py
new file mode 100755 (executable)
index 0000000..c5368f5
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+#            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 Descartes
+"""
+# Modules Python
+import sys
+
+# Modules Eficas
+import prefs
+sys.path[:0]=[prefs.INSTALLDIR]
+
+import Editeur
+from Editeur import eficas_go
+
+if len(sys.argv) > 1 :
+    # on veut ouvrir un fichier directement au lancement d'Eficas
+    eficas_go.lance_eficas(code='DESCARTES',fichier = sys.argv[1])
+else:
+    # on veut ouvrir Eficas 'vide'
+    eficas_go.lance_eficas(code='DESCARTES')
+
diff --git a/Descartes/prefs.py b/Descartes/prefs.py
new file mode 100644 (file)
index 0000000..c14833e
--- /dev/null
@@ -0,0 +1,25 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+#CODE_PATH = os.path.join(REPINI,'../../Superv')
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+# Par défaut on utilise le répertoire icons dans Editeur
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+
index 5b320e1931b43267149c7b4e57d2bcfff15d0a77..752a44c711e69634d4effea3b1378f29d2c5e6e5 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF Interp Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter,ScrolledText
index 7e9ff7db0f9c00b48af2539b031e00551467ff13..2ee01c7a298a5c94f8b6e5ddddf167f5d0fddc77 100644 (file)
@@ -1,3 +1,22 @@
+#            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 généraux
@@ -294,10 +313,7 @@ class ObjectTreeItem(TreeItem,Delegate):
 
     def get_fr(self):
         """ Retourne le fr de l'objet pointé par self """
-        try:
-           return self.object.get_fr()
-        except:
-           return ''
+        return self.object.get_fr()
 
     def get_docu(self):
         """ Retourne la clé de doc de l'objet pointé par self """
@@ -393,6 +409,12 @@ class SequenceTreeItem(ObjectTreeItem):
     def GetText(self):
       return  "    "
 
+    def additem(self,obj,pos):
+        # XXX Passer par addentite  de MCList ???
+        self.object.insert(pos,obj)
+        item = self.make_objecttreeitem(self.appli, obj.nom + ":", obj)
+        return item
+
     def suppitem(self,item):
         if not self.object.isMCList():return 1
         try :
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..427090e66888b37840b3c0fa9f2f9ff6792ca7c4 100644 (file)
@@ -0,0 +1,19 @@
+#            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.
+#
+#
+# ======================================================================
index b52a564f8d9e21e398f01a1572d12579492b0f6e..2a0d4a0be46d3fe2128d7e6910576732ce5aff62 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF analyse_catalogue Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 string import split,strip,lowercase,uppercase
 import re,string,cPickle,os
@@ -11,8 +23,8 @@ import re,string,cPickle,os
 from Noyau.N_CR import CR
 
 #
-__Id__="$Id: analyse_catalogue.py,v 1.13.18.3 2001/06/19 12:24:48 iliade Exp $"
-__version__="$Name: FR_28_06_10_00 $"
+__Id__="$Id: analyse_catalogue.py,v 1.2 2002/05/15 15:31:58 eficas Exp $"
+__version__="$Name:  $"
 #
 l_noms_commandes = ['OPER','PROC','MACRO','FORM']
 l_noms_composes=['FACT','BLOC','NUPL','FORM']
@@ -92,15 +104,15 @@ class ENTITE :
                l=[]
                d={}
                if len(self.children)==0:
-                       self.liste = l
-                       self.dico = d
+                       self.ordre_mc = l
+                       self.entites = d
                        return
                try :
                        for child in self.children:
                                l.append(child.nom)
                                d[child.nom]=child
-                       self.liste = l
-                       self.dico = d
+                       self.ordre_mc = l
+                       self.entites = d
                except:
                        print 'erreur :',self.nom,self.__class__
                
@@ -254,8 +266,8 @@ class CATALOGUE_CATA:
                for cmd in self.liste_commandes:
                        l.append(cmd.nom)
                        d[cmd.nom]=cmd
-               self.liste = l
-               self.dico = d
+               self.ordre_mc = l
+               self.entites = d
 
        def report(self):
                """ retourne l'objet rapport du catalogue de commande """
@@ -283,7 +295,7 @@ def make_cata_pickle(fic_cata):
   cata_ordonne = analyse_catalogue(None,fic_cata)
   f = open(fic_cata_p,'w+')
   p = cPickle.Pickler(f)
-  p.dump(cata_ordonne.dico)
+  p.dump(cata_ordonne.entites)
   f.close()
   
 if __name__ == "__main__" :
index f8b031f7a1d5aed6a8ea4dc3b33fb14e213af666..41c1e664a7e82ea6d88d961a13f29765891c0360 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe APPLI qui est la classe mère de
     l'application EFICAS. Elle prend en charge l'organisation générale
@@ -6,6 +25,7 @@
 """
 # Modules Python
 import sys
+import types
 import Pmw
 import Tkinter
 
@@ -13,6 +33,9 @@ import Tkinter
 import splash
 import prefs
 import fontes
+import tooltip
+
+VERSION="EFICAS v1.3"
 
 class APPLI: 
   def __init__ (self,master,code='ASTER',fichier=None) :
@@ -21,7 +44,7 @@ class APPLI:
       self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
       self.top.minsize(900,500)
       self.top.geometry("900x500")
-      self.top.title('EFICAS v1.1 pour '+self.code)
+      self.top.title(VERSION + ' pour '+self.code)
       self.top.withdraw()
       self.initializeTk(master)
       Pmw.initialise(master)
@@ -29,7 +52,7 @@ class APPLI:
       self.format_fichier = Tkinter.StringVar()
       self.message=''
       self.cree_composants_graphiques()
-      self.load_extensions()
+      self.load_appli_composants()
       self.affiche_FAQ()
       splash.fini_splash()
 
@@ -69,18 +92,18 @@ class APPLI:
       import statusbar
       self.statusbar=statusbar.STATUSBAR(self.top)
 
-  def load_extensions(self):
-      splash._splash.configure(text = "Chargement des extensions")
-      for mname in self.extensions:
-         self.load_extension(mname)
+  def load_appli_composants(self):
+      splash._splash.configure(text = "Chargement des appli_composants")
+      for mname in self.appli_composants:
+         self.load_appli_composant(mname)
 
-  def load_extension(self,mname):
+  def load_appli_composant(self,mname):
       module=__import__(mname,globals(),locals())
       factory=getattr(module,mname.upper())
-      extension=factory(self,self.top)
-      setattr(self,mname,extension)
-      self.fill_menus(extension,extension.menu_defs)
-      self.toolbar.creer_boutons_extension(extension.button_defs,extension)
+      appli_composant=factory(self,self.top)
+      setattr(self,mname,appli_composant)
+      self.fill_menus(appli_composant,appli_composant.menu_defs)
+      self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
 
   def affiche_FAQ(self):
       import faq
@@ -110,6 +133,7 @@ class APPLI:
         root.option_add('*background', 'grey')
         root.option_add('*foreground', 'black')
         root.option_add('*EntryField.Entry.background', 'white')
+       root.option_add('*Entry*background', 'white')
         root.option_add('*Listbox*background', 'white')
         root.option_add('*Listbox*selectBackground', '#00008b')
         root.option_add('*Listbox*selectForeground', 'white')
@@ -127,7 +151,7 @@ class APPLI:
       """
           Retourne un texte d'informations sur la session courante d'EFICAS
       """
-      texte = 'EFICAS v1.1\n\n'
+      texte = VERSION + '\n\n'
       texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n'
       texte = texte + 'Equipe : MTI/MMN\n\n'
       texte = texte + 'Code utilisé : %s\n' %self.code
@@ -150,24 +174,45 @@ class APPLI:
       x=event.x
       y=event.y
       widget=event.widget
-      self.aide = Tkinter.Label(widget ,text = aide,
-                        bg="yellow",relief="ridge",anchor='w')
-      self.aide.place(in_=widget,
-                      relx=0.5,rely=0.5,anchor='center')
-      print aide
-      return
-
-  def fill_menus(self,extension,defs):
+      self.aide=tooltip.TOOLTIP(widget)
+      self.aide.xoffset = 10
+      self.aide.yoffset = - widget.winfo_height()/2
+      self.aide.setText(aide)
+      self.aide._showTip()
+      return 
+
+  def cree_menu(self,menu,itemlist,appli_composant):
+      """
+          Ajoute les items du tuple itemlist
+          dans le menu menu
+      """
+      number_item=0
+      radio=None
+      for item in itemlist:
+         number_item=number_item + 1
+         if not item :
+            menu.add_separator()
+         else:
+            label,method=item
+            if type(method) == types.TupleType:
+               # On a un tuple => on cree une cascade
+               menu_cascade=Tkinter.Menu(menu)
+               menu.add_cascade(label=label,menu=menu_cascade)
+               self.cree_menu(menu_cascade,method,appli_composant)
+            elif method[0] == '&':
+               # On a une chaine avec & en tete => on cree un radiobouton
+               command=getattr(appli_composant,method[1:])
+               menu.add_radiobutton(label=label,command=command)
+               if radio == None:radio=number_item
+            else:
+               command=getattr(appli_composant,method)
+               menu.add_command(label=label,command=command)
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
+
+  def fill_menus(self,appli_composant,defs):
       menudict=self.menubar.menudict
       for mname,itemlist in defs:
           menu=menudict.get(mname)
           if not menu:continue
-          for item in itemlist:
-             if not item :
-                menu.add_separator()
-             else:
-                label,method=item
-                command=getattr(extension,method)
-                menu.add_command(label=label,command=command)
-                
-      
+          self.cree_menu(menu,itemlist,appli_composant)
diff --git a/Editeur/autre_analyse_cata.py b/Editeur/autre_analyse_cata.py
new file mode 100644 (file)
index 0000000..706bf6f
--- /dev/null
@@ -0,0 +1,107 @@
+#            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 a retrouver l'ordre des mots cles d'un catalogue de
+   commandes
+"""
+if __name__ == "__main__" :
+   import sys
+   sys.path[:0]=[".."]
+   sys.path[:0]=["../Aster"]
+   sys.path[:0]=["../Saturne"]
+
+from Accas import NUPL
+
+def traite_entiteNUPL(entite):
+   """
+       Fonction speciale pour les nuplets (classe NUPL)
+       Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
+       qui est une liste vide.
+   """
+   entite.ordre_mc=[]
+
+def traite_entite(entite):
+   """
+       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
+       de l'entite
+       La fonction active le meme type de traitement pour les sous entites
+       de entite
+   """
+   l=[]
+   for k,v in entite.entites.items():
+      if isinstance(v,NUPL):
+         traite_entiteNUPL(v)
+      else:
+         traite_entite(v)
+      l.append((v._no,k))
+   l.sort()
+   entite.ordre_mc=[ item for index, item in l ]
+
+def analyse_niveau(cata_ordonne_dico,niveau):
+   """
+       Analyse un niveau dans un catalogue de commandes
+   """
+   if niveau.l_niveaux == ():
+       # Il n'y a pas de sous niveaux
+       for oper in niveau.entites:
+           traite_entite(oper)
+           cata_ordonne_dico[oper.nom]=oper
+   else:
+       for niv in niveau.l_niveaux:
+           analyse_niveau(cata_ordonne_dico,niv)
+  
+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
+      Elle retourne un dictionnaire qui contient toutes les commandes
+      du catalogue indexées par leur nom
+   """
+   cata_ordonne_dico={}
+   if cata.JdC.l_niveaux == ():
+       # Il n'y a pas de niveaux
+       for oper in cata.JdC.commandes:
+           traite_entite(oper)
+           cata_ordonne_dico[oper.nom]=oper
+   else:
+       for niv in cata.JdC.l_niveaux:
+           analyse_niveau(cata_ordonne_dico,niv)
+   return cata_ordonne_dico
+
+
+if __name__ == "__main__" :
+   from Cata import cata_STA6
+   dico=analyse_catalogue(cata_STA6)
+   #import cata_saturne
+   #dico=analyse_catalogue(cata_saturne)
+
+   def print_entite(entite,dec='  '):
+       print dec,entite.nom,entite.__class__.__name__
+       for mocle in entite.ordre_mc:
+          print_entite(entite.entites[mocle],dec=dec+'  ')
+
+   for k,v in dico.items():
+      print_entite(v,dec='')
+
+   print dico.keys()
index 0553c6e3a2703e7b7ed59fa44181f1aa4079fdaa..ba5b9eeee65dd4c26995a4518008c534c66bfb51 100644 (file)
@@ -1,3 +1,22 @@
+#            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
index 41840842ef8a83092f218a4218cb273bb2192dd6..56bfa7dd3ff1974d2e697251b502230b4c5c6c0b 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe BUREAU qui gere les JDC ouverts
 """
@@ -10,10 +29,12 @@ from tkMessageBox import showinfo,askyesno,showerror
 
 # Modules Eficas
 import splash
+import prefs
 import convert
 import generator
+import AIDE
 from jdcdisplay import JDCDISPLAY
-from utils import extension,stripPath,save_in_file
+from utils import extension_fichier,stripPath,save_in_file
 from widgets import Fenetre,Ask_Format_Fichier
 from fenetre_mc_inconnus import fenetre_mc_inconnus
 
@@ -44,6 +65,10 @@ class BUREAU:
                                    ('Mots-clés inconnus','mc_inconnus'),
                                   ]
               ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS'),
+                      ]
+              ),
              ]
 
    button_defs  =      (('New24',"newJDC","Création d'un nouveau fichier",'always'),
@@ -58,6 +83,14 @@ class BUREAU:
                         ('Delete24',"delete","Supprime l'objet courant",'jdc'),
                         ('Help24',"view_doc","Documentation de l'objet courant",'jdc')
                        )
+   try:
+      menu_defs=prefs.menu_defs['bureau']
+   except:
+      pass
+   try:
+      button_defs=prefs.button_defs['bureau']
+   except:
+      pass
 
    def __init__(self,appli,parent):
       self.parent=parent
@@ -72,7 +105,7 @@ class BUREAU:
 
    def cree_cataitem(self):
       """
-          On récupère dans l'extension readercata les variables 
+          On récupère dans l'appli_composant readercata les variables 
           qui servent par la suite pour la création des JDC
       """
       self.cataitem=self.appli.readercata.cataitem
@@ -108,6 +141,7 @@ class BUREAU:
                          cata_ord_dico=self.cata_ordonne_dico,
                          appli=self.appli)
       self.JDCName=J.nom
+      self.fileName=None
       self.ShowJDC(J,self.JDCName)
       self.appli.toolbar.active_boutons()
 
@@ -196,11 +230,12 @@ class BUREAU:
           Demande à l'utilisateur quel JDC existant il veut ouvrir
       """
       if self.code == 'ASTER':
-          filetypes = ( ("format "+self.appli.format_fichier.get(), ".comm"),)
+          filetypes = ( ("format "+self.appli.format_fichier.get(), ".comm"),("Tous",'*'))
       else:
           filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),)
       if not hasattr(self,'initialdir'):
-         self.initialdir = self.appli.CONFIGURATION.rep_user
+         #self.initialdir = self.appli.CONFIGURATION.rep_user
+         self.initialdir = self.appli.CONFIGURATION.initialdir
       if not file :
           file = askopenfilename(title="Ouverture d'un fichier de commandes Aster",
                                  defaultextension=".comm",
@@ -208,7 +243,7 @@ class BUREAU:
                                  initialdir = self.initialdir)
       if file != '':
           self.fileName = file
-          e=extension(file)
+          e=extension_fichier(file)
           self.JDCName=stripPath(file)
           self.initialdir = os.path.dirname(file)
       else :
@@ -333,7 +368,8 @@ class BUREAU:
       sauvegarde = asksaveasfilename(title=titre,
                                      defaultextension=defext,
                                      filetypes = filtyp,
-                                     initialdir = self.appli.CONFIGURATION.rep_user)
+                                     initialdir = self.appli.CONFIGURATION.initialdir)
+                                     #initialdir = self.appli.CONFIGURATION.rep_user)
       if sauvegarde != '':
           if not save_in_file(sauvegarde,self.jdc_fini) :
               showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`)
@@ -504,12 +540,16 @@ class BUREAU:
       """
       if not hasattr(self,'JDC') : return
       titre = "fichier de commandes utilisateur"
-      texte = self.JDC.procedure
-      if texte == None:
+      #texte = self.JDC.procedure
+      #if texte == None:
+      if self.JDCDisplay_courant.fichier == None:
             self.appli.affiche_infos("Pas de fichier initial")
-            showerror("Impossible de visualiser le fichier initial","EFICAS ne peut visualiser le fichier \
-                       initial.\nIl s'agit d'un nouveau JDC")
+            showerror("Impossible de visualiser le fichier initial",
+                      "EFICAS ne peut visualiser le fichier initial.\nIl s'agit d'un nouveau JDC")
             return
+      f=open(self.JDCDisplay_courant.fichier,'r')
+      texte=f.read()
+      f.close()
       self.visu_texte_JDC = Fenetre(self.appli,titre=titre,texte=texte)
 
    def affichage_fichier_ini(self):
@@ -537,4 +577,8 @@ class BUREAU:
       l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus()
       o = fenetre_mc_inconnus(l_mc)
       l = o.wait_new_list()
+      #print "mc_inconnus_new_list: ",l
+      #CCAR: Il n' y a pas de retour vers le JDC
 
+   def aideEFICAS(self):
+      AIDE.go(master=self.parent)
index 24535cbcceecf0e323d60a3606a1af89dbfff728..c72cd2c9b24f6f95fb80ba63dcbc169cc5c65e4d 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF catabrowser Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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
 import os
@@ -23,8 +35,8 @@ from Accas import OPER,PROC,MACRO,FORM
 from Accas import FACT,BLOC,SIMP
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: catabrowser.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: catabrowser.py,v 1.2 2002/05/15 15:31:58 eficas Exp $"
 #
 class Tableau:
   incr = 10
@@ -224,8 +236,8 @@ class CATAItem(TreeItem):
   def get_liste_mc_ordonnee(self):
     """ Retourne la liste ordonnée (suivant le catalogue) brute des fils
     de l'entite courante """
-    if hasattr(self.objet_cata_ordonne,'liste'):
-      return self.objet_cata_ordonne.liste
+    if hasattr(self.objet_cata_ordonne,'ordre_mc'):
+      return self.objet_cata_ordonne.ordre_mc
     else :
       l=self.objet_cata_ordonne.keys()
       l.sort()
@@ -248,7 +260,7 @@ class CATAItem(TreeItem):
     l_cles_fils = self.get_liste_mc_ordonnee()
     for k in l_cles_fils :
       if type(self.objet_cata_ordonne) == types.InstanceType :
-        objet_cata = self.objet_cata_ordonne.dico[k]
+        objet_cata = self.objet_cata_ordonne.entites[k]
       else :
         objet_cata = self.objet_cata_ordonne.get(k,None)
       item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k],
index 5cdbe21154c826d8f01b25aae87e11ff28050f72..b2f30f00e2ddf8ca89bf082b800c72c8ed650738 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF cataediteur Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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
 import os
@@ -26,8 +38,8 @@ from Accas import ASSD,GEOM
 import definition_cata
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: cataediteur.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: cataediteur.py,v 1.2 2002/05/15 15:31:58 eficas Exp $"
 #
 
 Fonte_Niveau = fontes.canvas_gras_italique
@@ -134,7 +146,7 @@ class Panel(Frame) :
       texte_infos = ''
       for e in cmd.entites.keys() :
           if e == name :
-              texte_infos=cmd.entites[e].fr
+              texte_infos=getattr(cmd.entites[e],'fr')
               break
       if texte_infos == '' : texte_infos="Pas d'infos disponibles"
       self.parent.appli.affiche_infos(texte_infos)
@@ -653,7 +665,7 @@ class OPERItem(OBJECTItem):
     for k in l_cles_fils :
       typ = TYPE_COMPLET(dico_fils[k])
       if type(self.objet_cata_ordonne) == types.InstanceType :
-        objet_cata = self.objet_cata_ordonne.dico[k]
+        objet_cata = self.objet_cata_ordonne.entites[k]
       else :
         objet_cata = self.objet_cata_ordonne.get(k,None)
       item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
@@ -665,7 +677,7 @@ class OPERItem(OBJECTItem):
     return self.object.get_valeur_attribut('nom')
 
   def get_liste_mc_ordonnee(self):
-    return self.objet_cata_ordonne.liste
+    return self.objet_cata_ordonne.ordre_mc
 
   def GetIconName(self):
     if self.object.isvalid():
@@ -754,7 +766,7 @@ class NIVEAUItem(OPERItem):
     for k in l_cles_fils :
       typ = TYPE_COMPLET(dico_fils[k])
       if type(self.objet_cata_ordonne) == types.InstanceType :
-        objet_cata = self.objet_cata_ordonne.dico[k]
+        objet_cata = self.objet_cata_ordonne.entites[k]
       else :
         objet_cata = self.objet_cata_ordonne.get(k,None)
       item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata)
index 95d9d33b71b21ee409c604230bb90cad95dc27ec..6b80e0d339e9049abd82cf68d2b21499c25b645f 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la fonction utilitaire centerwindow
    qui sert à centrer une fenetre
index 085c7d97cb917a292a11d0ab63cd71c336cb8fd5..6f0682a02294d5d857481bed245ae302dd89a3df 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compobloc Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
 import Pmw
index 194730edd9c3c0de6c4a772bf0dbe4ec93a53326..d31e71dece518327c7c4a1c32578d9b811eda759 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compocomm Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
 import Pmw
index 8b8c9237b7a6ccc2bb6f88a4dfe9c06612dbf946..cab37e893de20350d252da3d117387cddea6cd64 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compocommandecomm Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
 import Pmw
index 0b52bbb3cad5f9c78fd98cf28aa990cff429801b..7e0a792780070b09dc6fc111cae6a5a52794f794 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compofact Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Pmw
 import Objecttreeitem
index b2d640f90dc59633ffbaf0cedd848ecc0a2d04e6..345bacc737f193b233b7f3d596e02426080ccbc7 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compoformule Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 les classes permettant de définir les objets graphiques
index 6446174909c2c4664902d6f13eecb61de34fded6..f331c6127f312d27f55718037066a926fdb56ba2 100644 (file)
@@ -1,17 +1,27 @@
-#@ MODIF compojdc Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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.
+#
+#
 # ======================================================================
-#XXX est ce utile ?from Tkinter import *
 import Pmw
 import Objecttreeitem
 import panels
 
 from widgets import ListeChoix
-# XXX temporairement supprimé :from Accas import commentaire 
 
 class JDCPanel(panels.OngletPanel):
   def init(self):
index ce439f5d8529eed2895ad69dc0000493c001595b..edbf840c603b4fab38f13852a50075040a886eee 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compomacro Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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
 import os,sys,string
@@ -23,8 +35,8 @@ import convert
 from widgets import Fenetre
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: compomacro.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: compomacro.py,v 1.4 2002/05/15 15:31:58 eficas Exp $"
 #
 
 class MACROPanel(panels.OngletPanel):
@@ -39,7 +51,7 @@ class MACROPanel(panels.OngletPanel):
       nb.add('Concept', tab_text='Nommer concept')
     if ficini == 1:
       nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom())
-    nb.add('Commande', tab_text='Insérer Commande')
+    nb.add('Commande', tab_text='Nouvelle Commande')
     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
     panneau=Pmw.PanedWidget(nb.page("Mocles"),
                             orient='horizontal')
@@ -187,6 +199,11 @@ class MACROTreeItem(compooper.EtapeTreeItem):
       Ce nom dépend de la validité de l'objet
       """
       if self.object.isactif():
+        if self.object.state != 'unchanged':
+           # Si des modifications ont eu lieu on force le calcul des concepts de sortie
+           # et celui du contexte glissant
+           self.object.get_type_produit(force=1)
+           self.object.parent.reset_context()
         if self.object.isvalid():
           return "ast-green-square"
         else:
@@ -230,6 +247,7 @@ class MACROTreeItem(compooper.EtapeTreeItem):
       # item.object = MCSIMP, MCFACT, MCBLOC ou MCList 
       if item.object.isoblig() :
           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+         print "Impossible de supprimer un mot-clé obligatoire"
           return 0
       else :
           self.object.suppentite(item.object)
@@ -274,10 +292,6 @@ class MACROTreeItem(compooper.EtapeTreeItem):
   def verif_condition_bloc(self):
       return self.object.verif_condition_bloc()
 
-  def nomme_sd(self,nom):
-      """ Lance la méthode de nommage de la SD """
-      return self.object.nomme_sd(nom)
-
   def get_noms_sd_oper_reentrant(self):
       return self.object.get_noms_sd_oper_reentrant()
 
index 74f5254ea96babcde67d2a0d070171f2f8404c04..e1ba88e43fdbcde816a8664e3dc1fc10c2d681b7 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compomclist Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
 import Pmw
@@ -39,7 +51,35 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem):
         Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
         """
         return 0
-    
+
+    def isMCList(self):
+        """
+        Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
+        """
+        return 1
+       
+    def additem(self,obj,pos):
+        """
+       Ajoute un objet MCFACT à la MCList (self.object) à la position pos
+       """
+       self.object.init_modif()
+       obj.verif_existence_sd()
+       obj.reparent(self.object.parent)
+       self.object.insert(pos,obj)
+        item = self.make_objecttreeitem(self.appli, obj.nom + ":", obj)
+        return item  
+
+    def suppitem(self,item):
+        """
+       Retire un objet MCFACT de la MCList (self.object) 
+       """
+        self.object.init_modif()
+        self.object.remove(item.object)
+        # la liste peut être retournée vide !
+        message = "Mot-clé " + item.object.nom + " supprimé"
+        self.appli.affiche_infos(message)
+        return 1
+           
 import Accas
 treeitem = MCListTreeItem
 objet = Accas.MCList    
index 67ed0df170eeea15b26de6de8df35b6e31fffe4a..f16c2c13d98fc8cf035d3477facbc42191c7ab11 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF componiveau Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
index d4e76fb921b78404b7167d60b7ee39d7b566a49e..04d11082c8be666a6bc1ea48a0db004d4c52ffd6 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF componuplet Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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
 import types
@@ -17,8 +29,8 @@ import Objecttreeitem
 import panels
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: componuplet.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: componuplet.py,v 1.1.1.1 2002/03/26 09:08:46 eficas Exp $"
 #
 
 myrepr = Repr()
index eceb5cf8b635c05c07cc33bbda02164134bb73f9..154aa2abf98d5a70067e4091ce1c9e930ff2e95c 100644 (file)
@@ -1,12 +1,25 @@
-#@ MODIF compooper Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
 import Pmw
+import traceback
 import Objecttreeitem
 import panels
 import fontes
@@ -68,7 +81,8 @@ class OPERPanel(panels.OngletPanel):
           choix = self.listbox.getcurselection()[0]
           self.valeur_choisie.set(choix)
       except:
-          pass
+          traceback.print_exc()
+         
 
   def choose_valeur_from_list(self,command):
       try:
@@ -76,7 +90,7 @@ class OPERPanel(panels.OngletPanel):
           self.valeur_choisie.set(choix)
           apply(command,(),{})
       except:
-          pass
+          traceback.print_exc()
 
 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
   panel = OPERPanel
@@ -189,7 +203,9 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
 
   def nomme_sd(self,nom):
       """ Lance la méthode de nommage de la SD """
-      return self.object.nomme_sd(nom)
+      test,mess= self.object.nomme_sd(nom)
+      if test:self.object.parent.reset_context()
+      return test,mess
 
   def is_reentrant(self):
       return self.object.is_reentrant()
@@ -218,6 +234,16 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       commande_comment.jdc = commande_comment.parent = self.object.jdc
       return commande_comment
 
+  def replace_child(self,old_item,new_item):
+     """
+     Remplace old_item.object par new_item.object dans les fils de self.object
+     """
+     index = self.object.mc_liste.index(old_item.object)
+     self.object.init_modif()
+     self.object.mc_liste.remove(old_item.object)
+     self.object.mc_liste.insert(index,new_item.object)
+     self.object.fin_modif()
+     
 import Accas
 treeitem = EtapeTreeItem
 objet = Accas.ETAPE    
index cd247e05b01dc325d57b9430e3c301b6f9219b5d..b533146698997379ef77110eb5ab681562e02ecd 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compoparam Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 les classes permettant de définir les objets graphiques
index 13bb98bada0078eef34a9daa1ceb4d30421d579c..2fa34a60baa4fab2cf12712ba76a04113e9168ef 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compoparameval Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 les classes permettant de définir les objets graphiques
index 7cbc5edf476b9426f7aeb01d64685c36b63ce363..881888167303a088b3e1910f262c4db1c7b6989e 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF compoproc Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 Tkinter import *
 import Pmw
@@ -19,7 +31,7 @@ class PROCPanel(panels.OngletPanel):
     nb.pack(fill = 'both', expand = 1)
     self.nb=nb
     nb.add('Mocles', tab_text='Ajouter mots-clés')
-    nb.add('Commande', tab_text='Insérer Commande')
+    nb.add('Commande', tab_text='Nouvelle Commande')
     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
     panneau=Pmw.PanedWidget(nb.page("Mocles"),
                             orient='horizontal')
@@ -130,10 +142,6 @@ class ProcEtapeTreeItem(compooper.EtapeTreeItem):
   def verif_condition_bloc(self):
     return self.object.verif_condition_bloc()
 
-  def nomme_sd(self,nom):
-      """ Lance la méthode de nommage de la SD """
-      return self.object.nomme_sd(nom)
-
   def get_noms_sd_oper_reentrant(self):
       return self.object.get_noms_sd_oper_reentrant()        
 
index d7ec659b34d9dabd7c1fc975b464499dd2c7f7d4..57e7c505957555764a3eccf3befef43a0ac6af1d 100644 (file)
@@ -1,17 +1,32 @@
-#@ MODIF composimp Editeur  DATE 05/09/2001   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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
 import string,types,os
 from Tkinter import *
 import Pmw
 from tkFileDialog import *
 from tkMessageBox import showinfo
 from copy import copy,deepcopy
+import traceback
 
+# Modules Eficas
 import Objecttreeitem
 import prefs
 import panels
@@ -51,7 +66,8 @@ class newSIMPPanel(panels.OngletPanel):
 
   def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
       """
-      Enregistre  val comme valeur de self.node.item.object SANS faire de test de validité
+          Enregistre  val comme valeur de self.node.item.object SANS 
+          faire de test de validité
       """
       if self.parent.modified == 'n' : self.parent.init_modif()
       if name != None:
@@ -67,9 +83,9 @@ class newSIMPPanel(panels.OngletPanel):
           self.node.racine.verif_all()
       else :
           self.node.parent.verif()
+      self.node.update()
       if self.node.item.isvalid():
           self.node.parent.select()
-      self.node.update()
 # ----------------------------------------------------------------------------------------
 #   Méthodes utlisées pour la manipulation des items dans les listes de choix
 # ----------------------------------------------------------------------------------------
@@ -196,18 +212,18 @@ class PLUSIEURS_Panel(newSIMPPanel):
       self.record_valeur(valeur)
       if self.node.item.isvalid():
           self.node.parent.select()
-      # fermeture de la fenêtre de sélection\r
-      if self.ajout_valeurs:\r
-          self.ajout_valeurs.quit()\r
+      # fermeture de la fenêtre de sélection
+      if self.ajout_valeurs:
+          self.ajout_valeurs.quit()
           
   def annule_modifs_valeur(self):
       """
       RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
       """
       self.node.select()
-      # fermeture de la fenêtre de sélection\r
-      if self.ajout_valeurs:\r
-          self.ajout_valeurs.quit()\r
+      # fermeture de la fenêtre de sélection
+      if self.ajout_valeurs:
+          self.ajout_valeurs.quit()
           
   def traite_reel(self,valeur):
       """
@@ -305,7 +321,7 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
       """
       Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
       de possibles
-      """\r
+      """
       self.ajout_valeurs = None
       # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
       # la liste des choix et la liste des valeurs
@@ -424,12 +440,12 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       # Création de l'entry ou de la liste des SD
       self.label = Label(self.frame_choix,text="Valeur :")
       self.make_entry(frame = self.frame_choix,command = self.add_valeur_sans_into)
-      self.label.place(relx=0.05,rely=0.5)\r
-      # Création d'un bouton "Importer ..." sur le panel.\r
-      bouton_valeurs_fichier = Button(self.frame_choix,\r
-                                      text="Importer ...",\r
-                                      command=self.select_in_file)\r
-      bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)\r
+      self.label.place(relx=0.05,rely=0.5)
+      # Création d'un bouton "Importer ..." sur le panel.
+      bouton_valeurs_fichier = Button(self.frame_choix,
+                                      text="Importer ...",
+                                      command=self.select_in_file)
+      bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
       self.ajout_valeurs = None
       # boutons Ajouter et Supprimer
       bouton_add = Button(self.frame_boutons_fleches,
@@ -441,10 +457,12 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       bouton_add.place(relx=0.3,rely=0.35)
       bouton_sup.place(relx=0.3,rely=0.65)
       # affichage de l'aide
+      self.frame_aide.update()
       self.aide = Label(self.frame_aide,
                         text = aide,
                         justify='center',
-                        anchor='center')
+                        anchor='center',
+                       wraplength=int(self.frame_aide.winfo_width()*0.8))
       self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
       self.Liste_valeurs.affiche_liste()
       # boutons Accepter et Annuler
@@ -456,21 +474,24 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
                               command = self.annule_modifs_valeur)
       for but in (bouton_accepter,bouton_annuler):
           but.pack(side='left',padx=5)
-\r
-  def select_in_file(self):\r
-      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """\r
-      nom_fichier = askopenfilename(title="Choix fichier :")\r
-      if nom_fichier == "":\r
-          return\r
-      try:\r
-          f = open(nom_fichier, "rb")\r
-          selection_texte = f.read()\r
-          f.close()\r
-          self.ajout_valeurs = FenetreDeSelection(self, self.node.item,\r
-                                         titre="Sélection de valeurs",\r
-                                         texte=selection_texte)\r
-      except:\r
-          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)\r
+
+  def select_in_file(self):
+      """ Permet d'ouvrir un fichier choisi par l'utilisateur. """
+      nom_fichier = askopenfilename(title="Choix fichier :")
+      if nom_fichier == "":
+          return
+      try:
+          f = open(nom_fichier, "rb")
+          selection_texte = f.read()
+          f.close()
+          self.ajout_valeurs = FenetreDeSelection(self, 
+                                                 self.node.item,
+                                                 self.parent.appli,
+                                                 titre="Sélection de valeurs",
+                                                 texte=selection_texte)
+      except:
+          traceback.print_exc()
+          showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier)
           
   def get_bulle_aide(self):
       """
@@ -700,22 +721,20 @@ class UNIQUE_Panel(newSIMPPanel):
       if not test :
           mess = "impossible d'évaluer : %s " %`valeur`
           self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
-          return
       elif self.node.item.isvalid() :
           self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+         if self.node.item.get_position()=='global':
+              self.node.etape.verif_all()
+         elif self.node.item.get_position()=='global_jdc':
+              self.node.racine.verif_all()
+         else :
+              self.node.parent.verif()
+         self.node.update()
           self.node.parent.select()
       else :
           cr = self.node.item.get_cr()
           mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
           self.record_valeur(anc_val,mess=mess)
-          return
-      if self.node.item.get_position()=='global':
-          self.node.etape.verif_all()
-      elif self.node.item.get_position()=='global_jdc':
-          self.node.racine.verif_all()
-      else :
-          self.node.parent.verif()
-      self.node.update()
 
 class UNIQUE_INTO_Panel(UNIQUE_Panel):
   """
@@ -878,7 +897,7 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
       self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
       # affichage du bouton 'Nouveau concept'
       self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ",
-                                 items = ('OUI','NON'),menubutton_width=10)
+                                 items = ('NON','OUI'),menubutton_width=10)
       self.b_co.configure(command = lambda e,s=self : s.ask_new_concept())
       self.b_co.place(relx=0.05,rely=0.6,anchor='w')
       self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :')
@@ -888,9 +907,12 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
       self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :')
       self.valeur_choisie = StringVar()
       self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
-      self.aide = Label(self.frame_valeur, text = aide)
+      self.frame_valeur.update()
+      self.aide = Label(self.frame_valeur,
+                        text = aide,
+                       wraplength=int(self.frame_valeur.winfo_width()*0.8),
+                       justify='center')
       self.aide.place(relx=0.5,rely=0.85,anchor='n')
-      self.b_co.invoke('NON')
       # affichage de la valeur courante
       self.display_valeur()
       
@@ -902,13 +924,66 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
       pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour
       entrer le nom d'un concept non encore existant"""
 
+  def valid_valeur(self):
+      """
+      Teste si la valeur fournie par l'utilisateur est une valeur permise :
+      - si oui, l'enregistre
+      - si non, restaure l'ancienne valeur
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      valeur = self.get_valeur()
+      self.erase_valeur()
+      anc_val = self.node.item.get_valeur()
+      test_CO=self.node.item.is_CO(anc_val)
+      test = self.node.item.set_valeur(valeur)
+      if not test :
+          mess = "impossible d'évaluer : %s " %`valeur`
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+          return
+      elif self.node.item.isvalid() :
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+          if test_CO:
+             # il faut egalement propager la destruction de l'ancien concept
+             self.node.item.delete_valeur_co(valeur=anc_val)
+             # et on force le recalcul des concepts de sortie de l'etape
+             self.node.item.object.etape.get_type_produit(force=1)
+             # et le recalcul du contexte
+             self.node.item.object.etape.parent.reset_context()
+          self.node.parent.select()
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+          self.record_valeur(anc_val,mess=mess)
+          return
+      if self.node.item.get_position()=='global':
+          self.node.etape.verif_all()
+      elif self.node.item.get_position()=='global_jdc':
+          self.node.racine.verif_all()
+      else :
+          self.node.parent.verif()
+      self.node.update()
+
   def valid_nom_concept_co(self,event=None):
       """
       Lit le nom donné par l'utilisateur au concept de type CO qui doit être
       la valeur du MCS courant et stocke cette valeur
       """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      anc_val = self.node.item.get_valeur()
       nom_concept = self.entry_co.get()
-      self.node.item.set_valeur_co(nom_concept)
+      test,mess=self.node.item.set_valeur_co(nom_concept)
+      if not test:
+          # On n'a pas pu créer le concept
+          self.parent.appli.affiche_infos(mess)
+          return
+      elif self.node.item.isvalid() :
+          self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
+          self.node.parent.select()
+      else :
+          cr = self.node.item.get_cr()
+          mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+          self.record_valeur(anc_val,mess=mess)
+          return
       if self.node.item.get_position()=='global':
           self.node.etape.verif_all()
       elif self.node.item.get_position()=='global_jdc':
@@ -932,6 +1007,9 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
           self.label_valeur.place_forget()
           self.entry_co.focus()
       elif new_concept == 'NON':
+          # On est passe de OUI à NON, on supprime la valeur
+          self.node.item.delete_valeur_co()
+          self.record_valeur(name=None,mess="Suppression CO enregistrée")
           self.label_co.place_forget()
           self.entry_co.place_forget()
           self.l_resu.place(relx=0.05,rely=0.7)
@@ -942,14 +1020,40 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
       Affiche la valeur de l'objet pointé par self
       """
       valeur = self.node.item.get_valeur()
-      if valeur == None : return # pas de valeur à afficher ...
+      if valeur == None or valeur == '': 
+         self.valeur_choisie.set('')
+         return # pas de valeur à afficher ...
       # il faut configurer le bouton si la valeur est un objet CO
       # sinon afficher le nom du concept dans self.valeur_choisie
-      if valeur.__class__.__name__ != 'CO':
-          self.valeur_choisie.set(valeur.nom)
-      else:
+      if self.node.item.is_CO():
           self.b_co.invoke('OUI')
           self.entry_co.insert(0,valeur.nom)
+      else:
+          self.valeur_choisie.set(valeur.nom)
+
+  def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
+      """
+      Enregistre  val comme valeur de self.node.item.object SANS faire de test de validité
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      if name != None:
+          valeur =name
+      else :
+          self.entry_co.delete(0,END)
+          valeur= self.entry_co.get()
+      self.node.item.set_valeur_co(valeur)
+      self.parent.appli.affiche_infos(mess)
+      # On met a jour le display dans le panneau
+      self.display_valeur()
+      if self.node.item.get_position()=='global':
+          self.node.etape.verif_all()
+      elif self.node.item.get_position()=='global_jdc':
+          self.node.racine.verif_all()
+      else :
+          self.node.parent.verif()
+      if self.node.item.isvalid():
+          self.node.parent.select()
+      self.node.update()
 
 
 class UNIQUE_BASE_Panel(UNIQUE_Panel):
@@ -980,7 +1084,11 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
       self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
       self.entry.focus()
       # aide associée au panneau
-      self.aide = Label(self.frame_valeur, text = aide)
+      self.frame_valeur.update()
+      self.aide = Label(self.frame_valeur, 
+                        text = aide,
+                       wraplength=int(self.frame_valeur.winfo_width()*0.8),
+                       justify='center')
       self.aide.place(relx=0.5,rely=0.7,anchor='n')
       # affichage de la valeur du MCS
       self.display_valeur()
@@ -1047,7 +1155,11 @@ class UNIQUE_COMP_Panel(UNIQUE_Panel):
       self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35)
       self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35)
       self.entry1.focus()
-      self.aide = Label(self.frame_valeur, text = aide)
+      self.frame_valeur.update()
+      self.aide = Label(self.frame_valeur,
+                        text = aide,
+                        wraplength=int(self.frame_valeur.winfo_width()*0.8),
+                       justify='center')
       self.aide.place(relx=0.5,rely=0.7,anchor='n')
 
   def get_bulle_aide(self):
@@ -1135,7 +1247,6 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
                   else:
                       # on attend un entier, un réel ou une string
                       self.panel = UNIQUE_BASE_Panel
-
       
   def SetText(self, text):
     try:
@@ -1158,7 +1269,8 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
     Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
     pointé par self 
     """
-    return self.object.GetText()
+    text= self.object.GetText()
+    return text
 
   def wait_co(self):
       """
@@ -1218,42 +1330,47 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
   def GetMinMax(self):
       """ Retourne les valeurs min et max de la définition de object """
       return self.object.get_min_max()
-\r
-  def GetMultiplicite(self):\r
-      """ A préciser.\r
-          Retourne la multiplicité des valeurs affectées à l'objet\r
-          représenté par l'item. Pour le moment retourne invariablement 1.\r
-      """\r
-      return 1\r
-\r
-  def GetType(self):\r
-      """ Retourne le type de valeur attendu par l'objet représenté par l'item.\r
-      """\r
-      return self.object.get_type()\r
-\r
-  def GetIntervalle(self):\r
-      """ Retourne le domaine de valeur attendu par l'objet représenté par l'item.\r
-      """\r
-      return self.object.getintervalle()\r
-\r
-  def IsInIntervalle(self,valeur):\r
-      """ Retourne 1 si la valeur est dans l'intervalle permis par\r
-          l'objet représenté par l'item.\r
-      """\r
-      return self.object.isinintervalle(valeur)\r
+
+  def GetMultiplicite(self):
+      """ A préciser.
+          Retourne la multiplicité des valeurs affectées à l'objet
+          représenté par l'item. Pour le moment retourne invariablement 1.
+      """
+      return 1
+
+  def GetType(self):
+      """ 
+          Retourne le type de valeur attendu par l'objet représenté par l'item.
+      """
+      return self.object.get_type()
+
+  def GetIntervalle(self):
+      """ 
+           Retourne le domaine de valeur attendu par l'objet représenté 
+           par l'item.
+      """
+      return self.object.getintervalle()
+
+  def IsInIntervalle(self,valeur):
+      """ 
+          Retourne 1 si la valeur est dans l'intervalle permis par
+          l'objet représenté par l'item.
+      """
+      return self.object.isinintervalle(valeur)
 
   def set_valeur_co(self,nom_co):
       """
       Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
       """
-      self.object.set_valeur_co(nom_co)
+      return self.object.set_valeur_co(nom_co)
       
   def get_sd_avant_du_bon_type(self):
       """
       Retourne la liste des noms des SD présentes avant l'étape qui contient
       le MCS pointé par self et du type requis par ce MCS
       """
-      return self.object.jdc.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
+      return self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,
+                                                               self.object.definition.type)
     
   def GetListeValeurs(self) :
       """ Retourne la liste des valeurs de object """
@@ -1272,6 +1389,34 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
         - retourne 'valeur' (chaîne de caractères) sinon """
       return self.object.eval_valeur(valeur)
 
+  def is_CO(self,valeur=None):
+      """
+         Indique si valeur est un concept produit de la macro
+         Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
+         Si valeur vaut None on teste la valeur du mot cle
+      """
+      # Pour savoir si un concept est un nouveau concept de macro
+      # on regarde s'il est présent dans l'attribut sdprods de l'étape
+      # ou si son nom de classe est CO.
+      # Il faut faire les 2 tests car une macro non valide peut etre
+      # dans un etat pas tres catholique avec des CO pas encore types
+      # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
+      if not valeur:valeur=self.object.valeur
+      if valeur in self.object.etape.sdprods:return 1
+      if type(valeur) is not types.ClassType:return 0
+      if valeur.__class__.__name__ == 'CO':return 1
+      return 0
+
+  def delete_valeur_co(self,valeur=None):
+      """
+           Supprime la valeur du mot cle (de type CO)
+           il faut propager la destruction aux autres etapes
+      """
+      if not valeur : valeur=self.object.valeur
+      # XXX faut il vraiment appeler del_sdprod ???
+      #self.object.etape.parent.del_sdprod(valeur)
+      self.object.etape.parent.delete_concept(valeur)
+
 import Accas
 treeitem = SIMPTreeItem
 objet = Accas.MCSIMP
index 7a191d577b0045aa457c5b086405461d13dcb90c..703ec6d490c5a3f25687cd0bbca83b561432fd14 100644 (file)
@@ -1,3 +1,22 @@
+#            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 pour charger les paramètres de configuration d'EFICAS
 """
@@ -55,8 +74,9 @@ class CONFIG:
          print string.join(l[2:])
          sys.exit()
       for attr in self.l_nom_param:
-          nom_attr,statut = attr
-          valeur = d.get(nom_attr,None)
+          nom_attr,statut,defaut = attr
+          #valeur = d.get(nom_attr,None)
+          valeur = d.get(nom_attr,defaut)
           if not valeur and statut=='o':
               showerror("Erreur","Une erreur s'est produite dans la relecture du fichier de configuration : "
                        + self.fic_ini+"\n EFICAS va vous demander les nouveaux paramètres")
@@ -81,7 +101,7 @@ class CONFIG:
           traceback.print_exc()
           return
       for attr in self.l_nom_param:
-          nom_attr,statut = attr
+          nom_attr,statut,defaut = attr
           valeur = d.get(nom_attr,None)
           if valeur :
               setattr(self,nom_attr,valeur)
@@ -94,6 +114,14 @@ class CONFIG:
       (label,nature,nom_var,defaut)
       """
       self.l_param=[]
+      # répertoire initial pour OPEN/SAVE des fichiers de commande
+      # Par defaut, EFICAS utilise le repertoire utilisateur $HOME/Eficas_install
+      # Il est possible de specifier dans editeur.ini ou eficas.ini un autre chemin
+      # Ce peut etre un chemin absolu ou le repertoire courant (os.curdir)
+      if hasattr(self,'initialdir'):
+          self.l_param.append(("Répertoire initial pour Open/save des fichiers de commande",'rep','initialdir',self.initialdir))
+      else:
+          self.l_param.append(("Répertoire initial pour Open/save des fichiers de commande",'rep','initialdir',self.rep_user))
       # répertoire de travail
       if hasattr(self,'rep_travail'):
           self.l_param.append(("Répertoire de travail",'rep','rep_travail',self.rep_travail))
@@ -135,11 +163,10 @@ class CONFIG:
       self.l_nom_param=[]
       statut='o'
       for tup in self.l_param:
-          #self.l_nom_param.append((tup[2],statut))
           if tup[1] == 'YesNo':
               # les paramètres suivant tup sont facultatifs ...
               statut='f'
-          self.l_nom_param.append((tup[2],statut))
+          self.l_nom_param.append((tup[2],statut,tup[3])) # nom,statut,defaut
 
   def affichage_fichier_ini(self):
       """
index d48429806a7077943fbe981aab867ca886ae0dba..eeed14105fd01d5a17e8472e39b9c6e9d7a43644 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF definition_cata Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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
 import types
index c1d683c19fd9b026b3bbbbc89029c4a207b19f6f..14419aae87c3948cb8c8ea3e9024fbe4969e000b 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe EFICAS qui est l'application
     proprement dite. Elle est dérivée de la classe APPLI
@@ -17,7 +36,10 @@ from widgets import Fenetre
 
 class EFICAS(appli.APPLI):
 
-  extensions=['readercata','bureau','browser','options']
+  try:
+     from prefs import appli_composants
+  except:
+     appli_composants=['readercata','bureau','browser','options']
 
   def get_texte_infos(self):
      texte=appli.APPLI.get_texte_infos(self)
index 71f4bd09835a1f1946df4b8c55850898549b40cf..3f4df08b35236d725c6e4faf1928ba3c55a438dd 100644 (file)
@@ -1,3 +1,22 @@
+#            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 permet de lancer l'application EFICAS en affichant
     un ecran Splash pour faire patentier l'utilisateur
index 8caa7ef958219541f6d46e83e50d58f237666ed3..d480fe22f00e7ed5dbbe859bbf3513b9f4f115c0 100644 (file)
@@ -1,3 +1,22 @@
+#            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 a afficher le texte du FAQ EFICAS
    et à attendre l'acquittement par l'utilisateur
index 113ec4e4e808353f7fa42101598a924e238a9171..e2b4cf7815802916c2fbaa9d0ab97a939e2bdf25 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -46,17 +65,13 @@ class fenetre_mc_inconnus :
        self.frame1.place(relx=0,rely=0,relheight=0.2,relwidth=1)
        self.frame2.place(relx=0,rely=0.2,relheight=0.6,relwidth=1)
        self.frame3.place(relx=0,rely=0.8,relheight=0.2,relwidth=1)
-       self.frame21 = Frame(self.frame2)
-       self.frame22 = Frame(self.frame2)
-       self.frame21.place(relx=0,rely=0,relwidth=0.6,relheight=1)
-       self.frame22.place(relx=0.6,rely=0,relwidth=0.4,relheight=1)
     
     def init_label(self):
        """
        Affichage du label dans la zone concernée
        """
        txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
-       txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
+       #txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
        self.fenetre.update_idletasks()
        Label(self.frame1,
              text = txt,
@@ -68,19 +83,24 @@ class fenetre_mc_inconnus :
        """
        Affiche les mots-clés à modifier ou supprimer  
        """
+       i=0
+       self.widgets=[]
        for mc in self.l_mc :
            # mc est une liste :
            # mc contient comme premiers arguments l'étape et éventuellement les blocs, mcfact ...
           # et contient comme 2 derniers éléments le nom du mot-clé et sa valeur
           path_mc = self.get_path(mc[0:-2])
           nom_mc  = mc[-2]
-          Label(self.frame21,text = path_mc).pack(side='left')
-          e = Entry(self.frame22)
-          e.pack(side='left')
+          lab=Label(self.frame2,text = path_mc)
+          lab.grid(row=i,column=1,sticky=W)
+          e = Entry(self.frame2)
+          e.grid(row=i,column=0,sticky=W)
           e.insert(END,nom_mc)
-          e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
-          e.bind("<Return>",lambda e,s=self : s.modifie_mc())
+          #e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
+          #e.bind("<Return>",lambda e,s=self : s.modifie_mc())
           e.configure(relief='flat',state='disabled')
+           self.widgets.append((e,lab))
+           i=i+1
 
     def init_boutons(self):
         """
@@ -100,9 +120,10 @@ class fenetre_mc_inconnus :
        self.b_quit = Button(self.frame3,
                            text = "Fermer",
                            command = self.quit)
-       self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
-       self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
-       self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
+       #self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
+       #self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
+       #self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
+       self.b_quit.place(relx=0.50,rely=0.5,anchor='center')
                            
     def wait_new_list(self):
         """
@@ -120,7 +141,6 @@ class fenetre_mc_inconnus :
        """
        txt = ''
        for o in l_o :
-           print o
           txt = txt + o.nom+'/'
        # on enlève le dernier slash en trop
        txt = txt[0:-1]
@@ -156,6 +176,9 @@ class fenetre_mc_inconnus :
        """
        index = self.l_mc.index(self.mc_courant)
        self.new_l_mc[index] = None
+        e,lab=self.widgets[index]
+        e.grid_remove()
+        lab.grid_remove()
        self.desactive_boutons()
        self.desactive_entry()  
        
index 013f6d2edfb6918a438e0d8c49d7960c101126fc..997e77fe08dde33af66172c85c3fc4d2fe6a3795 100644 (file)
@@ -1,3 +1,22 @@
+#            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.
+#
+#
+# ======================================================================
 standard = ("Times",10)
 standard_italique = ("Times",10,'italic')
 standard_gras = ("Times",10,'bold')
index 31f8e2e29f26c995d070799669f91be8721c5d93..e586d5ba47a662ff88dec6b9cc7f2dc3ddf6722f 100644 (file)
@@ -1,3 +1,22 @@
+#            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 joue le role de cache pour les images stockées
     dans le repertoire ICONDIR
index 1152f1b7f5a3ef020c05da1a804621c0652d9574..4d05e34373b7d77e140bfd4e4165b8c0adb4ea62 100644 (file)
@@ -1,3 +1,22 @@
+#            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 réalise toutes les mises à jour du chemin pour 
     les imports de modules Python
index d85ab06ae9fa1a5ff29fda315af99b7e63da2d7d..05f591ecefc63e1dde68e4907c0c3a5b7c7bf013 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe JDCDISPLAY qui réalise l'affichage
    du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
@@ -25,6 +44,7 @@ class JDCDISPLAY:
       self.jdc=jdc
       self.nom_jdc=nom_jdc
       self.fichier=None
+      self.panel_courant=None
 
       if not appli:
          class Appli:
@@ -52,8 +72,8 @@ class JDCDISPLAY:
       self.modified='n'
 
       self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
-      self.pane.add('treebrowser',min=0.5)
-      self.pane.add('selected',min=0.5)
+      self.pane.add('treebrowser',min=0.4,size=0.5)
+      self.pane.add('selected',min=0.4)
       self.pane.pack(expand=1,fill='both')
       self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
                  self.appli,self.select_node)
@@ -78,13 +98,32 @@ class JDCDISPLAY:
          Lance la génération du panneau contextuel de l'objet sélectionné 
          dans l'arbre
       """
+      if self.panel_courant:
+          # On detruit le panneau
+          self.panel_courant.destroy()
+          o=self.panel_courant
+          self.panel_courant=None
+          # Mettre à 1 pour verifier les cycles entre objets
+          # pour les panneaux
+          withCyclops=0
+          if withCyclops:
+             from Misc import Cyclops
+             z = Cyclops.CycleFinder()
+             z.register(o)
+             del o
+             z.find_cycles()
+             z.show_stats()
+             z.show_cycles()
+
+
       if node.item.isactif():
           if hasattr(node.item,"panel"):
-              return node.item.panel(self,self.pane.pane('selected'),node)
+              self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node)
           else:
               raise Exception("Le noeud sélectionné n'a pas de panel associé")
       else:
-          return panels.Panel_Inactif(self,self.pane.pane('selected'),node)
+          self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node)
+      return self.panel_courant
 
    def init_modif(self):
       """
@@ -148,7 +187,7 @@ class JDCDISPLAY:
       Ne permet que la copie d'objets de type Commande ou MCF
       """
       objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet()
-      if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE'):
+      if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE','FORM_ETAPE'):
           self.doPaste_Commande(objet_a_copier)
       elif objet_a_copier.__class__.__name__ == "MCFACT":
           self.doPaste_MCF(objet_a_copier)
@@ -159,14 +198,16 @@ class JDCDISPLAY:
 
    def doPaste_Commande(self,objet_a_copier):
       """
-      Réalise la copie de l'objet passé en argument qui est nécessairement une commande
+          Réalise la copie de l'objet passé en argument qui est nécessairement 
+          une commande
       """
       # il faut vérifier que le noeud sélectionné (noeud courant) est bien
       # une commande ou un JDC sinon la copie est impossible ...
       if self.node_selected.item.isCommande() :
           child = self.node_selected.append_brother(objet_a_copier,retour='oui')
       elif self.node_selected.item.isJdc() :
-          child = self.node_selected.append_child(objet_a_copier,retour='oui')
+          child = self.node_selected.append_child(objet_a_copier,pos='first',
+                                                     retour='oui')
       else:
           showinfo("Copie impossible",
                    "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !")
@@ -195,10 +236,17 @@ class JDCDISPLAY:
           child = self.node_selected.append_child(objet_a_copier,retour='oui')
       elif self.node_selected.item.isMCList() :
           # le noeud courant est une MCList
-          child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
+          child = self.node_selected.parent.append_child(objet_a_copier,pos='first',retour='oui')
       elif self.node_selected.item.isMCFact():
           # le noeud courant est un MCFACT
-          child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
+          if self.node_selected.parent.item.isMCList():
+             # le noeud selectionne est un MCFACT dans une MCList
+             child = self.node_selected.parent.append_child(objet_a_copier,
+                                                            pos=self.node_selected.item,
+                                                            retour='oui')
+          else:
+             # le noeud MCFACT selectionne n'est pas dans une MCList
+             child = self.node_selected.parent.append_child(objet_a_copier,retour='oui')
       else:
           showinfo("Copie impossible",
                    "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
index ad2366e86733ba96bf9993b9241f270d414b7069..d4eaf673321ab96b976509aaafbf217930be7604 100644 (file)
@@ -1,3 +1,22 @@
+#            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 Tkinter import Menu
@@ -12,7 +31,10 @@ class MENUBAR:
       self.parent.configure(menu=self.menubar)
       self.init()
 
-   labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Browsers','Options')
+   try:
+      from prefs import labels
+   except:
+      labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Browsers','Options','Aide')
 
    def init(self):
       self.menudict={}
@@ -21,11 +43,3 @@ class MENUBAR:
          self.menudict[label]=menu
          self.menubar.add_cascade(label=label,menu=menu)
 
-      #self.optionmenu.add_command(label='Catalogue développeur',command=self.choix_cata_developpeur)
-
-      #self.browsermenu.add_command(label='Browser catalogue',command = self.browser_catalogue)
-      #self.browsermenu.add_command(label='Shell',command = self.shell)
-      #self.browsermenu.add_command(label='Editeur catalogue',command = self.edite_catalogue)
-
-
-
index 0101dd05e78338cc1f0e7cf5fdcde0b8e1183b85..db1d1b6f81cfbc5b375fc6a5b85bf096adabd964 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -6,14 +25,17 @@ from tkFileDialog import *
 
 # Modules Eficas
 
+# l'option affichage_commandes peut prendre les valeurs "groupes" ou "alphabetic"
+affichage_commandes="alphabetic"
 
 class OPTIONS:
 
    menu_defs=[
-              ('Options',[
-                           ("Catalogue développeur",'choix_cata_developpeur'),
-                         ]
-              )
+        ('Options',[
+                   ("Affichage commandes",(("alphabétique",'&affichage_alpha'),("groupes",'&affichage_grp'))),
+                   # ("Catalogue développeur",'choix_cata_developpeur'),
+                   ]
+        )
              ]
 
    button_defs=[]
@@ -22,6 +44,14 @@ class OPTIONS:
       self.appli=appli
       self.parent=parent
 
+   def affichage_grp(self):
+      global affichage_commandes
+      affichage_commandes="groupes"
+
+   def affichage_alpha(self):
+      global affichage_commandes
+      affichage_commandes="alphabetic"
+
    def choix_cata_developpeur(self):
       """ 
           Cette méthode demande à l'utilisateur-développeur d'indiquer quel catalogue
index 8338308aeecce7a4acaf109a3f37967a8275ae6c..c442939d20fc3e2ad44bb22efbcd8a2a830cd7f4 100644 (file)
@@ -1,16 +1,32 @@
-#@ MODIF panels Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 string
 import os
 from Tkinter import *
 import Pmw
+import time
 
 from widgets import ListeChoix
+from widgets import ListeChoixParGroupes
+import prefs
+import options
 
 SEPARATEUR = '-'*30
 
@@ -29,6 +45,32 @@ class Panel(Frame) :
       self.creer_boutons()
       self.init()
 
+  def destroy(self):
+      Frame.destroy(self)
+      self.panneau=None
+      self.parent=None
+      # Because on herite de Frame
+      self.master=None
+      # On supprime explicitement les references aux objets Tk
+      self.nb=None
+      self.fr_but=None
+      self.bouton_cata=None
+      self.bouton_doc=None
+      self.bouton_com=None
+      self.bouton_sup=None
+      self.frame_eval=None
+      self.label=None
+      self.frame_boutons=None
+      self.frame_comment=None
+      self.frame_param=None
+      # On termine la suppression de facon brutale (objets Tk et non Tk)
+      for k in self.__dict__.keys():
+         # il est plus prudent de ne pas détruire le lien sur le Node
+        # si on voulait mettre l'attribut node à None, il faudrait
+        # que tous les appels à node.parent.select() apparaissent après
+        # toutes les autres actions liées au panel (node.item.isglobal(), ...)
+         if k != 'node' : setattr(self,k,None)
+
   def creer_boutons(self):
       """
       Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS
@@ -152,7 +194,6 @@ class Panel(Frame) :
       if self.parent.modified == 'n' : self.parent.init_modif()
       pere = self.node.parent
       self.node.delete()
-      pere.select()
       
   def affiche(self):
       """ Force l'affichage des fenêtres en cours """
@@ -164,10 +205,9 @@ class Panel(Frame) :
       texte_infos = ''
       for e in cmd.entites.keys() :
           if e == name :
-              texte_infos=cmd.entites[e].fr
+              texte_infos=getattr(cmd.entites[e],prefs.lang)
               break
       if texte_infos == '' : texte_infos="Pas d'infos disponibles"
-      #EFICAS.affiche_infos(texte_infos)
       self.parent.appli.affiche_infos(texte_infos)
 
   def defMC(self,name):
@@ -182,9 +222,8 @@ class Panel(Frame) :
   def selectCmd(self,name):
       """ On retrouve la commande sous le curseur pour affichage du fr """
       if name != 'COMMENTAIRE' and name != SEPARATEUR:
-          #EFICAS.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr)
-          #self.parent.appli.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr)
-          self.parent.appli.affiche_infos(self.parent.jdc.get_cmd(name).fr)
+          texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang)
+          self.parent.appli.affiche_infos(texte_infos)
           
   def defCmd(self,name):
       """
@@ -280,17 +319,28 @@ class OngletPanel(Panel) :
       but_apres.grid(column = 1,row =3)
       
   def makeCommandePage(self,page):
+      """
+         Cree l'onglet
+      """
       frame1 = Frame(page,height = 20)
       frame1.pack(side='top',fill='x')
       label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante")
       label.pack(side='top')
       frame2 = Frame(page)
       frame2.pack(side='top',fill='both',expand=1)
-      liste_cmd = self.get_liste_cmd()
       liste_commandes = (("<Enter>",self.selectCmd),
                          ("<Leave>",self.deselectCmd),
                          ("<Double-Button-1>",self.defCmd))
-      Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
+      if options.affichage_commandes == "alphabetic":
+         liste_cmd = self.get_liste_cmd()
+         Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,
+                                   filtre='oui',titre = "Commandes")
+      else:
+         liste_groupes=self.node.item.object.niveau.definition.liste_groupes
+         dict_groupes=self.node.item.object.niveau.definition.dict_groupes
+         Liste = ListeChoixParGroupes(self,frame2,liste_groupes,dict_groupes,
+                                      liste_commandes = liste_commandes,
+                                      filtre='oui',titre = "Commandes")
       Liste.affiche_liste()
       # aide associée au panneau
       bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
@@ -301,11 +351,19 @@ class OngletPanel(Panel) :
       """
       Crée la page correspondant à un objet de type JDC
       """
-      liste_cmd = self.get_liste_cmd()
       liste_commandes = (("<Enter>",self.selectCmd),
                          ("<Leave>",self.deselectCmd),
                          ("<Double-Button-1>",self.defCmdFirst))
-      Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes")
+      if options.affichage_commandes == "alphabetic":
+         liste_cmd = self.get_liste_cmd()
+         Liste = ListeChoix(self,page,liste_cmd,liste_commandes = liste_commandes,
+                            filtre='oui',titre = "Commandes")
+      else:
+         liste_groupes=self.node.item.object.niveau.definition.liste_groupes
+         dict_groupes=self.node.item.object.niveau.definition.dict_groupes
+         Liste = ListeChoixParGroupes(self,page,liste_groupes,dict_groupes,
+                                      liste_commandes = liste_commandes,
+                                      filtre='oui',titre = "Commandes")
       Liste.affiche_liste()
        # aide associée au panneau
       bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
index 47667a09bb71911e3851bdb139a94ba91d2cd5fb..1a9f1db3a84c02630fe1ead7673ada20006890f7 100644 (file)
@@ -1,9 +1,29 @@
+#            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 à lire un catalogue et à construire
     un objet CataItem pour Eficas.
     Il s'appuie sur la classe READERCATA
 """
 # Modules Python
+import time
 import os,sys,py_compile
 import traceback
 import cPickle
@@ -17,8 +37,11 @@ import fontes
 import analyse_catalogue
 from Noyau.N_CR import CR
 from widgets import Fenetre
+from utils import init_rep_cata_dev
 
 #import catabrowser
+import autre_analyse_cata
+import uiinfo
 
 class READERCATA:
 
@@ -37,12 +60,7 @@ class READERCATA:
       self.code=self.appli.code
       self.appli.format_fichier.set('python')
       self.OpenCata()
-
       self.cataitem=None
-      #XXX CCAR : Pour le moment je ne construis pas le CATAItem
-      #self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.code,
-                                           #self.cata,
-                                           #objet_cata_ordonne = self.cata_ordonne_dico)
 
    def OpenCata(self):
       """ 
@@ -77,18 +95,35 @@ class READERCATA:
       # détermination de fic_cata_c et fic_cata_p
       self.fic_cata_c = self.fic_cata + 'c'
       self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
+      print "Debut compil cata: ",time.clock()
       # compilation éventuelle du catalogue
       test = self.compile_cata(self.fic_cata,self.fic_cata_c)
+      print "Fin compil cata: ",time.clock()
       if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata)
       # import du catalogue
+      print "Debut import_cata: ",time.clock()
       self.cata = self.import_cata(self.fic_cata)
+      print "Fin import_cata: ",time.clock()
       if not self.cata : showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
+      #
       # analyse du catalogue (ordre des mots-clés)
-      #XXX A priori ceci fait double emploi. Il faut d'abord calculer l'ordre
-      # puis fabriquer le CATAItem
-      #CCAR :self.catalo = catabrowser.CATAItem(self,"Catalogue",self.cata)
-      self.Retrouve_Ordre_Cata_Standard()
+      #
+      print "Debut Retrouve_Ordre: ",time.clock()
+      # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
+      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
+      # des mots clés à la création
+      #self.Retrouve_Ordre_Cata_Standard()
+      self.Retrouve_Ordre_Cata_Standard_autre()
+      print "Fin Retrouve_Ordre: ",time.clock()
+      #
+      # analyse des données liées à l'IHM : UIinfo
+      #
+      print "Debut UIinfo: ",time.clock()
+      uiinfo.traite_UIinfo(self.cata)
+      print "Fin UIinfo: ",time.clock()
+      #
       # chargement et analyse des catalogues développeur (le cas échéant)
+      #
       if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' :
           init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev)
           fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
@@ -101,7 +136,8 @@ class READERCATA:
                   self.cata = (self.cata,)
               else:
                   self.cata_dev =self.import_cata(fic_cata_dev)
-                  self.Retrouve_Ordre_Cata_Developpeur()
+                  #self.Retrouve_Ordre_Cata_Developpeur()
+                  self.Retrouve_Ordre_Cata_Developpeur_autre()
                   self.cata = (self.cata,self.cata_dev)
           else:
               self.cata = (self.cata,)
@@ -125,6 +161,15 @@ class READERCATA:
           traceback.print_exc()
           return 0
 
+   def Retrouve_Ordre_Cata_Standard_autre(self):
+      """ 
+          Construit une structure de données dans le catalogue qui permet
+          à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
+          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
+          contient le nom des mots clés dans le bon ordre
+      """ 
+      self.cata_ordonne_dico=autre_analyse_cata.analyse_catalogue(self.cata)
+
    def Retrouve_Ordre_Cata_Standard(self):
       """ 
           Retrouve l'ordre des mots-clés dans le catalogue, cad :
@@ -146,6 +191,37 @@ class READERCATA:
           self.Get_Ordre_Cata(mode='cata')
       self.appli.affiche_infos("Catalogue standard chargé")
 
+   def Retrouve_Ordre_Cata_Developpeur(self):
+      """ 
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle 
+      """
+      if self.code != 'ASTER' : return
+      fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py')
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
+      splash._splash.configure(text = message,barre='oui')
+      cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata)
+      self.cata_dev_ordonne_cr = cata_dev_ordonne.cr
+      cata_dev_ordonne_dico = cata_dev_ordonne.entites
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
+   def Retrouve_Ordre_Cata_Developpeur_autre(self):
+      """
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer
+            l'ordre des mots-clés dans le catalogue
+          - s'il n'a pas été modifié, relie le fichier pickle
+      """
+      if self.code != 'ASTER' : return
+      message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev
+      splash._splash.configure(text = message,barre='oui')
+      cata_dev_ordonne_dico = autre_analyse_cata.analyse_catalogue(self.cata_dev)
+      self.cata_ordonne_dico.update(cata_dev_ordonne_dico)
+      self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" )
+
    def Get_Ordre_Cata(self,mode='pickle'):
       """ 
           Retrouve l'ordre du catalogue :
@@ -167,7 +243,7 @@ class READERCATA:
           splash._splash.configure(text = "Analyse du catalogue",barre='oui')
           cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata)
           self.cata_ordonne_cr = cata_ordonne.cr
-          self.cata_ordonne_dico = cata_ordonne.dico
+          self.cata_ordonne_dico = cata_ordonne.entites
           splash._splash.configure(text = "Sauvegarde des informations sur le catalogue")
           f = open(self.fic_cata_p,'w+')
           p = cPickle.Pickler(f)
@@ -252,7 +328,7 @@ class READERCATA:
       if time1 > time2:
           try:
               # le catalogue doit être recompilé avant d'être importé
-              splash._splash.configure(text="Compilation du catalogue\nCela peut prendre une trentaine de secondes ...")
+              splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...")
               py_compile.compile(cata)
           except:
               return 0
index c3e5339d185a5cecd8e6476205f6b7739e4fcdac..3002d3759dbd322e9f3ddfee626b526da5c072eb 100644 (file)
@@ -1,3 +1,22 @@
+#            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 permet de créer, mettre à jour et détruire
     un écran Splash
index 6c0687a1750bf91def8885feb5794fed2cae7469..604025a8bd9dab1558ca1cc35edd3eecf14198af 100644 (file)
@@ -1,3 +1,22 @@
+#            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
index e99a56de3109de28f874a400cc4cea0059c27ffc..938d47fab653d275fe75be6e60df594fd527393b 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -137,7 +156,7 @@ class TOOLBAR:
       """
       self.fen_infos.destroy()
 
-  def creer_boutons_extension(self,l_boutons,extension):
+  def creer_boutons_appli_composant(self,l_boutons,appli_composant):
       for bouton in l_boutons :
           if not bouton :
               # on veut afficher un bouton vide (=espace entre boutons)
@@ -146,7 +165,7 @@ class TOOLBAR:
                      relief = 'flat').pack(side='left')
               continue
           nom_fic,commande,texte,statut = bouton
-          commande=getattr(extension,commande)
+          commande=getattr(appli_composant,commande)
           b = Button(self.barreboutons,
                      image = images.get_image(nom_fic),
                      command = commande,
index d43992c93be2911d58a8257a08696f9112989869..752a57b77c86dac80d50095a18d06024648d42af 100644 (file)
@@ -1,9 +1,50 @@
+#            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 propose la classe TOOLTIP pour
     mettre en oeuvre les bulles d'aide
 """
 
 import Tkinter
+import types
+
+def destruct(obj):
+    # assist in breaking circular references
+    if obj is not None:
+        assert type(obj) is types.InstanceType
+        for k in obj.__dict__.keys():
+            obj.__dict__[k] = None
+            ##del obj.__dict__[k]
+
+def after(widget, ms, func, *args):
+    timer = apply(widget.after, (ms, func) + args)
+    command = widget._tclCommands[-1]
+    return (timer, command, widget)
+
+def after_cancel(t):
+    if t is not None:
+        t[2].after_cancel(t[0])
+        try:
+            t[2].deletecommand(t[1])
+        except Tkinter.TclError:
+            pass
 
 class TOOLTIP:
     def __init__(self,widget):
@@ -76,3 +117,16 @@ class TOOLTIP:
         self.tooltip.wm_geometry("%+d%+d" % (x, y))
         self.tooltip.wm_deiconify()
 
+if __name__ == "__main__":
+   root=Tkinter.Tk()
+
+   def aide(event):
+      tp=TOOLTIP(root)
+      tp.setText("texte d'aide")
+      tp._showTip()
+
+   label = Tkinter.Label(root, text="coucou")
+   label.bind("<ButtonPress>", aide)
+   label.pack()
+   root.mainloop()
+
index 5ec26438ba59c5c6d55ee64af3c6097b064e2daf..2a1c45acc8697129fcbf3a1d05bb9a6f32353e35 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -25,7 +44,7 @@ class TREEITEMINCANVAS:
       self.parent=parent
 
       self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object)
-      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1)
+      self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95')
       self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1)
       if not sel:
          def sel(event=None):
index a0d6554eacc6172e053c382649c465fd5ada1c63..fe6e4d2847c66c9069eaf398cde5f50fba70e1d3 100644 (file)
@@ -1,11 +1,23 @@
-#@ MODIF treewidget Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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,sys,string,re,types
+import os,sys,string,re,types,traceback
 from Tkinter import *
 
 
@@ -13,8 +25,8 @@ import fontes
 import images
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: treewidget.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: treewidget.py,v 1.6 2002/09/09 10:39:06 eficas Exp $"
 #
 
 Fonte_Standard = fontes.standard
@@ -468,6 +480,7 @@ class Node :
         try:
             self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3])
         except:
+           print "Erreur dans move :"
             print self
             print self.item
             print self.item.object
@@ -493,6 +506,7 @@ class Node :
             try:
                 child.trace_ligne()
             except:
+               print "Erreur dans trace_ligne :"
                 print child
                 print child.item.object
 
@@ -521,21 +535,23 @@ class Node :
         
     def full_creation(self,name,pos=None):
         """
-        Interface avec ACCAS : création de l'objet de nom name et
-        du noeud associé. Retourne le noeud fils ainsi créé
+            Interface avec ACCAS : création de l'objet de nom name et
+            du noeud associé. Retourne le noeud fils ainsi créé
         """
         item = self.item.additem(name,pos)
         if item == None or item == 0:
             # impossible d'ajouter le noeud de nom : name
             return 0
         nature = item.get_nature()
-        #if nature =="COMMANDE" or nature == "OPERATEUR" or nature == "PROCEDURE":
         if nature in ("COMMANDE","OPERATEUR","PROCEDURE","COMMENTAIRE",
                       "PARAMETRE","COMMANDE_COMMENTARISEE","PARAMETRE_EVAL"):
             # on veut ajouter une commande ou un commentaire ou un paramètre
             # il ne faut pas rechercher un même objet déjà existant
             # à modifier : il faut tester l'attribut 'repetable' 
             enfant = None
+        elif self.item.object.isMCList():
+            # Dans ce cas on ne fait pas de remplacement. On ne cherche pas un objet de meme nom
+            enfant=None
         else :
             enfant = self.get_node_fils(item.get_nom())
         if enfant :
@@ -611,6 +627,9 @@ class Node :
             # on donne la position depuis l'extérieur
             # (appel de append_child par append_brother par exemple)
             index = pos
+        elif type(pos) == types.InstanceType:
+            # pos est un item. Il faut inserer name apres pos
+            index = self.item.get_index(pos) +1
         else :
             if type(name) == types.InstanceType:
                 index = self.item.get_index_child(name.nom)
@@ -676,6 +695,7 @@ class Node :
                 print 'Erreur dans la destruction de ',self.item.get_nom(),' dans delete'
             nbnew = pere.get_nb_children()
         pere.redraw(nbnew-nbold)
+       pere.select()
 
     def copynode(self,node,pos) :
         """ node est le noeud à copier à la position pos de self ( = parent de node) """
@@ -690,15 +710,16 @@ class Node :
             try :
                 child.item.object.mc_liste = objet_copie.mc_liste
             except:
-                pass
+                traceback.print_exc()
     #--------------------------------------------------------------
     # Méthodes de vérification du contexte et de validité du noeud
     #--------------------------------------------------------------
-    def traite_mclist(self):
+    def traite_mclist_OLD(self):
         """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
             ou réduite à un seul élément suite à une destruction
         """
         # self représente une MCList
+       print "on passe par traite_mclist ",len(self.item)
         if len(self.item) == 0 :
             # la liste est vide : il faut la supprimer
             self.delete()
@@ -709,6 +730,8 @@ class Node :
             noeud = self.children[0]
             if self.parent.delete_child(self):
                 self.parent.append_node_child(noeud.item,pos=index,verif='non')
+            else:
+               print "destruction de self impossible !"
             #if self.parent.delete_child(self):
             #    self.parent.copynode(self.children[0],index)
             #else :
@@ -716,6 +739,26 @@ class Node :
         else :
             return
 
+    def traite_mclist(self):
+        """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
+            ou réduite à un seul élément suite à une destruction
+        """
+        # self représente une MCList
+        if len(self.item) == 0 :
+            # la liste est vide : il faut la supprimer
+            self.delete()
+        elif len(self.item) == 1:
+            # il ne reste plus qu'un élément dans la liste
+            # il faut supprimer la liste et créer directement l'objet
+            index = self.parent.children.index(self)
+            noeud = self.children[0]
+           noeud.parent = self.parent
+           self.parent.delete_node_child(self)
+            self.parent.item.replace_child(self.item,noeud.item)
+           self.parent.children.insert(index,noeud)
+        else :
+            return
+           
     def verif_all(self):
         self.verif_all_children()
             
diff --git a/Editeur/uiinfo.py b/Editeur/uiinfo.py
new file mode 100644 (file)
index 0000000..d2fa8ba
--- /dev/null
@@ -0,0 +1,113 @@
+#            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 à construire les structures de données porteuses 
+   des informations liées aux groupes de commandes
+"""
+import types
+
+class UIINFO:
+   """
+       Pour le moment la classe UIINFO ne sait traiter que des infos
+       portant sur la definition des groupes de commandes
+       Les autres informations sont ignorées
+   """
+   def __init__(self,parent,groupes=None,**args):
+      """
+         Initialiseur de la classe UIINFO.
+         Initialise a partir du dictionnaire UIinfo passé à
+         un objet ENTITE les attributs de la classe
+      """
+      # L'attribut parent stocke le lien vers l'objet ENTITE relié à UIINFO
+      self.parent=parent
+      self.groupes=groupes
+      if groupes == None:
+         # L'entite n'a pas de groupe associé. On lui associe le groupe "DEFAUT"
+         self.groupes=("DEFAUT",)
+      if type(self.groupes) != types.TupleType:
+         self.groupes=(self.groupes,)
+
+def traite_commande(commande,niveau):
+    """
+        Cette fonction cree l'attribut UI de l'objet commande
+        à partir des informations contenues dans UIinfo
+    """
+    uiinfo=commande.UIinfo or {}
+    UI=UIINFO(commande,**uiinfo)
+    commande.UI=UI
+    if "CACHE" in UI.groupes:
+        # La commande est cachee aux utilisateurs
+        #niveau.dict_groupes["CACHE"].append(commande.nom)
+        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)
+
+def traite_niveau(niveau):
+   if niveau.l_niveaux == ():
+       # Il n'y a pas de sous niveaux. niveau.entites ne contient que des commandes
+       niveau.dict_groupes={}
+       for oper in niveau.entites:
+           traite_commande(oper,niveau)
+       # A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
+       # sans doublon
+       niveau.liste_groupes=niveau.dict_groupes.keys()
+       # On ordonne les listes alphabétiquement
+       niveau.liste_groupes.sort()
+       for v in niveau.dict_groupes.values():v.sort()
+       #print niveau.liste_groupes
+       #print niveau.dict_groupes
+   else:
+       for niv in niveau.l_niveaux:
+           traite_niveau(niv)
+
+def traite_UIinfo(cata):
+   """
+      Cette fonction parcourt la liste des commandes d'un catalogue (cata)
+      construit les objets UIINFO à partir de l'attribut UIinfo de la commande
+      et construit la liste complète de tous les groupes présents
+   """
+   #dict_groupes["CACHE"]=[]
+   #XXX Ne doit pas marcher avec les niveaux
+   if cata.JdC.l_niveaux == ():
+       # Il n'y a pas de niveaux
+       # On stocke la liste des groupes et leur contenu dans le JdC
+       # dans les attributs liste_groupes et dict_groupes
+       cata.JdC.dict_groupes={}
+       for commande in cata.JdC.commandes:
+           traite_commande(commande,cata.JdC)
+       # A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
+       # sans doublon
+       cata.JdC.liste_groupes=cata.JdC.dict_groupes.keys()
+       # On ordonne les listes alphabétiquement
+       cata.JdC.liste_groupes.sort()
+       for v in cata.JdC.dict_groupes.values():v.sort()
+       #print cata.JdC.liste_groupes
+       #print cata.JdC.dict_groupes
+   else:
+       # Le catalogue de commandes contient des définitions de niveau
+       for niv in cata.JdC.l_niveaux:
+          traite_niveau(niv)
+
+
+
+
index 9f09ecd4e4efd31257e0e9adbb5e0abb0c5f62c9..5fe39483c26eb2a1b31899736a2d5f72f90048f7 100644 (file)
@@ -1,7 +1,28 @@
+#            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 des utilitaires divers
 """
-import os
+import os,re
+import glob
+import traceback
 
 def substract_list(liste1,liste2):
   """ 
@@ -69,7 +90,7 @@ def save_in_file(file,text):
   except:
     return 0
 
-def extension(pathAndFile):
+def extension_fichier(pathAndFile):
     """ Return ext if path/filename.ext is given """
     return os.path.splitext(pathAndFile)[1][1:]
 
@@ -77,3 +98,49 @@ def stripPath(pathAndFile):
     """ Return filename.ext if path/filename.ext is given """
     return os.path.split(pathAndFile)[1]
 
+def init_rep_cata_dev(fic_cata,rep_goal):
+  """ 
+      Initialise le répertoire des catalogues développeurs (chemin d'accès donné
+      dans le fichier eficas.ini cad :
+      - le crée s'il n'existe pas encore
+      - copie dedans les 3 fichiers nécessaires :
+          * __init__.py (pour que ce répertoire puisse être interprété comme un package)
+          * entete.py (pour réaliser les import nécessaires à l'interprétation des catalogues)
+          * declaration_concepts.py (idem)
+      - crée le fichier cata_developpeur.py qui sera par la suite importé
+  """
+  try :
+    if not os.path.isdir(rep_goal) :
+      os.mkdir(rep_goal)
+    texte_entete = get_entete_cata(fic_cata)
+    # rep_goal doit contenir les catalogues du développeur sous la forme *.capy
+    # il faut créer le catalogue développeur par concaténation de entete,declaration_concepts
+    # et de tous ces fichiers
+    cur_dir = os.getcwd()
+    os.chdir(rep_goal)
+    l_cata_dev = glob.glob('*.capy')
+    if os.path.isfile('cata_developpeur.py') : os.remove('cata_developpeur.py')
+    if len(l_cata_dev) :
+      # des catalogues développeurs sont effectivement présents : on crée cata_dev.py dans rep_goal
+      str = ''
+      str = str + texte_entete+'\n'
+      for file in l_cata_dev :
+        str = str + open(file,'r').read() +'\n'
+      open('cata_developpeur.py','w+').write(str)
+    os.chdir(cur_dir)
+  except:
+    traceback.print_exc()
+    print "Impossible de transférer les fichiers requis dans :",rep_goal
+
+def get_entete_cata(fic_cata):
+  """ Retrouve l'entete du catalogue """
+  l_lignes = open(fic_cata,'r').readlines()
+  txt = ''
+  flag = 0
+  for ligne in l_lignes :
+    if re.match("# debut entete",ligne) : flag = 1
+    if re.match("# fin entete",ligne) : break
+    if not flag : continue
+    txt = txt + ligne
+  return txt
+
index 5b5d4ea299d7234c3ca40d54e7f7969628d48723..2eefd4b2f9520f6220b91e78bfe4f73b1c9d9d23 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF widgets Editeur  DATE 05/09/2001   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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.
+#
+#
 # ======================================================================
 # ----------------------------------------------------------
 #   Cette classe sert à définir les widgets utilisés par
@@ -98,7 +110,8 @@ class Fenetre :
         """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
         à l'utilisateur """
         file = asksaveasfilename(defaultextension = '.comm',
-                               initialdir = self.appli.CONFIGURATION.rep_user,
+                               #initialdir = self.appli.CONFIGURATION.rep_user,
+                               initialdir = self.appli.CONFIGURATION.initialdir,
                                title="Sauvegarde du "+self.titre)
         if file != '':
             if not save_in_file(file,self.texte) :
@@ -554,7 +567,8 @@ class ListeChoix :
           elif type(objet) in (types.StringType,types.IntType):
               mot = objet
           elif type(objet) == types.FloatType :
-              mot = repr_float(objet)
+              #mot = repr_float(objet)
+              mot = str(objet)
           else:
               mot=`objet`
           label = Label(self.MCbox,
@@ -806,3 +820,100 @@ class BARRE_K2000(Toplevel):
         
     def quit(self):
         self.quit = 1        
+
+class ListeChoixParGroupes(ListeChoix) :
+    """ 
+        Cette classe est utilisée pour afficher une liste de commandes classées par
+        groupes. L'utilisateur peut réaliser des actions de selection
+        qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes
+    """
+    def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[],
+                      active ='oui',filtre='non',titre=''):
+        self.parent = parent
+        self.page = page
+        self.liste_groupes = liste_groupes
+        self.dict_groupes = dict_groupes
+        self.dico_labels={}
+        self.selection = None
+        self.liste_commandes = liste_commandes
+        self.liste_marques = liste_marques
+        self.arg_selected=''
+        self.active = active
+        self.titre = titre
+        self.filtre = filtre
+        self.init()
+
+    def affiche_liste(self):
+        """ Affiche la liste dans la fenêtre"""
+        i=0
+        self.MCbox.config(state=NORMAL)
+        self.MCbox.delete(1.0,END)
+        for grp in self.liste_groupes:
+           # On itère sur les groupes
+           if grp == "CACHE":continue
+           liste_commandes=self.dict_groupes[grp]
+           text="GROUPE<<<<<<<< "+grp+" "
+           text=text+">"*max(0,30-len(text))
+           label = Label(self.MCbox,
+                        text = text,
+                        fg = 'black',bg = 'gray95',justify = 'left')
+           # On stocke la relation entre le nom de la commande et le label
+           self.dico_labels[grp]=label
+           self.MCbox.window_create(END,
+                                   window=label,
+                                   stretch = 1)
+           self.MCbox.insert(END,'\n')
+           for cmd in liste_commandes:
+              label = Label(self.MCbox,
+                        text = cmd,
+                        fg = 'black',bg = 'gray95',justify = 'left')
+              # On stocke la relation entre le nom de la commande et le label
+              self.dico_labels[cmd]=label
+              self.MCbox.window_create(END,
+                                   window=label,
+                                   stretch = 1)
+              self.MCbox.insert(END,'\n')
+              if self.active == 'oui':
+                  label.bind(self.liste_commandes[0][0],
+                         lambda e,s=self,c=self.liste_commandes[0][1],x=cmd,l=label : s.selectitem(x,l,c))
+                  label.bind(self.liste_commandes[1][0],
+                         lambda e,s=self,c=self.liste_commandes[1][1],x=cmd,l=label : s.deselectitem(l,x,c))
+                  label.bind(self.liste_commandes[2][0],
+                         lambda e,s=self,c=self.liste_commandes[2][1],x=cmd,l=label : s.chooseitem(x,l,c))
+              # On marque les items specifies dans liste_marques
+              #if i in self.liste_marques : self.markitem(label)
+              i=i+1
+        self.MCbox.config(state=DISABLED)
+        self.selection = None
+
+    def entry_changed(self,event=None):
+        """ 
+            Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu
+            de l'entry et frappe <Return>
+        """
+        if self.arg_selected != '' : self.deselectitem(self.dico_labels[self.arg_selected])
+        filtre = self.entry.get()+"*"
+        FILTRE = string.upper(filtre)
+        #
+        # On cherche d'abord dans les noms de groupe
+        # puis dans les noms de commande groupe par groupe
+        #
+        for grp in self.liste_groupes:
+            if fnmatch.fnmatch(grp,filtre) or fnmatch.fnmatch(grp,FILTRE) :
+                index = self.MCbox.index(self.dico_labels[grp])
+                self.MCbox.see(index)
+                # On ne selectionne pas le groupe
+                #self.arg_selected = grp
+                # On a trouve un groupe on arrete la recherche
+                return
+
+        for grp in self.liste_groupes:
+           for cmd in self.dict_groupes[grp] :
+              if fnmatch.fnmatch(cmd,filtre) or fnmatch.fnmatch(cmd,FILTRE) :
+                 self.highlightitem(self.dico_labels[cmd])
+                 index = self.MCbox.index(self.dico_labels[cmd])
+                 self.MCbox.see(index)
+                 self.arg_selected = cmd
+                 # On a trouve une commande  on arrete la recherche
+                 return
+
index 01553ea1adc671741f028e3bebd9748244cad2fc..62a3baceaea464f19a19e4b0f8275bbec4242d37 100644 (file)
@@ -2,3 +2,5 @@ Ce r
 dans des sous-répertoires de nom exNNN où NNN est le numéro
 de l'exemple
 
+ex18 :
+  Cet exemple test met en oeuvre le convertisseur asterV5
index 08352a34858e1f7a9db7e7e52bb0e4adea461970..942472b588d0b31a13c0447d463c8b19a04013f0 100644 (file)
@@ -28,6 +28,16 @@ class concept:
       """ Retourne 1 si sd est du bon type par rapport à la classe """
       return 0
 
+class cata:
+   def __init__(self):
+      CONTEXT.unset_current_cata()
+      CONTEXT.set_current_cata(self)
+
+   def enregistre(self,commande):
+      return
+
+c=cata()
+
 OP1 = OPER(nom='OP1',op=1,sd_prod=concept,reentrant='f',
            a=SIMP(typ='I'),
            c=SIMP(typ='I',position='global'),
index 3e8f1fa0672cad4a853d6fe31e2c9b5423ac1aeb..43097feea984234709907e0a6b78a1d7e19660d7 100644 (file)
@@ -5,7 +5,8 @@ sys.path[:0]=['../..','../../..']
 import convert
 
 p=convert.plugins['asterv5']()
-p.readfile('totalmod.comm')
+p.readfile('torsion.comm')
+#p.readfile('totalmod.comm')
 if not p.cr.estvide():
    print p.cr
    sys.exit(0)
diff --git a/Exemples/ex18/torsion.comm b/Exemples/ex18/torsion.comm
new file mode 100755 (executable)
index 0000000..83f5609
--- /dev/null
@@ -0,0 +1,340 @@
+              DEBUT();
+
+
+              INCLUDE(UNITE: 80);
+TPS =  1.     ;
+
+
+
+SY = 90. ;
+
+
+
+A   =  1.     ;
+H   =  0.01   ;
+N   =  50     ;
+T   =  0.01   ;
+TD = DEFI_VALEUR(R8: EVAL(T*180./PI)) ;
+CT = DEFI_VALEUR(R8: EVAL(COS(T))) ;
+ST = DEFI_VALEUR(R8: EVAL(SIN(T))) ;     
+MST= DEFI_VALEUR(R8: EVAL(-ST));
+RAT= DEFI_VALEUR(R8: EVAL(H/A));
+
+
+K_REF = DEFI_VALEUR( R8: EVAL(0.9845615*Q1) );
+EPS_Y = DEFI_VALEUR( R8: EVAL( (1./K_REF)**5. ));
+YOUNG = DEFI_VALEUR( R8: EVAL(SY/EPS_Y) );
+
+!FORMULE( REEL: (
+  RP(REEL:EPSI) = K_REF * SY * EPSI**0.2
+  ) );
+  
+ECH_EPSI = DEFI_LIST_REEL (
+              DEBUT: EPS_Y
+              INTERVALLE: (
+                JUSQU_A: 3.
+                NOMBRE : 300
+                )
+              ) ;
+  
+TRAC      = CALC_FONC_INTERP (
+              FONCTION: RP
+              LIST_PARA  :  ECH_EPSI
+              PROL_GAUCHE: 'LINEAIRE'
+              PROL_DROIT : 'LINEAIRE'
+              ) ;
+              
+              
+            PRE_GIBI();
+ MA =       LIRE_MAILLAGE();
+
+&MA =       DEFI_GROUP
+              (
+              MAILLAGE: MA
+              CREA_GROUP_NO:
+                (
+                TOUT_GROUP_MA: 'OUI'
+                )
+              ) ;
+              
+
+ CUIVRE   = DEFI_MATERIAU
+              (
+              ELAS :
+                (
+                E : YOUNG               
+                NU: 0.3             
+                )
+              TRACTION : (
+                SIGM: TRAC
+                )
+              NON_LOCAL: (
+                LONG_CARA: LC
+                )
+              ) ;
+
+ CHMAT =    AFFE_MATERIAU
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA: TRANCHE
+                MATER   : CUIVRE
+                )
+              ) ;
+              
+
+ MO_MECA =   AFFE_MODELE
+              (
+              MAILLAGE: MA
+              AFFE :
+                (
+                GROUP_MA     : TRANCHE
+                PHENOMENE    : 'MECANIQUE'
+                MODELISATION : '3D_SI'
+                )
+              ) ;
+
+ MO_DELO = AFFE_MODELE (
+             MAILLAGE: MA
+             AFFE: 
+               (
+               GROUP_MA: TRANCHE
+               PHENOMENE: 'NON_LOCAL'
+               MODELISATION: '3D'
+               )
+             ) ;
+             
+
+!FORMULE ( REEL : ( UX_IMP(REEL: INST, REEL:X, REEL:Y) =
+                   -INST*RAT*Y
+          ));
+!FORMULE ( REEL : ( UY_IMP(REEL: INST, REEL:X, REEL:Y) = 
+                    INST*RAT*X
+          ));
+!FORMULE ( REEL : ( UZ_IMP(REEL:X, REEL:Y) =  0. ));
+
+
+ ANCRAGE   = AFFE_CHAR_MECA   (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: BAS
+                DX: 0.
+                DY: 0.
+                DZ: 0.
+                )
+              ) ;
+
+ TORSION  = AFFE_CHAR_MECA_F (
+              MODELE  : MO_MECA
+              FACE_IMPO:
+                (
+                GROUP_MA: HAUT
+                DX      : UX_IMP
+                DY      : UY_IMP
+                DZ      : UZ_IMP
+                )
+              ) ;
+                
+
+ SYMETRIE = AFFE_CHAR_MECA (
+              MODELE: MO_MECA
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DX' )
+                COEF_MULT_1  : (CT MST)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DX' 'DY' )
+                DDL_2        : ('DY' )
+                COEF_MULT_1  : (ST CT)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              LIAISON_GROUP: (
+                GROUP_MA_1   : SYM_CY_0
+                GROUP_MA_2   : SYM_CY_1
+                SANS_GROUP_NO: (HAUT, BAS)
+                DDL_1        : ('DZ')
+                DDL_2        : ('DZ')
+                COEF_MULT_1  : (1.)
+                COEF_MULT_2  : (-1.)
+                COEF_IMPO    : 0.
+                CENTRE       : (0. 0. 0.)
+                ANGL_NAUT    : (TD 0. 0.)
+                SOMMET       : 'OUI'
+                )
+              ) ;
+              
+            
+ INSTANTS = DEFI_LIST_REEL
+              (
+              DEBUT: 0.
+              INTERVALLE:
+                (JUSQU_A: TPS  NOMBRE: 50)
+              ) ;
+
+
+
+ EVOL =     STAT_NON_LINE
+              (
+              MODELE: MO_MECA
+              CHAM_MATER: CHMAT
+              EXCIT :
+               (CHARGE: TORSION)
+               (CHARGE: ANCRAGE)
+               (CHARGE: SYMETRIE)                
+              INCREMENT:
+                (
+                LIST_INST: INSTANTS
+                SUBD_PAS : 5
+                SUBD_PAS_MINI: 0.0001
+                )
+              COMP_INCR:
+                (
+                RELATION: 'PLAS_GRAD_TRAC'
+                DEFORMATION: 'PETIT'
+                )
+              NEWTON:
+                (
+                MATRICE:'ELASTIQUE'
+                )
+              CONVERGENCE:
+                (
+                RESI_GLOB_RELA: 1.E-4
+                ITER_GLOB_MAXI: 500
+                ITER_INTE_MAXI: 250
+                RESI_INTE_RELA: 1.E-9
+                )
+              ARCHIVAGE: (
+                ARCH_ETAT_INIT: 'OUI'
+                LIST_INST     : INSTANTS
+                )
+
+              MODELE_NON_LOCAL: MO_DELO
+              LAGR_NON_LOCAL: (
+                RESI_PRIM_ABSO: 1.E-9
+                RESI_DUAL_ABSO: 1.E-4
+                RHO: 1000.
+                ITER_PRIM_MAXI: 100
+                ITER_DUAL_MAXI: 10
+                )
+              ) ;
+
+          
+
+&EVOL       = CALC_ELEM (
+                MODELE: MO_MECA
+                CHAM_MATER: CHMAT
+                RESULTAT  : EVOL
+                OPTION: ('SIEF_ELNO_ELGA' 'VARI_ELNO_ELGA')
+                ) ;
+
+&EVOL       = CALC_NO (
+                RESULTAT: EVOL
+                OPTION: ('FORC_NODA' 
+                         'SIEF_NOEU_ELGA' 'VARI_NOEU_ELGA')
+                ) ;
+
+  
+ECHAN       = INTE_MAIL_3D (
+                MAILLAGE    : MA
+                DEFI_SEGMENT: (
+                  GROUP_NO_ORIG: O1
+                  GROUP_NO_EXTR: A1
+                  )
+                ) ;
+                
+ PLAS_CUM = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'P'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'VARI_NOEU_ELGA'
+                NOM_CMP  : 'V1'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+ SIGMA    = POST_RELEVE_T (
+              ACTION: (
+                INTITULE : 'SIYZ'
+                CHEMIN   :  ECHAN
+                RESULTAT :  EVOL
+                NOM_CHAM : 'SIEF_NOEU_ELGA'
+                NOM_CMP  : 'SIYZ'
+                INST     :  TPS
+                OPERATION: 'EXTRACTION'
+                )
+              ) ;              
+
+
+
+ MOM_A   = POST_RELEVE_T (
+              ACTION: (
+                INTITULE  : 'MOMENT'
+                GROUP_NO  :  HAUT
+                RESULTAT  :  EVOL
+                NOM_CHAM  : 'FORC_NODA'
+                RESULTANTE: ('DX' 'DY' 'DZ')
+                MOMENT    : ('DRX' 'DRY' 'DRZ')
+                POINT     : (0. 0. H)
+                TOUT_ORDRE: 'OUI'
+                OPERATION : 'EXTRACTION'
+                )
+              ) ;
+
+ MOM_KA_A   = RECU_FONCTION (
+              TABLE : MOM_A
+              PARA_X: 'INST'
+              PARA_Y: 'MOMENT_Z'
+              ) ;
+
+!FORMULE ( REEL:( MA3_KA(REEL: INST) = MOM_KA_A(INST)*360/TD/A**3/SY));
+
+
+
+              DEFUFI(
+                IMPRESSION: (
+                  NOM: 'POST_PY'
+                  UNITE: 81
+                )
+              ) ;
+              
+              
+              
+ IMPR_COURBE( 
+   FORMAT: 'AGRAF'
+   FICHIER: 'POST_PY'
+   COURBE: (
+     FONCTION : MA3_KA
+     LIST_PARA: INSTANTS
+     )
+   ) ;
+
+
+              FIN();
+              
+              
+IMPR_TABLE(TABLE:SIGMA);
+IMPR_TABLE(TABLE:PLAS_CUM);
+            FIN();              
\ No newline at end of file
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..427090e66888b37840b3c0fa9f2f9ff6792ca7c4 100644 (file)
@@ -0,0 +1,19 @@
+#            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.
+#
+#
+# ======================================================================
index 68bd102d9c075aefa5f569fcc16be80ed98a9661..28b91a3be0f8d8a5d48a29b750cc765aeb7aea73 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF commande_comm Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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,traceback,string
 
@@ -30,6 +42,7 @@ class COMMANDE_COMM:
         self.definition=self
         self.nom = ''
         self.niveau = self.parent.niveau
+        self.actif=1
         #self.appel = N_utils.callee_where(niveau=2)
         if reg=='oui' : self.register()
             
@@ -216,3 +229,19 @@ class COMMANDE_COMM:
       """
       return []
 
+    def reparent(self,parent):
+      """
+          Cette methode sert a reinitialiser la parente de l'objet
+      """
+      self.parent=parent
+      self.jdc=parent.get_jdc_root()
+      self.etape=self
+
+    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
+        --> sans objet pour les commandes commentarisées
+      """
+      pass
+       
index 733a20164431d0cb432afd1d93df6c62ee9aa67c..993fda4331b8e6c84e2a19ace6fe877411514b45 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe COMMENTAIRE qui sert dans EFICAS
    pour gérer les commentaires dans un JDC
@@ -145,5 +164,18 @@ class COMMENTAIRE :
     """
     return []
 
+  def get_sdprods(self,nom_sd):
+     """
+         Retourne les concepts produits par la commande
+     """
+     return None
 
+  def verif_existence_sd(self):
+     pass
+
+  def get_fr(self):
+    """
+    Retourne le commentaire lui meme tronque a la 1ere ligne
+    """
+    return self.valeur.split('\n',1)[0]
 
index 31c7c20a3a2a9682790d94ca158fb60fffcdcf2d..675fb6b83b3db9b86e99c0c9a2cd88a5dd9de06f 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe ETAPE_NIVEAU qui sert à 
     concrétiser les niveaux au sein d'un JDC
@@ -5,6 +24,7 @@
 import traceback
 
 from Noyau import N_OBJECT
+import prefs
 
 class ETAPE_NIVEAU(N_OBJECT.OBJECT):
 
@@ -109,3 +129,12 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
     self.jdc.suppentite(etape)
 
 
+  def get_fr(self):
+     """
+        Retourne le texte d'aide dans la langue choisie
+     """
+     try :
+        return getattr(self.definition,prefs.lang)
+     except:
+        return ''
+
index 7e2dbdf9086ce918c43c4d7475239a4b27b60ecb..4d1b93d4cc7a1e854b991afeaafd012811bab0d4 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF interpreteur_formule Accas  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 string,re,sys,exceptions,types
 
@@ -145,6 +157,8 @@ class Interpreteur_Formule:
             texte = [texte,]
         for text_arg in texte:
             text_arg = string.replace(text_arg,'\n','')
+            # Enleve les espaces
+            text_arg = string.replace(text_arg,' ','')
             try:
                 self.l_operateurs.append(self.split_operateurs(text_arg))
             except InterpreteurException,e:
index 8b7cdf29f5d1ea9710daa111566b85a8a2f87785..313ec0434913f8b326beae0260ca9e992d0cc2ba 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe mixin qui porte les méthodes
    pour traiter les niveaux au sein d'un JDC
index da997b6d90d6bb32ddf928c4aa311c694f3e44cf..310c981de6881889473491699a25d8f7ec656d26 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -32,6 +51,7 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
          self.niveau = None
          self.etape = None
       self.state = 'undetermined'
+      self.actif=1
       self.mc_liste=self.build_mc()
 
    def build_mc(self):
@@ -57,6 +77,8 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
           #XXX et global_jdc ??
         mc_liste.append(objet)
         k=k+1
+      # Un nuplet n'a pas de mots inconnus
+      self.reste_val={}
       return mc_liste
 
    def isvalid(self,cr='non'):
@@ -168,5 +190,14 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
    def isoblig(self):
       return self.definition.statut=='o'
 
+   def get_fr(self):
+     """
+        Retourne le texte d'aide dans la langue choisie
+     """
+     try :
+        return getattr(self.definition,prefs.lang)
+     except:
+        return ''
+
 
 
index b5df8fdfe8026c1e2619d6d91aa5f486dd9547ea..8b6f0822793f04668d79b281a1fe6be97039b8a1 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe NIVEAU qui sert à définir
     des groupes de commandes dans le catalogue
index 63da3689ce905b89c39ddf5bee9293224573440f..f5208fb37ad424552516beba8b3bf23b24c9251c 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe de définition pour les nuplets NUPL
 """
@@ -6,9 +25,10 @@ import types
 
 # Modules Eficas
 from Noyau import N_ENTITE,N_MCLIST,N_CR
+from Ihm import I_ENTITE
 import mcnuplet
 
-class NUPL(N_ENTITE.ENTITE):
+class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
    """
    """
    class_instance = mcnuplet.MCNUPLET
@@ -19,6 +39,7 @@ class NUPL(N_ENTITE.ENTITE):
    def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1,
                     elements=None):
       N_ENTITE.ENTITE.__init__(self)
+      I_ENTITE.ENTITE.__init__(self)
       self.fr=fr
       self.ang=ang
       self.docu=docu
index 94f028f09670863b254bb4911f10d44f58913010..20455bfe99009452b5b84bf32eff742d7697829d 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe PARAMETRE qui sert à définir
     des objets paramètres qui sont compréhensibles et donc affichables
@@ -33,6 +52,7 @@ class PARAMETRE :
     self.definition=self
     self.jdc = self.parent = CONTEXT.get_current_step()
     self.niveau=self.parent.niveau
+    self.actif=1
     self.register()
 
   def interprete_valeur(self,val):
@@ -249,7 +269,8 @@ class PARAMETRE :
     """
     return []
 
-
+  def verif_existence_sd(self):
+     pass
 
 
 
index 73bf9bd6189b872f4b07b7f3b6d9b42064b97278..b45546d90f8db2455eff47e23d96bf5e2399ce5a 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe PARAMETRE_EVAL qui sert à définir
 des objets paramètres qui sont compréhensibles et donc affichables
@@ -36,6 +55,7 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) :
     self.jdc = self.parent = CONTEXT.get_current_step()
     self.definition=self
     self.niveau = self.parent.niveau
+    self.actif=1
     # Ceci est-il indispensable ???
     #self.appel = N_utils.callee_where(niveau=2)
     self.register()
@@ -60,6 +80,8 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) :
     """
     if not val : return None
     d={}
+    val = string.strip(val)
+    if val[-1] == ';' : val = val[0:-1]
     d['EVAL'] = Accas.EVAL
     try:
         valeur = eval(val,{},d)
index 659027d201ab78ba43d9122a9a281f5db168cb86..378500c07a493627f9010d52a17fe123908f1871 100644 (file)
@@ -1,3 +1,22 @@
+#            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 chargeur dynamique de plugins (emprunté à HappyDoc)
 """
diff --git a/Ihm/I_ASSD.py b/Ihm/I_ASSD.py
new file mode 100644 (file)
index 0000000..004d0b8
--- /dev/null
@@ -0,0 +1,23 @@
+#            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 ASSD:
+   def __repr__(self):
+      return "concept %s de type %s" % (self.get_name(),self.__class__.__name__)
index 16853f5f7475b671f56588f4961d62be75b4ab36..e1f19ca54b5e4a2da6a8ae98c80bc7f52e97dbc2 100644 (file)
@@ -1,3 +1,22 @@
+#            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.
+#
+#
+# ======================================================================
 """
 """
 
index 3a070e1ce065f00f0caa325240ed065373cec56d..11add723af8190aecabfdbc84bfadf2defe78f28 100644 (file)
@@ -1,4 +1,37 @@
+#            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.
+#
+#
+# ======================================================================
+_no=0
+
+def number_entite(entite):
+   """
+      Fonction qui attribue un numero unique a tous les objets du catalogue
+      Ce numero permet de conserver l'ordre des objets
+   """
+   global _no
+   _no=_no+1
+   entite._no=_no
+
 class ENTITE:
+  def __init__(self):
+     number_entite(self)
+    
   def get_docu(self):
     if hasattr(self,'docu') :
       if self.docu != "" : return self.docu
index 8937c11075bb2ada199d240c0f0bc11f03c87c29..865f23787f588046360cba94273bfcea0ef4f255 100644 (file)
@@ -1,29 +1,43 @@
+#            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
 import string,types
 from copy import copy
 
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
+import traceback
+import Noyau
+from Noyau import N_Exception
+from Noyau.N_Exception import AsException
+# fin import à résorber
+
 # Modules EFICAS
 import I_MCCOMPO
 
 class ETAPE(I_MCCOMPO.MCCOMPO):
 
-   def __init__(self):
-      self.niveau=self.jdc
-
    def ident(self):
       return self.nom
 
-   def get_fr(self):
-      """ 
-         Retourne l'attribut fr de self.definition 
-      """
-      try:
-         return self.definition.fr
-      except:
-         return ''
-
    def get_sdname(self):
       if CONTEXT.debug : print "SDNAME ",self.reuse,self.sd,self.sd.get_name()
       if self.reuse != None:
@@ -63,7 +77,8 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       """
       if self.isvalid() :
          if type(self.definition.op_init) == types.FunctionType :
-            apply(self.definition.op_init,(self,self.master.g_context))   
+            # XXX Normalement en mode editeur g_context ne peut pas etre utilisé
+            apply(self.definition.op_init,(self,self.parent.g_context))   
       self.state = 'modified'
     
    def nomme_sd(self,nom) :
@@ -79,59 +94,87 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
         return 0,"Nom de concept trop long (maxi 8 caractères)"
       self.init_modif()
-      # Cas particulier des opérateurs réentrants
+      #
+      # On verifie d'abord si les mots cles sont valides
+      #
       if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
+      #
+      # Cas particulier des opérateurs obligatoirement réentrants
+      #
       if self.definition.reentrant == 'o':
-        self.sd = self.reuse = self.jdc.get_sdprod(nom)
+       self.sd = self.reuse = self.jdc.get_sd_avant_etape(nom,self)
         if self.sd != None :
+          self.sdnom=self.sd.nom
           return 1,"Concept existant"
         else:
           return 0,"Opérateur réentrant mais concept non existant"
+      #
+      # Cas particulier des opérateurs facultativement réentrants
+      #
+      old_reuse=None
       if self.definition.reentrant == 'f' :
         sd = self.jdc.get_sd_avant_etape(nom,self)
         if sd != None :
-          self.sd = self.reuse = sd
-          return 1,"Opérateur facultativement réentrant et concept existant trouvé"
+         # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
+         if isinstance(sd,self.get_type_produit()) :
+             self.sd = self.reuse = sd
+             self.sdnom = sd.nom
+             return 1,"Opérateur facultativement réentrant et concept existant trouvé"
+         else:
+            return 0,"Concept déjà existant et de mauvais type"
         else :
-          # il faut éventuellement enlever le lien vers une SD existante car si on passe ici
+          # il faut enlever le lien vers une SD existante car si on passe ici
          # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
-         # Si on ne fait pas cela, le nom de l'opérateur réutilisé est aussi modifié
-         # et on ne peut plus modifier la SD de l'opérateur
+         # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
          if self.reuse :
-            self.sd = self.reuse = None
-      # l'opérateur n'est pas réentrant ou facultativement reentrant mais pas dans ce cas
+             old_reuse=self.reuse
+            self.sd = self.reuse = self.sdnom = None
+      #
+      # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
+      # mais est utilisé en mode non réentrant
+      #
       if self.sd == None :
           if self.parent.get_sd_autour_etape(nom,self):
-            # On force self.valid a 0 car l appel a isvalid precedent l a mis a 1
-            # mais ceci indique seulement une validité partielle
-            # isvalid ne devrait peut etre pas mettre l attribut valid à 1 si sd == 'non'
-            self.valid=0
-            return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
-          # Il n'existe pas de sd de nom sdnom. On peut donc créer le concept retourné.
-          # Il est créé sans nom mais enregistré dans la liste des concepts existants
-          self.get_sd_prod()
-          self.sd.nom = nom
-          return 1,"Nommage du concept effectué"
-      else :
-        old_nom=self.sd.nom
-        if string.find(old_nom,'sansnom') :
-           # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
-          # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
-          # on peut donc le nommer sans test préalable
-          self.sd.nom=nom
-           return 1,"Nommage du concept effectué"
-        if self.isvalid() :
-          # Normalement l appel de isvalid a mis a jour le concept produit (son type)
-          # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
-          # deja attribué
-          if self.parent.get_sd_autour_etape(nom,self):
+            # Un concept de ce nom existe dans le voisinage de l'etape courante
+            # On retablit l'ancien concept reentrant s'il existait
+            if old_reuse:
+               self.sd=self.reuse=old_reuse
+               self.sdnom=old_reuse.nom
             return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
           else:
-            self.sd.nom=nom
+            # Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
+            # On peut donc créer le concept retourné.
+            # Il est créé sans nom mais enregistré dans la liste des concepts existants
+            self.get_sd_prod()
+            # Il suffit de changer son attribut nom pour le nommer
+            self.sd.nom = nom
+            self.sdnom=nom
             return 1,"Nommage du concept effectué"
-        else:
-          # Normalement on ne devrait pas passer ici
-          return 0,'Normalement on ne devrait pas passer ici'
+      else :
+          old_nom=self.sd.nom
+          if string.find(old_nom,'sansnom') :
+            # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
+           # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
+           # on peut donc le nommer sans test préalable
+            if self.parent.get_sd_autour_etape(nom,self):
+              return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
+            else:
+             self.sd.nom=nom
+              self.sdnom=nom
+              return 1,"Nommage du concept effectué"
+          if self.isvalid() :
+            # Normalement l appel de isvalid a mis a jour le concept produit (son type)
+            # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
+            # deja attribué
+            if self.parent.get_sd_autour_etape(nom,self):
+              return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
+            else:
+              self.sd.nom=nom
+              self.sdnom=nom
+              return 1,"Nommage du concept effectué"
+          else:
+            # Normalement on ne devrait pas passer ici
+            return 0,'Normalement on ne devrait pas passer ici'
 
    def get_sdprods(self,nom_sd):
       """ 
@@ -206,6 +249,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
          Initialise les attributs jdc, id, niveau et réalise les
          enregistrements nécessaires
          Pour EFICAS, on tient compte des niveaux
+         Surcharge la methode make_register du package Noyau
       """
       if self.parent :
          self.jdc = self.parent.get_jdc_root()
@@ -234,9 +278,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       etape.state = 'modified'
       etape.reuse = None
       etape.sdnom = None
+      etape.etape=etape
       etape.mc_liste=[]
       for objet in self.mc_liste:
         new_obj = objet.copy()
+        new_obj.reparent(etape)
         etape.mc_liste.append(new_obj)
       return etape
 
@@ -270,3 +316,114 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
         l.extend(child.get_sd_utilisees())
       return l
 
+   def get_genealogie(self):
+      """ 
+          Retourne la liste des noms des ascendants de l'objet self
+          en s'arretant à la première ETAPE rencontrée
+      """
+      return [self.nom]
+
+   def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.get_jdc_root()
+     self.etape=self
+     for mocle in self.mc_liste:
+        mocle.reparent(self)
+
+   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
+     """
+     for motcle in self.mc_liste :
+         motcle.verif_existence_sd()
+     
+   def Build_sd(self,nom):
+      """
+         Construit le concept produit de l'opérateur. Deux cas 
+         peuvent se présenter :
+        
+         - le parent n'est pas défini. Dans ce cas, l'étape prend en charge la création 
+           et le nommage du concept.
+
+         - le parent est défini. Dans ce cas, l'étape demande au parent la création et 
+           le nommage du concept.
+
+      """
+      if not self.isactif():return
+      # FR : attention cette méthode ne devrait pas se trouver là car elle surcharge celle qui 
+      # se trouve dans N_ETAPE.py et elle est partie intégrante du noyau, mais, suite à l'absence de 
+      # test de validité de l'opérateur avant d'essayer de déterminer la sd produite, on n'arrivait
+      # pas à relire avec EFICAS un fichier contenant une étape encore incomplète du style :
+      #  sansnom = AFFE_CHAR_CINE(MODELE=None)
+      # Suite à la stabilisation du noyau d'Aster, je n'ai pas eu d'autre solution que de surcharger
+      # cette méthode ici en rajoutant le test manquant ...
+      # CCAR : cette modification ne corrige le probleme qu'en partie. Il faudrait probablement
+      # supprimer les erreurs fatales (exception ) et retourner systematiquement un objet produit
+      # meme en cas d'erreur et reporter l'emission du message d'erreur a la phase de validation
+      #
+      if not self.isvalid(sd='non') : return
+      self.sdnom=nom
+      try:
+         if self.parent:
+            sd= self.parent.create_sdprod(self,nom)
+            if type(self.definition.op_init) == types.FunctionType: 
+               apply(self.definition.op_init,(self,self.parent.g_context))
+         else:
+            sd=self.get_sd_prod()
+            # On n'utilise pas self.definition.op_init car self.parent 
+            # n'existe pas
+            if sd != None and self.reuse == None:
+               # On ne nomme le concept que dans le cas de non reutilisation 
+               # d un concept
+               sd.nom=nom
+         if self.jdc and self.jdc.par_lot == "NON" :
+            self.Execute()
+         return sd
+      except AsException,e:
+         # Une erreur s'est produite lors de la construction du concept
+         # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+         # Si on poursuit, on a le choix entre deux possibilités :
+         # 1. on annule la sd associée à self
+         # 2. on la conserve mais il faut la retourner
+         # En plus il faut rendre coherents sdnom et sd.nom
+         self.sd=None
+         self.sdnom=None
+         self.valid=0
+         return self.sd
+         #raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+         #                     'fichier : ',self.appel[1],e)
+      except EOFError:
+         # XXX Normalement le contexte courant doit etre le parent.
+         # Il n'y a pas de raison de remettre le contexte au parent
+         #self.reset_current_step()
+         raise
+      except :
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                           'fichier : ',self.appel[1]+'\n',
+                            string.join(l))
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+     
+        
+     
index e53ead8e682fad7c0774c8f9a8f7680760426256..844d61f0736abd8f7226162618eae4662735331c 100644 (file)
@@ -1,3 +1,22 @@
+#            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.
+#
+#
+# ======================================================================
 """
 """
 
@@ -13,7 +32,8 @@ class EXCLUS(I_REGLE.REGLE):
      if not regle_active : return liste_a_purger
 
      for mc in self.mcs:
-        if mc in liste_a_purger:
+        # Il ne faut pas purger un mot cle present. Sa cardinalite est verifiee par ailleurs
+        if mc in liste_a_purger and mc not in liste_mc_presents:
            liste_a_purger.remove(mc)
      return liste_a_purger
 
diff --git a/Ihm/I_FONCTION.py b/Ihm/I_FONCTION.py
new file mode 100644 (file)
index 0000000..b708dee
--- /dev/null
@@ -0,0 +1,41 @@
+#            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 I_ASSD import ASSD
+
+class FONCTION(ASSD):
+  def __init__(self,etape=None,sd=None,reg='oui'):
+    #ASSD.__init__(self,etape=etape,sd=sd,reg=reg)
+    if reg=='oui':
+      self.jdc.register_fonction(self)
+
+  def get_formule(self):
+    """
+    Retourne une formule décrivant self sous la forme d'un tuple :
+    (nom,type_retourne,arguments,corps)
+    """
+    if hasattr(self.etape,'get_formule'):
+      # on est dans le cas d'une formule Aster
+      return self.etape.get_formule()
+    else:
+      # on est dans le cas d'une fonction
+      return (self.nom,'REEL','(REEL:x)','''bidon''')
+
+class fonction(FONCTION) : pass
+
index 51100165d7c079f0a968678c5125bc582ab4dea1..80689be47b094e2a2a9f7cb867c448fded02386b 100644 (file)
@@ -1,3 +1,22 @@
+#            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 string,traceback
@@ -56,6 +75,15 @@ class FORM_ETAPE(MACRO_ETAPE):
         else:
             return ''
 
+    def get_formule(self):
+        """
+        Retourne un tuple décrivant la formule :
+        (nom,type_retourne,arguments,corps)
+        """
+        t,a,c = self.analyse_formule()
+        n = self.get_nom()
+        return (n,t,a,c)
+
     def verif_arguments(self,arguments = None):
         """
         Vérifie si les arguments passés en argument (si aucun prend les arguments courants)
index 2c26ab8e653adb28a2595a0b9ac955ee3a1bfeac..125fb617ae512bee9e742dffefc287744122cf89 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -6,9 +25,8 @@ import string,linecache
 
 # Modules Eficas
 import I_OBJECT
-from Noyau.N_ASSD import assd
+from Noyau.N_ASSD import ASSD
 from Noyau.N_ETAPE import ETAPE
-from Noyau.N_CO import CO
 from Noyau.N_Exception import AsException
 from Extensions import commentaire,parametre,parametre_eval
 
@@ -21,6 +39,7 @@ class JDC(I_OBJECT.OBJECT):
       self.niveau=self
       self.params=[]
       self.fonctions=[]
+      self._etape_context=None
 
    def get_cmd(self,nomcmd):
       """
@@ -38,20 +57,32 @@ class JDC(I_OBJECT.OBJECT):
       l=[]
       for k,v in d.items():
         if type(v) != types.InstanceType : continue
-        if assd in types_permis or CO in types_permis :
-          l.append(k)
-          continue
-        for type_ok in types_permis:
-          if type_ok in ('R','I','C','TXM') and v in self.params : l.append(k)
-          elif type_ok == 'R' and v.__class__.__name__ == 'reel' : l.append(k)
-          elif type_ok == 'I' and v.__class__.__name__ == 'entier' : l.append(k)
-          elif type_ok == 'C' and v.__class__.__name__ == 'complexe' : l.append(k)
-          elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' : l.append(k)
-          elif type(type_ok) != types.ClassType : continue
-          elif v.__class__ == type_ok or issubclass(v.__class__,type_ok): l.append(k)
+        # On considère que seul assd indique un type quelconque pas CO
+        elif self.assd in types_permis :
+           l.append(k)
+        elif self.est_permis(v,types_permis):
+           l.append(k)
       l.sort()
       return l
 
+   def est_permis(self,v,types_permis):
+      for type_ok in types_permis:
+          if type_ok in ('R','I','C','TXM') and v in self.params : 
+             return 1
+          elif type_ok == 'R' and v.__class__.__name__ == 'reel' : 
+             return 1
+          elif type_ok == 'I' and v.__class__.__name__ == 'entier' : 
+             return 1
+          elif type_ok == 'C' and v.__class__.__name__ == 'complexe' : 
+             return 1
+          elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' : 
+             return 1
+          elif type(type_ok) != types.ClassType : 
+             continue
+          elif v.__class__ == type_ok or issubclass(v.__class__,type_ok):
+             return 1
+      return 0
+
    def addentite(self,name,pos):
       """
           Ajoute une entite :
@@ -83,6 +114,7 @@ class JDC(I_OBJECT.OBJECT):
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
         self.editmode=0
+        self.reset_context()
         self.active_etapes()
         return objet
       elif name == "PARAMETRE_EVAL":
@@ -93,6 +125,7 @@ class JDC(I_OBJECT.OBJECT):
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
         self.editmode=0
+        self.reset_context()
         self.active_etapes()
         return objet
       elif type(name)==types.InstanceType:
@@ -100,10 +133,8 @@ class JDC(I_OBJECT.OBJECT):
         # existante (par copie donc)
         # on est donc nécessairement en mode editeur ...
         objet = name
-        objet.jdc = objet.parent = self
-        #XXX current_step n'existe plus. A priori le parent devrait etre self
-        # ainsi que le step courant.
-        #objet.parent = self.current_step
+        # Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
+        objet.reparent(self)
         self.set_current_step()
         if isinstance(objet,ETAPE):
           if objet.nom_niveau_definition == 'JDC':
@@ -115,8 +146,12 @@ class JDC(I_OBJECT.OBJECT):
             objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet)
             objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition]
         self.etapes.insert(pos,objet)
+       # il faut vérifier que les concepts utilisés par objet existent bien
+       # à ce niveau d'arborescence
+       objet.verif_existence_sd()
         self.active_etapes()
         self.editmode=0
+        self.reset_context()
         return objet
       else :
         # On veut ajouter une nouvelle commande
@@ -125,11 +160,13 @@ class JDC(I_OBJECT.OBJECT):
           cmd=self.get_cmd(name)
           # L'appel a make_objet n'a pas pour effet d'enregistrer l'étape
           # auprès du step courant car editmode vaut 1
+          # Par contre elle a le bon parent grace a set_current_step
           e=cmd.make_objet()
           if pos == None : pos = 0
           self.etapes.insert(pos,e)
           self.reset_current_step()
           self.editmode=0
+          self.reset_context()
           self.active_etapes()
           return e
         except:
@@ -151,13 +188,15 @@ class JDC(I_OBJECT.OBJECT):
    def get_sd_avant_etape(self,nom_sd,etape):
       return self.get_contexte_avant(etape).get(nom_sd,None)
 
-   def get_sd_apres_etape(self,nom_sd,etape):
+   def get_sd_apres_etape(self,nom_sd,etape,avec='non'):
       """ 
            Cette méthode retourne la SD de nom nom_sd qui est éventuellement
-            définie apres etape
+            définie apres etape 
+           Si avec vaut 'non' exclut etape de la recherche
       """
       ietap=self.etapes.index(etape)
-      for e in self.etapes[ietap+1:]:
+      if avec == 'non':ietap=ietap+1
+      for e in self.etapes[ietap:]:
         sd=e.get_sdprods(nom_sd)
         if sd:
           if hasattr(e,'reuse'):
@@ -165,16 +204,17 @@ class JDC(I_OBJECT.OBJECT):
               return sd
       return None
 
-   def get_sd_autour_etape(self,nom_sd,etape):
+   def get_sd_autour_etape(self,nom_sd,etape,avec='non'):
       """
            Fonction: retourne la SD de nom nom_sd qui est éventuellement
             définie avant ou apres etape
            Permet de vérifier si un concept de meme nom existe dans le périmètre 
            d'une étape
+           Si avec vaut 'non' exclut etape de la recherche
       """
       sd=self.get_sd_avant_etape(nom_sd,etape)
       if sd:return sd
-      return self.get_sd_apres_etape(nom_sd,etape)
+      return self.get_sd_apres_etape(nom_sd,etape,avec)
 
    def active_etapes(self):
       """
@@ -267,6 +307,12 @@ class JDC(I_OBJECT.OBJECT):
       """
       self.params.append(param)
 
+   def register_fonction(self,fonction):
+      """
+          Cette méthode sert à ajouter une fonction dans la liste des fonctions
+      """
+      self.fonctions.append(fonction)
+
    def delete_param(self,param):
       """
           Supprime le paramètre param de la liste des paramètres
@@ -297,6 +343,14 @@ class JDC(I_OBJECT.OBJECT):
         nom = form.nom
         if not nom : continue
         if d.has_key(nom): l_fonctions.append(form.get_formule())
+
+      # on ajoute les concepts produits par DEFI_VALEUR
+      # XXX On pourrait peut etre faire plutot le test sur le type
+      # de concept : entier, reel, complexe, etc.
+      for k,v in d.items():
+         if hasattr(v,'etape') and v.etape.nom in ('DEFI_VALEUR',):
+            l_constantes.append(k)
+
       # on retourne les deux listes
       return l_constantes,l_fonctions
 
@@ -373,3 +427,69 @@ class JDC(I_OBJECT.OBJECT):
       linecache.cache[file]=0,0,string.split(text,'\n'),file
       return file,text
 
+
+   def get_genealogie(self):
+      """
+          Retourne la liste des noms des ascendants de l'objet self
+          jusqu'à la première ETAPE parent.
+      """
+      return []
+
+   def NommerSdprod(self,sd,sdnom):
+      """
+          Nomme la SD apres avoir verifie que le nommage est possible : nom
+          non utilise
+          Si le nom est deja utilise, leve une exception
+          Met le concept créé dans le concept global g_context
+      """
+      # XXX En mode editeur dans EFICAS, le nommage doit etre géré différemment
+      # Le dictionnaire g_context ne représente pas le contexte
+      # effectif avant une étape.
+      # Il faut utiliser get_contexte_avant avec une indication de l'étape
+      # traitée. Pour le moment, il n'y a pas de moyen de le faire : ajouter 
+      # un attribut dans le JDC ???
+      if CONTEXT.debug : print "JDC.NommerSdprod ",sd,sdnom
+      if self._etape_context:
+         o=self.get_contexte_avant(self._etape_context).get(sdnom,None)
+      else:
+         o=self.g_context.get(sdnom,None)
+      if isinstance(o,ASSD):
+         raise AsException("Nom de concept deja defini : %s" % sdnom)
+
+      # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja.
+      # Ajoute a la creation (appel de reg_sd).
+      self.g_context[sdnom]=sd
+      sd.nom=sdnom
+
+   def set_etape_context(self,etape):
+      """
+          Positionne l'etape qui sera utilisee dans NommerSdProd pour
+          decider si le concept passé pourra etre  nommé
+      """
+      self._etape_context=etape
+
+   def reset_context(self):
+      """ 
+          Cette methode reinitialise le contexte glissant pour pouvoir
+          tenir compte des modifications de l'utilisateur : création
+          de commandes, nommage de concepts, etc.
+      """
+      self.current_context={}
+      self.index_etape_courante=0
+
+   def del_param(self,param):
+      """
+          Supprime le paramètre param de la liste des paramètres
+          et du contexte gobal
+      """
+      if param in self.params : self.params.remove(param)
+      if self.g_context.has_key(param.nom) : del self.g_context[param.nom]
+
+   def del_fonction(self,fonction):
+      """
+          Supprime la fonction fonction de la liste des fonctions
+          et du contexte gobal
+      """
+      if fonction in self.fonctions : self.fonctions.remove(fonction)
+      if self.g_context.has_key(fonction.nom) : del self.g_context[fonction.nom]
+
index 945ced80984827904d625b9651155c93982695cf..751cacda98d6a0eb8ef6fc3cae024ec5281f9555 100644 (file)
@@ -1,3 +1,22 @@
+#            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_JDC_CATA
 
 class JDC_CATA:
index be318d25fbf2c096767eb7c6ee8f483e9ab13758..1fd95f5ea63438705876491948d486d10467a186 100644 (file)
@@ -1,3 +1,22 @@
+#            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
@@ -7,10 +26,18 @@ import traceback,types,string
 import I_ETAPE
 from Noyau.N_ASSD import ASSD
 
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
+import Noyau
+from Noyau import N_Exception
+from Noyau.N_Exception import AsException
+# fin import à résorber
+
 class MACRO_ETAPE(I_ETAPE.ETAPE):
 
   def __init__(self):
-      I_ETAPE.ETAPE.__init__(self)
+      # XXX CCAR : ne suis pas certain que typret doive etre 
+      # initialise à None (a verifier)
+      self.typret=None
 
   def get_sdprods(self,nom_sd):
     """ 
@@ -61,6 +88,10 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
                              context_ini = context_ini,
                              appli=self.jdc.appli)
        j.analyse()
+       # XXX en passant par un jdc auxiliaire, on risque de rendre les etapes inactives
+       # on les force dans l'etat actif
+       for etape in j.etapes:
+          etape.active()
     except:
        traceback.print_exc()
        return None
@@ -146,3 +177,60 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
       # On met g_context à blanc
       self.g_context={}
          
+  def Build_sd(self,nom):
+     """
+        Construit le concept produit de l'opérateur. Deux cas 
+        peuvent se présenter :
+
+        - le parent n'est pas défini. Dans ce cas, l'étape prend en charge 
+          la création et le nommage du concept.
+
+        - le parent est défini. Dans ce cas, l'étape demande au parent la 
+          création et le nommage du concept.
+
+     """
+     if not self.isactif():return
+     # CCAR : meme modification que dans I_ETAPE
+     if not self.isvalid(sd='non') : return
+     self.sdnom=nom
+     try:
+        # On positionne la macro self en tant que current_step pour que les 
+        # étapes créées lors de l'appel à sd_prod et à op_init aient la macro
+        #  comme parent 
+        self.set_current_step()
+        if self.parent:
+           sd= self.parent.create_sdprod(self,nom)
+           if type(self.definition.op_init) == types.FunctionType: 
+              apply(self.definition.op_init,(self,self.parent.g_context))
+        else:
+           sd=self.get_sd_prod()
+           if sd != None and self.reuse == None:
+              # On ne nomme le concept que dans le cas de non reutilisation 
+              # d un concept
+              sd.nom=nom
+        self.reset_current_step()
+        if self.jdc and self.jdc.par_lot == "NON" :
+           self.Execute()
+        return sd
+     except AsException,e:
+        self.reset_current_step()
+        # Une erreur s'est produite lors de la construction du concept
+        # Comme on est dans EFICAS, on essaie de poursuivre quand meme
+        # Si on poursuit, on a le choix entre deux possibilités :
+        # 1. on annule la sd associée à self
+        # 2. on la conserve mais il faut qu'elle soit correcte et la retourner
+        # En plus il faut rendre coherents sdnom et sd.nom
+        self.sd=None
+        self.sdnom=None
+        self.valid=0
+        return self.sd
+        #raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+        #                     'fichier : ',self.appel[1],e)
+     except EOFError:
+        raise
+     except :
+        self.reset_current_step()
+        l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+        raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                          'fichier : ',self.appel[1]+'\n',
+                           string.join(l))
index 7b8281d872fab575b79ce8a89f4cba03af9c9705..7b5482259e08551346a64bdb8b219c54c6e45c63 100644 (file)
@@ -1,3 +1,22 @@
+#            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 I_MCCOMPO
 class MCBLOC(I_MCCOMPO.MCCOMPO):
   def makeobjet(self):
index 24f71ccabc4688572d99453a42d6ecdc94cf52b9..d7e828ff7cc44971750f221e745a62b22601fd39 100644 (file)
@@ -1,3 +1,22 @@
+#            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 string,types
@@ -25,24 +44,6 @@ class MCCOMPO(I_OBJECT.OBJECT):
     else:
       return self.nom
 
-  def get_genealogie(self):
-    """ 
-        Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC
-        ou ETAPE) de self jusqu'au premier objet etape rencontré
-    """
-    l=[]
-    objet = self
-    while objet.definition.label != 'JDC' :
-      if not objet.isMCList() :
-        l.append(string.strip(objet.nom))
-      else :
-        pass
-      # Si objet.etape == etape c'est que objet est l'étape origine de la généalogie
-      if objet.etape == objet: break
-      objet = objet.parent
-    l.reverse()
-    return l
-
   def get_liste_mc_ordonnee(self,liste,dico):
     """
        Retourne la liste ordonnée (suivant le catalogue) des mots-clés
@@ -61,8 +62,8 @@ class MCCOMPO(I_OBJECT.OBJECT):
     """
     for arg in liste:
         objet_cata = dico[arg]
-        dico=objet_cata.dico
-    return objet_cata.liste
+        dico=objet_cata.entites
+    return objet_cata.ordre_mc
 
   def filtre_liste_mc(self,liste_brute):
     """ 
@@ -113,6 +114,20 @@ class MCCOMPO(I_OBJECT.OBJECT):
           liste.remove(k)
         if self.definition.entites[k].label=='BLOC':
           liste.remove(k)
+    # Pour corriger les exces qui pourraient etre commis dans la methode purge_liste
+    # des regles, on essaie de compenser comme suit :
+    # on ajoute les mots cles facteurs presents dont l'occurence n'est pas atteinte
+    for k in liste_mc_presents:
+      if k in liste:continue
+      objet = self.get_child(k,restreint = 'oui')
+      if isinstance(objet,MCFACT):
+          # un mot-clé facteur ne peut pas être répété plus de self.max fois
+          if objet.definition.max > 1:
+             liste.append(k)
+      elif isinstance(objet,MCList):
+          nb_occur_maxi = objet[0].definition.max
+          if len(objet) < nb_occur_maxi:
+              liste.append(k)
     return liste
 
   def liste_mc_presents(self):
@@ -178,6 +193,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
       """
       self.init_modif()
       if type(name)==types.StringType :
+        # on est en mode création d'un motcle 
         if self.ispermis(name) == 0 : return 0
         objet=self.definition.entites[name](val=None,nom=name,parent=self)
         if hasattr(objet.definition,'position'):
@@ -186,7 +202,9 @@ class MCCOMPO(I_OBJECT.OBJECT):
           elif objet.definition.position == 'global_jdc' :
             self.append_mc_global_jdc(objet)
       else :
+        # dans ce cas on est en mode copie d'un motcle
         objet = name
+       objet.verif_existence_sd()
       # si un objet de même nom est déjà présent dans la liste
       # et si l'objet est répétable
       # il faut créer une MCList et remplacer l'objet de la liste
@@ -219,6 +237,8 @@ class MCCOMPO(I_OBJECT.OBJECT):
             new_obj.init(objet.nom,self)
             new_obj.append(old_obj)
             new_obj.append(objet)
+            # Il ne faut pas oublier de reaffecter le parent d'obj
+            objet.reparent(self)
             self.mc_liste.remove(old_obj)
             self.mc_liste.insert(index,new_obj)
             self.fin_modif()
@@ -227,12 +247,16 @@ class MCCOMPO(I_OBJECT.OBJECT):
             # une liste d'objets de même type existe déjà
             #print "une liste d'objets de même type existe déjà"
             old_obj.append(objet)
+            # Il ne faut pas oublier de reaffecter le parent d'obj
+            objet.reparent(self)
             self.fin_modif()
             return old_obj
       if pos == None :
         self.mc_liste.append(objet)
       else :
         self.mc_liste.insert(pos,objet)
+      # Il ne faut pas oublier de reaffecter le parent d'obj (si copie)
+      objet.reparent(self)
       self.fin_modif()
       return objet
 
@@ -304,11 +328,18 @@ class MCCOMPO(I_OBJECT.OBJECT):
   def copy(self):
     """ Retourne une copie de self """
     objet = self.makeobjet()
+    # FR : attention !!! avec makeobjet, objet a le même parent que self
+    # ce qui n'est pas du tout bon dans le cas d'une copie !!!!!!!
+    # FR : peut-on passer par là autrement que dans le cas d'une copie ???
+    # FR --> je suppose que non
+    # XXX CCAR : le pb c'est qu'on vérifie ensuite quel parent avait l'objet
+    # Il me semble preferable de changer le parent a la fin quand la copie est acceptee
     objet.valeur = copy(self.valeur)
     objet.val = copy(self.val)
     objet.mc_liste=[]
     for obj in self.mc_liste:
       new_obj = obj.copy()
+      new_obj.reparent(objet)
       objet.mc_liste.append(new_obj)
     return objet
 
@@ -333,9 +364,9 @@ class MCCOMPO(I_OBJECT.OBJECT):
      for child in self.mc_liste :
         if child.isvalid() : continue
         l_child = child.get_liste_mc_inconnus()
-       if l_child :
+        for mc in l_child:
           l = [self]
-          l.extend(l_child)
+          l.extend(mc)
           l_mc.append(l)
      return l_mc
 
@@ -351,9 +382,9 @@ class MCCOMPO(I_OBJECT.OBJECT):
     liste_retraits = []
     dict = self.cree_dict_valeurs(self.mc_liste)
     for k,v in self.definition.entites.items():
-      #dict = self.cree_dict_valeurs(self.mc_liste)
       if v.label=='BLOC' :
-        if v.verif_presence(dict) :
+        globs= self.jdc and self.jdc.condition_context or {}
+        if v.verif_presence(dict,globs):
           # le bloc doit être présent
           if not self.get_child(k,restreint = 'oui'):
             # le bloc n'est pas présent et il doit être créé
@@ -365,3 +396,20 @@ class MCCOMPO(I_OBJECT.OBJECT):
             liste_retraits.append(k)
     return liste_ajouts,liste_retraits
 
+  def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.get_jdc_root()
+     self.etape=parent.etape
+     for mocle in self.mc_liste:
+        mocle.reparent(self)
+
+  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
+     """
+     for motcle in self.mc_liste :
+         motcle.verif_existence_sd()
index 08ab1f16697ac2aa26d5d4a0b5ad1656435bf7e3..396703642f722d078096035332ced5c5612fe9a6 100644 (file)
@@ -1,3 +1,22 @@
+#            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 I_MCCOMPO
 class MCFACT(I_MCCOMPO.MCCOMPO):
   def isrepetable(self):
index c08a383493db0b9448b6767c156833671b4396d2..b9529e3321600342dbf14841d7838ac75894b889 100644 (file)
@@ -1,3 +1,22 @@
+#            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 copy import copy
 
 class MCList:
@@ -28,9 +47,13 @@ class MCList:
         return 0
 
   def isoblig(self):
-    for i in self.data:
-      if i.isoblig():return 1
-    return 0
+     """
+     Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
+     """
+     return 0
+     #for i in self.data:
+     #  if i.isoblig():return 1
+     #return 0
 
   def liste_mc_presents(self):
     return []
@@ -49,11 +72,17 @@ class MCList:
       child.delete_concept(sd)
 
   def copy(self):
+    """
+       Réalise la copie d'une MCList
+    """
     liste = self.data[0].definition.list_instance()
-    # XXX Pas de parent ??
-    liste.init(self.nom)
+    # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
+    liste.init(self.nom,self.parent)
     for objet in self:
       new_obj = objet.copy()
+      # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
+      # dans lequel le parent de l'element d'une MCList est le parent de la MCList
+      new_obj.reparent(self.parent)
       liste.append(new_obj)
     return liste
 
@@ -68,10 +97,10 @@ class MCList:
      for mcfact in self.data :
         if mcfact.isvalid() : continue
         l_child = mcfact.get_liste_mc_inconnus()
-       if l_child :
-          l = [self]
-          l.extend(l_child)
-          l_mc.append(l)
+        for mc in l_child:
+           l = [self]
+           l.extend(mc)
+           l_mc.append(l)
      return l_mc
 
   def verif_condition_regles(self,liste_presents):
@@ -93,3 +122,82 @@ class MCList:
     # Sans objet pour une liste de mots clés facteurs
     return [],[]
 
+  def init_modif(self):
+    """
+       Met l'état de l'objet à modified et propage au parent
+       qui vaut None s'il n'existe pas
+    """
+    self.state = 'modified'
+    if self.parent:
+      self.parent.init_modif()
+
+  def get_etape(self):
+     """
+        Retourne l'étape à laquelle appartient self
+        Un objet de la catégorie etape doit retourner self pour indiquer que
+        l'étape a été trouvée
+        XXX double emploi avec self.etape ???
+     """
+     if self.parent == None: return None
+     return self.parent.get_etape()
+
+  def get_genealogie(self):
+     """
+         Retourne la liste des noms des ascendants.
+         Un objet MCList n'est pas enregistré dans la genealogie.
+         XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
+     """
+     if self.parent: 
+        return self.parent.get_genealogie()
+     else:
+        return []
+
+  def get_liste_mc_ordonnee_brute(self,liste,dico):
+     """
+         Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
+         d'une entité composée dont le chemin complet est donné sous forme
+         d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
+     """
+     for arg in liste:
+        objet_cata = dico[arg]
+        dico=objet_cata.entites
+     return objet_cata.ordre_mc
+
+  def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.jdc
+     self.etape=parent.etape
+     for mcfact in self.data:
+        mcfact.reparent(parent)
+
+  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
+     """
+     for motcle in self.data :
+         motcle.verif_existence_sd()
+
+  def get_sd_utilisees(self):
+    """
+        Retourne la liste des concepts qui sont utilisés à l'intérieur de self
+        ( comme valorisation d'un MCS)
+    """
+    l=[]
+    for motcle in self.data:
+      l.extend(motcle.get_sd_utilisees())
+    return l
+
+  def get_fr(self):
+     """
+         Retourne la chaine d'aide contenue dans le catalogue
+         en tenant compte de la langue
+     """
+     try :
+        return self.data[0].get_fr()
+     except:
+        return ''
+
index 96fe6ccd23bd8b39c79f43da88674b21723d8618..ca1bafa3822235bdb54327d4b8200bdbabcc4a1e 100644 (file)
@@ -1,3 +1,22 @@
+#            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 types,string
 import traceback
 from copy import copy
@@ -7,10 +26,21 @@ myrepr.maxstring = 100
 myrepr.maxother = 100
 
 from Noyau.N_utils import repr_float
+
+# Attention : les classes ASSD,.... peuvent etre surchargées
+# dans le package Accas. Il faut donc prendre des précautions si
+# on utilise les classes du Noyau pour faire des tests (isxxxx, ...)
+# Si on veut créer des objets comme des CO avec les classes du noyau
+# ils n'auront pas les conportements des autres packages (pb!!!)
+# Il vaut mieux les importer d'Accas mais problème d'import circulaire,
+# on ne peut pas les importer au début.
+# On fait donc un import local quand c'est nécessaire (peut occasionner
+# des pbs de prformance).
 from Noyau.N_ASSD import ASSD,assd
 from Noyau.N_GEOM import GEOM,geom
 from Noyau.N_CO import CO
-from Noyau.N_EVAL import EVAL
+# fin attention
+
 from Extensions import parametre
 import I_OBJECT
 
@@ -23,13 +53,17 @@ class MCSIMP(I_OBJECT.OBJECT):
     if self.valeur == None : 
       return None
     elif type(self.valeur) == types.FloatType : 
-      txt = repr_float(self.valeur)
+      #txt = repr_float(self.valeur)
+      # Normalement str fait un travail correct
+      txt = str(self.valeur)
     elif type(self.valeur) in (types.ListType,types.TupleType) :
       txt='('
       i=0
       for val in self.valeur:
         if type(val) == types.FloatType : 
-           txt=txt + i*',' + repr_float(val)
+           # Normalement str fait un travail correct
+           #txt=txt + i*',' + repr_float(val)
+           txt=txt + i*',' + str(val)
         elif type(val) == types.InstanceType and isinstance(val,ASSD): 
            txt = txt + i*',' + val.get_name()
         else: 
@@ -43,8 +77,16 @@ class MCSIMP(I_OBJECT.OBJECT):
         if isinstance(txt,parametre.PARAMETRE):
           return str(txt)
       return repr(txt)
-    # il faut tronquer txt au delà d'un certain nombre de caractères
-    # et avant tout retour chariot (txt peut être une chaîne de caractères
+    # txt peut etre une longue chaine sur plusieurs lignes.
+    # Il est possible de tronquer cette chaine au premier \n et 
+    # de limiter la longueur de la chaine a 30 caracteres. Cependant
+    # ceci provoque une perte d'information pour l'utilisateur
+    # Pour le moment on retourne la chaine telle que
+    return txt
+
+    # Partie de code inaccessible (pour memoire)
+    # txt est tronquee au dela d'un certain nombre de caractères
+    # et avant tout retour chariot (txt peut etre une chaine de caractères
     # sur plusieurs lignes (ex:shell)
     txt = string.split(txt,'\n')[0]
     if len(txt) < 30 :
@@ -82,7 +124,8 @@ class MCSIMP(I_OBJECT.OBJECT):
     """
     for typ in self.definition.type:
       if type(typ) == types.ClassType :
-        if typ is CO : return 1
+        if issubclass(typ,CO) :
+           return 1
     return 0
 
   def wait_assd(self):
@@ -104,7 +147,7 @@ class MCSIMP(I_OBJECT.OBJECT):
     """
     for typ in self.definition.type:
       if type(typ) == types.ClassType :
-        if typ in (GEOM,ASSD,geom,assd) or issubclass(typ,GEOM) :
+        if typ.__name__ in ("GEOM","ASSD","geom","assd") or issubclass(typ,GEOM) :
           return 1
     return 0
 
@@ -165,6 +208,8 @@ class MCSIMP(I_OBJECT.OBJECT):
         # type de nom new_valeur
         if self.wait_co():
           try:
+            # Pour avoir la classe CO avec tous ses comportements
+            from Accas import CO
             self.valeur=CO(new_valeur)
           except:
             traceback.print_exc()
@@ -204,6 +249,8 @@ class MCSIMP(I_OBJECT.OBJECT):
       return sd,1
     else:
       d={}
+      # On veut EVAL avec tous ses comportements. On utilise Accas. Perfs ??
+      from Accas import EVAL
       d['EVAL']=EVAL
       try :
         objet = eval(new_valeur,d)
@@ -238,9 +285,13 @@ class MCSIMP(I_OBJECT.OBJECT):
   def copy(self):
     """ Retourne une copie de self """
     objet = self.makeobjet()
-    #XXX est ce utile ??
-    objet.valeur = copy(self.valeur)
-    objet.val = copy(self.val)
+    # il faut copier les listes et les tuples mais pas les autres valeurs
+    # possibles (réel,SD,...)
+    if type(self.valeur) in (types.ListType,types.TupleType):
+       objet.valeur = copy(self.valeur)
+    else:
+       objet.valeur = self.valeur
+    objet.val = objet.valeur
     return objet
 
   def makeobjet(self):
@@ -257,3 +308,100 @@ class MCSIMP(I_OBJECT.OBJECT):
       if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur)
     return l
 
+
+  def set_valeur_co(self,nom_co):
+      """
+          Affecte à self l'objet de type CO et de nom nom_co
+      """
+      step=self.etape.parent
+      if nom_co == None or nom_co == '':
+         new_objet=None
+      else:
+         # Pour le moment on importe en local le CO de Accas.
+         # Si problème de perfs, il faudra faire autrement
+         from Accas import CO
+         # Avant de créer un concept il faut s'assurer du contexte : step 
+         # courant
+         sd= step.get_sd_autour_etape(nom_co,self.etape,avec='oui')
+         if sd:
+            # Si un concept du meme nom existe deja dans la portée de l'étape
+            # on ne crée pas le concept
+            return 0,"un concept de meme nom existe deja"
+         # Il n'existe pas de concept de meme nom. On peut donc le créer 
+         # Il faut néanmoins que la méthode NommerSdProd de step gère les 
+         # contextes en mode editeur
+         # Normalement la méthode  du Noyau doit etre surchargée
+         # On déclare l'étape du mot clé comme etape courante pour NommerSdprod
+         cs= CONTEXT.get_current_step()
+         CONTEXT.unset_current_step()
+         CONTEXT.set_current_step(step)
+         step.set_etape_context(self.etape)
+         new_objet = CO(nom_co)
+         CONTEXT.unset_current_step()
+         CONTEXT.set_current_step(cs)
+      self.valeur = new_objet
+      self.val = new_objet
+      self.init_modif()
+      step.reset_context()
+      # On force l'enregistrement de new_objet en tant que concept produit 
+      # de la macro en appelant get_type_produit avec force=1
+      self.etape.get_type_produit(force=1)
+      return 1,"Concept créé"
+       
+  def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.jdc
+     self.etape=parent.etape
+
+  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
+     """
+     l_sd_avant_etape = self.jdc.get_contexte_avant(self.etape).values()  
+     if type(self.valeur) in (types.TupleType,types.ListType) :
+       l=[]
+       for sd in self.valeur:
+         if isinstance(sd,ASSD) :
+           if sd in l_sd_avant_etape :
+              l.append(sd)
+        else:
+           l.append(sd)
+       self.valeur=l
+       self.init_modif()
+     else:
+       if isinstance(self.valeur,ASSD) :
+         if self.valeur not in l_sd_avant_etape :
+            self.valeur = None
+             self.init_modif()
+  def get_min_max(self):
+     """
+     Retourne les valeurs min et max admissibles pour la valeur de self
+     """
+     return self.definition.min,self.definition.max
+
+
+  def get_type(self):
+     """
+     Retourne le type attendu par le mot-clé simple
+     """
+     return self.definition.type
index 559ebcd5736f9283db4634b0ae1db4487d2ecad2..23feeefc50f8747d5329ba8b6e89f951a09e6a21 100644 (file)
@@ -1,7 +1,33 @@
+#            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 string
+
+import prefs
+import Noyau
 
 class OBJECT:
+  from Noyau.N_CO import CO
+  from Noyau.N_ASSD import assd
+
   def isMCList(self):
     """ 
         Retourne 1 si self est une MCList (liste de mots-clés), 
@@ -80,4 +106,33 @@ class OBJECT:
     """
     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é
+    """
+    if self.parent:
+       l=self.parent.get_genealogie()
+       l.append(string.strip(self.nom))
+       return l
+    else:
+       return [string.strip(self.nom)]
+
+  def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.jdc
+
+  def get_fr(self):
+     """
+         Retourne la chaine d'aide contenue dans le catalogue
+         en tenant compte de la langue
+     """
+     try :
+        return getattr(self.definition,prefs.lang)
+     except:
+        return ''
+
 
index 5ddd4a80155a359a3f8a61ad50cd273bd6ce3603..796d777a6c018dad574d222ac2c8b3eced68b336 100644 (file)
@@ -1,3 +1,22 @@
+#            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.
+#
+#
+# ======================================================================
 """
 """
 
@@ -9,8 +28,9 @@ class PRESENT_ABSENT(I_REGLE.REGLE):
      if self.mcs[0] in liste_mc_presents:regle_active=1
      if not regle_active : return liste_a_purger
 
-     for mc in self.mcs:
-        if mc in liste_a_purger:
+     # Il ne faut pas purger le mot cle present
+     for mc in self.mcs[1:]:
+        if mc in liste_a_purger :
            liste_a_purger.remove(mc)
      return liste_a_purger
 
index e6a841e3b3d66c6b82578c1463d2dd59eb254638..fbd6f681619745d774a3e44fb0f9393285b82723 100644 (file)
@@ -1,3 +1,22 @@
+#            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.
+#
+#
+# ======================================================================
 """
 """
 
index ddfdabebda3044c9d036704b58a4fbd12caff4d8..81d6c8107fb6e5076e842992d32db7ffeba6f612 100644 (file)
@@ -1,4 +1,32 @@
+#            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 I_ETAPE
+
+
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
+import traceback,types
+import Noyau
+from Noyau import N_Exception
+from Noyau.N_Exception import AsException
+# fin import à résorber
+
 class PROC_ETAPE(I_ETAPE.ETAPE):
    def get_sdname(self):
       return ""
@@ -24,3 +52,30 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
       for child in self.mc_liste :
         child.delete_concept(sd)
 
+   def Build_sd(self):
+      """
+          Cette methode applique la fonction op_init au contexte du parent
+          et lance l'exécution en cas de traitement commande par commande
+          Elle doit retourner le concept produit qui pour une PROC est toujours None
+          En cas d'erreur, elle leve une exception : AsException ou EOFError
+      """
+      if not self.isactif():return
+      try:
+         if self.parent:
+            if type(self.definition.op_init) == types.FunctionType: 
+               apply(self.definition.op_init,(self,self.parent.g_context))
+         else:
+            pass
+         if self.jdc.par_lot == "NON" :
+            self.Execute()
+      except AsException,e:
+        raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                              'fichier : ',self.appel[1],e)
+      except EOFError:
+        self.reset_current_step()
+        raise
+      except :
+        l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+        raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
+                          'fichier : ',self.appel[1]+'\n',
+                          string.join(l))
index 1ff738f37bcbc0d07d75a5e18ca761fc5dbe42b1..52a0c47a61be5c607aa2218fd23384091ab1ce1c 100644 (file)
@@ -1,3 +1,22 @@
+#            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 string
index a600514d16713cf690cf78390f41688a1fa5b4eb..bd1ef701bde03a596dda0ffbc73e8d5206810d6e 100644 (file)
@@ -1,3 +1,22 @@
+#            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.
+#
+#
+# ======================================================================
 """
 """
 
@@ -14,8 +33,9 @@ class UN_PARMI(I_REGLE.REGLE):
      if not regle_active : return liste_a_purger
 
      # Si un des mots clés est présent, on les enlève tous
+     # sauf celui ci
      for mc in self.mcs:
-        if mc in liste_a_purger:
+        if mc in liste_a_purger and mc not in liste_mc_presents:
            liste_a_purger.remove(mc)
      return liste_a_purger
 
index a2c6164b38dd9551c3d48d8e3212a47df423cc65..f12fbf81c63536dd71765cc17beed0a2e664efdf 100644 (file)
@@ -1,3 +1,22 @@
+#            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 package contient les fonctionnalités supplémentaires nécessaires
     pour l'éditeur graphique EFICAS
diff --git a/Installation/Doc_technique_install.doc b/Installation/Doc_technique_install.doc
new file mode 100755 (executable)
index 0000000..285a354
Binary files /dev/null and b/Installation/Doc_technique_install.doc differ
diff --git a/Installation/README b/Installation/README
new file mode 100755 (executable)
index 0000000..4a575ba
--- /dev/null
@@ -0,0 +1,30 @@
+
+
+       =================================================
+               Procédure d'installation d'EFICAS
+       =================================================
+
+Pré-requis :
+------------
+
+       - Python 2.1 ou supérieur avec Tkinter
+       - PMW 8.0.5 ou supérieur
+
+Installation :
+--------------
+
+1°) copiez le fichier eficas.tar.gz dans un répertoire temporaire
+
+2°) Décompressez ce fichier comme suit :
+
+       gunzip eficas.tar.gz
+       tar xvf eficas.tar
+
+3°) Vous devriez désormais voir 4 éléments :
+
+       - 1 fichier README_install
+       - 1 fichier install.py
+       - 1 fichier code_aster.gif
+       - 1 répertoire /Eficas
+
+4°) Reportez-vous au fichier README_install pour la suite des actions à entreprendre.
diff --git a/Installation/README_install b/Installation/README_install
new file mode 100755 (executable)
index 0000000..081d942
--- /dev/null
@@ -0,0 +1,40 @@
+\r
+\r
+       =================================================\r
+           Procédure d'installation d'EFICAS \r
+       =================================================\r
+\r
+Pour lancer la procédure d'installation, tapez :\r
+\r
+       python install.py\r
+\r
+Vous pouvez remplacer 'python' par le chemin d'accès de votre interpréteur Python.\r
+\r
+La procédure d'installation commence par vérifier que votre système contient bien les\r
+pré-requis pour EFICAS (cf README)\r
+\r
+La procédure va vous demander un certain nombre de chemins d'accès nécessaires à l'établissement du\r
+fichier de configuration d'EFICAS qui s'appelle editeur.ini et qui se trouvera, une fois EFICAS,\r
+installé, dans le répertoire Eficas/Aster\r
+\r
+- Répertoire d'installation    : répertoire dans lequel vous voulez installer Eficas\r
+- Répertoire de travail        : répertoire de travail temporaire d'EFICAS\r
+- Répertoire matériaux                 : répertoire dans lequel se trouvent les catalogues matériaux d'ASTER\r
+- Répertoire doc Aster                 : répertoire dans lequel se trouve le manuel U4 de la doc Aster (format pdf)\r
+                                       ex : /logiciels/aster/NEW6/doc/pdf/u4\r
+- Exécutable Acrobat Reader    : chemin d'accès complet à l'exécutable Acrobat Reader\r
+\r
+\r
+Catalogues Aster   :   EFICAS installe par défaut le catalogue Aster v6 qui se trouve en\r
+                       Eficas/Aster/Cata.\r
+                       Si vous voulez en installer d'autres, il faut qu'ils se trouvent dans ce même répertoire\r
+                       ou qu'il y ait un lien dans ce répertoire vers le fichier.\r
+                       Pour ajouter d'autres catalogues, il faut aller modifier directement le fichier editeur.ini\r
+\r
+       \r
+\r
+Lancement d'EFICAS :   le fichier à lancer est Eficas/Aster/eficas_aster.py\r
+                       il faut le lancer précédé du chemin d'accès à l'interpréteur Python comme\r
+                       pour la procédure d'installation.\r
+\r
+\r
diff --git a/Installation/install.py b/Installation/install.py
new file mode 100755 (executable)
index 0000000..dbe14e3
--- /dev/null
@@ -0,0 +1,949 @@
+SUCCES,ECHEC = 1,0\r
+OUI,NON = 1,0\r
+\r
+## constantes pour les tests de versions \r
+\r
+python_min = 20\r
+tcl_min = 83\r
+tk_min  = 83\r
+pmw_min = 85\r
+test = 0\r
+\r
+try:\r
+    import sys,string,re,types,traceback\r
+    import os,commands\r
+except Exception,e:\r
+    print "Mauvaise installation de Python"\r
+    print str(e)\r
+\r
+REPERTOIRE = os.path.abspath(os.curdir)\r
+\r
+def strip_points(chaine):\r
+    """\r
+    Enlève les caractères autres que les chiffres des chaînes\r
+    """\r
+    x=""\r
+    for i in range(len(chaine)):\r
+        try:\r
+            dummy = float(chaine[i])\r
+            x=x+chaine[i]\r
+        except:\r
+            pass\r
+    return x\r
+\r
+class Test_Environnement :\r
+    def __init__(self):\r
+        self.l_errors = []\r
+\r
+    def test_plate_forme(self):\r
+        """\r
+        Teste que la plate-forme est bien supportée\r
+        """\r
+        if os.name not in ('nt','posix'):\r
+            self.l_errors.append("La plate-forme %s n'est pas supportée" %os.name)\r
+            \r
+    def test_version_python(self):\r
+        """\r
+        Test de la version de python\r
+        """\r
+        version = sys.version\r
+        n = string.index(version,"(") - 1\r
+        vpyt = strip_points(version[0:n])[0:2]     ## recupere les 2 premiers caracteres\r
+        if int(vpyt)<python_min :\r
+            self.l_errors.append("La version %s de python n'est plus supportée" %version[0:n])\r
+\r
+    def test_tcl_tk(self):\r
+        """\r
+        Test des versions de tcl et tk\r
+        """\r
+        try:\r
+            import Tkinter\r
+            vtcl = Tkinter.tkinter.TCL_VERSION\r
+            vtk  = Tkinter.tkinter.TK_VERSION\r
+            # version tcl\r
+            x = strip_points(vtcl)\r
+            if int(x)<tcl_min :\r
+                self.l_errors.append("La version %s de tcl n'est plus supportée" %vtcl)\r
+            # version tk\r
+            x = strip_points(vtk)\r
+            if int(x)<tk_min :\r
+                self.l_errors.append("La version %s de tk n'est plus supportée" %vtk)\r
+        except Exception,e:\r
+            self.l_errors.append("Tkinter n'est pas installé")\r
+            print str(e)\r
+\r
+    def test_Pmw(self):\r
+        """\r
+        Test de la version de Pmw\r
+        """\r
+        try:\r
+            import Pmw\r
+            vpmw = Pmw._version\r
+            x = strip_points(vpmw)\r
+            if int(x)<pmw_min :\r
+                self.l_errors.append("La version %s de Pmw n'est plus supportée" %vpmw)\r
+        except:\r
+            self.l_errors.append("Pmw n'est pas installé")\r
+\r
+    def test(self):\r
+        """\r
+        Active les tests de version Python, versions Tcl/Tk et Pmw\r
+        """\r
+        self.test_plate_forme()\r
+        self.test_version_python()\r
+        self.test_tcl_tk()\r
+        self.test_Pmw()\r
+        if not len(self.l_errors):\r
+            print "Environnement Ok"\r
+            return 1\r
+        else :\r
+            print "Il manque des prérequis"\r
+            print "EFICAS ne peut pas être installé"\r
+            print "Erreurs : ",string.join(self.l_errors)\r
+            return 0\r
+\r
+class Slider:\r
+    def __init__(self, master=None, orientation="horizontal", min=0, max=100,\r
+                 width=100, height=25, autoLabel="true", appearance="sunken",\r
+                 fillColor="blue", background="black", labelColor="yellow",\r
+                 labelText="", labelFormat="%d%%", value=50, bd=2):\r
+        # preserve various values\r
+        self.master=master\r
+        self.orientation=orientation\r
+        self.min=min\r
+        self.max=max\r
+        self.width=width\r
+        self.height=height\r
+        self.autoLabel=autoLabel\r
+        self.fillColor=fillColor\r
+        self.labelColor=labelColor\r
+        self.background=background\r
+        self.labelText=labelText\r
+        self.labelFormat=labelFormat\r
+        self.value=value\r
+        self.frame=Tkinter.Frame(master, relief=appearance, bd=bd)\r
+        self.canvas=Tkinter.Canvas(self.frame, height=height, width=width, bd=0,\r
+                                   highlightthickness=0, background=background)\r
+        self.scale=self.canvas.create_rectangle(0, 0, width, height,\r
+                                                fill=fillColor)\r
+        self.label=self.canvas.create_text(self.canvas.winfo_reqwidth() / 2,\r
+                                           height / 2, text=labelText,\r
+                                           anchor="c", fill=labelColor)\r
+        self.update()\r
+        self.canvas.pack(side='top', fill='x', expand='no')\r
+\r
+    def update(self):\r
+        # Trim the values to be between min and max\r
+        value=self.value\r
+        if value > self.max:\r
+            value = self.max\r
+        if value < self.min:\r
+            value = self.min\r
+        # Preserve the new value\r
+        c=self.canvas\r
+        # Adjust the rectangle\r
+        if self.orientation == "horizontal":\r
+            c.coords(self.scale,0, 0,float(value) / self.max * self.width, self.height)\r
+        else:\r
+            c.coords(self.scale,0, self.height - (float(value) / self.max*self.height),self.width, self.height)\r
+        # Now update the colors\r
+        c.itemconfig(self.scale, fill=self.fillColor)\r
+        c.itemconfig(self.label, fill=self.labelColor)\r
+        # And update the label\r
+        if self.autoLabel=="true":\r
+            c.itemconfig(self.label, text=self.labelFormat % value)\r
+        else:\r
+            c.itemconfig(self.label, text=self.labelFormat % self.labelText)\r
+        c.update_idletasks()\r
+try :\r
+    import Tkinter\r
+    import Pmw\r
+    from tkMessageBox import showinfo,askyesno,showerror,askretrycancel\r
+except:\r
+    pass\r
+\r
+class SplashScreen(Tkinter.Toplevel):\r
+    """ Provides a splash screen. Usage:\r
+        Subclass and override 'CreateWidgets()'\r
+        In constructor of main window/application call\r
+        - S = SplashScreen(main=self)        (if caller is Toplevel)\r
+        - S = SplashScreen(main=self.master) (if caller is Frame)\r
+        - S.quit()  after you are done creating your widgets etc.\r
+    """\r
+    def __init__(self, master,**args):\r
+        Tkinter.Toplevel.__init__(self, master, relief='groove',borderwidth=5)\r
+        self.protocol("WM_DELETE_WINDOW",lambda x=0: x+x  )       # pour ne pas détruire la fenêtre en pleine copie de fichiers\r
+        self.main = master\r
+        if self.main != None :\r
+            self.main.withdraw()\r
+        self.frame = Tkinter.Frame(self)\r
+        self.frame.pack(expand=1,fill='both')\r
+        self.init(args)\r
+        self.geometry("300x200")\r
+        self.resizable(0,0)\r
+        self.CreateWidgets()\r
+\r
+    def init(self,args={}):\r
+        self.text = Tkinter.StringVar()\r
+        self.text.set('')\r
+        self.icone = 'Editeur/icons/logo_edf.gif'\r
+        self.barre = 'non'\r
+        if args == {} : return\r
+        if args.has_key('text'):\r
+            self.text.set(args['text'])\r
+        if args.has_key('titre'):\r
+            self.title(args['titre'])\r
+        if args.has_key('code'):\r
+            self.code = args['code']\r
+        else:\r
+            self.code = 'inconnu'\r
+        if self.code == 'ASTER' :\r
+            self.icone = 'Editeur/icons/code_aster.gif'\r
+        \r
+    def CreateWidgets(self):\r
+        fic_image = os.path.join("./", self.icone)\r
+        if os.path.exists(fic_image):\r
+            self.catIcon = Tkinter.PhotoImage(file=os.path.join("./", self.icone))\r
+            Tkinter.Label(self.frame, image=self.catIcon).pack(side=Tkinter.TOP)\r
+        else:\r
+            Tkinter.Label(self.frame, text = "EFICAS pour Code_Aster").pack(side=Tkinter.TOP)\r
+        self.label = Tkinter.Label(self.frame, textvariable=self.text)\r
+        self.label.pack(side=Tkinter.TOP,expand=1,fill='both')\r
+        self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal',\r
+                               fillColor='blue',width=200,height=30,\r
+                               background='white',labelColor='red')\r
+\r
+    def update_barre(self,event=None):\r
+        """ Permet de faire avancer la barre de progression """\r
+        try:\r
+            self.progress.value = self.progress.value+self.increment\r
+            self.progress.update()\r
+            #self.after(100,self.update_barre)\r
+        except:\r
+            pass\r
+\r
+    def configure_barre(self):\r
+        """ Calcule l'incrément de progression de la barre en fonction\r
+        du nombre d'opérations à effectuer afin que le compteur\r
+        soit à 100% à la fin des opérations"""\r
+        self.increment = 100./self.ratio\r
+        self.progress.update()\r
+\r
+    def configure(self,**args):\r
+        if args.has_key('text'):\r
+            self.text.set(args['text'])\r
+        if args.has_key('titre'):\r
+            self.title(args['titre'])\r
+        if args.has_key('barre'):\r
+            old = self.barre\r
+            self.barre = args['barre']\r
+            if self.barre == 'oui' and old == 'non':\r
+                self.progress.frame.pack(in_=self.frame,side='top')\r
+            elif self.barre == 'non' and old == 'oui':\r
+                self.progress.frame.pack_forget()\r
+        if args.has_key('ratio'):\r
+            self.ratio = args['ratio']\r
+            self.configure_barre()\r
+        self.update()\r
+        \r
+    def quit(self):\r
+        self.progress = None\r
+        self.withdraw()\r
+        self.main.update()\r
+        self.main.deiconify()\r
+\r
+def centerwindow(window,parent = 'avec'):\r
+    if parent =='avec':\r
+        parent = window.winfo_parent()\r
+        if type(parent) == types.StringType:\r
+            try:\r
+                parent = window._nametowidget(parent)\r
+            except:\r
+                parent = window\r
+    # Find size of window.\r
+    window.update_idletasks()\r
+    width = window.winfo_width()\r
+    height = window.winfo_height()\r
+    if width == 1 and height == 1:\r
+        # If the window has not yet been displayed, its size is\r
+        # reported as 1x1, so use requested size.\r
+        width = window.winfo_reqwidth()\r
+        height = window.winfo_reqheight()\r
+    # Place in centre of screen:\r
+    if parent =='avec' :\r
+        x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx()\r
+        y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty()\r
+    else:\r
+        x = (window.winfo_screenwidth() - width) / 2 \r
+        y = (window.winfo_screenheight() - height) / 3\r
+    if x < 0:\r
+        x = 0\r
+    if y < 0:\r
+        y = 0\r
+    window.geometry('+%d+%d' % (x, y))\r
+    \r
+class config_item:\r
+    """\r
+    Classe utilisée pour représenter chaque option de configuration\r
+    """\r
+    def __init__(self, pere, nom):\r
+        self.nom = nom\r
+        self.pere = pere\r
+        self.entree_value = None\r
+        self.default = None\r
+        self.test = None\r
+        self.pere.register_item(self)\r
+\r
+    def get_valeur(self):\r
+        return os.path.abspath(self.entree.get())\r
+    \r
+    def set_entree(self,entree):\r
+        self.entree = entree\r
+        self.pere.register_entree(entree)\r
+\r
+class Config(Tkinter.Toplevel):\r
+    """\r
+    Classe principale : une instance de Config est utilisée pour\r
+    créer l'interface. Toutes les actions (création de répertoire, copie\r
+    de fichiers ...) sont réalisées par des méthodes de Config ou de ses\r
+    composants\r
+    """\r
+    pat_rep = re.compile(r'^(rep_)([\w_]*)')             # expression réguliere pour reconnaitre les\r
+                                                         # les options qui désignent des répertoires\r
+    def __init__(self, parent):\r
+        self.master = parent\r
+        Tkinter.Toplevel.__init__(self,None)\r
+        parent.withdraw()\r
+        self.title("Installation d'EFICAS")\r
+        self.geometry("500x320+0+0")\r
+        centerwindow(self)\r
+        self.install_running = 0\r
+        #évite que la fenêtre puisse être détruite en pleine copie de fichiers\r
+        self.protocol("WM_DELETE_WINDOW",self.exit  )\r
+        # création des frames\r
+        self.frame_gen = Tkinter.Frame(self,bd=1,relief='groove')\r
+        self.frame_gen.place(relx=0,rely=0,relwidth=1,relheight=0.9 )\r
+        self.frame_but = Tkinter.Frame(self,bd=1,relief='groove')\r
+        self.frame_but.place(relx=0,rely=0.9 ,relheight=0.1 ,relwidth=1)\r
+        # création des items de configuration\r
+        self.make_items_config()\r
+        # remplissage de la frame générale\r
+        self.make_frame_gen()\r
+        # remplissage de la frame boutons\r
+        self.make_frame_but()\r
+        # création boîtes de dialogue\r
+        self.init_complementaire()\r
+        # init système\r
+        self.init_systeme()\r
+        \r
+    def make_items_config(self):\r
+        """\r
+        Création des objets Config_item\r
+        """\r
+        self.items = []\r
+        self.items_a_creer = []\r
+        self.liste_rep_crees = []\r
+        self.entrees = []\r
+        # designation, texte d'invite , option par defaut(unix), option par defaut(windows), flag obligatoire/facultatif\r
+        self.l_tx_items = (('rep_install'   ,\r
+                            "Répertoire d'installation :",\r
+                            '',\r
+                            '',\r
+                            'o'),\r
+                           ('rep_travail'   ,\r
+                            'Répertoire de travail :',\r
+                            'tmp',\r
+                            'tmp',\r
+                            'f'),\r
+                           ('rep_mat'       ,\r
+                            'Répertoire matériaux :',\r
+                            None,\r
+                            None,\r
+                            'f'),\r
+                           ('rep_docaster'  ,\r
+                            "Chemin d'accès à la doc Aster :" ,\r
+                            None,\r
+                            None,\r
+                            'f'\r
+                            ),\r
+                           ('acrobat'       ,\r
+                            'Exécutable Acrobat Reader :',\r
+                            '/usr/bin/acroread',\r
+                            'acrobat.exe',\r
+                            'o')\r
+                           )\r
+\r
+        for item in self.l_tx_items:\r
+            nom_item = item[0]\r
+            setattr(self,nom_item,config_item(self,nom_item))\r
+\r
+    def make_frame_gen(self):\r
+        """\r
+        Création des zones de saisie des paramètres généraux\r
+        """\r
+        # Création du label titre de la frame\r
+        self.information = Tkinter.Label(self.frame_gen,text="CONFIGURATION D'EFICAS")\r
+        self.information.pack(side="top",pady=10)\r
+        # création des widgets de saisie des items\r
+        for txt in self.l_tx_items:\r
+            nom_item = txt[0]\r
+            txt_item = txt[1]\r
+            if os.name == 'nt':\r
+                default_value = txt[3]\r
+            else:\r
+                default_value = txt[2]\r
+            item = getattr(self,nom_item)\r
+            wdg_item = Pmw.EntryField(self.frame_gen,\r
+                                      labelpos = 'w',\r
+                                      label_text = txt_item,\r
+                                      command = lambda s=self,i=item : s.select_next_entry(i.entree))\r
+            item.default_value = default_value\r
+            item.statut = txt[4]\r
+            item.set_entree(wdg_item)\r
+        # on affiche les entrées\r
+        for entree in self.entrees:\r
+            entree.pack(fill='x', expand=1, padx=10, pady=5)\r
+        Pmw.alignlabels(self.entrees)\r
+        self.entrees[0].focus_set()\r
+        #self.rep_cata_dev.entree.configure(entry_state = 'disabled')\r
+        self.display_defaults()\r
+        \r
+    def make_frame_but(self):\r
+        """\r
+        Création des boutons de commande Installer et Annuler\r
+        """\r
+        self.validButton    = Tkinter.Button(self.frame_but, text = 'Installer', command = self.run_install)\r
+        self.exitButton     = Tkinter.Button(self.frame_but,\r
+                                             text = 'Annuler',\r
+                                             command = lambda s=self : s.exit(annule='oui'))\r
+        self.exitButton.place(relx=0.35,rely=0.5,anchor='center')\r
+        self.validButton.place(relx=0.65,rely=0.5,anchor='center')\r
+\r
+    def init_complementaire(self):\r
+        """\r
+        Création de widgets complémentaires (boîtes de dialogue ...)\r
+        """\r
+        self.erreur_dialog = Pmw.Dialog(self,\r
+                                        buttons = ('Modifier', 'Annuler'),\r
+                                        defaultbutton = 'Modifier',\r
+                                        title = 'Erreur',\r
+                                        command = self.erreur_exec)\r
+        self.erreur_dialog.withdraw()\r
+        self.fatale_dialog = Pmw.Dialog(self,\r
+                                        buttons = ('Annuler',),\r
+                                        title = 'Fatal',\r
+                                        command = self.fatale_exec)\r
+        self.fatale_dialog.withdraw()\r
+        self.info_dialog = Pmw.Dialog(self,\r
+                                        buttons = ('Ok',),\r
+                                        title = 'Attention')\r
+        self.info_dialog.configure(command=self.info_dialog.withdraw())\r
+        self.info_dialog.withdraw()\r
+        self.attente = SplashScreen(None,code="ASTER")\r
+        self.attente.withdraw()\r
+\r
+    def init_systeme(self):\r
+        """\r
+        Détermine les commandes à exécuter en fonction de l'OS\r
+        """\r
+        self.d_commandes = {}\r
+        if os.name == 'nt':\r
+            self.d_commandes['decompress'] = "unzip.exe "\r
+            self.d_commandes['copy'] = "copy "\r
+            self.d_commandes['delete'] = "del "\r
+        elif os.name == 'posix':\r
+            self.d_commandes['decompress'] = "gunzip "\r
+            self.d_commandes['copy'] = "cp "\r
+            self.d_commandes['delete'] = "rm "\r
+\r
+    def run_install(self):\r
+        """\r
+        Lance l'installation proprement dite d'EFICAS\r
+        """\r
+        self.install_running = 1\r
+        self.afficher_splash()\r
+        self.deactivate_entries()           #  Les entrees et les boutons sont desactivees\r
+        self.deactivate_buttons()           #  pendant les operations d'installation\r
+        #self.decompress_archive()\r
+        #if not os.path.exists(os.path.join(REPERTOIRE,'Eficas')):\r
+        #    self.afficher_fatale("Il manque des fichiers d'EFICAS")\r
+        #    self.install_running = 0\r
+        #    return\r
+        self.nb_fichiers = self.compte_fichiers(REPERTOIRE)\r
+        if self.nb_fichiers == 0:\r
+            self.afficher_fatale("Il manque des fichiers d'EFICAS")\r
+            self.install_running = 0\r
+            return\r
+        # essaie de creer les repertoires.\r
+        try:\r
+            if self.make_dirs() == ECHEC :                             \r
+                self.activate_entries()                               \r
+                self.activate_buttons()                               \r
+                self.install_running = 0\r
+                return\r
+        except:\r
+            self.install_running = 0\r
+            self.afficher_fatale("Impossible de créer certains répertoires")\r
+            \r
+        # affiche la fenêtre avec la barre de progression\r
+        self.afficher_copie_fichiers()          \r
+        # essaie de copier les fichiers d'EFICAS\r
+        try:\r
+            if  self.move_files() == ECHEC:                           \r
+                self.afficher_echec("Impossible de copier les fichiers d'EFICAS")\r
+                self.activate_buttons()\r
+                self.install_running = 0\r
+                return\r
+        except :\r
+           traceback.print_exc()\r
+            self.install_running = 0\r
+            self.afficher_fatale("Impossible de copier certains fichiers")\r
+\r
+        #self.rm_temp_dirs()                     # efface les répertoires temporaires\r
+        try:\r
+            self.creer_fic_conf()                   # crée le fichier eficas.conf\r
+        except:\r
+            afficher_info("Impossible de créer le fichier de configuration\n Il est possible de le faire a la main")\r
+#        self.install_running = 0\r
+        self.afficher_install_terminee()        # A ce stade tout est fait et il ne reste plus qu'à attendre\r
+                                                # un clic de souris pour sortir\r
+\r
+    def display_defaults(self):\r
+        """\r
+        Affiche les valeurs par défaut dans les zones de saisie\r
+        """\r
+        # racine indique la racine de l'arborescence\r
+        if os.name == 'nt':\r
+            racine = 'C:\\'\r
+        else:\r
+            racine = os.environ['HOME']\r
+        # remplit les zones de saisie avec les options par défaut\r
+        for item in self.items:\r
+            if item.default_value == None : continue\r
+            item.default_value = os.path.join(racine,item.default_value)\r
+            item.entree.insert(0,item.default_value)\r
+\r
+    def register_item(self,item):\r
+        """\r
+        Enregistre l'item dans la liste des items et éventuellement\r
+        dans la liste des items à créer (répertoires)\r
+        """\r
+        self.items.append(item)\r
+        if self.pat_rep.match(item.nom) :\r
+            self.items_a_creer.append(item)\r
+\r
+    def register_entree(self,entree):\r
+        """\r
+        Enregistre la zone de saisie dans la liste des zones\r
+        """\r
+        self.entrees.append(entree)\r
+\r
+    def select_next_entry(self,entree):\r
+        """\r
+        Place le focus dans l'entry suivant celle passée en argument\r
+        """\r
+        index = self.entrees.index(entree)+1\r
+        if index != len(self.entrees):\r
+            self.entrees[index].component('entry').focus()\r
+\r
+    def activate_entries(self):\r
+        """\r
+        Active les entrées. Les zones de saisie deviennent éditables.\r
+        """\r
+        for item in self.entrees:\r
+            item.configure(entry_state='normal')\r
+\r
+    def deactivate_entries(self):\r
+        """\r
+        Désactive les entrées. Les zones ne sont plus éditables.\r
+        """\r
+        for item in self.entrees:                                #  Les entrees sont desactivees\r
+            item.configure(entry_state='disabled')               #  pendant les operations d'installation\r
+\r
+    def activate_buttons(self):\r
+        """\r
+        active les boutons valider et annuler\r
+        """\r
+        self.validButton.configure(state = 'normal')\r
+        self.exitButton.configure(state = 'normal')\r
+\r
+    def deactivate_buttons(self):\r
+        """\r
+        désactive des boutons valider de annuler\r
+        """\r
+        self.validButton.configure(state = 'disabled')\r
+        self.exitButton.configure(state = 'disabled')\r
+\r
+    def erreur_exec(self, result):\r
+        """\r
+        Callback exécuté lorsque l'utilisateur clique sur un des boutons\r
+        Modifier/Annuler de la fenêtre de dialogue qui lui présente les erreurs\r
+        """\r
+        self.erreur_dialog.deactivate(result)\r
+        self.removedir()\r
+        if result == 'Annuler':\r
+            self.install_running = 0\r
+            self.exit(annule='non')\r
+\r
+    def fatale_exec(self, result):\r
+        """\r
+        Callback exécuté lorsque l'utilisateur clique sur le bouton\r
+        Quitter de la fenêtre de dialogue qui lui présente les erreurs fatales\r
+        Seule solution : sortir de l'installation\r
+        """\r
+        self.fatale_dialog.deactivate(result)\r
+        self.install_running = 0\r
+        self.exit(annule='oui')\r
+        \r
+    def test_confirmation(self,flag,nom):\r
+        """\r
+        Callback activé par le clic sur bouton fenêtre demandant confirmation\r
+        avant création répertoire facultatif\r
+        """\r
+        if flag == 'NON':\r
+            self.confirmation.destroy()\r
+            self.TEST_confirmation_avant_creation = NON\r
+            return \r
+        else :\r
+            self.confirmation.destroy()\r
+            self.TEST_confirmation_avant_creation = OUI            \r
+            \r
+    def afficher_fatale(self, message):\r
+        """\r
+        Affiche les erreurs fatales\r
+        """\r
+        self.attente.withdraw()\r
+        w = Tkinter.Label(self.fatale_dialog.interior(),text = message, pady = 5)\r
+        w.pack(expand = 1, fill = 'both', padx = 4, pady = 4)\r
+        self.fatale_dialog.configure(deactivatecommand = w.destroy)\r
+        self.fatale_dialog.activate()\r
+\r
+    def afficher_echec(self, message):\r
+        """\r
+        Affiche un message d'erreur\r
+        Par construction, dès que l'on passe par cette méthode, on sort de l'installation\r
+        en passant le flag install_running à 0\r
+        """\r
+        self.attente.withdraw()\r
+        w = Tkinter.Label(self.erreur_dialog.interior(),text = message, pady = 5)\r
+        w.pack(expand = 1, fill = 'both', padx = 4, pady = 4)\r
+        self.erreur_dialog.configure(deactivatecommand = w.destroy)\r
+        self.erreur_dialog.activate()\r
+\r
+    def confirmation_avant_creation(self,repertoire):\r
+        """\r
+        Affiche une boite de dialogue pour confirmer la création\r
+        d'un répertoire facultatif.\r
+        """\r
+        self.attente.withdraw()\r
+        self.confirmation = Pmw.Dialog(self,\r
+                                       buttons = ('OUI', 'NON'),\r
+                                       defaultbutton = 'OUI',\r
+                                       title = "Répertoire inexistant",\r
+                                       command = lambda f,s=self,r=repertoire : s.test_confirmation(f,r))\r
+        self.confirmation.withdraw()\r
+        Tkinter.Label(self.confirmation.interior(),\r
+                      text="Le répertoire %s n'existe pas \n Voulez-vous le créer ?" %repertoire).pack(side='top')\r
+        self.confirmation.activate(geometry='centerscreenalways')\r
+        return self.TEST_confirmation_avant_creation\r
+  \r
+    def afficher_splash(self):\r
+        """\r
+        Afficher la boite de message \r
+        """\r
+        self.attente.deiconify()\r
+        self.attente.tkraise()\r
+        centerwindow(self.attente)\r
+        self.attente.configure(titre="Installation d'EFICAS",\r
+                               text="Vérification intégrité sources Eficas",\r
+                               barre="non")\r
+        \r
+    def afficher_info(self,message):\r
+        """\r
+        Afficher une boite de warning\r
+        """\r
+        w = Tkinter.Label(self.info_dialog.interior(),text = message, pady = 5)\r
+        w.pack(expand = 1, fill = 'both', padx = 4, pady = 4)\r
+        self.info_dialog.configure(deactivatecommand = w.destroy)\r
+        self.info_dialog.activate()\r
+        \r
+    def afficher_copie_fichiers(self):\r
+        """\r
+        Afficher la boite de message avec la barre de progression\r
+        """\r
+        self.attente.deiconify()\r
+        self.attente.tkraise()\r
+        self.attente.configure(titre="Installation d'EFICAS",\r
+                               text="copie des fichiers",\r
+                               barre="oui")\r
+        self.attente.ratio = self.nb_fichiers\r
+        self.attente.configure_barre()\r
+\r
+    def afficher_install_terminee(self):\r
+        """\r
+        Afficher le message Installation terminée\r
+        """\r
+        self.withdraw()\r
+        self.attente.configure(titre="Installation d'EFICAS",\r
+                               text="Installation terminée",\r
+                               barre="non")\r
+        self.exitButton.place_forget()\r
+        self.validButton.place_forget()\r
+        self.validButton = Tkinter.Button(self.attente.frame,\r
+                                          text = 'Quitter',\r
+                                          command = self.exit)\r
+        self.validButton.pack(side='top',pady=5)\r
+        self.install_running = 0\r
+\r
+    def decompress_archive(self) :\r
+        """\r
+        Décompresse l'archive d'EFICAS dans un répertoire temporaire (.)\r
+        """\r
+        print "decompress_archive"\r
+        #try:\r
+        commande = os.path.join(REPERTOIRE,self.d_commandes['decompress'])\r
+        fichier = os.path.join(REPERTOIRE,"eficas.zip")\r
+        print 'commande =',commande\r
+        print 'fichier =',fichier\r
+        os.execv(commande,("eficas.zip",))\r
+        #except:\r
+        #    self.affiche_echec("Erreur dans la décompression")\r
+\r
+    def normaliser_chemin(self, nom):\r
+        """\r
+        Retourne le chemin d'accès complet à nom\r
+        """\r
+        return os.path.abspath(os.path.expanduser(nom))\r
+\r
+    def discriminer_noms(self):\r
+        """\r
+        Emet un message d'alerte si des zones de saisie ne sont pas remplies\r
+        ou si des noms de répertoires à créer sont identiques.\r
+        """\r
+        liste_noms = []\r
+        for item in self.items_a_creer:\r
+            nom = item.entree.get()\r
+            if nom == self.rep_install.entree.get():        # il faut ajouter 'Eficas' au chemin du repertoire\r
+                nom = os.path.join(nom,"Eficas")            # d'installation\r
+            liste_noms.append(nom)\r
+\r
+        test = SUCCES\r
+        for item in self.items_a_creer:\r
+            nom = item.entree.get()\r
+            if len(nom) == 0 :\r
+                test = ECHEC\r
+                message = "attention : certains répertoires n'ont pas de nom"\r
+                self.afficher_echec(message)\r
+            item.entree.component('entry').focus()\r
+            break\r
+\r
+        if test == ECHEC :\r
+            return test\r
+\r
+        for item in self.items_a_creer:\r
+            nom = item.entree.get()\r
+            if liste_noms.count(nom) >1 :\r
+                test = ECHEC\r
+                message = "attention : certains répertoires ont le même nom"\r
+                self.afficher_echec(message)\r
+            item.entree.component('entry').focus()\r
+            break\r
+\r
+        return test\r
+\r
+    def compte_fichiers(self,path):\r
+        """\r
+        Dénombre les fichiers présents dans le répertoire Eficas (et ses sous-répertoires)\r
+        """\r
+        nb = 0\r
+        l_fic = os.listdir(path)\r
+        l_rep = []\r
+        for fic in l_fic :\r
+            if os.path.isdir(os.path.join(path,fic)):\r
+                l_rep.append(fic)\r
+            else:\r
+                nb = nb+1\r
+        for rep in l_rep :\r
+            nb = nb + self.compte_fichiers(os.path.join(path,rep))\r
+        return nb\r
+\r
+    def creer_fic_conf(self):\r
+        """\r
+        Crée le fichier editeur.ini a partir des données saisies\r
+        par l'administrateur.\r
+        """\r
+        fichier_conf = os.path.join(self.normaliser_chemin(self.rep_install.get_valeur()),"Eficas/Aster/editeur.ini")\r
+        f = open(fichier_conf,'w')\r
+        f.write("path_doc        =    "+'"'+self.normaliser_chemin(self.rep_docaster.get_valeur())+'"\n')\r
+        f.write("exec_acrobat    =    "+'"'+self.normaliser_chemin(self.acrobat.get_valeur())+'"\n')\r
+        f.write('isdeveloppeur   =    "NON"\n')\r
+        f.write("rep_travail     =    "+'"'+self.normaliser_chemin(self.rep_travail.get_valeur())+'"\n')\r
+        f.write("rep_cata        =    "+'"'+os.path.join(self.normaliser_chemin(self.rep_install.get_valeur()),"Eficas/Aster/Cata/")+'"\n') # attention au dernier slash\r
+        f.write("rep_mat         =    "+'"'+self.normaliser_chemin(self.rep_mat.get_valeur())+'"\n')\r
+        cata = """catalogues = (('ASTER','v6',rep_cata + 'cata_STA6.py','python','defaut'),)\n"""\r
+        f.write(cata)\r
+        f.close()\r
+       \r
+\r
+    def move_files(self):\r
+        """\r
+        Déplace les fichiers Eficas du répertoire temporaire vers\r
+        leur répertoire de destination\r
+        """\r
+        # création du répertoire Eficas\r
+        rep_eficas = os.path.join(self.rep_install.get_valeur(),'Eficas')\r
+        self.copy_rep(REPERTOIRE,rep_eficas)\r
+\r
+    def copy_rep(self,rep_dep,rep_arr):\r
+        """\r
+        Copie le répertoire path_dep et ses sous-répertoires dans path_arr\r
+        """\r
+        l_fichiers = os.listdir(rep_dep)\r
+        if not os.path.exists(rep_arr) :\r
+            # création du répertoire d'arrivée quand il n'existe pas \r
+            self.mkdirs(rep_arr)\r
+        for fic in l_fichiers :\r
+            nom_complet_dep = os.path.join(rep_dep,fic)\r
+            nom_complet_arr = os.path.join(rep_arr,fic)\r
+            if os.path.isfile(nom_complet_dep):\r
+                commande_copie = self.d_commandes['copy']+nom_complet_dep+' '+nom_complet_arr\r
+                commande_delete= self.d_commandes['delete']+nom_complet_dep\r
+                try:\r
+                    os.system(commande_copie)\r
+                    #os.system(commande_delete)\r
+                    self.attente.update_barre()\r
+                except Exception,e:\r
+                    pass\r
+            elif os.path.isdir(nom_complet_dep):\r
+                self.copy_rep(nom_complet_dep,nom_complet_arr)\r
+\r
+    def rm_temp_dirs(self):\r
+        """\r
+        Détruit le répertoire temporaire de l'archive d'Eficas\r
+        """\r
+        rep_arch = os.path.join(REPERTOIRE,'Eficas')\r
+        self.rm_r(rep_arch)\r
+\r
+    def make_dirs(self):\r
+        """\r
+        Crée les répertoires d'accueil des fichiers d'EFICAS\r
+        """\r
+        # création des répertoires dont l'utilisateur a donné le nom\r
+        if self.discriminer_noms() == ECHEC:\r
+            return ECHEC\r
+        for item in self.items_a_creer:\r
+            if not item.entree.get():\r
+                continue\r
+            nom = item.get_valeur()\r
+            if nom == self.normaliser_chemin(self.rep_install.entree.get()):        # il faut ajouter 'Eficas' au chemin du repertoire\r
+                nom = os.path.join(nom,"Eficas")            # d'installation\r
+            item.test = self.essai_creer(nom,item.statut)\r
+            if item.test == ECHEC :\r
+                item.entree.component('entry').focus()\r
+                return ECHEC\r
+        return SUCCES\r
+\r
+    def essai_creer(self, nom, statut):\r
+        """\r
+        Essaie de créer le répertoire nom s'il n'existe pas déjà.\r
+        Si statut == 'f' et si le fichier n'existe pas, demande\r
+        confirmation avant création\r
+        """\r
+        repertoire = self.normaliser_chemin(nom)                # repertoire = chemin absolu de nom\r
+        if os.path.exists(repertoire):\r
+            if statut == 'o' :\r
+                self.afficher_echec("Un fichier ou répertoire de nom "+ repertoire+ " existe déjà !\n"+\r
+                                "L'installation ne peut continuer")\r
+                return ECHEC\r
+            else:\r
+                return SUCCES\r
+\r
+        if statut == 'f' :\r
+            # on demande confirmation de création à l'utilisateur\r
+            test = self.confirmation_avant_creation(repertoire)\r
+            if test == NON:\r
+                return SUCCES\r
+\r
+        try:\r
+            test = self.mkdirs(repertoire)\r
+            return SUCCES\r
+        except Exception,e:\r
+            message = "La création de "+repertoire+" a échoué :\n %s \n Vérifiez vos droits d'écriture"  %str(e)  # message d'erreur\r
+            self.afficher_echec(message)\r
+            return ECHEC\r
+\r
+    def mkdirs(self,rep):\r
+        """\r
+        Création récursive des répertoires d'installation.\r
+        Les noms des répertoires crées sont stockés dans\r
+        une liste dont se sert la méthode removedir pour\r
+        restaurer l'environnement initial en cas d'annulation.\r
+        """\r
+        if rep==os.path.dirname(rep):\r
+            return SUCCES\r
+\r
+        if os.path.exists(os.path.dirname(rep)):\r
+            os.mkdir(rep)\r
+            self.liste_rep_crees.append(rep)\r
+            return SUCCES\r
+        else:\r
+            test = self.mkdirs(os.path.dirname(rep))\r
+            if test == SUCCES:\r
+                os.mkdir(rep)\r
+                self.liste_rep_crees.append(rep)\r
+                return SUCCES\r
+            else:\r
+                return ECHEC\r
+\r
+    def rm_r(self,path):\r
+        """\r
+        Detruit récursivement path\r
+        """\r
+        if not os.path.exists(path):\r
+            return\r
+        try:\r
+            if len(os.listdir(path))!=0:\r
+                for entree in os.listdir(path):\r
+                    entree = os.path.join(path,entree)\r
+                    self.rm_r(entree)\r
+            os.rmdir(path)\r
+        except Exception,e:\r
+            self.afficher_info("Impossible de détruire le répertoire : "+path+"\n"+"\n"+str(e)+"\n L'installation continue néanmoins")\r
+\r
+    def removedir(self):\r
+        """\r
+        Destruction des répertoires déja crées (en cas d'annulation)\r
+        """\r
+        for rep in self.liste_rep_crees:\r
+            self.rm_r(rep)\r
+        self.liste_rep_crees = []\r
+\r
+    def exit(self,annule='non'):\r
+        """\r
+        Tente de sortir de l'application.\r
+        Echoue si installation en cours\r
+        """\r
+        if self.install_running :\r
+            # l'installation est en cours --> on interdit la sortie\r
+            self.afficher_info("Impossible de quitter tant que l'installation est en cours\n Veuillez patienter")\r
+        else:\r
+            if annule == 'oui' : self.removedir()\r
+            self.master.quit()\r
+\r
+if __name__ == '__main__':\r
+    test = Test_Environnement().test()\r
+    if not test :\r
+        # environnement incomplet --> on sort de la procédure d'installation\r
+        sys.exit()\r
+    else:\r
+        import Tkinter\r
+        import Pmw\r
+        root = Tkinter.Tk()\r
+        Pmw.initialise(root)\r
+        try:\r
+            principal = Config(root)\r
+            root.mainloop()\r
+        except Exception,e:\r
+            print "Erreur non prévue rencontrée : ",str(e)\r
+            print "Veuillez prévenir la maintenance"\r
+            sys.exit()\r
index 40975a2d96f828b5e65a94c32a69d7ade8a240d1..4c742a6a6d30900d7add31652f4334c729efdfd8 100755 (executable)
@@ -3,6 +3,8 @@
 import Accas
 from Accas import *
 
+#CONTEXT.debug=1
+
 import ops
 
 JdC = JDC_CATA(code='SATURNE',
@@ -11,13 +13,21 @@ JdC = JDC_CATA(code='SATURNE',
                          AU_MOINS_UN('FIN'),
                          A_CLASSER(('DEBUT','POURSUITE'),'FIN')
                         )
-              );
+              )
 
 # P. RASCLE MMN
 # remarques diverses sur le catalogue Saturne
 # - dans les blocs, il faut au moins un mot clé de statut obligatoire
 # probleme de rafraichissement des blocs dépendants quand la valeur d'un mot cle global (ITURB) passe de 1 à 0
 
+# Type le plus general
+class entier  (ASSD):pass
+class reel    (ASSD):pass
+class complexe(ASSD):pass
+class liste   (ASSD):pass
+class chaine  (ASSD):pass
+
+
 class sonde(ASSD):pass
 class varsca(ASSD):pass
 class flusca(ASSD):pass
@@ -36,7 +46,35 @@ class tsr23(ASSD):pass
 class resti(ASSD):pass
 
 class maillage(ASSD):pass
-class listr8          (ASSD):pass
+class modele(ASSD):pass
+class matr_asse(ASSD):pass
+class cham_elem_sief_r(ASSD):pass
+class theta_geom(ASSD):pass
+class cham_mater(ASSD):pass
+class cara_elem(ASSD):pass
+class char_ther(ASSD):pass
+class char_meca(ASSD):pass
+class nume_ddl(ASSD):pass
+class char_acou(ASSD):pass
+class listr8 (ASSD):pass
+class matr_elem(ASSD):pass
+class matr_elem_depl_c(matr_elem):pass
+class matr_elem_depl_r(matr_elem):pass
+class matr_elem_pres_c(matr_elem):pass
+class matr_elem_temp_r(matr_elem):pass
+
+# matr_asse :
+#--------------------------------
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
 
 # fin entete
 
@@ -101,6 +139,33 @@ FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction,
                 COMPLEXE = SIMP(typ = 'shell',max=1),
 ) ;
 
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-f1",
+                 fr="Affectation des éléments finis sur le maillage",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
+                );
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-f",reentrant='n',
+              fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
+         MATR_RIGI       =SIMP(statut='f',typ=(matr_elem_depl_r ,matr_elem_depl_c,
+                                               matr_elem_temp_r,matr_elem_pres_c),max=100 ),
+         MODELE          =SIMP(statut='f',typ=modele ),
+         b_modele        =BLOC(condition = "MODELE != None",
+           CHARGE     =SIMP(statut='f',max='**',typ=(char_meca,char_ther,char_acou, ),),
+         ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+
 DEFI_SONDE = OPER(nom="DEFI_SONDE",op= 1,sd_prod=sonde,
      docu="U2D1",
      fr="définition d'une sonde historique avec ses coordonnées",
@@ -1229,3 +1294,258 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une 
 )  ;
 
 
+def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
+                        SOLVEUR,NUME_DDL,CHARGE,INST,**args):
+  """
+     Ecriture de la macro MACRO_MATR_ASSE
+  """
+  ier=0
+  # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+  numeddl=NUME_DDL
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL      =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.icmd=1
+
+  if SOLVEUR:
+    methode=SOLVEUR['METHODE']
+    if methode=='LDLT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='RCMK'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode LDLT, RENUM doit etre SANS ou RCMK.")
+        return ier
+    elif methode=='MULT_FRONT':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='MDA'
+      if renum not in ('MDA','MD','METIS'):
+        ier=ier+1
+        self.cr.fatal("Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.")
+        return ier
+    elif methode=='GCPC':
+      if SOLVEUR['RENUM']:
+         renum=SOLVEUR['RENUM']
+      else:
+         renum='SANS'
+      if renum not in ('SANS','RCMK'):
+        ier=ier+1
+        self.cr.fatal("Avec methode GCPC, RENUM doit etre SANS ou RCMK.")
+        return ier
+  else:
+    methode='MULT_FRONT'
+    renum  ='MDA'
+
+  if numeddl in self.sdprods:
+    # Si le concept numeddl est dans self.sdprods
+    # il doit etre  produit par la macro
+    # il faudra donc appeler la commande NUME_DDL
+    lnume = 1
+  else:
+    lnume = 0
+  lrigel = 0
+  lmasel = 0
+
+  iocc=0
+  for m in MATR_ASSE:
+    iocc=iocc+1
+    option=m['OPTION']
+    if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
+                                                   'RIGI_THER','RIGI_ACOU')      :
+      ier=ier+1
+      self.cr.fatal("LA PREMIERE OPTION DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR")
+      return ier
+
+    if m['SIEF_ELGA']!=None and option!='RIGI_GEOM':
+      ier=ier+1
+      self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM")
+      return ier
+
+    if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'):
+      ier=ier+1
+      self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER")
+      return ier
+
+    if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR':
+      ier=ier+1
+      self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR")
+      return ier
+    motscles={'OPTION':option}
+    if option == 'AMOR_MECA':
+       if (not lrigel or not lmasel):
+          ier=ier+1
+          self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE
+                           RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""")
+          return ier
+       if CHAM_MATER != None:
+          motscles['RIGI_MECA']   =rigel
+          motscles['MASS_MECA']   =masel
+    if CHARGE     != None:
+       if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'):
+                           motscles['CHARGE']      =CHARGE
+    if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
+    if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
+    if INST       != None: motscles['INST']        =INST
+    if m['SIEF_ELGA']   :  motscles['SIEF_ELGA']   =m['SIEF_ELGA']
+    if m['MODE_FOURIER']:  motscles['MODE_FOURIER']=m['MODE_FOURIER']
+    if m['THETA']       :  motscles['THETA']       =m['THETA']
+    if m['PROPAGATION'] :  motscles['PROPAGATION'] =m['PROPAGATION']
+    __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
+
+    if option == 'RIGI_MECA':
+      rigel  = __a
+      lrigel = 1
+    if option == 'MASS_MECA':
+      masel  = __a
+      lmasel = 1
+
+    if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
+      self.DeclareOut('num',numeddl)
+      # On peut passer des mots cles egaux a None. Ils sont ignores
+      num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum)
+    else:
+      num=numeddl
+
+    self.DeclareOut('mm',m['MATRICE'])
+    mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num)
+  return ier
+
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL:  raise AsException("Impossible de typer les concepts resultats")
+  self.type_sdprod(NUME_DDL,nume_ddl)
+  for m in MATR_ASSE:
+    opti=m['OPTION']
+
+    if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
+       "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+       "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R",
+       "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r
+
+    if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
+
+    if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
+       "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r
+
+    if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
+
+    self.type_sdprod(m['MATRICE'],t)
+  return None
+
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.21-c",
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MODELE          =SIMP(statut='o',typ=modele),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)),
+         INST            =SIMP(statut='f',typ='R'),
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
+         SOLVEUR         =FACT(statut='d',min=01,max=01,
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",
+                                 into=("LDLT","MULT_FRONT","GCPC")),
+           RENUM           =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")),
+         ),
+         MATR_ASSE       =FACT(statut='o',min=01,max='**',
+           MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
+                                       "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
+                                       "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
+                                       "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR",
+                                       "RIGI_THER","MASS_THER",
+                                       "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",
+                                       "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",)
+                                 ),
+           SIEF_ELGA       =SIMP(statut='f',typ=cham_elem_sief_r),
+           MODE_FOURIER    =SIMP(statut='f',typ='I'),
+           THETA           =SIMP(statut='f',typ=theta_geom),
+           PROPAGATION     =SIMP(statut='f',typ='R'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+
+
+def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None):
+  if IS != None  : return entier
+  if R8 != None  : return reel
+  if TX != None  : return chaine
+  if C8 != None  : return complexe
+  if LS != None  : return liste
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
+                 fr="Affectation d une valeur à une variable Superviseur",
+                 docu="U4.31.04-e1",reentrant='f',
+         regles=(UN_PARMI('IS','R8','TX','C8','LS'),),
+         IS              =SIMP(statut='f',typ='I',max='**'),
+         R8              =SIMP(statut='f',typ='R',max='**'),
+         TX              =SIMP(statut='f',typ='TXM',max='**'),
+         C8              =SIMP(statut='f',typ='C',max='**'),
+         LS              =SIMP(statut='f',typ='L',max='**'),
+)  ;
+
+def macro2_prod(self,MODELE,**args):
+   return maillage
+
+MACRO2 =MACRO(nom="MACRO2",op= -5 ,docu="U4.61.21-c",
+                      sd_prod=macro2_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MODELE          =SIMP(statut='o',typ=modele),
+);
+
+class concept(ASSD):pass
+
+def op1_prod(x,**args):
+   if x == 0:return concept
+   if x == 1:return concept
+   raise AsException("type de concept resultat non prevu")
+
+OP1 = OPER(nom='OP1',op=1,sd_prod=op1_prod,reentrant='f',
+           a=SIMP(statut='o',typ='I',into=(0,1,2)),
+           b=SIMP(typ=concept),
+           ccc=FACT(statut='d',d=SIMP(typ='I'),e=SIMP(typ='I')),
+           b_1=BLOC(condition="a==0",
+                    x=SIMP(statut='o',typ='I',into=(0,1)),
+                    c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')),
+                   ),
+           b_2=BLOC(condition="a==1",
+                    x=SIMP(statut='o',typ='I',into=(0,1)),
+                    b_2=BLOC(condition="1",
+                             cc=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')),
+                             c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')),
+                            ),
+                   ),
+          );
+
+
+def op2_prod(self,x,**args):
+   if x == 0:return concept
+   if x == 1:return concept
+   raise AsException("type de concept resultat non prevu")
+
+OP2 = MACRO(nom='OP2',op=1,sd_prod=op2_prod,reentrant='f',
+           a=SIMP(statut='o',typ='I',into=(0,1,2)),
+           b=SIMP(typ=concept),
+           ccc=FACT(statut='d',d=SIMP(typ='I'),e=SIMP(typ='I')),
+           b_1=BLOC(condition="a==0",
+                    x=SIMP(statut='o',typ='I',into=(0,1)),
+                    c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')),
+                   ),
+           b_2=BLOC(condition="a==1",
+                    x=SIMP(statut='o',typ='I',into=(0,1)),
+                    b_2=BLOC(condition="1",
+                             cc=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')),
+                             c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')),
+                            ),
+                   ),
+          );
+
index c8a97ac187baac5665176a2de6b5a8cfec4eb320..281ccc8ef1b5c3ae9e328d667e0ce3b8c1047336 100755 (executable)
@@ -3,19 +3,44 @@
     Ce module sert à lancer EFICAS configuré pour Code_Mini
 """
 # Modules Python
-import sys
+import sys,os
 
 # Modules Eficas
 import prefs
 sys.path[:0]=[prefs.INSTALLDIR]
 
+args=sys.argv[1:]
+for a in args:
+   if a == "-display":
+      os.environ['DISPLAY']=args[args.index("-display")+1]
+
 import Editeur
 from Editeur import eficas_go
 
-if len(sys.argv) > 1 :
-    # on veut ouvrir un fichier directement au lancement d'Eficas
-    eficas_go.lance_eficas(code='SATURNE',fichier = sys.argv[1])
+def main():
+   if len(sys.argv) > 1 :
+       # on veut ouvrir un fichier directement au lancement d'Eficas
+       eficas_go.lance_eficas(code='SATURNE',fichier = sys.argv[1])
+   else:
+       # on veut ouvrir Eficas 'vide'
+       eficas_go.lance_eficas(code='SATURNE')
+
+def hidez():
+   from Misc import Cyclops
+   z = Cyclops.CycleFinder()
+   z.run(main)
+   z.find_cycles()
+   z.show_stats()
+   z.show_cycles()
+   # z.show_cycleobjs()
+   # z.show_sccs()
+   z.show_arcs()
+
+withCyclops=0
+
+if withCyclops:
+   hidez()
 else:
-    # on veut ouvrir Eficas 'vide'
-    eficas_go.lance_eficas(code='SATURNE')
+   main()
+
 
index f3d82ae82ca0c1fd12e7aeb21ce229035306274d..57be183f0c7f654bf8753a15cc7cf77f19768a4d 100644 (file)
@@ -14,8 +14,13 @@ INSTALLDIR=os.path.join(REPINI,'..')
 # 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"
 
 # ICONDIR sert à localiser le répertoire contenant les icones
 # Par défaut on utilise le répertoire icons dans Editeur
 ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
 
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+
index c7c5335df0793d88f695add0e4523d6393b30bb4..d2bd6f21e23c1b5c405b12c3986d5ed95f6c25fc 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_ETAPE Noyau  DATE 26/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_ETAPE Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -27,6 +27,7 @@
 import types,sys,string,os
 import linecache
 import traceback
+from copy import copy
 
 # Modules EFICAS
 import N_MCCOMPO
@@ -317,6 +318,51 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       if self.sd:
         d[self.sd.nom]=self.sd
 
+   def copy(self):
+      """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+          et sans sd 
+      """
+      etape = copy(self)
+      etape.sd = None
+      etape.state = 'modified'
+      etape.reuse = None
+      etape.sdnom = None
+      etape.etape=etape
+      etape.mc_liste=[]
+      for objet in self.mc_liste:
+        new_obj = objet.copy()
+        new_obj.reparent(etape)
+        etape.mc_liste.append(new_obj)
+      return etape
+
+   def copy_reuse(self,old_etape):
+      """ 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. 
+      """
+      if hasattr(old_etape,"sdnom") :
+        self.sdnom = old_etape.sdnom
 
-
+   def get_sd_utilisees(self):
+      """ 
+          Retourne la liste des concepts qui sont utilisés à l'intérieur d'une commande
+          ( comme valorisation d'un MCS) 
+      """
+      l=[]
+      for child in self.mc_liste:
+        l.extend(child.get_sd_utilisees())
+      return l
+
+   def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.get_jdc_root()
+     self.etape=self
+     for mocle in self.mc_liste:
+        mocle.reparent(self)
index 95581464fda57b4816128f2efb46374deab890b8..8a2aa3e1bb99fe42489081869f1dd96f525639a5 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_JDC Noyau  DATE 26/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_JDC Noyau  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -393,3 +393,5 @@ NONE = None
       self.index_etape_courante=index_etape
       return d
 
+   def get_global_contexte(self):
+      return self.g_context.copy()
index 5aa383619b4c8d702ed3e75f47c156807b45569d..46cb881bf749d32f2a3c620165d6d2e1b74c53c0 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MACRO Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MACRO Noyau  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -85,7 +85,7 @@ class MACRO(N_ENTITE.ENTITE):
    nommage = nommage
 
    def __init__(self,nom,op,sd_prod=None,reentrant='n',repetable='o',fr="",ang="",
-                docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,**args):
+                docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,UIinfo=None,**args):
       """
          Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser
          les attributs de meme nom
@@ -125,6 +125,7 @@ class MACRO(N_ENTITE.ENTITE):
       else:
          self.niveau=current_cata.get_niveau(niveau)
          self.niveau.enregistre(self)
+      self.UIinfo=UIinfo
       self.affecter_parente()
 
    def __call__(self,reuse=None,**args):
index 4a883f8fd9fbd29f8710bb96dba0b1dcbb98226d..1139b691220ed8e45e40695ad62f01003b61e4bd 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 26/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -511,7 +511,20 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       d={}
       self.g_context = d
       self.contexte_fichier_init = d
-      exec code in self.parent.g_context,d
+      globs=self.parent.get_global_contexte()
+      exec code in globs,d
+
+   def get_global_contexte(self):
+      """
+          Cette methode retourne le contexte global fourni
+          par le parent(self) a une etape fille (l'appelant) pour
+          realiser des evaluations de texte Python (INCLUDE,...)
+      """
+      # Le contexte global est forme par concatenation du contexte
+      # du parent de self et de celui de l'etape elle meme (self)
+      d=self.parent.get_global_contexte()
+      d.update(self.g_context)
+      return d
 
 
 
index 0b05c2ded83be1fdd79e57891875b6108bc7938e..60f3c80df5077e85dcd74b02d05d8fbb06223293 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCBLOC Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MCBLOC Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -103,3 +103,5 @@ class MCBLOC(N_MCCOMPO.MCCOMPO):
       """
       visitor.visitMCBLOC(self)
 
+   def makeobjet(self):
+      return self.definition(val = None,  nom = self.nom,parent = self.parent)
index da0d0b6a7009759201a3790bc70bcbdbac1f8b56..56fa972dea554d74a38de4774ab819dad128d364 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCCOMPO Noyau  DATE 29/05/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MCCOMPO Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24,7 +24,7 @@
 """
 
 import types
-
+from copy import copy
 import N_OBJECT
 
 class MCCOMPO(N_OBJECT.OBJECT):
@@ -313,5 +313,40 @@ class MCCOMPO(N_OBJECT.OBJECT):
       nom = mc.nom
       self.jdc.mc_globaux[nom]=mc
 
+   def copy(self):
+    """ Retourne une copie de self """
+    objet = self.makeobjet()
+    # FR : attention !!! avec makeobjet, objet a le meme parent que self
+    # ce qui n'est pas du tout bon dans le cas d'une copie !!!!!!!
+    # FR : peut-on passer par là autrement que dans le cas d'une copie ???
+    # FR --> je suppose que non
+    # XXX CCAR : le pb c'est qu'on vérifie ensuite quel parent avait l'objet
+    # Il me semble preferable de changer le parent a la fin quand la copie est acceptee
+    objet.valeur = copy(self.valeur)
+    objet.val = copy(self.val)
+    objet.mc_liste=[]
+    for obj in self.mc_liste:
+      new_obj = obj.copy()
+      new_obj.reparent(objet)
+      objet.mc_liste.append(new_obj)
+    return objet
 
+   def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.get_jdc_root()
+     self.etape=parent.etape
+     for mocle in self.mc_liste:
+        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) 
+    """
+    l=[]
+    for child in self.mc_liste:
+      l.extend(child.get_sd_utilisees())
+    return l
index 6cc2eca74ee36dd2fc4d283ca3f2faa2670c5d9f..d0f68a453dbd72d3acb07bf5562c3defc2f9b1c5 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCFACT Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MCFACT Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -94,3 +94,5 @@ class MCFACT(N_MCCOMPO.MCCOMPO):
       """
       visitor.visitMCFACT(self)
 
+   def makeobjet(self):
+     return self.definition(val = None, nom = self.nom,parent = self.parent)
index 88fc4ac16543dceeeeb4e0c55c45ca01a03ab128..9b21cdf941b8e11b5de0c7a8c7aaefa1bab31a69 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCLIST Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MCLIST Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -24,6 +24,7 @@
     de type ENTITE
 """
 
+from copy import copy
 import UserList
 
 class MCList(UserList.UserList):
@@ -109,3 +110,37 @@ class MCList(UserList.UserList):
       """
       visitor.visitMCList(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) 
+      """
+      l=[]
+      for child in self.data:
+        l.extend(child.get_sd_utilisees())
+      return l
+
+   def copy(self):
+      """
+        Réalise la copie d'une MCList
+      """
+      liste = self.data[0].definition.list_instance()
+      # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ...
+      liste.init(self.nom,self.parent)
+      for objet in self:
+        new_obj = objet.copy()
+        # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__
+        # dans lequel le parent de l'element d'une MCList est le parent de la MCList
+        new_obj.reparent(self.parent)
+        liste.append(new_obj)
+      return liste
+
+   def reparent(self,parent):
+      """
+         Cette methode sert a reinitialiser la parente de l'objet
+      """
+      self.parent=parent
+      self.jdc=parent.jdc
+      self.etape=parent.etape
+      for mcfact in self.data:
+        mcfact.reparent(parent)
index fc940f7d84b7eb33a0b14bafe42a7086181e959c..7df9f9fd5f001475ea6c89bb0a72eb417a50a2c7 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_MCSIMP Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_MCSIMP Noyau  DATE 03/09/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
     de type ENTITE
 """
 
+import types
+from copy import copy
+
+from Noyau.N_ASSD import ASSD,assd
 import N_OBJECT
 
 class MCSIMP(N_OBJECT.OBJECT):
@@ -94,3 +98,40 @@ class MCSIMP(N_OBJECT.OBJECT):
       """
       visitor.visitMCSIMP(self)
 
+   def copy(self):
+    """ 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,...)
+    if type(self.valeur) in (types.ListType,types.TupleType):
+       objet.valeur = copy(self.valeur)
+    else:
+       objet.valeur = self.valeur
+    objet.val = objet.valeur
+    return objet
+
+   def makeobjet(self):
+    return self.definition(val = None, nom = self.nom,parent = self.parent)
+
+   def reparent(self,parent):
+     """
+         Cette methode sert a reinitialiser la parente de l'objet
+     """
+     self.parent=parent
+     self.jdc=parent.jdc
+     self.etape=parent.etape
+
+   def get_sd_utilisees(self):
+    """ 
+        Retourne une liste qui contient la SD utilisée par self si c'est le cas
+        ou alors une liste vide
+    """
+    l=[]
+    if type(self.valeur) == types.InstanceType:
+      #XXX Est ce différent de isinstance(self.valeur,ASSD) ??
+      if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur)
+    elif type(self.valeur) in (types.TupleType,types.ListType):
+      for val in self.valeur :
+         if type(val) == types.InstanceType:
+            if issubclass(val.__class__,ASSD) : l.append(val)
+    return l
index dd9812e839474d17733fb2d80524e6c4f78e7c8c..5e43776ed7f2ce9ef2ed9a979cc8059cbef285fd 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_OPER Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_OPER Noyau  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -85,7 +85,7 @@ class OPER(N_ENTITE.ENTITE):
    nommage = nommage
 
    def __init__(self,nom,op,sd_prod,reentrant='n',repetable='o',fr="",ang="",
-                docu="",regles=(),op_init=None,niveau = None,**args):
+                docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args):
       """
          Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser
          les attributs de meme nom
@@ -112,6 +112,7 @@ class OPER(N_ENTITE.ENTITE):
       else:
          self.niveau=current_cata.get_niveau(niveau)
          self.niveau.enregistre(self)
+      self.UIinfo=UIinfo
       self.affecter_parente()
 
    def __call__(self,reuse=None,**args):
index 173070fb25fe7d4c5ad5394c6e0016d4420b6d2a..6e1b73fa99054cfb47039a0fb6f4d4045f23d4be 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF N_PROC Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF N_PROC Noyau  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -79,7 +79,7 @@ class PROC(N_ENTITE.ENTITE):
    label = 'PROC'
 
    def __init__(self,nom,op,reentrant='n',repetable='o',fr="",ang="",
-                docu="",regles=(),op_init=None,niveau = None,**args):
+                docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args):
       """
          Méthode d'initialisation de l'objet PROC. Les arguments sont utilisés pour initialiser
          les attributs de meme nom
@@ -105,6 +105,7 @@ class PROC(N_ENTITE.ENTITE):
       else:
          self.niveau=current_cata.get_niveau(niveau)
          self.niveau.enregistre(self)
+      self.UIinfo=UIinfo
       self.affecter_parente()
 
    def __call__(self,**args):
index 41ab579d654420d07fc8ab15b8f61274dba16d38..c8d3ade90905acc71140a82e445562f84cf80d85 100644 (file)
@@ -1,8 +1,7 @@
-#@ MODIF properties Accas DATE 29/08/2002 AUTEUR gcbhhhh M.ADMINISTRATEUR
+#@ MODIF properties Noyau  DATE 27/03/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
-# RESPONSABLE D6BHHHH J-P.LEFEBVRE
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# 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   
@@ -16,9 +15,9 @@
 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC 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 = "6.3.14"
-date = "29/08/2002"
+version = "6.2.24"
+date = "15/03/2002"
+
index ed24d3cfe26df6594861f3418a062f1a395f63c3..c14833ec50d9aa0ccf268fc2c7dc1fefc3b9e3e0 100644 (file)
@@ -19,4 +19,7 @@ CODE_PATH = None
 # Par défaut on utilise le répertoire icons dans Editeur
 ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
 
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
 
diff --git a/Syrthes/cata_syrthes.py b/Syrthes/cata_syrthes.py
new file mode 100755 (executable)
index 0000000..43113e9
--- /dev/null
@@ -0,0 +1,243 @@
+# debut entete
+import Accas
+from Accas import *
+#
+JdC = JDC_CATA(code='SYRTHES',
+               execmodul=None,
+               niveaux=(NIVEAU(nom='generalites',label='Généralités',valide_vide=0),
+                        NIVEAU(nom='gest_calc',label='Gestion du calcul',valide_vide=0,actif="generalites == 1"),
+                        NIVEAU(nom='gest_sort',label='Gestion des sorties'),
+                        NIVEAU(nom='choix_num',label='Choix numériques',valide_vide=0),\r
+                        NIVEAU(nom='prop_phys',label='Propriétés physiques',valide_vide=0,actif='choix_num==1'),\r
+                        NIVEAU(nom='cond_init',label='Conditions initiales',valide_vide=0,actif='prop_phys==1'),\r
+                        NIVEAU(nom='cond_limi',label='Conditions aux limites',valide_vide=0,actif='cond_init==1'),\r
+                        NIVEAU(nom='flux_volu',label='Flux volumiques',valide_vide=0,actif='cond_limi==1'),\r
+                        NIVEAU(nom='soli_mouv',label='Solides en mouvement'),\r
+                        NIVEAU(nom='couplages',label='Couplages'),\r
+                        NIVEAU(nom='rayonnement',label='Rayonnement',valide_vide=0,actif='flux_volu==1'),\r
+                        NIVEAU(nom='cond_lim_ray',label='Conditions limites rayonnement',valide_vide=0,actif='rayonnement==1'),\r
+                        NIVEAU(nom='in_out_ray',label='Entrées/Sorties rayonnement',valide_vide=0,actif='rayonnement==1'),\r
+                        NIVEAU(nom='fichiers',label='Fichiers pour le calcul'))
+               )
+
+
+GENERALITES = PROC(nom='GENERALITES',op=10,\r
+                   fr="Définition des principales options du calcul",\r
+                   niveau='generalites',
+                   TYPE_DE_CALCUL=SIMP(typ='TXM',\r
+                                       statut='o',\r
+                                       into=('Syrthes thermique solide seule','Syrthes couplé'),\r
+                                       defaut='Syrthes thermique solide seule',\r
+                                       position='global_jdc'),
+                   TITRE = SIMP(statut='f',typ='TXM'),
+                   DIMENSION = SIMP(statut='o',\r
+                                    typ='I',\r
+                                    into=(2,3),\r
+                                    defaut=2,\r
+                                    position='global_jdc'),
+                   b_axys = BLOC(condition="TYPE_DE_CALCUL=='Syrthes thermique solide seule'",\r
+                                 AXE_SYMETRIE = SIMP(statut='o',\r
+                                                     typ='TXM',\r
+                                                     into=('AUCUN','OX','OY'),\r
+                                                     defaut='AUCUN')));\r
+\r
+GESTION_DU_CALCUL = PROC(nom='GESTION_DU_CALCUL',op=10,\r
+                         fr="Gestion des pas de temps et éventuellement du couplage fluide/solide",\r
+                         niveau='gest_calc',\r
+                         CALCUL_SYRTHES_SEUL = BLOC(condition="TYPE_DE_CALCUL == 'Syrthes thermique solide seule'",\r
+                                                    PAS_DE_TEMPS_SOLIDE = SIMP(typ='I',statut='o'),\r
+                                                    NB_PAS_DE_TEMPS = SIMP(typ='I',statut='o'),\r
+                                                    SUITE_DE_CALCUL = SIMP(typ='TXM',statut='o',into=('OUI','NON'),defaut='NON')),\r
+                         CALCUL_SYRTHES_COUPLE = BLOC(condition="TYPE_DE_CALCUL =='Syrthes couplé'",\r
+                                                      CORRESPONDANCE_MAILLAGES_F_S = SIMP(statut='o',\r
+                                                                                          typ='TXM',\r
+                                                                                          into=('calcul','lecture sur fichier','calcul et écriture sur fichier'),\r
+                                                                                          defaut='calcul et écriture sur fichier'),\r
+                                                      PAS_DE_TEMPS_SOLIDE = SIMP(typ='TXM',\r
+                                                                                 statut='o',\r
+                                                                                 into=('fixé indépendamment','égal à celui du fluide'),\r
+                                                                                 defaut='égal à celui du fluide'),\r
+                                                      CHOIX_FREQUENCE_CALCUL_SOLIDE = SIMP(typ='TXM',\r
+                                                                                     statut='o',\r
+                                                                                     into=('calcul solide à chaque pas de temps',\r
+                                                                                           'calcul solide tous les n pas de temps fluide',\r
+                                                                                           'calcul fluide tous les n pas de temps solide'),\r
+                                                                                     defaut='calcul solide à chaque pas de temps'),\r
+                                                      frequence_calcul = BLOC(condition="CHOIX_FREQUENCE_CALCUL_SOLIDE != 'calcul solide à chaque pas de temps'",\r
+                                                                              FREQUENCE = SIMP(statut='o',\r
+                                                                                               typ='I')))\r
+                                                      \r
+                       );\r
+\r
+GESTION_DES_SORTIES = PROC(nom="GESTION_DES_SORTIES",op=10,\r
+                           fr="Gestion des résultats du code",\r
+                           niveau='gest_sort',\r
+                           IMPRESSIONS_SOLIDE=SIMP(statut='o',typ='TXM',\r
+                                                   into=('aucune','minimales','normales','détaillées'),\r
+                                                   defaut='normales'),\r
+                           RESULTATS_DOMAINE_SOLIDE=FACT(statut='o',\r
+                                                         FICHIER_CHRONOLOGIQUE=SIMP(typ='TXM',statut='o',\r
+                                                                                    into=('aucune sortie','tous les n pas de temps'),\r
+                                                                                    defaut='aucune sortie'),\r
+                                                         pas_de_temps=BLOC(condition="FICHIER_CHRONOLOGIQUE=='tous les n pas de temps'",\r
+                                                                           PAS_DE_TEMPS=SIMP(statut='o',typ='I')),\r
+                                                         FICHIER_LISTING=SIMP(statut='o',typ='TXM',\r
+                                                                              into=('aucune sortie',),\r
+                                                                              defaut='aucune sortie'),\r
+                                                         HISTORIQUE_SOLIDE=SIMP(statut='o',typ='TXM',\r
+                                                                                into=('OUI','NON'),\r
+                                                                                defaut='NON'),\r
+                                                         historique=BLOC(condition="HISTORIQUE_SOLIDE=='OUI'",\r
+                                                                         NOMBRE_CAPTEURS=SIMP(statut='o',typ='I'),\r
+                                                                         FREQUENCE_ECRITURE=SIMP(statut='o',typ='I',defaut=1),\r
+                                                                         LISTE_NOEUDS = FACT(statut='o',max='**',\r
+                                                                                             NOEUDS=SIMP(statut='o',max='**',typ='I'),\r
+                                                                                             COMMENTAIRE=SIMP(statut='o',typ='TXM',defaut=""))),\r
+                                                         ),\r
+                           RESULTATS_DOMAINE_FLUIDE=BLOC(condition="TYPE_DE_CALCUL=='Syrthes couplé'",\r
+                                                         ECRITURE_MAILLAGE_PEAU_FLUIDE=SIMP(statut='o',into=('OUI','NON'),\r
+                                                                                            defaut='NON',typ='TXM'),\r
+                                                         ECRITURE_RESULTATS_PEAU_FLUIDE=SIMP(statut='o',into=('OUI','NON'),\r
+                                                                                             defaut='NON',typ='TXM'),\r
+                                                         ECRITURE_CHRONO_PEAU_FLUIDE=SIMP(statut='o',into=('OUI','NON'),\r
+                                                                                          defaut='NON',typ='TXM'))\r
+                           );\r
+\r
+CHOIX_NUMERIQUES=PROC(nom="CHOIX_NUMERIQUES",op=10,\r
+                      fr="Modification des options du solveur",\r
+                      niveau='choix_num',\r
+                      SOLVEUR_SOLIDE = FACT(statut='o',\r
+                                            NOMBRE_ITERATIONS=SIMP(statut='o',typ='I'),\r
+                                            PRECISION=SIMP(statut='o',typ='R'))\r
+                      );\r
+\r
+PROPRIETES_PHYSIQUES=PROC(nom="PROPRIETES_PHYSIQUES",op=10,\r
+                          fr="Définition des propriétés physiques des matériaux",\r
+                          niveau='prop_phys',\r
+                          DEFINITION_PAR = SIMP(statut='o',typ='TXM',into=('NOEUD','ELEMENT','NOEUD PAR ELEMENT'),\r
+                                                defaut='ELEMENT'),\r
+                          ISOTROPIE = SIMP(statut='o', typ='TXM', into=('Matériaux isotropes',\r
+                                                                        'Matériaux anisotropes',\r
+                                                                        'Matériaux orthotropes'),\r
+                                           defaut='Matériaux isotropes'),\r
+                          proprietes_des_materiaux_isotropes = BLOC(condition="ISOTROPIE=='Mat\351riaux isotropes'",                          \r
+                              DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**',\r
+                                                          MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**',\r
+                                                          CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**',\r
+                                                          CONDUCTIVITE_THERMIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM'))\r
+                                                                    ),\r
+                          proprietes_des_materiaux_orthotropes_2D = BLOC(condition="ISOTROPIE=='Mat\351riaux orthotropes' and DIMENSION==2",\r
+                              DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**',\r
+                                                          MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**',\r
+                                                          CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**',\r
+                                                          CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'),\r
+                                                          CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM'))\r
+                                                                         ),\r
+                          proprietes_des_materiaux_orthotropes_3D = BLOC(condition="ISOTROPIE=='Mat\351riaux orthotropes' and DIMENSION==3",\r
+                              DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**',\r
+                                                          MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**',\r
+                                                          CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**',\r
+                                                          CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'),\r
+                                                          CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'),\r
+                                                          CONDUCTIVITE_EN_Z = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM'))\r
+                                                                         ),\r
+                          proprietes_des_materiaux_anisotropes_2D = BLOC(condition="ISOTROPIE=='Mat\351riaux anisotropes' and DIMENSION==2",\r
+                              DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**',\r
+                                                          MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**',\r
+                                                          CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**',\r
+                                                          CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'),\r
+                                                          CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'),\r
+                                                          ANGLE_SUIVANT_Z = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM'))\r
+                                                                         ),\r
+                          proprietes_des_materiaux_anisotropes_3D = BLOC(condition="ISOTROPIE=='Mat\351riaux anisotropes' and DIMENSION==3",\r
+                              DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**',\r
+                                                          MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**',\r
+                                                          CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM')),\r
+                              DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**',\r
+                                                          CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'),\r
+                                                          CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'),\r
+                                                          CONDUCTIVITE_EN_Z = SIMP(statut='o',typ='R'),\r
+                                                          ANGLE_SUIVANT_X = SIMP(statut='o',typ='R'),\r
+                                                          ANGLE_SUIVANT_Y = SIMP(statut='o',typ='R'),\r
+                                                          ANGLE_SUIVANT_Z = SIMP(statut='o',typ='R'),\r
+                                                          REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                          COMMENTAIRES=SIMP(statut='f',typ='TXM'))\r
+                                                                         ),\r
+                          );\r
+\r
+CONDITIONS_INITIALES=PROC(nom="CONDITIONS_INITIALES",op=10,\r
+                          fr="Définition des conditions initiales",\r
+                          niveau='cond_init',\r
+                          Temperature_initiale = FACT(statut='o',max='**',\r
+                                                      TEMPERATURE = SIMP(typ='R',statut='o',defaut=20),\r
+                                                      REFERENCES = SIMP(statut='o',typ='I',max='**',defaut=-1),\r
+                                                      COMMENTAIRES = SIMP(statut='f',typ='TXM')\r
+                                                      )\r
+                          );\r
+\r
+\r
+CONDITIONS_LIMITES = PROC(nom='CONDITIONS_LIMITES',op=10,\r
+                          niveau='cond_limi',\r
+                          fr="Définition des conditions aux limites",\r
+                          NOEUD_OU_FACE = SIMP(statut='o',typ='TXM',into=('NOEUD','FACE'),defaut='FACE'),\r
+                          FLUX_SURFACIQUE=FACT(max='**',\r
+                                               FLUX=SIMP(statut='o',typ='R',defaut=0),\r
+                                               REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                               COMMENTAIRES = SIMP(statut='f',typ='TXM')\r
+                                               ),\r
+                          DIRICHLET=FACT(max='**',\r
+                                         TEMPERATURE=SIMP(statut='o',typ='R',defaut=20),\r
+                                         REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                         COMMENTAIRES = SIMP(statut='f',typ='TXM')\r
+                                         ),\r
+\r
+                          COEFFICIENT_ECHANGE=FACT(max='**',\r
+                                                   TEMPERATURE=SIMP(statut='o',typ='R',defaut=20),\r
+                                                   COEFFICIENT = SIMP(statut='o',typ='R',defaut=0),\r
+                                                   REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                   COMMENTAIRES = SIMP(statut='f',typ='TXM')\r
+                                                  ),\r
+                          RESISTANCE_CONTACT=FACT(max='**',\r
+                                                  RESISTANCE = SIMP(statut='o',typ='R',defaut=0),\r
+                                                  REFERENCES = SIMP(statut='o',typ='I',max='**'),\r
+                                                  COMMENTAIRES = SIMP(statut='f',typ='TXM')\r
+                                                 ),\r
+                         );
+
diff --git a/Syrthes/editeur.ini b/Syrthes/editeur.ini
new file mode 100644 (file)
index 0000000..b7ac132
--- /dev/null
@@ -0,0 +1,22 @@
+import os
+
+import prefs
+
+rep_cata = prefs.REPINI
+
+# Accès à la documentation 
+path_doc              = os.path.join(rep_cata,'..','Doc')
+exec_acrobat    =       "/usr/bin/acroread"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+
+# Choix des catalogues
+rep_mat="bidon"
+
+catalogues = (
+              ('SYRTHES','v1',os.path.join(rep_cata,'cata_syrthes.py'),'python','defaut'),
+             )
+
diff --git a/Syrthes/eficas_syrthes.py b/Syrthes/eficas_syrthes.py
new file mode 100755 (executable)
index 0000000..7017644
--- /dev/null
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+"""
+    Ce module sert à lancer EFICAS configuré pour Syrthes
+"""
+# Modules Python
+import sys
+
+# Modules Eficas
+import prefs
+sys.path[:0]=[prefs.INSTALLDIR]
+
+import Editeur
+from Editeur import eficas_go
+
+if len(sys.argv) > 1 :
+    # on veut ouvrir un fichier directement au lancement d'Eficas
+    eficas_go.lance_eficas(code='SYRTHES',fichier = sys.argv[1])
+else:
+    # on veut ouvrir Eficas 'vide'
+    eficas_go.lance_eficas(code='SYRTHES')
+
diff --git a/Syrthes/prefs.py b/Syrthes/prefs.py
new file mode 100644 (file)
index 0000000..c14833e
--- /dev/null
@@ -0,0 +1,25 @@
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+#CODE_PATH = os.path.join(REPINI,'../../Superv')
+
+# ICONDIR sert à localiser le répertoire contenant les icones
+# Par défaut on utilise le répertoire icons dans Editeur
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+
index 0366cee664334a2b3652d8c6e8f33e7b76a54f3c..c060d83394e96c5668775f4eb0ed934212ed0ffb 100644 (file)
@@ -1,8 +1,20 @@
-#@ MODIF __init__ Tools DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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.
+#
+#
 # ======================================================================
 __all__=['foztools']
index 904333d5a01ff1ca70645346209c68f4034ca56a..0136bb746c74fc19b7acee0ae91eb15635c155ed 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_ETAPE Validation  DATE 26/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_ETAPE Validation  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -61,24 +61,39 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
         return self.valid
       else:
         valid = 1
+        # on teste les enfants
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de self
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        if sd == "non":
+          # Dans ce cas, on ne teste qu'une validité partielle (sans tests sur le concept produit)
+          # Conséquence : on ne change pas l'état ni l'attribut valid, on retourne simplement
+          # l'indicateur de validité valid
+          return valid
+        #
+        # On complète les tests avec ceux sur le concept produit
+        #
         if hasattr(self,'valid'):
           old_valid = self.valid
         else:
           old_valid = None
-        # on teste si demandé la structure de donnée (par défaut)
-        if sd == 'oui':
-          if self.sd != None :pass
-            # Ce test parait superflu. Il est sur que si sd existe il s'agit du concept produit
-            # Quelle pourrait etre la raison qui ferait que sd n existe pas ???
-            #if self.jdc.get_sdprod(self.sd.nom) == None :
-            #  if cr == 'oui' :
-            #    self.cr.fatal('Le concept '+self.sd.nom+" n'existe pas")
-            #  valid = 0
-          else :
-            if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
-            valid = 0
-        # on teste, si elle existe, le nom de la sd (sa longueur doit etre <= 8 caractères)
-        if self.sd != None :
+
+        if self.sd == None:
+          # Le concept produit n'existe pas => erreur
+          if cr == 'oui' : self.cr.fatal("Concept retourné non défini")
+          valid = 0
+        else:
+          # on teste, si elle existe, le nom de la sd (sa longueur doit etre <= 8 caractères)
           # la SD existe déjà : on regarde son nom
           if self.sd.nom != None :
             if len(self.sd.nom) > 8 and self.jdc.definition.code == 'ASTER' :
@@ -95,21 +110,7 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
               if cr == 'oui' :
                 self.cr.fatal("Pas de nom pour le concept retourné")
               valid = 0
-        # on teste les enfants
-        for child in self.mc_liste :
-          if not child.isvalid():
-            valid = 0
-            break
-        # on teste les règles de self
-        text_erreurs,test_regles = self.verif_regles()
-        if not test_regles :
-          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
-          valid = 0
-        if self.reste_val != {}:
-          if cr == 'oui' :
-            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
-          valid=0
-        if sd == 'oui' and valid:
+        if valid:
           valid = self.update_sdprod(cr)
         self.valid = valid
         self.state = 'unchanged'
index 878a14dad62f273f616f4253df1478ec0d094cb1..d2b175fff0ed2b1e003233b734d3b5f34fc5ef02 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MACRO_ETAPE Validation  DATE 26/06/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_MACRO_ETAPE Validation  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -62,6 +62,24 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
         return self.valid
       else:
         valid = 1
+        # on teste les mots cles de la commande
+        for child in self.mc_liste :
+          if not child.isvalid():
+            valid = 0
+            break
+        # on teste les règles de la commande
+        text_erreurs,test_regles = self.verif_regles()
+        if not test_regles :
+          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
+          valid = 0
+        if self.reste_val != {}:
+          if cr == 'oui' :
+            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
+          valid=0
+        if sd == "non":
+           # Dans ce cas, on ne calcule qu'une validite partielle, on ne modifie pas l'état de self
+           # on retourne simplement l'indicateur valid
+           return valid
         if hasattr(self,'valid'):
           old_valid = self.valid
         else:
@@ -84,21 +102,7 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
               if cr == 'oui' :
                 self.cr.fatal("Pas de nom pour le concept retourné")
               valid = 0
-        # on teste les enfants
-        for child in self.mc_liste :
-          if not child.isvalid():
-            valid = 0
-            break
-        # on teste les règles de self
-        text_erreurs,test_regles = self.verif_regles()
-        if not test_regles :
-          if cr == 'oui' : self.cr.fatal(string.join(("Règle(s) non respectée(s) :", text_erreurs)))
-          valid = 0
-        if self.reste_val != {}:
-          if cr == 'oui' :
-            self.cr.fatal("Mots cles inconnus :" + string.join(self.reste_val.keys(),','))
-          valid=0
-        if sd == 'oui' and valid:
+        if valid:
           valid = self.update_sdprod(cr)
         # Si la macro comprend des etapes internes, on teste leur validite
         for e in self.etapes:
index 7f9b4eb0785cfe3bbb97e67a34a86a204c58feaa..cb7c752913a7597661fbecfb5e1c96eec39d36e4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MCCOMPO Validation  DATE 29/05/2002   AUTEUR DURAND C.DURAND 
+#@ MODIF V_MCCOMPO Validation  DATE 09/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -77,7 +77,8 @@ class MCCOMPO:
 
            - 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='oui')
+      dictionnaire=self.dict_mc_presents(restreint='non') # On verifie les regles avec les defauts affectés
       texte=''
       testglob = 1
       for r in self.definition.regles:
index 66ddd27c032117c95d0666cb905a47cbdf54530b..4cab28d511f64375c0bcac0696d52509b6d6edf4 100644 (file)
@@ -1,3 +1,23 @@
+#            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.
+#
+#
+# ======================================================================
+
 #!/bin/env python -d
 #!/tools/net/app/Python-1.5.2/bin/python1.5
 
index 96e6d4d337f6ab48896434c6428e6ec05ba0a59b..21ab883aaaed7a8add117f9a1db0b805c6ee8864 100644 (file)
@@ -1,3 +1,23 @@
+#            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.
+#
+#
+# ======================================================================
+
 try:
    import mx.TextTools
    import sys
index 8f9621c277e65c9768180ebc8b4d1f149eff4d78..646aef38f0195911663307df136fc8c59f6e956b 100644 (file)
@@ -1,17 +1,30 @@
-#@ MODIF conv Parsers  DATE 17/10/2001   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 sys,string
 import TextTools
 from tables import ERRORS
 
 #
-__version__="$Name: V1_1p1 $"
-__Id__="$Id: conv.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $"
+__version__="$Name:  $"
+__Id__="$Id: conv.py,v 1.2 2002/05/15 15:32:00 eficas Exp $"
 #
 
 Keywords=('MAILLE_1','MAILLE_2','MAILLE_ESCL','MAILLE_FOND','MAILLE_MAIT','MAILLE_ORIG','MAILLE',
@@ -446,6 +459,8 @@ def format_errs(text,tags):
 def conver(text):
    from tables import aster_script
    import re
+   # On ajoute un '\n' en fin au cas ou il serait absent
+   text=text+'\n'
    text=string.upper(text)
    result, taglist, next = TextTools.tag(text,aster_script)
    # Pour vérifier les résultats intermédiaires décommenter la ligne suivante
index 513b001180fe9c4e735ad9197f4741e9a4b15307..b258354d0ead6d692f8e67a153ed6c9437317d6e 100644 (file)
@@ -1,4 +1,23 @@
-#@ MODIF tables Parsers DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
+#            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 fichier définit une table de tags à utiliser avec le package
     mxTextTools pour décoder un fichier au format Asterv5.
@@ -10,7 +29,7 @@ from TextTools import *
 
 #
 __version__="$Name:  $"
-__Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
+__Id__="$Id: tables.tag,v 1.1.1.1 2002/03/26 09:08:45 eficas Exp $"
 #
 
 err0='ERR0 , erreur non identifiee : '
@@ -24,9 +43,10 @@ err7='ERR7 , mot cle facteur errone : '
 err8='ERR8 , signe = ou ( attendu : '
 err9='ERR9 , ( attendue : '
 err10='ERR10 , vexpr attendue : '
+err11='ERR11 , ) attendue : '
 
 ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9,
-        err10)
+        err10,err11)
 
 white_set=set(whitespace)
 
@@ -170,6 +190,16 @@ t_complexe = \
     (err7,Table,t_err,MatchFail,MatchOk),
   ))
 
+# Table pour identifier le keyword PI
+
+t_PI = \
+    ('PI',Table,(
+      (None,Word,'PI',MatchFail),
+      (None,IsIn,alpha+'_'+number,MatchOk,+1),
+      (None,Skip,-1),
+      (None,Jump,To,MatchFail),
+    ))
+
 t_vexpr = (
     ('par',Is,'(',+5,+1),
       commespaces     + (+1,),
@@ -181,7 +211,7 @@ t_vexpr = (
     ('sign',IsIn,'+-',+3,+1),
       commespaces     + (+1,),
       ('vexpr',Table,ThisTable,+19,+10),
-    ("PI",Word,'PI',+1,+9),
+    t_PI            + (+1,+9),
     t_ident         + (MatchFail,),
     commespaces     + (+1,),
     ('listpar',Is,'(',+6,+1), # on peut avoir une liste de parametres
@@ -307,9 +337,9 @@ t_formule = \
     commespaces     + (+1,),
     ('vexpr',Table,t_vexpr,+9),
     commespaces     + (+1,),
-    (None,Is,')',+8),
+    (None,Is,')',+9),
     commespaces     + (+1,),
-    (None,Is,')',+6),
+    (None,Is,')',+7),
     commespaces     + (+1,),
     (None,Is,';',+3),
     (None,AllNotIn,'\n',+1),
@@ -318,6 +348,8 @@ t_formule = \
     (err0,Table,t_err,MatchFail,MatchOk),
     # <err9>
     (err9,Table,t_err,MatchFail,MatchOk),
+    # <err11>
+    (err11,Table,t_err,MatchFail,MatchOk),
   ))
 
 t_nom_ope = \
index 2a28f0720dcf636f6029d6f39f064dcd28fecc52..309dd4977c393d539464e2318b5a95f858ead61b 100755 (executable)
@@ -1,4 +1,23 @@
-#@ MODIF tables Parsers DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
+#            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 fichier définit une table de tags à utiliser avec le package
     mxTextTools pour décoder un fichier au format Asterv5.
@@ -10,7 +29,7 @@ from TextTools import *
 
 #
 __version__="$Name:  $"
-__Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
+__Id__="$Id: tables.tag,v 1.1.1.1 2002/03/26 09:08:45 eficas Exp $"
 #
 
 err0='ERR0 , erreur non identifiee : '
@@ -24,9 +43,10 @@ err7='ERR7 , mot cle facteur errone : '
 err8='ERR8 , signe = ou ( attendu : '
 err9='ERR9 , ( attendue : '
 err10='ERR10 , vexpr attendue : '
+err11='ERR11 , ) attendue : '
 
 ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9,
-        err10)
+        err10,err11)
 
 white_set=set(whitespace)
 
@@ -158,6 +178,15 @@ t_complexe is:
     <err>
     err7 = Table t_err F:MatchFail T:MatchOk
 
+# Table pour identifier le keyword PI
+
+t_PI is:
+    'PI' = Table is:
+      Word 'PI' F:MatchFail
+      IsIn alpha+'_'+number F:MatchOk T:next
+      Skip back
+      Jump To MatchFail
+
 t_vexpr = Table is:
     'par' = Is '(':
       commespaces F:next
@@ -169,7 +198,7 @@ t_vexpr = Table is:
     'sign' = IsIn '+-':
       commespaces F:next
       'vexpr' = Table ThisTable F:<err10> T:<op>
-    "PI" = Word 'PI' F:next T:<op>
+    t_PI              F:next T:<op>
     t_ident F:MatchFail
     commespaces F:next
     'listpar' = Is '(': # on peut avoir une liste de parametres
@@ -287,9 +316,9 @@ t_formule is:
     commespaces F:next
     'vexpr' = Table t_vexpr F:<err>
     commespaces F:next
-    Is ')' F:<err9>
+    Is ')' F:<err11>
     commespaces F:next
-    Is ')' F:<err9>
+    Is ')' F:<err11>
     commespaces F:next
     Is ';' F:<err>
     AllNotIn '\n' F:next
@@ -298,6 +327,8 @@ t_formule is:
     err0 = Table t_err F:MatchFail T:MatchOk
     <err9>
     err9 = Table t_err F:MatchFail T:MatchOk
+    <err11>
+    err11 = Table t_err F:MatchFail T:MatchOk
     
 t_nom_ope is:
     'nom_ope' = Table is:
index c6d52220576ad7ac4fbf36c54603b3134d7fc685..e731b26d3c70770e6bad2fdce79416df74c76792 100644 (file)
@@ -1,3 +1,22 @@
+#            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 package contient tous les convertisseurs de formats d'entrée
    en objets compréhensibles par EFICAS.
index 780626d8230974fc5fe114fd769330e09560aed3..e025eec22eb6f564c7ed8ddfb854b361a895590d 100644 (file)
@@ -1,3 +1,22 @@
+#            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 convertisseur de fichier
     au format asterv5 pour EFICAS.
index aa32a725c60ff54bae7170ab52a1c7e8b8de0ad6..811bc6a5b3021470e784160bfcb6cced07fdb52c 100644 (file)
@@ -1,3 +1,22 @@
+#            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 convertisseur de fichier
     au format ini pour EFICAS.
index 30f3b28a330082f77ca2fbd9979d7787206d98aa..b408ff215f5378f2180d856f69ce742656fcfe08 100644 (file)
@@ -1,3 +1,22 @@
+#            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 convertisseur de fichier
     au format python pour EFICAS.
index a5a69cb216917fe1060050ace2ee35ca1e47c737..cfe54a6a7c80c1ee352784cd67df0cd8046e55be 100644 (file)
@@ -1,3 +1,22 @@
+#            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 convertisseur de fichier
     au format python pour EFICAS.
index b999b6ba43044f72c0d059031f11988c8e96756e..b5a458973b2590ca6152374dc9a670479a715893 100644 (file)
@@ -1,9 +1,21 @@
-#@ MODIF parseur_python Parsers  DATE 05/09/2001   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
-# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
-#              REDISTRIBUTION OF THIS FILE.
+# 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 sys,string,re
 
index d54d464cff17e2e5a829847b114863fc016c51ab..aaa531a5d0cb58638bd50111ede8c40190dd7077 100644 (file)
@@ -1,3 +1,22 @@
+#            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 la classe Formatage qui permet le formatage d'une 
     liste de chaines de caractères dans une syntaxe représentative d'un
index 89d4cb408e5c12ae06d2f30bf306a8472fd2307d..39110152d7d98beb78aacc647eadfb7c0ebeff1a 100644 (file)
@@ -1,3 +1,22 @@
+#            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 package contient tous les générateurs de formats de sortie
    à partir des objets d' EFICAS.
index c12b6dacce712f3454e4d227adec941f544f8753..25c3265f04e7f290ad9c40fbceb30bbaaf3e2ec7 100644 (file)
@@ -1,3 +1,22 @@
+#            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 
     aplat pour EFICAS.
@@ -268,7 +287,7 @@ class AplatGenerator:
       text = ''
       init = self.init + self.sep + obj.nom
       old_init=self.init
-      for data in self.data :
+      for data in obj.data :
         i=i+1
         self.init = init + self.sep + "occurrence n°"+`i`
         text = text + self.generator(data)
@@ -283,7 +302,7 @@ class AplatGenerator:
       if type(obj.valeur) in (types.TupleType,types.ListType) :
          # On est en présence d'une liste de valeur
          rep = '('
-         for val in self.valeur:
+         for val in obj.valeur:
            if type(val) == types.InstanceType :
              rep = rep + self.generator(val) +','
            else:
index fa3b94993c178ac786eb4f0427f7c4603d437b2d..08c178afed240d191f82b0970e47f100a3982ead 100644 (file)
@@ -1,3 +1,22 @@
+#            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 asterv5 pour EFICAS.
 
@@ -347,7 +366,8 @@ class AsterGenerator:
           elif self.wait_geom(obj):
             s = s + val
           elif type(val) == types.FloatType :
-            s = s + self.repr_float(val)
+            #s = s + self.repr_float(val)
+            s = s + str(val)
           else :
             s = s + `val`
         s = s + ')'
@@ -364,7 +384,8 @@ class AsterGenerator:
         elif self.wait_geom(obj):
             s = obj.valeur
         elif type(obj.valeur) == types.FloatType :
-            s = self.repr_float(obj.valeur)
+            #s = self.repr_float(obj.valeur)
+            s = str(obj.valeur)
         else :
           s = `obj.valeur`
         s=obj.nom+':'+s+' '
index 64b5bfd851bc1241c22b91e20ba82e131295bb43..2e2ac93b0fc31a6ce05cc625298ff93d9c8be6fc 100644 (file)
@@ -1,3 +1,22 @@
+#            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 ini pour EFICAS.
index 6d911224ae24843e58f373fc8d3660539215b9b5..34fa5cf726ec904a876bc5172d9278f18683971e 100644 (file)
@@ -1,3 +1,22 @@
+#            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 pyth pour EFICAS.
 
index 6220c818ad9a0e74ff0d2bcd7815be2127cda33c..fe631f22fcca3b88ea7cb8711e5e3fc0adceef02 100644 (file)
@@ -1,3 +1,22 @@
+#            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 
     python pour EFICAS.
@@ -393,7 +412,7 @@ class PythonGenerator:
            for arg in liste :
              l.append(arg)
          else:
-           # on est en présence d'un MCSIMP : on récupère une string
+           # on est en présence d'un MCSIMP : on récupère une string
            text =self.generator(v)
            l.append(v.nom+'='+text)
       # il faut être plus subtil dans l'ajout de la virgule en différenciant 
@@ -453,6 +472,8 @@ class PythonGenerator:
             if hasattr(obj.etape,'sdprods'):
                if val in obj.etape.sdprods :
                   s = s + "CO('"+ self.generator(val) +"')"
+               elif val.__class__.__name__ == 'CO':
+                  s = s + "CO('"+ self.generator(val) +"')"
                else:
                   s = s + self.generator(val)
             elif isinstance(val,PARAMETRE):
@@ -461,6 +482,10 @@ class PythonGenerator:
                s = s + val.nom
             else:
                s = s + self.generator(val)
+          elif type(val) == types.FloatType :
+            # Pour un flottant on utilise str qui a une precision de
+            # "seulement" 12 chiffres : evite les flottants du genre 0.599999999999998
+            s = s + str(val)
           else :
             s = s + `val`
           s = s + ','
@@ -472,6 +497,8 @@ class PythonGenerator:
           if hasattr(obj.etape,'sdprods'):
              if val in obj.etape.sdprods :
                 s = "CO('"+ self.generator(val) +"')"
+             elif val.__class__.__name__ == 'CO':
+                s = "CO('"+ self.generator(val) +"')"
              else:
                 s = self.generator(val)
           elif isinstance(val,PARAMETRE):
@@ -481,9 +508,8 @@ class PythonGenerator:
           else:
              s = self.generator(val)
         elif type(val) == types.FloatType :
-          # Pour un réel on fait un formattage spécial
-          # XXX bizarrement ce n'est pas fait pour une liste
-          s = repr_float(val)
+          #s = repr_float(val)
+          s = str(val)
         else :
           s = `val`
         s= s + ','
diff --git a/insercopyright.py b/insercopyright.py
new file mode 100644 (file)
index 0000000..bf6539f
--- /dev/null
@@ -0,0 +1,38 @@
+import glob,os
+
+copyright="""#            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.
+#
+#
+# ======================================================================
+"""
+
+listfich=glob.glob('*')
+for fich in listfich:
+   if not os.path.isfile(fich):continue
+   print "Lecture ",fich
+   f=open(fich,'r')
+   text=f.read()
+   f.close()
+   os.rename(fich,fich+'.bak')
+
+   text=copyright + text
+
+   f2=open(fich,'w')
+   f2.write(text)
+   f2.close()
+