]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
This commit was generated by cvs2git to track changes on a CVS vendor
authoreficas <>
Thu, 18 Sep 2003 10:21:47 +0000 (10:21 +0000)
committereficas <>
Thu, 18 Sep 2003 10:21:47 +0000 (10:21 +0000)
branch.

250 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/fichiers/INSTALL [new file with mode: 0644]
AIDE/fichiers/NEWS [new file with mode: 0644]
AIDE/fichiers/faqs.txt [new file with mode: 0644]
AIDE/fichiers/includes.txt [new file with mode: 0644]
AIDE/fichiers/index.html [new file with mode: 0644]
AIDE/index_aide.py [new file with mode: 0644]
AIDE/viewer.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_adap_mail_ops.py [deleted file]
Aster/Cata/Macro/macr_cabri_calc_ops.py [deleted file]
Aster/Cata/Macro/macr_cabri_mail_dat.py [deleted file]
Aster/Cata/Macro/macr_cabri_mail_ops.py [deleted file]
Aster/Cata/Macro/reca_algo.py
Aster/Cata/Macro/recal.py
Aster/Cata/cata_STA6.py
Aster/Cata/cata_STA7.py
Aster/Cata/ops.py
Aster/INSTALL [new file with mode: 0644]
Aster/LICENSE.TERMS [new file with mode: 0644]
Aster/NEWS [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/incl.11 [new file with mode: 0644]
Aster/Tests/incl.12 [new file with mode: 0644]
Aster/Tests/incl.13 [new file with mode: 0644]
Aster/Tests/incl1.comm [new file with mode: 0644]
Aster/Tests/inclmat.comm [new file with mode: 0644]
Aster/Tests/inclmat2.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/properties.py [new file with mode: 0644]
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]
Descartes/properties.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/icons/Sep.gif [new file with mode: 0644]
Editeur/images.py
Editeur/import_code.py
Editeur/jdcdisplay.py
Editeur/macrodisplay.py [new file with mode: 0644]
Editeur/menubar.py
Editeur/options.py
Editeur/panels.py
Editeur/patches.py [new file with mode: 0644]
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]
Exemples/ex21/Appli.py
Exemples/ex21/main.py
Exemples/ex21/prefs.py
Exemples/profile/prefs.py [new file with mode: 0644]
Extensions/__init__.py
Extensions/commande_comm.py
Extensions/commentaire.py
Extensions/etape_niveau.py
Extensions/interpreteur_formule.py
Extensions/jdc.py
Extensions/jdc_include.py [new file with mode: 0644]
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/Test1/incl.13 [new file with mode: 0644]
Minicode/Test1/incl.14 [new file with mode: 0644]
Minicode/Test1/incl.17 [new file with mode: 0644]
Minicode/Test1/incl.23 [new file with mode: 0644]
Minicode/Test1/incl.26 [new file with mode: 0644]
Minicode/Test1/main.comm [new file with mode: 0644]
Minicode/Test2/deb0.comm [new file with mode: 0644]
Minicode/Test2/deb1.comm [new file with mode: 0644]
Minicode/Test2/deb2.comm [new file with mode: 0644]
Minicode/Test2/incl.22 [new file with mode: 0644]
Minicode/Test2/incl.23 [new file with mode: 0644]
Minicode/Test2/incl.24 [new file with mode: 0644]
Minicode/Test2/inclmat.comm [new file with mode: 0644]
Minicode/Test2/main.comm [new file with mode: 0644]
Minicode/Test2/main2.comm [new file with mode: 0644]
Minicode/Test3/incl.14 [new file with mode: 0644]
Minicode/Test3/incl.15 [new file with mode: 0644]
Minicode/Test3/incl.16 [new file with mode: 0644]
Minicode/Test3/main.comm [new file with mode: 0644]
Minicode/cata_saturne.py
Minicode/editeur.ini
Minicode/eficas_mini.py
Minicode/ops.py
Minicode/prefs.py
Minicode/properties.py [new file with mode: 0644]
Misc/MakeNomComplet.py [new file with mode: 0644]
Misc/Trace.py
Noyau/N_BLOC.py
Noyau/N_ETAPE.py
Noyau/N_JDC.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_PROC_ETAPE.py
Noyau/N_VALIDATOR.py [deleted file]
Saturne/prefs.py
Saturne/properties.py [new file with mode: 0644]
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]
Syrthes/properties.py [new file with mode: 0644]
Tools/__init__.py
Utilites/__init__.py [new file with mode: 0644]
Utilites/appels.py [new file with mode: 0644]
Utilites/developpeur.py [new file with mode: 0644]
Utilites/execute.py [new file with mode: 0644]
Utilites/funcname.py [new file with mode: 0644]
Utilites/ici.py [new file with mode: 0644]
Utilites/message.py [new file with mode: 0644]
Utilites/modification.py [new file with mode: 0644]
Utilites/pause.py [new file with mode: 0644]
Utilites/scrute.py [new file with mode: 0644]
Validation/V_ETAPE.py
Validation/V_MACRO_ETAPE.py
Validation/V_MCSIMP.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..13b190c
--- /dev/null
@@ -0,0 +1,20 @@
+import os
+import aide_objets
+import aide_gui
+import viewer
+
+def go(fichier=None,master=None):
+    if not fichier :
+       fichier=os.path.join(os.path.dirname(__file__),"fichiers","index.html")
+    o=viewer.HTMLViewer(master)
+    o.display(fichier)
+    return o
+
+def go2(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/fichiers/INSTALL b/AIDE/fichiers/INSTALL
new file mode 100644 (file)
index 0000000..f345250
--- /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 
+
+
+
+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/AIDE/fichiers/NEWS b/AIDE/fichiers/NEWS
new file mode 100644 (file)
index 0000000..66a003f
--- /dev/null
@@ -0,0 +1,18 @@
+Verion 1.4 (5/2003):
+   Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
+   Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
+   Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
+   Ajout du bouton de documentation dans le pannneau FORMULE (AO2002-447)
+   Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
+
+Verion 1.3 (11/2002):
+   Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
+   Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
+   sur click droit de la souris sur l'icone de la commande)
+   Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes)
+   Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails)
+   Corrections diverses 
+
+Version 1.2 (5/2002):
+    Reconception de la version 1.1 : décomposition en packages Python
+    Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002
diff --git a/AIDE/fichiers/faqs.txt b/AIDE/fichiers/faqs.txt
new file mode 100644 (file)
index 0000000..0050429
--- /dev/null
@@ -0,0 +1,46 @@
+
+-------------------------------------------------------------------------------------------------------------
+                       FAQs et Limitations d'EFICAS
+-------------------------------------------------------------------------------------------------------------
+
+
+1. Mots réservés :
+
+       Tous les mots du langage Python sont des mots réservés.
+       On ne peut donc pas appeler une variable ou un concept 'fin' ou 'dir'
+       Pour la liste complète de ces mots-clés, veuillez vous référer à la 
+       documentation Python
+
+2. Concepts réentrants :
+
+       Ne pas indiquer par un '&' devant son nom qu'un concept est utilisé comme
+       concept réentrant. En effet EFICAS le sait !
+
+3. Carte commentaire :
+
+       La carte commentaire est désormais le '#' (dièse) au lieu du '%' (pourcent)
+   Les commentaires sont gérés comme des objets de même niveau que les
+   commandes ; il n'est plus possible de placer des commentaires "dans"
+   une commande. Attention, lors de la traduction d'un fichier de version 5
+   en 6, les commentaires "dans" les commandes seront perdus.
+
+4. Nommer le concept produit par un opérateur :
+
+       Vous ne pouvez nommer le concept produit d'un opérateur que lorsque
+       celui-ci aura été entièrement et correctement rempli.
+
+5. Règle de rémanence dans les mots-clés facteurs répétés :
+
+       La règle de rémanence qui permettait pour certains mots-clés facteurs
+       et pour certains de leurs mots-clés simples de ne pas répeter la valeur
+       de ces derniers dans toutes les occurrences du mot-clé facteur n'est pas 
+       connue d'EFICAS.
+       En conséquence, vous devez répéter les mots-clés simples concernés dans 
+       toutes les occurrences des mots-clés facteurs.
+
+6. Besoin d'aide ?
+       
+       La documentation d'utilisation d'EFICAS a pris un peu de retard sur le produit ...
+       Néanmoins, vous disposez sur la plupart des panneaux contextuels ( les panneaux à
+       droite de l'arbre) d'une aide en ligne que vous pouvez activer en maintenant le 
+       bouton droit de votre souris enfoncé.
diff --git a/AIDE/fichiers/includes.txt b/AIDE/fichiers/includes.txt
new file mode 100644 (file)
index 0000000..49a400a
--- /dev/null
@@ -0,0 +1,35 @@
+Les macros INCLUDE, INCLUDE_MATERIAU et POURSUITE ont un fonctionnement spécial.
+Les concepts produits par ces macros sont obtenus par interpretation d'un fichier
+de commandes. Il n'est pas possible d'avoir une mise à jour complètement
+automatique d'un jeu de commandes qui contient une de ces macros.
+
+Les principes retenus sont les suivants :
+
+1- Un fichier invalide n'est pas du tout pris en compte meme si quelques
+commandes de ce fichier sont valides
+
+2- Il est possible de visualiser (bouton droit de la souris sur l'icone de
+la macro -> menu View) le contenu de ces types de macros. Cette visualisation
+n'est pas mise à jour en cas de reactualisation de cette macro. Le bouton (icone
+loupe) permet de visualiser le source du fichier inclus.
+
+3- Il est possible de reactualiser la validite du jeu de commandes en demandant 
+un rapport de validation. Ceci declenche une reevaluation systematique des 
+fichiers inclus. Les fichiers inclus sont mémorisés en fonction de leur UNITE
+pour les INCLUDE, du nom de matériau pour les INCLUDE_MATERIAU et comme poursuite
+pour une POURSUITE (il n'est pas possible d'avoir plus d'une POURSUITE par fichier).
+ATTENTION : comme on s'appuie sur l'UNITE pour memoriser les fichers inclus il est
+conseillé d'utiliser des numéros d'UNITE différents sinon la reactualisation sera
+faite avec le meme fichier pour des INCLUDE différents.
+
+4- Pour changer les fichiers inclus, il faut passer par l'onglet FICHIER, modifier
+le nom du fichier et appuyer sur le bouton Valider. Tous les fichiers inclus par
+ce premier fichier seront systématiquement redemandés à l'utilisateur.
+
+5- Le nom d'un fichier INCLUDE_MATERIAU est construit à partir des valeurs des mots-clés
+de la commande, il n'est donc jamais demandé explicitement à l'utilisateur.
+
+6- En cas de modification importante des fichiers inclus il est recommandé de demander
+la revalidation du jeu de commandes avec le menu Jeu de commandes -> rapport de validation.
+La remise à jour de la validité peut entrainer des resultats surprenants dans des cas particuliers
+d'INCLUDE enchainés contenant des commandes DETRUIRE.
diff --git a/AIDE/fichiers/index.html b/AIDE/fichiers/index.html
new file mode 100644 (file)
index 0000000..b61b73e
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<HTML>
+<HEAD>
+<TITLE>EFICAS</TITLE>
+</HEAD>
+
+<BODY TEXT="#000000" BGCOLOR="#F7F3FF" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">
+
+<H1>EFICAS</H1>
+<HR>
+
+<P> <A HREF="INSTALL">Installation</A>
+<P> <A HREF="NEWS">Evolution des versions</A>
+<P> <A HREF="faqs.txt">FAQ</A>
+<P> <A HREF="includes.txt">Macros INCLUDE, INCLUDE_MATERIAU et POURSUITE</A>
+
+</BODY>
+</HTML>
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/AIDE/viewer.py b/AIDE/viewer.py
new file mode 100644 (file)
index 0000000..d9446bd
--- /dev/null
@@ -0,0 +1,214 @@
+import os
+import Tkinter
+import ScrolledText
+import formatter
+import htmllib
+
+class TkWriter(formatter.DumbWriter):
+   def __init__(self, text,viewer):
+      formatter.DumbWriter.__init__(self, self)
+      self.text=text
+      self.viewer=viewer
+
+   def write(self,data):
+      self.text.insert("insert", data)
+
+   def anchor_bgn(self, href, name, type):
+      if href:
+          self.anchor = (href, name, type)
+          self.anchor_mark = self.text.index("insert")
+
+   def anchor_end(self):
+      if self.anchor:
+          url = self.anchor[0]
+          tag = "href_" + url
+          self.text.tag_add(tag, self.anchor_mark, "insert")
+          def displayurl(event,v=self.viewer,u=url):
+             v.display(u)
+          self.text.tag_bind(tag, "<ButtonPress>", displayurl)
+          self.text.tag_config(tag, foreground="blue", underline=1)
+          self.anchor = None
+
+class HTMLParser(htmllib.HTMLParser):
+    def anchor_bgn(self, href, name, type):
+        htmllib.HTMLParser.anchor_bgn(self, href, name, type)
+        # On signale directement au writer le debut d'une reference
+        self.formatter.writer.anchor_bgn(href, name, type)
+
+    def anchor_end(self):
+        if self.anchor:
+            self.formatter.writer.anchor_end()
+            self.anchor = None
+
+import string
+
+class DumbParser:
+    def __init__(self,fmt):
+        self.formatter=fmt
+
+    def feed(self,data):
+        self.formatter.writer.write(data)
+
+    def close(self):
+        pass
+        
+class Historique:
+   def __init__(self):
+      self.liste=[]
+      self.index=0
+
+   def add(self,url):
+      if self.index > 0:
+          old=self.liste[self.index-1]
+          if url == old :return
+      del self.liste[self.index:]
+      self.liste.append(url)
+      self.index=self.index+1
+
+   def getback(self):
+      if self.index > 1:
+          self.index=self.index-1
+          return self.liste[self.index-1]
+      else:
+          return None
+
+   def getforward(self):
+      if self.index < len(self.liste):
+          url=self.liste[self.index]
+          self.index=self.index+1
+          return url
+      else:
+          return None
+
+class HTMLViewer:
+   def __init__(self,parent):
+      self.init_window(parent)
+      self.url=None
+      self.home=None
+      self.historique=Historique()
+      self.createWidgets()
+      self.init()
+
+   def init_window(self,parent):
+      self.parent=parent
+      self.fenetre=Tkinter.Toplevel()
+      self.fenetre.title("AIDE EFICAS")
+      if self.fenetre.winfo_screenwidth() < 800 or self.fenetre.winfo_screenheight() < 600:
+         self.fenetre.wm_minsize(300, 150)
+      else:
+         self.fenetre.wm_minsize(400, 200)
+      self.fenetre.protocol("WM_DELETE_WINDOW",self.destroy)
+
+   def createWidgets(self):
+      frame = self.frame = Tkinter.Frame(self.fenetre)
+      frame.pack(side="bottom", fill="x")
+      self.homeButton = Tkinter.Button(frame, text="Index",font="Helvetica 12 bold",
+                                       command=self.goHome)
+      self.homeButton.pack(side="left")
+      self.b_retour = Tkinter.Button(frame, text="Back",font="Helvetica 12 bold",
+                                       command=self.goBack)
+      self.b_retour.pack(side="left")
+      self.b_avance = Tkinter.Button(frame, text="Forward",font="Helvetica 12 bold",
+                                          command=self.goForward)
+      self.b_avance.pack(side="left")
+
+      self.b_close = Tkinter.Button(frame, text="Close",font="Helvetica 12 bold",
+                                        command=self.destroy)
+      self.b_close.pack(side="right")
+      self.config_boutons()
+
+      self.text=ScrolledText.ScrolledText(self.fenetre,bg='white',relief='sunken',font="Helvetica 12 bold")
+      self.text.pack(side="top", fill="both", expand=1)
+      self.text.bind("<Key-Prior>", self.page_up)
+      self.text.bind("<Key-Next>", self.page_down)
+      self.text.bind("<Key-Up>", self.unit_up)
+      self.text.bind("<Key-Down>", self.unit_down)
+      self.text.bind("<1>", self.clicked)
+
+   def clicked(self,event):
+        self.text.focus_set()
+
+   def page_up(self,event):
+        event.widget.yview_scroll(-1, "page")
+   def page_down(self,event):
+        event.widget.yview_scroll(1, "page")
+   def unit_up(self,event):
+        event.widget.yview_scroll(-1, "unit")
+   def unit_down(self,event):
+        event.widget.yview_scroll(1, "unit")
+
+   def config_boutons(self):
+      """
+      Activation du bouton précédent s'il y a lieu
+      """
+      if self.historique.index > 1 :
+         self.b_retour.config(state='normal')
+      else :
+         self.b_retour.config(state='disabled')
+      if self.historique.index < len(self.historique.liste) :
+         self.b_avance.config(state='normal')
+      else :
+         self.b_avance.config(state='disabled')
+
+   def openurl(self,url):
+      url=os.path.normpath(url)
+      if self.url and not os.path.isabs(url):
+         rep1,fich1=os.path.split(self.url)
+         rep2,fich2=os.path.split(url)
+         if rep1 != rep2 :
+            url=os.path.join(rep1,rep2,fich2)
+         url=os.path.normpath(url)
+      try:
+         f=open(url,'r')
+         data=f.read()
+         f.close()
+      except:
+         data="Impossible de trouver: "+url
+      self.url=url
+      if self.home is None:
+         self.home=self.url
+      return data
+
+   def display(self,url):
+      data=self.openurl(url)
+      ext=os.path.splitext(url)[1]
+      self.text.config(state="normal")
+      self.text.delete("1.0", "end")
+      writer=TkWriter(self.text,self)
+      fmt=formatter.AbstractFormatter(writer)
+      if ext == ".html":
+         parser=HTMLParser(fmt)
+      else:
+         parser=DumbParser(fmt)
+      parser.feed(data)
+      parser.close()
+      self.text.config(state="disabled")
+      self.historique.add(url)
+      self.config_boutons()
+
+   def init(self):
+      self.fenetre.bind("<KeyPress-BackSpace>", self.goBack)
+      
+   def goHome(self,event=None):
+      if self.home and self.home != self.url:
+         self.display(self.home)
+
+   def goBack(self,event=None):
+      url=self.historique.getback()
+      if url:self.display(url)
+         
+   def goForward(self,event=None):
+      url=self.historique.getforward()
+      if url:self.display(url)
+
+   def destroy(self):
+       try:
+          self.fenetre.destroy()
+       except:
+          pass
+
+if __name__ == "__main__":
+    v=HTMLViewer(None)
+    v.display("fichiers/index.html")
+    v.fenetre.mainloop()
+      
diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py
new file mode 100644 (file)
index 0000000..e03001a
--- /dev/null
@@ -0,0 +1,56 @@
+#            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 formule(N_FONCTION.formule,I_FONCTION.formule,ASSD):
+   def __init__(self,etape=None,sd=None,reg='oui'):
+      N_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg)
+      I_FONCTION.formule.__init__(self,etape=etape,sd=sd,reg=reg)
+
+# On conserve fonction (ceinture et bretelles)
+# fonction n'existe plus dans N_FONCTION on le remplace par formule
+class fonction(N_FONCTION.formule,I_FONCTION.fonction,ASSD):
+   def __init__(self,etape=None,sd=None,reg='oui'):
+      N_FONCTION.formule.__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 e06633311ef54541bce7d28e0af11a2e5df42d10..8801fb7025953f9c6ca25829930690a2bd4dc6a7 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,18 +58,17 @@ 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
+# Pour le moment on laisse fonction (ceinture et bretelles)
+from A_ASSD import FONCTION, fonction
+from A_ASSD import formule
+from A_ASSD import CO
+
 from Noyau.N__F import _F
 
 from Noyau.N_Exception import AsException
 from Noyau.N_utils import AsType
-
-from Noyau.N_VALIDATOR import Valid,RangeVal,OrdList,NoRepeat,LongStr,EnumVal,CardVal,TypeVal,InstanceVal,OrVal,AndVal
-
 from Extensions.niveau import NIVEAU
 from Extensions.etape_niveau import ETAPE_NIVEAU
 from Extensions.commentaire import COMMENTAIRE
diff --git a/Aster/Cata/Macro/macr_adap_mail_ops.py b/Aster/Cata/Macro/macr_adap_mail_ops.py
deleted file mode 100644 (file)
index 0561942..0000000
+++ /dev/null
@@ -1,642 +0,0 @@
-#@ MODIF macr_adap_mail_ops Macro  DATE 01/07/2003   AUTEUR GNICOLAS G.NICOLAS 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-# RESPONSABLE GNICOLAS G.NICOLAS
-#
-def macr_adap_mail_ops ( self,
-                         INFO, VERSION_HOMARD, LANGUE,
-                         NOMBRE, QUALITE, CONNEXITE, TAILLE, INTERPENETRATION,
-                         NON_SIMPLEXE, MAILLAGE_FRONTIERE,
-                         **args):
-  """
-     Ecriture de la macro MACR_ADAP_MAIL/MACR_INFO_MAIL
-     Remarque : on ne mentionne explicitement que les mots-clés communs aux
-                deux macros. Les autres sont dans le dictionnaire args
-  """
-#
-#  1. args est le dictionnaire des arguments
-#     args.keys() est la liste des mots-clés
-#     args.keys()[0] est la premiere valeur de cette liste
-#     args.keys()[1:] est la liste des valeurs suivantes dans cette liste
-#     args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
-#
-###  print args
-###  print args.keys()
-###  if len (args.keys())>0 : print args.keys()[0]
-###  print args['MAILLAGE']
-#
-#  2. Les caractéristiques d'un passage sont conservées dans un dictionnaire. Il y a autant de
-#     dictionnaires que de sollicitations pour une série d'adaptation. L'ensemble de ces dictionnaires
-#     est conservé dans la liste Liste_Passages. Cette liste est nécessairement globale pour pouvoir
-#     la retrouver à chaque nouveau passage.
-#     Description du dictionnaire de passages :
-#        dico['Maillage_0']          = o ; string ; nom du concept du maillage initial de la série d'adaptation
-#        dico['Maillage_NP1']        = o ; string ; nom du concept du dernier maillage adapté
-#        dico['Rep_Calc_HOMARD'] = o ; string ; Nom du répertoire de calcul pour HOMARD
-#        dico['niter']               = o ; entier ; numéro d'itération
-#
-#  3. Les caractéristiques d'un maillage sont conservées dans un dictionnaire. Il y a autant de
-#     dictionnaires que de maillages manipulés. L'ensemble de ces dictionnaires est conservé
-#     dans la liste Liste_Maillages.
-#     Description du dictionnaire de maillages :
-#        dico['Type_Maillage'] = o ; string ; 'MAILLAGE_N', 'MAILLAGE_NP1' ou 'MAILLAGE_FRONTIERE'
-#        dico['Nom_ASTER']     = o ; concept ASTER associé
-#        dico['Action']        = o ; string ; 'A_ecrire' ou 'A_lire'
-#        dico['NOM_MED']       = o ; string ; Nom MED du maillage
-#
-#  4. Les caractéristiques d'un champ sont conservées dans un dictionnaire. Il y a autant de
-#     dictionnaires que de champs manipulés. L'ensemble de ces dictionnaires est conservé
-#     dans la liste Liste_Champs.
-#     Description du dictionnaire de champs :
-#        dico['Type_Champ']   = o ; string ; 'INDICATEUR' ou 'CHAMP'
-#        dico['RESULTAT']     = o ; concept ASTER du résutat associé
-#        dico['NOM_CHAM']     = o ; string ; Nom ASTER du champ
-#        dico['COMPOSANTE']   = f ; string ; Nom ASTER de la composante
-#        dico['NUME_ORDRE']   = f ; entier ; Numéro d'ordre du champ
-#        dico['INST']         = f ; entier ; Instant du champ
-#        dico['PRECISION']    = f ; entier ; Précision sur l'instant du champ
-#        dico['CRITERE']      = f ; entier ; Critère de précision sur l'instant du champ
-#        dico['CHAM_MAJ']     = f ; string ; Nom ASTER du champ interpolé sur le nouveau maillage
-#        dico['NOM_MED']      = o ; string ; Nom MED du champ
-#
-  from Accas import _F
-  import aster 
-  import string
-  import types
-  import os
-#
-  global Liste_Passages
-#
-#--------------------------------------------------------------------
-# 1. Préalables
-#--------------------------------------------------------------------
-#
-# 1.1. ==> La macro compte pour 1 dans la numerotation des commandes
-#
-  self.set_icmd(1)
-#
-# 1.2. ==> Numéro du passage dans cette macro
-#
-  try :
-    self.jdc.indice_macro_homard = self.jdc.indice_macro_homard + 1
-  except :
-    self.jdc.indice_macro_homard = 1
-    Liste_Passages = []
-  Numero_Passage_Fonction = self.jdc.indice_macro_homard
-###  print "Numero_Passage_Fonction = ",Numero_Passage_Fonction
-#
-# 1.3. ==> On importe les definitions des commandes a utiliser dans la macro
-#
-  DEFI_FICHIER    = self.get_cmd('DEFI_FICHIER')
-  IMPR_RESU       = self.get_cmd('IMPR_RESU')
-  EXEC_LOGICIEL   = self.get_cmd('EXEC_LOGICIEL')
-  IMPR_FICO_HOMA  = self.get_cmd('IMPR_FICO_HOMA')
-  LIRE_MAILLAGE   = self.get_cmd('LIRE_MAILLAGE')
-  LIRE_CHAMP      = self.get_cmd('LIRE_CHAMP')
-#
-# 1.4. ==> Le nom du programme HOMARD à lancer
-#
-  repertoire_outils = aster.repout()
-  homard            = repertoire_outils + 'homard'
-#
-# 1.5. ==> Initialisations
-#
-  codret = 0
-  codret_partiel = [0]
-  Rep_Calc_ASTER = os.getcwd()
-#
-  Liste_Maillages = []
-  Liste_Champs    = []
-#
-  ADAPTATION = None
-  MAJ_CHAM = None
-#
-  unite = 71
-#
-#--------------------------------------------------------------------
-# 2. Décodage des arguments de la macro-commande
-#--------------------------------------------------------------------
-# 2.1. ==> Données de pilotage de l'adaptation
-#
-  if ( self.nom == 'MACR_ADAP_MAIL' ) :
-#
-    modhom = "ADAP"
-#
-    ADAPTATION = args['ADAPTATION']
-    if args.has_key('MAJ_CHAM') :
-      MAJ_CHAM = args['MAJ_CHAM']
-#
-# 2.1.1. ==> Les concepts 'maillage'
-#
-    for mot_cle in ['MAILLAGE_N','MAILLAGE_NP1'] :
-      dico = {}
-      dico['Type_Maillage'] = mot_cle
-      dico['Nom_ASTER']     = ADAPTATION[mot_cle]
-      if ( mot_cle == 'MAILLAGE_N' ) :
-        dico['Action'] = 'A_ecrire'
-      else :
-        dico['Action'] = 'A_lire'
-      Liste_Maillages.append(dico)
-#
-# 2.1.2. ==> L'éventuel indicateur d'erreur
-#
-    if ADAPTATION['LIBRE'] != None :
-      dico = {}
-      dico['Type_Champ'] = 'INDICATEUR'
-      dico['RESULTAT']   = ADAPTATION['RESULTAT_N']
-      dico['NOM_CHAM']   = ADAPTATION['INDICATEUR']
-      dico['COMPOSANTE'] = ADAPTATION['NOM_CMP_INDICA']
-      if ( ADAPTATION['NUME_ORDRE'] != None ) :
-        dico['NUME_ORDRE'] = ADAPTATION['NUME_ORDRE']
-      if ( ADAPTATION['INST'] != None ) :
-        dico['INST'] = ADAPTATION['INST']
-        for cle in [ 'PRECISION', 'CRITERE' ] :
-          if ( ADAPTATION[cle] != None ) :
-            dico[cle] = ADAPTATION[cle]
-      dico['NOM_MED'] = aster.mdnoch ( dico['RESULTAT'].nom , dico['NOM_CHAM'] )
-      Liste_Champs.append(dico)
-###      print dico
-#
-# 2.1.3. ==> Les champs à mettre à jour
-#
-    if ( MAJ_CHAM != None ) :
-#
-      for maj_cham in MAJ_CHAM :
-#
-        dico = {}
-        dico['Type_Champ'] = 'CHAMP'
-        for cle in [ 'CHAM_MAJ', 'TYPE_CHAM', 'RESULTAT', 'NOM_CHAM', 'NUME_ORDRE' ] :
-          dico[cle] = maj_cham[cle]
-        if ( maj_cham['INST'] != None ) :
-          dico['INST'] = maj_cham['INST']
-          for cle in [ 'PRECISION', 'CRITERE' ] :
-            if ( maj_cham[cle] != None ) :
-              dico[cle] = maj_cham[cle]
-        dico['NOM_MED'] = aster.mdnoch ( dico['RESULTAT'].nom , dico['NOM_CHAM'] )
-#
-###        print dico
-        Liste_Champs.append(dico)
-#
-# 2.2. ==> Données de pilotage de l'information
-#
-  else :
-#
-    modhom = "INFO"
-#
-    dico = {}
-    dico['Type_Maillage'] = 'MAILLAGE_N'
-    dico['Nom_ASTER']     = args['MAILLAGE']
-    dico['Action']        = 'A_ecrire'
-    Liste_Maillages.append(dico)
-#
-# 2.3. ==> Suivi de frontière
-#
-  if ( MAILLAGE_FRONTIERE != None ) :
-#
-    dico = {}
-    dico['Type_Maillage'] = 'MAILLAGE_FRONTIERE'
-    dico['Nom_ASTER']     = MAILLAGE_FRONTIERE
-    dico['Action']        = 'A_ecrire'
-    Liste_Maillages.append(dico)
-#
-#--------------------------------------------------------------------
-# 3. Préparation du lancement des commandes
-#--------------------------------------------------------------------
-#
-# 3.1. ==> . Elaboration des noms MED des concepts de maillage
-#          . Memorisation des noms ASTER du maillage en entrée et en sortie (sous forme string)
-#          On crée une nouvelle liste des dictionnaires décrivant les maillages
-#          et à la fin on écrase l'ancienne liste par cette nouvelle.
-#
-  L = []
-  for dico in Liste_Maillages :
-    dico['NOM_MED'] = aster.mdnoma(dico['Nom_ASTER'].nom)
-    L.append(dico)
-    if ( dico['Type_Maillage'] == 'MAILLAGE_N' ) :
-      Nom_Concept_Maillage_N = dico['Nom_ASTER'].nom
-    elif ( dico['Type_Maillage'] == 'MAILLAGE_NP1' ) :
-      Nom_Concept_Maillage_NP1 = dico['Nom_ASTER'].nom
-  Liste_Maillages = L
-#
-# 3.2. ==> Recherche du numéro d'itération et du répertoire de travail
-#
-# 3.2.1. ==> Par défaut :
-#            . le numéro d'itération est nul
-#            . le nom du répertoire de lancement de HOMARD est construit sur le nom
-#              du maillage en entrée et le numéro de passage dans la fonction
-#
-  niter = 0
-  Nom_Rep_local = Nom_Concept_Maillage_N + "_" + modhom + "_" + str(Numero_Passage_Fonction)
-  Rep_Calc_HOMARD = os.path.join(Rep_Calc_ASTER,Nom_Rep_local)
-###  print "Rep_Calc_HOMARD = ", Rep_Calc_HOMARD
-#
-# 3.2.2. ==> En adaptation :
-#
-  if ( modhom == "ADAP" ) :
-#
-# 3.2.2.1. ==> On recherche si dans les passages déjà effectués, il en existe un
-#              dont le maillage d'arrivée était l'actuel maillage d'entrée. Si c'est
-#              le cas, cela veut dire que l'adaptation en cours est la suite d'une
-#              précédente. On doit donc utiliser le meme répertoire. Le numéro
-#              d'itération est celui de l'adaptation précédente augmenté de 1.
-#
-    for dico in Liste_Passages :
-      if ( dico['Maillage_NP1'] == Nom_Concept_Maillage_N ) :
-        niter   = dico['niter'] + 1
-        Rep_Calc_HOMARD = dico['Rep_Calc_HOMARD']
-#
-# 3.2.2.2. ==> Memorisation de ce passage
-#
-# 3.2.2.2.1. ==> Enregistrement d'un nouveau cas de figure
-#
-    if ( niter == 0 ) :
-      dico = {}
-      dico['Maillage_0']   = Nom_Concept_Maillage_N
-      dico['Maillage_NP1'] = Nom_Concept_Maillage_NP1
-      dico['Rep_Calc_HOMARD']      = Rep_Calc_HOMARD
-      dico['niter']        = niter
-      Liste_Passages.append(dico)
-#
-# 3.2.2.2.2. ==> Modification du cas en cours
-#
-    else :
-      L = []
-      for dico in Liste_Passages :
-        if ( dico['Maillage_NP1'] == Nom_Concept_Maillage_N ) :
-          dico['Maillage_NP1'] = Nom_Concept_Maillage_NP1
-          dico['niter']        = niter
-        L.append(dico)
-      Liste_Passages = L
-#
-###  print "niter = ", niter, ", Rep_Calc_HOMARD = ", Rep_Calc_HOMARD
-#
-#--------------------------------------------------------------------
-# 4. Ecriture des commandes
-#--------------------------------------------------------------------
-#
-# 4.1. ==> Création du répertoire pour homard
-#          attention : on ne fait cette creation qu'une seule fois par cas
-#                      d'adaptation ou d'information
-#
-  if ( niter == 0 ) :
-#
-    try :
-      os.mkdir(Rep_Calc_HOMARD)
-    except os.error,codret_partiel :
-      self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-      self.cr.fatal("Impossible de créer le répertoire de travail pour HOMARD : "+Rep_Calc_HOMARD)
-      codret = codret + 1
-#
-# 4.2. ==> Ecriture des commandes de creation des donnees MED
-#
-#  On doit écrire : le maillage,
-#                   le champ d'indicateur d'erreur
-#                   les champs à convertir
-#  Remarque : on met tout dans le meme fichier
-#
-#  Chacune de ces écritures est optionnelle selon le contexte.
-#
-  if ( INFO > 1 ) : infomail='OUI'
-  else :            infomail='NON'
-#
-# 4.2.1. ==> Noms des fichiers d'ASTER vers HOMARD et éventuellement de HOMARD vers ASTER
-#            Remarque : aujourd'hui, les écritures ou les lectures au format MED se font obligatoirement sur
-#                       un fichier de nom fort.n, placé dans le répertoire de calcul
-#                       Dans le fichier de configuration, on donne comme nom MAILL.(niter).MED en entrée et
-#                       MAILL.(niter+1).MED en sortie (cf. adhc00)
-#                       Tant que les E/S MED n'ont pas évolué, on fait un lien pour assurer la cohérence.
-#
-# 4.2.1.1. ==> D'ASTER vers HOMARD
-#
-  Unite_Fichier_ASTER_vers_HOMARD = 1787 + 2*Numero_Passage_Fonction
-  Fichier_ASTER_vers_HOMARD = os.path.join(Rep_Calc_ASTER,"fort." + str(Unite_Fichier_ASTER_vers_HOMARD))
-  Nom_Symbolique_Fichier_ASTER_vers_HOMARD = "ASTER_to_HOMARD"
-  Fichier_HOMARD_Entree = os.path.join(Rep_Calc_HOMARD,"MAILL."+str(niter)+".MED")
-###  print "Fichier_ASTER_vers_HOMARD = ",Fichier_ASTER_vers_HOMARD
-###  print "Fichier_HOMARD_Entree = ",Fichier_HOMARD_Entree
-  try :
-    os.symlink(Fichier_ASTER_vers_HOMARD,Fichier_HOMARD_Entree)
-  except os.error,codret_partiel :
-    self.cr.warn("Code d'erreur de symlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-    self.cr.fatal("Probleme au lien entre " + Fichier_ASTER_vers_HOMARD + " et " + Fichier_HOMARD_Entree)
-    codret = codret + 1
-#
-# 4.2.1.2. ==> De HOMARD vers ASTER
-#  
-  if ( modhom == "ADAP" ) :
-    Unite_Fichier_HOMARD_vers_ASTER = Unite_Fichier_ASTER_vers_HOMARD + 1
-    Fichier_HOMARD_vers_ASTER = os.path.join(Rep_Calc_ASTER,"fort." + str(Unite_Fichier_HOMARD_vers_ASTER))
-    Fichier_HOMARD_Sortie = os.path.join(Rep_Calc_HOMARD,"MAILL."+str(niter+1)+".MED")
-###    print "Fichier_HOMARD_vers_ASTER = ",Fichier_HOMARD_vers_ASTER
-###    print "Fichier_HOMARD_Sortie = ",Fichier_HOMARD_Sortie
-    try :
-      os.symlink(Fichier_HOMARD_vers_ASTER,Fichier_HOMARD_Sortie)
-    except os.error,codret_partiel :
-      self.cr.warn("Code d'erreur de symlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-      self.cr.fatal("Probleme au lien entre " + Fichier_HOMARD_vers_ASTER + " et " + Fichier_HOMARD_Sortie)
-      codret = codret + 1
-#
-# 4.2.2. La définition du fichier de ASTER vers HOMARD
-# 
-  DEFI_FICHIER ( ACTION= "ASSOCIER",
-                 FICHIER = Nom_Symbolique_Fichier_ASTER_vers_HOMARD,
-                 UNITE = Unite_Fichier_ASTER_vers_HOMARD,
-                 TYPE = "LIBRE",
-                 INFO = INFO )
-#
-# 4.2.3. Le(s) maillage(s)
-# Le maillage de calcul et l'éventuel maillage de la frontiere sont écrits
-# dans le meme fichier MED
-# En fait, on pourrait s'en passer au dela de la 1ère itération
-# car HOMARD a mémorisé. Mais dès que l'on écrit un champ,
-# les conventions MED imposent la présence du maillage dans le fichier.
-# Donc on va toujours écrire.
-#
-  for dico in Liste_Maillages :
-    if ( dico['Action'] == 'A_ecrire' ) :
-      motscsi={}
-      motscsi['MAILLAGE'] = dico['Nom_ASTER']
-      motscfa={}
-      motscfa['RESU']=_F( INFO_MAILLAGE=infomail,
-                          FICHIER=Nom_Symbolique_Fichier_ASTER_vers_HOMARD,
-                          FORMAT ='MED',
-                          **motscsi )
-#
-      IMPR_RESU ( INFO = INFO, **motscfa )
-#
-# 4.2.4. Le(s) champ(s)
-#
-  for dico in Liste_Champs :
-    motscsi={}
-    for cle in [ 'RESULTAT', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'PRECISION', 'CRITERE' ] :
-      if dico.has_key(cle) :
-        if ( dico[cle] != None ) :
-          motscsi[cle] = dico[cle]
-    if dico.has_key('COMPOSANTE') :
-      motscsi['NOM_CMP'] = dico['COMPOSANTE']
-    motscfa={}
-    motscfa['RESU']=_F( INFO_MAILLAGE=infomail,
-                        FICHIER=Nom_Symbolique_Fichier_ASTER_vers_HOMARD,
-                        FORMAT ='MED',
-                        **motscsi
-                      )
-#
-    IMPR_RESU ( INFO = INFO, **motscfa )
-#
-# 4.3. ==> Ecriture de la commande d'écriture des fichiers de données pour HOMARD
-#
-  motscfa={}
-#  
-# 4.3.1. ==> Le traitement
-#
-  motscsi={}
-#
-# 4.3.1.1. ==> Le type de traitement
-#
-  if ( modhom == "ADAP" ) :
-    if ( ADAPTATION['UNIFORME'] != None ) :
-      motscsi['UNIFORME'] = ADAPTATION['UNIFORME']
-    else :
-      motscsi['ADAPTATION'] = ADAPTATION['LIBRE']
-  else :
-    motscsi['INFORMATION'] = 'OUI'
-#
-# 4.3.1.2. ==> Les noms med des maillages
-#
-  for dico in Liste_Maillages :
-###    print "Nom MED de " + dico['Type_Maillage'] + " = " + dico['NOM_MED']
-    motscsi[ 'NOM_MED_'+dico['Type_Maillage'] ] = dico['NOM_MED']
-#
-# 4.3.1.3. ==> Les caracteristiques de l'éventuel indicateur d'erreur
-#
-  for dico in Liste_Champs :
-    if ( dico['Type_Champ'] == 'INDICATEUR' ) :
-      Liste_aux = [ 'NOM_MED', 'COMPOSANTE' ]
-      if dico.has_key('NUME_ORDRE') :
-        Liste_aux.append('NUME_ORDRE')
-      else :
-        for cle in [ 'RESULTAT', 'NOM_CHAM', 'INST', 'PRECISION', 'CRITERE' ] :
-          Liste_aux.append(cle)
-      for cle in Liste_aux :
-        if dico.has_key(cle) :
-          if ( dico[cle] != None ) :
-            motscsi[cle] = dico[cle]
-#
-# 4.3.1.4. ==> Les critères de raffinement et les niveaux extremes
-#
-  if ( modhom == "ADAP" ) :
-    Liste_aux = [ ]
-    if ( ADAPTATION['LIBRE'] == 'RAFF_DERA' or ADAPTATION['LIBRE'] == 'RAFFINEMENT' ) :
-      Liste_aux.append('CRIT_RAFF_ABS')
-      Liste_aux.append('CRIT_RAFF_REL')
-      Liste_aux.append('CRIT_RAFF_PE')
-    if ( ADAPTATION['LIBRE'] == 'RAFF_DERA' or ADAPTATION['LIBRE'] == 'DERAFFINEMENT' ) :
-      Liste_aux.append('CRIT_DERA_ABS')
-      Liste_aux.append('CRIT_DERA_REL')
-      Liste_aux.append('CRIT_DERA_PE')
-    niveau = 0
-    if ( ADAPTATION['LIBRE'] == 'RAFF_DERA' or ADAPTATION['LIBRE'] == 'RAFFINEMENT' or ADAPTATION['UNIFORME'] == 'RAFFINEMENT' ) :
-      Liste_aux.append('NIVE_MAX')
-      niveau = niveau + 1
-    if ( ADAPTATION['LIBRE'] == 'RAFF_DERA' or ADAPTATION['LIBRE'] == 'DERAFFINEMENT' or ADAPTATION['UNIFORME'] == 'DERAFFINEMENT' ) :
-      Liste_aux.append('NIVE_MIN')
-      niveau = niveau + 2
-    for mot_cle in Liste_aux :
-      if ( ADAPTATION[mot_cle] != None ) :
-        motscsi[mot_cle] = ADAPTATION[mot_cle]
-#
-    if ( niveau == 2 ) : 
-      if ( ADAPTATION['NIVE_MIN'] > ADAPTATION['NIVE_MAX'] ) :
-        self.cr.fatal("Le niveau minimum doit etre inferieur au niveau maximum.")
-        codret = codret + 1
-#
-# 4.3.1.5. ==> Mise à jour de la solution
-#
-  if ( MAJ_CHAM != None ) :
-    motscsi['MAJ_CHAM'] = 'OUI'
-#
-# 4.3.1.6. ==> Numéro d'itération
-#
-  if ( modhom == "ADAP" ) :
-    motscsi['NITER'] = niter
-#
-# 4.3.1.7. ==> Suivi de la frontiere
-#
-  if args.has_key('GROUP_MA') :
-    if ( args['GROUP_MA'] != None ) :
-      motscsi['GROUP_MA'] = args['GROUP_MA']
-#
-# 4.3.1.8. ==> Bilan
-#
-  motscfa['TRAITEMENT'] = _F(**motscsi)
-#
-# 4.3.2. ==> L'analyse
-#
-  motscsi={}
-  if ( NOMBRE != None )           : motscsi['NOMBRE' ]           = NOMBRE
-  if ( QUALITE != None )          : motscsi['QUALITE' ]          = QUALITE
-  if ( CONNEXITE != None )        : motscsi['CONNEXITE' ]        = CONNEXITE
-  if ( TAILLE != None )           : motscsi['TAILLE' ]           = TAILLE
-  if ( INTERPENETRATION != None ) : motscsi['INTERPENETRATION' ] = INTERPENETRATION
-#
-  motscfa['ANALYSE'] = _F(**motscsi)
-#
-# 4.3.3. ==> La commande
-#
-# 4.3.3.1. ==> Les fichiers annexes
-#
-  dico = {}
-#
-  Fichier_Configuration = os.path.join(Rep_Calc_HOMARD,'HOMARD.Configuration')
-#                                 1234567890123456
-  dico[Fichier_Configuration] = ('HOMARD_CONFIG','FICHIER_CONF',unite)
-#
-  if ( modhom != "ADAP" ) :
-    unite = unite + 1
-    Fichier_Donnees = os.path.join(Rep_Calc_HOMARD,'HOMARD.Donnees')
-#                             1234567890123456
-    dico[Fichier_Donnees] = ('HOMARD_DONNEES','FICHIER_DONN',unite)
-#
-# 4.3.3.2. ==> L'ouverture de ces fichiers
-#
-  for fic in dico.keys() :
-    DEFI_FICHIER ( ACTION= "ASSOCIER", NOM_SYSTEME = fic, FICHIER = dico[fic][0], UNITE = dico[fic][2],
-                   TYPE = "ASCII", ACCES = "NEW", INFO = INFO )
-    motscfa[dico[fic][1]] = dico[fic][0]
-#
-# 4.3.3.3. ==> Ecriture
-#
-###  print motscfa
-  IMPR_FICO_HOMA ( INFO=INFO, LANGUE = LANGUE, NON_SIMPLEXE = NON_SIMPLEXE, **motscfa )
-#
-###  for fic in dico.keys() :
-###    print "\nContenu de ", fic
-###    fichier = open (fic,'r')
-###    les_lignes = fichier.readlines()
-###    fichier.close()
-###    for ligne in les_lignes :
-###      print ligne[:-1]
-#
-# 4.3.3.4. ==> La fermeture des fichiers locaux
-#              Remarque : il faut le faire ici pour que le gestionnaire de DEFI_FICHIER soit à jour
-#              Remarque : aujourd'hui on est obligé de passer par le numéro d'unité logique
-#
-  for fic in dico.keys() :
-    DEFI_FICHIER ( ACTION= "LIBERER", NOM_SYSTEME = fic, UNITE = dico[fic][2], INFO = INFO )
-#
-# 4.4. ==> Ecriture de la commande d'exécution de homard
-#    Remarque : dans la donnée de la version de HOMARD, il faut remplacer
-#               le _ de la donnee par un ., qui
-#               est interdit dans la syntaxe du langage de commandes ASTER
-#    Remarque : il faut remplacer le N majuscule de la donnee par
-#               un n minuscule, qui est interdit dans la syntaxe du langage
-#               de commandes ASTER
-#    Remarque : pour le nommage des fichiers d'échange entre ASTER et HOMARD, on utilise
-#               la convention implicite du fort.n des entrees/sorties au format MED
-#
-  VERSION_HOMARD=string.replace(VERSION_HOMARD,'_','.')
-  VERSION_HOMARD=string.replace(VERSION_HOMARD,'N','n')
-  if ( VERSION_HOMARD[-6:]=='_PERSO' ):
-#    motscsi['ARGUMENT']=_F('TYPEXE'='-PERSO')
-    VERSION_HOMARD=VERSION_HOMARD[:-6]
-#
-  if ( modhom == "ADAP" ) :
-    Fichier_Donnees = '0'
-#
-  EXEC_LOGICIEL ( ARGUMENT = (_F(NOM_PARA=Rep_Calc_HOMARD), # nom du repertoire
-                              _F(NOM_PARA=VERSION_HOMARD),  # version de homard
-                              _F(NOM_PARA=str(INFO)),       # niveau d information
-                              _F(NOM_PARA=Fichier_Donnees), # fichier de données HOMARD
-                             ),
-                  LOGICIEL = homard
-                )
-#
-# 4.5. ==> Ecriture de la commande de lecture des resultats med
-#          Remarque :
-#          La fonction self.DeclareOut(a,b) focntionne ainsi :
-#          a est une chaine de caracteres
-#          b est la variable déclarée dans la commande
-#          le but est de associer le contenu de b à la vaiable locale qui sera désignée par a
-#          Exemple :
-#          self.DeclareOut('maillage_np1',ADAPTATION['MAILLAGE_NP1'])
-#          ==> la variable maillage_np1 est identifiée à l'argument 'MAILLAGE_NP1' du mot-clé ADAPTATION
-#
-  if ( modhom == "ADAP" ) :
-#
-# 4.5.1. ==> Le maillage
-#
-    self.DeclareOut('maillage_np1',ADAPTATION['MAILLAGE_NP1'])
-    for dico in Liste_Maillages :
-      if ( dico['Action'] == 'A_lire' ) :
-        maillage_np1 = LIRE_MAILLAGE ( UNITE = Unite_Fichier_HOMARD_vers_ASTER,
-                                       FORMAT = 'MED',
-                                       NOM_MED = dico['NOM_MED'],
-                                       VERI_MAIL = _F(VERIF='NON'), INFO_MED = INFO, INFO = INFO )
-#
-# 4.5.2. ==> Les champs
-#
-    for dico in Liste_Champs :
-      if ( dico['Type_Champ'] == 'CHAMP' ) :
-###        print dico
-        self.DeclareOut('champ_maj',dico['CHAM_MAJ'])
-        motscsi={}
-        for cle in [ 'NUME_ORDRE', 'INST', 'PRECISION', 'CRITERE' ] :
-          if dico.has_key(cle) :
-            if ( dico[cle] != None ) :
-              motscsi[cle] = dico[cle]
-        if dico.has_key('NUME_ORDRE') :
-          motscsi['NUME_PT'] = dico['NUME_ORDRE']
-        champ_maj = LIRE_CHAMP ( UNITE = Unite_Fichier_HOMARD_vers_ASTER, FORMAT = 'MED',
-                                 MAILLAGE = maillage_np1,
-                                 NOM_MED = dico['NOM_MED'], NOM_CMP_IDEM = 'OUI', TYPE_CHAM = dico['TYPE_CHAM'],
-                                 INFO = INFO, **motscsi )
-#
-#--------------------------------------------------------------------
-# 5. Menage des fichiers MED et HOMARD devenus inutiles
-#--------------------------------------------------------------------
-#
-  fic = os.path.join(Rep_Calc_HOMARD,"MAILL."+str(niter)+".HOM")
-  Liste_aux = [ Fichier_ASTER_vers_HOMARD, Fichier_HOMARD_Entree, fic ]
-  if ( modhom == "ADAP" ) :
-    Liste_aux.append(Fichier_HOMARD_vers_ASTER)
-    Liste_aux.append(Fichier_HOMARD_Sortie)
-#
-  for fic in Liste_aux :
-    if ( INFO > 1 ) : print "Destruction du fichier ", fic
-    if os.path.islink(fic) :
-      try :
-        os.unlink(fic)
-      except os.error,codret_partiel :
-        self.cr.warn("Code d'erreur de unlink : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-        self.cr.warn("Impossible d'enlever le lien sur le fichier : "+fic)
-        codret = codret + 1
-    if os.path.isfile(fic) :
-      try :
-        os.remove(fic)
-      except os.error,codret_partiel :
-        self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
-        self.cr.warn("Impossible de détruire le fichier : "+fic)
-        codret = codret + 1
-###  print os.listdir(Rep_Calc_ASTER)
-###  print os.listdir(Rep_Calc_HOMARD)
-#
-#--------------------------------------------------------------------
-# 6. C'est fini !
-#--------------------------------------------------------------------
-#
-  return codret
diff --git a/Aster/Cata/Macro/macr_cabri_calc_ops.py b/Aster/Cata/Macro/macr_cabri_calc_ops.py
deleted file mode 100644 (file)
index 2927417..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-#@ MODIF macr_cabri_calc_ops Macro  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-
-
-def macr_cabri_calc_ops(self,MAILLAGE,MODELE_MECA,MODELE_THER,CHAR_THER,
-    CHAR_MECA,RESU_THER,
-    AFFE_MATERIAU,DEFI_CHAR_THER,DEFI_CHAR_MECA,RELATION,SOLVEUR,CONVERGENCE,NEWTON, 
-    INCREMENT,CHAM_MATER,**args):
-   """
-     Ecriture de la macro MACR_CABRI_CALC
-   """
-   
-   #################################################################
-   ########## PREPARATION MACRO
-   #################################################################
-
-   from Accas import _F
-
-   ier =0
-   
-   # On met certains mots-clefs dans des variables locales pour les proteger
-   affemateriau = AFFE_MATERIAU
-   mail         = MAILLAGE  
-   
-
-   # On importe les definitions des commandes a utiliser dans la macro
-   # Le nom de la variable doit etre obligatoirement le nom de la commande
-   DEFI_GROUP       = self.get_cmd('DEFI_GROUP')
-   AFFE_MATERIAU    = self.get_cmd('AFFE_MATERIAU')
-   AFFE_MODELE      = self.get_cmd('AFFE_MODELE') 
-   MODI_MAILLAGE    = self.get_cmd('MODI_MAILLAGE')   
-   AFFE_CHAR_THER_F = self.get_cmd('AFFE_CHAR_THER_F')
-   AFFE_CHAR_THER   = self.get_cmd('AFFE_CHAR_THER')  
-   AFFE_CHAR_MECA_F = self.get_cmd('AFFE_CHAR_MECA_F')
-   AFFE_CHAR_MECA   = self.get_cmd('AFFE_CHAR_MECA')  
-   DEFI_FONCTION    = self.get_cmd('DEFI_FONCTION')
-   DEFI_LIST_REEL   = self.get_cmd('DEFI_LIST_REEL')
-   THER_LINEAIRE    = self.get_cmd('THER_LINEAIRE')
-   STAT_NON_LINE    = self.get_cmd('STAT_NON_LINE')
-
-   # La macro compte pour 1 dans la numerotation des commandes
-   self.set_icmd(1)
-
-   # Le concept sortant (de type evol_noli) est nomme 'resumeca' dans 
-   # le contexte de la macro
-   self.DeclareOut('resumeca',self.sd)
-   self.DeclareOut('mail',MAILLAGE)
-           
-   #################################################################
-   ########## PREPARATION DES MODELES
-   #################################################################
-
-   # Definition des groupes
-   mail=DEFI_GROUP(reuse =mail,MAILLAGE=mail,
-                        CREA_GROUP_NO=(
-                                  _F(GROUP_MA='M_GOU',NOM='N_M_GOU',),
-                                  _F(GROUP_MA='M_JOI',NOM='N_M_JOI',),
-                                  _F(GROUP_MA='SCBJ',NOM='N_SCBJ',),
-                                  _F(GROUP_MA='SCJB',NOM='N_SCJB',),
-                                  _F(GROUP_MA='M_L_AA',NOM='N_M_L_AA',),
-                                  _F(GROUP_MA='SCEG',NOM='N_SCEG',),
-                                  _F(GROUP_MA='SCGE',NOM='N_SCGE',),),)
-
-   # Creation du modele thermique
-   if MODELE_THER != None:
-      self.DeclareOut('modther',MODELE_THER)
-         
-   modther=AFFE_MODELE(MAILLAGE=mail,
-                          AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
-                          'M_L_AA','M_INT','M_L_SA','M_EXT','SCEG','SCGE',),
-                                  PHENOMENE='THERMIQUE',
-                                  MODELISATION='3D_DIAG',),
-                         );
-
-   # Creation du modele mecanique
-   if MODELE_MECA != None:
-      self.DeclareOut('modmeca',MODELE_MECA)
-         
-   modmeca = AFFE_MODELE(MAILLAGE=mail,
-                          AFFE=_F(GROUP_MA=('VTOT','M_GOU','M_TUB','M_JOI','SCBJ','SCJB',
-                          'M_L_AA','M_L_SA','SCEG','SCGE','M_INT','M_EXT',),
-                                  PHENOMENE='MECANIQUE',
-                                  MODELISATION='3D',),
-                         );
-
-   # Orientation des mailles
-   mail=MODI_MAILLAGE(reuse =mail,
-                 MAILLAGE=mail,
-                 ORIE_PEAU_3D=(_F(GROUP_MA=('M_INT','M_TUB',),),
-                               _F(GROUP_MA=('M_L_AA','M_JOI','M_L_SA',),),),
-                 MODELE=modmeca,);
-
-
-
-   # Affectation des materiaux
-   if CHAM_MATER != None:
-      self.DeclareOut('_cham',CHAM_MATER)
-   motscles={}
-   motscles['AFFE']=[]
-   for mat in affemateriau:
-      if mat['TOUT'] == None:
-         # Creation de mots-cles pour les AFFE_CHAR_MECA
-         motscles['AFFE'].append(_F(GROUP_MA=mat['GROUP_MA'],
-                                    MATER = mat['MATER'],
-                                    TEMP_REF = mat['TEMP_REF'],) )
-      else:
-         # Creation de mots-cles pour les AFFE_CHAR_MECA
-         motscles['AFFE'].append(_F(TOUT='OUI',
-                                    MATER = mat['MATER'],
-                                    TEMP_REF = mat['TEMP_REF'],) )
-      
-   _cham = AFFE_MATERIAU(MAILLAGE=mail,
-                    MODELE=modther,
-                    AFFE=motscles['AFFE'],
-                   )
-
-   #################################################################
-   ########## CONDITIONS AUX LIMITES THERMIQUES
-   #################################################################   
-   # Recuperation des parametres thermiques
-
-   if DEFI_CHAR_THER != None:
-      temp_ini = DEFI_CHAR_THER['TEMP_INIT']
-      if DEFI_CHAR_THER['COEF_H_FLUI']!=None:
-         coef_int = DEFI_CHAR_THER['COEF_H_FLUI']
-      else:
-         coef_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,0.016,
-                       7200.0,0.016,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);      
-      if DEFI_CHAR_THER['TEMP_EXT_FLUI']!=None:
-         temp_int = DEFI_CHAR_THER['TEMP_EXT_FLUI']
-      else:
-         temp_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
-                          600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      if DEFI_CHAR_THER['COEF_H_AIR']!=None:
-         coef_ext = DEFI_CHAR_THER['COEF_H_AIR']
-      else:
-         coef_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,1e-05,7200.0,1e-05,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);
-     
-      if DEFI_CHAR_THER['TEMP_EXT_AIR']!=None:
-         temp_ext = DEFI_CHAR_THER['TEMP_EXT_AIR']
-      else:
-         temp_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,20.0,7200.0,20.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      if DEFI_CHAR_THER['LIST_INST']!=None:
-         transi1  = DEFI_CHAR_THER['LIST_INST']
-      else:
-         transi1  = DEFI_LIST_REEL(DEBUT=0.0,
-                     INTERVALLE=(_F(JUSQU_A=1.0,
-                                    NOMBRE=1,),
-                                 _F(JUSQU_A=11.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=600.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=610.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=1800.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=7200.0,
-                                    NOMBRE=10,),),);                                                        
-   else:
-      temp_ini = DEFI_CHAR_THER['TEMP_INIT']
-      coef_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,0.016,
-                       7200.0,0.016,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);      
-      temp_int = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,temp_ini,1.0,temp_ini,11.0,60.0,
-                          600.0,60.0,610.0,280.0,1800.0,280.0,7200.0,280.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      coef_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,1e-05,7200.0,1e-05,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);    
-      temp_ext = DEFI_FONCTION(NOM_PARA='INST',
-                    VALE=(0.0,20.0,7200.0,20.0,),
-                    PROL_DROITE='CONSTANT',
-                    PROL_GAUCHE='CONSTANT',);                                       
-      transi1  = DEFI_LIST_REEL(DEBUT=0.0,
-                     INTERVALLE=(_F(JUSQU_A=1.0,
-                                    NOMBRE=1,),
-                                 _F(JUSQU_A=11.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=600.0,
-                                    NOMBRE=10,),
-                                 _F(JUSQU_A=610.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=1800.0,
-                                    NOMBRE=30,),
-                                 _F(JUSQU_A=7200.0,
-                                    NOMBRE=10,),),);     
-   # Que sauver ?
-   if CHAR_THER != None:
-      for m in CHAR_THER:
-         if m['TYPE']=="BRIDE_FLUIDE":
-            self.DeclareOut('cl_th1',m['CHARGE'])
-         if m['TYPE']=="BRIDE_AIR":
-            self.DeclareOut('cl_th2',m['CHARGE'])
-         if m['TYPE']=="ECROU_GOUJON":
-            self.DeclareOut('cl_th3',m['CHARGE'])
-         if m['TYPE']=="BRIDE_JOINT":
-            self.DeclareOut('cl_th4',m['CHARGE'])
-
-   # Echanges thermiques internes entre le fluide et la bride
-   cl_th1=AFFE_CHAR_THER_F(MODELE=modther,
-                           ECHANGE=_F(GROUP_MA = 'M_INT',
-                                      COEF_H   = coef_int,
-                                      TEMP_EXT = temp_int,),);
-
-   # Echanges thermiques externes entre bride et air ambiant
-   cl_th2=AFFE_CHAR_THER_F(MODELE=modther,
-                           ECHANGE=_F(GROUP_MA='M_EXT',
-                                   COEF_H=coef_ext,
-                                   TEMP_EXT=temp_ext,),);
-
-   # Echanges thermiques entre ecrou et goujon
-   cl_th3=AFFE_CHAR_THER(MODELE=modther,
-                         LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
-                                        GROUP_NO_2='N_SCGE',
-                                        DDL_1='TEMP',
-                                        COEF_MULT_1=1.0,
-                                        DDL_2='TEMP',
-                                        COEF_MULT_2=-1.0,
-                                        COEF_IMPO=0.0,),);
-
-   # Echanges thermiques entre bride et joint
-   cl_th4=AFFE_CHAR_THER(MODELE=modther,
-                         LIAISON_GROUP=_F(GROUP_NO_1='N_SCBJ',
-                                        GROUP_NO_2='N_SCJB',
-                                        DDL_1='TEMP',
-                                        COEF_MULT_1=1.0,
-                                        DDL_2='TEMP',
-                                        COEF_MULT_2=-1.0,
-                                        COEF_IMPO=0.0,),);
-
-
-
-   #################################################################
-   ########## CALCUL THERMIQUE
-   #################################################################   
-   if RESU_THER != None:
-      self.DeclareOut('resuther',RESU_THER)   
-
-   resuther=THER_LINEAIRE(MODELE=modther,
-                  CHAM_MATER=_cham,
-                  EXCIT=(_F(CHARGE=cl_th1,),
-                         _F(CHARGE=cl_th2,),
-                         _F(CHARGE=cl_th3,),
-                         _F(CHARGE=cl_th4,),),
-                  INCREMENT=_F(LIST_INST=transi1,),
-                  TEMP_INIT=_F(VALE=temp_ini,),
-                  TITRE='CABRI THERMIQUE &DATE &HEURE',);
-   
-   #################################################################
-   ########## CONDITIONS AUX LIMITES MECANIQUES
-   #################################################################   
-   # Recuperation des parametres mecaniques
-   if DEFI_CHAR_MECA != None:
-     if DEFI_CHAR_MECA['PRETENS']!=None:
-         f_pret = DEFI_CHAR_MECA['PRETENS']
-     else:
-         f_pret=DEFI_FONCTION(NOM_PARA='INST',
-                     VALE=(0.0,0.0,1.0,-0.02,),
-                     PROL_DROITE='CONSTANT',
-                     PROL_GAUCHE='CONSTANT',);                                 
-     if DEFI_CHAR_MECA['PRES_REP']!=None:
-         pre_int = DEFI_CHAR_MECA['PRES_REP']
-     else:
-         pre_int = DEFI_FONCTION(NOM_PARA='INST',
-                      VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
-                      PROL_DROITE='CONSTANT',
-                      PROL_GAUCHE='CONSTANT',);  
-     if DEFI_CHAR_MECA['EFFE_FOND']!=None:
-         eff_fond = DEFI_CHAR_MECA['EFFE_FOND']
-     else:
-         eff_fond=DEFI_FONCTION(NOM_PARA='INST',
-                       VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
-                       PROL_DROITE='CONSTANT',
-                       PROL_GAUCHE='CONSTANT',);
-   else:
-      f_pret=DEFI_FONCTION(NOM_PARA='INST',
-                     VALE=(0.0,0.0,1.0,-0.02,),
-                     PROL_DROITE='CONSTANT',
-                     PROL_GAUCHE='CONSTANT',);                                 
-
-      pre_int = DEFI_FONCTION(NOM_PARA='INST',
-                      VALE=(0.0,0.0,1.0,0.0,11.0,16.0,),
-                      PROL_DROITE='CONSTANT',
-                      PROL_GAUCHE='CONSTANT',);  
-
-      eff_fond=DEFI_FONCTION(NOM_PARA='INST',
-                       VALE=(0.0,-0.0,1.0,-0.0,11.0,-20.607059,),
-                       PROL_DROITE='CONSTANT',
-                       PROL_GAUCHE='CONSTANT',);     
-   # Que sauver ?
-   if CHAR_MECA != None:
-      for m in CHAR_MECA:
-         if m['TYPE']=="BLOC_BAS_GOUJ":
-            self.DeclareOut('cl_me1',m['CHARGE'])
-         if m['TYPE']=="BLOC_BAS_JOINT":
-            self.DeclareOut('cl_me2',m['CHARGE'])
-         if m['TYPE']=="BLOC_LAT_ALES":
-            self.DeclareOut('cl_me3',m['CHARGE'])
-         if m['TYPE']=="BLOC_LAT_NALES":
-            self.DeclareOut('cl_me4',m['CHARGE'])
-         if m['TYPE']=="PLAN_TUBE":
-            self.DeclareOut('cl_me5',m['CHARGE'])
-         if m['TYPE']=="PRES_FLU":
-            self.DeclareOut('cl_me6',m['CHARGE'])
-         if m['TYPE']=="EFFET_FOND":
-            self.DeclareOut('cl_me7',m['CHARGE'])
-         if m['TYPE']=="CONT_JOINT":
-            self.DeclareOut('cl_me8',m['CHARGE'])
-         if m['TYPE']=="DEFO_THER":
-            self.DeclareOut('cl_me9',m['CHARGE'])
-         if m['TYPE']=="SERR_ECROU_1":
-            self.DeclareOut('cl_me10',m['CHARGE'])
-         if m['TYPE']=="SERR_ECROU_2":
-            self.DeclareOut('cl_me11',m['CHARGE'])            
-                            
-
-   # Blocage bas du goujon
-   cl_me1=AFFE_CHAR_MECA(MODELE=modmeca,
-                      DDL_IMPO=_F(GROUP_NO='N_M_GOU',
-                                  DZ=0.0,),
-                      INFO=2,);
-   # Blocage bas du joint
-   cl_me2=AFFE_CHAR_MECA(MODELE=modmeca,
-                      DDL_IMPO=_F(GROUP_NO='N_M_JOI',
-                                  DZ=0.0,),
-                      INFO=2,);
-
-   # Blocage lateral, face laterale avec alesage
-   cl_me3=AFFE_CHAR_MECA(MODELE=modmeca,
-                      DDL_IMPO=_F(GROUP_NO='N_M_L_AA',
-                                  DY=0.0,),
-                      INFO=2,);
-
-   # Face laterale sans alesage
-   cl_me4=AFFE_CHAR_MECA(MODELE=modmeca,
-                      FACE_IMPO=_F(GROUP_MA='M_L_SA',
-                                   DNOR=0.0,),
-                      INFO=2,);
-
-   # Condition de planeite de la face de coupe du tube
-   cl_me5=AFFE_CHAR_MECA(MODELE=modmeca,
-                      LIAISON_UNIF=_F(GROUP_MA='M_TUB',
-                                      DDL='DZ',),
-                      INFO=2,);
-   # Pression due au fluide
-   cl_me6=AFFE_CHAR_MECA_F(MODELE=modmeca,
-                           PRES_REP=_F(GROUP_MA='M_INT',
-                                     PRES=pre_int,),
-                           INFO=2,);
-
-   # Effet de fond
-   cl_me7=AFFE_CHAR_MECA_F(MODELE=modmeca,
-                           PRES_REP=_F(GROUP_MA='M_TUB',
-                                     PRES=eff_fond,),
-                           INFO=2,);
-
-   # Contact zone de joint
-   cl_me8=AFFE_CHAR_MECA(MODELE=modmeca,
-                        CONTACT=_F(GROUP_MA_1='SCBJ',
-                                  GROUP_MA_2='SCJB',),
-                        INFO=2,);
-   # Deformation thermique
-   cl_me9=AFFE_CHAR_MECA(  MODELE=modmeca,
-                           TEMP_CALCULEE=resuther,
-                           INFO=2,);
-
-   # Serrage ecrou/goujon (pre-tensionnement)
-   cl_me10=AFFE_CHAR_MECA_F(MODELE=modmeca,
-                         LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
-                                          GROUP_NO_2='N_SCGE',
-                                          DDL_1='DZ',
-                                          COEF_MULT_1=1.0,
-                                          DDL_2='DZ',
-                                          COEF_MULT_2=-1.0,
-                                          COEF_IMPO=f_pret,),
-                      INFO=2,);
-
-   cl_me11=AFFE_CHAR_MECA(MODELE=modmeca,
-                       LIAISON_GROUP=_F(GROUP_NO_1='N_SCEG',
-                                        GROUP_NO_2='N_SCGE',
-                                        DDL_1='DX',
-                                        COEF_MULT_1=1.0,
-                                        DDL_2='DX',
-                                        COEF_MULT_2=-1.0,
-                                        COEF_IMPO=0.0,),
-                      INFO=2,);
-
-
-   #################################################################
-   ########## CALCUL MECANIQUE
-   #################################################################  
-   # Options de convergence        
-   solveur=SOLVEUR.cree_dict_valeurs(SOLVEUR.mc_liste)
-   
-   # Elimination des valeurs "None"
-   for i in solveur.keys():
-      if solveur[i]==None : del solveur[i]
-
-
-   transi2 = DEFI_LIST_REEL(DEBUT=0.0,
-                     INTERVALLE=(_F(JUSQU_A=1.0,
-                                    NOMBRE=2,),
-                                 _F(JUSQU_A=11.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=600.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=610.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=1800.0,
-                                    NOMBRE=20,),
-                                 _F(JUSQU_A=7200.0,
-                                    NOMBRE=20,),),);   
-
-   # Options d'incrementation  
-   if INCREMENT != None:
-      if INCREMENT['LIST_INST'] != None:
-         listinst = INCREMENT['LIST_INST']
-      else:
-         listinst = transi2   
-   
-      increment=INCREMENT.cree_dict_valeurs(INCREMENT.mc_liste)
-   
-      # Elimination des valeurs "None"
-      for i in increment.keys():
-         if increment[i]==None : del increment[i]
-      
-      increment['LIST_INST'] = listinst
-            
-   else:
-      listinst  = transi2
-      increment =_F(
-               LIST_INST       = listinst,
-               ),       
-                              
-   # Options de Newton     
-   newton=NEWTON.cree_dict_valeurs(NEWTON.mc_liste)
-   # Elimination des valeurs "None"
-   for i in newton.keys():
-      if newton[i]==None : del newton[i]   
-
-   # Options de convergence        
-   convergence=CONVERGENCE.cree_dict_valeurs(CONVERGENCE.mc_liste) 
-   # Elimination des valeurs "None"
-   for i in convergence.keys():
-      if convergence[i]==None : del convergence[i]
-
-   # Options de comportement
-   # Type incremental (=1) ou elastique (=0)
-   comp_incr = 0
-   if RELATION:
-      relation=RELATION
-      if relation == 'VMIS_ISOT_TRAC':
-         comp_incr = 1
-      else:
-         comp_incr = 0
-   else:
-      relation = 'ELAS'
-      comp_incr = 0
-
-         
-   # Parametres du calcul
-   if comp_incr == 1:
-      resumeca=STAT_NON_LINE(MODELE=modmeca,
-                  CHAM_MATER=_cham,
-                  EXCIT=(_F(CHARGE=cl_me1,),
-                         _F(CHARGE=cl_me2,),
-                         _F(CHARGE=cl_me3,),
-                         _F(CHARGE=cl_me4,),
-                         _F(CHARGE=cl_me5,),
-                         _F(CHARGE=cl_me6,), 
-                         _F(CHARGE=cl_me7,), 
-                         _F(CHARGE=cl_me8,), 
-                         _F(CHARGE=cl_me9,), 
-                         _F(CHARGE=cl_me10,), 
-                         _F(CHARGE=cl_me11,),                            
-                  ),
-                  SOLVEUR        = solveur, 
-                  COMP_INCR      =_F(RELATION=relation,),
-                  NEWTON         = newton,
-                  INCREMENT      = increment,
-                  CONVERGENCE    = convergence,
-                  TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);
-   else:
-      resumeca=STAT_NON_LINE(MODELE=modmeca,
-                  CHAM_MATER=_cham,
-                  EXCIT=(_F(CHARGE=cl_me1,),
-                         _F(CHARGE=cl_me2,),
-                         _F(CHARGE=cl_me3,),
-                         _F(CHARGE=cl_me4,),
-                         _F(CHARGE=cl_me5,),
-                         _F(CHARGE=cl_me6,), 
-                         _F(CHARGE=cl_me7,), 
-                         _F(CHARGE=cl_me8,), 
-                         _F(CHARGE=cl_me9,), 
-                         _F(CHARGE=cl_me10,), 
-                         _F(CHARGE=cl_me11,),                            
-                  ),
-                  SOLVEUR        = solveur, 
-                  COMP_ELAS      =_F(RELATION=relation,),
-                  NEWTON         = newton,
-                  INCREMENT      = increment,
-                  CONVERGENCE    = convergence,
-                  TITRE='CABRI THERMOM\xe9CANIQUE &DATE &HEURE',);                  
-
-   return ier
-
diff --git a/Aster/Cata/Macro/macr_cabri_mail_dat.py b/Aster/Cata/Macro/macr_cabri_mail_dat.py
deleted file mode 100644 (file)
index bd55457..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-#@ MODIF macr_cabri_mail_dat Macro  DATE 20/05/2003   AUTEUR MABBAS M.ABBAS 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-
-# Données pour les brides standards
-
-
-
-# Pour ajouter une bride x:
-#  Définir un dico_bride_x comme ci-dessous puis ajoutez-le à dico_bride_std
-
-# dictionnaire pour la description des variables
-dico_var_geo = {'nbgouj':'Nombre de goujons de la jonction boulonnée (GOUJ_N_GOUJON)',
-            'dint':'Diamètre intérieur de la bride (BRID_D_INT)',
-            'dex1':'Diamétre extérieur de la conduite (TUBU_D_EXT)',
-            'dex2':'Position (diamètre) du congé de la bride (BRID_D_CONGE)',
-            'dex3':'Diamètre de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_D_EPAUL)',
-            'dtrou':'Position des alésages de la bride permettant l''introduction des goujons (BRID_P_ALESAG)',
-            'dext':'Diamètre extérieur de la bride (BRID_D_EXT)',
-            'dt':'Diamètre des alésages de la bride permettant l''introduction des goujons (BRID_D_ALESAG)',
-            'drd':'Diamètre de la rondelle (GOUJ_D_RONDEL)',
-            'dg':'Diamètre des goujons de la jonction boulonnée (GOUJ_D_GOUJON)',
-            'dec':'Diamètre de l''écrou (GOUJ_D_ECROU)',
-            'rcong':'Rayon du congé de la bride (BRID_R_CONGE)',
-            'he':'Epaisseur de la rondelle (GOUJ_E_RONDEL)',
-            'e':'Epaisseur de l''écrou (GOUJ_E_ECROU)',
-            'hc1':'Hauteur de la bride (BRID_H)',
-            'hcg1':'Hauteur de conduite (TUBU_H)',
-            'hb':'Hauteur de l''épaulement de la bride au niveau de l''interface d''étanchéité (BRID_H_EPAUL)',
-            'htrou':'Hauteur des alésages de la bride permettant l''introduction des goujons (BRID_H_ALESAG)',
-            'pf':'Profondeur (épaisseur) des filets des goujons (GOUJ_E_FILET)',
-            'j':'Epaisseur du joint au niveau de l''interface d''étanchéité (ETAN_E_JOINT)'}
-
-dico_var_msh = {'nrad':'Nombre d''éléments radiaux (NBR_RAD)',
-            'ncir':'Nombre d''éléments circonférentiels (NBR_CIR)',
-            'nver':'Nombre d''éléments verticaux (NBR_VER)',
-            'nsect':'Nombre d''éléments de l''alésage (NBR_ALE)',
-            'temps':'Temps d''analyse'}
-
-# dictionnaires des brides standards
-dico_bride_A = {'nbgouj': 4,
-                'dint':   15.76,
-                'dex1':   21.3,
-                'dex2':   38.,
-                'dex3':   48.,
-                'dtrou':  67.,
-                'dext':   95.,
-                'dt':     14.,
-                'drd':    25.,
-                'dg':     12.,
-                'dec':    18.,
-                'rcong':  3.,
-                'he':     12.,
-                'e':      2.5,
-                'hc1':    46.5,
-                'hcg1':   20,
-                'hb':     1.5,
-                'htrou':  20.,
-                'pf':     1.5,
-                'j':      2}
-
-dico_bride_AA = {'nbgouj': 32,
-                'dint':   336.5,
-                'dex1':   355.6,
-                'dex2':   395.,
-                'dex3':   415.,
-                'dtrou':  460.,
-                'dext':   515.,
-                'dt':     22.,
-                'drd':    36.,
-                'dg':     20.,
-                'dec':    30.,
-                'rcong':  5.,
-                'he':     20.,
-                'e':      3.,
-                'hc1':    115.,
-                'hcg1':   115./2.,
-                'hb':     3.,
-                'htrou':  47.,
-                'pf':     2.2,
-                'j':      2}
-
-dico_bride_B = {'nbgouj': 4,
-                'dint':   26.64,
-                'dex1':   33.4,
-                'dex2':   53.,
-                'dex3':   63.,
-                'dtrou':  88.,
-                'dext':   123.,
-                'dt':     16.,
-                'drd':    27.,
-                'dg':     14.,
-                'dec':    21.,
-                'rcong':  4.,
-                'he':     14.,
-                'e':      2.5,
-                'hc1':    59.,
-                'hcg1':   59./2.,
-                'hb':     1.5,
-                'htrou':  27.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_B1 = {'nbgouj': 4,
-                'dint':   24.3,
-                'dex1':   33.4,
-                'dex2':   53.,
-                'dex3':   63.,
-                'dtrou':  88.,
-                'dext':   123.,
-                'dt':     16.,
-                'drd':    27.,
-                'dg':     14.,
-                'dec':    21.,
-                'rcong':  4.,
-                'he':     14.,
-                'e':      2.5,
-                'hc1':    59.,
-                'hcg1':   59./2.,
-                'hb':     1.5,
-                'htrou':  27.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_C = {'nbgouj': 8,
-                'dint':   52.48,
-                'dex1':   60.3,
-                'dex2':   84.,
-                'dex3':   100.,
-                'dtrou':  127.,
-                'dext':   165.,
-                'dt':     18.,
-                'drd':    30,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  4.,
-                'he':     16.,
-                'e':      3,
-                'hc1':    70.,
-                'hcg1':   70./2.,
-                'hb':     1.5,
-                'htrou':  21.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_D = {'nbgouj': 8,
-                'dint':   42.9,
-                'dex1':   60.3,
-                'dex2':   84.,
-                'dex3':   100.,
-                'dtrou':  127.,
-                'dext':   165.,
-                'dt':     18.,
-                'drd':    30,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    87.6,
-                'hcg1':   87.6/2.,
-                'hb':     1.5,
-                'htrou':  38.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_D1 = {'nbgouj': 8,
-                'dint':   49.22,
-                'dex1':   60.3,
-                'dex2':   84.,
-                'dex3':   100.,
-                'dtrou':  127.,
-                'dext':   165.,
-                'dt':     18.,
-                'drd':    30,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    87.6,
-                'hcg1':   87.6/2.,
-                'hb':     1.5,
-                'htrou':  38.5,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_E = {'nbgouj': 8,
-                'dint':   83.1,
-                'dex1':   88.9,
-                'dex2':   117.5,
-                'dex3':   135.,
-                'dtrou':  165.,
-                'dext':   209.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    80.,
-                'hcg1':   80./2.,
-                'hb':     2.,
-                'htrou':  27.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_F = {'nbgouj': 8,
-                'dint':   73.66,
-                'dex1':   88.9,
-                'dex2':   117.5,
-                'dex3':   135.,
-                'dtrou':  165.,
-                'dext':   209.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     2.,
-                'htrou':  36.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_FF = {'nbgouj': 32,
-                'dint':   396.99,
-                'dex1':   406.4,
-                'dex2':   440.,
-                'dex3':   455.,
-                'dtrou':  485.,
-                'dext':   535.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    99.,
-                'hcg1':   99./2.,
-                'hb':     3.,
-                'htrou':  40.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_G = {'nbgouj': 12,
-                'dint':   66.7,
-                'dex1':   88.9,
-                'dex2':   117.5,
-                'dex3':   135.,
-                'dtrou':  165.,
-                'dext':   209.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    98.,
-                'hcg1':   98./2.,
-                'hb':     2.,
-                'htrou':  45.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_GG = {'nbgouj': 36,
-                'dint':   381.,
-                'dex1':   406.4,
-                'dex2':   445.,
-                'dex3':   460.,
-                'dtrou':  495.,
-                'dext':   545.,
-                'dt':     22.,
-                'drd':    36,
-                'dg':     20.,
-                'dec':    30.,
-                'rcong':  5.,
-                'he':     20.,
-                'e':      3.,
-                'hc1':    129.,
-                'hcg1':   129./2.,
-                'hb':     3.,
-                'htrou':  63.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_H = {'nbgouj': 12,
-                'dint':   108.2,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   157.,
-                'dtrou':  190.,
-                'dext':   225.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     2.,
-                'htrou':  33.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_H1 = {'nbgouj': 12,
-                'dint':   102.6,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   157.,
-                'dtrou':  190.,
-                'dext':   225.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     2.,
-                'htrou':  33.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_I = {'nbgouj': 18,
-                'dint':   92.1,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   160.,
-                'dtrou':  200.,
-                'dext':   255.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    99.,
-                'hcg1':   99./2.,
-                'hb':     2.,
-                'htrou':  43.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_J = {'nbgouj': 18,
-                'dint':   87.34,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   160.,
-                'dtrou':  200.,
-                'dext':   255.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    111.,
-                'hcg1':   111./2.,
-                'hb':     2.,
-                'htrou':  55.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_J1 = {'nbgouj': 18,
-                'dint':   87.3,
-                'dex1':   114.3,
-                'dex2':   146.,
-                'dex3':   160.,
-                'dtrou':  200.,
-                'dext':   255.,
-                'dt':     22.,
-                'drd':    36.,
-                'dg':     20.,
-                'dec':    30.,
-                'rcong':  5.,
-                'he':     20.,
-                'e':      3.,
-                'hc1':    111.,
-                'hcg1':   111./2.,
-                'hb':     2.,
-                'htrou':  55.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_K = {'nbgouj': 8,
-                'dint':   161.5,
-                'dex1':   168.3,
-                'dex2':   192.,
-                'dex3':   210.,
-                'dtrou':  235.,
-                'dext':   280.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    84.,
-                'hcg1':   84./2.,
-                'hb':     2.,
-                'htrou':  28.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_L = {'nbgouj': 16,
-                'dint':   154.8,
-                'dex1':   168.3,
-                'dex2':   206.,
-                'dex3':   220.,
-                'dtrou':  255.,
-                'dext':   317.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    96.,
-                'hcg1':   96./2.,
-                'hb':     2.,
-                'htrou':  40.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_L1 = {'nbgouj': 16,
-                'dint':   154.8,
-                'dex1':   168.3,
-                'dex2':   206.,
-                'dex3':   220.,
-                'dtrou':  255.,
-                'dext':   317.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    96.,
-                'hcg1':   96./2.,
-                'hb':     2.,
-                'htrou':  40.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_M = {'nbgouj': 16,
-                'dint':   139.7,
-                'dex1':   168.3,
-                'dex2':   206.,
-                'dex3':   220.,
-                'dtrou':  250.,
-                'dext':   290.,
-                'dt':     24.,
-                'drd':    40.,
-                'dg':     22.,
-                'dec':    32.,
-                'rcong':  5.,
-                'he':     22.,
-                'e':      3.,
-                'hc1':    135.,
-                'hcg1':   135./2.,
-                'hb':     3.,
-                'htrou':  62.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_N = {'nbgouj': 12,
-                'dint':   131.9,
-                'dex1':   168.3,
-                'dex2':   220.,
-                'dex3':   240.,
-                'dtrou':  290.,
-                'dext':   365.,
-                'dt':     30.,
-                'drd':    48.,
-                'dg':     27.,
-                'dec':    41.,
-                'rcong':  5.,
-                'he':     27.,
-                'e':      4.,
-                'hc1':    148.,
-                'hcg1':   148./2.,
-                'hb':     3.,
-                'htrou':  75.,
-                'pf':     2.6,
-                'j':      2}
-dico_bride_O = {'nbgouj': 12,
-                'dint':   211.58,
-                'dex1':   219.1,
-                'dex2':   248.,
-                'dex3':   260.,
-                'dtrou':  292.,
-                'dext':   335.,
-                'dt':     20.,
-                'drd':    32.,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    87.,
-                'hcg1':   87./2.,
-                'hb':     3.,
-                'htrou':  30.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_P = {'nbgouj': 16,
-                'dint':   202.74,
-                'dex1':   219.1,
-                'dex2':   248.,
-                'dex3':   260.,
-                'dtrou':  292.,
-                'dext':   335.,
-                'dt':     20.,
-                'drd':    32,
-                'dg':     18.,
-                'dec':    27.,
-                'rcong':  5.,
-                'he':     18.,
-                'e':      3.,
-                'hc1':    99.,
-                'hcg1':   99./2.,
-                'hb':     3.,
-                'htrou':  42.,
-                'pf':     2.2,
-                'j':      2}
-dico_bride_S = {'nbgouj': 16,
-                'dint':   264.62,
-                'dex1':   273.,
-                'dex2':   305.,
-                'dex3':   315.,
-                'dtrou':  350.,
-                'dext':   390.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    89.,
-                'hcg1':   89./2.,
-                'hb':     3.,
-                'htrou':  32.,
-                'pf':     1.7,
-                'j':      2}
-dico_bride_T = {'nbgouj': 16,
-                'dint':   254.56,
-                'dex1':   273.,
-                'dex2':   320.,
-                'dex3':   340.,
-                'dtrou':  385.,
-                'dext':   444.,
-                'dt':     27.,
-                'drd':    45.,
-                'dg':     24.,
-                'dec':    36.,
-                'rcong':  5.,
-                'he':     24.,
-                'e':      4.,
-                'hc1':    128.,
-                'hcg1':   128./2.,
-                'hb':     3.,
-                'htrou':  55.,
-                'pf':     2.6,
-                'j':      2}
-dico_bride_W = {'nbgouj': 28,
-                'dint':   314.76,
-                'dex1':   323.9,
-                'dex2':   360.,
-                'dex3':   385.,
-                'dtrou':  415.,
-                'dext':   460.,
-                'dt':     18.,
-                'drd':    30.,
-                'dg':     16.,
-                'dec':    24.,
-                'rcong':  5.,
-                'he':     16.,
-                'e':      3.,
-                'hc1':    96.,
-                'hcg1':   96./2.,
-                'hb':     3.,
-                'htrou':  37.,
-                'pf':     1.7,
-                'j':      2}
-
-
-# dictionnaire pour faire le lien entre l'option de bride et les valeurs normalisées
-dico_bride_std = {'AA':dico_bride_AA,
-                  'A':dico_bride_A,
-                  'B':dico_bride_B,
-                  'B1':dico_bride_B1,
-                  'C':dico_bride_C,
-                  'D':dico_bride_D,
-                  'D1':dico_bride_D1,
-                  'E':dico_bride_E,
-                  'F':dico_bride_F,
-                  'FF':dico_bride_FF,
-                  'G':dico_bride_G,
-                  'GG':dico_bride_GG,
-                  'H':dico_bride_H,
-                  'H1':dico_bride_H1,
-                  'I':dico_bride_I,
-                  'J':dico_bride_J,
-                  'J1':dico_bride_J1,
-                  'K':dico_bride_K,
-                  'L':dico_bride_L,
-                  'L1':dico_bride_L1,
-                  'M':dico_bride_M,
-                  'N':dico_bride_N,
-                  'O':dico_bride_O,
-                  'P':dico_bride_P,
-                  'S':dico_bride_S,
-                  'T':dico_bride_T,
-                  'W':dico_bride_W}
diff --git a/Aster/Cata/Macro/macr_cabri_mail_ops.py b/Aster/Cata/Macro/macr_cabri_mail_ops.py
deleted file mode 100644 (file)
index 742d2c1..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-#@ MODIF macr_cabri_mail_ops Macro  DATE 20/05/2003   AUTEUR MABBAS M.ABBAS 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-
-# Variable pour préparer la restit (test->0, restit->1)
-RESTIT = 1
-
-def macr_cabri_mail_ops(self,EXEC_MAILLAGE,RAFF_MAILLAGE,VERI_MAIL,GEOM_BRID,
-                        IMPRESSION,**args):
-  """
-     Ecriture de la macro MACR_CABRI_MAIL
-  """
-  import types
-  from Accas import _F
-
-  ier=0
-
-  # On importe les definitions des commandes a utiliser dans la macro
-  # Le nom de la variable doit etre obligatoirement le nom de la commande
-  EXEC_LOGICIEL = self.get_cmd('EXEC_LOGICIEL')
-  LIRE_MAILLAGE = self.get_cmd('LIRE_MAILLAGE')
-  PRE_GIBI      = self.get_cmd('PRE_GIBI')
-  IMPR_RESU     = self.get_cmd('IMPR_RESU')
-
-  # La macro compte pour 1 dans la numerotation des commandes
-  self.set_icmd(1)
-
-  # Le concept sortant (de type mail) est nommé 'nomres' dans 
-  # le contexte de la macro
-  
-  self.DeclareOut('nomres',self.sd)
-  import aster 
-  
-  # Chemin de Gibi
-  loc_gibi=aster.repout()
-  gibi2000=loc_gibi+'gibi'
-  
-  # Unité pour le fichier maillage produit (format GIBI)
-  unite_mgib = EXEC_MAILLAGE['UNITE_MGIB']
-  # Unité pour le fichier de commandes GIBI
-  unite_datg = EXEC_MAILLAGE['UNITE_DATG']
-  # Niveau gibi
-  niveau_gibi = EXEC_MAILLAGE['NIVE_GIBI']
-  # Verif mail
-  ver_apla = VERI_MAIL['APLAT']
-  ver_veri = VERI_MAIL['VERIF']
-  
-  # Impression
-  if IMPRESSION['UNITE']!=None:
-   imp_unit = IMPRESSION['UNITE']
-   imp_unitF = 1
-  else:
-   imp_unitF = 0  
-  if IMPRESSION['FORMAT']!=None:
-   imp_form = IMPRESSION['FORMAT']
-   imp_formF = 1
-  else:
-   imp_formF = 0 
-  if IMPRESSION['FICHIER']!=None:
-   imp_fich = IMPRESSION['FICHIER']
-   imp_fichF = 1
-  else:
-   imp_fichF = 0 
-  # Maillage  
-  nrad = RAFF_MAILLAGE['NB_RADIAL']
-  ncir = RAFF_MAILLAGE['NB_CIRCONF']
-  nver = RAFF_MAILLAGE['NB_VERTICAL']
-  nsect = RAFF_MAILLAGE['NB_ALESAGE']
-  temps = 5.
-    
-  maillage = {'nrad': nrad,
-              'ncir': ncir,
-              'nver': nver,
-              'nsect': nsect,
-              'temps' : temps,}
-
-  # Création du fichier datg
-  
-  if GEOM_BRID['NORME'] == 'OUI':
-    # Bride standard
-    type_bride = GEOM_BRID['TYPE']
-    ### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-    write_file_dgib_STD(unite_mgib,unite_datg,maillage,type_bride) 
-  else:
-    # Bride quelconque
-    geo_bride_qqe = {'nbgouj': GEOM_BRID['GOUJ_N_GOUJON'],
-                'dint':   GEOM_BRID['BRID_D_INT'],
-                'dex1':   GEOM_BRID['TUBU_D_EXT'],
-                'dex2':   GEOM_BRID['BRID_D_CONGE'],
-                'dex3':   GEOM_BRID['BRID_D_EPAUL'],
-                'dtrou':  GEOM_BRID['BRID_P_ALESAG'],
-                'dext':   GEOM_BRID['BRID_D_EXT'],
-                'dt':     GEOM_BRID['BRID_D_ALESAG'],
-                'drd':    GEOM_BRID['GOUJ_D_RONDEL'],
-                'dg':     GEOM_BRID['GOUJ_D_GOUJON'],
-                'dec':    GEOM_BRID['GOUJ_D_ECROU'],
-                'rcong':  GEOM_BRID['BRID_R_CONGE'],
-                'he':     GEOM_BRID['GOUJ_E_ECROU'],
-                'e':      GEOM_BRID['GOUJ_E_RONDEL'],
-                'hc1':    GEOM_BRID['BRID_H'],
-                'hcg1':   GEOM_BRID['TUBU_H'],
-                'hb':     GEOM_BRID['BRID_H_EPAUL'],
-                'htrou':  GEOM_BRID['BRID_H_ALESAG'],
-                'pf':     GEOM_BRID['GOUJ_E_FILET'],
-                'j':      GEOM_BRID['ETAN_E_JOINT']}  
-    ### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-    write_file_dgib_QQE(unite_mgib,unite_datg,maillage,geo_bride_qqe)  
-
-  fichier_datg = 'fort.'+str(unite_datg)
-  fichier_mgib = 'fort.'+str(unite_mgib)
-  
-  # Lancement de GIBI
-  EXEC_LOGICIEL(
-               LOGICIEL=gibi2000,
-               ARGUMENT=(_F(NOM_PARA=fichier_datg),
-                         _F(NOM_PARA=fichier_mgib),
-                         )
-               )
-  # Lecture du maillage GIBI dans ASTER
-  PRE_GIBI(
-          UNITE_GIBI = unite_mgib,
-          )
-  
-  nomres = LIRE_MAILLAGE(VERI_MAIL=_F(APLAT = ver_apla,
-                                      VERIF = ver_veri ),)
-                                      
-  if (imp_fichF == 1):  
-   print imp_fich
-  if (imp_formF == 1):  
-   print imp_form
-  if (imp_unitF == 1):  
-   print imp_unit    
-  # Impression du fichier maillage
-  if (imp_formF == 1):
-    if (imp_form == 'CASTEM'):
-      imp_ngib = IMPRESSION['NIVE_GIBI']
-      IMPR_RESU(RESU = _F(MAILLAGE=nomres,
-                          FORMAT = 'CASTEM',
-                          NIVE_GIBI = imp_ngib,),)
-    if (imp_form == 'IDEAS'):
-      imp_nver = IMPRESSION['VERSION']
-      IMPR_RESU(RESU = _F(MAILLAGE=nomres,
-                          FORMAT = 'IDEAS',
-                          VERSION = imp_nver,),)                
-  return ier
-
-
-##############################################################################################
-# Liste des fonctions
-##############################################################################################
-
-#############
-## EXTERNES (appelables depuis l'extérieur)
-#############
-
-### Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-# null = write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride)
-
-### Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-# null = write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride)
-
-### Imprime tout le catalogue des brides standards disponibles dans un fichier texte
-# null = print_bride_std(nom_fichier)
-### Catalogue complet des brides standards disponibles
-# txt = bride_std()
-
-#############
-## INTERNES (réservées au travail interne)
-#############
-
-### Génération du nom du fichier pour le fichier maillage résultant (format GIBI)
-# NomFichier(txt) = name_file_mgib(unite_mgib):
-
-### Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI)
-# NomFichier(txt) = name_file_datg(unite_datg):
-
-### Récupère un fichier texte DATG
-# Txt = text_datg(fichier_datg):
-
-### Génération du texte pour les variables
-# Txt = para_text(dico_var,var): 
-
-
-
-#=============================================================================================
-# Importation des modules Python
-#=============================================================================================
-
-import os
-from Macro.macr_cabri_mail_dat import *
-
-#=============================================================================================
-# Fonctions principales
-#=============================================================================================
-# Ecriture du fichier GIBI principal (dgib) - Bride STANDARD
-def write_file_dgib_STD(unite_mgib,unite_datg,msh_bride,geo_bride):
-
-    # Nom du fichier maillage produit par GIBI
-    nomFichierMGIB = name_file_mgib(unite_mgib)
-    # Nom du fichier de commandes pour GIBI
-    nomFichierDATG = name_file_datg(unite_datg)
-        
-    # Ouverture du fichier d'entrée de commandes
-    fdgib=open(nomFichierDATG,'w')
-    
-    # En-tete
-    text =        "**************************************************************\n"
-    text = text + "* Fichier GIBI pour le maillage d'une bride \n"
-    text = text + "**************************************************************\n"
-    text = text + "\n"
-    text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n"
-    text = text + "* Ne pas modifier\n"
-    text = text + "\n"    
-    text = text + "**************************************************************\n"
-    text = text + "* Type bride: Bride standard \n"
-    text = text + "**************************************************************\n"
-    text = text + "titre '"+"Bride standard"+"';\n"
-    text = text + "** Type bride standard: "+geo_bride+"\n"
-   
-    text = text + "\n"
-    text = text + "opti dime 3 \n"
-    text = text + " elem cub8 SAUV FORM '"+nomFichierMGIB+"';\n"   
-    text = text + "opti nive 10;\n"
-    text = text + "dens 1;\n"
-    text = text + "\n"
-    fdgib.write(text)
-    
-    # Procédures internes supplémentaires
-    text =        "**************************************************************\n"
-    text = text + "* Procédures supplémentaires \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_pro()
-    fdgib.write(text)
-    
-    # Début de procédure de création du maillage
-    text =        "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "********* Début de procédure de création du maillage *********\n"
-    text = text + "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "\n debproc constru;\n"
-    fdgib.write(text)
-
-    # Paramètres géométriques
-    car_bride = dico_bride_std[geo_bride]
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres géométriques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_geo,car_bride)
-    fdgib.write(text) 
-
-    # Paramètres du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres physiques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_msh,msh_bride)
-    fdgib.write(text) 
-
-    # Algorithme du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Algorithme de maillage \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_std()
-    fdgib.write(text)
-    
-    # Fermeture du fichier maillage
-    fdgib.close()
-    
-    
-# Ecriture du fichier GIBI principal (dgib) - Bride QUELCONQUE
-def write_file_dgib_QQE(unite_mgib,unite_datg,msh_bride,geo_bride):
-    import aster
-        
-    # Nom du fichier maillage produit par GIBI
-    nomFichierMGIB = name_file_mgib(unite_mgib)
-    # Nom du fichier de commandes pour GIBI
-    nomFichierDATG = name_file_datg(unite_datg)
-      
-    # Ouverture du fichier d'entree de commandes
-    fdgib=open(nomFichierDATG,'w')
-    
-    # En-tete
-    text =        "**************************************************************\n"
-    text = text + "* Fichier GIBI pour le maillage d'une bride \n"
-    text = text + "**************************************************************\n"
-    text = text + "\n"
-    text = text + "* Ce fichier a été généré automatiquement par la macro ASTER MACR_CABRI_MAIL \n"
-    text = text + "* Ne pas modifier\n"
-    text = text + "\n"    
-    text = text + "**************************************************************\n"
-    text = text + "* Type bride: Bride quelconque\n"
-    text = text + "**************************************************************\n"
-    text = text + "titre '"+"Bride Quelconque"+"';\n"
-    text = text + "\n"
-    text = text + "opti dime 3 \n"
-    text = text + " elem cub8 SAUV FORM '"+nomFichierMGIB+"';\n"   
-    text = text + "dens 1;\n"
-    text = text + "\n"
-    fdgib.write(text)
-    
-    # Procédures internes supplémentaires
-    text =        "**************************************************************\n"
-    text = text + "* Procédures supplémentaires \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_pro()
-    fdgib.write(text)
-    
-    # Début de procédure de création du maillage
-    text =        "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "********* Début de procédure de création du maillage *********\n"
-    text = text + "**************************************************************\n"
-    text = text + "**************************************************************\n"
-    text = text + "\n debproc constru;\n"
-    fdgib.write(text)
-
-    # Paramètres géométriques
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres géométriques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_geo,geo_bride)
-    fdgib.write(text) 
-
-    # Paramètres du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Paramètres physiques \n"
-    text = text + "**************************************************************\n"
-    text = text + para_text(dico_var_msh,msh_bride)
-    fdgib.write(text) 
-
-    # Algorithme du maillage
-    text =        "**************************************************************\n"
-    text = text + "* Algorithme de maillage \n"
-    text = text + "**************************************************************\n"
-    text = text + text_datg_qqe()
-    fdgib.write(text)
-    
-    # Fermeture du fichier maillage
-    fdgib.close()
-
-# Génération du nom du fichier pour le fichier maillage résultant (format GIBI)
-def name_file_mgib(unite_mgib):
-    cur_dir = os.getcwd()
-    nomFichier = cur_dir+'/fort.'+str(unite_mgib)
-    return nomFichier
-
-
-# Génération du nom du fichier pour le fichier générant le maillage (commandes GIBI)
-def name_file_datg(unite_datg):
-    cur_dir = os.getcwd()
-    nomFichier = cur_dir+'/fort.'+str(unite_datg)
-    return nomFichier
-
-# Récupère un fichier texte DATG: texte GIBI pour procédures
-def text_datg_pro():
-   if RESTIT == 1:
-      import aster
-      loc_datg = aster.repdex()
-      datg_bridePro  = loc_datg+"macr_cabri_mail_proc.datg"
-   else:
-      datg_bridePro = 'fort.'+str(39)
-      
-   fproc=open(datg_bridePro,'r')
-   procText = fproc.read()
-   fproc.close()
-
-   return procText
-
-# Récupère un fichier texte DATG: texte GIBI pour bride quelconque
-def text_datg_qqe():
-   if RESTIT == 1:
-      import aster
-      loc_datg = aster.repdex()
-      datg_brideQqe  = loc_datg+"macr_cabri_mail_qqe.datg"
-   else:
-      datg_brideQqe = 'fort.'+str(38)
-      
-   fproc=open(datg_brideQqe,'r')
-   procText = fproc.read()
-   fproc.close()
-
-   return procText
-
-# Récupère un fichier texte DATG: texte GIBI pour bride standard
-def text_datg_std():
-   if RESTIT == 1:
-      import aster
-      loc_datg = aster.repdex()
-      datg_brideStd  = loc_datg+"macr_cabri_mail_std.datg"
-   else:
-      datg_brideStd = 'fort.'+str(37)
-      
-   fproc=open(datg_brideStd,'r')
-   procText = fproc.read()
-   fproc.close()
-
-   return procText
-
-# Génération du texte pour les variables
-def para_text(dico_var,var):
-    text = '\n'
-    for nom_var in var.keys():
-        text = text+"* "+dico_var[nom_var]+"\n"
-        text = text+nom_var+" = "+`var[nom_var]`+";\n"
-    return text
-
-#=============================================================================================
-# Accès au catalogue des brides standards
-# (les brides standards sont décrites dans le fichier Data_Brides.py)
-#=============================================================================================
-
-# Imprime tout le catalogue des brides standards disponibles dans un fichier texte
-def print_bride_std(nom_fichier):
-    text = bride_std()
-    # Ouverture du fichier
-    finfo=open(nom_fichier,'w')
-    # Ecriture des infos
-    finfo.write(text)
-    # Fermeture du fichier
-    finfo.close()
-
-# Catalogue complet des brides standards disponibles
-def bride_std():
-    # Ligne d'info
-    text = "Liste des brides standards avec leurs dimensions\n"
-    # Première ligne
-    text = text+"\t"
-    for nom_variable in dico_var_geo.keys():      
-        text = text + nom_variable+"\t\t"
-    text = text + "\n"
-    # Lignes suivantes
-    for nom_bride in dico_bride_std.keys():
-        bride = dico_bride_std[nom_bride]    
-        text = text + nom_bride + '\t'
-        for nom_var in dico_var_geo.keys():
-            chaine = "%f" % (bride[nom_var])
-            text = text+chaine+"\t"               
-        text = text + "\n"
-    return text
index cfa750079074adf80b5af3f89d97e577bd506260..73b9e2462056710c3ad8c7b5d96acbe97c954469 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF reca_algo Macro  DATE 04/07/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF reca_algo Macro  DATE 13/01/2003   AUTEUR PABHHHH N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -22,9 +22,7 @@ from Numeric import take
 import copy,os
 import LinearAlgebra 
 from Cata.cata import INFO_EXEC_ASTER
-from Cata.cata import DETRUIRE
 from Macro.recal import EXTRACT
-from Accas import _F
 
 
 def calcul_gradient(A,erreur):
@@ -109,7 +107,6 @@ def temps_CPU(self,restant_old,temps_iter_old):
    # Fonction controlant le temps CPU restant
    CPU=INFO_EXEC_ASTER(LISTE_INFO = ("CPU_RESTANT",))
    TEMPS=CPU['CPU_RESTANT',1]
-   DETRUIRE(CONCEPT=_F(NOM='CPU'))
    err=0
    # Indique une execution interactive
    if (TEMPS>1.E+9):
@@ -213,8 +210,8 @@ def actualise_lambda(l,val,new_val,A,erreur,new_J,old_J):
    Q=Numeric.matrixmultiply(Numeric.transpose(A),A) +l*id
    # Second membre du système
    d=Numeric.matrixmultiply(Numeric.transpose(A),erreur)
-   old_Q=old_J
-   new_Q=old_J+0.5*Numeric.dot(Numeric.transpose(new_val-val),Numeric.dot(Q,new_val-val))+Numeric.dot(Numeric.transpose(new_val-val),d)
+   old_Q=0.5*Numeric.dot(Numeric.transpose(val),Numeric.dot(Q,val))+Numeric.dot(Numeric.transpose(val),d)
+   new_Q=0.5*Numeric.dot(Numeric.transpose(new_val),Numeric.dot(Q,new_val))+Numeric.dot(Numeric.transpose(new_val),d)
    # Ratio de la décroissance réelle et de l'approx. quad.
    try:
       R=(old_J-new_J)/(old_Q-new_Q)
index 5129d34bee73562dab44628eca53bce52c0a77e4..01ee9db0d5a76bdab3b184f0ea4042cc39736134 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF recal Macro  DATE 10/07/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF recal Macro  DATE 31/01/2003   AUTEUR PABHHHH N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -53,9 +53,9 @@ def transforme_list_Num(parametres,res_exp):
 def mes_concepts(list_concepts=[],base=None):
   # Fonction qui liste les concepts créés
    for e in base.etapes:
-      if e.nom in ('INCLUDE','MACR_RECAL',) :
+      if e.__class__.__name__ == 'MACRO_ETAPE':
         list_concepts=list(mes_concepts(list_concepts=list_concepts,base=e))
-      elif (e.sd != None) and (e.parent.nom=='INCLUDE') :
+      elif e.sd != None:
         nom_concept=e.sd.get_name()
         if not(nom_concept in list_concepts):
           list_concepts.append( nom_concept )
@@ -140,7 +140,6 @@ def calcul_F(self,UL,para,val,reponses):
       
       #on ajoute dans L tous ce qui est avant le premier paramètre 
       Fichier_Resu.append(pre_bloc)
-      Fichier_Resu.append('\n')
       #On ajoute la nouvelle valeur des parametres
       dim_para=len(para)
       for j in range(dim_para):
index 4204f5e08f6e97f14bf68af984cfb23c717743af..0dd33be16446053a10506bf0019db6bc9e5043df 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 22/10/2002   AUTEUR MCOURTOI M.COURTOIS 
 #            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")),
+                DIRE_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'),
@@ -1248,29 +1304,45 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              PRES            =SIMP(statut='f',typ='R' ),
            ),
-             
-        INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
-                                 min=1,max='**',
+          
+         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('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
-                     EXCLUS('TRANS','SYME'),),
+                     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='**'),
-             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-             TRANS           =SIMP(statut='f',typ='R',max='**'),
-             SYME            =SIMP(statut='f',typ='R',max='**'),
+             
+               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_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='**'),
@@ -1283,142 +1355,81 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              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",
+         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=(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='**'),
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','POSITION'),
+                     EXCLUS('FX','POSITION'),
+                     EXCLUS('FY','POSITION'),   
+                     EXCLUS('FZ','POSITION'),),
+#  trop de regles : les blocs conditionnels permettent d en suprimer              
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+              
+             FX              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FY              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FZ              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              
-             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' ),
-           ), 
+             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),
+             ), 
+           ),
 
-           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",min=1,max='**',
-             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-             NOEUD           =SIMP(statut='f',typ=no,max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
-           ), 
 
-           LIAISON_UNIF    =FACT(statut='f',fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
+
+             
+        INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
                                  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='**'),
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+                     EXCLUS('TRANS','SYME'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-             DDL             =SIMP(statut='o',typ='TXM',max='**'),
-           ), 
-
-         LIAISON_UNIL_NO =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
-                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),# CO()
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),# CO()
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),# CO()
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),# CO()
-           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           TRAN            =SIMP(statut='f',typ='R',max=3 ),  
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),  
-           CENTRE          =SIMP(statut='f',typ='R',max=3 ),  
-           ANGLE_MAX       =SIMP(statut='f',typ='R' ),  
-           VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="SANS",   
-                                 into=("SANS","TRESCA","COULOMB") ),
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="CONTRAINTE",    
-                                 into=("CONTRAINTE","LAGRANGIEN","PENALISATION") ),
-           COULOMB         =SIMP(statut='f',typ='R' ),  
-           TRESCA          =SIMP(statut='f',typ='R' ),  
-           E_T             =SIMP(statut='f',typ='R' ),  
-           COEF_MATR_FROT  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
-           CONTACT         =SIMP(statut='f',typ='TXM',into=("MAINTENU",) ),
-           JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
-         ),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             TRANS           =SIMP(statut='f',typ='R',max='**'),
+             SYME            =SIMP(statut='f',typ='R',max='**'),
+           ),
          
-           LIAISON_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",) ),
-         ),
+
+         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",min=1,max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
          
+         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' ),
+           ),
+           
+
+
          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 22/10/2002   AUTEUR MCOURTOI M.COURTOIS 
 #            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'),
@@ -1586,24 +1581,51 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            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'),),
+
+         FACE_IMPO       =FACT(statut='f',min=1,max='**',
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
+                   EXCLUS('DNOR','DX'),
+                   EXCLUS('DNOR','DY'),
+                   EXCLUS('DNOR','DZ'),
+                   EXCLUS('DNOR','DRX'),
+                   EXCLUS('DNOR','DRY'),
+                   EXCLUS('DNOR','DRZ'),
+                   EXCLUS('DTAN','DX'),
+                   EXCLUS('DTAN','DY'),
+                   EXCLUS('DTAN','DZ'),
+                   EXCLUS('DTAN','DRX'),
+                   EXCLUS('DTAN','DRY'),
+                   EXCLUS('DTAN','DRZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           DX              =SIMP(statut='f',typ=(fonction) ),
+           DY              =SIMP(statut='f',typ=(fonction) ),
+           DZ              =SIMP(statut='f',typ=(fonction) ),
+           DRX             =SIMP(statut='f',typ=(fonction) ),
+           DRY             =SIMP(statut='f',typ=(fonction) ),
+           DRZ             =SIMP(statut='f',typ=(fonction) ),
+           GRX             =SIMP(statut='f',typ=(fonction) ),
+           PRES            =SIMP(statut='f',typ=(fonction) ),
+           PHI             =SIMP(statut='f',typ=(fonction) ),
+           TEMP            =SIMP(statut='f',typ=(fonction) ),
+           PRE1            =SIMP(statut='f',typ=(fonction) ),
+           PRE2            =SIMP(statut='f',typ=(fonction) ),
+           DNOR            =SIMP(statut='f',typ=(fonction) ),
+           DTAN            =SIMP(statut='f',typ=(fonction) ),
          ),
-         LIAISON_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='**'),
+         
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
+                               fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
-           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           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'),
@@ -1617,8 +1639,21 @@ 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) ),
-         ),
-         LIAISON_COQUE   =FACT(statut='f',min=1,max='**',
+         ),         
+         
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
+                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                   EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                   EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                   EXCLUS('GROUP_NO_1','MAILLE_2'),
+                   EXCLUS('MAILLE_1','GROUP_NO_2'),
+                   EXCLUS('MAILLE_1','NOEUD_2'),
+                   EXCLUS('NOEUD_1','GROUP_MA_2'),
+                   EXCLUS('NOEUD_1','MAILLE_2'),
+                   EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
            GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
            MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
            GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
@@ -1627,84 +1662,130 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            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",) ),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
+           DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',max=3),
          ),
-         FACE_IMPO       =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_MA','MAILLE'),
-                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
-                   EXCLUS('DNOR','DX'),
-                   EXCLUS('DNOR','DY'),
-                   EXCLUS('DNOR','DZ'),
-                   EXCLUS('DNOR','DRX'),
-                   EXCLUS('DNOR','DRY'),
-                   EXCLUS('DNOR','DRZ'),
-                   EXCLUS('DTAN','DX'),
-                   EXCLUS('DTAN','DY'),
-                   EXCLUS('DTAN','DZ'),
-                   EXCLUS('DTAN','DRX'),
-                   EXCLUS('DTAN','DRY'),
-                   EXCLUS('DTAN','DRZ'),),
-#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+
+         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")),
+                DIRE_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='**'),
-           DX              =SIMP(statut='f',typ=(fonction) ),
-           DY              =SIMP(statut='f',typ=(fonction) ),
-           DZ              =SIMP(statut='f',typ=(fonction) ),
-           DRX             =SIMP(statut='f',typ=(fonction) ),
-           DRY             =SIMP(statut='f',typ=(fonction) ),
-           DRZ             =SIMP(statut='f',typ=(fonction) ),
-           GRX             =SIMP(statut='f',typ=(fonction) ),
-           PRES            =SIMP(statut='f',typ=(fonction) ),
-           PHI             =SIMP(statut='f',typ=(fonction) ),
-           TEMP            =SIMP(statut='f',typ=(fonction) ),
-           PRE1            =SIMP(statut='f',typ=(fonction) ),
-           PRE2            =SIMP(statut='f',typ=(fonction) ),
-           DNOR            =SIMP(statut='f',typ=(fonction) ),
-           DTAN            =SIMP(statut='f',typ=(fonction) ),
-         ),
-         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
-                               fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
-           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
-           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
-           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
          ),
-         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
-                               fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
-           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
-                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
-                   EXCLUS('GROUP_MA_1','GROUP_NO_2'),
-                   EXCLUS('GROUP_MA_1','NOEUD_2'),
-                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
-                   EXCLUS('GROUP_NO_1','MAILLE_2'),
-                   EXCLUS('MAILLE_1','GROUP_NO_2'),
-                   EXCLUS('MAILLE_1','NOEUD_2'),
-                   EXCLUS('NOEUD_1','GROUP_MA_2'),
-                   EXCLUS('NOEUD_1','MAILLE_2'),
-                   EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
-           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
-           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
-           DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
-           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
-           DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
-           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
-           COEF_IMPO       =SIMP(statut='o',typ=(fonction) ),
-           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           TRAN            =SIMP(statut='f',typ='R',max=3),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
-           CENTRE          =SIMP(statut='f',typ='R',max=3),
+
+         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'),),
@@ -1858,69 +1973,9 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            FONC_SIGNAL     =SIMP(statut='o',typ=(fonction) ),
            DIST_ORIG       =SIMP(statut='o',typ='R' ),
          ),
-         EPSI_INIT       =FACT(statut='f',min=1,max='**',
-           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
-                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
-                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
-           EPXX            =SIMP(statut='f',typ=(fonction) ),
-           EPYY            =SIMP(statut='f',typ=(fonction) ),
-           EPZZ            =SIMP(statut='f',typ=(fonction) ),
-           EPXY            =SIMP(statut='f',typ=(fonction) ),
-           EPXZ            =SIMP(statut='f',typ=(fonction) ),
-           EPYZ            =SIMP(statut='f',typ=(fonction) ),
-         ),
 
-         CONTACT         =FACT(statut='f',min=1,max='**',
-           regles=(UN_PARMI('GROUP_MA_2','MAILLE_2'),
-                   EXCLUS('DIST_2','COEF_IMPO'),
-                   EXCLUS('DIST_1','COEF_IMPO'),
-                   EXCLUS('COEF_MULT_2','GROUP_MA_1'),
-                   EXCLUS('COEF_MULT_2','MAILLE_1'),
-                   EXCLUS('COEF_IMPO','GROUP_MA_1'),
-                   EXCLUS('COEF_IMPO','MAILLE_1'),),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","PRES","TEMP") ),
-           APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
-                                 into=("NON","NODAL","NODAL_SYME","MAIT_ESCL","MAIT_ESCL_SYME") ),
-           RECHERCHE       =SIMP(statut='f',typ='TXM',defaut="NOEUD_VOISIN",
-                                 into=("NOEUD_BOUCLE","NOEUD_VOISIN") ),
-           INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",into=("GAUSS","NOEUD")),
-           COEF_REGU_CONT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-           COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
-           MODL_AXIS       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-           ITER_GEOM_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-           ITER_CONT_MAXI  =SIMP(statut='f',typ='I',defaut=30),
-           ITER_FROT_MAXI  =SIMP(statut='f',typ='I',defaut=2),
-           LISSAGE         =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
-           SEUIL_INIT      =SIMP(statut='f',typ='I',defaut=0),
-           REAC_GEOM       =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),
-         ),
+
+
          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,23 +5807,23 @@ 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 14/10/2002   AUTEUR VABHHTS J.PELLET 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 def defi_group_prod(MAILLAGE,**args):
@@ -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',
-         regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO'),),            
+            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),
@@ -5665,59 +5851,59 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
            OPTION          =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE","BANDE") ),
            b_group_ma      =BLOC(condition = "GROUP_MA != None",
              regles=(EXCLUS('POSITION','NUME_INIT'),),
-             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),             
-             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ),
              b_nume_init   =BLOC(condition = "NUME_INIT != None",
                NUME_FIN        =SIMP(statut='f',typ='I' ),
-             ),      
+             ),
            ),
            b_face_normale  =BLOC(condition = "OPTION == 'FACE_NORMALE'",
              regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             ANGL_NAUT       =SIMP(statut='f',typ='R',max=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") ),     
+             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' ),    
+             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),   
+             RAYON           =SIMP(statut='o',typ='R' ),
+             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'),
                    EXCLUS ('TOUT_GROUP_MA','GROUP_MA','NOEUD','INTERSEC','UNION','DIFFE'),),
-           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),               
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
-             
+
            NOEUD           =SIMP(statut='f',typ=no,max='**'),
            INTERSEC        =SIMP(statut='f',typ=grno,max='**'),
            UNION           =SIMP(statut='f',typ=grno,max='**'),
            DIFFE           =SIMP(statut='f',typ=grno,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
-                                                            "SEGM_DROI_ORDO","NOEUD_ORDO") ),  
+                                                            "SEGM_DROI_ORDO","NOEUD_ORDO") ),
            b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
              NOM             =SIMP(statut='f',typ=grma,max='**'),
            ),
@@ -5726,19 +5912,19 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
                             into=("TOUS","SOMMET","MILIEU","CENTRE"),),),
            b_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
              NOM             =SIMP(statut='o',typ=geom),
-           ),                                                 
+           ),
            b_group_no      =BLOC(condition = "GROUP_NO != None",
              regles=(EXCLUS('POSITION','NUME_INIT'),),
-             NUME_INIT       =SIMP(statut='f',typ='I',defaut= 1 ),
-             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ), 
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+             POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ),
              b_nume_init     =BLOC(condition = "NUME_INIT != None",
                NUME_FIN        =SIMP(statut='f',typ='I' ),
-             ),      
+             ),
            ),
            b_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,27 +5932,27 @@ 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") ),
            ),
            b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
              regles=(UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
-                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),), 
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
              NOEUD_ORIG      =SIMP(statut='f',typ=no),
              GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
              NOEUD_EXTR      =SIMP(statut='f',typ=no),
@@ -5783,11 +5969,11 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
              GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
              PRECISION       =SIMP(statut='f',typ='R' ),
              CRITERE         =SIMP(statut='f',typ='TXM',into=("ABSOLU","RELATIF") ),
-           ),      
+           ),
          ),
          INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
 )  ;
-#& MODIF COMMANDE  DATE 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 14/10/2002   AUTEUR BOYERE E.BOYERE 
 #            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,23 +8263,22 @@ 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'),),
-#  Toutes les regles ne semblent pas avoir été ecrites dans la doc U
+         REPONSE         =FACT(statut='f',min=1,max=1,
+           regles=( ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
            DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
            FREQ_MIN        =SIMP(statut='f',typ='R' ),
            FREQ_MAX        =SIMP(statut='f',typ='R' ),
            PAS             =SIMP(statut='f',typ='R' ),
-           FREQ_EXCIT      =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
-           NB_POIN_MODE    =SIMP(statut='f',typ='I',defaut= 50 ),
+           b_defaut_freq   =BLOC(condition = "FREQ_MIN == NONE",
+              FREQ_EXCIT      =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
+              NB_POIN_MODE    =SIMP(statut='f',typ='I',defaut= 50 ),
+           ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 26/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 +8306,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 +8324,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 +8346,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 +8367,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 +8377,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 +8404,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 +8420,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 +8461,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 +8470,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 +8490,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 +8508,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 +8564,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 +8602,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 +8612,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 +8647,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 +8711,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 +8742,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 +8959,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 +8980,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 +9009,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 +9022,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 +9034,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 +9046,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 +9056,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 +9071,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 +9115,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 +9140,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 +9156,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 +9187,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 +9216,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 +9225,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 +9244,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 +9268,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 +9277,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 +9286,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 +9296,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 +9326,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 +9359,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 +9384,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 +9394,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 +9415,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 +9426,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 +9456,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 +9474,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 +9495,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 +9518,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 +9527,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 15/10/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9324,6 +9547,7 @@ 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 17/09/2001   AUTEUR MCOURTOI M.COURTOIS 
@@ -9351,7 +9575,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 +9596,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 +9624,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 +9651,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 +9660,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 +9681,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 +9706,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 +9722,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 +9730,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 +9750,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 +9762,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 +9783,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 +9819,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 +9889,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 +9909,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 +9934,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 +10113,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 +10149,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 +10170,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 +10211,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 +10230,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 +10260,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 +10286,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 +10319,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 +10340,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 +10363,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 +10385,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 +10405,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 +10431,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 16/10/2002   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10213,9 +10450,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") ),
 
@@ -10290,7 +10528,8 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g1",
              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            ),
 
-           b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS'))""",
+           b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
+                                   ((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'MED'))""",
                                    fr="sélection des entités toplogiques",
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              NOEUD           =SIMP(statut='f',typ=no,max='**'),
@@ -10314,7 +10553,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 +10573,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 +10594,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 +10614,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 +10650,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 +10669,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 +10694,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 +10706,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 +10732,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 +10750,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 +10761,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 +10783,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 +10794,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 +10814,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 +10833,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 +10860,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 +10930,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 +10951,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 +10969,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 +10990,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 +11003,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 +11026,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 +11061,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 +11076,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 +11104,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 +11123,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 +11143,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 +11256,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 +11286,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 +11313,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 +11326,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 +11368,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 +11579,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 +11610,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 +11644,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 +11786,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 +11807,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 +11933,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 +11964,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 +12000,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 +12152,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 +12173,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 +12246,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 +12267,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 +12277,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 +12296,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 +12326,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 +12346,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 +12359,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 +12375,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 +12395,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 +12426,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 +12455,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 +12505,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 +12535,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 +12553,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 +12617,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 +12635,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 +12655,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 +12664,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 +12693,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 +12744,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 +12763,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 +12782,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 +12793,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 +12822,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 +12896,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 +12940,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 +12973,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 +12995,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 +13008,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 +13036,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 +13076,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 +13104,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 +13136,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 +13155,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 +13174,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 +13190,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 +13246,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 +13266,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 +13306,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 +13327,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 +13360,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 +13389,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 +13445,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 +13474,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 +13525,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 +13556,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 +13574,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 +13600,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 +13614,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 +13624,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 +13643,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 +13663,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 +13675,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 +13723,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 +13739,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 +13777,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 +13813,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 +13829,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 +13861,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 +13882,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 +13907,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 +13934,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 +13946,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 +13955,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 +13975,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 +13996,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 +14017,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 +14029,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 +14050,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 +14066,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 +14074,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 +14100,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 +14121,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 +14134,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 +14142,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 +14182,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 +14547,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 +14566,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 +14582,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 +14601,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 +14660,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 +14680,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 +14705,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 +14748,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 +14772,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 +14792,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 +14803,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 +14813,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 +14839,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 +14855,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 +15014,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 +15097,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 +15117,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 +15129,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 +15148,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 +15168,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 +15184,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 +15205,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 +15213,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 +15243,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 +15262,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 +15287,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 +15307,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"),
@@ -14880,7 +15375,7 @@ PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
          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 +15394,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 +15421,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 +15447,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 +15471,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 +15495,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 +15527,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 +15566,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 +15598,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 +15615,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 +15643,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 +15651,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 +15669,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 +15730,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 +15750,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 +15771,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 +15779,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 +15799,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 +15825,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 +15865,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 +15882,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 +16049,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 +16068,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 +16077,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 +16098,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 +16132,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 +16142,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 +16172,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 +16181,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 +16211,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 +16236,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 +16253,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 +16273,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 +16296,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 +16315,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 +16340,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 +16434,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 +16452,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 +16521,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 +16543,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 +16574,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 +16772,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 +16793,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 +16814,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 +16830,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 +16858,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 +16880,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 +16906,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 +16931,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 +16964,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 +16990,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 +17011,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 +17045,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 +17064,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 +17134,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 +17153,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 +17245,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 +17266,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 5e3dfbc8664a99f19a7c4caa7b82c03abf2fb5e4..719822379c4e227f56d9c636b1b9a30ffcec5e85 100755 (executable)
@@ -1,4 +1,4 @@
-#& MODIF ENTETE  DATE 02/06/2003   AUTEUR F1BHHAJ J.ANGLE
+#& MODIF ENTETE  DATE 18/03/2003   AUTEUR MCOURTOI M.COURTOI
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -135,6 +135,7 @@ class carte_hydr_r   (carte):pass
 class carte_inst_r   (carte):pass
 class carte_inte_r   (carte):pass
 class carte_irra_r   (carte):pass
+class carte_meta_r   (carte):pass
 class carte_neut_f   (carte):pass
 class carte_neut_r   (carte):pass
 class carte_pres_r   (carte):pass
@@ -168,6 +169,7 @@ class cham_elem_hydr_r(cham_elem):pass
 class cham_elem_inst_r(cham_elem):pass
 class cham_elem_inte_r(cham_elem):pass
 class cham_elem_irra_r(cham_elem):pass
+class cham_elem_meta_r(cham_elem):pass
 class cham_elem_neut_f(cham_elem):pass
 class cham_elem_neut_r(cham_elem):pass
 class cham_elem_pres_r(cham_elem):pass
@@ -192,7 +194,6 @@ class cham_no_durt_r   (cham_no):pass
 class cham_no_ener_r   (cham_no):pass
 class cham_no_epsi_r   (cham_no):pass
 class cham_no_erreur   (cham_no):pass
-class cham_no_facy_r   (cham_no):pass
 class cham_no_flux_r   (cham_no):pass
 class cham_no_g_depl_r (cham_no):pass
 class cham_no_geom_r   (cham_no):pass
@@ -200,6 +201,7 @@ class cham_no_hydr_r   (cham_no):pass
 class cham_no_inst_r   (cham_no):pass
 class cham_no_inte_r   (cham_no):pass
 class cham_no_irra_r   (cham_no):pass
+class cham_no_meta_r   (cham_no):pass
 class cham_no_neut_f   (cham_no):pass
 class cham_no_neut_r   (cham_no):pass
 class cham_no_pres_c   (cham_no):pass
@@ -373,8 +375,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 COMMUN  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMUN  DATE 31/03/2003   AUTEUR ASSIRE A.ASSIRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -392,7 +393,7 @@ class vect_elem_temp_r(vect_elem):pass
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
 # ======================================================================
-def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
+def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',
            RELATION        =SIMP(statut='o',typ='TXM',defaut="VMIS_ISOT_TRAC",
                                  into=( "ELAS",
                                         "VMIS_ISOT_TRAC",
@@ -494,7 +495,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
           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=3,into=(3,)),
+          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,)),
@@ -567,7 +568,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
           VMIS_ASYM_LINE  =SIMP(statut='c',typ='I',defaut=4,into=(4,)),
           BETON_UMLV_FP   =SIMP(statut='c',typ='I',defaut=20,into=(20,)),
 
-           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',
                                  into=(
 # MECA
                                        "ELAS",
@@ -578,8 +579,6 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        "SURF_ETAT_NSAT",
                                        "SURF_ETAT_SATU",
                                        "CAM_CLAY_THM",
-                                       "MAZARS",
-                                       "ENDO_ISOT_BETON",
 # THMC
                                        "GAZ",
                                        "LIQU_SATU",
@@ -595,7 +594,6 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
 # HYDR
                                        "HYDR_UTIL",
                                        "HYDR",
-                                       "HYDR_ENDO",
 # MECA_META
                                        "ACIER",
                                        "ZIRC",
@@ -611,9 +609,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
                                        "OHNO",
                                        "NADAI_B",
                                        "BETON_DOUBLE_DP",
-                                       ),),
-                            
-                                        
+                                       ) ),
            ELAS_THM        =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            SURF_ETAT_NSAT  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
            SURF_ETAT_SATU  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
@@ -630,7 +626,6 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            THER_POLY       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            HYDR_UTIL       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            HYDR            =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
-           HYDR_ENDO       =SIMP(statut='c',typ='I',defaut=0,into=(0,)),
            ACIER           =SIMP(statut='c',typ='I',defaut=5,into=(5,)),
            ZIRC            =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
 
@@ -638,204 +633,15 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            ALGO_C_PLAN     =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ) ;
-
-#& MODIF COMMUN  DATE 17/06/2003   AUTEUR VABHHTS J.PELLET 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-# RESPONSABLE VABHHTS J.PELLET
-# ce fichier contient la liste des "into" possibles pour le mot cle NOM_CHAM
-# c'est a dire les noms de champs des SD RESULTAT (DATA de la routine RSCRSD)
-def C_NOM_CHAM_INTO() : return  ("ACCE",    #COMMUN#
-                        "ACCE_ABSOLU",
-                        "ALPH0_ELGA_EPSP",
-                        "ALPHP_ELGA_ALPH0",
-                        "COMPORTEMENT",
-                        "COMPORTHER",
-                        "CRIT_ELNO_RUPT",
-                        "DCHA_ELGA_SIGM",
-                        "DCHA_ELNO_SIGM",
-                        "DCHA_NOEU_SIGM",
-                        "DEDE_ELNO_DLDE",
-                        "DEDE_NOEU_DLDE",
-                        "DEGE_ELNO_DEPL",
-                        "DEGE_NOEU_DEPL",
-                        "DEPL",
-                        "DEPL_ABSOLU",
-                        "DESI_ELNO_DLSI",
-                        "DESI_NOEU_DLSI",
-                        "DETE_ELNO_DLTE",
-                        "DETE_NOEU_DLTE",
-                        "DURT_ELGA_META",
-                        "DURT_ELNO_META",
-                        "DURT_NOEU_META",
-                        "ECIN_ELEM_DEPL",
-                        "EFGE_ELNO_CART",
-                        "EFGE_ELNO_DEPL",
-                        "EFGE_NOEU_CART",
-                        "EFGE_NOEU_DEPL",
-                        "ENDO_ELNO_SIGA",
-                        "ENDO_ELNO_SINO",
-                        "ENDO_NOEU_SINO",
-                        "ENEL_ELGA",
-                        "ENEL_ELNO_ELGA",
-                        "ENEL_NOEU_ELGA",
-                        "EPEQ_ELNO_TUYO",
-                        "EPGR_ELGA",
-                        "EPGR_ELNO",
-                        "EPME_ELGA_DEPL",
-                        "EPME_ELNO_DEPL",
-                        "EPMG_ELGA_DEPL",
-                        "EPMG_ELNO_DEPL",
-                        "EPMG_NOEU_DEPL",
-                        "EPOT_ELEM_DEPL",
-                        "EPSA_ELNO",
-                        "EPSA_NOEU",
-                        "EPSG_ELGA_DEPL",
-                        "EPSG_ELNO_DEPL",
-                        "EPSG_NOEU_DEPL",
-                        "EPSI_ELGA_DEPL",
-                        "EPSI_ELNO_DEPL",
-                        "EPSI_ELNO_TUYO",
-                        "EPSI_NOEU_DEPL",
-                        "EPSP_ELGA",
-                        "EPSP_ELNO",
-                        "EPSP_ELNO_ZAC",
-                        "EPSP_NOEU",
-                        "EPSP_NOEU_ZAC",
-                        "EQUI_ELGA_EPME",
-                        "EQUI_ELGA_EPSI",
-                        "EQUI_ELGA_SIGM",
-                        "EQUI_ELNO_EPME",
-                        "EQUI_ELNO_EPSI",
-                        "EQUI_ELNO_SIGM",
-                        "EQUI_NOEU_EPME",
-                        "EQUI_NOEU_EPSI",
-                        "EQUI_NOEU_SIGM",
-                        "ERRE_ELEM_NOZ1",
-                        "ERRE_ELEM_NOZ2",
-                        "ERRE_ELGA_NORE",
-                        "ERRE_ELNO_ELGA",
-                        "ERRE_NOEU_ELGA",
-                        "ERTH_ELEM_TEMP",
-                        "ERTH_ELNO_ELEM",
-                        "ETOT_ELEM",
-                        "ETOT_ELGA",
-                        "ETOT_ELNO_ELGA",
-                        "FLUX_ELGA_TEMP",
-                        "FLUX_ELNO_TEMP",
-                        "FLUX_NOEU_TEMP",
-                        "FORC_NODA",
-                        "FSUR_2D",
-                        "FSUR_3D",
-                        "FVOL_2D",
-                        "FVOL_3D",
-                        "GRAD_NOEU_THETA",
-                        "HYDR_ELGA",
-                        "HYDR_ELNO_ELGA",
-                        "HYDR_NOEU_ELGA",
-                        "INTE_ELNO_ACTI",
-                        "INTE_ELNO_REAC",
-                        "INTE_NOEU_ACTI",
-                        "INTE_NOEU_REAC",
-                        "IRRA",
-                        "LANL_ELGA",
-                        "META_ELGA_TEMP",
-                        "META_ELNO_TEMP",
-                        "META_NOEU_TEMP",
-                        "PMPB_ELGA_SIEF",
-                        "PMPB_ELNO_SIEF",
-                        "PMPB_NOEU_SIEF",
-                        "PRES",
-                        "PRES_DBEL_DEPL",
-                        "PRES_ELNO_DBEL",
-                        "PRES_ELNO_IMAG",
-                        "PRES_ELNO_REEL",
-                        "PRES_NOEU_DBEL",
-                        "PRES_NOEU_IMAG",
-                        "PRES_NOEU_REEL",
-                        "RADI_ELGA_SIGM",
-                        "RADI_ELNO_SIGM",
-                        "RADI_NOEU_SIGM",
-                        "REAC_NODA",
-                        "SIEF_ELGA",
-                        "SIEF_ELGA_DEPL",
-                        "SIEF_ELNO",
-                        "SIEF_ELNO_ELGA",
-                        "SIEF_NOEU",
-                        "SIEF_NOEU_ELGA",
-                        "SIEQ_ELNO_TUYO",
-                        "SIGM_ELNO_CART",
-                        "SIGM_ELNO_COQU",
-                        "SIGM_ELNO_DEPL",
-                        "SIGM_ELNO_SIEF",
-                        "SIGM_ELNO_TUYO",
-                        "SIGM_ELNO_ZAC",
-                        "SIGM_NOEU_CART",
-                        "SIGM_NOEU_COQU",
-                        "SIGM_NOEU_DEPL",
-                        "SIGM_NOEU_SIEF",
-                        "SIGM_NOEU_ZAC",
-                        "SIGM_NOZ1_ELGA",
-                        "SIGM_NOZ2_ELGA",
-                        "SIPO_ELNO_DEPL",
-                        "SIPO_ELNO_SIEF",
-                        "SIPO_NOEU_DEPL",
-                        "SIPO_NOEU_SIEF",
-                        "SIRE_ELNO_DEPL",
-                        "SIRE_NOEU_DEPL",
-                        "TEMP",
-                        "THETA",
-                        "VALE_CONT",
-                        "VALE_NCOU_MAXI",
-                        "VARI_ELGA",
-                        "VARI_ELGA_ZAC",
-                        "VARI_ELNO",
-                        "VARI_ELNO_COQU",
-                        "VARI_ELNO_ELGA",
-                        "VARI_ELNO_TUYO",
-                        "VARI_NOEU",
-                        "VARI_NOEU_ELGA",
-                        "VARI_NON_LOCAL",
-                        "VITE",
-                        "VITE_ABSOLU",
-                        "VITE_VENT",
-                        )
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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 JMBHH01 J.M.PROIX
 AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
@@ -846,18 +652,18 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
                              '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',validators=NoRepeat(),max='**',into=("MAILLE","NOEUD") ),
+         VERIF           =SIMP(statut='f',typ='TXM',max='**',into=("MAILLE","NOEUD") ),
 
-         POUTRE          =FACT(statut='f',max='**',
+         POUTRE          =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            SECTION         =SIMP(statut='o',typ='TXM' ,into=("GENERALE","RECTANGLE","CERCLE") ),
            CARA_SECT       =SIMP(statut='f',typ=(cara_pout) ),
-           TUYAU_NCOU      =SIMP(statut='f',typ='I',val_max=10,defaut=3),
-           TUYAU_NSEC      =SIMP(statut='f',typ='I',val_max=32,defaut=16),
+           TUYAU_NCOU      =SIMP(statut='f',typ='I',min=1,max=10,defaut=3),
+           TUYAU_NSEC      =SIMP(statut='f',typ='I',min=1,max=32,defaut=16),
            b_generale      =BLOC( condition = "SECTION=='GENERALE'",
-             CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
                                  into=("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
                                                            "AI","JG","IYR2","IZR2","A1",
                                        "IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
@@ -871,7 +677,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
              VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
            ),
            b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
-             CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
                                  into=("H","EP","HY","HZ","EPY","EPZ",
                                                            "H1","HZ1","HY1","EP1","EPY1","EPZ1",
                                                            "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
@@ -879,7 +685,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
              VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE","AFFINE"),defaut="HOMOTHETIQUE"),
            ),
            b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
-             CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+             CARA            =SIMP(statut='o',typ='TXM',max='**',
                                  into=("R","EP","R1","R2","EP1","EP2") ),
              VALE            =SIMP(statut='o',typ='R',max='**'),
              VARI_SECT       =SIMP(statut='f',typ='TXM',into=("HOMOTHETIQUE",) ),
@@ -888,31 +694,31 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            FCX             =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         BARRE           =FACT(statut='f',max='**',
+         BARRE           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            SECTION         =SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
            b_generale      =BLOC( condition = "SECTION=='GENERALE'",
              CARA            =SIMP(statut='o',typ='TXM',into=("A",) ),
              VALE            =SIMP(statut='o',typ='R' ),
            ),
            b_rectangle     =BLOC( condition = "SECTION=='RECTANGLE'",
-             CARA            =SIMP(statut='o',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),validators=NoRepeat(),max=6 ),
+             CARA            =SIMP(statut='o',typ='TXM',into=("H","HZ","HY","EPY","EPZ","EP"),max=6 ),
              VALE            =SIMP(statut='o',typ='R',max=6 ),
            ),
            b_cercle        =BLOC( condition = "SECTION=='CERCLE'",
-             CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("R","EP") ),
+             CARA            =SIMP(statut='o',typ='TXM',max=2,into=("R","EP") ),
              VALE            =SIMP(statut='o',typ='R',max=2 ),
            ),
            FCX             =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         COQUE           =FACT(statut='f',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  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            EPAIS           =SIMP(statut='o',typ='R' ),
            ANGL_REP        =SIMP(statut='f',typ='R',min=2,max=2),
            A_CIS           =SIMP(statut='c',typ='R',defaut= 0.8333333E0),
@@ -923,24 +729,24 @@ 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',max='**',
+         CABLE           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            N_INIT          =SIMP(statut='f',typ='R',defaut= 5000. ),
            SECTION         =SIMP(statut='f',typ='R' ),
            FCX             =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         DISCRET         =FACT(statut='f',max='**',
+         DISCRET         =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
            AMOR_HYST       =SIMP(statut='f',typ='R' ),
-           CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
                                  into=("K_T_D_N","K_T_D_L","K_TR_D_N","K_TR_D_L",
                                                            "K_T_N",  "K_T_L",  "K_TR_N",  "K_TR_L",
                                                                 "M_T_D_N","M_TR_D_N","M_T_N",
@@ -950,12 +756,12 @@ 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',max='**',
+         ORIENTATION     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            CARA            =SIMP(statut='o',typ='TXM',
                                  into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
            VALE            =SIMP(statut='o',typ='R',max='**'),
@@ -963,7 +769,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',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'),
@@ -974,15 +780,15 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
                    EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
                    PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
                    PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            ORIE_ARC        =SIMP(statut='f',typ='R'),
            CENTRE          =SIMP(statut='f',typ='R',max='**'),
-           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
-           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
            POIN_TANG       =SIMP(statut='f',typ='R',max='**'),
-           NOEUD_POIN_TANG =SIMP(statut='f',typ=no),
-           GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno),
+           NOEUD_POIN_TANG =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_POIN_TG=SIMP(statut='f',typ=grno,max=1),
            RAYON           =SIMP(statut='f',typ='R'),
            COEF_FLEX       =SIMP(statut='f',typ='R'),
            INDI_SIGM       =SIMP(statut='f',typ='R'),
@@ -994,23 +800,23 @@ 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',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'),
                    EXCLUS('ANGL_REP','ORIG_AXE'),
                    PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            ANGL_REP        =SIMP(statut='f',typ='R',max=3),
            ANGL_AXE        =SIMP(statut='f',typ='R',max=2),
            ORIG_AXE        =SIMP(statut='f',typ='R',max=3),
          ),
 
-         POUTRE_FLUI     =FACT(statut='f',max='**',
+         POUTRE_FLUI     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            B_T             =SIMP(statut='o',typ='R'),
            B_N             =SIMP(statut='o',typ='R'),
            B_TN            =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
@@ -1019,12 +825,12 @@ 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',max='**',
+         GRILLE          =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),
                    EXCLUS('ANGL_REP','ORIG_AXE'),
                    ENSEMBLE('ORIG_AXE','AXE')),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            SECTION_L       =SIMP(statut='o',typ='R'),
            ANGL_REP        =SIMP(statut='f',typ='R',max=2),
            ANGL_L          =SIMP(statut='f',typ='R'),
@@ -1034,29 +840,29 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
            ORIG_AXE        =SIMP(statut='f',typ='R',max='**'),
            AXE             =SIMP(statut='f',typ='R',max='**'),
            COEF_RIGI_DRZ   =SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
-           GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,),
+           GRILLE_NCOU     =SIMP(statut='f',typ='I',defaut= 1,min=1,max=1 ),
          ),
 
-         RIGI_PARASOL    =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='o',typ=ma,max='**'),
            GROUP_MA_POI1   =SIMP(statut='f',typ=ma),
            FONC_GROUP      =SIMP(statut='f',typ=(fonction,formule) ),
            COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
            REPERE          =SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
-           CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("K_TR_D_N","A_TR_D_N") ),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',into=("K_TR_D_N","A_TR_D_N") ),
            VALE            =SIMP(statut='o',typ='R',max='**'),
            GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
            NOEUD_CENTRE    =SIMP(statut='f',typ=no),
            COOR_CENTRE     =SIMP(statut='f',typ='R',max='**'),
          ),
 
-         ASSE_GRIL       =FACT(statut='f',max='**',
+         ASSE_GRIL       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           CARA            =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           CARA            =SIMP(statut='o',typ='TXM',max='**',
                                  into=("K_TR_D_N","K_TR_D_L_T","K_TR_D_L_N",) ),
            VALE            =SIMP(statut='o',typ='R',max='**'),
            PAS_T           =SIMP(statut='o',typ='R'),
@@ -1066,32 +872,32 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
          ),
 
 
-         AFFE_SECT     =FACT(statut='f',max='**',
+         AFFE_SECT     =FACT(statut='f',min=1,max='**',
               regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                       AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
                       PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
 
               NOM             =SIMP(statut='f',typ='TXM'),
 
-              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 
               TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-              MAILLE_SECT       =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE_SECT       =SIMP(statut='f',typ=ma,max='**'),
 
               MAILLAGE_SECT     =SIMP(statut='o',typ=maillage),
               COOR_AXE_POUTRE    =SIMP(statut='o',typ='R',min=2,max=2),
          ),
 
 
-         AFFE_FIBRE     =FACT(statut='f',max='**',
+         AFFE_FIBRE     =FACT(statut='f',min=1,max='**',
               regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
 
               NOM             =SIMP(statut='f',typ='TXM'),
 
-              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 
               CARA              =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
               VALE              =SIMP(statut='o',typ='R',max='**'),
@@ -1100,8 +906,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
 
 
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1126,42 +931,41 @@ AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
          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',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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            PRES            =SIMP(statut='o',typ='C' ),
          ),
-         VITE_FACE       =FACT(statut='f',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",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            VNOR            =SIMP(statut='o',typ='C' ),
          ),
-         IMPE_FACE       =FACT(statut='f',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",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            IMPE            =SIMP(statut='o',typ='C' ),
          ),
-         LIAISON_UNIF    =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1195,12 +999,12 @@ AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
                  EXCLUS('MECA_IMPO','ACOU_IMPO'),
                  EXCLUS('THER_IMPO','ACOU_IMPO'),),
          MODELE          =SIMP(statut='o',typ=modele ),
-         MECA_IMPO       =FACT(statut='f',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",) ),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DX              =SIMP(statut='f',typ='R' ),
            DY              =SIMP(statut='f',typ='R' ),
            DZ              =SIMP(statut='f',typ='R' ),
@@ -1212,27 +1016,26 @@ 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',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",) ),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            TEMP_SUP        =SIMP(statut='f',typ='R' ),
            TEMP            =SIMP(statut='f',typ='R' ),
            TEMP_INF        =SIMP(statut='f',typ='R' ),
          ),
-         ACOU_IMPO       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            PRES            =SIMP(statut='o',typ='C' ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1262,12 +1065,12 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
          regles=(AU_MOINS_UN('MECA_IMPO','THER_IMPO'),
                  EXCLUS('MECA_IMPO','THER_IMPO'),),
          MODELE          =SIMP(statut='o',typ=modele ),
-         MECA_IMPO       =FACT(statut='f',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",) ),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DX              =SIMP(statut='f',typ=(fonction,formule) ),
            DY              =SIMP(statut='f',typ=(fonction,formule) ),
            DZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -1279,20 +1082,19 @@ 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,formule) ),
            PHI             =SIMP(statut='f',typ=(fonction,formule) ),
          ),
-         THER_IMPO       =FACT(statut='f',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",) ),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            TEMP_SUP        =SIMP(statut='f',typ=(fonction,formule) ),
            TEMP            =SIMP(statut='f',typ=(fonction,formule) ),
            TEMP_INF        =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -1310,8 +1112,7 @@ AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 108,sd_prod=affe_char_cine_f_pr
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE G8BHHXD X.DESROCHES 
-
+# RESPONSABLE G8BHHXD X.DESROCHES
 AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                     ,fr="Affectation de charges et conditions aux limites mécaniques constantes",
                      docu="U4.44.01-g",reentrant='n',
@@ -1345,23 +1146,22 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                                typ=evol_char ),
          
          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),
+         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',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',
                                  'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
                                  'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
-                                 'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON'),),
+                                 'VO6','WI6','WO6','WO','WI1','WO1','GONF'),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              DX              =SIMP(statut='f',typ='R' ),
              DY              =SIMP(statut='f',typ='R' ),
              DZ              =SIMP(statut='f',typ='R' ),
@@ -1412,12 +1212,12 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
 
 
 
-         DDL_POUTRE    =FACT(statut='f',max='**',
+         DDL_POUTRE    =FACT(statut='f',min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
                      AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ'),
                      UN_PARMI('VECT_Y','ANGL_VRIL'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
              DX              =SIMP(statut='f',typ='R' ),
              DY              =SIMP(statut='f',typ='R' ),
              DZ              =SIMP(statut='f',typ='R' ),
@@ -1426,15 +1226,15 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              DRZ             =SIMP(statut='f',typ='R' ),
 #  définition du repère local
              VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
-             ANGL_VRIL       =SIMP(statut='f',typ='R',),
+             ANGL_VRIL       =SIMP(statut='f',typ='R',max=1),
 #  restriction sur les mailles servant à définir le repère local
-             GROUP_MA        =SIMP(statut='f',typ=grma,),
-             MAILLE          =SIMP(statut='f',typ=ma,),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max=1),
+             MAILLE          =SIMP(statut='f',typ=ma,max=1),
                             ),
 
 
          
-           FACE_IMPO       =FACT(statut='f',max='**',
+           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'),
@@ -1451,8 +1251,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                      EXCLUS('DTAN','DRY'),
                      EXCLUS('DTAN','DRZ'),),
 #  rajout d'un mot clé REPERE :/ LOCAL /GLOBAL                     
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              DX              =SIMP(statut='f',typ='R' ),
              DY              =SIMP(statut='f',typ='R' ),
              DZ              =SIMP(statut='f',typ='R' ),
@@ -1469,22 +1269,22 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              PRE2            =SIMP(statut='f',typ='R' ),
            ),
 
-           LIAISON_DDL     =FACT(statut='f',max='**',
-                                 fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
+           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='**'),
+             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_MULT       =SIMP(statut='o',typ='R',max='**'),
              COEF_IMPO       =SIMP(statut='o',typ='R' ),
            ),
 
-           LIAISON_OBLIQUE =FACT(statut='f',max='**',
-                                 fr="Appliquer à des noeuds une valeur de déplacement dans un repere oblique",
+           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,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             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' ),
@@ -1494,8 +1294,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              DRZ             =SIMP(statut='f',typ='R' ),
            ), 
  
-           LIAISON_GROUP   =FACT(statut='f',max='**',
-                                 fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
+           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'),
@@ -1508,21 +1308,21 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                      EXCLUS('NOEUD_1','MAILLE_2'),
                      EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
              
-               GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-               GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-               GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-               NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-               GROUP_NO_2      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-               NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               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   ,validators=NoRepeat(),max='**'),
-             SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),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='**'),
+             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_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),
@@ -1530,16 +1330,16 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              CENTRE          =SIMP(statut='f',typ='R',max=3),
            ),
 
-           LIAISON_MAIL    =FACT(statut='f',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'),
                      PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
-              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-              MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'), 
-              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-              MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'), 
-              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-              NOEUD_ESCL      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'), 
+              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 ),
@@ -1548,41 +1348,41 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
          ),
 
          
-           LIAISON_SOLIDE  =FACT(statut='f',fr="Modéliser une partie indéformable d'une structure",max='**',
+           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,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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",max='**',
+           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,validators=NoRepeat(),max='**'),
-             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             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',max='**',
-                                 fr="Imposer une meme valeur (inconnue) à des ddls d'un emsemble de noeuds",
+           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,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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',max='**',
-                               fr="définir une relation linéaire entre tous les ddls d'un concept cham_no",
+         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' ),
@@ -1591,7 +1391,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
 
          VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
 
-         CONTACT         =FACT(statut='f',fr="Imposer du contact avec ou sans frottement",max='**',
+         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")),
@@ -1601,10 +1401,10 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
            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,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_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'),
@@ -1615,8 +1415,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                 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  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                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),
@@ -1632,14 +1432,14 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                 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  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
                 DIST_1          =SIMP(statut='f',typ='R'),
                 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',),
+                     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' ",
@@ -1651,14 +1451,14 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                 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  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
                 DIST_1          =SIMP(statut='f',typ='R'),
                 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',),
+                     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),  
@@ -1674,17 +1474,17 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                 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',),
+                     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",max='**',
+         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,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           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' ),
@@ -1694,23 +1494,23 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
            ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
          ),
 
-         FORCE_FACE      =FACT(statut='f',max='**',
-                               fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
+         FORCE_FACE      =FACT(statut='f',fr="Appliquer des forces surfaciques sur une face d'éléments volumiques",
+                                 min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                      AU_MOINS_UN('FX','FY','FZ'),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              FX              =SIMP(statut='f',typ='R' ),
              FY              =SIMP(statut='f',typ='R' ),
              FZ              =SIMP(statut='f',typ='R' ),
            ), 
 
-         FORCE_ARETE     =FACT(statut='f',max='**',
-                               fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
+         FORCE_ARETE     =FACT(statut='f',fr="Appliquer des forces linéiques à une arete d élément volumique ou de coque",
+                                 min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
                      AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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' ),
@@ -1719,12 +1519,12 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              MZ              =SIMP(statut='f',typ='R' ),
            ), 
          
-         FORCE_CONTOUR   =FACT(statut='f',max='**',
-                               fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
+         FORCE_CONTOUR   =FACT(statut='f',fr="Appliquer des forces linéiques au bord d'un domaine 2D ou AXIS_FOURIER",
+                                 min=1,max='**',
              regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                      AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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' ),
@@ -1733,48 +1533,48 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              MZ              =SIMP(statut='f',typ='R' ),
            ), 
 
-         FORCE_INTERNE   =FACT(statut='f',max='**',
-                               fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
+         FORCE_INTERNE   =FACT(statut='f',fr="Appliquer des forces volumiques (2D ou 3D) à un domaine volumique",
+                                 min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                      AU_MOINS_UN('FX','FY','FZ' ),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              FX              =SIMP(statut='f',typ='R' ),
              FY              =SIMP(statut='f',typ='R' ),
              FZ              =SIMP(statut='f',typ='R' ),
            ), 
 
-         PRES_REP        =FACT(statut='f',max='**',
-                               fr="Appliquer une pression à un domaine de milieu continu 2D ou 3D",
+         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,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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' ),
            ),
          
-         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",max='**',
+         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,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           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',max='**',
-                               fr="Appliquer un chargement de déformation initiale à un volume 3D ou 2D",
+         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,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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' ),
@@ -1792,17 +1592,17 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
              KXY             =SIMP(statut='f',typ='R' ),
            ),
            
-         ARLEQUIN        =FACT(statut='f',max='**',
-           GROUP_MA_1     =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
-           GROUP_MA_2     =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
-           GROUP_MA_COLL  =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         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",max='**',
+        FORCE_POUTRE    =FACT(statut='f',fr="Appliquer des forces linéiques sur des poutres",min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                      AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
@@ -1813,8 +1613,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                      PRESENT_ABSENT('VY','FX','FY','FZ'),
                      PRESENT_ABSENT('VZ','FX','FY','FZ'),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
 #  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
                FX              =SIMP(statut='f',typ='R' ),
@@ -1827,16 +1627,16 @@ 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",max='**',
+         FORCE_TUYAU     =FACT(statut='f',fr="imposer une pression dans un élément TUYAU",min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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",max='**',
+         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'),               
@@ -1854,8 +1654,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                      PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
 #  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL              
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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' ),
@@ -1875,26 +1675,27 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
            ),
 
 
-           LIAISON_COQUE   =FACT(statut='f',max='**',
-             GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           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',max='**',
+         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="NON",into=("OUI","NON") ),
            RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          ),
            
-         FORCE_ELEC      =FACT(statut='f',max='**',
-                               fr="Force de Laplace due à la présence d'un conducteur rectiligne secondaire non maillé",
+         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'),
@@ -1903,8 +1704,8 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
                      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,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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 ),
@@ -1928,52 +1729,52 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
 
 
              
-        INTE_ELEC       =FACT(statut='f',max='**',
-                              fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
+        INTE_ELEC       =FACT(statut='f',fr="Force de Laplace due à la présence d'un conducteur non rectiligne secondaire",
+                                 min=1,max='**',
              regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                      PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                      AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
                      EXCLUS('TRANS','SYME'),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             TRANS           =SIMP(statut='f',typ='R' ,max='**'),
-             SYME            =SIMP(statut='f',typ='R' ,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+             TRANS           =SIMP(statut='f',typ='R',max='**'),
+             SYME            =SIMP(statut='f',typ='R',max='**'),
            ),
          
 
-         IMPE_FACE       =FACT(statut='f',fr="Appliquer une impédance acoustique à une face",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,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              IMPE            =SIMP(statut='o',typ='R' ),
            ),
          
-         VITE_FACE       =FACT(statut='f',fr="Imposer des vitesses acoustiquesnormales à une face",max='**',
+         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,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              VNOR            =SIMP(statut='o',typ='R' ),
            ),
            
 
 
-         ONDE_FLUI       =FACT(statut='f',fr="Appliquer une amplitude de pression d onde incidente",max='**',
+         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,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
              PRES            =SIMP(statut='o',typ='R' ),
            ),
          
-         FLUX_THM_REP    =FACT(statut='f',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('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             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' ),
@@ -1981,10 +1782,7 @@ AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2010,15 +1808,14 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
          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',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','LIAISON', ),),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI', ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)), 
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DX              =SIMP(statut='f',typ='C' ),
            DY              =SIMP(statut='f',typ='C' ),
            DZ              =SIMP(statut='f',typ='C' ),
@@ -2029,7 +1826,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',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',),
@@ -2040,8 +1837,8 @@ AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
                    PRESENT_ABSENT('VY', 'FX','FY','FZ',),
                    PRESENT_ABSENT('VZ','FX','FY','FZ', ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
            FX              =SIMP(statut='f',typ='C' ),
            FY              =SIMP(statut='f',typ='C' ),
@@ -2050,18 +1847,17 @@ 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',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='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
-           COEF_MULT       =SIMP(statut='o',typ='R'  ,max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
            COEF_IMPO       =SIMP(statut='o',typ='C' ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2094,16 +1890,15 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
          VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          MODELE          =SIMP(statut='o',typ=modele ),
 
-         DDL_IMPO        =FACT(statut='f',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','LIAISON',),),
+                               'TEMP','PRE1','PRE2'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)), 
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DX              =SIMP(statut='f',typ=(fonction,formule) ),
            DY              =SIMP(statut='f',typ=(fonction,formule) ),
            DZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2118,7 +1913,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            PRE2            =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         FACE_IMPO       =FACT(statut='f',max='**',
+         FACE_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_MA','MAILLE'),
                    AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
                    EXCLUS('DNOR','DX'),
@@ -2134,8 +1929,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                    EXCLUS('DTAN','DRY'),
                    EXCLUS('DTAN','DRZ'),),
 #  rajout d un mot cle REPERE : / GLOBAL / LOCAL
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            DX              =SIMP(statut='f',typ=(fonction,formule) ),
            DY              =SIMP(statut='f',typ=(fonction,formule) ),
            DZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2152,22 +1947,22 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DTAN            =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          
-         LIAISON_DDL     =FACT(statut='f',max='**',
+         LIAISON_DDL     =FACT(statut='f',min=1,max='**',
                                fr="Définir une relation linéaire entre des ddls de deux ou plusieurs noeuds",
            regles=(UN_PARMI('GROUP_NO','NOEUD'),),
            GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DDL             =SIMP(statut='o',typ='TXM',max='**'),
            COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
            COEF_IMPO       =SIMP(statut='o',typ=(fonction,formule) ),
          ),
 
-         LIAISON_OBLIQUE =FACT(statut='f',max='**',
+         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='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
            DX              =SIMP(statut='f',typ=(fonction,formule) ),
            DY              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2177,7 +1972,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            DRZ             =SIMP(statut='f',typ=(fonction,formule) ),
          ),         
          
-         LIAISON_GROUP   =FACT(statut='f',max='**',
+         LIAISON_GROUP   =FACT(statut='f',min=1,max='**',
                                fr="Définir des relations linéaires entre certains ddls de couples de noeuds",
            regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
                    UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
@@ -2190,16 +1985,16 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                    EXCLUS('NOEUD_1','GROUP_MA_2'),
                    EXCLUS('NOEUD_1','MAILLE_2'),
                    EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
            DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
            COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
            DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
@@ -2211,7 +2006,7 @@ 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",max='**',
+         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")),
@@ -2221,10 +2016,10 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            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,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_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'),
@@ -2235,8 +2030,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                 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  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                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),
@@ -2252,14 +2047,14 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                 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  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),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,formule)),
                 DIST_2          =SIMP(statut='f',typ=(fonction,formule)),
                 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',),
+                     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' ",
@@ -2271,14 +2066,14 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                 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  ,validators=NoRepeat(),max='**'),
-                SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),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,formule)),
                 DIST_2          =SIMP(statut='f',typ=(fonction,formule)),
                 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',),
+                     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),  
@@ -2294,39 +2089,39 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                 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',),
+                     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',max='**',
+          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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           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',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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           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',max='**',
+         FORCE_NODALE    =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_NO','NOEUD'),
                    AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2336,20 +2131,20 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            ANGL_NAUT       =SIMP(statut='f',typ=(fonction,formule),max=3 ),
          ),
 
-         FORCE_FACE      =FACT(statut='f',max='**',
+         FORCE_FACE      =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FX','FY','FZ'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction,formule) ),
          ),
-         FORCE_ARETE     =FACT(statut='f',max='**',
+         FORCE_ARETE     =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2357,11 +2152,11 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MY              =SIMP(statut='f',typ=(fonction,formule) ),
            MZ              =SIMP(statut='f',typ=(fonction,formule) ),
          ),
-         FORCE_CONTOUR   =FACT(statut='f',max='**',
+         FORCE_CONTOUR   =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2370,44 +2165,44 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            MZ              =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         FORCE_INTERNE   =FACT(statut='f',max='**',
+         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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          
-         PRES_REP        =FACT(statut='f',max='**',
+         PRES_REP        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                    AU_MOINS_UN('PRES','CISA_2D'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            PRES            =SIMP(statut='f',typ=(fonction,formule) ),
            CISA_2D         =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         EFFE_FOND       =FACT(statut='f',fr="Imposer un effet de fond",max='**',
+         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,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           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=(fonction,formule) ),
          ),
 
-         EPSI_INIT       =FACT(statut='f',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('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            EPXX            =SIMP(statut='f',typ=(fonction,formule) ),
            EPYY            =SIMP(statut='f',typ=(fonction,formule) ),
            EPZZ            =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2416,7 +2211,7 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            EPYZ            =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          
-         FORCE_POUTRE    =FACT(statut='f',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'),
@@ -2428,8 +2223,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                    PRESENT_ABSENT('VZ','FX','FY','FZ'),),
 #  rajout d un mot cle REPERE : / GLOBAL / LOCAL
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2439,16 +2234,16 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
            VZ              =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         FORCE_TUYAU     =FACT(statut='f',max='**',
+         FORCE_TUYAU     =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            PRES            =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          
-         FORCE_COQUE     =FACT(statut='f',max='**',
+         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'),
@@ -2466,8 +2261,8 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                    PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
 #  rajout d un mot cle REPERE : / GLOBAL / LOCAL
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FX              =SIMP(statut='f',typ=(fonction,formule) ),
            FY              =SIMP(statut='f',typ=(fonction,formule) ),
            FZ              =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2484,34 +2279,34 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
                                  into=("SUP","INF","MOY","MAIL") ),
          ),
 
-         LIAISON_COQUE   =FACT(statut='f',max='**',
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         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',max='**',
+         VITE_FACE       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('GROUP_MA','MAILLE'),),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            VNOR            =SIMP(statut='o',typ=(fonction,formule) ),
          ),
-         IMPE_FACE       =FACT(statut='f',max='**',
+         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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            IMPE            =SIMP(statut='o',typ=(fonction,formule) ),
          ),
-         ONDE_PLANE      =FACT(statut='f',max='**',
+         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,formule) ),
@@ -2520,13 +2315,13 @@ AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
 
 
 
-         FLUX_THM_REP    =FACT(statut='f',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('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUN            =SIMP(statut='f',typ=(fonction,formule) ),
            FLUN_HYDR1      =SIMP(statut='f',typ=(fonction,formule) ),
            FLUN_HYDR2      =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2534,10 +2329,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 09/09/2003   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
@@ -2563,15 +2355,14 @@ AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
          MODELE          =SIMP(statut='o',typ=modele ),
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",
                                into=("OUI","NON") ),
-         CARA_TORSION    =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2599,26 +2390,26 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
          VERI_DDL        =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="OUI"),
          MODELE          =SIMP(statut='o',typ=(modele) ),
 
-         TEMP_IMPO       =FACT(statut='f',max='**',
+         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",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            TEMP            =SIMP(statut='f',typ='R'),
            TEMP_INF        =SIMP(statut='f',typ='R'),
            TEMP_SUP        =SIMP(statut='f',typ='R'), ),
 
-         FLUX_REP        =FACT(statut='f',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'),
                    AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','CARA_TORSION') ),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUN            =SIMP(statut='f',typ='R'),
            FLUN_INF        =SIMP(statut='f',typ='R'),
            FLUN_SUP        =SIMP(statut='f',typ='R'),
@@ -2626,19 +2417,19 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
          ),
         
 
-         RAYONNEMENT     =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           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',max='**',
+         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'),
@@ -2646,8 +2437,8 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
                    ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
                              ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            COEF_H          =SIMP(statut='f',typ='R'),
            TEMP_EXT        =SIMP(statut='f',typ='R'),
            COEF_H_INF      =SIMP(statut='f',typ='R'),
@@ -2656,40 +2447,40 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            TEMP_EXT_SUP    =SIMP(statut='f',typ='R'),
          ),         
          
-         SOURCE          =FACT(statut='f',max='**',
+         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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           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) ),
          ),
          
-         GRAD_TEMP_INIT  =FACT(statut='f',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'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUX_X          =SIMP(statut='f',typ='R' ),
            FLUX_Y          =SIMP(statut='f',typ='R' ),
            FLUX_Z          =SIMP(statut='f',typ='R' ),
                          ),
                          
-         LIAISON_DDL     =FACT(statut='f',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='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            DDL             =SIMP(statut='f',typ='TXM',max='**',
                                  into=("TEMP","TEMP_INF","TEMP_SUP") ),
            COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
            COEF_IMPO       =SIMP(statut='o',typ='R' ),
          ),
          
-         LIAISON_GROUP   =FACT(statut='f',max='**',
+         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'),
@@ -2701,16 +2492,16 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
                              EXCLUS('NOEUD_1','GROUP_MA_2'),
                              EXCLUS('NOEUD_1','MAILLE_2'),
                              EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
            DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
                                  into=("TEMP","TEMP_INF","TEMP_SUP") ),
            COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
@@ -2724,59 +2515,58 @@ AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
            CENTRE          =SIMP(statut='f',typ='R',max='**'),
          ),
 
-         LIAISON_MAIL    =FACT(statut='f',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'),),
-           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_ESCL      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_MAIT     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_ESCL     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_ESCL      =SIMP(statut='f',typ=no,max='**'),
            TRAN            =SIMP(statut='f',typ='R',max='**' ),
            ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),
            CENTRE          =SIMP(statut='f',typ='R',max='**' ),
          ),      
          
-         ECHANGE_PAROI   =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_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',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',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,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           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',max='**',
+         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',max='**',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -2804,15 +2594,15 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
          VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          MODELE          =SIMP(statut='o',typ=(modele) ),
 
-         TEMP_IMPO       =FACT(statut='f',max='**',
+         TEMP_IMPO       =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
                    AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF','EVOL_THER'),
                    PRESENT_ABSENT('EVOL_THER','TEMP','TEMP_INF','TEMP_SUP'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            EVOL_THER       =SIMP(statut='f',typ=(evol_ther) ),
            DDL             =SIMP(statut='f',typ='TXM',into=("TEMP",) ),
            TEMP            =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2820,13 +2610,13 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            TEMP_SUP        =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          
-         FLUX_REP        =FACT(statut='f',max='**',
+         FLUX_REP        =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                    AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','FLUX_X','FLUX_Y','FLUX_Z'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUN            =SIMP(statut='f',typ=(fonction,formule) ),
            FLUN_INF        =SIMP(statut='f',typ=(fonction,formule) ),
            FLUN_SUP        =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2835,23 +2625,23 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            FLUX_Z          =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         FLUX_NL         =FACT(statut='f',max='**',
+         FLUX_NL         =FACT(statut='f',min=1,max='**',
            regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
                    PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUN            =SIMP(statut='o',typ=(fonction,formule) ),
          ), 
          
 
-         RAYONNEMENT     =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            SIGMA           =SIMP(statut='o',typ=(fonction,formule) ),
            EPSILON         =SIMP(statut='o',typ=(fonction,formule) ),
            TEMP_EXT        =SIMP(statut='o',typ=(fonction,formule) ),
@@ -2859,7 +2649,7 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
          
 
 
-         ECHANGE         =FACT(statut='f',max='**',
+         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'),
@@ -2867,8 +2657,8 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
                    ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
                    ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            COEF_H          =SIMP(statut='f',typ=(fonction,formule) ),
            TEMP_EXT        =SIMP(statut='f',typ=(fonction,formule) ),
            COEF_H_INF      =SIMP(statut='f',typ=(fonction,formule) ),
@@ -2878,49 +2668,49 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
          ),
          
 
-         SOURCE          =FACT(statut='f',max='**',
+         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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            SOUR            =SIMP(statut='o',typ=(fonction,formule) ),
          ),
          
-         GRAD_TEMP_INIT  =FACT(statut='f',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'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            FLUX_X          =SIMP(statut='f',typ=(fonction,formule) ),
            FLUX_Y          =SIMP(statut='f',typ=(fonction,formule) ),
            FLUX_Z          =SIMP(statut='f',typ=(fonction,formule) ),
          ),
          
-         ECHANGE_PAROI   =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
            COEF_H          =SIMP(statut='o',typ=(fonction,formule) ),
            TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
            CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
          ),
 
-        LIAISON_DDL     =FACT(statut='f',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='**'),
+           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,formule) ),
          ),
 
-         LIAISON_GROUP   =FACT(statut='f',max='**',
+         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'),
@@ -2932,16 +2722,16 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
                         EXCLUS('NOEUD_1','GROUP_MA_2'),
                         EXCLUS('NOEUD_1','MAILLE_2'),
                         EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no,max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,max='**'),
            DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
                                  into=("TEMP","TEMP_INF","TEMP_SUP") ),
            COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
@@ -2955,40 +2745,39 @@ AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=33,sd_prod=char_ther,
            CENTRE          =SIMP(statut='f',typ='R',max='**'),
          ),
 
-         LIAISON_UNIF    =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           DDL             =SIMP(statut='f',typ='TXM',defaut="TEMP",
+           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") ),
          ),
 
-         CONVECTION      =FACT(statut='f',max='**',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE VABHHTS J.PELLET
 AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
@@ -2997,33 +2786,34 @@ AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
             UIinfo={"groupes":("Modélisation",)},
          MAILLAGE        =SIMP(statut='o',typ=maillage),
          MODELE          =SIMP(statut='f',typ=modele),
-         AFFE            =FACT(statut='o',max='**',
-           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+         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,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            MATER           =SIMP(statut='o',typ=mater),
            TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE JMBHH01 J.M.PROIX
 AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
@@ -3032,25 +2822,25 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
          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',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ),
-         AFFE_SOUS_STRUC =FACT(statut='f',
+         VERIF           =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ),
+         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,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
          ),
-         AFFE            =FACT(statut='f',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,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            PHENOMENE       =SIMP(statut='o',typ='TXM',
                                  into=("MECANIQUE","THERMIQUE","ACOUSTIQUE") ),
                 b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
                                         fr="modelisations mécaniques",
-                    MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                    MODELISATION    =SIMP(statut='o',typ='TXM', into=(
                                                                       "2D_DIS_T",
                                                                       "2D_DIS_TR",
                                                                       "2D_FLUI_ABSO",
@@ -3128,7 +2918,7 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
                                                                        "D_PLAN_THHD",
                                                                        "D_PLAN_THVD",
                                                                        "D_PLAN_THHMD",
-                                                                       "D_PLAN_THMD",
+                                                                       "D_PLAN_THMD", 
                                                                       "DIS_T",
                                                                       "DIS_TR",
                                                                       "DKT",
@@ -3149,7 +2939,7 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
 
                 b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
                                         fr="modelisations thermiques",
-                    MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                    MODELISATION    =SIMP(statut='o',typ='TXM',into=(
                                                                       "3D",
                                                                       "3D_DIAG",
                                                                       "AXIS",
@@ -3164,15 +2954,14 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
 
                 b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
                                         fr="modelisations acoustiques",
-                     MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                     MODELISATION    =SIMP(statut='o',typ='TXM',into=(
                                                                        "3D",
                                                                        "PLAN"
                                                                        ), ),),
 
          ),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3191,21 +2980,24 @@ AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-g",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 AIDE=PROC(nom="AIDE",op=42,docu="U4.02.01-g",
-       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',
-         INITEL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
-                        ),
-       CONCEPT     =FACT(statut='f',max='**',
-         NOM          =SIMP(fr="liste des noms de concept",statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="*"),
-         OPTION       =SIMP(fr="option d'édition de concept",statut='f',typ='TXM',defaut="TOUT_TYPE",
+            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=1,max=1,
+           INITEL          =SIMP(statut='f',typ='TXM',defaut="NON",
+                                 into=("OUI","NON",) ),
+         ),
+         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",
+                                 statut='f',typ='TXM',defaut="TOUT_TYPE",
                                  into=("TOUT_TYPE","CREER","A_CREER",) ),
          ),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3228,10 +3020,9 @@ ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage,
                    fr="Assembler deux maillages sous un seul nom",
                    docu="U4.23.03-f",reentrant='n',
             UIinfo={"groupes":("Maillage",)},
-         MAILLAGE        =SIMP(statut='o',typ=maillage,min=2,validators=NoRepeat(),max=2 ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage,min=2,max=2 ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3256,8 +3047,7 @@ ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=matr_asse_gene_r,
          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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3292,8 +3082,7 @@ ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
          CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3316,13 +3105,12 @@ ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
                     docu="U4.65.05-e",reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
-         CHAR_SOUS_STRUC =FACT(statut='o',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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3355,8 +3143,7 @@ ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=asse_vecteur_prod,
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3378,7 +3165,7 @@ 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-d",reentrant='n',
             UIinfo={"groupes":("Résolution",)},
-         ENER_SOL        =FACT(statut='o',
+         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')
@@ -3389,8 +3176,8 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
                    PRESENT_ABSENT('GROUP_NO_CENTRE','COOR_CENTRE'),),
            METHODE         =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","RIGI_PARASOL") ),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
-           GROUP_NO_RADIER =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO_RADIER =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,max='**'),
            FONC_GROUP      =SIMP(statut='f',typ=(fonction,formule) ),
            COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
            KX              =SIMP(statut='o',typ='R' ),
@@ -3403,20 +3190,19 @@ CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8,
            NOEUD_CENTRE    =SIMP(statut='f',typ=no),
            COOR_CENTRE     =SIMP(statut='f',typ='R',max=3),
          ),
-         AMOR_INTERNE    =FACT(statut='o',
+         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,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
            AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
          ),
-         AMOR_SOL        =FACT(statut='o',
+         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,formule),max='**' ),
            HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3487,8 +3273,8 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
 
          regles=(EXCLUS('TOUT','GROUP_MA',),EXCLUS('TOUT','MAILLE',),),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 
 #
 #
@@ -3607,7 +3393,7 @@ CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=calc_cham_elem_prod,
 
 
 
-         EXCIT           =FACT(statut='f',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,formule)),
@@ -3620,8 +3406,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3655,8 +3440,7 @@ CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=calc_char_cine_prod,
          INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -3688,29 +3472,17 @@ CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_pr
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,) ),
          b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
            regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
-           NOEUD           =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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 JMBHH01 J.M.PROIX
 def calc_elem_prod(RESULTAT,**args):
@@ -3734,13 +3506,13 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
      regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
                     'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
      TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-     NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-     NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-     NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+     NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+     NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
      NOM_CAS         =SIMP(statut='f',typ='TXM' ),
 
-     INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-     FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     INST            =SIMP(statut='f',typ='R',max='**'),
+     FREQ            =SIMP(statut='f',typ='R',max='**'),
      LIST_INST       =SIMP(statut='f',typ=listr8),
      LIST_FREQ       =SIMP(statut='f',typ=listr8),
      PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
@@ -3748,10 +3520,8 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
      LIST_ORDRE      =SIMP(statut='f',typ=listis),
      
      TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-     GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
-                           fr="le calcul ne sera effectué que sur ces mailles là"),
-     MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
-                           fr="le calcul ne sera effectué que sur ces mailles là"),
+     GROUP_MA        =SIMP(statut='f',fr="le calcul ne sera effectué que sur ces mailles là",typ=grma,max='**'),
+     MAILLE          =SIMP(statut='f',fr="le calcul ne sera effectué que sur ces mailles là",typ=ma,max='**'),
 
 #    options pour des resultats lineaire 
 
@@ -3759,12 +3529,12 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
                                                                mode_stat,mode_stat_depl,mode_stat_acce,mode_stat_forc,\
                                                                mult_elas,fourier_elas,base_modale,mode_flamb)",
                                                                fr="options mecaniques lineaires",
-          TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques lineaires",
+          TYPE_OPTION =SIMP(statut='f',typ='TXM',max=1,defaut='TOUTES',fr="type d'options mecaniques lineaires",
                            into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","DERIVEES",
                                  "INDI_ERRE","AUTRES","TOUTES"),
                            ),
           b_toutes=BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol elas",
-               OPTION =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="SIEF_ELNO_ELGA",
+               OPTION =SIMP(statut='f',typ='TXM',max='**',defaut="SIEF_ELNO_ELGA",
                               #  contraintes
                            into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
                                   "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
@@ -3792,13 +3562,13 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
                NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
                                 fr="position dans l'épaisseur de la coque, ou de la couche" ),
                ANGLE       =SIMP(statut='f',typ='I',defaut= 0,fr="angle en degres à partir de la génératrice"),
-               NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="nom du champ pour VALE_NCOU_MAXI", ),
-               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="nom de la composante pour VALE_NCOU_MAXI",  ),
+               NOM_CHAM  =SIMP(statut='f',typ='TXM',max=1,fr="nom du champ pour VALE_NCOU_MAXI", ),
+               NOM_CMP   =SIMP(statut='f',typ='TXM',max=1,fr="nom de la composante pour VALE_NCOU_MAXI",  ),
                PLAN =     SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL"),
                                fr="Plan de calcul pour les plaques excentrées" ),
               
               
-               EXCIT           =FACT(statut='f',max='**',
+               EXCIT           =FACT(statut='f',min=1,max='**',
                                      fr="Charges contenant les températures, les efforts répartis pour les poutres...",
                                      regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
                     CHARGE          =SIMP(statut='o',typ=char_meca ),
@@ -3816,7 +3586,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
 
           b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
                                      fr="options de contraintes elasticite 2D et 3D",
-              OPTION =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+              OPTION =SIMP(statut='f',typ='TXM',max='**',defaut='SIEF_ELNO_ELGA',
                             fr="option de calcul des contraintes",
                            into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",),),
                            
@@ -3824,14 +3594,14 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
                                       (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
                                       (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) ",
                                       fr="charge contenant les temperatures ou autre charge",
-                         EXCIT           =FACT(statut='o',max='**',
+                         EXCIT           =FACT(statut='o',min=1,max='**',
                          CHARGE          =SIMP(statut='o',typ=char_meca ),),
                                     ),
                                   ),
                                   
           b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
                                       fr="options de contraintes elasticite poutres, coques, tuyaux",
-               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+               OPTION =SIMP(statut='o',typ='TXM',max='**',defaut='SIEF_ELNO_ELGA',
                             fr="option de calcul des contraintes ou efforts generalises",
                             into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL","SIGM_ELNO_TUYO",
                                    "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
@@ -3844,7 +3614,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
                                             (type(OPTION)==type(()) and  'SIPO_ELNO_DEPL' in OPTION ) or \
                                             (type(OPTION)==type(()) and  'EFGE_ELNO_DEPL' in OPTION ) ",
                                             fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
-                    EXCIT           =FACT(statut='o',max='**',
+                    EXCIT           =FACT(statut='o',min=1,max='**',
                                           regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
                          CHARGE          =SIMP(statut='o',typ=char_meca ),
                          FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
@@ -3884,7 +3654,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,docu="U4.81.01-g",re
 #          fin bloc contraintes struct
 
           b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
                                  "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",),
                                  ),
@@ -3910,12 +3680,12 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                       (type(OPTION)==type(()) and  'EPME_ELNO_DEPL' in OPTION ) or \
                                       (type(OPTION)==type(()) and  'EPME_ELGA_DEPL' in OPTION ) ",
                                       fr="charge contenant les temperatures",
-                    EXCIT           =FACT(statut='o',max='**',
+                    EXCIT           =FACT(statut='o',min=1,max='**',
                          CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
                                        ),
           b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
                                  "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM",),
                                  ),
@@ -3925,13 +3695,13 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                       (type(OPTION)==type(()) and  'ENEL_ELNO_ELGA' in OPTION ) or \
                                       (type(OPTION)==type(()) and  'ECIN_ELEM_DEPL' in OPTION ) ",
                                       fr="charge contenant les temperatures",
-                    EXCIT           =FACT(statut='o',max='**',
+                    EXCIT           =FACT(statut='o',min=1,max='**',
                          CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                               ),
                                  ),
                                  
           b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
                                  "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
                                  "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
@@ -3945,31 +3715,31 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                     NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
                                            fr="position dans l'épaisseur de la coque, ou de la couche" ),
                                   ),        
-                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                EXCIT           =FACT(statut='f',min=1,max='**',fr="charge contenant les temperatures",
                      CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
                                  
           b_derivees         =BLOC( condition = "TYPE_OPTION=='DERIVEES'",
-                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                  OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
                                  ) ),),
 
           b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
-                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                  OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("VALE_NCOU_MAXI","PRES_DBEL_DEPL","VNOR_ELEM_DEPL",
                                  ) ),
                b_maxi    =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
                                 (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
-                    NOM_CHAM  =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
-                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+                    NOM_CHAM  =SIMP(statut='o',typ='TXM',max=1,fr="Nom du champ pour VALE_NCOU_MAXI" ),
+                    NOM_CMP   =SIMP(statut='o',typ='TXM',max=1,fr="Nom de la composante pour VALE_NCOU_MAXI"),),
                                  ),
 
           b_indi_erre         =BLOC( condition = "TYPE_OPTION=='INDI_ERRE'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELGA_NORE",
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',defaut="ERRE_ELGA_NORE",
                            into=("SIGM_NOZ1_ELGA","ERRE_ELEM_NOZ1","SIGM_NOZ2_ELGA","ERRE_ELEM_NOZ2",
                                  "SIRE_ELNO_DEPL","ERRE_ELGA_NORE","ERRE_ELNO_ELGA",
                                  ) ),
-                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                EXCIT           =FACT(statut='f',min=1,max='**',fr="charge contenant les temperatures",
                      CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
                                  ),
@@ -3978,12 +3748,12 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  
 #    statique ou dynamique non lineaire : evol_noli                                
      b_noli          =BLOC( condition = "AsType(RESULTAT) == evol_noli",fr="options evol noli",
-          TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',
+          TYPE_OPTION =SIMP(statut='f',typ='TXM',max=1,defaut='TOUTES',
                            into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT",
                                  "VARI","INDI_ERRE","TOUTES","AUTRES"),
                           ),
           b_toutes =BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol elas",
-               OPTION      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION      =SIMP(statut='f',typ='TXM',max='**',
                            into=( "SIEF_ELNO_ELGA",
                                   "SIGM_ELNO_TUYO","SIGM_ELNO_COQU",
                                   "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","EFGE_ELNO_CART",
@@ -4011,11 +3781,11 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
                                  fr="choix du point d'intégration dans la couche" ),
                ANGLE       =SIMP(statut='f',typ='I',defaut= 0 ,fr="angle de dépouillement pour les tuyaux"),
-               NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI"),
-               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),
+               NOM_CHAM  =SIMP(statut='f',typ='TXM',max=1,fr="Nom du champ pour VALE_NCOU_MAXI"),
+               NOM_CMP   =SIMP(statut='f',typ='TXM',max=1,fr="Nom de la composante pour VALE_NCOU_MAXI"),
                PLAN =     SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
               
-               EXCIT           =FACT(statut='f',max='**',
+               EXCIT           =FACT(statut='f',min=1,max='**',
                                       regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
                     CHARGE          =SIMP(statut='o',typ=char_meca ),
                     FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
@@ -4029,14 +3799,14 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                          
           b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
                                       fr="options de contraintes non lin 2D et 3D",
-               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION =SIMP(statut='o',typ='TXM',max='**',
                               #  contraintes
                            into=( "SIEF_ELNO_ELGA",),),
                             ),
                             
           b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
                                        fr="options de contraintes non lin poutres, coques",
-               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION =SIMP(statut='o',typ='TXM',max='**',
                               #  contraintes
                            into=( "SIEF_ELNO_ELGA","EFGE_ELNO_CART","SIGM_ELNO_TUYO","SIGM_ELNO_COQU",
                            "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",),),
@@ -4059,7 +3829,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                              ),
                              
           b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=( "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
                                  "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
                                  "EPSP_ELNO","EPSP_ELGA","EPGR_ELNO","EPGR_ELGA",
@@ -4072,7 +3842,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                     NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
                                            fr="position dans l'épaisseur de la coque, ou de la couche" ),
                                  ) ,
-               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+               EXCIT           =FACT(statut='f',min=1,max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
                b_epstuyo = BLOC( condition = "OPTION == 'EPSI_ELNO_TUYO' or \
@@ -4082,13 +3852,13 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                          ANGLE       =SIMP(statut='f',typ='I',defaut= 0,fr="angle en degres à partir de la génératrice" ),
                          NIVE_COUCHE =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
                                            fr="position dans l'épaisseur de la couche" ),
-              EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+              EXCIT           =FACT(statut='f',min=1,max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                ),
                                  
           b_vari         =BLOC( condition = "TYPE_OPTION=='VARI'",
                                        fr="Calcul et extraction des variables internes",
-                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                   OPTION    =SIMP(statut='o',typ='TXM',max='**',
                                    into=("VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU",),
                                  ),
                b_varcoqu = BLOC( condition = "OPTION in ('VARI_ELNO_COQU',) or \
@@ -4110,15 +3880,15 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  ),
                                  
           b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO_ELGA",),
                                  ),
-               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+               EXCIT           =FACT(statut='f',min=1,max='**',fr="charge contenant les temperatures",
                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
                                  ),
                                  
           b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
                                  "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
                                  "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT",
@@ -4130,17 +3900,17 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  ),
                                  
           b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
-                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                  OPTION    =SIMP(statut='o',typ='TXM',max='**',
                            into=("VALE_NCOU_MAXI",) ),
                b_maxi    =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
                                 (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
-                    NOM_CHAM  =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
-                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+                    NOM_CHAM  =SIMP(statut='o',typ='TXM',max=1,fr="Nom du champ pour VALE_NCOU_MAXI" ),
+                    NOM_CMP   =SIMP(statut='o',typ='TXM',max=1,fr="Nom de la composante pour VALE_NCOU_MAXI"),),
                                  ),
 
 
           b_indi_erre         =BLOC( condition = "TYPE_OPTION=='INDI_ERRE'",
-               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELGA_NORE",
+               OPTION    =SIMP(statut='o',typ='TXM',max='**',defaut="ERRE_ELGA_NORE",
                            into=("ERRE_ELGA_NORE","ERRE_ELNO_ELGA","ERRE_ELEM_NOZ1","ERRE_ELEM_NOZ2",
                                  "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
                                  ) ),
@@ -4158,11 +3928,11 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 
 #           thermique : evol_ther                                
      b_ther          =BLOC( condition = "AsType(RESULTAT) == evol_ther",fr="options thermiques",
-          OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+          OPTION          =SIMP(statut='f',typ='TXM',max='**',
                            into=("DEUL_ELGA_TEMP","DETE_ELNO_DLTE","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
                                   "HYDR_ELNO_ELGA","DURT_ELGA_META","DURT_ELNO_META",
                                  "SOUR_ELGA_ELEC","ERTH_ELEM_TEMP","ERTH_ELNO_ELEM",),),
-               EXCIT           =FACT(statut='f',max='**',
+               EXCIT           =FACT(statut='f',min=1,max='**',
                     regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
                     CHARGE          =SIMP(statut='o',typ=char_ther ),
                     FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
@@ -4180,11 +3950,11 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                  
 #    acoustique                                
      b_acou          =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques",
-          OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+          OPTION          =SIMP(statut='f',typ='TXM',max='**',
                            into=("PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
                                  "INTE_ELNO_ACTI","INTE_ELNO_REAC",
                                  ),),
-          EXCIT           =FACT(statut='f',max='**',
+          EXCIT           =FACT(statut='f',min=1,max='**',
                 regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
                 CHARGE          =SIMP(statut='o',typ=char_acou ),
                 FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
@@ -4196,35 +3966,22 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                 TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
                                  ),
                                  
-     SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+     SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                            fr="Liste des paramètres de sensibilité.",
                            ang="List of sensitivity parameters"),
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
      TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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.
 # ======================================================================
-def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
+def calc_fatigue_prod(TYPE_CALCUL,**args):
   if TYPE_CALCUL == "CUMUL_DOMMAGE" : return cham_elem_dommag
-  if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_ELGA": return cham_elem_facy_r
-  if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_NOEUD": return cham_no_facy_r
+  if TYPE_CALCUL == "FATIGUE_MULTI" : return cham_elem_facy_r
   raise AsException("type de calcul non prevu")
 
 CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant='n',
@@ -4242,7 +3999,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',
+           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",
@@ -4257,27 +4014,16 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
          ),
 
          b_fatigue_multi   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'",
-                                 fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.",
-           OPTION        =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
+                                 fr="Plan critique dans le cas de la fatigue multiaxiale a grand nombre de cycles.",
            RESULTAT      =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
            CHAM_MATER    =SIMP(statut='o',typ=(cham_mater) ),
            CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN") ),
            METHODE       =SIMP(statut='o',typ='TXM',into=("CERCLE_EXACT",) ),
-           GROUP_MA      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
-           MAILLE        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**' ),
-           GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ),
-           NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**' ),
-           b_fati_mult_ma =BLOC(condition = "(GROUP_MA != None or MAILLE != None or GROUP_NO != None or NOEUD != None) and \
-                                              OPTION == 'DOMA_NOEUD'",
-               MODELE        =SIMP(statut='o',typ=modele ),
-               MAILLAGE      =SIMP(statut='o',typ=maillage ),
-           ),
          ),
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4298,13 +4044,13 @@ 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-e",reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
-         VITE_FLUI       =FACT(statut='o',
+         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',
+         BASE_MODALE     =FACT(statut='o',min=1,max=1,
                                
            regles=(UN_PARMI('AMOR_REDUIT','AMOR_UNIF'),),
            MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
@@ -4313,14 +4059,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',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4365,51 +4110,38 @@ 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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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 MCOURTOI M.COURTOIS
 def calc_fonction_prod(DERIVE,EXTRACTION,INTEGRE,ECART_TYPE,INVERSE,RMS,NOCI_SEISME,MAX,COMB,COMB_C,ENVELOPPE,
-                       SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,LISS_ENVELOP,NORME,ABS, **args):
-  if (RMS         != None): return table
-  if (MAX         != None): return table
+                       SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,LISS_ENVELOP,NORME, **args):
+  if (RMS != None)        : return table
+  if (MAX != None)        : return table
   if (NOCI_SEISME != None): return table
-  if (ECART_TYPE  != None): return table
-  if (INTEGRE     != None): return fonction
-  if (DERIVE      != None): return fonction
-  if (INVERSE     != None): return fonction
-  if (COMB        != None): return fonction
-  if (ENVELOPPE   != None): return fonction
-  if (EXTRACTION  != None): return fonction
-  if (SPEC_OSCI   != None): return fonction
-  if (COMB_C      != None): return fonction_c
-  if (COMPOSE     != None): return fonction
-  if (ASSE        != None): return fonction
-  if (FFT         != None)
+  if (ECART_TYPE != None) : return table
+  if (INTEGRE != None)    : return fonction
+  if (DERIVE != None)     : return fonction
+  if (INVERSE != None)    : return fonction
+  if (COMB != None)       : return fonction
+  if (ENVELOPPE != None)  : return fonction
+  if (EXTRACTION != None) : return fonction
+  if (SPEC_OSCI != None)  : return fonction
+  if (COMB_C != None)     : return fonction_c
+  if (COMPOSE != None)    : return fonction
+  if (ASSE != None)       : return fonction
+  if (FFT != None)        
      vale=FFT.get_child('FONCTION').get_valeur()
      if (AsType(vale) == fonction )  : return fonction_c
      if (AsType(vale) == fonction_c) : return fonction
-  if (CORR_ACCE   != None): return fonction
-  if (LISS_ENVELOP!= None): return fonction
-  if (PUISSANCE   != None): return fonction
-  if (ABS         != None): return fonction
-  if (NORME       != None): return table
+  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")
 
 CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
@@ -4418,20 +4150,20 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
             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','LISS_ENVELOP','ECART_TYPE','INVERSE','ABS'),),
-         FFT             =FACT(statut='f',fr="Calcul de la transformee de Fourier ou de son inverse",
+                          'NORME','LISS_ENVELOP','ECART_TYPE','INVERSE'),),
+         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,formule) )
          ),
-         DERIVE          =FACT(statut='f',fr="Calcul de la dérivée d une fonction",
+         DERIVE          =FACT(statut='f',min=1,max=1,fr="Calcul de la dérivée d une fonction",
            METHODE         =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
            FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
          ),
-         INTEGRE         =FACT(statut='f',fr="Calcul de l intégrale d une fonction",
+         INTEGRE         =FACT(statut='f',min=1,max=1,fr="Calcul de l intégrale d une fonction",
            METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
            FONCTION        =SIMP(statut='o',typ=(fonction,formule)),
            COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
          ),
-         RMS             =FACT(statut='f',fr="Calcul de la valeur RMS d une fonction",
+         RMS             =FACT(statut='f',min=1,max=1,fr="Calcul de la valeur RMS d une fonction",
            METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
            FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
            INST_INIT       =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
@@ -4439,10 +4171,10 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
          ),
-         NOCI_SEISME     =FACT(statut='f',
+         NOCI_SEISME     =FACT(statut='f',min=1,max=1,
            FONCTION        =SIMP(statut='f',typ=(fonction,formule) ),
            SPEC_OSCI       =SIMP(statut='f',typ=(fonction,formule) ),
-           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",validators=NoRepeat(),max='**',
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",max='**',
                                  into=("INTE_ARIAS","POUV_DEST","INTE_SPEC","VITE_ABSO_CUMU",
                                        "DUREE_PHAS_FORT","MAXI","ACCE_SUR_VITE","TOUT",) ),
            INST_INIT       =SIMP(statut='f',typ='R'),
@@ -4463,7 +4195,7 @@ 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',fr="Lissage d une enveloppe",
+         LISS_ENVELOP    = FACT(statut='f',min=1,max=1,fr="Lissage d une enveloppe",
            FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
            AMOR            =SIMP(statut='f',typ='R',max='**'),
            FREQ_MIN        =SIMP(statut='f',typ='R'),
@@ -4488,7 +4220,7 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
                        AMOR_ECH    =SIMP(statut='f',typ='R',max='**'),
                               ),
          ),
-         SPEC_OSCI       =FACT(statut='f',fr="Calcul du spectre d oscillateur",
+         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,formule) ),
            AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
@@ -4498,17 +4230,14 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
            NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
            NATURE_FONC     =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
          ),
-         MAX             =FACT(statut='f',fr="Calcul des extrémas locaux d une fonction",
+         MAX             =FACT(statut='f',min=1,max=1,fr="Calcul des extrémas locaux d une fonction",
            FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
          ),
-         ABS             =FACT(statut='f',fr="Calcul de la valeur absolue d une fonction",
-           FONCTION        =SIMP(statut='o',typ=(fonction,formule),),
-         ),
-         COMB            =FACT(statut='f',max='**',fr="Calcul d une combinaison linéaire réelle de fonctions",
+         COMB            =FACT(statut='f',min=1,max='**',fr="Calcul d une combinaison linéaire réelle de fonctions",
            FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
            COEF            =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
          ),
-         COMB_C          =FACT(statut='f',max='**',fr="Calcul d une combinaison linéaire complexe de fonctions",
+         COMB_C          =FACT(statut='f',min=1,max='**',fr="Calcul d une combinaison linéaire complexe de fonctions",
            regles=(UN_PARMI('COEF_R','COEF_C'),),
            FONCTION        =SIMP(statut='o',typ=(fonction, fonction_c,formule) ),
            COEF_R          =SIMP(statut='f',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
@@ -4517,37 +4246,37 @@ CALC_FONCTION=OPER(nom="CALC_FONCTION",op=  91,sd_prod=calc_fonction_prod
          b_comb          =BLOC ( condition = " (COMB != None) or (COMB_C != None)",
              LIST_PARA      =SIMP(statut='f',typ=listr8 ),  
          ),
-         COMPOSE         =FACT(statut='f',fr="Calcul de la composition de deux fonctions FONC_RESU(FONC_PARA)",
+         COMPOSE         =FACT(statut='f',min=1,max=1,fr="Calcul de la composition de deux fonctions FONC_RESU(FONC_PARA)",
            FONC_RESU       =SIMP(statut='o',typ=(fonction,formule)),
            FONC_PARA       =SIMP(statut='o',typ=(fonction,formule)),
          ),
-         EXTRACTION      =FACT(statut='f',fr="Opération d extraction sur une fonction complexe",
+         EXTRACTION      =FACT(statut='f',min=1,max=1,fr="Opération d extraction sur une fonction complexe",
            FONCTION        =SIMP(statut='o',typ=fonction_c),
            PARTIE          =SIMP(statut='o',typ='TXM',into=("REEL","IMAG","MODULE","PHASE"),fr="Partie à extraire"),
          ),
-         ENVELOPPE       =FACT(statut='f',fr="Calcul de l enveloppe d une famille de fonctions",
+         ENVELOPPE       =FACT(statut='f',min=1,max=1,fr="Calcul de l enveloppe d une famille de fonctions",
            FONCTION        =SIMP(statut='o',typ=(fonction,formule),max='**' ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
          ),
-         ASSE            =FACT(statut='f',fr="Création à partir de la concatenation de fonctions",
+         ASSE            =FACT(statut='f',min=1,max=1,fr="Création à partir de la concatenation de fonctions",
            FONCTION        =SIMP(statut='o',typ=(fonction,formule),max='**' ),
            SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
          ),
-          CORR_ACCE     =FACT(statut='f',fr="Correction d un accelerogramme reel",
+          CORR_ACCE     =FACT(statut='f',min=1,max=1,fr="Correction d un accelerogramme reel",
             CORR_DEPL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
             FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
          ),
-         PUISSANCE       =FACT(statut='f',fr="Cacul du carré d'une fonction",
+         PUISSANCE       =FACT(statut='f',min=1,max=1,fr="Cacul du carré d'une fonction",
             FONCTION      =SIMP(statut='o', typ=(fonction,formule)),
             EXPOSANT      =SIMP(statut='f', typ='I', defaut=1 ),
          ),
-         NORME           =FACT(statut='f',fr="Cacul de la norme L2 d'une fonction",
+         NORME           =FACT(statut='f',min=1,max=1,fr="Cacul de la norme L2 d'une fonction",
             FONCTION      =SIMP(statut='o', typ=(fonction,formule)),
          ),     
-         INVERSE         =FACT(statut='f',fr="Cacul de l inverse d une fonction",
+         INVERSE         =FACT(statut='f',min=1,max=1,fr="Cacul de l inverse d une fonction",
             FONCTION      =SIMP(statut='o', typ=fonction),
          ),     
-         ECART_TYPE      =FACT(statut='f',fr="Cacul de l ecart-type d une fonction",
+         ECART_TYPE      =FACT(statut='f',min=1,max=1,fr="Cacul de l ecart-type d une fonction",
             METHODE       =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
             FONCTION      =SIMP(statut='o',typ=fonction),
             INST_INIT     =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
@@ -4571,8 +4300,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4609,19 +4337,19 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
          NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
          DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
          AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         NUME_MODE_MECA  =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
          POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
          NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 
          DIRECTION       =SIMP(statut='o',typ='R',max=3),
          MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
-         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,),),
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -4644,8 +4372,7 @@ CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
                            ),
 
            ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4678,9 +4405,9 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
          b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
              regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
              LIST_ORDRE      =SIMP(statut='f',typ=listis),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
              LIST_INST       =SIMP(statut='f',typ=listr8),
              
              b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
@@ -4689,10 +4416,10 @@ 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,validators=NoRepeat(),max='**'),
+         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',
+         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,) ),
@@ -4701,11 +4428,11 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
                DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
  
-         COMP_INCR       =FACT(statut='f',
+         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,) ),
@@ -4715,11 +4442,11 @@ CALC_G_LOCAL_T=OPER(nom="CALC_G_LOCAL_T",op=77,sd_prod=tabl_calc_g_loca,
                DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
          
-         ETAT_INIT       =FACT(statut='f',
+         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),
          ),
@@ -4742,7 +4469,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',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'),
@@ -4761,8 +4488,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4782,7 +4508,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-f",reentrant='f',
+                    docu="U4.82.03-f",reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
          regles=(UN_PARMI('RESULTAT','DEPL'),
                  EXCLUS('COMP_ELAS','COMP_INCR'),),
@@ -4795,9 +4521,9 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
          b_extrac        =BLOC(condition="RESULTAT != None",fr="extraction d un champ",
            regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            LIST_ORDRE      =SIMP(statut='f',typ=listis),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8),
             
            b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
@@ -4806,10 +4532,10 @@ 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,validators=NoRepeat(),max='**'),
+         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',
+         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,) ),
@@ -4818,10 +4544,10 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
                DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","GREEN") ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),  
-         COMP_INCR       =FACT(statut='f',
+         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,) ),
@@ -4831,17 +4557,17 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
                DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+               GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
-         ETAT_INIT       =FACT(statut='f',
+         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",) ),
+                               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',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'),
@@ -4853,16 +4579,16 @@ CALC_G_THETA_T=OPER(nom="CALC_G_THETA_T",op=53,sd_prod=tabl_calc_g_th,
          b_calc_g_lagr   =BLOC(condition="OPTION=='CALC_G_LAGR'",
            PROPAGATION     =SIMP(statut='o',typ='R'),
          ),
-
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                           fr="Liste des paramètres de sensibilité.",
-                           ang="List of sensitivity parameters"),
+         b_calc_dg       =BLOC(condition="OPTION=='CALC_DG'",
+           SENSIBILITE     =FACT(statut='f',min=1,max=1,
+                 THETA          =SIMP(statut='o',typ=theta_geom ),
+                               ),  
+         ),
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4890,11 +4616,10 @@ CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=tabl_intsp,
          DUREE_DECALAGE  =SIMP(statut='f',typ='R' ),
          NB_POIN         =SIMP(statut='o',typ='I' ),
          FONCTION        =SIMP(statut='o',typ=(fonction,formule),max='**' ),
-         TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4929,13 +4654,13 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
          NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
          DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
          AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         NUME_MODE_MECA  =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',max='**'),
          OPTION          =SIMP(statut='o',typ='TXM',into=("MASS_AJOU","AMOR_AJOU","RIGI_AJOU") ),
          POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
          NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
 
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -4957,8 +4682,7 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
            ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5021,7 +4745,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
              CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
              MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
            ),
-           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
            b_charge        =BLOC (condition = "CHARGE != None",
              INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
@@ -5030,7 +4754,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
          b_rigi_meca_lagr  =BLOC(condition = "OPTION=='RIGI_MECA_LAGR'",
            MODELE            =SIMP(statut='o',typ=modele ),
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
-           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'  ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'  ),
            b_charge        =BLOC(condition = "CHARGE != None",
              INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
@@ -5045,7 +4769,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
              CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
              CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
            ),
-           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**' ),
            b_charge        =BLOC(condition = "CHARGE != None",
              INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
@@ -5068,7 +4792,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
          b_rigi_rota       =BLOC(condition = "OPTION=='RIGI_ROTA'",
            MODELE            =SIMP(statut='o',typ=modele ),
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
-           CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
            INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 
@@ -5080,12 +4804,12 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
            CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
            RIGI_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
            MASS_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
-           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**' ),
          ),
 
          b_rigi_meca_hyst  =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
            MODELE            =SIMP(statut='o',typ=modele ),
-           CHARGE            =SIMP(statut='f',typ=char_meca ,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='f',typ=char_meca ,max='**' ),
            CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
            CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
            RIGI_MECA         =SIMP(statut='o',typ=matr_elem_depl_r ),
@@ -5099,7 +4823,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
              CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
              MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
            ),
-           CHARGE            =SIMP(statut='f',typ=char_ther,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='f',typ=char_ther,max='**' ),
          ),
 
          b_mass_ther       =BLOC(condition = "OPTION=='MASS_THER'",
@@ -5111,25 +4835,24 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
          b_rigi_acou       =BLOC(condition = "(OPTION=='RIGI_ACOU') or (OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
            MODELE            =SIMP(statut='o',typ=modele ),
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
-           CHARGE            =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,max='**' ),
          ),
 
          b_rigi_flui       =BLOC(condition = "(OPTION=='RIGI_FLUI_STRU') or (OPTION=='MASS_FLUI_STRU')",
            MODELE            =SIMP(statut='o',typ=modele ),
            CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
-           CHARGE            =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,max='**' ),
            INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 
          b_impe_meca       =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
            MODELE            =SIMP(statut='o',typ=modele ),
-           CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,max='**' ),
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5153,7 +4876,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-b",reentr
          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',
+         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' ),  
@@ -5164,7 +4887,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-b",reentr
                              ),
            META_INIT       =SIMP(statut='f',typ=carte_var2_r ),
          ),
-         COMP_INCR       =FACT(statut='o',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,) ),
@@ -5176,8 +4899,7 @@ CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,docu="U4.85.01-b",reentr
          OPTION          =SIMP(statut='f',typ='TXM'     
                              ,into=("META_ELNO_TEMP",) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5206,26 +4928,26 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-f",reentr
                                                mode_acou,mode_stat,mode_stat_depl,mode_stat_acce,
                                               mode_stat_forc,evol_ther,evol_noli,base_modale,
                                                mult_elas,fourier_elas,mode_flamb ) ),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                fr="Liste des paramètres de sensibilité.",
                                ang="List of sensitivity parameters"),
 
          regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
                         'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
          NOM_CAS         =SIMP(statut='f',typ='TXM' ),
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
          LIST_INST       =SIMP(statut='f',typ=listr8),
          LIST_FREQ       =SIMP(statut='f',typ=listr8),
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
          LIST_ORDRE      =SIMP(statut='f',typ=listis),
 
-         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
                                into=("FORC_NODA","REAC_NODA",
                                      "DCHA_NOEU_SIGM",
                                      "DEGE_NOEU_DEPL",
@@ -5264,18 +4986,17 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,docu="U4.81.02-f",reentr
 
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
-         EXCIT           =FACT(statut='f',max='**',
+         EXCIT           =FACT(statut='f',min=1,max='**',
            CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
                                  into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
          ),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-         MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 01/04/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5313,9 +5034,9 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
          MODELE           =SIMP(statut='o',typ=modele),
          CHAM_MATER       =SIMP(statut='o',typ=cham_mater),
          CARA_ELEM        =SIMP(statut='o',typ=cara_elem),
-         CABLE_BP         =SIMP(statut='o',typ=cabl_precont,validators=NoRepeat(),max='**'),
-         CABLE_BP_INACTIF =SIMP(statut='f',typ=cabl_precont,validators=NoRepeat(),max='**'),
-         INCREMENT        =FACT(statut='o',
+         CABLE_BP         =SIMP(statut='o',typ=cabl_precont,max='**'),
+         CABLE_BP_INACTIF =SIMP(statut='f',typ=cabl_precont,max='**'),
+         INCREMENT        =FACT(statut='o',min=1,max=1,
            LIST_INST       =SIMP(statut='o',typ=listr8),
            INST_INIT       =SIMP(statut='f',typ='R'),
            INST_FIN        =SIMP(statut='f',typ='R'),
@@ -5325,7 +5046,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
            COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
          ),
 
-         NEWTON          =FACT(statut='d',
+         NEWTON          =FACT(statut='d',min=1,max=1,
             REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
             PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
             MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
@@ -5333,11 +5054,11 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
             EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
           ),
-         RECH_LINEAIRE   =FACT(statut='f',
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
          ),
-          CONVERGENCE     =FACT(statut='d',
+          CONVERGENCE     =FACT(statut='d',min=1,max=1,
             RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
             RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
             ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
@@ -5351,7 +5072,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
                                   into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
           ),
-          ETAT_INIT       =FACT(statut='f',
+          ETAT_INIT       =FACT(statut='f',min=1,max=1,
             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
                     EXCLUS('EVOL_NOLI','DEPL',),
                     EXCLUS('EVOL_NOLI','SIGM',),
@@ -5370,7 +5091,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             NUME_DIDI       =SIMP(statut='f',typ='I'),
             INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
           ),
-          SOLVEUR         =FACT(statut='d',
+          SOLVEUR         =FACT(statut='d',min=1,max=1,
             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -5392,7 +5113,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
             ),
             SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
           ),
-            SOLV_NON_LOCAL  =FACT(statut='f',
+            SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
               METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
               b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
                 RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -5413,7 +5134,7 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
               ),
               EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
             ),
-            LAGR_NON_LOCAL  =FACT(statut='f',
+            LAGR_NON_LOCAL  =FACT(statut='f',max=1,
               ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
               RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
               RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
@@ -5425,14 +5146,13 @@ CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
           INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
           TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 
-          EXCIT           =FACT(statut='o',max='**',
+          EXCIT           =FACT(statut='o',min=1,max='**',
             CHARGE          =SIMP(statut='o',typ=char_meca),
           ),
 
          COMP_INCR       =C_COMP_INCR(),
   )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5458,14 +5178,14 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-e",reen
                  EXCLUS('DIRECTION','DIRE_THETA'),),
          OPTION          =SIMP(statut='f',typ='TXM',defaut="COURONNE",into=("COURONNE","BANDE") ),
          MODELE          =SIMP(statut='o',typ=(modele) ),
-         THETA_3D        =FACT(statut='f',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'),
                    ENSEMBLE('MODULE_FO','R_INF_FO','R_SUP_FO'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            MODULE          =SIMP(statut='f',typ='R'),
            R_INF           =SIMP(statut='f',typ='R'),
            R_SUP           =SIMP(statut='f',typ='R'),
@@ -5477,27 +5197,26 @@ CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,docu="U4.82.02-e",reen
            FOND_FISS       =SIMP(statut='f',typ=fond_fiss),),
          DIRE_THETA      =SIMP(statut='f',typ=(cham_no_depl_r) ),
          DIRECTION       =SIMP(statut='f',typ='R',max='**'),
-         THETA_2D        =FACT(statut='f',max='**',
+         THETA_2D        =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('GROUP_NO','NOEUD'),),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            MODULE          =SIMP(statut='o',typ='R'),
            R_INF           =SIMP(statut='o',typ='R'),
            R_SUP           =SIMP(statut='o',typ='R'),
          ),
-         THETA_BANDE     =FACT(statut='f',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") ),
-         IMPRESSION      =FACT(statut='f',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5531,7 +5250,7 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="
                                                            "FORC_NODA","CHAR_MECA_LAGR") ),
          b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
            regles=(AU_MOINS_UN('CHARGE','MODELE'),),
-           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
            MODELE          =SIMP(statut='f',typ=modele),
            b_charge     =BLOC(condition = "CHARGE != None", fr="modèle ne contenant pas de sous-structure",
               CHAM_MATER   =SIMP(statut='f',typ=cham_mater),
@@ -5544,19 +5263,19 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="
                 regles=(UN_PARMI('TOUT','MAILLE'),),
                 CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
                 TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                MAILLE      =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                MAILLE      =SIMP(statut='f',typ=ma,max='**',),
               ),
            ),
          ),
          b_char_ther     =BLOC(condition = "OPTION=='CHAR_THER'",
            CARA_ELEM        =SIMP(statut='f',typ=cara_elem),
-           CHARGE           =SIMP(statut='o',typ=char_ther,validators=NoRepeat(),max='**'),
+           CHARGE           =SIMP(statut='o',typ=char_ther,max='**'),
            INST             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
               
          b_char_acou     =BLOC(condition = "OPTION=='CHAR_ACOU'",
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
-           CHARGE            =SIMP(statut='o',typ=char_acou,validators=NoRepeat(),max='**'),
+           CHARGE            =SIMP(statut='o',typ=char_acou,max='**'),
          ),
          
          b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
@@ -5569,12 +5288,11 @@ CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,docu="
            CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
            THETA             =SIMP(statut='o',typ=theta_geom),
            PROPAGATION       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+           CHARGE            =SIMP(statut='f',typ=char_meca,max='**'),
            INST              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5619,7 +5337,7 @@ COMB_CHAM_ELEM=OPER(nom="COMB_CHAM_ELEM",op= 139,sd_prod=comb_cham_elem_prod,ree
             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',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',
@@ -5627,13 +5345,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',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',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") ),
@@ -5642,8 +5360,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5686,20 +5403,20 @@ COMB_CHAM_NO=OPER(nom="COMB_CHAM_NO",op=  30,sd_prod=comb_cham_no_prod
                      docu="U4.72.02-g",reentrant='f',
             UIinfo={"groupes":("Résultats et champs",)},
          regles=(UN_PARMI('COMB_R','COMB_C','COMB_FOURIER'),),
-         COMB_R          =FACT(statut='f',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',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',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' ),
@@ -5709,8 +5426,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5734,11 +5450,10 @@ COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
             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',validators=NoRepeat(),max=5,
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5778,20 +5493,20 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
                     docu="U4.72.01-g",reentrant='f',
             UIinfo={"groupes":("Résultats et champs",)},
          regles=(UN_PARMI('COMB_R','COMB_C','CALC_AMOR_GENE' ),),
-         COMB_R          =FACT(statut='f',max='**',
+         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',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',
+         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),
@@ -5800,8 +5515,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
          ),         
          SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5827,10 +5541,10 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
                  UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),),
          MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
          LIST_ORDRE      =SIMP(statut='f',typ=listis ),
-         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
          LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
          b_freq          =BLOC(condition = "FREQ != None or LIST_FREQ != None",
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
@@ -5845,24 +5559,26 @@ 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',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('MONO_APPUI','NOEUD','GROUP_NO'),
                    UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
            
            MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           AXE             =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",),
-           TRI_AXE         =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant les trois axes mais avec le meme spectre",),
-           TRI_SPEC        =SIMP(statut='f',typ='TXM',into=("OUI",),
-                                 fr="Excitation suivant les trois axes  avec trois spectres"),
+           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=3),
+           TRI_AXE         =SIMP(statut='f',fr="Excitation suivant les trois axes mais avec le meme spectre",
+                                 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,formule),),
-             ECHELLE         =SIMP(statut='f',typ='R',),
+             SPEC_OSCI       =SIMP(statut='o',typ=(fonction,formule),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,formule),),
-             ECHELLE         =SIMP(statut='f',typ='R',),
+             SPEC_OSCI       =SIMP(statut='o',typ=(fonction,formule),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,formule),min=3,max=3 ),
@@ -5870,93 +5586,234 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
            ),       
            NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
          ),
-         COMB_MODE       =FACT(statut='o',
+         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',
+         COMB_DIRECTION  =FACT(statut='f',min=1,max=1,
            TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
          ),
-         COMB_MULT_APPUI =FACT(statut='f',max='**',
+         COMB_MULT_APPUI =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE",) ),
          ),
-         COMB_DEPL_APPUI=FACT(statut='f',max='**',
+         COMB_DEPL_APPUI=FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('TOUT','LIST_CAS'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
            LIST_CAS       =SIMP(statut='f',typ='I',max='**'),
            TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
          ),
-         DEPL_MULT_APPUI =FACT(statut='f',max='**',
+         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='**'),
            NUME_CAS        =SIMP(statut='o',typ='I',max='**'),
            MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,), ),
            NOEUD_REFE      =SIMP(statut='f',typ=no),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            DX              =SIMP(statut='f',typ='R' ),
            DY              =SIMP(statut='f',typ='R' ),
            DZ              =SIMP(statut='f',typ='R' ),
          ),
-         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=9,
+         OPTION          =SIMP(statut='o',typ='TXM',max=9,
                                into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
                                      "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
                                      "SIPO_ELNO_DEPL") ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
-         IMPRESSION      =FACT(statut='f',max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('TOUT','NIVEAU'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),validators=NoRepeat(),max=3 ),
+           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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 # RESPONSABLE VABHHTS J.PELLET
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
+#              REDISTRIBUTION OF THIS FILE.
 # ======================================================================
 def crea_champ_prod(TYPE_CHAM,**args):
-  import string
-  grandeur=string.lower(TYPE_CHAM[5:])
-
-  if TYPE_CHAM[0:5] == "CART_" :
-     uu="carte_"+grandeur
-  elif TYPE_CHAM[0:5] == "NOEU_" :
-     uu="cham_no_"+grandeur
-  elif TYPE_CHAM[0:2] == "EL"    :
-     uu="cham_elem_"+grandeur
-  else :
-     raise AsException("type de concept resultat non prevu")
-
-  vv=eval(uu) ; return vv
-
+  if TYPE_CHAM == "CART_DBEL_R" : return carte_dbel_r
+  if TYPE_CHAM == "CART_DEPL_C" : return carte_depl_c
+  if TYPE_CHAM == "CART_DEPL_F" : return carte_depl_f
+  if TYPE_CHAM == "CART_DEPL_R" : return carte_depl_r
+  if TYPE_CHAM == "CART_DURT_R" : return carte_durt_r
+  if TYPE_CHAM == "CART_ENER_R" : return carte_ener_r
+  if TYPE_CHAM == "CART_EPSI_R" : return carte_epsi_r
+  if TYPE_CHAM == "CART_ERREUR" : return carte_erreur
+  if TYPE_CHAM == "CART_FLUX_R" : return carte_flux_r
+  if TYPE_CHAM == "CART_GEOM_R" : return carte_geom_r
+  if TYPE_CHAM == "CART_G_DEPL_R" : return carte_g_depl_r
+  if TYPE_CHAM == "CART_HYDR_R" : return carte_hydr_r
+  if TYPE_CHAM == "CART_INST_R" : return carte_inst_r
+  if TYPE_CHAM == "CART_INTE_R" : return carte_inte_r
+  if TYPE_CHAM == "CART_META_R" : return carte_meta_r
+  if TYPE_CHAM == "CART_NEUT_F" : return carte_neut_f
+  if TYPE_CHAM == "CART_NEUT_R" : return carte_neut_r
+  if TYPE_CHAM == "CART_PRES_R" : return carte_pres_r
+  if TYPE_CHAM == "CART_SIEF_R" : return carte_sief_r
+  if TYPE_CHAM == "CART_SOUR_R" : return carte_sour_r
+  if TYPE_CHAM == "CART_TEMP_F" : return carte_temp_f
+  if TYPE_CHAM == "CART_TEMP_R" : return carte_temp_r
+  if TYPE_CHAM == "CART_VAR2_R" : return carte_var2_r
+  if TYPE_CHAM == "CART_VNOR_C" : return carte_vnor_c
+  if TYPE_CHAM == "NOEU_DBEL_R" : return cham_no_dbel_r
+  if TYPE_CHAM == "NOEU_DEPL_C" : return cham_no_depl_c
+  if TYPE_CHAM == "NOEU_DEPL_F" : return cham_no_depl_f
+  if TYPE_CHAM == "NOEU_DEPL_R" : return cham_no_depl_r
+  if TYPE_CHAM == "NOEU_DURT_R" : return cham_no_durt_r
+  if TYPE_CHAM == "NOEU_ENER_R" : return cham_no_ener_r
+  if TYPE_CHAM == "NOEU_EPSI_R" : return cham_no_epsi_r
+  if TYPE_CHAM == "NOEU_ERREUR" : return cham_no_erreur
+  if TYPE_CHAM == "NOEU_FLUX_R" : return cham_no_flux_r
+  if TYPE_CHAM == "NOEU_GEOM_R" : return cham_no_geom_r
+  if TYPE_CHAM == "NOEU_G_DEPL_R" : return cham_no_g_depl_r
+  if TYPE_CHAM == "NOEU_HYDR_R" : return cham_no_hydr_r
+  if TYPE_CHAM == "NOEU_INST_R" : return cham_no_inst_r
+  if TYPE_CHAM == "NOEU_INTE_R" : return cham_no_inte_r
+  if TYPE_CHAM == "NOEU_META_R" : return cham_no_meta_r
+  if TYPE_CHAM == "NOEU_NEUT_F" : return cham_no_neut_f
+  if TYPE_CHAM == "NOEU_NEUT_R" : return cham_no_neut_r
+  if TYPE_CHAM == "NOEU_PRES_R" : return cham_no_pres_r
+  if TYPE_CHAM == "NOEU_SIEF_R" : return cham_no_sief_r
+  if TYPE_CHAM == "NOEU_SOUR_R" : return cham_no_sour_r
+  if TYPE_CHAM == "NOEU_TEMP_F" : return cham_no_temp_f
+  if TYPE_CHAM == "NOEU_TEMP_R" : return cham_no_temp_r
+  if TYPE_CHAM == "NOEU_VAR2_R" : return cham_no_var2_r
+  if TYPE_CHAM == "NOEU_VNOR_C" : return cham_no_vnor_c
+  if TYPE_CHAM == "ELEM_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELEM_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELEM_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELEM_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELEM_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELEM_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELEM_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELEM_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELEM_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELEM_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELEM_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELEM_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELEM_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELEM_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELEM_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELEM_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELEM_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELEM_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELEM_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELEM_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELEM_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELEM_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELEM_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELEM_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELNO_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELNO_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELNO_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELNO_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELNO_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELNO_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELNO_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELNO_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELNO_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELNO_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELNO_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELNO_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELNO_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELNO_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELNO_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELNO_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELNO_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELNO_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELNO_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELNO_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELNO_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELNO_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELNO_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELNO_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "ELGA_DBEL_R" : return cham_elem_dbel_r
+  if TYPE_CHAM == "ELGA_DEPL_C" : return cham_elem_depl_c
+  if TYPE_CHAM == "ELGA_DEPL_F" : return cham_elem_depl_f
+  if TYPE_CHAM == "ELGA_DEPL_R" : return cham_elem_depl_r
+  if TYPE_CHAM == "ELGA_DURT_R" : return cham_elem_durt_r
+  if TYPE_CHAM == "ELGA_ENER_R" : return cham_elem_ener_r
+  if TYPE_CHAM == "ELGA_EPSI_R" : return cham_elem_epsi_r
+  if TYPE_CHAM == "ELGA_ERREUR" : return cham_elem_erreur
+  if TYPE_CHAM == "ELGA_FLUX_R" : return cham_elem_flux_r
+  if TYPE_CHAM == "ELGA_GEOM_R" : return cham_elem_geom_r
+  if TYPE_CHAM == "ELGA_G_DEPL_R" : return cham_elem_g_depl
+  if TYPE_CHAM == "ELGA_HYDR_R" : return cham_elem_hydr_r
+  if TYPE_CHAM == "ELGA_INST_R" : return cham_elem_inst_r
+  if TYPE_CHAM == "ELGA_INTE_R" : return cham_elem_inte_r
+  if TYPE_CHAM == "ELGA_META_R" : return cham_elem_meta_r
+  if TYPE_CHAM == "ELGA_NEUT_F" : return cham_elem_neut_f
+  if TYPE_CHAM == "ELGA_NEUT_R" : return cham_elem_neut_r
+  if TYPE_CHAM == "ELGA_PRES_R" : return cham_elem_pres_r
+  if TYPE_CHAM == "ELGA_SIEF_R" : return cham_elem_sief_r
+  if TYPE_CHAM == "ELGA_SOUR_R" : return cham_elem_sour_r
+  if TYPE_CHAM == "ELGA_TEMP_F" : return cham_elem_temp_f
+  if TYPE_CHAM == "ELGA_TEMP_R" : return cham_elem_temp_r
+  if TYPE_CHAM == "ELGA_VARI_R" : return cham_elem_vari_r
+  if TYPE_CHAM == "ELGA_VNOR_C" : return cham_elem_vnor_c
+  if TYPE_CHAM == "CART_IRRA_R" : return carte_irra_r
+  if TYPE_CHAM == "NOEU_IRRA_R" : return cham_no_irra_r
+  if TYPE_CHAM == "ELEM_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELNO_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELGA_IRRA_R" : return cham_elem_irra_r
+  if TYPE_CHAM == "ELEM_SPMA_R" : return cham_elem_spma_r
+  raise AsException("type de concept resultat non prevu")
 
 CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
                 fr="  ",docu="U4.72.04-b",reentrant='n',
             UIinfo={"groupes":("Résultats et champs",)},
-         TYPE_CHAM       =SIMP(statut='o',typ='TXM',),
-      # TYPE_CHAM doit etre de la forme : CART_xx, NOEU_xx, ELEM_xx, ELGA_xx ou ELNO_xx
-      # ou xx est le nom d'une grandeur définie dans le catalogue des grandeurs
+         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","ELEM_SPMA_R",) ),
 
 #        SI CREATION D'UN CHAM_NO, POUR IMPOSER LA NUMEROTATION DES DDLS :
 #        ------------------------------------------------------------------
@@ -5977,15 +5834,15 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
              MODELE          =SIMP(statut='f',typ=(modele) ),
              b_affe_modele   =BLOC(condition = "MODELE != None",
                  PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
-             AFFE            =FACT(statut='o',max='**',
+             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 ,validators=NoRepeat(),max='**'),
-                MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-                GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-                NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-                NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                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='**' ),
@@ -5998,14 +5855,14 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
              MODELE          =SIMP(statut='f',typ=(modele) ),
              b_asse_modele   =BLOC(condition = "MODELE != None",
                  PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
-             ASSE            =FACT(statut='o',max='**',
+             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,validators=NoRepeat(),max='**'),
-                GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+                NOEUD           =SIMP(statut='f',typ=no,max='**'),
                 CHAM_GD         =SIMP(statut='o',typ=(cham_gd)),
                 NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
                 NOM_CMP_RESU    =SIMP(statut='f',typ='TXM',max='**' ),
@@ -6035,7 +5892,51 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
                  SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
                                    fr="Paramètre de sensibilité.",
                                    ang="Sensitivity parameter"),
-                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+                 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",
+                             "EPMG_ELNO_DEPL",
+                             "EPMG_ELGA_DEPL","GRAD_ELGA_THETA",
+                             "GTHE_ELNO_ELGA","GRAD_NOEU_THETA",
+                             "HYDR_ELGA","HYDR_ELNO_ELGA","HYDR_NOEU_ELGA",
+                             "THETA","SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",
+                             "VALE_CONT","VALE_NCOU_MAXI") ),
                  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",) ),
@@ -6058,9 +5959,7 @@ CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-# RESPONSABLE MCOURTOI M.COURTOIS
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6086,87 +5985,61 @@ CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage,
                  EXCLUS('ECLA_PG','DETR_GROUP_MA'),
                  EXCLUS('ECLA_PG','MODI_MAILLE'),
                  EXCLUS('ECLA_PG','LINE_QUAD'),
-                 EXCLUS('ECLA_PG','COQU_VOLU'),
                  EXCLUS('LINE_QUAD','MODI_MAILLE'),
                  EXCLUS('LINE_QUAD','CREA_MAILLE'),
                  EXCLUS('LINE_QUAD','CREA_GROUP_MA'),
                  EXCLUS('LINE_QUAD','DETR_GROUP_MA'),
-                 EXCLUS('LINE_QUAD','COQU_VOLU'),
-                 EXCLUS('COQU_VOLU','MODI_MAILLE'),
-                 EXCLUS('COQU_VOLU','CREA_MAILLE'),
-                 EXCLUS('COQU_VOLU','CREA_GROUP_MA'),
-                 EXCLUS('COQU_VOLU','DETR_GROUP_MA'),
                  ),
          MAILLAGE        =SIMP(statut='o',typ=maillage ),
-         CREA_POI1       =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           NOM_GROUP_MA    =SIMP(statut='f',typ=grma,max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
          ),
-         CREA_MAILLE     =FACT(statut='f',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  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
            PREF_NUME       =SIMP(statut='f',typ='I' ),
          ),
-         CREA_GROUP_MA   =FACT(statut='f',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",) ),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
            PREF_NUME       =SIMP(statut='f',typ='I' ),
          ),
-         DETR_GROUP_MA   =FACT(statut='f',fr="Destruction de groupes de mailles",
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         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",  ),
          ),
-         COQU_VOLU   =FACT(statut='f',
-                           fr="Creation de mailles volumiques à partir de mailles surfaciques",
-           NOM             =SIMP(statut='o',typ='TXM'),
-           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max ='**'),
-           EPAIS           =SIMP(statut='o',typ='R' ),
-           PREF_MAILLE     =SIMP(statut='f',typ='TXM',defaut="MS" ),
-           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS" ),
-           PREF_NUME       =SIMP(statut='f',typ='I'  ,defaut=1 ),
-           PLAN            =SIMP(statut='o',typ='TXM',into=("SUP","MOY","INF")),
-           b_MOY =BLOC(condition = "PLAN == 'MOY'",
-             TRANSLATION   =SIMP(statut='o',typ='TXM',into=("SUP","INF") ),
-           ),
-         ),
-         MODI_MAILLE     =FACT(statut='f',max='**',fr="Modification du type de mailles",
+         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,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4","QUAD_TRIA3"),
-                                 fr="Choix de la transformation" ),
-           b_NOS =BLOC(condition = "OPTION == 'TRIA6_7'  or  OPTION == 'QUAD8_9'  or  OPTION == 'SEG3_4'",
-             PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
-             PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
-           ),
-           b_QTR =BLOC(condition = "OPTION == 'QUAD_TRIA3'",
-             PREF_MAILLE     =SIMP(statut='f',typ='TXM',defaut="MS" ),
-             PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
-           ),
+           MAILLE          =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=ma,max='**'),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4"),fr="Choix de la transformation" ),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
          ),
-         LINE_QUAD     =FACT(statut='f',fr="Passage linéaire -> quadratique",
+         LINE_QUAD     =FACT(statut='f',min=01,max=1,fr="Passage linéaire -> quadratique",
            regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           MAILLE          =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=ma,max='**'),
            PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
            PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
          ),
-         REPERE          =FACT(statut='f',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" ),
@@ -6177,17 +6050,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',
+         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='**'),
-#
-         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6225,14 +6095,14 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
 
            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",),),
-           AFFE         =FACT(statut='o',max='**',
+           NOM_CHAM     =SIMP(statut='f',typ='TXM',into=("DEPL","TEMP","IRRA","HYDR_ELGA",),max=1 ),
+           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' ),
              NUME_MODE       =SIMP(statut='f',typ='I'),
              TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
              LIST_INST       =SIMP(statut='f',typ=listr8),
              NUME_INIT       =SIMP(statut='f',typ='I'),
              NUME_FIN        =SIMP(statut='f',typ='I'),
@@ -6245,17 +6115,17 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
 
-           ECLA_PG         =FACT(statut='o',
+           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',validators=NoRepeat(),max='**',
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
                                    into=("SIEF_ELGA","VARI_ELGA","SIEF_ELGA_DEPL","FLUX_ELGA_TEMP",) ),
              MODELE_INIT     =SIMP(statut='o',typ=modele),
              RESU_INIT       =SIMP(statut='o',typ=resultat),
              MAILLAGE        =SIMP(statut='o',typ=maillage),
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
              LIST_ORDRE      =SIMP(statut='f',typ=listis),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
              LIST_INST       =SIMP(statut='f',typ=listr8),
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
@@ -6265,7 +6135,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
          b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'",
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","SIEF_ELGA","VARI_ELGA",),validators=NoRepeat(),max='**' ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","SIEF_ELGA","VARI_ELGA",),max='**' ),
            RESU_INIT       =SIMP(statut='o',typ=evol_noli),
            INST_INIT       =SIMP(statut='f',typ='R'),
            PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
@@ -6273,7 +6143,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
            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',
+           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='**'),
@@ -6285,11 +6155,11 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
 
            TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER",) ),
 
-           PROL_RTZ        =FACT(statut='o',
+           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"),
-              INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+              INST            =SIMP(statut='f',typ='R',max='**'),
               LIST_INST       =SIMP(statut='f',typ=listr8),
               b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
                  PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
@@ -6304,8 +6174,7 @@ CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,docu="U4.44.12-e",r
          ),
 
 )  ;
-
-#& MODIF COMMANDE  DATE 06/09/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6330,9 +6199,6 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,docu="U4.11.01-g",repetable='n',
 
          PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
                            into=("OUI","NON"),defaut="OUI"),
-         HDF             =FACT(statut='f',min=1,max=1,
-           FICHIER         =SIMP(fr="nom du fichier hdf associe",statut='o',typ='TXM'),
-         ),
          BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
                                statut='f',min=1,max=3,
            FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
@@ -6352,7 +6218,7 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,docu="U4.11.01-g",repetable='n',
            TITRE           =SIMP(statut='f',typ='TXM'),
            UNITE           =SIMP(statut='f',typ='I'),
          ),
-         CODE            =FACT(fr="définition d un nom pour l'ensemble d'une étude",
+         CODE            =FACT(fr="définition d un nom pour l'esemble d'une étude",
                                statut='f',min=1,max=1,
            NOM             =SIMP(statut='o',typ='TXM'),
            NIV_PUB_WEB     =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')),
@@ -6375,8 +6241,7 @@ DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,docu="U4.11.01-g",repetable='n',
            PARTITION       =SIMP(statut='f',typ='R'),
          ),
  );
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6398,12 +6263,12 @@ DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=base_modale,
                      docu="U4.64.02-f",reentrant='f',
             UIinfo={"groupes":("Matrices/vecteurs",)},
          regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS'),),
-         CLASSIQUE       =FACT(statut='f',
+         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',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 ),
@@ -6411,7 +6276,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',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,) ),
          ),
@@ -6424,8 +6289,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 21/03/2003   AUTEUR ASSIRE A.ASSIRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6486,30 +6350,31 @@ DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=defi_cable_
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
          GROUP_MA_BETON  =SIMP(statut='o',typ=grma),
-         DEFI_CABLE      =FACT(statut='o',max='**',
+         DEFI_CABLE      =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),
                    UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
-           MAILLE          =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma),
-           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=2),
-           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no,max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,max=2),
          ),
-         TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,into=("ACTIF","PASSIF") ),
+         TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,     
+                                 into=("ACTIF","PASSIF") ),
          TENSION_INIT    =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
          RECUL_ANCRAGE   =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
-         RELAXATION      =FACT(statut='f',min=0,
+         RELAXATION      =FACT(statut='f',min=0,max=1,
            R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
          ),
-         CONE            =FACT(statut='f',min=0,
+         CONE            =FACT(statut='f',min=0,max=1,
            RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
            LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
-           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,     
+                                 into=("OUI","NON") ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 21/03/2003   AUTEUR ASSIRE A.ASSIRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6536,31 +6401,32 @@ DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
          GROUP_MA_BETON  =SIMP(statut='o',typ=grma),
-         DEFI_CABLE      =FACT(statut='o',max='**',
+         DEFI_CABLE      =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),
                    UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
-           MAILLE          =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,max='**'),
            GROUP_MA        =SIMP(statut='f',typ=grma),
-           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=2),
-           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
-           GROUP_NO_FUT    =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no,max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,max=2),
+           GROUP_NO_FUT    = SIMP(statut='f',typ=grno,max=2),
          ),
-         TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,into=("ACTIF","PASSIF") ),
+         TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,     
+                                 into=("ACTIF","PASSIF") ),
          TENSION_INIT    =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
          RECUL_ANCRAGE   =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
-         RELAXATION      =FACT(statut='f',min=0,
+         RELAXATION      =FACT(statut='f',min=0,max=1,
            R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
-         CONE            =FACT(statut='f',min=0,
+         CONE            =FACT(statut='f',min=0,max=1,
            RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
            LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0, defaut=0.E+0 ),  
-           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,     
+                                 into=("OUI","NON") ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6583,11 +6449,10 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
                     docu="U4.31.01-g",reentrant='n',
             UIinfo={"groupes":("Fonction",)},
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
-         VALE            =SIMP(statut='o',typ='R',),
+         VALE            =SIMP(statut='o',typ='R',max=1 ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6608,54 +6473,18 @@ DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction,
 DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater,docu="U4.42.03-f",reentrant='n',
             UIinfo={"groupes":("Modélisation",)},
                     fr="Définition d une coque composite couche par couche",
-         COUCHE          =FACT(statut='o',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   ),
          ),
-         IMPRESSION      =FACT(statut='f',
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
                                  into=("RESULTAT",) ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-# RESPONSABLE D6BHHJP J.P.LEFEBVRE
-DEFI_FICHIER=PROC(nom="DEFI_FICHIER",op=26,docu="U4.12.03-a",
-                  UIinfo={"groupes":("Gestion du travail",)},
-                  fr="Gestion d une unité logique : ajout, suppression",
-
-            regles=(AU_MOINS_UN('NOM_SYSTEME','FICHIER'),),
-            ACTION        =SIMP(statut='f',typ='TXM',into=("ASSOCIER","LIBERER"),defaut="ASSOCIER"),
-            FICHIER       =SIMP(statut='f',typ='TXM'),
-            UNITE         =SIMP(statut='o',typ='I' ,val_min=1),
-            NOM_SYSTEME   =SIMP(statut='f',typ='TXM'),      
-            TYPE          =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
-            ACCES         =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
-
-            INFO          =SIMP(statut='f',typ='I',into=(1,2) ),           
-           
-           )
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6677,7 +6506,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
                     docu="U4.25.01-e",reentrant='n',
             UIinfo={"groupes":("Maillage",)},
          regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
-         FAISCEAU_TRANS  =FACT(statut='f',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,formule) ),
@@ -6691,7 +6520,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',
+         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  
@@ -6706,7 +6535,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',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'),
@@ -6715,7 +6544,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
                    ENSEMBLE('LONG_TYPG','LARG_TYPG','EPAI_TYPG','RUGO_TYPG','COEF_TRAI_TYPG','COEF_DPOR_TYPG',
                             'COOR_GRILLE','TYPE_GRILLE', ),),
 #  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire                            
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
            VECT_X          =SIMP(statut='f',typ='R',max=3),
            PROF_RHO_FLUI   =SIMP(statut='f',typ=(fonction,formule) ),
@@ -6725,7 +6554,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
            COOR_TUBE       =SIMP(statut='f',typ='R',max='**'),
            PESANTEUR       =SIMP(statut='f',typ='R',min=4,max=4),
            RUGO_TUBE       =SIMP(statut='f',typ='R' ),
-           CARA_PAROI      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=5,
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',max=5,
                                  into=("YC","ZC","R","HY","HZ") ),
            VALE_PAROI      =SIMP(statut='f',typ='R',max=5),
            ANGL_VRIL       =SIMP(statut='f',typ='R' ),
@@ -6738,7 +6567,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',
+         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),
@@ -6756,8 +6585,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 03/12/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6782,7 +6610,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.mk.10-e
               EXCLUS('COUR','COUR_SECO'), ),
          FREQ            =SIMP(statut='f',typ='R',defaut= 50.),
          SIGNAL          =SIMP(statut='f',typ='TXM',defaut="COMPLET",into=("COMPLET","CONTINU") ),
-         COUR            =FACT(statut='f',max='**',
+         COUR            =FACT(statut='f',min=1,max='**',
          fr="Définition du courant de court-circuit",
            regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),
                    UN_PARMI('PHI_CC_2','INTC_CC_2'),),
@@ -6797,7 +6625,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.mk.10-e
            INST_CC_INIT    =SIMP(statut='o',typ='R'),
            INST_CC_FIN     =SIMP(statut='o',typ='R'),
          ),
-         COUR_PRIN       =FACT(statut='f',
+         COUR_PRIN       =FACT(statut='f',min=1,max=1,
          fr="Définition du courant de court-circuit avec réenclenchement",
            regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),),
            INTE_CC_1       =SIMP(statut='o',typ='R'),
@@ -6812,7 +6640,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction,docu="U4.mk.10-e
            INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 0.0E+0),
            INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 0.0E+0),
          ),
-         COUR_SECO       =FACT(statut='f',max='**',
+         COUR_SECO       =FACT(statut='f',min=1,max='**',
          fr="Définition du courant de court-circuit avec un intervalle de temps différent de celui de COUR_PRIN",
            regles=(UN_PARMI('PHI_CC_2','INTC_CC_2'),),
            INTE_CC_2       =SIMP(statut='o',typ='R'),
@@ -6826,8 +6654,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6851,7 +6678,7 @@ DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction,
          MAILLAGE        =SIMP(statut='o',typ=(maillage) ),
          NOEUD_INIT      =SIMP(statut='o',typ=no),
          NOEUD_FIN       =SIMP(statut='o',typ=no),
-         VITE            =FACT(statut='o',
+         VITE            =FACT(statut='o',min=1,max=1,
            VALE            =SIMP(statut='f',typ='R',defaut= 1. ),
            PROFIL          =SIMP(statut='o',typ='TXM',into=("UNIFORME","LEONARD") ),
            NB_BAV          =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 2 , 3 ) ),
@@ -6865,8 +6692,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6901,7 +6727,7 @@ DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
                                into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
                                      "INST","X","Y","Z","EPSI","META","FREQ","PULS",
                                      "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
-                                     "PGAZ","PCAP","VITE","ENDO") ),
+                                     "PGAZ","PCAP","VITE") ),
          NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
          VALE            =SIMP(statut='f',typ='R',min=2,max='**',
                                fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
@@ -6926,8 +6752,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6960,51 +6785,50 @@ 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',
+           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'),),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 #  à mettre à jour le max vaut-il 1  
-             NOEUD_ORIG      =SIMP(statut='f',typ=no,),
-             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
-             NOEUD_EXTR      =SIMP(statut='f',typ=no,),
-             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
            ),
-           FOND_FERME      =FACT(statut='f',
+           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,validators=NoRepeat(),max='**'),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             NOEUD_ORIG      =SIMP(statut='f',typ=no,),
-             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
-             MAILLE_ORIG     =SIMP(statut='f',typ=ma,),
-             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,),
-           ),
-           LEVRE_SUP       =FACT(statut='f',
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
+             MAILLE_ORIG     =SIMP(statut='f',typ=ma,max=1),
+             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,max=1),
+           ),
+           LEVRE_SUP       =FACT(statut='f',min=1,max=1,
              regles=(UN_PARMI('GROUP_MA','MAILLE'),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            ),
-           LEVRE_INF       =FACT(statut='f',
+           LEVRE_INF       =FACT(statut='f',min=1,max=1,
              regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            ),
            NORMALE         =SIMP(statut='f',typ='R',max='**'),
            DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
            DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
-           VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
-           VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,max=2),
+           VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,max=2),
            INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7035,18 +6859,17 @@ DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
          regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO'),),
          MAILLAGE        =SIMP(statut='o',typ=(maillage,squelette) ),
 
-         CREA_GROUP_MA   =FACT(statut='f',max='**',
-          
-regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+         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),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ=grma),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           INTERSEC        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           UNION           =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           DIFFE           =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           OPTION          =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE","BANDE","APPUI_LACHE") ),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grma,max='**'),
+           UNION           =SIMP(statut='f',typ=grma,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grma,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE","BANDE") ),
            b_group_ma      =BLOC(condition = "GROUP_MA != None",
              regles=(EXCLUS('POSITION','NUME_INIT'),),
              NUME_INIT       =SIMP(statut='f',typ='I'),
@@ -7063,56 +6886,49 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION')
              VERI_SIGNE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            ),
            b_sphere        =BLOC(condition = "OPTION == 'SPHERE'",
-             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
              POINT           =SIMP(statut='f',typ='R',max=3),
              NOEUD_CENTRE    =SIMP(statut='f',typ=no),
-             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
              RAYON           =SIMP(statut='o',typ='R' ),
            ),
            b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
-             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
              POINT           =SIMP(statut='f',typ='R',max=3),
              NOEUD_CENTRE    =SIMP(statut='f',typ=no),
-             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
              RAYON           =SIMP(statut='o',typ='R' ),
              ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
              VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
            ),
            b_bande         =BLOC(condition = "OPTION == 'BANDE'",
-             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R' ,max=3),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
-             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             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=2),
              VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
            ),
-           b_app_lache         =BLOC(condition = "OPTION == 'APPUI_LACHE'",
-             regles=(UN_PARMI('NOEUD','GROUP_NO'),),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           ),
          ),
-         CREA_GROUP_NO   =FACT(statut='f',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'),
                       PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
                       EXCLUS ('TOUT_GROUP_MA','GROUP_MA','NOEUD','INTERSEC','UNION','DIFFE'),),
            TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           INTERSEC        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           UNION           =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           DIFFE           =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           INTERSEC        =SIMP(statut='f',typ=grno,max='**'),
+           UNION           =SIMP(statut='f',typ=grno,max='**'),
+           DIFFE           =SIMP(statut='f',typ=grno,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
                                                "SEGM_DROI_ORDO","NOEUD_ORDO","TUNNEL") ),
            b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
-             NOM             =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             NOM             =SIMP(statut='f',typ=grma,max='**'),
            ),
            b_crit_noeud    = BLOC(condition = "GROUP_MA != None",
              CRIT_NOEUD    = SIMP(statut='f',typ='TXM',defaut="TOUS",
@@ -7129,32 +6945,29 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION')
              ),
            ),
            b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
-             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
-             POINT           =SIMP(statut='f',typ='R' ,max=3),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
-             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),),
+             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='o',typ='R' ),
            ),
            b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
-             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R' ,max=3),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
-             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             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=3),
              VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
              PRECISION       =SIMP(statut='o',typ='R' ),
            ),
            b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
-             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE'),
                      UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
-             POINT           =SIMP(statut='f',typ='R' ,max=3),
-             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
-             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
-             ANGL_NAUT       =SIMP(statut='f',typ='R' ,max=3),
-             VECT_NORMALE    =SIMP(statut='f',typ='R' ,max=3),
+             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='o',typ='R' ),
            ),
            b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
@@ -7178,8 +6991,8 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION')
            b_tunnel    =BLOC(condition = "OPTION == 'TUNNEL'",
              regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
                      AU_MOINS_UN ('GROUP_MA_AXE','MAILLE_AXE'),),
-             GROUP_MA_AXE    =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-             MAILLE_AXE      =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_AXE    =SIMP(statut='f',typ=grma,max='**'),
+             MAILLE_AXE      =SIMP(statut='f',typ=ma,max='**'),
              NOEUD_ORIG      =SIMP(statut='f',typ=no),
              GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
              RAYON           =SIMP(statut='o',typ='R'),
@@ -7189,8 +7002,7 @@ regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION')
          ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7214,12 +7026,12 @@ DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
 
          DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
 
-         PAR_FONCTION    =FACT(statut='f',max='**',
+         PAR_FONCTION    =FACT(statut='f',min=1,max='**',
            NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
            NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
            FONCTION        =SIMP(statut='o',typ=fonction_c ),
          ),
-         KANAI_TAJIMI    =FACT(statut='f',max='**',
+         KANAI_TAJIMI    =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('VALE_R','VALE_C'),),
            NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
            NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
@@ -7234,7 +7046,7 @@ DEFI_INTE_SPEC=OPER(nom="DEFI_INTE_SPEC",op= 115,sd_prod=tabl_intsp,
            PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
            PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
          ),
-         CONSTANT        =FACT(statut='f',max='**',
+         CONSTANT        =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('VALE_R','VALE_C'),),
            NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
            NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
@@ -7250,8 +7062,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7273,7 +7084,7 @@ DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
                       docu="U4.64.01-f",reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
          NUME_DDL        =SIMP(statut='o',typ=nume_ddl ),
-         INTERFACE       =FACT(statut='o',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'),),
@@ -7287,8 +7098,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7315,7 +7125,7 @@ DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis,
                  EXCLUS('VALE','INTERVALLE'),),
          VALE            =SIMP(statut='f',typ='I',max='**'),
          DEBUT           =SIMP(statut='f',typ='I'),
-         INTERVALLE      =FACT(statut='f',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,),
@@ -7324,8 +7134,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7353,7 +7162,7 @@ DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8,
                  ENSEMBLE('DEBUT','INTERVALLE')),
          VALE            =SIMP(statut='f',typ='R',max='**'),
          DEBUT           =SIMP(statut='f',typ='R'),
-         INTERVALLE      =FACT(statut='f',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'),
@@ -7362,8 +7171,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7386,7 +7194,7 @@ 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-f",reentrant='n',
             UIinfo={"groupes":("Maillage",)},
-         DEFI_MAILLE     =FACT(statut='o',max='**',
+         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=3),
@@ -7395,14 +7203,14 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
              CENTRE          =SIMP(statut='f',typ='R',max=3),
            ),
          ),
-         RECO_GLOBAL     =FACT(statut='f',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',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") ),
@@ -7411,7 +7219,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',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" ),
@@ -7426,7 +7234,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',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'),),
@@ -7442,8 +7250,7 @@ DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage,
            GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7494,7 +7301,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement élastique
 #
-           ELAS            =FACT(statut='f',min=0,
+           ELAS            =FACT(statut='f',min=0,max=1,
              E               =SIMP(statut='o',typ='R',val_min=0.E+0),
              NU              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
              RHO             =SIMP(statut='f',typ='R'),
@@ -7503,7 +7310,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AMOR_BETA       =SIMP(statut='f',typ='R'),
              AMOR_HYST       =SIMP(statut='f',typ='R'),
            ),
-           ELAS_FO         =FACT(statut='f',min=0,
+           ELAS_FO         =FACT(statut='f',min=0,max=1,
              regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),),
              E               =SIMP(statut='o',typ=(fonction,formule)),
              NU              =SIMP(statut='o',typ=(fonction,formule)),
@@ -7522,7 +7329,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
              VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
            ),
-           ELAS_FLUI       =FACT(statut='f',min=0,
+           ELAS_FLUI       =FACT(statut='f',min=0,max=1,
              E               =SIMP(statut='o',typ='R'),
              NU              =SIMP(statut='o',typ='R'),
              RHO             =SIMP(statut='o',typ='R'),
@@ -7531,7 +7338,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COEF_MASS_AJOU  =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="ABSC",into=("ABSC",) ),
            ),
-           ELAS_ISTR       =FACT(statut='f',min=0,
+           ELAS_ISTR       =FACT(statut='f',min=0,max=1,
              E_L             =SIMP(statut='o',typ='R'),
              E_N             =SIMP(statut='o',typ='R'),
              NU_LT           =SIMP(statut='o',typ='R'),
@@ -7541,7 +7348,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ELAS_ISTR_FO    =FACT(statut='f',min=0,
+           ELAS_ISTR_FO    =FACT(statut='f',min=0,max=1,
              regles=(
                       PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
                       PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
@@ -7558,7 +7365,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_N         =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST")),
            ),
-           ELAS_ORTH       =FACT(statut='f',min=0,
+           ELAS_ORTH       =FACT(statut='f',min=0,max=1,
              E_L             =SIMP(statut='o',typ='R'),
              E_T             =SIMP(statut='o',typ='R'),
              E_N             =SIMP(statut='f',typ='R'),
@@ -7578,7 +7385,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              YC              =SIMP(statut='f',typ='R',defaut= 1. ),
              S_LT            =SIMP(statut='f',typ='R',defaut= 1. ),
            ),
-           ELAS_ORTH_FO    =FACT(statut='f',min=0,
+           ELAS_ORTH_FO    =FACT(statut='f',min=0,max=1,
              regles=(
                       PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
                       PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
@@ -7601,7 +7408,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_N         =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
            ),
-           ELAS_THM        =FACT(statut='f',min=0,
+           ELAS_THM        =FACT(statut='f',min=0,max=1,
              RHO_S           =SIMP(statut='o',typ='R'),
              UN_SUR_KS       =SIMP(statut='o',typ='R'),
              E               =SIMP(statut='f',typ='R'),
@@ -7610,7 +7417,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA_S         =SIMP(statut='f',typ='R'),
              ALPHA_D         =SIMP(statut='f',typ='R'),
            ),
-           SURF_ETAT_SATU  =FACT(statut='f',min=0,
+           SURF_ETAT_SATU  =FACT(statut='f',min=0,max=1,
              E_CHAR          =SIMP(statut='o',typ='R'),
              E_DECHAR        =SIMP(statut='o',typ='R'),
              XN              =SIMP(statut='f',typ='R'),
@@ -7627,7 +7434,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COHE            =SIMP(statut='o',typ='R'),
              RESI_TRAC       =SIMP(statut='o',typ='R'),
            ),
-           CAM_CLAY_THM    =FACT(statut='f',min=0,
+           CAM_CLAY_THM    =FACT(statut='f',min=0,max=1,
              NU              =SIMP(statut='f',typ='R'),
              LAMBDA          =SIMP(statut='o',typ='R'),
              KAPA            =SIMP(statut='o',typ='R'),
@@ -7643,7 +7450,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA3_PC       =SIMP(statut='f',typ='R'),
              ALPHA_S         =SIMP(statut='f',typ='R'),
                          ),
-           SURF_ETAT_NSAT  =FACT(statut='f',min=0,
+           SURF_ETAT_NSAT  =FACT(statut='f',min=0,max=1,
              E_CHAR          =SIMP(statut='o',typ='R'),
              E_DECHAR        =SIMP(statut='o',typ='R'),
              XN              =SIMP(statut='f',typ='R'),
@@ -7667,7 +7474,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_SURF_SATU     =SIMP(statut='f',typ='R'),
              D_SURF_SATU     =SIMP(statut='f',typ='R'),
            ),
-           ELAS_COQUE      =FACT(statut='f',min=0,
+           ELAS_COQUE      =FACT(statut='f',min=0,max=1,
              regles=(EXCLUS('MEMB_L','M_LLLL',),
                      PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
                                      'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
@@ -7723,7 +7530,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              RHO             =SIMP(statut='f',typ='R'),
              ALPHA           =SIMP(statut='f',typ='R'),
            ),
-           ELAS_COQUE_FO   =FACT(statut='f',min=0,
+           ELAS_COQUE_FO   =FACT(statut='f',min=0,max=1,
              regles=(EXCLUS('MEMB_L','M_LLLL',),
                      PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
                                      'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
@@ -7779,11 +7586,11 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              ALPHA           =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST") ),
            ),
-           APPUI_ELAS      =FACT(statut='f',min=0,
+           APPUI_ELAS      =FACT(statut='f',min=0,max=1,
              E_N             =SIMP(statut='o',typ='R'),
              E_TAN           =SIMP(statut='f',typ='R',defaut= 0.E+0),
            ),
-           CABLE           =FACT(statut='f',min=0,
+           CABLE           =FACT(statut='f',min=0,max=1,
              E               =SIMP(statut='o',typ='R'),
              EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
              RHO             =SIMP(statut='f',typ='R'),
@@ -7794,41 +7601,41 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement mécanique non linéaire
 #
-           TRACTION        =FACT(statut='f',min=0,
+           TRACTION        =FACT(statut='f',min=0,max=1,
              SIGM            =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
              VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
            ),
-           ECRO_LINE       =FACT(statut='f',min=0,
+           ECRO_LINE       =FACT(statut='f',min=0,max=1,
              D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
              SY              =SIMP(statut='o',typ='R'),
            ),
-           ECRO_LINE_FO    =FACT(statut='f',min=0,
+           ECRO_LINE_FO    =FACT(statut='f',min=0,max=1,
              D_SIGM_EPSI     =SIMP(statut='o',typ=(fonction,formule)),
              SY              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           BETON_ECRO_LINE =FACT(statut='f',min=0,
+           BETON_ECRO_LINE =FACT(statut='f',min=0,max=1,
              D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
              SYT             =SIMP(statut='o',typ='R'),
              SYC             =SIMP(statut='f',typ='R'),
            ),
-           PRAGER          =FACT(statut='f',min=0,
+           PRAGER          =FACT(statut='f',min=0,max=1,
              C               =SIMP(statut='o',typ='R'),
            ),
-           PRAGER_FO       =FACT(statut='f',min=0,
+           PRAGER_FO       =FACT(statut='f',min=0,max=1,
              C               =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ECRO_FLEJOU     =FACT(statut='f',min=0,
+           ECRO_FLEJOU     =FACT(statut='f',min=0,max=1,
              EP              =SIMP(statut='o',typ='R'),
              SY              =SIMP(statut='o',typ='R'),
              SU              =SIMP(statut='o',typ='R'),
              PUISS           =SIMP(statut='o',typ='R'),
            ),
-           TAHERI          =FACT(statut='f',min=0,
+           TAHERI          =FACT(statut='f',min=0,max=1,
              R_0             =SIMP(statut='o',typ='R'),
              ALPHA           =SIMP(statut='o',typ='R'),
              M               =SIMP(statut='o',typ='R'),
@@ -7838,7 +7645,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_INF           =SIMP(statut='o',typ='R'),
              S               =SIMP(statut='o',typ='R'),
            ),
-           TAHERI_FO       =FACT(statut='f',min=0,
+           TAHERI_FO       =FACT(statut='f',min=0,max=1,
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              ALPHA           =SIMP(statut='o',typ=(fonction,formule)),
              M               =SIMP(statut='o',typ=(fonction,formule)),
@@ -7849,7 +7656,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              S               =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ROUSSELIER      =FACT(statut='f',min=0,
+           ROUSSELIER      =FACT(statut='f',min=0,max=1,
              D               =SIMP(statut='o',typ='R'),
              SIGM_1          =SIMP(statut='o',typ='R'),
              PORO_INIT       =SIMP(statut='o',typ='R'),
@@ -7859,7 +7666,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
              AN              =SIMP(statut='f',typ='R',defaut= 0. ),
            ),
-           ROUSSELIER_FO   =FACT(statut='f',min=0,
+           ROUSSELIER_FO   =FACT(statut='f',min=0,max=1,
              D               =SIMP(statut='o',typ=(fonction,formule)),
              SIGM_1          =SIMP(statut='o',typ=(fonction,formule)),
              PORO_INIT       =SIMP(statut='o',typ=(fonction,formule)),
@@ -7870,12 +7677,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AN              =SIMP(statut='f',typ='R',defaut= 0. ),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ROUSS_VISC      =FACT(statut='f',min=0,
+           ROUSS_VISC      =FACT(statut='f',min=0,max=1,
              SIGM_0          =SIMP(statut='o',typ='R'),
              EPSI_0          =SIMP(statut='o',typ='R'),
              M               =SIMP(statut='o',typ='R'),
            ),
-           CHABOCHE        =FACT(statut='f',min=0,
+           CHABOCHE        =FACT(statut='f',min=0,max=1,
              R_I             =SIMP(statut='o',typ='R'),
              R_0             =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
@@ -7886,7 +7693,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C1              =SIMP(statut='o',typ='R'),
              C2              =SIMP(statut='o',typ='R'),
            ),
-           CIN1_CHAB  =FACT(statut='f',min=0,
+           CIN1_CHAB  =FACT(statut='f',min=0,max=1,
              R_0             =SIMP(statut='o',typ='R'),
              R_I             =SIMP(statut='f',typ='R'),
              B               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
@@ -7896,7 +7703,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              G_0             =SIMP(statut='o',typ='R'),
              A_I             =SIMP(statut='f',typ='R',defaut= 1.0E+0),
            ),
-           CIN1_CHAB_FO  =FACT(statut='f',min=0,
+           CIN1_CHAB_FO  =FACT(statut='f',min=0,max=1,
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              R_I             =SIMP(statut='o',typ=(fonction,formule)),
              B               =SIMP(statut='o',typ=(fonction,formule)),
@@ -7907,7 +7714,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_I             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           CIN2_CHAB  =FACT(statut='f',min=0,
+           CIN2_CHAB  =FACT(statut='f',min=0,max=1,
              R_0             =SIMP(statut='o',typ='R'),
              R_I             =SIMP(statut='f',typ='R'),
              B               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -7919,7 +7726,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              G2_0            =SIMP(statut='o',typ='R'),
              A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
            ),
-           CIN2_CHAB_FO  =FACT(statut='f',min=0,
+           CIN2_CHAB_FO  =FACT(statut='f',min=0,max=1,
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              R_I             =SIMP(statut='o',typ=(fonction,formule)),
              B               =SIMP(statut='o',typ=(fonction,formule)),
@@ -7932,7 +7739,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_I             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           VISCOCHAB       =FACT(statut='f',min=0,
+           VISCOCHAB       =FACT(statut='f',min=0,max=1,
              K_0             =SIMP(statut='o',typ='R'),
              A_K             =SIMP(statut='o',typ='R'),
              A_R             =SIMP(statut='o',typ='R'),
@@ -7959,7 +7766,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              G2_0            =SIMP(statut='o',typ='R'),
              A_I             =SIMP(statut='o',typ='R'),
            ),
-           VISCOCHAB_FO    =FACT(statut='f',min=0,
+           VISCOCHAB_FO    =FACT(statut='f',min=0,max=1,
              K_0             =SIMP(statut='o',typ=(fonction,formule)),
              A_K             =SIMP(statut='o',typ=(fonction,formule)),
              A_R             =SIMP(statut='o',typ=(fonction,formule)),
@@ -7987,7 +7794,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_I             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           POLY_CFC        =FACT(statut='f',min=0,
+           POLY_CFC        =FACT(statut='f',min=0,max=1,
              TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
              DL              =SIMP(statut='f',typ='R'),
              DA              =SIMP(statut='f',typ='R'),
@@ -8003,7 +7810,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D1              =SIMP(statut='o',typ='R'),
              C2              =SIMP(statut='o',typ='R'),
            ),
-           POLY_CFC_FO     =FACT(statut='f',min=0,
+           POLY_CFC_FO     =FACT(statut='f',min=0,max=1,
              TEXTURE         =SIMP(statut='o',typ=(tabl_texture) ),
              DL              =SIMP(statut='o',typ=(fonction,formule)),
              DA              =SIMP(statut='o',typ=(fonction,formule)),
@@ -8020,40 +7827,40 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C2              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           LEMAITRE        =FACT(statut='f',min=0,
+           LEMAITRE        =FACT(statut='f',min=0,max=1,
              N               =SIMP(statut='o',typ='R'),
              UN_SUR_K        =SIMP(statut='o',typ='R'),
              UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ZIRC_CYRA2      =FACT(statut='f',min=0,
+           ZIRC_CYRA2      =FACT(statut='f',min=0,max=1,
              EPSI_FAB        =SIMP(statut='o',typ=(fonction,formule)),
              TEMP_RECUIT     =SIMP(statut='o',typ=(fonction,formule)),
              FLUX_PHI        =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
            ),
-           ZIRC_EPRI       =FACT(statut='f',min=0,
+           ZIRC_EPRI       =FACT(statut='f',min=0,max=1,
              FLUX_PHI        =SIMP(statut='o',typ='R'),
              R_P             =SIMP(statut='o',typ='R'),
              THETA_MAX       =SIMP(statut='o',typ='R'),
            ),
-           LEMAITRE_FO     =FACT(statut='f',min=0,
+           LEMAITRE_FO     =FACT(statut='f',min=0,max=1,
              N               =SIMP(statut='o',typ=(fonction,formule)),
              UN_SUR_K        =SIMP(statut='o',typ=(fonction,formule)),
              UN_SUR_M        =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           GRAN_IRRA       =FACT(statut='f',min=0,
+           GRAN_IRRA       =FACT(statut='f',min=0,max=1,
              A               =SIMP(statut='f',typ='R',defaut= 0.E+0),
              B               =SIMP(statut='f',typ='R',defaut= 0.E+0),
              S               =SIMP(statut='f',typ='R',defaut= 0.E+0),
            ),
-           FLU_IRRA       =FACT(statut='f',min=0,
+           FLU_IRRA       =FACT(statut='f',min=0,max=1,
              QSR_K           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              PHI_ZERO        =SIMP(statut='f',typ='R',defaut= 1.E+20),
              L               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           OHNO            =FACT(statut='f',min=0,
+           OHNO            =FACT(statut='f',min=0,max=1,
              R_I             =SIMP(statut='o',typ='R'),
              R_0             =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
@@ -8074,7 +7881,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              M4              =SIMP(statut='o',typ='R'),
              M5              =SIMP(statut='o',typ='R'),
                            ),
-           OHNO_FO         =FACT(statut='f',min=0,
+           OHNO_FO         =FACT(statut='f',min=0,max=1,
              R_I             =SIMP(statut='o',typ=(fonction,formule)),
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              B               =SIMP(statut='o',typ=(fonction,formule)),
@@ -8096,7 +7903,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              M5              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           LMARC           =FACT(statut='f',min=0,
+           LMARC           =FACT(statut='f',min=0,max=1,
              DE_0            =SIMP(statut='o',typ='R'),
              R_0             =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
@@ -8127,7 +7934,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              R33             =SIMP(statut='o',typ='R'),
              R66             =SIMP(statut='o',typ='R'),
            ),
-           LMARC_FO        =FACT(statut='f',min=0,
+           LMARC_FO        =FACT(statut='f',min=0,max=1,
              DE_0            =SIMP(statut='o',typ=(fonction,formule)),
              R_0             =SIMP(statut='o',typ=(fonction,formule)),
              N               =SIMP(statut='o',typ=(fonction,formule)),
@@ -8159,7 +7966,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              R66             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           VMIS_POUTRE     =FACT(statut='f',min=0,
+           VMIS_POUTRE     =FACT(statut='f',min=0,max=1,
              NP              =SIMP(statut='o',typ='R'),
              MEY             =SIMP(statut='o',typ='R'),
              MPY             =SIMP(statut='o',typ='R'),
@@ -8171,7 +7978,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              CBZ             =SIMP(statut='o',typ='R'),
              MPX             =SIMP(statut='o',typ='R'),
            ),
-           VMIS_POUTRE_FO  =FACT(statut='f',min=0,
+           VMIS_POUTRE_FO  =FACT(statut='f',min=0,max=1,
              NP              =SIMP(statut='o',typ=(fonction,formule)),
              MEY             =SIMP(statut='o',typ=(fonction,formule)),
              MPY             =SIMP(statut='o',typ=(fonction,formule)),
@@ -8184,14 +7991,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              MPX             =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           ARME            =FACT(statut='f',min=0,
+           ARME            =FACT(statut='f',min=0,max=1,
              KYE             =SIMP(statut='o',typ='R'),
              DLE             =SIMP(statut='o',typ='R'),
              KYP             =SIMP(statut='o',typ='R'),
              DLP             =SIMP(statut='o',typ='R'),
              KYG             =SIMP(statut='o',typ='R'),
            ),
-           ASSE_CORN       =FACT(statut='f',min=0,
+           ASSE_CORN       =FACT(statut='f',min=0,max=1,
              NU_1            =SIMP(statut='o',typ='R'),
              MU_1            =SIMP(statut='o',typ='R'),
              DXU_1           =SIMP(statut='o',typ='R'),
@@ -8207,7 +8014,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              KRX             =SIMP(statut='o',typ='R'),
              KRZ             =SIMP(statut='o',typ='R'),
            ),
-           DIS_CONTACT     =FACT(statut='f',min=0,
+           DIS_CONTACT     =FACT(statut='f',min=0,max=1,
              RIGI_NOR        =SIMP(statut='f',typ='R' ),
              DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -8218,27 +8025,16 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              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=(fonction,formule)),
-             regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',),
-                     EXCLUS('RELA_MZ','ANGLE_1'),
-                     PRESENT_PRESENT('ANGLE_1','ANGLE_2','ANGLE_3','ANGLE_4',
-                                     'MOMENT_1','MOMENT_2','MOMENT_3','MOMENT_4'),),
+             regles=(EXCLUS('RIGI_N_FO','RIGI_N_IRRA',),),
              RIGI_N_IRRA     =SIMP(statut='f',typ=(fonction,formule)),
              RIGI_N_FO       =SIMP(statut='f',typ=(fonction,formule)),
              RELA_MZ         =SIMP(statut='f',typ=(fonction,formule)),
-             ANGLE_1         =SIMP(statut='f',typ=(fonction,formule)),
-             ANGLE_2         =SIMP(statut='f',typ=(fonction,formule)),
-             ANGLE_3         =SIMP(statut='f',typ=(fonction,formule)),
-             ANGLE_4         =SIMP(statut='f',typ=(fonction,formule)),
-             MOMENT_1        =SIMP(statut='f',typ=(fonction,formule)),
-             MOMENT_2        =SIMP(statut='f',typ=(fonction,formule)),
-             MOMENT_3        =SIMP(statut='f',typ=(fonction,formule)),
-             MOMENT_4        =SIMP(statut='f',typ=(fonction,formule)),
              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,
+           NADAI_B         =FACT(statut='f',min=0,max=1,
              F_C             =SIMP(statut='o',typ='R'),
              F_T             =SIMP(statut='o',typ='R'),
              CRIT_E_C        =SIMP(statut='o',typ='R'),
@@ -8247,7 +8043,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              EPSI_R_T        =SIMP(statut='o',typ='R'),
              FAC_T_C         =SIMP(statut='o',typ='R'),
            ),
-           BETON_DOUBLE_DP =FACT(statut='f',min=0,
+           BETON_DOUBLE_DP =FACT(statut='f',min=0,max=1,
              F_C             =SIMP(statut='o',typ=(fonction,formule)),
              F_T             =SIMP(statut='o',typ=(fonction,formule)),
              COEF_BIAX       =SIMP(statut='o',typ=(fonction,formule)),
@@ -8262,7 +8058,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
              VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
            ),
-           LABORD_1D=FACT(statut='f',min=0 ,
+           LABORD_1D=FACT(statut='f',min=0 ,max=1,
              Y01             =SIMP(statut='o',typ='R'),
              Y02             =SIMP(statut='o',typ='R'),
              A1              =SIMP(statut='o',typ='R'),
@@ -8273,7 +8069,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              BETA2           =SIMP(statut='o',typ='R'),
              SIGF            =SIMP(statut='o',typ='R'),
            ),
-         MAZARS=FACT(statut='f',min=0 ,
+         MAZARS=FACT(statut='f',min=0 ,max=1,
              EPSD0           =SIMP(statut='o',typ='R'),
              BETA            =SIMP(statut='o',typ='R'),
              AC              =SIMP(statut='o',typ='R'),
@@ -8281,7 +8077,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AT              =SIMP(statut='o',typ='R'),
              BT              =SIMP(statut='o',typ='R'),
            ),
-         MAZARS_FO=FACT(statut='f',min=0 ,
+         MAZARS_FO=FACT(statut='f',min=0 ,max=1,
              EPSD0           =SIMP(statut='o',typ=(fonction,formule)),
              BETA            =SIMP(statut='o',typ='R'),
              AC              =SIMP(statut='o',typ=(fonction,formule)),
@@ -8290,7 +8086,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              BT              =SIMP(statut='o',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-          VENDOCHAB       =FACT(statut='f',min=0,
+          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'),
@@ -8301,7 +8097,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              A_D             =SIMP(statut='o',typ='R'),
              K_D             =SIMP(statut='o',typ='R'),
            ),
-           VENDOCHAB_FO    =FACT(statut='f',min=0,
+           VENDOCHAB_FO    =FACT(statut='f',min=0,max=1,
              S_VP            =SIMP(statut='o',typ=(fonction,formule)),
              SEDVP1          =SIMP(statut='o',typ=(fonction,formule)),
              SEDVP2          =SIMP(statut='o',typ=(fonction,formule)),
@@ -8314,7 +8110,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="X",into=("X",) ),
            ),
-           PINTO_MENEGOTTO =FACT(statut='f',min=0,
+           PINTO_MENEGOTTO =FACT(statut='f',min=0,max=1,
              SY              =SIMP(statut='o',typ='R'),
              EPSI_ULTM       =SIMP(statut='o',typ='R'),
              SIGM_ULTM       =SIMP(statut='o',typ='R'),
@@ -8328,18 +8124,18 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_PM            =SIMP(statut='f',typ='R',defaut= 0.5 ),
              A_PM            =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
            ),
-           BPEL_BETON      =FACT(statut='f',min=0,
+           BPEL_BETON      =FACT(statut='f',min=0,max=1,
              PERT_FLUA       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              PERT_RETR       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           BPEL_ACIER      =FACT(statut='f',min=0,
+           BPEL_ACIER      =FACT(statut='f',min=0,max=1,
              RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              SY              =SIMP(statut='o',typ='R'),
              FROT_COURB      =SIMP(statut='o',typ='R'),
              FROT_LINE       =SIMP(statut='o',typ='R'),
            ),
-           CAM_CLAY      =FACT(statut='f',min=0,
+           CAM_CLAY      =FACT(statut='f',min=0,max=1,
              PORO            =SIMP(statut='o',typ='R'),
              LAMBDA          =SIMP(statut='o',typ='R'),
              KAPA            =SIMP(statut='o',typ='R'),
@@ -8347,7 +8143,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              PRES_CRIT       =SIMP(statut='o',typ='R'),
              PA              =SIMP(statut='o',typ='R'),
            ),
-           CJS             =FACT(statut='f',min=0,
+           CJS             =FACT(statut='f',min=0,max=1,
              BETA_CJS        =SIMP(statut='o',typ='R'),
              RM              =SIMP(statut='o',typ='R'),
              N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
@@ -8363,13 +8159,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              Q_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
              R_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           ECRO_ASYM_LINE  =FACT(statut='f',min=0,
+           ECRO_ASYM_LINE  =FACT(statut='f',min=0,max=1,
              DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
              SY_C            =SIMP(statut='o',typ='R'),
              DT_SIGM_EPSI    =SIMP(statut='o',typ='R'),
              SY_T            =SIMP(statut='o',typ='R'),
            ),
-           GRANGER_FP      =FACT(statut='f',min=0,
+           GRANGER_FP      =FACT(statut='f',min=0,max=1,
              J1              =SIMP(statut='f',typ='R'),
              J2              =SIMP(statut='f',typ='R'),
              J3              =SIMP(statut='f',typ='R'),
@@ -8388,15 +8184,15 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              TAUX_8          =SIMP(statut='f',typ='R'),
              QSR_K           =SIMP(statut='f',typ='R'),
            ),
-           V_GRANGER_FP    =FACT(statut='f',min=0,
+           V_GRANGER_FP    =FACT(statut='f',min=0,max=1,
              QSR_VEIL        =SIMP(statut='f',typ='R'),
              FONC_V          =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
            ),
-           BAZANT_FD      =FACT(statut='f',min=0,
+           BAZANT_FD      =FACT(statut='f',min=0,max=1,
              LAM_VISC      =SIMP(statut='o',typ='R'),
            ),  
-           BETON_UMLV_FP   =FACT(statut='f',min=0 ,
+           BETON_UMLV_FP   =FACT(statut='f',min=0 ,max=1,
              K_RS            =SIMP(statut='o',typ='R'),
              ETA_RS          =SIMP(statut='o',typ='R'),
              K_IS            =SIMP(statut='o',typ='R'),
@@ -8408,14 +8204,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement thermique
 #
-           THER_NL         =FACT(statut='f',min=0,
+           THER_NL         =FACT(statut='f',min=0,max=1,
              regles=(UN_PARMI('BETA','RHO_CP', ),),
              LAMBDA          =SIMP(statut='o',typ=(fonction,formule)),
              BETA            =SIMP(statut='f',typ=(fonction,formule)),
              RHO_CP          =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           THER_HYDR       =FACT(statut='f',min=0,
+           THER_HYDR       =FACT(statut='f',min=0,max=1,
              LAMBDA          =SIMP(statut='o',typ=(fonction,formule)),
              BETA            =SIMP(statut='f',typ=(fonction,formule)),
              AFFINITE        =SIMP(statut='o',typ=(fonction,formule)),
@@ -8424,22 +8220,22 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
            ),
-           THER            =FACT(statut='f',min=0,
+           THER            =FACT(statut='f',min=0,max=1,
              LAMBDA          =SIMP(statut='o',typ='R'),
              RHO_CP          =SIMP(statut='f',typ='R'),
            ),
-           THER_FO         =FACT(statut='f',min=0,
+           THER_FO         =FACT(statut='f',min=0,max=1,
              LAMBDA          =SIMP(statut='o',typ=(fonction,formule)),
              RHO_CP          =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
            ),
-           THER_ORTH       =FACT(statut='f',min=0,
+           THER_ORTH       =FACT(statut='f',min=0,max=1,
              LAMBDA_L        =SIMP(statut='o',typ='R'),
              LAMBDA_T        =SIMP(statut='o',typ='R'),
              LAMBDA_N        =SIMP(statut='f',typ='R'),
              RHO_CP          =SIMP(statut='f',typ='R'),
            ),
-           THER_COQUE      =FACT(statut='f',min=0,
+           THER_COQUE      =FACT(statut='f',min=0,max=1,
              COND_LMM        =SIMP(statut='o',typ='R'),
              COND_TMM        =SIMP(statut='o',typ='R'),
              COND_LMP        =SIMP(statut='o',typ='R'),
@@ -8457,7 +8253,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              CMAS_PP         =SIMP(statut='f',typ='R'),
              CMAS_SI         =SIMP(statut='f',typ='R'),
            ),
-           THER_COQUE_FO   =FACT(statut='f',min=0,
+           THER_COQUE_FO   =FACT(statut='f',min=0,max=1,
              COND_LMM        =SIMP(statut='o',typ=(fonction,formule)),
              COND_TMM        =SIMP(statut='o',typ=(fonction,formule)),
              COND_LMP        =SIMP(statut='o',typ=(fonction,formule)),
@@ -8475,22 +8271,22 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              CMAS_PP         =SIMP(statut='f',typ=(fonction,formule)),
              CMAS_SI         =SIMP(statut='f',typ=(fonction,formule)),
            ),
-           SECH_GRANGER    =FACT(statut='f',min=0,
+           SECH_GRANGER    =FACT(statut='f',min=0,max=1,
              A               =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
              QSR_K           =SIMP(statut='o',typ='R'),
              TEMP_0_C        =SIMP(statut='o',typ='R'),
            ),
-           SECH_MENSI      =FACT(statut='f',min=0,
+           SECH_MENSI      =FACT(statut='f',min=0,max=1,
              A               =SIMP(statut='o',typ='R'),
              B               =SIMP(statut='o',typ='R'),
            ),
-           SECH_BAZANT     =FACT(statut='f',min=0,
+           SECH_BAZANT     =FACT(statut='f',min=0,max=1,
              D1              =SIMP(statut='o',typ='R'),
              ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
            ),
-           SECH_NAPPE      =FACT(statut='f',min=0,
+           SECH_NAPPE      =FACT(statut='f',min=0,max=1,
              FONCTION        =SIMP(statut='o',typ=(nappe,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TSEC",into=("TSEC",) ),
@@ -8498,7 +8294,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement métallurgique
 #
-           META_ACIER      =FACT(statut='f',min=0,
+           META_ACIER      =FACT(statut='f',min=0,max=1,
              TRC             =SIMP(statut='o',typ=(tabl_trc) ),
              AR3             =SIMP(statut='o',typ='R'),
              ALPHA           =SIMP(statut='o',typ='R'),
@@ -8512,7 +8308,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D10             =SIMP(statut='f',typ='R'),
              WSR_K           =SIMP(statut='f',typ='R'),
            ),
-           META_ZIRC       =FACT(statut='f',min=0,
+           META_ZIRC       =FACT(statut='f',min=0,max=1,
              TDEQ            =SIMP(statut='o',typ='R'),
              N               =SIMP(statut='o',typ='R'),
              K               =SIMP(statut='o',typ='R'),
@@ -8524,14 +8320,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              AR              =SIMP(statut='o',typ='R'),
              BR              =SIMP(statut='o',typ='R'),
            ),
-           DURT_META       =FACT(statut='f',min=0,
+           DURT_META       =FACT(statut='f',min=0,max=1,
              F1_DURT         =SIMP(statut='o',typ='R'),
              F2_DURT         =SIMP(statut='o',typ='R'),
              F3_DURT         =SIMP(statut='o',typ='R'),
              F4_DURT         =SIMP(statut='o',typ='R'),
              C_DURT          =SIMP(statut='o',typ='R'),
            ),
-           ELAS_META       =FACT(statut='f',min=0,
+           ELAS_META       =FACT(statut='f',min=0,max=1,
              E               =SIMP(statut='o',typ='R'),
              NU              =SIMP(statut='o',typ='R'),
              F_ALPHA         =SIMP(statut='o',typ='R'),
@@ -8553,7 +8349,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              S_VP_MELANGE    =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
            ),
-           ELAS_META_FO    =FACT(statut='f',min=0,
+           ELAS_META_FO    =FACT(statut='f',min=0,max=1,
              regles=(
                       PRESENT_PRESENT('F_ALPHA','TEMP_DEF_ALPHA'),
                       PRESENT_PRESENT('C_ALPHA','TEMP_DEF_ALPHA'),
@@ -8581,7 +8377,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",)),
            ),
-           META_ECRO_LINE  =FACT(statut='f',min=0,
+           META_ECRO_LINE  =FACT(statut='f',min=0,max=1,
              F1_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction,formule)),
              F2_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction,formule)),
              F3_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction,formule)),
@@ -8589,7 +8385,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_D_SIGM_EPSI   =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           META_TRACTION   =FACT(statut='f',min=0,
+           META_TRACTION   =FACT(statut='f',min=0,max=1,
              SIGM_F1         =SIMP(statut='f',typ=(fonction,formule)),
              SIGM_F2         =SIMP(statut='f',typ=(fonction,formule)),
              SIGM_F3         =SIMP(statut='f',typ=(fonction,formule)),
@@ -8598,7 +8394,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",)),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           META_VISC_FO    =FACT(statut='f',min=0,
+           META_VISC_FO    =FACT(statut='f',min=0,max=1,
              F1_ETA          =SIMP(statut='f',typ=(fonction,formule)),
              F1_N            =SIMP(statut='f',typ=(fonction,formule)),
              F1_C            =SIMP(statut='f',typ=(fonction,formule)),
@@ -8621,7 +8417,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              C_M             =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           META_PT         =FACT(statut='f',min=0,
+           META_PT         =FACT(statut='f',min=0,max=1,
              F1_K            =SIMP(statut='f',typ='R'),
              F2_K            =SIMP(statut='f',typ='R'),
              F3_K            =SIMP(statut='f',typ='R'),
@@ -8633,7 +8429,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="META",into=("META",) ),
            ),
-           META_RE         =FACT(statut='f',min=0,
+           META_RE         =FACT(statut='f',min=0,max=1,
              C_F1_THETA      =SIMP(statut='f',typ='R'),
              C_F2_THETA      =SIMP(statut='f',typ='R'),
              C_F3_THETA      =SIMP(statut='f',typ='R'),
@@ -8646,13 +8442,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # comportement fluide
 #
-           FLUIDE          =FACT(statut='f',min=0,
+           FLUIDE          =FACT(statut='f',min=0,max=1,
              regles=(EXCLUS('CELE_C','CELE_R'),),
              RHO             =SIMP(statut='o',typ='R'),
              CELE_C          =SIMP(statut='f',typ='C'),
              CELE_R          =SIMP(statut='f',typ='R'),
            ),
-           PORO_JOINT      =FACT(statut='f',min=0,
+           PORO_JOINT      =FACT(statut='f',min=0,max=1,
              RHO_FLUI        =SIMP(statut='o',typ='R'),
              ENTRO_FLUI      =SIMP(statut='o',typ='R'),
              BIOT_M          =SIMP(statut='o',typ='R'),
@@ -8664,7 +8460,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              SOURCE_INIT     =SIMP(statut='o',typ='R'),
              OMEGA_0         =SIMP(statut='o',typ='R'),
            ),
-           THM_LIQU        =FACT(statut='f',min=0,
+           THM_LIQU        =FACT(statut='f',min=0,max=1,
              RHO             =SIMP(statut='o',typ='R'),
              UN_SUR_K        =SIMP(statut='f',typ='R'),
              ALPHA           =SIMP(statut='f',typ='R'),
@@ -8676,7 +8472,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              COEF_HENRY      =SIMP(statut='f',typ='R'),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           THM_GAZ         =FACT(statut='f',min=0,
+           THM_GAZ         =FACT(statut='f',min=0,max=1,
              MASS_MOL        =SIMP(statut='f',typ='R'),
              CP              =SIMP(statut='f',typ='R'),
              VISC            =SIMP(statut='f',typ=(fonction,formule)),
@@ -8685,14 +8481,14 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              D_LAMBDA_TEMP   =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           THM_VAPE_GAZ    =FACT(statut='f',min=0,
+           THM_VAPE_GAZ    =FACT(statut='f',min=0,max=1,
              MASS_MOL        =SIMP(statut='f',typ='R'),
              CP              =SIMP(statut='f',typ='R'),
              VISC            =SIMP(statut='f',typ=(fonction,formule)),
              D_VISC_TEMP     =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",)),
            ),
-           THM_INIT        =FACT(statut='f',min=0,
+           THM_INIT        =FACT(statut='f',min=0,max=1,
              TEMP            =SIMP(statut='o',typ='R'),
              PRE1            =SIMP(statut='o',typ='R'),
              PRE2            =SIMP(statut='o',typ='R'),
@@ -8701,7 +8497,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              DEGR_SATU       =SIMP(statut='f',typ='R'),
              PRES_ATMO       =SIMP(statut='f',typ='R'),
            ),
-           THM_DIFFU       =FACT(statut='f',min=0,
+           THM_DIFFU       =FACT(statut='f',min=0,max=1,
              R_GAZ           =SIMP(statut='o',typ='R'),
              RHO             =SIMP(statut='f',typ='R'),
              CP              =SIMP(statut='f',typ='R'),
@@ -8712,8 +8508,6 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              PESA_Y          =SIMP(statut='f',typ='R'),
              PESA_Z          =SIMP(statut='f',typ='R'),
              PERM_IN         =SIMP(statut='f',typ=(fonction,formule)),
-             PERM_END       =SIMP(statut='f',typ=(fonction,formule)),
-                 regles=(EXCLUS('PERM_IN','PERM_END'),),
              PERM_LIQU       =SIMP(statut='f',typ=(fonction,formule)),
              D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction,formule)),
              PERM_GAZ        =SIMP(statut='f',typ=(fonction,formule)),
@@ -8733,12 +8527,11 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P3         =SIMP(statut='c',typ='TXM',defaut="PORO",into=("PORO",) ),
              VERI_P4         =SIMP(statut='c',typ='TXM',defaut="PGAZ",into=("PGAZ",) ),
              VERI_P5         =SIMP(statut='c',typ='TXM',defaut="PCAP",into=("PCAP",) ),
-             VERI_P6         =SIMP(statut='c',typ='TXM',defaut="ENDO",into=("ENDO",) ),
            ),
 #
 # courbes et coefficients associés à la fatigue et au dommage
 #
-           FATIGUE         =FACT(statut='f',min=0,
+           FATIGUE         =FACT(statut='f',min=0,max=1,
              regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
                      PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
                      PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
@@ -8761,12 +8554,12 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="SIGM",into=("SIGM",) ),
              VERI_P2         =SIMP(statut='c',typ='TXM',defaut="EPSI",into=("EPSI",) ),
            ),
-           DOMMA_LEMAITRE  =FACT(statut='f',min=0,
+           DOMMA_LEMAITRE  =FACT(statut='f',min=0,max=1,
              S               =SIMP(statut='o',typ=(fonction,formule)),
              EPSP_SEUIL      =SIMP(statut='o',typ='R'),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           CISA_PLAN_CRIT  =FACT(statut='f',min=0,
+           CISA_PLAN_CRIT  =FACT(statut='f',min=0,max=1,
              CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE","DANG_VAN") ),
 
              b_critere_matake =BLOC(condition="CRITERE=='MATAKE'",
@@ -8786,13 +8579,13 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
 #
 # autres comportements ...
 #
-           WEIBULL         =FACT(statut='f',min=0,
+           WEIBULL         =FACT(statut='f',min=0,max=1,
              M               =SIMP(statut='o',typ='R'),
              VOLU_REFE       =SIMP(statut='o',typ='R'),
              SIGM_REFE       =SIMP(statut='o',typ='R'),
              SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
            ),
-           WEIBULL_FO      =FACT(statut='f',min=0,
+           WEIBULL_FO      =FACT(statut='f',min=0,max=1,
              M               =SIMP(statut='o',typ='R'),
              VOLU_REFE       =SIMP(statut='o',typ='R'),
              SIGM_CNV        =SIMP(statut='o',typ='R'),
@@ -8800,16 +8593,16 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           NON_LOCAL       =FACT(statut='f',min=0,
+           NON_LOCAL       =FACT(statut='f',min=0,max=1,
              LONG_CARA       =SIMP(statut='o',typ='R'),
              COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
            ),
-           RUPT_FRAG       =FACT(statut='f',min=0,
+           RUPT_FRAG       =FACT(statut='f',min=0,max=1,
              GC              =SIMP(statut='o',typ='R'),
              SIGM_C          =SIMP(statut='f',typ='R'),
              SAUT_C          =SIMP(statut='f',typ='R'),
            ),
-           RCCM            =FACT(statut='f',min=0,
+           RCCM            =FACT(statut='f',min=0,max=1,
              SY_02           =SIMP(statut='f',typ='R'),
              SM              =SIMP(statut='f',typ='R'),
              SU              =SIMP(statut='f',typ='R'),
@@ -8818,7 +8611,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              N_KE            =SIMP(statut='f',typ='R'),
              M_KE            =SIMP(statut='f',typ='R'),
            ),
-           RCCM_FO         =FACT(statut='f',min=0,
+           RCCM_FO         =FACT(statut='f',min=0,max=1,
              SY_02           =SIMP(statut='f',typ=(fonction,formule)),
              SM              =SIMP(statut='f',typ=(fonction,formule)),
              SU              =SIMP(statut='f',typ=(fonction,formule)),
@@ -8827,7 +8620,7 @@ DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater,
              M_KE            =SIMP(statut='f',typ=(fonction,formule)),
              VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
            ),
-           LAIGLE          =FACT(statut='f',min=0,
+           LAIGLE          =FACT(statut='f',min=0,max=1,
              GAMMA_ULT       =SIMP(statut='o',typ='R'),
              GAMMA_E         =SIMP(statut='o',typ='R'),
              M_ULT           =SIMP(statut='o',typ='R'),
@@ -8845,8 +8638,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8867,27 +8659,26 @@ 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-e",reentrant='n',
             UIinfo={"groupes":("Matrices/vecteurs",)},
-         SOUS_STRUC      =FACT(statut='o',max='**',
+         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=3),
            TRANS           =SIMP(statut='f',typ='R',max=3),
          ),
-         LIAISON         =FACT(statut='o',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',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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8934,8 +8725,7 @@ DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=   4,sd_prod=nappe,
          VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -8988,8 +8778,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9016,13 +8805,12 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
          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',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9047,12 +8835,12 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
          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',
+         SPEC_LONG_COR_1 =FACT(statut='f',max=1,
            LONG_COR        =SIMP(statut='o',typ='R' ),
            PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction,formule) ),
            VISC_CINE       =SIMP(statut='o',typ='R' ),
          ),
-         SPEC_LONG_COR_2 =FACT(statut='f',
+         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,formule) ),
@@ -9060,7 +8848,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',
+         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,formule) ),
@@ -9070,7 +8858,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',
+         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,formule) ),
@@ -9078,7 +8866,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',
+         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' ),
@@ -9091,7 +8879,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',
+         SPEC_CORR_CONV_2=FACT(statut='f',max=1,
            FONCTION        =SIMP(statut='o',typ=(fonction,formule) ),
            VITE_FLUI       =SIMP(statut='o',typ='R' ),
            FREQ_COUP       =SIMP(statut='f',typ='R' ),
@@ -9100,7 +8888,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',
+         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 ),
@@ -9110,7 +8898,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',
+         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',
@@ -9130,8 +8918,7 @@ DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9161,7 +8948,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',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'),
@@ -9176,33 +8963,32 @@ 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',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),
          ),
          EXCLUSIF        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          MAILLAGE        =SIMP(statut='f',typ=maillage ),
-         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
          TRANS           =SIMP(statut='f',typ='R',min=3,max=3),
          ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),
-         SOUS_STRUC      =FACT(statut='f',max='**',
+         SOUS_STRUC      =FACT(statut='f',min=1,max='**',
            NOM             =SIMP(statut='f',typ='TXM' ),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           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',max='**',
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9233,8 +9019,7 @@ DEFI_TEXTURE=OPER(nom="DEFI_TEXTURE",op= 181,sd_prod=tabl_texture,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 03/12/2002   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9263,7 +9048,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',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),
@@ -9276,8 +9061,7 @@ DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.mk.
          ),
 )  ;
 
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9298,22 +9082,21 @@ DEFI_THER_JOULE=OPER(nom="DEFI_THER_JOULE",op= 121,sd_prod=fonction,docu="U4.mk.
 DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=tabl_trc,docu="U4.43.04-f",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',max='**',
+         HIST_EXP        =FACT(statut='o',min=1,max='**',
            VALE            =SIMP(statut='o',typ='R',max='**'),
          ),
-         TEMP_MS         =FACT(statut='o',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',max='**',
+         GRAIN_AUST      =FACT(statut='f',min=1,max='**',
            DREF           =SIMP(statut='f',typ='R'),
            A              =SIMP(statut='f',typ='R'),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9344,15 +9127,13 @@ DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
                  docu="U4.31.04-f",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='**'),
+         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='**'),
+         C8              =SIMP(statut='f',typ='C',max='**'),
+         LS              =SIMP(statut='f',typ='L',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-# RESPONSABLE D6BHHJP J.P.LEFEBVRE
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9373,14 +9154,12 @@ DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod,
 DEFUFI=PROC(nom="DEFUFI",op=21,docu="U4.12.01-e",
             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',max='**',
-              NOM           =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
-              UNITE         =SIMP(statut='o',typ='I'  ,val_min=1),
-            ),                
-           )
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+         IMPRESSION      =FACT(statut='o',min=1,max='**',
+           NOM             =SIMP(statut='o',typ='TXM',max='**'),
+           UNITE           =SIMP(statut='o',typ='I' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9402,11 +9181,10 @@ DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=cham_no_depl_r,docu="U4.62.02
             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,),
+         MAILLE          =SIMP(statut='o',typ=ma,max=1),
          NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9428,18 +9206,11 @@ DETRUIRE=PROC(nom="DETRUIRE",op=-7,docu="U4.14.01-e",
             UIinfo={"groupes":("Gestion du travail",)},
               fr="Destruction d un concept utilisateur dans la base GLOBALE",
              op_init=ops.detruire,
-             regles=(UN_PARMI('CONCEPT','OBJET',),), 
-            CONCEPT     =FACT(statut='f',
-                NOM         =SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
-            ),
-            OBJET  =FACT(statut='f',
-               CHAINE      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
-               POSITION    =SIMP(statut='o',typ='I'  ,validators=NoRepeat(),max='**'),
-            ),
-            INFO          =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ),           
+            CONCEPT     =FACT(statut='o',min=01,
+            NOM         =SIMP(statut='o',typ=assd,max='**'),
+        ),
 );
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 13/01/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9465,19 +9236,18 @@ DIST_LIGN_3D=OPER(nom="DIST_LIGN_3D",op= 133,sd_prod=fonction,docu="U4.mk.30-d",
          MODELE          =SIMP(statut='o',typ=modele),
          RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,evol_noli) ),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",)),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
          LIST_INST       =SIMP(statut='f',typ=listr8),
          LIST_ORDRE      =SIMP(statut='f',typ=listis),
          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-         GROUP_MA_1      =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
-         GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         GROUP_MA_1      =SIMP(statut='o',typ=grma,max='**'),
+         GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
          POIN_FIXE       =SIMP(statut='f',typ='R',min=3,max=3),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9499,11 +9269,11 @@ 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-e",reentrant='n',
             UIinfo={"groupes":("Résolution",)},
-         BASE_MODALE     =FACT(statut='o',
+         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',validators=NoRepeat(),max=2),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           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' ),
            ),
@@ -9514,7 +9284,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,)),
 # MODE_STAT devrait etre dans EXCIT car est utile et obligatoire que si NOM_CMP=depl_r, on pourrait
 # ainsi rajouter un bloc du genre  b_mod_stat= BLOC(condition = "(GRANDEUR == None) or (GRANDEUR == 'DEPL_R')",        
-         EXCIT           =FACT(statut='o',
+         EXCIT           =FACT(statut='o',min=1,max=1,
            INTE_SPEC       =SIMP(statut='o',typ=tabl_intsp ),
            NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
@@ -9564,7 +9334,7 @@ DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=tabl_intsp
            ),  
                     
          ),
-         REPONSE         =FACT(statut='f',
+         REPONSE         =FACT(statut='f',min=1,max=1,
            regles=( ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
            DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
@@ -9579,8 +9349,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9623,11 +9392,11 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
          AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
          LIST_AMOR       =SIMP(statut='f',typ=listr8 ),
          MATR_IMPE_PHI   =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         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',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
-         EXCIT           =FACT(statut='o',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 ) ),
@@ -9641,15 +9410,14 @@ DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
            PUIS_PULS       =SIMP(statut='f',typ='I',defaut= 0 ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                fr="Liste des paramètres de sensibilité.",
                                ang="List of sensitivity parameters"),
 )  ;
 # Rajouter test icompatibilite vect_asse et sensibilite
 # Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation 
 #  presents dans le Fortran          
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9680,18 +9448,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',
+         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',
+         WILSON          =FACT(statut='f',min=1,max=1,
            THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
          ),
-         DIFF_CENTRE     =FACT(statut='f',
+         DIFF_CENTRE     =FACT(statut='f',min=1,max=1,
          ),
-         ADAPT           =FACT(statut='f',
+         ADAPT           =FACT(statut='f',min=1,max=1,
          ),
-         ETAT_INIT       =FACT(statut='f',
+         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 ),
@@ -9707,7 +9475,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',max='**',
+         EXCIT           =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('CHARGE','VECT_ASSE'),
                    EXCLUS('CHARGE','COEF_MULT'),
                    EXCLUS('FONC_MULT','COEF_MULT'),
@@ -9725,23 +9493,23 @@ DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
            DEPL            =SIMP(statut='f',typ=(fonction,formule) ),
            MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
          ),
-         AMOR_MODAL      =FACT(statut='f',
+         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',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            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',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,formule) ),       
@@ -9763,21 +9531,16 @@ 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',
+         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' ),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE") ),
-         ),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                               fr="Liste des param\350tres de sensibilit\351.",
-                               ang="List of sensitivity parameters",
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","VITE","ACCE") ),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9804,7 +9567,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
                    PRESENT_PRESENT('ACCE','VITE','DEPL'),
                    PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
@@ -9817,10 +9580,10 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            VITE            =SIMP(statut='f',typ=(fonction,formule)),
            MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
          ),
-         AMOR_MODAL      =FACT(statut='f',
+         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 ),
@@ -9831,7 +9594,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            IRRA     =SIMP(statut='f',typ=evol_varc),
          ),
          COMP_INCR       =C_COMP_INCR(),
-         COMP_ELAS       =FACT(statut='f',max='**',
+         COMP_ELAS       =FACT(statut='f',min=1,max='**',
            RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
                                  into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
                                        "ELAS_POUTRE_GR","CABLE")),
@@ -9843,11 +9606,11 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
 #-------------------------------------------------------------------
-         ETAT_INIT       =FACT(statut='f',
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','SIGM','VARI','VARI_NON_LOCAL',),
                    EXCLUS('EVOL_NOLI','DEPL',),
                    EXCLUS('EVOL_NOLI','VITE'),
@@ -9869,7 +9632,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
          ),
 #-------------------------------------------------------------------
-         INCREMENT       =FACT(statut='o',
+         INCREMENT       =FACT(statut='o',min=1,max=1,
            regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
                    EXCLUS('NUME_INST_FIN','INST_FIN'),),
            LIST_INST       =SIMP(statut='o',typ=listr8),
@@ -9889,22 +9652,22 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            VALE            =SIMP(statut='f',typ='R'),
          ),
 #-------------------------------------------------------------------
-         NEWMARK         =FACT(statut='f',
+         NEWMARK         =FACT(statut='f',min=1,max=1,
            ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25),
            DELTA           =SIMP(statut='f',typ='R',defaut= 0.5),
          ),
-         HHT             =FACT(statut='f',
+         HHT             =FACT(statut='f',min=1,max=1,
            ALPHA           =SIMP(statut='f',typ='R'
                                 ,defaut= -0.29999999999999999 ),
          ),
-         NEWTON          =FACT(statut='d',
+         NEWTON          =FACT(statut='d',min=1,max=1,
            REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
            PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
            MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
            REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
            PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
          ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -9927,7 +9690,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 #-------------------------------------------------------------------
-         RECH_LINEAIRE   =FACT(statut='f',
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
            ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
@@ -9936,7 +9699,7 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
            RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2),
          ),
-         PILOTAGE        =FACT(statut='f',
+         PILOTAGE        =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
            COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
@@ -9947,13 +9710,13 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
            PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
            SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
                          ),
-         CONVERGENCE     =FACT(statut='d',
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
            regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
            SIGM_REFE       =SIMP(statut='f',typ='R'),
            EPSI_REFE       =SIMP(statut='f',typ='R'),
@@ -9975,45 +9738,41 @@ DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
                                  into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
          ),
 #-------------------------------------------------------------------
-         OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="ELNO",
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',defaut="ELNO",
                                into=("SIEF_ELNO_ELGA","VARI_ELNO_ELGA","EFGE_ELNO_CART","ELNO","SANS") ),
-         ARCHIVAGE       =FACT(statut='f',
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
                    EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
            LIST_INST       =SIMP(statut='f',typ=(listr8) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
            PAS_ARCH        =SIMP(statut='f',typ='I' ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
            ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',
            into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","VARI_NON_LOCAL","LANL_ELGA")),
          ),
-         OBSERVATION     =FACT(statut='f',max='**',
+         OBSERVATION     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
                    PRESENT_PRESENT('MAILLE','POINT'),),
-           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
 
 into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU") ),
            NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
            LIST_ARCH       =SIMP(statut='f',typ=listis),
            LIST_INST       =SIMP(statut='f',typ=listr8),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            PAS_OBSE        =SIMP(statut='f',typ='I'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           POINT           =SIMP(statut='f',typ='I' ,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),
          ),
 #-------------------------------------------------------------------
-           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                               fr="Liste des paramètres de sensibilité",
-                               ang="List of sensitivity parameters"),
-#-------------------------------------------------------------------
-           SOLV_NON_LOCAL  =FACT(statut='f',
+           SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
              METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
              b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
                RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -10034,7 +9793,7 @@ into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","
              ),
              EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           LAGR_NON_LOCAL  =FACT(statut='f',
+           LAGR_NON_LOCAL  =FACT(statut='f',max=1,
              ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
              RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
              RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
@@ -10048,8 +9807,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10072,277 +9830,13 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=tabl_intsp,
                      docu="U4.53.23-d",reentrant='n',
             UIinfo={"groupes":("Résolution",)},
          BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
-         EXCIT           =FACT(statut='o',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-#& RESPONSABLE
-DYNA_TRAN_EXPLI=OPER(nom="DYNA_TRAN_EXPLI",op= 69,sd_prod=evol_noli,reentrant='f',
-                   fr="Analyse mecanique dynamique explicite",docu="U4.53.03",
-         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),),
-         MODELE          =SIMP(statut='o',typ=modele),
-         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
-         MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,)),
-         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
-         EXCIT           =FACT(statut='o',max='**',
-           regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
-                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
-                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
-           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
-                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
-           CHARGE          =SIMP(statut='o',typ=char_meca),
-           FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
-           DEPL            =SIMP(statut='f',typ=(fonction,formule)),
-           ACCE            =SIMP(statut='f',typ=(fonction,formule)),
-           VITE            =SIMP(statut='f',typ=(fonction,formule)),
-           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           DIRECTION       =SIMP(statut='f',typ='R',max=3),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-         ),
-         AMOR_MODAL      =FACT(statut='f',
-           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
-           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
-           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
-           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-         ),
-         PROJ_MODAL      =FACT(statut='f',
-           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
-           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
-         ),
-         COMP_INCR       =C_COMP_INCR(),
-         COMP_ELAS       =FACT(statut='f',max='**',
-           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
-                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
-                                       "ELAS_POUTRE_GR","CABLE")),
-           ELAS            =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           ELAS_VMIS_LINE  =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           ELAS_POUTRE_GR  =SIMP(statut='c',typ='I',defaut=3,into=(3,)),
-           CABLE           =SIMP(statut='c',typ='I',defaut=1,into=(1,)),
-           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
-      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-         ),
-#-------------------------------------------------------------------
-         ETAT_INIT       =FACT(statut='f',
-           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','SIGM','VARI','VARI_NON_LOCAL',),
-                   EXCLUS('EVOL_NOLI','DEPL',),
-                   EXCLUS('EVOL_NOLI','VITE'),
-                   EXCLUS('EVOL_NOLI','SIGM',),
-                   EXCLUS('EVOL_NOLI','VARI',),
-                   EXCLUS('EVOL_NOLI','VARI_NON_LOCAL',),
-                   EXCLUS('NUME_ORDRE','INST'), ),
-           DEPL            =SIMP(statut='f',typ=cham_no_depl_r),
-           VITE            =SIMP(statut='f',typ=cham_no_depl_r),
-           SIGM            =SIMP(statut='f',typ=(cham_elem_sief_r,carte_sief_r)),
-           VARI            =SIMP(statut='f',typ=cham_elem_vari_r),
-           VARI_NON_LOCAL  =SIMP(statut='f',typ=cham_no_vanl_r),
-           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
-           NUME_ORDRE      =SIMP(statut='f',typ='I'),
-           INST            =SIMP(statut='f',typ='R'),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
-           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-           NUME_DIDI       =SIMP(statut='f',typ='I'),
-           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
-         ),
-#-------------------------------------------------------------------
-         INCREMENT       =FACT(statut='o',
-           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
-                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
-           LIST_INST       =SIMP(statut='o',typ=listr8),
-           EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
-                                 into=("CHRONOLOGIQUE","RETROGRADE","SANS",) ),
-           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
-           INST_INIT       =SIMP(statut='f',typ='R'),
-           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
-           INST_FIN        =SIMP(statut='f',typ='R'),
-           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
-           SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
-           SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
-           COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
-           OPTI_LIST_INST  =SIMP(statut='f',typ='TXM',into=("INCR_MAXI",),),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',),
-           VALE            =SIMP(statut='f',typ='R'),
-         ),
-#-------------------------------------------------------------------
-         NEWMARK         =FACT(statut='d',
-           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25),
-           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5),
-         ),
-         NEWTON          =FACT(statut='c',
-           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
-           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
-           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
-           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
-           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-         ),
-         SOLVEUR         =FACT(statut='d',
-           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
-           b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-           ),
-           b_ldlt          =BLOC(condition= "METHODE == 'LDLT'",fr="Paramètres de la méthode LDLT",
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
-           ),
-           b_ldlt_mult     =BLOC(condition="METHODE == 'LDLT' or METHODE == 'MULT_FRONT'",
-                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
-             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
-             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
-           ),
-           b_gcpc          =BLOC(condition="METHODE == 'GCPC'",fr="Paramètres de la méthode du gradient conjugué",
-             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
-             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut=0),
-             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
-             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
-             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
-           ),
-           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
-         ),
-#-------------------------------------------------------------------
-         RECH_LINEAIRE   =FACT(statut='c',
-           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
-           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
-           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
-           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
-           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
-           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2),
-         ),
-         PILOTAGE        =FACT(statut='c',
-           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
-           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
-           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
-           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
-           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
-           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
-           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
-           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
-                         ),
-         CONVERGENCE     =FACT(statut='d',
-           regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
-           SIGM_REFE       =SIMP(statut='f',typ='R'),
-           EPSI_REFE       =SIMP(statut='f',typ='R'),
-           FLUX_THER_REFE  =SIMP(statut='f',typ='R'),
-           FLUX_HYD1_REFE  =SIMP(statut='f',typ='R'),
-           FLUX_HYD2_REFE  =SIMP(statut='f',typ='R'),           
-           RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
-           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
-           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
-           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
-           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
-           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
-           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
-                                ,defaut= 1.0E-6),
-           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
-           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
-           TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
-           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
-         ),
-#-------------------------------------------------------------------
-         OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="ELNO",
-                               into=("SIEF_ELNO_ELGA","VARI_ELNO_ELGA","EFGE_ELNO_CART","ELNO","SANS") ),
-         ARCHIVAGE       =FACT(statut='f',
-           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
-                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
-           LIST_INST       =SIMP(statut='f',typ=(listr8) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-           PAS_ARCH        =SIMP(statut='f',typ='I' ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
-           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           NUME_INIT       =SIMP(statut='f',typ='I'),
-           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
-           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE","VARI_NON_LOCAL","LANL_ELGA")),
-         ),
-         OBSERVATION     =FACT(statut='f',max='**',
-           regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
-                   PRESENT_PRESENT('MAILLE','POINT'),),
-           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
-
-into=("DEPL","VITE","ACCE","SIEF_ELGA","VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU") ),
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
-           LIST_ARCH       =SIMP(statut='f',typ=listis),
-           LIST_INST       =SIMP(statut='f',typ=listr8),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
-           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
-           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-           PAS_OBSE        =SIMP(statut='f',typ='I'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           POINT           =SIMP(statut='f',typ='I' ,max='**'),
-         ),
-#-------------------------------------------------------------------
-           SOLV_NON_LOCAL  =FACT(statut='f',
-             METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
-             b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-             ),
-             b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
-               RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
-             ),
-             b_ldlt_mult    =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
-                                    fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
-               NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
-               STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-             ),
-             b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
-               PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
-               NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
-               RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
-               NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
-             ),
-             EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-           ),
-           LAGR_NON_LOCAL  =FACT(statut='f',
-             ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
-             RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
-             RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
-             R               =SIMP(statut='f',typ='R',defaut= 1000.),
-             ITER_PRIM_MAXI  =SIMP(statut='f',typ='I',defaut= 10),
-           ),
-#-------------------------------------------------------------------
-         PARM_THETA      =SIMP(statut='f',typ='R'
-                              ,defaut= 1. ),
-#-------------------------------------------------------------------
-         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
-         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-)  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10376,7 +9870,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',
+         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 ),
@@ -10388,7 +9882,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',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' ),
@@ -10400,7 +9894,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',
+         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' ),
@@ -10410,7 +9904,7 @@ 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',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'),
@@ -10429,14 +9923,14 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),
            b_loca          =BLOC(condition= "DIRECTION != None",
              regles=(EXCLUS('NOEUD','GROUP_NO'),),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            ),
            CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            D_FONC_DT       =SIMP(statut='f',typ=(fonction,formule) ),
            D_FONC_DT2      =SIMP(statut='f',typ=(fonction,formule) ),
          ),
-         CHOC            =FACT(statut='f',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'),),
@@ -10469,11 +9963,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',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',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'),),
@@ -10494,7 +9988,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',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'),
@@ -10510,19 +10004,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',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,formule) ),
          ),
-         RELA_TRANSIS    =FACT(statut='f',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,formule) ),
          ),
-         RELA_EFFO_VITE  =FACT(statut='f',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' ),
@@ -10541,7 +10035,7 @@ 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',max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(EXCLUS('TOUT','NIVEAU'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
@@ -10550,8 +10044,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
  )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10575,13 +10068,12 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-c",
       regles=(UN_PARMI('TOUT','CO'),),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         CO              =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
          TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME","RESUME") ),
          FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
          PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-5"),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10602,12 +10094,11 @@ ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,docu="U4.92.11-c",
 EXEC_LOGICIEL=PROC(nom="EXEC_LOGICIEL",op= 183,fr="",docu="U7.00.01-b",
             UIinfo={"groupes":("Impression",)},
          LOGICIEL        =SIMP(statut='f',typ='TXM' ),  
-         ARGUMENT        =FACT(statut='f',max='**',
+         ARGUMENT        =FACT(statut='f',min=1,max='**',
            NOM_PARA        =SIMP(statut='f',typ='TXM' ),  
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10635,13 +10126,13 @@ def extr_mode_prod(FILTRE_MODE,**args):
 EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
                docu="U4.52.12-d",reentrant='n',
             UIinfo={"groupes":("Résolution",)},
-         FILTRE_MODE     =FACT(statut='o',max='**',
+         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") ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',max='**'),
            FREQ_MIN        =SIMP(statut='f',typ='R' ),
            CRIT_EXTR       =SIMP(statut='f',typ='TXM',into=("MASS_EFFE_UN","MASS_GENE") ),
            b_freq_min      =BLOC(condition = "FREQ_MIN != None",  
@@ -10653,29 +10144,17 @@ EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
            ),    
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-         IMPRESSION      =FACT(statut='f',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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.
 # ======================================================================
 def extr_resu_prod(RESULTAT,**args):
   if AsType(RESULTAT) == evol_elas    : return evol_elas
@@ -10696,40 +10175,39 @@ def extr_resu_prod(RESULTAT,**args):
 
 EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,docu="U4.71.04-c",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,
+         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 ) ),
 
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                    fr="Liste des paramètres de sensibilité.",
                                    ang="List of sensitivity parameters"),
 
-         ARCHIVAGE       =FACT(statut='f',
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(  UN_PARMI('NUME_ORDRE', 'INST', 'FREQ', 'NUME_MODE',
                         'NOEUD_CMP', 'LIST_INST', 'LIST_FREQ', 'LIST_ORDRE',
                         'NOM_CAS', 'LIST_ARCH', 'PAS_ARCH' ),
                      EXCLUS( 'CHAM_EXCLU','NOM_CHAM' ),   ),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
            PRECISION       =SIMP(statut='f',typ='R',defaut=1.E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),defaut="RELATIF"),
            LIST_ARCH       =SIMP(statut='f',typ=listis),
            PAS_ARCH        =SIMP(statut='f',typ='I'),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            LIST_ORDRE      =SIMP(statut='f',typ=listis),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8),
-           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
            LIST_FREQ       =SIMP(statut='f',typ=listr8),
-           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
            NOM_CAS         =SIMP(statut='f',typ='TXM'),
                                ),
 
-         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10764,8 +10242,7 @@ FACT_GRAD=OPER(nom="FACT_GRAD",op=85,sd_prod=fact_grad_prod,docu="U4.55.03-f",
          NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),  
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10797,8 +10274,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10846,8 +10322,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10869,10 +10344,9 @@ FACT_LDLT=OPER(nom="FACT_LDLT",op=14,sd_prod=fact_ldlt_prod,fr="Factorisation en
 FERMER=PROC(nom="FERMER",op=  10,fr=" ",
             docu="U4.12.02-b",
             UIinfo={"groupes":("Gestion du travail",)},
-         UNITE           =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**' ),  
+         UNITE           =SIMP(statut='o',typ='I',max='**' ),  
 )  ;
-
-#& MODIF COMMANDE  DATE 06/09/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10893,9 +10367,6 @@ FERMER=PROC(nom="FERMER",op=  10,fr=" ",
 FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude",
          docu="U4.11.02-g",
             UIinfo={"groupes":("Gestion du travail",)},
-         HDF             =FACT(statut='f',min=1,max=1,
-           FICHIER         =SIMP(fr="nom du fichier hdf associe",statut='o',typ='TXM'),
-         ),
          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 ",
@@ -10904,8 +10375,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10928,8 +10398,7 @@ FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction,
             UIinfo={"groupes":("Fonction",)},
          TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10954,13 +10423,12 @@ FORMULE = FORM( nom='FORMULE',op=ops.build_formule,sd_prod=formule,
 
 ##### fonctions entieres interdites suite au probleme AL2003-072
 #####           regles=(UN_PARMI('REEL','ENTIER','COMPLEXE'),),
-#####           ENTIER   = SIMP(typ = 'shell',),
+#####           ENTIER   = SIMP(typ = 'shell',max=1),
 
-                REEL     = SIMP(typ = 'shell',),
-                COMPLEXE = SIMP(typ = 'shell',),
+                REEL     = SIMP(typ = 'shell',max=1),
+                COMPLEXE = SIMP(typ = 'shell',max=1),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -10988,8 +10456,7 @@ GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table,
          NB_POIN         =SIMP(statut='f',typ='I' ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11016,8 +10483,7 @@ GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op=  27,sd_prod=matr_asse_gene_r,
    INIT         = SIMP(statut='f', typ='TXM', into=("OUI","NON"),defaut="NON"),
 ) ;
    
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11047,8 +10513,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 09/09/2003   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
@@ -11073,10 +10538,9 @@ IMPR_CHARGE=PROC(nom="IMPR_CHARGE",op= 158,
          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,validators=NoRepeat(),max='**', ),
+         CHARGE          =SIMP(statut='o',typ=char_meca,max='**', ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11101,26 +10565,25 @@ IMPR_CLASSI=PROC(nom="IMPR_CLASSI",op= 114,docu="U7.04.21-b",
          UNITE_CLASSI    =SIMP(statut='o',typ='I' ),
          MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
          LIST_ORDRE      =SIMP(statut='f',typ=listis ),
-         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
          LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
          b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
                                    into=("RELATIF","ABSOLU") ),
          ),
-         IMPRESSION      =FACT(statut='f',max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO', ),),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
          ),
          AMOR            =SIMP(statut='o',typ='R',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11148,12 +10611,11 @@ IMPR_CO=PROC(nom="IMPR_CO",op=17,docu="U4.91.11-g",
          ATTRIBUT        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
          CONTENU         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
          BASE            =SIMP(statut='f',typ='TXM',defaut="G",into=("","G","V","L") ),
-         CO              =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'),
+         CO              =SIMP(statut='f',typ=assd,max='**'),
          CHAINE          =SIMP(statut='f',typ='TXM'),
          POSITION        =SIMP(statut='f',typ='I',defaut=1),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11210,7 +10672,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',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, formule, fonction_c),
                                  fr="Fonction réelle ou complexe", ),
@@ -11280,8 +10742,7 @@ IMPR_COURBE=PROC(nom="IMPR_COURBE",op= 141,fr="Impression, sur fichiers",
             ), 
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11307,38 +10768,30 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
 #
 # 1. Le niveau d'information
 #
-         INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 #
-# 2. Langue des messages issus de HOMARD
+# 2. LE REPERTOIRE OU AURA LIEU LE CALCUL HOMARD
+#
+         REP             =SIMP(statut='f',typ='TXM'),  
+#
+# 3. Langue des messages issus de HOMARD
 #
-         LANGUE =SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+         LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
                                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
                            fr="Langue des messages issus de HOMARD.",
                            ang="Language for HOMARD messages." ),
 #
-# 3. Le nom local du fichier de configuration HOMARD
-#
-         FICHIER_CONF    =SIMP(statut='o',typ='TXM'),
-#
-# 4. Le nom local du fichier de données HOMARD
-#
-         FICHIER_DONN    =SIMP(statut='f',typ='TXM'),
+# 4. L'UNITE LOGIQUE D'ECRITURE DU FICHIER DE CONFIGURATION HOMARD
 #
-# 5. Gestion des éléments autres que des simplexes
-#       0 : autres elements refuses (defaut)
-#       1 : raffinement sur les simplexes, mais autres acceptes
-#       2 : tous
+         UNITE           =SIMP(statut='f',typ='I',defaut= 71 ),  
 #
-         NON_SIMPLEXE   = SIMP(statut='f',typ='I',defaut=0,into=(0,1,2),
-                          fr="Acceptation d'éléments quad, hexa et penta",
-                          ang="quad, hexa and penta elements allowed" ),
+# 5. LE TYPE DE TRAITEMENT :
 #
-# 6. Le type de traitement :
+         TRAITEMENT      =FACT(statut='o',min=1,max=1,
 #
-         TRAITEMENT      =FACT(statut='o',
-#
-# 6.1. TROIS CHOIX EXCLUSIFS :
+# 5.1. QUATRE CHOIX EXCLUSIFS :
 #
+# 5.1.1.
 #      A. ADAPTATION PAR UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
 #         . RAFFINEMENT ET DERAFFINEMENT
 #         . RAFFINEMENT SEUL
@@ -11348,8 +10801,9 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
 #         . DERAFFINEMENT SEUL
 #         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
 #      C. INFORMATION SUR UN MAILLAGE
+#      D. MISE A JOUR DE SOLUTIONS
 #
-           regles=( UN_PARMI('ADAPTATION','UNIFORME','INFORMATION'),),
+           regles=( UN_PARMI('ADAPTATION','UNIFORME','INFORMATION','MAJSOLUTION'),),
            ADAPTATION      =SIMP(statut='f',typ='TXM',     
                                  fr="Adaptation libre",
                                  ang="Free adaptation",
@@ -11359,13 +10813,17 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
                                  ang="Uniforme adaptation",
                                  into=("RAFFINEMENT","DERAFFINEMENT","RIEN") ),
            INFORMATION     =SIMP(statut='f',typ='TXM',
-                                 fr="Information sur un maillage",
-                                 ang="Information on a mesh",
+                                 fr="Adaptation libre",
+                                 ang="Free adaptation",
+                                 into=("OUI",) ),
+           MAJSOLUTION     =SIMP(statut='f',typ='TXM',
+                                 fr="Mise à jour de solutions",
+                                 ang="Solution updating",
                                  into=("OUI",) ),
 #
-# 6.2. LES CONTRAINTES :
+# 5.1.2. LES CONTRAINTES :
 #
-# 6.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT :
+# 5.1.2.1. POUR DE L'ADAPTATION LIBRE, IL FAUT :
 #      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
 #      B. LE NOM MED DU MAILLAGE D'ENTREE
 #      C. LE NOM MED DE L'INDICATEUR D'ERREUR
@@ -11374,7 +10832,7 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
 #      F. LE NOM MED DU MAILLAGE DE SORTIE
 #      REMARQUE : IL FAUT DES CRITERES, MAIS ON NE SAIT PAS LESQUELS
 #
-# 6.2.2. POUR DE L'ADAPTATION UNIFORME
+# 5.1.2.2. POUR DE L'ADAPTATION UNIFORME
 #          IL FAUT :
 #      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
 #      B. LE NOM MED DU MAILLAGE DE SORTIE
@@ -11385,7 +10843,17 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
 #      REMARQUE : A L'ITERATION 0, OU AUX ITERATIONS SUIVANTES SI MAJ DE SOLUTION,
 #                 IL FAUT LE NOM MED DU MAILLAGE D'ENTREE
 #
-# 6.2.3. POUR DE L'INFORMATION :
+# 5.1.2.3. POUR DE LA MISE A JOUR DE SOLUTION :
+#          IL FAUT :
+#      A. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
+#      B. LE NOM MED DU MAILLAGE D'ENTREE
+#          IL NE FAUT PAS :
+#      A. LE NOM MED DE L'INDICATEUR D'ERREUR
+#      B. LE NOM DE LA COMPOSANTE DE L'INDICATEUR D'ERREUR
+#      C. LES CRITERES
+#
+#
+# 5.1.2.4. POUR DE L'INFORMATION :
 #          IL FAUT :
 #      A. LE NOM MED DU MAILLAGE D'ENTREE
 #          IL NE FAUT PAS :
@@ -11395,7 +10863,8 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
 #      D. LE NUMERO D'ITERATION DU MAILLAGE DE DEPART
 #      E. LA MISE A JOUR DE SOLUTION
 #
-           b_maillage_initial =BLOC(condition = "( INFORMATION != None ) or ( ADAPTATION != None ) ",
+           b_maillage_initial =BLOC(condition = "( INFORMATION != None ) or ( ADAPTATION != None ) or \
+                                                 ( MAJSOLUTION != None ) ",
                            fr="Nom MED du maillage en entrée",
                            ang="MED name of the in-mesh",
                            NOM_MED_MAILLAGE_N   =SIMP(statut='o',typ='TXM',),
@@ -11407,7 +10876,8 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
                            NOM_MED_MAILLAGE_N   =SIMP(statut='f',typ='TXM',),
                            ) ,
 #
-           b_iteration_maj_champ =BLOC(condition = "( UNIFORME != None ) or ( ADAPTATION != None ) ",
+           b_iteration_maj_champ =BLOC(condition = "( UNIFORME != None ) or ( ADAPTATION != None ) or \
+                                                    ( MAJSOLUTION != None ) ",
                            fr="Nom MED du maillage en sortie, numero d'iteration et mise à jour de champs",
                            ang="MED name of the out-mesh, iteration rank and field updating",
                            NITER                =SIMP(statut='o',typ='I',
@@ -11424,33 +10894,26 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
            b_indicateur_d_erreur  =BLOC(condition = "ADAPTATION != None",
                            fr="Indicateur d'erreur",
                            ang="Error indicator",
-                           regles=(AU_MOINS_UN('NUME_ORDRE','INST','RESULTAT'),
-                                   EXCLUS('NUME_ORDRE','INST'),
-                                   EXCLUS('NUME_ORDRE','RESULTAT'),
-                                   PRESENT_PRESENT('RESULTAT','NOM_CHAM'),),
-                           NOM_MED  =SIMP(statut='o',typ='TXM',
+                           regles=(AU_MOINS_UN('NUMORD_INDICA','NOM_RESU_INDICA'),
+                                   EXCLUS('NUMORD_INDICA','NOM_RESU_INDICA'),
+                                   PRESENT_PRESENT('NUMORD_INDICA','NUMPT_INDICA'),
+                                   PRESENT_PRESENT('NOM_RESU_INDICA','NOM_CHAM_INDICA'),),
+                           NOM_MED_INDICA  =SIMP(statut='o',typ='TXM',
                            fr="Nom MED de l'indicateur d'erreur.",
                            ang="MED name of error indicator.",),
-                           COMPOSANTE  =SIMP(statut='o',typ='TXM',
+                           NOM_CMP_INDICA  =SIMP(statut='o',typ='TXM',
                            fr="Nom de la composante de l'indicateur d'erreur retenue.",
                            ang="Name of the selected component of the error indicator.",),
-                           NUME_ORDRE  =SIMP(statut='f',typ='I',
+                           NUMORD_INDICA  =SIMP(statut='f',typ='I',
                            fr="Numero d'ordre de l'indicateur.",
                            ang="Rank number of the error indicator.",),
-                           INST        =SIMP(statut='f',typ='R',
-                           fr="Instant de l'indicateur.",
-                           ang="Instant of the error indicator.",),
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),),
-                           RESULTAT  =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
+                           NUMPT_INDICA  =SIMP(statut='f',typ='I',
+                           fr="Numero du pas de temps de l'indicateur.",
+                           ang="Time step number of the error indicator.",),
+                           NOM_RESU_INDICA  =SIMP(statut='f',typ='TXM',
                            fr="Concept contenant l'indicateur.",
                            ang="Conceipt wich contains the error indicator.",),
-                           NOM_CHAM  =SIMP(statut='f',typ='TXM',
+                           NOM_CHAM_INDICA  =SIMP(statut='f',typ='TXM',
                            fr="Nom du champ dans le résultat de l'indicateur.",
                            ang="Name of the field of the error indicator.",),
                            ) ,
@@ -11487,39 +10950,27 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
 #
            b_niveau_maximum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'RAFFINEMENT' ) or \
                                                   ( UNIFORME == 'RAFFINEMENT' )" ,
-                           NIVE_MAX        =SIMP(statut='f',typ='I',
-                                                 fr="Niveau maximum de profondeur de raffinement",
-                                                 ang="Maximum level for refinement"),
+                             fr="Niveau maximum de profondeur de raffinement",
+                             ang="Maximum level for refinement",
+                             NIVE_MAX        =SIMP(statut='f',typ='I' ),
                            ) ,
 #
            b_niveau_minimum =BLOC ( condition = " ( ADAPTATION == 'RAFF_DERA' ) or ( ADAPTATION == 'DERAFFINEMENT' ) or \
                                                   ( UNIFORME == 'DERAFFINEMENT' )" ,
-                           NIVE_MIN        =SIMP(statut='f',typ='I',
-                                                 fr="Niveau minimum de déraffinement",
-                                                 ang="Minimum level for unrefinement" ),
+                             fr="Niveau minimum de déraffinement",
+                             ang="Minimum level for unrefinement",
+                             NIVE_MIN        =SIMP(statut='f',typ='I' ),
                            ) ,
-#
-# 6.3. Le suivi de frontiere eventuel :
-#
-         NOM_MED_MAILLAGE_FRONTIERE =SIMP(statut='f',typ='TXM',
-                           fr="Nom MED du maillage de la frontiere à suivre",
-                           ang="MED name of the boundary mesh" ),
-#
-         b_frontiere_1 =BLOC ( condition = "NOM_MED_MAILLAGE_FRONTIERE != None" ,
-                           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
-                                                 fr="Groupes définissant la frontière",
-                                                 ang="Groups which define the boundary" ),
-                               ) ,
 #
          ),
 #
-# 7. L'ANALYSE DU MAILLAGE
+# 6. L'ANALYSE DU MAILLAGE
 #
-         ANALYSE         =FACT(statut='f',
+         ANALYSE         =FACT(statut='f',min=1,max=1,
                                fr="Analyse du maillage.",
                                ang="Mesh analysis.",
 #
-#    5 CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) :
+# 6.1. CHOIX NON EXCLUSIFS, AVEC DEUX VARIANTES (OUI/NON) :
 #    A. NOMBRE DES ELEMENTS
 #    B. QUALITE DES ELEMENTS
 #    C. INTERPENETRATION DES ELEMENTS
@@ -11551,8 +11002,7 @@ IMPR_FICO_HOMA=PROC(nom="IMPR_FICO_HOMA",op= 189, docu="U7.04.01-b",
          ),
 #
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11574,7 +11024,7 @@ 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-d",
             UIinfo={"groupes":("Impression",)},
-         GENE            =FACT(statut='o',max='**',
+         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',
@@ -11589,14 +11039,14 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
            FICHIER         =SIMP(statut='f',typ='TXM' ),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            LIST_ORDRE      =SIMP(statut='f',typ=listis ),
            TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8 ),
            TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
            LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
            b_prec_crit     =BLOC(condition = "LIST_FREQ != None or FREQ != None",
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
@@ -11614,8 +11064,7 @@ IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
            INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11653,10 +11102,10 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-g",
          b_systeme    =BLOC(condition = "(ENTITE=='SYSTEME')",
             CLASSE          =SIMP(statut='o',typ='TXM',into=('G','V','L') ),  
             NOMATR          =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',   
-                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$MARQ',
+                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$ETAT',
                                       '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
                                       '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
-                                      '$$TLEC','$$TECR','$$IADM','$$ACCE','$$USADI') ),
+                                      '$$TLEC','$$TECR','$$IADM','$$ACCE') ),
          ),
          b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
             CLASSE          =SIMP(statut='f',typ='TXM',into=('G','V','L',' '),defaut=' '),  
@@ -11664,14 +11113,13 @@ IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,docu="U4.91.21-g",
          b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
             CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V','L',' '),defaut=' '),  
          ),
-         IMPRESSION      =FACT(statut='f',
+         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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11705,8 +11153,8 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
          b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
            UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
            SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
-           AMOR_REDUIT     =SIMP(statut='f',typ='R'  ,max='**'),
-           GROUP_MA_INTERF =SIMP(statut='o',typ=grma ,max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           GROUP_MA_INTERF =SIMP(statut='o',typ=grma,max='**'),
 #  Ces trois mots cles sont-ils dans le bon bloc et avec le bon statut        
            GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
            GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
@@ -11724,8 +11172,7 @@ IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
          ),
 
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11749,7 +11196,7 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
             UIinfo={"groupes":("Impression",)},
          regles=(AU_MOINS_UN('MATR_ELEM','MATR_ASSE'),),
          
-         MATR_ELEM       =FACT(statut='f',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") ),
@@ -11760,16 +11207,16 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
            MATRICE         =SIMP(statut='o',typ=(matr_elem, vect_elem)),
 #  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA           
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
            GRAIN           =SIMP(statut='f',typ='TXM',defaut="VALEUR",
                                  into=("VALEUR","NOEUD","MAILLE") ),
            NB_CHIFFRE      =SIMP(statut='f',typ='I',defaut= 4 ),
          ),
-         MATR_ASSE       =FACT(statut='f',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") ),
@@ -11778,10 +11225,10 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
            MATRICE         =SIMP(statut='o',typ=matr_asse),
 #  Quelle regle pour TOUT, NOEUD, GROUP_NO, MAILLE, GROUP_MA                      
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',defaut="SOUS_MATRICE",
                                  into=("SOUS_MATRICE","LIGNE","COLONNE") ),
            NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
@@ -11791,8 +11238,7 @@ IMPR_MATRICE=PROC(nom="IMPR_MATRICE",op= 159,
            VALE_ZERO       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -11817,14 +11263,14 @@ IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
                  PRESENT_PRESENT('INST_INIT','INST_FIN'),
                  PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
          MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
-         EXCIT           =FACT(statut='f',max='**',
+         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,formule) ),
            COEF_MULT       =SIMP(statut='f',typ='R' ),
          ),
-         EXCIT_SOL       =FACT(statut='f',max='**',
-           DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
+         EXCIT_SOL       =FACT(statut='f',min=1,max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
            FONC_SIGNAL     =SIMP(statut='f',typ=(fonction,formule) ),
            NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
                                  into=("DEPL","VITE","ACCE","FORC",) ),
@@ -11838,30 +11284,29 @@ 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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g",
             UIinfo={"groupes":("Impression",)},
                fr="Impression du résultat d un calcul (différents formats)",
          MODELE          =SIMP(statut='f',typ=modele),
-         RESU            =FACT(statut='o',max='**',
+         RESU            =FACT(statut='o',min=1,max='**',
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
                                  into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
 
@@ -11887,7 +11332,7 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g",
            b_sensibilite   =BLOC(condition="RESULTAT != None",
                                  fr="Définition des paramètres de sensibilité",
                                  ang="Definition of sensitivity parameters",
-             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                    fr="Liste des paramètres de sensibilité.",
                                    ang="List of sensitivity parameters"),),
 
@@ -11897,18 +11342,18 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g",
                      EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP',
                             'LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS','ANGL'),),
              TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
-             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
 
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-             NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
              LIST_ORDRE      =SIMP(statut='f',typ=listis),
-             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-             ANGL            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+             ANGL            =SIMP(statut='f',typ='R',max='**'),
+             FREQ            =SIMP(statut='f',typ='R',max='**'),
              LIST_FREQ       =SIMP(statut='f',typ=listr8),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
              LIST_INST       =SIMP(statut='f',typ=listr8),
 
              b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
@@ -11936,18 +11381,18 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g",
            b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
                                  fr="sélection des composantes et des entités toplogiques",
              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            ),
 
            b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
                                    ((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'MED'))""",
                                    fr="sélection des entités toplogiques",
              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no,max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
            ),
 
            b_valeurs         =BLOC(condition="(FORMAT == 'RESULTAT')",
@@ -11965,8 +11410,7 @@ IMPR_RESU=PROC(nom="IMPR_RESU",op=39,docu="U4.91.01-g",
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12007,8 +11451,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12031,13 +11474,10 @@ IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-d",
             UIinfo={"groupes":("Impression",)},
                 fr="Impression d un concept de type table",
          TABLE           =SIMP(statut='o',typ=table),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                               fr="Liste des paramètres de sensibilité.",
-                               ang="List of sensitivity parameters"),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT", ),
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",
                                into=("EXCEL","AGRAF","MOT_CLE","TABLEAU","ASTER") ),
-         FILTRE          =FACT(statut='f',max='**',
+         FILTRE          =FACT(statut='f',min=1,max='**',
            NOM_PARA        =SIMP(statut='o',typ='TXM'),
            CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
                                  into=("EQ","LT","GT","NE","LE","GE","VIDE",
@@ -12052,9 +11492,9 @@ IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-d",
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
          ),
-         TRI             =FACT(statut='f',
-           NOM_PARA        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
-           ORDRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="CROISSANT",
+         TRI             =FACT(statut='f',min=1,max=1,
+           NOM_PARA        =SIMP(statut='o',typ='TXM',max='**'),
+           ORDRE           =SIMP(statut='f',typ='TXM',max='**',defaut="CROISSANT",
                                  into=("CROISSANT","DECROISSANT") ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
@@ -12063,14 +11503,12 @@ IMPR_TABLE=PROC(nom="IMPR_TABLE",op=155,docu="U4.91.03-d",
          FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
          FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
                                     into=("MODULE_PHASE","REEL_IMAG") ),
-         NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
          TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",)),
          IMPR_FONCTION   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          TITRE_TABLE     =SIMP(statut='f',typ='TXM',max='**'),
-         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12095,8 +11533,7 @@ INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,docu="U4.13.01-f",
          UNITE = SIMP(statut='o',typ='I'),
          INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 );
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12127,15 +11564,14 @@ INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,docu="U4.43.02-b",
          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',max=99,
+         EXTRACTION      =FACT(statut='f',min=1,max=99,
            COMPOR          =SIMP(statut='o',typ='TXM' ),  
            TEMP_EVAL       =SIMP(statut='o',typ='R' ),  
          ),
          UNITE_LONGUEUR  =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ),  
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12160,12 +11596,13 @@ INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table,
                     UIinfo={"groupes":("Gestion du travail",)},
 
          regles=(),
-         LISTE_INFO      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("CPU_RESTANT","CPU",),),
+         LISTE_INFO      =SIMP(statut='o',typ='TXM',max='**',
+                               into=("CPU_RESTANT","CPU",),),
+  
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12200,55 +11637,54 @@ INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe,docu="U4.81.11-f",
                  EXCLUS('DEFI_CHEMIN','DEFI_ARC'),),
 
          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,max='**'),
 
-         DEFI_SEGMENT    =FACT(statut='f',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),  
-           NOEUD_ORIG      =SIMP(statut='f',typ=no,),
-           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
            EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
-           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
-           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
          ),
 
-         DEFI_ARC        =FACT(statut='f',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'),               
                    PRESENT_PRESENT('RAYON','SECTEUR'),),
            CENTRE          =SIMP(statut='f',typ='R',min=2,max=2),  
-           NOEUD_CENTRE    =SIMP(statut='f',typ=no,),
-           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,),
-           RAYON           =SIMP(statut='f',typ='R',val_min=0.E+0),  
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,max=1),
+           RAYON           =SIMP(statut='f',typ='R',max=1,val_min=0.E+0),  
            SECTEUR         =SIMP(statut='f',typ='R',min=2,max=2,
                                  val_min=-180.E+0,val_max=180E+0),  
            ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
-           NOEUD_ORIG      =SIMP(statut='f',typ=no,),
-           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
            EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
-           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
-           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",    
                                  into=("RELATIF","ABSOLU",) ),
          ),
 
-         DEFI_CHEMIN     =FACT(statut='f',max='**',
+         DEFI_CHEMIN     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('MAILLE','GROUP_MA'),),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
          ),
 
-         NOEUD_ORIG      =SIMP(statut='f',typ=no,),
-         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+         NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12272,23 +11708,22 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-f",
                   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,validators=NoRepeat(),max='**'),
-         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-         DEFI_SEGMENT    =FACT(statut='o',max='**',
+         GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,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),  
-           NOEUD_ORIG      =SIMP(statut='f',typ=no,),
-           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,max=1),
            EXTREMITE       =SIMP(statut='f',typ='R',min=3,max=3),  
-           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
-           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,max=1),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,max=1),
          ),
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12307,8 +11742,6 @@ INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface,docu="U4.81.12-f",
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 def lire_champ_prod(TYPE_CHAM=None,**args):
-# Remarque : si cette liste évolue, il faut penser à mettre à jour son
-#            homologue dans macr_adap_mail
   if TYPE_CHAM == "NOEU_DBEL_R" : return cham_no_dbel_r
   if TYPE_CHAM == "NOEU_DEPL_C" : return cham_no_depl_c
   if TYPE_CHAM == "NOEU_DEPL_F" : return cham_no_depl_f
@@ -12418,30 +11851,16 @@ LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
          FORMAT          =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),),
          UNITE           =SIMP(statut='f',typ='I',defaut= 81,),  
          b_format =BLOC(condition = "FORMAT == 'MED'",
-         regles=( UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
-                  PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),
-                  EXCLUS('NUME_ORDRE','INST'),
-                  EXCLUS('NUME_PT','INST'),),
+         regles=(UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
+          PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),),
             NOM_MED      =SIMP(statut='o',typ='TXM', ),
             NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",), ),
-            NOM_CMP      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
-            NOM_CMP_MED  =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
-            NUME_PT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',),
-            NUME_ORDRE   =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',
-                           fr="Numero d ordre du champ à lire",ang="Rank of the field to be read" ),
-            INST         =SIMP(statut='f',typ='R',fr="Instant associé",ang="Instant" ),
-#
-            b_precision     =BLOC(condition="(INST != None)",
-              PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-              fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),
-              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-              fr="Critère de précision sur le choix de l'instant associé",
-              ang="Accuracy criterium over instant choice" ),),
-#
-            NOM_MAIL_MED =SIMP(statut='f',typ='TXM',),
+            NOM_CMP      =SIMP(statut='f',typ='TXM',max='**',),
+            NOM_CMP_MED  =SIMP(statut='f',typ='TXM',max='**',),
+            NUME_ORDRE   =SIMP(statut='f',typ='I',max='**',),
+            NUME_PT      =SIMP(statut='f',typ='I',max='**',),
+            NOM_MAIL_MED = SIMP(statut='f',typ='TXM',),
                   ),
-#        Remarque : si cette liste évolue, il faut penser à mettre à jour son
-#                   homologue dans macr_adap_mail
          TYPE_CHAM       =SIMP(statut='o',typ='TXM',
                        into=("NOEU_DBEL_R",  "ELEM_DBEL_R",  "ELNO_DBEL_R",  "ELGA_DBEL_R",
                              "NOEU_DEPL_C",  "ELEM_DEPL_C",  "ELNO_DEPL_C",  "ELGA_DEPL_C",
@@ -12473,8 +11892,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12513,8 +11931,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12548,8 +11965,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12580,11 +11996,11 @@ LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage,
                             fr="Format du fichier : ASTER ou MED.",
                             ang="Format of the file : ASTER or MED.",),
 #
-         ABSC_CURV       =FACT(statut='f',min=0,
+         ABSC_CURV       =FACT(statut='f',min=0,max=1,
                TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 #
-         VERI_MAIL       =FACT(statut='d',
+         VERI_MAIL       =FACT(statut='d',min=1,max=1,
                VERIF         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),  
                APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
          ),
@@ -12607,24 +12023,12 @@ 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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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.
 # ======================================================================
 def lire_miss_3d_prod(TYPE_RESU,**args):
   if TYPE_RESU == "TRANS" : return dyna_trans
@@ -12641,8 +12045,7 @@ LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
          TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12671,9 +12074,9 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
          MAILLAGE        =SIMP(statut='o',typ=maillage ),
          MODELE          =SIMP(statut='o',typ=modele ),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
          LIST_ORDRE      =SIMP(statut='f',typ=listis ),
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
          LIST_INST       =SIMP(statut='f',typ=listr8 ),
          b_prec_crit     =BLOC(condition = "LIST_INST != None or INST != None",
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
@@ -12682,27 +12085,14 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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 VABHHTS J.PELLET
-
 def lire_resu_prod(TYPE_RESU,**args):
   if TYPE_RESU == "EVOL_CHAR" :  return evol_char
   if TYPE_RESU == "EVOL_THER" :  return evol_ther
@@ -12714,43 +12104,12 @@ def lire_resu_prod(TYPE_RESU,**args):
   if TYPE_RESU == "MODE_MECA" :  return mode_meca
   raise AsException("type de concept resultat non prevu")
 
-# pour éviter d'écrire 3 fois cette liste :
-def l_nom_cham_pas_elga(): return (
-     "ACCE", "ACCE_ABSOLU", "CRIT_ELNO_RUPT", "DCHA_ELNO_SIGM",
-     "DCHA_NOEU_SIGM", "DEDE_ELNO_DLDE", "DEDE_NOEU_DLDE", "DEGE_ELNO_DEPL", "DEGE_NOEU_DEPL",
-     "DEPL", "DEPL_ABSOLU", "DESI_ELNO_DLSI", "DESI_NOEU_DLSI", "DETE_ELNO_DLTE", "DETE_NOEU_DLTE",
-     "DURT_ELNO_META", "DURT_NOEU_META", "ECIN_ELEM_DEPL", "EFGE_ELNO_CART", "EFGE_ELNO_DEPL",
-     "EFGE_NOEU_CART", "EFGE_NOEU_DEPL", "ENDO_ELNO_SIGA", "ENDO_ELNO_SINO", "ENDO_NOEU_SINO",
-     "ENEL_ELNO_ELGA", "ENEL_NOEU_ELGA", "EPEQ_ELNO_TUYO", "EPGR_ELNO", "EPME_ELNO_DEPL",
-     "EPMG_ELNO_DEPL", "EPMG_NOEU_DEPL", "EPOT_ELEM_DEPL", "EPSA_ELNO", "EPSA_NOEU",
-     "EPSG_ELNO_DEPL", "EPSG_NOEU_DEPL", "EPSI_ELNO_DEPL", "EPSI_ELNO_TUYO", "EPSI_NOEU_DEPL",
-     "EPSP_ELNO", "EPSP_ELNO_ZAC", "EPSP_NOEU", "EPSP_NOEU_ZAC", "EQUI_ELNO_EPME", "EQUI_ELNO_EPSI",
-     "EQUI_ELNO_SIGM", "EQUI_NOEU_EPME", "EQUI_NOEU_EPSI", "EQUI_NOEU_SIGM", "ERRE_ELEM_NOZ1",
-     "ERRE_ELEM_NOZ2", "ERRE_ELNO_ELGA", "ERRE_NOEU_ELGA", "ERTH_ELEM_TEMP", "ERTH_ELNO_ELEM",
-     "ETOT_ELEM", "ETOT_ELNO_ELGA", "FLUX_ELNO_TEMP", "FLUX_NOEU_TEMP", "FORC_NODA", "FSUR_2D",
-     "FSUR_3D", "FVOL_2D", "FVOL_3D", "GRAD_NOEU_THETA", "HYDR_ELNO_ELGA", "HYDR_NOEU_ELGA",
-     "INTE_ELNO_ACTI", "INTE_ELNO_REAC", "INTE_NOEU_ACTI", "INTE_NOEU_REAC", "IRRA",
-     "META_ELNO_TEMP", "META_NOEU_TEMP", "PMPB_ELNO_SIEF", "PMPB_NOEU_SIEF",
-     "PRES", "PRES_DBEL_DEPL", "PRES_ELNO_DBEL", "PRES_ELNO_IMAG", "PRES_ELNO_REEL",
-     "PRES_NOEU_DBEL", "PRES_NOEU_IMAG", "PRES_NOEU_REEL",
-     "RADI_ELNO_SIGM", "RADI_NOEU_SIGM", "REAC_NODA",
-     "SIEF_ELNO", "SIEF_ELNO_ELGA", "SIEF_NOEU", "SIEF_NOEU_ELGA", "SIEQ_ELNO_TUYO",
-     "SIGM_ELNO_CART", "SIGM_ELNO_COQU", "SIGM_ELNO_DEPL", "SIGM_ELNO_SIEF",
-     "SIGM_ELNO_TUYO", "SIGM_ELNO_ZAC", "SIGM_NOEU_CART", "SIGM_NOEU_COQU",
-     "SIGM_NOEU_DEPL", "SIGM_NOEU_SIEF", "SIGM_NOEU_ZAC", "SIGM_NOZ1_ELGA",
-     "SIGM_NOZ2_ELGA", "SIPO_ELNO_DEPL", "SIPO_ELNO_SIEF", "SIPO_NOEU_DEPL",
-     "SIPO_NOEU_SIEF", "SIRE_ELNO_DEPL", "SIRE_NOEU_DEPL", "TEMP", "THETA",
-     "VALE_CONT", "VALE_NCOU_MAXI", "VARI_ELNO", "VARI_ELNO_COQU",
-     "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA", "VARI_NON_LOCAL",
-     "VITE", "VITE_ABSOLU", "VITE_VENT",
-                           )
-
 LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d",reentrant='n',
             UIinfo={"groupes":("Maillage",)},
                fr="Lecture de champs aux noeuds ou par éléments aux noeuds sur un fichier IDEAS ou EnSight",
 
 
-# 0) mots clés généraux :
+# 0 mots clés généraux :
 #----------------------
          TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA",
                                                           "DYNA_TRANS","DYNA_HARMO","HARM_GENE","EVOL_CHAR") ),
@@ -12767,11 +12126,11 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d",r
          NB_VARI         =SIMP(statut='f',typ='I' ),
 
 
-# 1) blocs selon le format choisi :
+# 1 blocs selon le format choisi :
 #---------------------------------
 
 # 1-1 ideas dataset-58 :
-# ----------------------
+# ---------
          b_dataset_58 = BLOC(condition="FORMAT=='IDEAS_DS58'",
            UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
          ),
@@ -12783,17 +12142,18 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d",r
                               regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
                               CODE_DIR =SIMP(statut='f',typ='I',into=(1,2,3,) ),
                               DIRECTION=SIMP(statut='f',typ='R',min=3,max=3,),
-                              NOEUD    =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),),
+                              NOEUD    =SIMP(statut='f',typ=no,max='**'),),
          ),
 
 # 1-2 ideas  :
 # ---------
          b_ideas         =BLOC(condition="FORMAT=='IDEAS'",
            UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
-           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
            FORMAT_IDEAS    =FACT(statut='f',max='**',
              regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("TEMP","DEPL","VITE","ACCE","PRES","VARI_ELNO",
+                                                                     "SIEF_ELNO","EPSA_ELNO","TEMP_PEAU","VITE_VENT",
+                                                                     "FVOL_3D","FVOL_2D","FSUR_3D","FSUR_2D") ),
              NUME_DATASET    =SIMP(statut='f',typ='I',into=(55,57,2414) ),
              RECORD_3        =SIMP(statut='f',typ='I',max=10),
              RECORD_6        =SIMP(statut='f',typ='I',max=10),
@@ -12809,41 +12169,66 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d",r
 # -------------
          b_ensight       =BLOC(condition="FORMAT=='ENSIGHT'",
            NOM_FICHIER     =SIMP(statut='f',typ='TXM'),
-           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
          ),
 
 # 1-4 med :
 # ---------
          b_med           =BLOC(condition = "FORMAT == 'MED'",fr="Nom du champ dans le fichier MED",
-           UNITE           =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
-           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
            FORMAT_MED      =FACT(statut='f',max='**',
-             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()),
              NOM_CHAM_MED    =SIMP(statut='o',typ='TXM',               fr="Nom du champ dans le fichier MED.",  ),
              NOM_CMP_IDEM    =SIMP(statut='f',typ='TXM',into=("OUI",), fr="Les composantes ont le meme nom dans MED et ASTER.", ),
              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans ASTER.", ),
              NOM_CMP_MED     =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans MED.", ),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',max=1,into=("TEMP","DEPL","SIEF_ELNO","EPSA_ELNO","VARI_ELNO",) ),
            ),
+           UNITE           =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
                   ),
 
-# 2) blocs selon le type du résultat :
+# 2 blocs selon le type du résultat :
 #---------------------------------
+         b_evol_elas     =BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL",) ),
+         ),
+         b_evol_ther     =BLOC(condition="TYPE_RESU=='EVOL_THER'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_PEAU") ),
+         ),
+         b_evol_char     =BLOC(condition="TYPE_RESU=='EVOL_CHAR'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("PRES","VITE_VENT",
+                                       "FVOL_3D","FVOL_2D",
+                                       "FSUR_3D","FSUR_2D") ),
+         ),
+         b_evol_noli     =BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE","VARI_ELNO",
+                                       "SIEF_ELNO","EPSA_ELNO") ),
+         ),
          b_mode_meca     =BLOC(condition="TYPE_RESU=='MODE_MECA'",
-           MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,),
-           MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 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 (FORMAT!='IDEAS_DS58')",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',
+                                 into=("DEPL","VITE","ACCE",) ),
          ),
 
 
-# 3) autres blocs :
+# 3 autres blocs :
 #---------------------------------
          b_extrac        =BLOC(condition="1",fr="accès à un champ dans la structure de données résultat",
            regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST','FREQ','LIST_FREQ'),),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8),
            LIST_ORDRE      =SIMP(statut='f',typ=listis),
-           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
            LIST_FREQ       =SIMP(statut='f',typ=listr8),
 
            b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
@@ -12852,8 +12237,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,docu="U7.02.01-d",r
            ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12893,8 +12277,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12913,119 +12296,19 @@ LIRE_TABLE=OPER(nom="LIRE_TABLE",op=29,sd_prod=lire_table_prod,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
-
-from Macro.macr_adap_mail_ops import macr_adap_mail_ops
-
 def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
-  maillage_np1=ADAPTATION['MAILLAGE_NP1']
-  self.type_sdprod(maillage_np1,maillage)
+  mail1=ADAPTATION['MAILLAGE_N']
+  self.type_sdprod(mail1,maillage)
+  mail2=ADAPTATION['MAILLAGE_NP1']
+  self.type_sdprod(mail2,maillage)
   if MAJ_CHAM == None:return None
-# Remarque : la liste qui suit doit etre conforme à son homologue de LIRE_CHAMP
   for ch in MAJ_CHAM:
     t=ch['TYPE_CHAM']
-    if t == "NOEU_DBEL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_dbel_r)
-    if t == "NOEU_DEPL_C":self.type_sdprod(ch['CHAM_MAJ'],cham_no_depl_c)
-    if t == "NOEU_DEPL_F":self.type_sdprod(ch['CHAM_MAJ'],cham_no_depl_f)
-    if t == "NOEU_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_depl_r)
-    if t == "NOEU_DURT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_durt_r)
-    if t == "NOEU_ENER_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_ener_r)
-    if t == "NOEU_EPSI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_epsi_r)
-    if t == "NOEU_ERREUR":self.type_sdprod(ch['CHAM_MAJ'],cham_no_erreur)
-    if t == "NOEU_FLUX_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_flux_r)
-    if t == "NOEU_GEOM_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_geom_r)
-    if t == "NOEU_G_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_g_depl_r)
-    if t == "NOEU_HYDR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_hydr_r)
-    if t == "NOEU_INST_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_inst_r)
-    if t == "NOEU_INTE_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_inte_r)
-    if t == "NOEU_META_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_meta_r)
-    if t == "NOEU_NEUT_F":self.type_sdprod(ch['CHAM_MAJ'],cham_no_neut_f)
-    if t == "NOEU_NEUT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_neut_r)
-    if t == "NOEU_PRES_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_pres_r)
-    if t == "NOEU_SIEF_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_sief_r)
-    if t == "NOEU_SOUR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_sour_r)
-    if t == "NOEU_TEMP_F":self.type_sdprod(ch['CHAM_MAJ'],cham_no_temp_f)
-    if t == "NOEU_TEMP_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_temp_r)
-    if t == "NOEU_VAR2_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_var2_r)
-    if t == "NOEU_VNOR_C":self.type_sdprod(ch['CHAM_MAJ'],cham_no_vnor_c)
-    if t == "ELEM_DBEL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_dbel_r)
-    if t == "ELEM_DEPL_C":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_c)
-    if t == "ELEM_DEPL_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_f)
-    if t == "ELEM_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_r)
-    if t == "ELEM_DURT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_durt_r)
-    if t == "ELEM_ENER_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_ener_r)
-    if t == "ELEM_EPSI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_epsi_r)
-    if t == "ELEM_ERREUR":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_erreur)
-    if t == "ELEM_FLUX_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_flux_r)
-    if t == "ELEM_GEOM_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_geom_r)
-    if t == "ELEM_G_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_g_depl)
-    if t == "ELEM_HYDR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_hydr_r)
-    if t == "ELEM_INST_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_inst_r)
-    if t == "ELEM_INTE_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_inte_r)
-    if t == "ELEM_META_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_meta_r)
-    if t == "ELEM_NEUT_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_neut_f)
-    if t == "ELEM_NEUT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_neut_r)
-    if t == "ELEM_PRES_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_pres_r)
-    if t == "ELEM_SIEF_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_sief_r)
-    if t == "ELEM_SOUR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_sour_r)
-    if t == "ELEM_TEMP_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_temp_f)
-    if t == "ELEM_TEMP_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_temp_r)
-    if t == "ELEM_VARI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_vari_r)
-    if t == "ELEM_VNOR_C":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_vnor_c)
-    if t == "ELNO_DBEL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_dbel_r)
-    if t == "ELNO_DEPL_C":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_c)
-    if t == "ELNO_DEPL_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_f)
-    if t == "ELNO_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_r)
-    if t == "ELNO_DURT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_durt_r)
-    if t == "ELNO_ENER_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_ener_r)
-    if t == "ELNO_EPSI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_epsi_r)
-    if t == "ELNO_ERREUR":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_erreur)
-    if t == "ELNO_FLUX_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_flux_r)
-    if t == "ELNO_GEOM_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_geom_r)
-    if t == "ELNO_G_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_g_depl)
-    if t == "ELNO_HYDR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_hydr_r)
-    if t == "ELNO_INST_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_inst_r)
-    if t == "ELNO_INTE_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_inte_r)
-    if t == "ELNO_META_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_meta_r)
-    if t == "ELNO_NEUT_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_neut_f)
-    if t == "ELNO_NEUT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_neut_r)
-    if t == "ELNO_PRES_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_pres_r)
-    if t == "ELNO_SIEF_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_sief_r)
-    if t == "ELNO_SOUR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_sour_r)
-    if t == "ELNO_TEMP_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_temp_f)
-    if t == "ELNO_TEMP_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_temp_r)
-    if t == "ELNO_VARI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_vari_r)
-    if t == "ELNO_VNOR_C":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_vnor_c)
-    if t == "ELGA_DBEL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_dbel_r)
-    if t == "ELGA_DEPL_C":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_c)
-    if t == "ELGA_DEPL_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_f)
-    if t == "ELGA_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_depl_r)
-    if t == "ELGA_DURT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_durt_r)
-    if t == "ELGA_ENER_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_ener_r)
-    if t == "ELGA_EPSI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_epsi_r)
-    if t == "ELGA_ERREUR":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_erreur)
-    if t == "ELGA_FLUX_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_flux_r)
-    if t == "ELGA_GEOM_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_geom_r)
-    if t == "ELGA_G_DEPL_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_g_depl)
-    if t == "ELGA_HYDR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_hydr_r)
-    if t == "ELGA_INST_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_inst_r)
-    if t == "ELGA_INTE_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_inte_r)
-    if t == "ELGA_META_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_meta_r)
-    if t == "ELGA_NEUT_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_neut_f)
-    if t == "ELGA_NEUT_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_neut_r)
-    if t == "ELGA_PRES_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_pres_r)
-    if t == "ELGA_SIEF_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_sief_r)
-    if t == "ELGA_SOUR_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_sour_r)
-    if t == "ELGA_TEMP_F":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_temp_f)
-    if t == "ELGA_TEMP_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_temp_r)
-    if t == "ELGA_VARI_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_vari_r)
-    if t == "ELGA_VNOR_C":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_vnor_c)
-    if t == "NOEU_IRRA_R":self.type_sdprod(ch['CHAM_MAJ'],cham_no_irra_r)
-    if t == "ELEM_IRRA_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_irra_r)
-    if t == "ELNO_IRRA_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_irra_r)
-    if t == "ELGA_IRRA_R":self.type_sdprod(ch['CHAM_MAJ'],cham_elem_irra_r)
+    if t == 'NOEU_TEMP_R':self.type_sdprod(ch['CHAM_MAJ'],cham_no_temp_r)
+    if t == 'NOEU_DEPL_R':self.type_sdprod(ch['CHAM_MAJ'],cham_no_depl_r)
   return None
 
-MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_adap_mail_prod,
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=-24,sd_prod=macr_adap_mail_prod,
                      fr="Adapter un maillage avec le logiciel HOMARD.",
                      ang="Mesh adaptation with HOMARD software.",
                      docu="U7.03.01-b",
@@ -13036,8 +12319,8 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
 #
 # 2. Version de HOMARD
 #
-         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V6_2",
-                               into=("V6_2", "V6_N", "V6_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"),
 #
@@ -13048,33 +12331,23 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                            fr="Langue des messages issus de HOMARD.",
                            ang="Language for HOMARD messages." ),
 #
-# 4. Gestion des éléments autres que des simplexes
-#    Remarque : pour le moment on bride le choix 2
-#       0 : autres elements refuses (defaut)
-#       1 : raffinement sur les simplexes, mais autres acceptes
-#       2 : tous
+# 4. LE TYPE DE TRAITEMENT :
 #
-         NON_SIMPLEXE   = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
-                          fr="Acceptation d'éléments quad, hexa et penta",
-                          ang="quad, hexa and penta elements allowed" ),
-#
-# 5. Le type de traitement :
-#
-         ADAPTATION      =FACT(statut='o',
+         ADAPTATION      =FACT(statut='o',min=01,max=01,
                            fr="Type d'adaptation",
                            ang="Type of adaptation",
 #
-# 5.1. Deux choix d'adaptation exclusifs :
+# 4.1. DEUX CHOIX D'ADAPTATION EXCLUSIFS :
 #
-# 5.1.
-#      A. Selon un indicateur d'erreur, avec trois variantes :
-#         . Raffinement et deraffinement
-#         . Raffinement seul
-#         . Deraffinement seul
-#      B. Uniforme, avec trois variantes :
-#         . Raffinement seul
-#         . Deraffinement seul
-#         . Rien : le maillage est le meme a la sortie et a l'entree
+# 4.1.
+#      A. SELON UN INDICATEUR D'ERREUR, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT ET DERAFFINEMENT
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#      B. UNIFORME, AVEC TROIS VARIANTES :
+#         . RAFFINEMENT SEUL
+#         . DERAFFINEMENT SEUL
+#         . RIEN : LE MAILLAGE EST LE MEME A LA SORTIE ET A L'ENTREE
 #
            regles=(
                    UN_PARMI('LIBRE','UNIFORME'),
@@ -13088,74 +12361,52 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                            fr="Adaptation uniforme.",
                            ang="Uniform adaptation" ),
 #
-# 5.2. Quel que soit le type de traitement, il faut donner  :
-#      A. Le concept du maillage initial
-#      B. Le concept du maillage final
+# 4.2. QUEL QUE SOIT LE TYPE DE TRAITEMENT, IL FAUT DONNER  :
+#      A. LE CONCEPT DU MAILLAGE INITIAL
+#      B. LE CONCEPT DU MAILLAGE FINAL
 #
-           MAILLAGE_N     = SIMP(statut='o',typ=maillage,
+           MAILLAGE_N     = SIMP(statut='o',typ=(CO,maillage),
                            fr="Maillage avant adaptation",
                            ang="Mesh before adaptation" ),
            MAILLAGE_NP1   = SIMP(statut='o',typ=(CO,maillage),
                            fr="Maillage apres adaptation",
                            ang="Mesh after adaptation" ),
 #
-# 5.3. Pour de l'adaptation libre, il faut l'indicateur d'erreur
+# 4.3. POUR DE L'ADAPTATION LIBRE, IL FAUT L'INDICATEUR D'ERREUR
 #
 #
            b_indicateur_d_erreur   =BLOC( condition = " LIBRE != None " ,
                            fr="Indicateur d'erreur",
                            ang="Error indicator",
 #
-# 5.3.1. Le nom du concept resultat
+# 4.3.1. LE NOM DU CONCEPT RESULTAT
 #
                            RESULTAT_N     = SIMP(statut='o',typ=(evol_elas,evol_noli,evol_ther) ,
                            fr="Resultat contenant l'indicateur d'erreur",
                            ang="Result with error indicator" ),
 #
-# 5.3.2. Le champ d'indicateur d'erreur
+# 4.3.2. LE CHAMP D'INDICATEUR D'ERREUR
 #
                            INDICATEUR     = SIMP(statut='o',typ='TXM',     
                            fr="Champ de l'indicateur d'erreur",
                            ang="Error indicator field" ),
 #
-# 5.3.3. La composante retenue
+# 4.3.3. LA COMPOSANTE RETENUE
 #
                            NOM_CMP_INDICA = SIMP(statut='o',typ='TXM',
                            fr="Composante retenue",
                            ang="Selected component" ),
 #
-# 5.3.4. Le paramètre temporel pour l'indicateur
-#
-                           regles=(EXCLUS('NUME_ORDRE','INST'),),
-#
-# 5.3.4.1. Soit le numero d'ordre
+# 4.3.4. LE NUMERO D'ORDRE
 #
-                           NUME_ORDRE     = SIMP(statut='f',typ='I',
+                           NUME_ORDRE     = SIMP(statut='f',typ='I' ,
                            fr="Numero d ordre",
                            ang="Rank" ),  
-#
-# 5.3.4.2. Soit l'instant
-# 5.3.4.2.1. Sa valeur
-#
-                           INST           = SIMP(statut='f',typ='R',
-                           fr="Instant associé",
-                           ang="Instant" ),
-#
-# 5.3.4.2.2. La précision du choix de l'instant
-#
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),),
-#
                            ) ,
 #
-# 5.4. Les criteres pour de l'adaptation libre :
-#        absolu, relatif, en proportion d'entite
-# 5.4.1. Pour le raffinement :
+# 4.4. LES CRITERES POUR DE L'ADAPTATION LIBRE :
+#        ABSOLU, RELATIF, EN PROPORTION D'ENTITE
+# 4.4.1. POUR LE RAFFINEMENT :
 #
            b_critere_de_raffinement =BLOC( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) " ,
                            fr="Critère de raffinement.",
@@ -13172,7 +12423,7 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                                                    ang="Percentage of elements" ),  
                            ) ,
 #
-# 5.4.2. Pour le deraffinement :
+# 4.4.2. POUR LE DERAFFINEMENT :
 #
            b_critere_de_deraffinement =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) " ,
                            fr="Critère de déraffinement.",
@@ -13189,158 +12440,97 @@ MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_ada
                                                  ang="Percentage of elements" ),  
                            ) ,
 #
-# 5.5. Les niveaux extremes pour le maillage adapte
-# 5.5.1. Pour le raffinement :
+# 4.5. LES NIVEAUX EXTREMES POUR LE MAILLAGE ADAPTE
+# 4.5.1. POUR LE RAFFINEMENT :
 #
            b_niveau_maximum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'RAFFINEMENT' ) or \
                                                   ( UNIFORME == 'RAFFINEMENT' ) " ,
-                           fr="Niveau maximum de profondeur de raffinement",
-                           ang="Maximum level for refinement",
-                           NIVE_MAX       = SIMP(statut='f',typ='I' ),
+                             fr="Niveau maximum de profondeur de raffinement",
+                             ang="Maximum level for refinement",
+                             NIVE_MAX       = SIMP(statut='f',typ='I' ),  
                            ) ,
 #
-# 5.5.2. Pour le deraffinement :
+# 4.5.2. POUR LE DERAFFINEMENT :
 #
            b_niveau_minimum =BLOC ( condition = " ( LIBRE == 'RAFF_DERA' ) or ( LIBRE == 'DERAFFINEMENT' ) or \
                                                   ( UNIFORME == 'DERAFFINEMENT' ) " ,
-                           fr="Niveau minimum de profondeur de déraffinement",
-                           ang="Minimum level for unrefinement",
-                           NIVE_MIN       = SIMP(statut='f',typ='I' ),
+                             fr="Niveau minimum de profondeur de déraffinement",
+                             ang="Minimum level for unrefinement",
+                             NIVE_MIN       = SIMP(statut='f',typ='I' ),
                            ) ,
-#
          ),
 #
-# 6. Suivi d'une frontiere
-#
-         MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage,
-                           fr="Maillage de la frontiere à suivre",
-                           ang="Boundary mesh" ),
+# 5. LA MISE A JOUR DE CHAMPS.
+#    PAR DEFAUT, RIEN NE SE FAIT
 #
-         b_frontiere   =BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
-                           fr="Groupes définissant la frontière",
-                           ang="Groups which define the boundary",
-                           GROUP_MA       = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
-                           ) ,
-#
-# 7. Mise à jour de champs sur le nouveau maillage
-#
-         MAJ_CHAM        =FACT(statut='f',max='**',
+         MAJ_CHAM        =FACT(statut='f',min=01,max='**',
                            fr="Mise à jour de champs sur le nouveau maillage.",
                            ang="Updating of fields over the new mesh.",
 #
-# 7.1. Le nom du champ qui contiendra le resultat de la mise a jour
-#
-           CHAM_MAJ       = SIMP(statut='o',typ=(CO,cham_gd),
-                           fr="Nom du champ qui contiendra le champ mis à jour",
-                           ang="Name of the field for the updated field"),
-#
-# 7.2. Le type du champ qui contiendra le resultat de la mise a jour
-#      Remarque : la liste qui suit doit etre conforme à son homologue de LIRE_CHAMP
-#
-           TYPE_CHAM      = SIMP(statut='o',typ='TXM',
-                                 into=("NOEU_DBEL_R",  "ELEM_DBEL_R",  "ELNO_DBEL_R",  "ELGA_DBEL_R",
-                                       "NOEU_DEPL_C",  "ELEM_DEPL_C",  "ELNO_DEPL_C",  "ELGA_DEPL_C",
-                                       "NOEU_DEPL_F",  "ELEM_DEPL_F",  "ELNO_DEPL_F",  "ELGA_DEPL_F",
-                                       "NOEU_DEPL_R",  "ELEM_DEPL_R",  "ELNO_DEPL_R",  "ELGA_DEPL_R",
-                                       "NOEU_DURT_R",  "ELEM_DURT_R",  "ELNO_DURT_R",  "ELGA_DURT_R",
-                                       "NOEU_ENER_R",  "ELEM_ENER_R",  "ELNO_ENER_R",  "ELGA_ENER_R",
-                                       "NOEU_EPSI_R",  "ELEM_EPSI_R",  "ELNO_EPSI_R",  "ELGA_EPSI_R",
-                                       "NOEU_ERREUR",  "ELEM_ERREUR",  "ELNO_ERREUR",  "ELGA_ERREUR",
-                                       "NOEU_FLUX_R",  "ELEM_FLUX_R",  "ELNO_FLUX_R",  "ELGA_FLUX_R",
-                                       "NOEU_GEOM_R",  "ELEM_GEOM_R",  "ELNO_GEOM_R",  "ELGA_GEOM_R",
-                                       "NOEU_G_DEPL_R","ELEM_G_DEPL_R","ELNO_G_DEPL_R","ELGA_G_DEPL_R",
-                                       "NOEU_HYDR_R",  "ELEM_HYDR_R",  "ELNO_HYDR_R",  "ELGA_HYDR_R",
-                                       "NOEU_INST_R",  "ELEM_INST_R",  "ELNO_INST_R",  "ELGA_INST_R",
-                                       "NOEU_INTE_R",  "ELEM_INTE_R",  "ELNO_INTE_R",  "ELGA_INTE_R",
-                                       "NOEU_META_R",  "ELEM_META_R",  "ELNO_META_R",  "ELGA_META_R",
-                                       "NOEU_NEUT_F",  "ELEM_NEUT_F",  "ELNO_NEUT_F",  "ELGA_NEUT_F",
-                                       "NOEU_NEUT_R",  "ELEM_NEUT_R",  "ELNO_NEUT_R",  "ELGA_NEUT_R",
-                                       "NOEU_PRES_R",  "ELEM_PRES_R",  "ELNO_PRES_R",  "ELGA_PRES_R",
-                                       "NOEU_SIEF_R",  "ELEM_SIEF_R",  "ELNO_SIEF_R",  "ELGA_SIEF_R",
-                                       "NOEU_SOUR_R",  "ELEM_SOUR_R",  "ELNO_SOUR_R",  "ELGA_SOUR_R",
-                                       "NOEU_TEMP_F",  "ELEM_TEMP_F",  "ELNO_TEMP_F",  "ELGA_TEMP_F",
-                                       "NOEU_TEMP_R",  "ELEM_TEMP_R",  "ELNO_TEMP_R",  "ELGA_TEMP_R",
-                                       "NOEU_VAR2_R",  "ELEM_VARI_R",  "ELNO_VARI_R",  "ELGA_VARI_R",
-                                       "NOEU_VNOR_C",  "ELEM_VNOR_C",  "ELNO_VNOR_C",  "ELGA_VNOR_C",
-                                       "NOEU_IRRA_R",  "ELEM_IRRA_R",  "ELNO_IRRA_R",  "ELGA_IRRA_R",),
-                           fr="Type du champ qui contiendra le champ mis à jour",
-                           ang="Type of the field for the updated field" ),
-#
-# 7.3. Le nom du resultat du champ a interpoler
+# 5.1. LE NOM DU RESULTAT DU CHAMP A INTERPOLER
 #
            RESULTAT       = SIMP(statut='o',
                                  typ=(evol_elas,evol_noli,evol_ther),
                            fr="Resultat contenant le champ à mettre à jour",
                            ang="Result with field to be updated" ),
 #
-# 7.4. Le nom du champ a interpoler
+# 5.2. LE NOM DU CHAMP A INTERPOLER
 #
            NOM_CHAM       = SIMP(statut='o',typ='TXM',
                            fr="Nom du champ à mettre à jour",
-                           ang="Name of the field to be updated" ),
+                           ang="Name of the field to be updated" ),  
 #
-# 7.5. Le paramètre temporel pour le champ a interpoler
-#
-                           regles=(EXCLUS('NUME_ORDRE','INST'),),
-#
-# 7.5.1. Soit le numero d'ordre
+# 5.3. LE NUMERO D'ORDRE POUR LE CHAMP A INTERPOLER
 #
            NUME_ORDRE     = SIMP(statut='f',typ='I',
                            fr="Numero d ordre du champ à mettre à jour",
-                           ang="Rank of the field to be updated" ),
+                           ang="Rank of the field to be updated" ),  
 #
-# 7.5.2. Soit l'instant
-# 7.5.2.1. Sa valeur
+# 5.4. LE NOM DU CHAMP QUI CONTIENDRA LE RESULTAT DE LA MISE A JOUR
 #
-           INST           = SIMP(statut='f',typ='R',
-                           fr="Instant associé",
-                           ang="Instant" ),
+           CHAM_MAJ       = SIMP(statut='o',typ=(CO,cham_gd),
+                           fr="Nom du champ qui contiendra le champ mis à jour",
+                           ang="Name of the field for the updated field"),
 #
-# 7.5.2.2. La précision du choix de l'instant
+# 5.5. LE TYPE DU CHAMP QUI CONTIENDRA LE RESULTAT DE LA MISE A JOUR
 #
-                           b_precision     =BLOC(condition="(INST != None)",
-                             PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3,
-                             fr="Précision sur le choix de l'instant associé",
-                             ang="Accuracy over instant choice" ),
-                             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU"),
-                             fr="Critère de précision sur le choix de l'instant associé",
-                             ang="Accuracy criterium over instant choice" ),),
+           TYPE_CHAM      = SIMP(statut='o',typ='TXM',     
+                                 into=("NOEU_TEMP_R","NOEU_DEPL_R"),
+                           fr="Type du champ qui contiendra le champ mis à jour",
+                           ang="Type of the field for the updated field" ),
          ),
 #
-# 8. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
-# 8.1. Nombre de noeuds et éléments
+# 6. INFORMATION SUR LE MAILLAGE : par defaut, on ne fait que les nombres
+#    A. NOMBRE DE NOEUDS ET ELEMENTS DU MAILLAGE
+#    B. QUALITE DES ELEMENTS DU MAILLAGE
+#    C. CONTROLE DE LA NON INTERPENETRATION DES ELEMENTS DU MAILLAGE
+#    D. CONNEXITE DU MAILLAGE
+#    E. TAILLE DES DIFFERENTS SOUS-DOMAINES
 #
          NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
                           fr="Nombre de noeuds et éléments du maillage",
-                          ang="Number of nodes and éléments in the mesh" ),
-#
-# 8.2. Determination de la qualité des éléments du maillage
+                          ang="Number of nodes and elements in the mesh" ),
 #
          QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Qualité du maillage",
                           ang="Mesh quality" ),
 #
-# 8.3. Connexite du maillage
+         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Controle de la non interpénétration des éléments.",
+                          ang="Overlapping checking." ),
 #
          CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Connexité du maillage.",
                           ang="Mesh connexity." ),
-#
-# 8.4. Taille des sous-domaines du maillage
 #
          TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Tailles des sous-domaines du maillage.",
                           ang="Sizes of mesh sub-domains." ),
 #
-# 8.5. Controle de la non-interpenetration des éléments
-#
-         INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
-                          fr="Controle de la non interpénétration des éléments.",
-                          ang="Overlapping checking." ),
+         MENAGE         = SIMP(statut='f',typ='TXM',into=("MAILLAGE","SOLUTION","TOUT") ),
 #
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13381,7 +12571,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
                                      "SOUS_EPAIS_COUDE"
                                      ) ),
 
-         CL_BOL_P2_GV    =FACT(statut='f',
+         CL_BOL_P2_GV    =FACT(statut='f',min=1,max=1,
            ANGLE           =SIMP(statut='o',typ='R' ),
            AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
          ),
@@ -13394,7 +12584,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
          CHARGE          =SIMP(statut='f',typ=(CO,char_meca)),
          RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
 
-         AFFE_MATERIAU   =FACT(statut='o',max=3,
+         AFFE_MATERIAU   =FACT(statut='o',min=1,max=3,
            regles=(UN_PARMI('TOUT','GROUP_MA'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            GROUP_MA        =SIMP(statut='f',typ='TXM',into=("COUDE","BOL") ),
@@ -13402,19 +12592,19 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          ),
 
-         PRES_REP        =FACT(statut='f',
+         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,formule) ),
          ),
 
-         ECHANGE         =FACT(statut='f',
+         ECHANGE         =FACT(statut='f',min=1,max=1,
            COEF_H          =SIMP(statut='f',typ=(fonction,formule) ),
            TEMP_EXT        =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         TORS_P1         =FACT(statut='f',max=6,
+         TORS_P1         =FACT(statut='f',min=1,max=6,
            regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
            FX              =SIMP(statut='f',typ='R' ),
            FY              =SIMP(statut='f',typ='R' ),
@@ -13425,18 +12615,18 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule) ),
          ),
 
-         COMP_INCR       =FACT(statut='f',
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
            RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
            VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
          ),
 
-         COMP_ELAS       =FACT(statut='f',
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
            RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
            ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
            ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
          ),
 
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -13459,7 +12649,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 
-         CONVERGENCE     =FACT(statut='d',
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
            RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
            RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
            ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
@@ -13472,7 +12662,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
          ),
 
-         NEWTON          =FACT(statut='d',
+         NEWTON          =FACT(statut='d',min=1,max=1,
            REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
            PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
            MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
@@ -13480,12 +12670,12 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
          ),
 
-         RECH_LINEAIRE   =FACT(statut='f',
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
          ),
 
-         INCREMENT       =FACT(statut='o',
+         INCREMENT       =FACT(statut='o',min=1,max=1,
            regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
                    EXCLUS('NUME_INST_FIN','INST_FIN'),),
            LIST_INST       =SIMP(statut='o',typ=listr8),
@@ -13501,17 +12691,17 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
          ),
 
-         THETA_3D        =FACT(statut='f',max='**',
+         THETA_3D        =FACT(statut='f',min=1,max='**',
            R_INF           =SIMP(statut='o',typ='R' ),
            R_SUP           =SIMP(statut='o',typ='R' ),
          ),
 
-         IMPR_TABLE      =FACT(statut='f',
+         IMPR_TABLE      =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
             PRESENT_PRESENT('TOUT_PARA','ANGLE',    ),
             PRESENT_PRESENT('TOUT_PARA','R_CINTR',  ),
                    UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
-           NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=4,
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=4,
                                  into=("TRESCA_MEMBRANE",
                                        "TRESCA_MFLE",
                                        "TRESCA",
@@ -13527,7 +12717,7 @@ MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op= -20,sd_prod=macr_ascouf_calc_p
            TRANSFORMEE     =SIMP(statut='f',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
          ),
 
-         IMPRESSION      =FACT(statut='f',
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
                                  into=("RESULTAT","ASTER","IDEAS","CASTEM") ),
                                  
@@ -13545,8 +12735,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13571,7 +12760,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
 
          regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
 
-         EXEC_MAILLAGE   =FACT(statut='o',
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
            LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
            UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
            UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
@@ -13580,7 +12769,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
 
          TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8") ),
 
-         COUDE           =FACT(statut='o',
+         COUDE           =FACT(statut='o',min=1,max=1,
            ANGLE           =SIMP(statut='o',typ='R' ),  
            R_CINTR         =SIMP(statut='o',typ='R' ),  
            L_TUBE_P1       =SIMP(statut='o',typ='R' ),  
@@ -13617,7 +12806,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
            ),
          ),
 
-         SOUS_EPAIS_COUDE=FACT(statut='f',
+         SOUS_EPAIS_COUDE=FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
                    UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
            TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
@@ -13635,7 +12824,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
            EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          ),
 
-         SOUS_EPAIS_MULTI=FACT(statut='f',max='**',
+         SOUS_EPAIS_MULTI=FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
                    UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
            TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
@@ -13652,7 +12841,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
            EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          ),
 
-         FISS_COUDE      =FACT(statut='f',
+         FISS_COUDE      =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
            AXIS            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),  
            b_axis_non    =BLOC(condition = "AXIS == 'NON' ",
@@ -13677,7 +12866,7 @@ MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op= -19,sd_prod=maillage,
            ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.5 ),  
          ),
 
-         IMPRESSION      =FACT(statut='f',max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",   
                                  into=("ASTER","IDEAS","CASTEM") ),
@@ -13693,8 +12882,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13732,7 +12920,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
                                into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
                                      "FISS_LONG_NONDEB","FISS_AXIS_DEB","FISS_AXIS_NONDEB") ),
 
-         TUBULURE        =FACT(statut='o',
+         TUBULURE        =FACT(statut='o',min=1,max=1,
            TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2") ),
          ),
          MAILLAGE        =SIMP(statut='o',typ=maillage),
@@ -13744,7 +12932,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
          CHARGE          =SIMP(statut='f',typ=(CO,char_meca)),
          RESU_THER       =SIMP(statut='f',typ=(CO,evol_ther)),
 
-         AFFE_MATERIAU   =FACT(statut='o',max=3,
+         AFFE_MATERIAU   =FACT(statut='o',min=1,max=3,
            regles=(UN_PARMI('TOUT','GROUP_MA'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
            GROUP_MA        =SIMP(statut='f',typ='TXM',into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
@@ -13753,11 +12941,11 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            RCCM            =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
          ),
 
-         EQUILIBRE       =FACT(statut='o',
+         EQUILIBRE       =FACT(statut='o',min=1,max=1,
            NOEUD           =SIMP(statut='o',typ=no),
          ),
 
-         PRES_REP        =FACT(statut='o',
+         PRES_REP        =FACT(statut='o',min=1,max=1,
            PRES            =SIMP(statut='o',typ='R'),
            NOEUD           =SIMP(statut='f',typ=no),
            EFFE_FOND       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
@@ -13765,13 +12953,13 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
          ),
 
-         ECHANGE         =FACT(statut='f',
+         ECHANGE         =FACT(statut='f',min=1,max=1,
            COEF_H_TUBU     =SIMP(statut='o',typ=(fonction,formule)),
            COEF_H_CORP     =SIMP(statut='o',typ=(fonction,formule)),
            TEMP_EXT        =SIMP(statut='o',typ=(fonction,formule)),
          ),
 
-         TORS_CORP       =FACT(statut='f',max=6,
+         TORS_CORP       =FACT(statut='f',min=1,max=6,
            regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
            NOEUD           =SIMP(statut='o',typ=no),
            FX              =SIMP(statut='f',typ='R'),
@@ -13783,7 +12971,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
          ),
 
-         TORS_TUBU       =FACT(statut='f',max=6,
+         TORS_TUBU       =FACT(statut='f',min=1,max=6,
            regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
            FX              =SIMP(statut='f',typ='R'),
            FY              =SIMP(statut='f',typ='R'),
@@ -13794,30 +12982,30 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
          ),
 
-         COMP_INCR       =FACT(statut='f',
+         COMP_INCR       =FACT(statut='f',min=1,max=1,
            RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
            VMIS_ISOT_TRAC  =SIMP(statut='c',typ='I',defaut= 2,into=( 2 ,) ),
          ),
 
-         COMP_ELAS       =FACT(statut='f',
+         COMP_ELAS       =FACT(statut='f',min=1,max=1,
            RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
            ELAS            =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
            ELAS_VMIS_TRAC  =SIMP(statut='c',typ='I',defaut= 1,into=( 1 ,) ),
          ),
 
-         THETA_3D        =FACT(statut='f',max='**',
+         THETA_3D        =FACT(statut='f',min=1,max='**',
            R_INF           =SIMP(statut='o',typ='R'),
            R_SUP           =SIMP(statut='o',typ='R'),
          ),
 
          OPTION          =SIMP(statut='f',typ='TXM',into=("CALC_G_MAX","CALC_G_MAX_LOCAL") ),
-         BORNES          =FACT(statut='f',max='**',
+         BORNES          =FACT(statut='f',min=1,max='**',
            NUME_ORDRE      =SIMP(statut='o',typ='I'),
            VALE_MIN        =SIMP(statut='o',typ='R'),
            VALE_MAX        =SIMP(statut='o',typ='R'),
          ),
 
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -13840,7 +13028,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
 
-         CONVERGENCE     =FACT(statut='d',
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
            RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
            RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
            ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
@@ -13852,19 +13040,19 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
          ),
 
-         NEWTON          =FACT(statut='d',
+         NEWTON          =FACT(statut='d',min=1,max=1,
            REAC_INCR       =SIMP(statut='f',typ='I',defaut=1),
            PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL","DEPL_CALCULE")),
            MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE")),
            REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0),
          ),
 
-         RECH_LINEAIRE   =FACT(statut='d',
+         RECH_LINEAIRE   =FACT(statut='d',min=1,max=1,
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-3),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut=3),
          ),
 
-         INCREMENT       =FACT(statut='o',
+         INCREMENT       =FACT(statut='o',min=1,max=1,
            regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
                    EXCLUS('NUME_INST_FIN','INST_FIN'),),
            LIST_INST       =SIMP(statut='o',typ=listr8),
@@ -13882,7 +13070,7 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
 
          PAS_AZIMUT      =SIMP(statut='f',typ='I',defaut=1),
 
-         IMPRESSION      =FACT(statut='f',
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
                                  into=("RESULTAT","ASTER","CASTEM","IDEAS")),
                                  
@@ -13897,12 +13085,12 @@ MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=-17,sd_prod=macr_aspic_calc_prod,
            b_extrac        =BLOC(condition="((FORMAT=='IDEAS')or(FORMAT=='CASTEM'))",
                                  fr="extraction d un champ de grandeur",
              regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST'),),
-             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',max=3,
                                    into=("DEPL","EQUI_ELNO_SIGM","TEMP")),
              
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+             INST            =SIMP(statut='f',typ='R',max='**'),
            ),      
          ),
 
@@ -13911,8 +13099,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -13935,7 +13122,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='
                     fr=" ",docu="U4.pc.10-b",
             UIinfo={"groupes":("Outils métier",)},
 
-         EXEC_MAILLAGE   =FACT(statut='o',
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
            LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
            UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
            UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
@@ -13946,7 +13133,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='
 
          RAFF_MAIL       =SIMP(statut='f',typ='TXM',defaut="GROS",into=("GROS","FIN")),
 
-         TUBULURE        =FACT(statut='o',
+         TUBULURE        =FACT(statut='o',min=1,max=1,
            E_BASE          =SIMP(statut='o',typ='R'),  
            DEXT_BASE       =SIMP(statut='o',typ='R'),  
            L_BASE          =SIMP(statut='o',typ='R'),  
@@ -13958,19 +13145,19 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='
            L_PENETR        =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
          ),
 
-         SOUDURE         =FACT(statut='o',
+         SOUDURE         =FACT(statut='o',min=1,max=1,
            H_SOUD          =SIMP(statut='o',typ='R'),  
            ANGL_SOUD       =SIMP(statut='o',typ='R'),  
            JEU_SOUD        =SIMP(statut='o',typ='R'),  
          ),
 
-         CORPS           =FACT(statut='o',
+         CORPS           =FACT(statut='o',min=1,max=1,
            E_CORP          =SIMP(statut='o',typ='R'),  
            DEXT_CORP       =SIMP(statut='o',typ='R'),  
            X_MAX           =SIMP(statut='o',typ='R'),  
          ),
 
-         FISS_SOUDURE    =FACT(statut='f',
+         FISS_SOUDURE    =FACT(statut='f',min=1,max=1,
            TYPE            =SIMP(statut='o',typ='TXM',into=("LONGUE","COURTE")),
            AXIS            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
            PROFONDEUR      =SIMP(statut='o',typ='R'),  
@@ -13989,7 +13176,7 @@ MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= -16,sd_prod=maillage,reentrant='
            NB_COURONNE     =SIMP(statut='f',typ='I'),  
          ),
 
-         IMPRESSION      =FACT(statut='f',max='**',
+         IMPRESSION      =FACT(statut='f',min=1,max='**',
            regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS","CASTEM")),
 
@@ -14006,258 +13193,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 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-
-from Macro.macr_cabri_calc_ops import macr_cabri_calc_ops
-   
-def macr_cabri_calc_prod(self,MODELE_THER,MODELE_MECA,CHAM_MATER,
-                         CHAR_THER,CHAR_MECA,RESU_THER,**args):
-  if MODELE_THER != None:
-   self.type_sdprod(MODELE_THER,modele)   
-  if MODELE_MECA != None:
-   self.type_sdprod(MODELE_MECA,modele)  
-  if RESU_THER != None:
-   self.type_sdprod(RESU_THER,evol_ther)     
-  if CHAM_MATER != None:
-   self.type_sdprod(CHAM_MATER,cham_mater)     
-  if CHAR_THER != None: 
-    for m in CHAR_THER:
-      self.type_sdprod(m['CHARGE'],char_ther)
-  if CHAR_MECA != None: 
-    for m in CHAR_MECA:
-      self.type_sdprod(m['CHARGE'],char_meca)
-  return evol_noli
-
-
-MACR_CABRI_CALC=MACRO(nom="MACR_CABRI_CALC",
-                      op=macr_cabri_calc_ops,
-                      sd_prod=macr_cabri_calc_prod,
-                      fr="Calcul d'une jonction boulonnée de tuyauterie",
-                      reentrant='n',
-                      UIinfo={"groupes":("Outils métier",)},
-                      MAILLAGE   = SIMP(statut='o',typ=maillage,),
-                      AFFE_MATERIAU = FACT(statut='o',max='**',
-                        regles=(UN_PARMI('TOUT','GROUP_MA',),),
-                        TOUT     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                        GROUP_MA = SIMP(statut='f',typ='TXM',into=(
-                                                                  "BRIDE",
-                                                                  "GOUJON",
-                                                                  "ROND",
-                                                                  "ECROU",
-                                                                  "JOINT",) ),
-                        MATER    = SIMP(statut='o',typ=mater),
-                        TEMP_REF = SIMP(statut='d',typ='R',defaut= 25. ),
-                      ),                      
-                      CHAM_MATER = SIMP(statut = 'f',typ=(cham_mater,CO),),
-                      MODELE_THER= SIMP(statut = 'f',typ=(modele,CO),),
-                      
-                      DEFI_CHAR_THER = FACT(statut ='d',
-                        TEMP_INIT     = SIMP(statut='d',typ='R',defaut= 25.,),
-                        COEF_H_FLUI   = SIMP(statut='f',typ=fonction,),
-                        TEMP_EXT_FLUI = SIMP(statut='f',typ=fonction,),
-                        COEF_H_AIR    = SIMP(statut='f',typ=fonction,),
-                        TEMP_EXT_AIR  = SIMP(statut='f',typ=fonction,),
-                        LIST_INST     = SIMP(statut='f',typ=listr8),
-                      ),                      
-                      
-                      CHAR_THER  = FACT(statut = 'f',max=4,
-                        CHARGE    = SIMP(statut='o',typ=(char_ther,CO)),
-                        TYPE      = SIMP(statut='o',typ='TXM',
-                                 into=("BRIDE_FLUIDE","BRIDE_AIR","ECROU_GOUJON",
-                                       "BRIDE_JOINT"),)
-                                       ),
-
-                      RESU_THER  = SIMP(statut = 'f',typ=(evol_ther,CO),),                                       
-
-                                       
-                      MODELE_MECA= SIMP(statut = 'f',typ=(modele,CO),),
-
-                      DEFI_CHAR_MECA   = FACT(statut='o',
-                        PRETENS    = SIMP(statut='f',typ=fonction,),
-                        PRES_REP   = SIMP(statut='f',typ=fonction,),
-                        EFFE_FOND  = SIMP(statut='f',typ=fonction,),
-                      ),                                                             
-
-                      CHAR_MECA  = FACT(statut = 'f',max=11,
-                        CHARGE    = SIMP(statut='o',typ=(char_meca,CO)),
-                        TYPE      = SIMP(statut='o',typ='TXM',
-                                 into=("BLOC_BAS_GOUJ","BLOC_BAS_JOINT",
-                                       "BLOC_LAT_ALES","BLOC_LAT_NALES",
-                                       "PLAN_TUBE",
-                                       "PRES_FLU","EFFET_FOND",
-                                       "CONT_JOINT",
-                                       "DEFO_THER",
-                                       "SERR_ECROU_1","SERR_ECROU_2",),)
-                                       ),
-                     
-                      RELATION = SIMP(statut='f',typ='TXM',
-                                       into=('VMIS_ISOT_TRAC','ELAS','ELAS_VMIS_TRAC',),),
-                        
-                      SOLVEUR   = FACT(statut='d',
-                        METHODE  = SIMP(statut='d',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT",) ),
-                        b_mult_front = BLOC(condition = "METHODE == 'MULT_FRONT' ",
-                           fr="Paramètres de la méthode multi frontale",
-                           RENUM           = SIMP(statut='d',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
-                           NPREC           = SIMP(statut='d',typ='I',defaut=8),
-                           STOP_SINGULIER  = SIMP(statut='d',typ='TXM',defaut="OUI",into=("OUI","NON") ),
-                           ),                 
-                      ),                                             
-                      INCREMENT = FACT(statut='f',
-                        regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
-                                EXCLUS('NUME_INST_FIN','INST_FIN'),),
-                        LIST_INST       =SIMP(statut='f',typ=listr8),
-                        EVOLUTION       =SIMP(statut='f',typ='TXM',defaut="CHRONOLOGIQUE",
-                                 into=("CHRONOLOGIQUE",) ),                                 
-                        NUME_INST_INIT  =SIMP(statut='f',typ='I'),
-                        INST_INIT       =SIMP(statut='f',typ='R'),
-                        NUME_INST_FIN   =SIMP(statut='f',typ='I'),
-                        INST_FIN        =SIMP(statut='f',typ='R'),
-                        PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
-                        SUBD_PAS        =SIMP(statut='f',typ='I',defaut=1),
-                        SUBD_PAS_MINI   =SIMP(statut='f',typ='R'),
-                        COEF_SUBD_PAS_1 =SIMP(statut='f',typ='R',defaut= 1.0E+0),
-                        OPTI_LIST_INST  =SIMP(statut='f',typ='TXM',into=("INCR_MAXI",),),
-                        NOM_CHAM        =SIMP(statut='f',typ='TXM',),
-                        NOM_CMP         =SIMP(statut='f',typ='TXM',),
-                        VALE            =SIMP(statut='f',typ='R'),
-                      ),
-                      NEWTON          =FACT(statut='d',
-                        REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
-                        PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE","EXTRAPOL") ),
-                        MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
-                        PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
-                        REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
-                        EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
-                      ),
-                      CONVERGENCE     =FACT(statut='d',
-                        regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
-                        SIGM_REFE       =SIMP(statut='f',typ='R'),
-                        EPSI_REFE       =SIMP(statut='f',typ='R'),
-                        FLUX_THER_REFE  =SIMP(statut='f',typ='R'),        
-                        RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
-                        RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
-                        RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
-                        ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
-                        ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
-                        TYPE_MATR_COMP  =SIMP(statut='f',typ='TXM',defaut="TANG_VIT",into=("TANG_VIT",)),
-                        RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
-                                 into=("IMPLICITE",)),
-                      ),
-                     );
-
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-
-from Macro.macr_cabri_mail_ops import macr_cabri_mail_ops
-
-MACR_CABRI_MAIL=MACRO(nom="MACR_CABRI_MAIL",
-                      op=macr_cabri_mail_ops,
-                      sd_prod=maillage,
-                      fr="maillage d'une jonction boulonnée de tuyauterie",
-                      reentrant='n',
-                      UIinfo={"groupes":("Outils métier",)},
-                      EXEC_MAILLAGE = FACT(statut='o',
-                        LOGICIEL      = SIMP(statut = 'o',typ='TXM',into=("GIBI2000",),),
-                        UNITE_DATG    = SIMP(statut = 'f',typ='I',defaut=70,),
-                        UNITE_MGIB    = SIMP(statut = 'f',typ='I',defaut=19,),
-                        NIVE_GIBI     = SIMP(statut = 'f',typ='I',defaut=10,
-                                          into = (3,4,5,6,7,8,9,10,11),
-                                            ),
-                                          ),
-                      RAFF_MAILLAGE   = FACT(statut = 'd',
-                        NB_RADIAL    = SIMP(statut = 'f',typ='I',defaut=2,),
-                        NB_CIRCONF   = SIMP(statut = 'f',typ='I',defaut=3,),
-                        NB_VERTICAL  = SIMP(statut = 'f',typ='I',defaut=6,),
-                        NB_ALESAGE   = SIMP(statut = 'f',typ='I',defaut=5,),
-                                          ),
-                      VERI_MAIL     = FACT(statut='d',
-                        VERIF         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),  
-                        APLAT         = SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
-                                          ),                                          
-                      GEOM_BRID     = FACT(statut = 'o',
-                        NORME         = SIMP(statut = 'o',typ='TXM',into=("OUI","NON"),),
-                        b_bride_iso   = BLOC(condition = "NORME == 'OUI'",
-                          TYPE           = SIMP(statut='o',typ='TXM',
-                                                into=('A','AA','B','B1','C','D','D1','E','F',
-                                                      'FF','G','GG','H','H1','I','J','J1',
-                                                      'K','L','L1','M','N','O','P','S','T','W'), 
-                                               ),
-                                            ),
-                        b_bride_niso  = BLOC(condition = "NORME == 'NON'",
-                          TUBU_D_EXT     = SIMP(statut='o',typ='R',),
-                          TUBU_H         = SIMP(statut='o',typ='R',),
-                          BRID_D_EXT     = SIMP(statut='o',typ='R',),
-                          BRID_D_INT     = SIMP(statut='o',typ='R',),
-                          BRID_H         = SIMP(statut='o',typ='R',),
-                          BRID_D_CONGE   = SIMP(statut='o',typ='R',),
-                          BRID_R_CONGE   = SIMP(statut='o',typ='R',),
-                          BRID_D_EPAUL   = SIMP(statut='o',typ='R',),
-                          BRID_H_EPAUL   = SIMP(statut='o',typ='R',),
-                          BRID_D_ALESAG  = SIMP(statut='o',typ='R',),
-                          BRID_P_ALESAG  = SIMP(statut='o',typ='R',),
-                          BRID_H_ALESAG  = SIMP(statut='o',typ='R',),
-                          GOUJ_N_GOUJON  = SIMP(statut='o',typ='I',),
-                          GOUJ_D_GOUJON  = SIMP(statut='o',typ='R',),
-                          GOUJ_E_FILET   = SIMP(statut='o',typ='R',),
-                          GOUJ_D_RONDEL  = SIMP(statut='o',typ='R',),
-                          GOUJ_E_RONDEL  = SIMP(statut='o',typ='R',),
-                          GOUJ_D_ECROU   = SIMP(statut='o',typ='R',),
-                          GOUJ_E_ECROU   = SIMP(statut='o',typ='R',),
-                          ETAN_E_JOINT   = SIMP(statut='o',typ='R',),
-                                            ),
-                                         ),
-                      IMPRESSION    = FACT(statut='d',
-                        FICHIER        = SIMP(statut='f',typ='TX'),
-                        UNITE          = SIMP(statut='f',typ='I'),
-                        FORMAT         = SIMP(statut='f',typ='TXM',defaut="ASTER",    
-                                              into=("ASTER","CASTEM","IDEAS"),
-                                             ),
-                        b_impr_castem = BLOC(condition = "FORMAT == 'CASTEM'",
-                          NIVE_GIBI      = SIMP(statut='f',typ='I',defaut=10,into=(3,10),),
-                                            ),
-                        b_impr_ideas  = BLOC(condition = "FORMAT == 'IDEAS'",
-                          VERSION        = SIMP(statut='f',typ='I',defaut=5,into=(4,5),),
-                                            ),
-                                          ),
-                     );
-
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14287,17 +13223,17 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
                   EXCLUS('SYME_Y','GROUP_MA_BORD'),),
                  
           UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 20 ),  
-          ORIG_INER       =SIMP(statut='f',typ='R',max=3,defaut=(0.E+0,0.E+0),
+          ORIG_INER       =SIMP(statut='f',typ='R',max='**',defaut=(0.E+0,0.E+0),
                                 fr="Point par rapport auquel sont calculées les inerties"),  
           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          
           SYME_X          =SIMP(statut='f',typ='TXM',into=("OUI",),fr="demi maillage par rapport a x=0"),
           SYME_Y          =SIMP(statut='f',typ='TXM',into=("OUI",),fr="demi maillage par rapport a y=0"),
          
-          GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+          GROUP_MA        =SIMP(statut='f',typ=grma,max='**',
           fr="Calcul des caractéristiques équivalentes a plusieurs sections disjointes"),
           
-          GROUP_MA_BORD   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+          GROUP_MA_BORD   =SIMP(statut='f',typ=grma,max='**',
                                fr="Groupe(s) de mailles linéiques, bord(s) de(s) section(s)"),
          
                b_gma_bord = BLOC( condition = "GROUP_MA_BORD != None",
@@ -14305,7 +13241,7 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
 
                     NOEUD           =SIMP(statut='f',typ=no,max='**',
                     fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
-                    GROUP_MA_INTE   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                    GROUP_MA_INTE   =SIMP(statut='f',typ=grma,max='**',
                     fr="groupes de mailles linéiques bordant des trous dans la section"),
                     ),
                     
@@ -14318,8 +13254,7 @@ MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=ta
                             fr="type de conditions aux limites sur le plancher supérieur" ),
                               ), 
                     )
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14350,8 +13285,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14374,7 +13308,7 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.6
                     fr="Définition d un macro-élément pour l analyse statique par sous structuration",
         regles=(AU_MOINS_UN('DEFINITION','RIGI_MECA','MASS_MECA','CAS_CHARGE'),
                 ENSEMBLE('DEFINITION','EXTERIEUR'),),
-         DEFINITION      =FACT(statut='f',
+         DEFINITION      =FACT(statut='f',min=1,max=1,
            MODELE          =SIMP(statut='o',typ=modele),
            CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
            CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
@@ -14383,25 +13317,24 @@ MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,docu="U4.6
            NMAX_CAS        =SIMP(statut='f',typ='I',defaut=10),
            NMAX_CHAR       =SIMP(statut='f',typ='I',defaut=10),
          ),
-         EXTERIEUR       =FACT(statut='f',
+         EXTERIEUR       =FACT(statut='f',min=1,max=1,
            regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
          ),
-         RIGI_MECA       =FACT(statut='f',
+         RIGI_MECA       =FACT(statut='f',min=1,max=1,
          ),
-         MASS_MECA       =FACT(statut='f',
+         MASS_MECA       =FACT(statut='f',min=1,max=1,
            BIDO1           =SIMP(statut='f',typ='I',defaut=0),
          ),
-         CAS_CHARGE      =FACT(statut='f',max='**',
+         CAS_CHARGE      =FACT(statut='f',min=1,max='**',
            NOM_CAS         =SIMP(statut='o',typ='TXM'),
            SUIV            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+           CHARGE          =SIMP(statut='f',typ=char_meca,max='**'),
            INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14423,7 +13356,7 @@ MACR_GOUJ2E_CALC=MACRO(nom="MACR_GOUJ2E_CALC",op=-23,sd_prod=evol_noli,
                       fr=" ",docu="U4.gj.20-b",reentrant='n',
             UIinfo={"groupes":("Outils métier",)},
          MAILLAGE        =SIMP(statut='o',typ=maillage),
-         DEFI_GOUJ       =FACT(statut='o',
+         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")),
@@ -14434,15 +13367,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',
+         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',
+         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',
+         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)),
@@ -14450,8 +13383,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14472,26 +13404,26 @@ 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-b",reentrant='n',
             UIinfo={"groupes":("Outils métier",)},
-         EXEC_MAILLAGE   =FACT(statut='o',
+         EXEC_MAILLAGE   =FACT(statut='o',min=1,max=1,
            LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
            UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
            UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
            NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10)),
          ),
-         DEFI_GOUJ       =FACT(statut='o',
+         DEFI_GOUJ       =FACT(statut='o',min=1,max=1,
            TYPE            =SIMP(statut='o',typ='TXM',into=("M33","M64","M90","M115","M155","M180","M186")),
            VARIANTE        =SIMP(statut='o',typ='TXM',into=("A","B","C","D","E","F","G","H","I","J","K","L","M",  
                                                             "N","O","P","Q","R","S","T","U","V","W","X","Y","Z")), 
          ),
-         GEOM_GOUJ_BRID  =FACT(statut='o',
+         GEOM_GOUJ_BRID  =FACT(statut='o',min=1,max=1,
            NB_FILET        =SIMP(statut='o',typ='I'),  
            H_CORP_BRID     =SIMP(statut='o',typ='R'),  
            R_EXT_BRID      =SIMP(statut='o',typ='R'),  
            H_HAUT_BRID     =SIMP(statut='f',typ='R',defaut=0.0E+0),  
            H_BAS_BRID      =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
-           FILET_ABST      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+           FILET_ABST      =SIMP(statut='f',typ='I',max='**'),  
          ),
-         IMPRESSION      =FACT(statut='f',
+         IMPRESSION      =FACT(statut='f',min=1,max=1,
            regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
            FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",    
                                  into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED")),
@@ -14502,8 +13434,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14522,11 +13453,7 @@ MACR_GOUJ2E_MAIL=MACRO(nom="MACR_GOUJ2E_MAIL",op= -22,sd_prod=maillage,
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE GNICOLAS G.NICOLAS
-
-from Macro.macr_adap_mail_ops import macr_adap_mail_ops
-
-MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
-                     docu="U7.03.02-b",
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=-24,docu="U7.03.02-b",
                      fr="Donner des informations sur un maillage.",
                      ang="To give information about a mesh.",
 #
@@ -14536,8 +13463,8 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
 #
 # 2. Version de HOMARD
 #
-         VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V6_2",
-                               into=("V6_2", "V6_N", "V6_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"),
 #
@@ -14548,68 +13475,45 @@ MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
                            fr="Langue des messages issus de HOMARD.",
                            ang="Language for HOMARD messages." ),
 #
-# 4. Gestion des éléments autres que des simplexes
-#    Remarque : pour le moment, on bride le choix 2
-#       0 : autres elements refusés (defaut)
-#       1 : analyse exclusivement sur les simplexes, mais autres éléments acceptés
-#       2 : tous
-#
-         NON_SIMPLEXE   = SIMP(statut='f',typ='I',defaut=0,into=(0,1),
-                          fr="Acceptation d'éléments quad, hexa et penta",
-                          ang="quad, hexa and penta elements allowed" ),
-#
-# 5. Le nom du maillage a analyser
+# 4. Le nom du maillage a analyser
 #
          MAILLAGE       = SIMP(statut='o',typ=maillage,
                            fr="Maillage à analyser.",
                            ang="Mesh to be checked." ),
 #
-# 6. Suivi d'une frontiere
-#
-         MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage,
-                           fr="Maillage de la frontiere à suivre",
-                           ang="Boundary mesh" ),
-#
-         b_frontiere   =BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
-                           fr="Groupes définissant la frontière",
-                           ang="Groups which define the boundary",
-                           GROUP_MA       = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
-                           ) ,
-#
-# 7. Les options ; par defaut, on ne fait que les nombres
-# 7.1. Nombre de noeuds et elements
+# 5. Les options ; par defaut, on ne fait que les nombres
+# 5.1. Nombre de noeuds et elements
 #
          NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
                           fr="Nombre de noeuds et éléments du maillage",
                           ang="Number of nodes and elements in the mesh" ),
 #
-# 7.2. Determination de la qualite des elements du maillage
+# 5.2. Determination de la qualite des elements du maillage
 #
          QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Qualité du maillage",
                           ang="Mesh quality" ),
 #
-# 7.3. Connexite du maillage
+# 5.3. Connexite du maillage
 #
          CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Connexité du maillage.",
                           ang="Mesh connexity." ),
 #
-# 7.4. Taille des sous-domaines du maillage
+# 5.4. Taille des sous-domaines du maillage
 #
          TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Tailles des sous-domaines du maillage.",
                           ang="Sizes of mesh sub-domains." ),
 #
-# 7.5. Controle de la non-interpenetration des elements
+# 5.5. Controle de la non-interpenetration des elements
 #
          INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
                           fr="Controle de la non interpénétration des éléments.",
                           ang="Overlapping checking." ),
 #
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   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
@@ -14650,15 +13554,14 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=macr_
          ),
          MODELE          =SIMP(statut='o',typ=modele ),
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=25),  
-         LIGN_COUPE     =FACT(statut='o',max='**',
+         LIGN_COUPE     =FACT(statut='o',min=1,max='**',
            NB_POINTS       =SIMP(statut='o',typ='I'),
            COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),  
            COOR_EXTR       =SIMP(statut='o',typ='R',min=2,max=3),  
            TABLE           =SIMP(statut='o',typ=(table,CO)), 
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14687,19 +13590,18 @@ MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,docu="U4.73.02-a",
                       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,max='**'),
-         RESU_CALC       =SIMP(statut='o',typ=assd,max='**'),
-         LIST_PARA       =SIMP(statut='o',typ=assd,max='**'),
+         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',
+         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/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14734,18 +13636,18 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
          NUME_DDL        =SIMP(statut='f',typ=(nume_ddl,CO)),
-         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
-         CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
+         CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,max='**'),
          LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
-         CAS_CHARGE      =FACT(statut='o',max='**',
+         CAS_CHARGE      =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
                    UN_PARMI('CHAR_MECA','CHAR_CINE','VECT_ASSE'),),
            NOM_CAS         =SIMP(statut='f',typ='TXM' ),
            MODE_FOURIER    =SIMP(statut='f',typ='I' ),
            TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
-           CHAR_MECA       =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
-           CHAR_CINE       =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
-           OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+           CHAR_MECA       =SIMP(statut='f',typ=char_meca,max='**'),
+           CHAR_CINE       =SIMP(statut='f',typ=char_meca,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',max='**',
                                  into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
                                        "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
                                        "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",
@@ -14761,7 +13663,7 @@ MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro
            SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
            VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r),
          ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
            b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",
                                     fr="Paramètres de la méthode multi frontale",
@@ -14779,8 +13681,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14819,13 +13720,13 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-c",sd_prod=mac
          GROUP_MA_FLUIDE =SIMP(statut='o',typ=grma),
          GROUP_MA_INTERF =SIMP(statut='o',typ=grma),
          MODELISATION    =SIMP(statut='o',typ='TXM',into=("PLAN","AXIS","3D")),
-         FLUIDE          =FACT(statut='o',max='**',
+         FLUIDE          =FACT(statut='o',min=1,max='**',
            RHO             =SIMP(statut='o',typ='R'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
            GROUP_MA        =SIMP(statut='f',typ=grma),
            MAILLE          =SIMP(statut='f',typ=ma),
          ),
-         DDL_IMPO        =FACT(statut='o',max='**',
+         DDL_IMPO        =FACT(statut='o',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO'),
                    UN_PARMI('PRES_FLUIDE','PRES_SORTIE'),),
            NOEUD           =SIMP(statut='f',typ=no),
@@ -14833,7 +13734,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-c",sd_prod=mac
            PRES_FLUIDE     =SIMP(statut='f',typ='R'),
            PRES_SORTIE     =SIMP(statut='f',typ='R'),
          ),
-         ECOULEMENT      =FACT(statut='f',max='**',
+         ECOULEMENT      =FACT(statut='f',min=1,max='**',
            GROUP_MA_1      =SIMP(statut='o',typ=grma),
            GROUP_MA_2      =SIMP(statut='o',typ=grma),
            VNOR_1          =SIMP(statut='o',typ='R'),
@@ -14850,13 +13751,13 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-c",sd_prod=mac
          MATR_AMOR_AJOU  =SIMP(statut='f',typ=(CO,matr_asse)),
          MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
          MODE_STAT       =SIMP(statut='f',typ=(mode_stat_depl,mode_stat_acce,mode_stat_forc,),),
-         FORC_AJOU       =FACT(statut='f',max='**',
+         FORC_AJOU       =FACT(statut='f',min=1,max='**',
            DIRECTION     =SIMP(statut='o',typ='R',max=3),
-           NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD         =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO      =SIMP(statut='f',typ=grno,max='**'),
            VECTEUR       =SIMP(statut='o',typ=(CO,vect_asse_gene)),
          ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -14881,8 +13782,7 @@ MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=-13,docu="U4.66.11-c",sd_prod=mac
          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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14932,15 +13832,15 @@ MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.2
          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),validators=NoRepeat(),max='**'),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**'),
          INST            =SIMP(statut='f',typ='R'),
          NUME_DDL        =SIMP(statut='o',typ=(nume_ddl,CO)),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            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',max='**',
+         MATR_ASSE       =FACT(statut='o',min=1,max='**',
            MATRICE         =SIMP(statut='o',typ=(matr_asse,CO)),
            OPTION          =SIMP(statut='o',typ='TXM',
                                  into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
@@ -14959,8 +13859,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14983,7 +13882,7 @@ from Macro.macro_miss_3d_ops import macro_miss_3d_ops
 
 MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,fr=" ",docu="U7.03.11-b",
             UIinfo={"groupes":("Matrices/vecteurs",)},
-         OPTION          =FACT(statut='o',
+         OPTION          =FACT(statut='o',min=1,max=1,
            regles=(UN_PARMI('TOUT','MODULE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
            MODULE          =SIMP(statut='f',typ='TXM',into=("PRE_MISS","MISS_EVOL","MISS_IMPE")),
@@ -14995,8 +13894,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15050,12 +13948,12 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=macro
          ),
          OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",    
                                into=("MODE_RIGIDE","SANS") ),
-         CALC_FREQ       =FACT(statut='d',min=0,
+         CALC_FREQ       =FACT(statut='d',min=0,max=1,
            regles=(UN_PARMI('FREQ','FREQ_MAX'),
                    PRESENT_PRESENT('FREQ_MIN','FREQ_MAX'),
                    PRESENT_PRESENT('FREQ_MAX','NB_BLOC_FREQ'),
                    EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
-           FREQ            =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max='**',val_min=0.E+0 ),  
+           FREQ            =SIMP(statut='f',typ='R',min=2,max='**',val_min=0.E+0 ),  
            FREQ_MIN        =SIMP(statut='f',typ='R' ),  
            FREQ_MAX        =SIMP(statut='f',typ='R' ),  
            NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),  
@@ -15067,33 +13965,32 @@ MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=macro
            SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
            STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
          ),
-         VERI_MODE       =FACT(statut='d',min=0,
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
            STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6 ),  
            PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),  
            STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          ),
-         NORM_MODE       =FACT(statut='o',max='**',
+         NORM_MODE       =FACT(statut='o',min=1,max='**',
            MASS_INER       =SIMP(statut='o',typ=tabl_mass_iner ),
            NORME           =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",    
                                  into=("MASS_GENE","RIGI_GENE","EUCL",           
                                        "EUCL_TRAN","TRAN","TRAN_ROTA") ),
            INFO            =SIMP(statut='f',typ='I',defaut= 1 ,into=(1,2) ),
          ),
-         FILTRE_MODE     =FACT(statut='f',
+         FILTRE_MODE     =FACT(statut='f',min=1,max=1,
            CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
                                  into=("MASS_EFFE_UN","MASS_GENE") ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
          ),
-         IMPRESSION      =FACT(statut='d',
+         IMPRESSION      =FACT(statut='d',min=1,max=1,
            TOUT_PARA       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            CUMUL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
                                  into=("MASS_EFFE_UN","MASS_GENE",) ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15128,15 +14025,15 @@ MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,docu="U4.63.1
             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,mode_stat,base_modale,mode_gene) ),
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene) ),
          NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
          PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
-         MATR_ASSE_GENE  =FACT(statut='f',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),
          ),
-         VECT_ASSE_GENE  =FACT(statut='f',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),
@@ -15144,8 +14041,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15167,31 +14063,19 @@ MAJ_CATA=PROC(nom="MAJ_CATA",op=20,docu="U4.15.01-e",
             UIinfo={"groupes":("Gestion du travail",)},
               fr="Compilation des catalogues de commandes et d éléments",
 
-         ELEMENT         =FACT(statut='f',),
+         ELEMENT         =FACT(statut='f',min=1,max=1,),
 
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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 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-g",reentrant='f',
+                   fr="Analyse mécanique statique linéaire",docu="U4.51.01-g",reentrant='n',
             UIinfo={"groupes":("Résolution",)},
                    regles=(EXCLUS("INST","LIST_INST"),
                            AU_MOINS_UN('CHAM_MATER','CARA_ELEM',), ),
@@ -15203,15 +14087,14 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
          fr="le CARA_ELEM est nécessaire dès que le modèle contient des éléments de structure : coques, poutres, ...",
          ang="CARA_ELEM is compulsory as soon as the model contains structural elements : plates, beams, ..."),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
          ),
          INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
          LIST_INST       =SIMP(statut='f',typ=listr8),
-         INST_FIN        =SIMP(statut='f',typ='R'),
-         OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
                                into=("SANS","SIGM_ELNO_DEPL","SIPO_ELNO_DEPL","EFGE_ELNO_DEPL",
                                      "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
                                      "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI","EQUI_ELGA_EPSI",
@@ -15223,10 +14106,10 @@ MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
          NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
          ANGLE           =SIMP(statut='f',typ='I',defaut=0),
          PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL") ),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                fr="Liste des paramètres de sensibilité.",
                                ang="List of sensitivity parameters"),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -15249,8 +14132,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15277,7 +14159,7 @@ MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.07-a",
          regles=(AU_MOINS_UN('NOM','NOM_ZERO','NOM_UN'),),
 
          NOM=FACT(statut='f',max='**',
-             regles=(PRESENT_PRESENT('MOT_CLE','VALEUR','MOT_FACT' ),),
+             regles=(PRESENT_PRESENT('MOT_CLE','VALEUR' ),),
 
              NOM_SD=SIMP(statut='o',typ='TXM',
                          fr="Nom de la structure de base",
@@ -15291,10 +14173,6 @@ MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.07-a",
                          fr="Nom de la structure composée",
                          ang="Name of the built structure"),
 
-             MOT_FACT=SIMP(statut='f',typ='TXM',max='**',
-                         fr="Liste des mots clés facteurs concernés par la dérivation",
-                         ang="Factor keyword list involved in derivation"),
-
              MOT_CLE=SIMP(statut='f',typ='TXM',max='**',
                          fr="Liste des mots clés concernés par la dérivation",
                          ang="Keyword list involved in derivation"),
@@ -15309,13 +14187,12 @@ MEMO_NOM_SENSI=PROC(nom="MEMO_NOM_SENSI",op=129,docu="U4.31.07-a",
                        fr="Nom de la fonction nulle",
                        ang="Name of the zero fonction"),
 
-         NOM_UN  =SIMP(statut='f',typ=fonction,
+         NOM_UN=SIMP  (statut='f',typ=fonction,
                        fr="Nom de la fonction unité",
                        ang="Name of the one fonction"),
 
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15340,26 +14217,26 @@ MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
          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',
+         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',
+         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',
+         CALCUL          =FACT(statut='o',min=1,max=1,
            TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NB_DIAM         =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           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',),
+             FREQ            =SIMP(statut='o',typ='R',min=1,max=1),
            ),
            b_bande       =BLOC(condition = "OPTION == 'BANDE'",
-             FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2),
+             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 ),
@@ -15369,8 +14246,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15406,7 +14282,7 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
          TYPE_RESU       =SIMP(statut='f',position='global',typ='TXM',defaut="DYNAMIQUE",   
                                into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
          b_dynam         =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
-           CALC_FREQ       =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
+           CALC_FREQ       =FACT(statut='o',min=1,max=1,fr="Choix des paramètres pour le calcul des valeurs propres",
            
              OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
                                    fr="Choix de l option pour estimer les valeurs propres"  ),
@@ -15425,11 +14301,11 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
            ),
          ),
          b_flamb        =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
-           CALC_FREQ       =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
+           CALC_FREQ       =FACT(statut='o',min=1,max=1,fr="Choix des paramètres pour le calcul des valeurs propres",
            
              OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
                                  fr="Choix de l option pour estimer les valeurs propres"  ),
-             CHAR_CRIT       =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+             CHAR_CRIT       =SIMP(statut='o',typ='R',max='**' ),
              NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
              NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
              PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
@@ -15442,21 +14318,20 @@ MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
              SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
            ),
          ),
-         CALC_MODE       =FACT(statut='d',min=0,fr="Choix des paramètres pour le calcul des vecteurs propres",
+         CALC_MODE       =FACT(statut='d',min=0,max=1,fr="Choix des paramètres pour le calcul des vecteurs propres",
            OPTION          =SIMP(statut='f',typ='TXM',defaut="DIRECT",into=("DIRECT","RAYLEIGH") ),
            PREC            =SIMP(statut='f',typ='R',defaut= 1.E-5,val_min=0.E+0,fr="Précision de convergence" ),
            NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
          ),
-         VERI_MODE       =FACT(statut='d',min=0,
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
            STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0,
                                  fr="Valeur limite admise pour l ereur a posteriori des modes"  ),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
-         TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15516,7 +14391,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
                                fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
 
          b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
-           CALC_FREQ       =FACT(statut='d',min=0,
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
              OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
                                    fr="Choix de l option et par conséquent du shift du problème modal" ),
              b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
@@ -15524,12 +14399,12 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
              ),
              b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
-               CHAR_CRIT       =SIMP(statut='o',typ='R',
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=1,max=1,
                                      fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
              ),
              b_bande       =BLOC(condition = "(OPTION == 'BANDE')",
                                  fr="Recherche des valeurs propres dans une bande donnée",
-               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,max=2,
                                      fr="Valeur des deux charges critiques délimitant la bande de recherche"),
              ),           
              APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
@@ -15545,7 +14420,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
          ),
 
          b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
-           CALC_FREQ       =FACT(statut='d',min=0,
+           CALC_FREQ       =FACT(statut='d',min=0,max=1,
              OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE"),
                                    fr="Choix de l option et par conséquent du shift du problème modal" ),
              b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
@@ -15553,14 +14428,14 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
              ),
              b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
                                   fr="Recherche des valeurs propres les plus proches d une valeur donnée",
-               FREQ            =SIMP(statut='o',typ='R',
+               FREQ            =SIMP(statut='o',typ='R',min=1,max=1,
                                      fr="Fréquence autour de laquelle on cherche les fréquences propres"),
-               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',max=1,),
                NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
              ),
              b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
                                    fr="Recherche des valeurs propres dans une bande donnée",
-               FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+               FREQ            =SIMP(statut='o',typ='R',min=2,max=2,
                                      fr="Valeur des deux fréquences délimitant la bande de recherche"),
              ),           
              APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
@@ -15575,7 +14450,7 @@ MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_pr
            ),
          ),
 
-         VERI_MODE       =FACT(statut='d',min=0,
+         VERI_MODE       =FACT(statut='d',min=0,max=1,
            STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
            PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
            SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
@@ -15586,8 +14461,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15617,33 +14491,33 @@ MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_stat_prod,
          MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
          MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
                regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
-         MODE_STAT       =FACT(statut='f',max='**',
+         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",) ,),
-           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
            AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
            SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
          ),
-         FORCE_NODALE    =FACT(statut='f',max='**',
+         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",), ),
-           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",), ),
            AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
            SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
          ),
-         PSEUDO_MODE       =FACT(statut='f',max='**',
+         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),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            b_dir           =BLOC(condition = "DIRECTION != None",
              NOM_DIR         =SIMP(statut='f',typ='TXM' ),),
            b_cmp          =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
@@ -15656,8 +14530,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15683,30 +14556,18 @@ MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
          BASE            =SIMP(statut='o',typ=mode_meca ),
          BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu ),
          NUME_VITE_FLUI  =SIMP(statut='o',typ='I' ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
          AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
          AMOR_UNIF       =SIMP(statut='f',typ='R' ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            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,
@@ -15737,19 +14598,19 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
               EXCLUS('ROTATION','MODI_BASE'),),
          MAILLAGE        =SIMP(statut='o',typ=maillage ),
 
-         ORIE_CONTACT    =FACT(statut='f',
-           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ORIE_CONTACT    =FACT(statut='f',min=1,max=1,
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
          ),
 
-         DEFORME         =FACT(statut='f',
+         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'", 
-           GROUP_NO_APPUI = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),
-           GROUP_NO_STRU  = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),),
+           GROUP_NO_APPUI = SIMP(statut='o',typ=grno,max='**' ),
+           GROUP_NO_STRU = SIMP(statut='o',typ=grno,max='**' ),),
          ),
 
-         EQUE_PIQUA      =FACT(statut='f',
+         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' ),
@@ -15765,17 +14626,17 @@ 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',max='**',
-           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ORIE_PEAU_2D    =FACT(statut='f',min=1,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
          ),
-         ORIE_PEAU_3D    =FACT(statut='f',max='**',
-           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ORIE_PEAU_3D    =FACT(statut='f',min=1,max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
          ),
-         ORIE_NORM_COQUE =FACT(statut='f',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,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='o',typ=grma,max='**'),
            VECT_NORM       =SIMP(statut='f',typ='R',max=3),
            NOEUD           =SIMP(statut='f',typ=no),
            GROUP_NO        =SIMP(statut='f',typ=grno),
@@ -15783,33 +14644,33 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
          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',
+         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',
+         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',
+         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,validators=NoRepeat(),max='**'),
-           MAILLE_FOND     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_FOND      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_FOND   =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_FOND     =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_FOND      =SIMP(statut='f',typ=no,max='**'),
          ),
-         MODI_BASE       =FACT(statut='f',
+         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',),        
+         ECHELLE         =SIMP(statut='f',typ='R',min=1,max=1),        
          TRANSLATION     =SIMP(statut='f',typ='R',min=2,max=3),
-         ROTATION        =FACT(statut='f',max='**',
+         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'),),
@@ -15819,8 +14680,7 @@ MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage,
 
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15854,24 +14714,23 @@ 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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE JMBHH01 J.M.PROIX
 def modi_repere_prod(RESULTAT,**args):
@@ -15895,27 +14754,27 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.0
          regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
                         'NOEUD_CMP','LIST_INST','LIST_FREQ','NOM_CAS'),),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
          NOM_CAS         =SIMP(statut='f',typ='TXM' ),
-
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         INST            =SIMP(statut='f',typ='R',max='**'),
+         FREQ            =SIMP(statut='f',typ='R',max='**'),
          LIST_INST       =SIMP(statut='f',typ=listr8),
          LIST_FREQ       =SIMP(statut='f',typ=listr8),
 
          PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
 
-         MODI_CHAM       =FACT(statut='o',max='**',
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           TYPE_CHAM       =SIMP(statut='o',typ='TXM',
+         MODI_CHAM       =FACT(statut='o',min=1,max='**',
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           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',into=C_NOM_CHAM_INTO()),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max=1 ),  
            b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
               NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
            b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
@@ -15927,18 +14786,17 @@ MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,docu="U4.74.0
            b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
               NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
          ),
-         DEFI_REPERE     =FACT(statut='o',
+         DEFI_REPERE     =FACT(statut='o',min=1,max=1,
          regles=(UN_PARMI('ANGL_NAUT','ORIGINE'),),
            REPERE          =SIMP(statut='f',typ='TXM',defaut="UTILISATEUR",
                                  into=("UTILISATEUR","CYLINDRIQUE"),),
-           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
-           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),
-           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',min=1,max=3),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),  
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -15974,10 +14832,10 @@ NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
          b_noeud    =BLOC(condition = "NOEUD != None",
            NOM_CMP    =SIMP(statut='o',typ='TXM' ),
          ),
-         AVEC_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-         SANS_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         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',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"),
@@ -15986,8 +14844,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16010,11 +14867,11 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-g",reentrant=
             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',validators=NoRepeat(),max=100,
-                               typ=(matr_elem_depl_r ,matr_elem_depl_c,matr_elem_temp_r ,matr_elem_pres_c) ),
+         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',validators=NoRepeat(),max='**',typ=(char_meca,char_ther,char_acou, ),),
+           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",
@@ -16028,8 +14885,7 @@ NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-g",reentrant=
          ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16056,14 +14912,13 @@ NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
              b_modele_gene     =BLOC(condition = "MODELE_GENE != None",
                STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
                                     ),
-         BASE     =SIMP(statut='f',typ=(mode_meca,mode_stat,base_modale,mode_gene ) ),
+         BASE     =SIMP(statut='f',typ=(mode_meca,base_modale,mode_gene ) ),
              b_base     =BLOC(condition = "BASE != None",
                STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("DIAG","PLEIN") ),
                NB_VECT     =SIMP(statut='f',typ='I',defaut= 9999 ),
                              ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16100,7 +14955,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',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' ),  
@@ -16108,21 +14963,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',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',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',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' ),  
@@ -16134,8 +14989,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16159,7 +15013,7 @@ POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=tabl_post_dyna,
             UIinfo={"groupes":("Post traitements",)},
         regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
          RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
-         CHOC            =FACT(statut='f',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. ),  
@@ -16169,7 +15023,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',
+         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' ),  
@@ -16177,8 +15031,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16227,11 +15080,11 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                           'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE'),
                 ),
 
-         MASS_INER      = FACT(statut='f',max='**',
+         MASS_INER      = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                                ORIG_INER    = SIMP(statut='f',typ='R',min=3,max=3 ),
                               ),
          b_mass_iner = BLOC(condition = "( MASS_INER != None )",
@@ -16242,7 +15095,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        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),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -16253,22 +15106,22 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max=1),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',),
+                       INST           = SIMP(statut='f',typ='R',max=1),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
-                       FREQ           = SIMP(statut='f',typ='R',),
+                       FREQ           = SIMP(statut='f',typ='R',max=1),
                        LIST_FREQ      = SIMP(statut='f',typ=listr8),
-                       NUME_MODE      = SIMP(statut='f',typ='I',),
-                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',min=2,validators=NoRepeat(),max=2),
-                       NOM_CAS        = SIMP(statut='f',typ='TXM',),
+                       NUME_MODE      = SIMP(statut='f',typ='I',max=1),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',min=2,max=2),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',max=1),
          ),
 
-         ENER_POT       = FACT(statut='f',max='**',
+         ENER_POT       = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                               ),
          b_ener_pot = BLOC(condition = "( ENER_POT  != None )",
                        fr="calcul de l'énergie potentielle de déformation",
@@ -16278,7 +15131,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        ANGLE          = SIMP(statut='f',typ='I',defaut=0),
@@ -16288,25 +15141,25 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
-                       FREQ           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       FREQ           = SIMP(statut='f',typ='R',max='**'),
                        LIST_FREQ      = SIMP(statut='f',typ=listr8),
-                       NUME_MODE      = SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),
-                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-                       NOM_CAS        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+                       NUME_MODE      = SIMP(statut='f',typ='I',max='**'),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',max='**'),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',max='**'),
          ),
 
-         ENER_CIN       = FACT(statut='f',max='**',
+         ENER_CIN       = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                OPTION       = SIMP(statut='f',typ='TXM',
                                                    into=("MASS_MECA","MASS_MECA_DIAG"),
                                                    defaut="MASS_MECA" ),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                               ),
          b_ener_cin = BLOC(condition = "( ENER_CIN != None )",
                        fr="calcul de l'énergie cinétique",
@@ -16316,7 +15169,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        ANGLE          = SIMP(statut='f',typ='I',defaut=0),
@@ -16326,29 +15179,29 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
-                       FREQ           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       FREQ           = SIMP(statut='f',typ='R',max='**'),
                        LIST_FREQ      = SIMP(statut='f',typ=listr8),
-                       NUME_MODE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
-                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-                       NOM_CAS        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+                       NUME_MODE      = SIMP(statut='f',typ='I',max='**'),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',max='**'),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',max='**'),
          ),
 
-         ENER_ELAS      = FACT(statut='f',max='**',
+         ENER_ELAS      = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                               ),
          b_ener_elas = BLOC(condition = "( ENER_ELAS != None )",
                        fr="calcul de l'énergie de déformation élastique",
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -16357,24 +15210,24 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         ENER_TOTALE    = FACT(statut='f',max='**',
+         ENER_TOTALE    = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                               ),
          b_ener_totale = BLOC(condition = "( ENER_TOTALE != None )",
                        fr="calcul de l'énergie de déformation totale",
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -16383,17 +15236,17 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         WEIBULL        = FACT(statut='f',max='**',
+         WEIBULL        = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                                OPTION       = SIMP(statut='f',typ='TXM',
                                                    into=("SIGM_ELGA","SIGM_ELMOY"),
                                                    defaut="SIGM_ELGA"),
@@ -16407,7 +15260,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -16416,17 +15269,17 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         RICE_TRACEY    = FACT(statut='f',max='**',
+         RICE_TRACEY    = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                                OPTION       = SIMP(statut='f',typ='TXM',
                                                    into=("SIGM_ELGA","SIGM_ELMOY"),
                                                    defaut="SIGM_ELGA"),
@@ -16439,7 +15292,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
                        NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
@@ -16448,59 +15301,59 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         INDIC_ENER     = FACT(statut='f',max='**',
+         INDIC_ENER     = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                               ),
          b_indic_ener = BLOC(condition = "( INDIC_ENER != None )",
                        fr="calcul un indicateur global de perte de proportionnalité du chargement",
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
                        RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
                        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         INDIC_SEUIL    = FACT(statut='f',max='**',
+         INDIC_SEUIL    = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                               ),
          b_indic_seuil = BLOC(condition = "( INDIC_SEUIL != None )",
                        fr="calcul un indicateur global de perte de proportionnalité du chargement",
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
                        RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
                        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         CHAR_LIMITE    = FACT(statut='f',min=0,
+         CHAR_LIMITE    = FACT(statut='f',min=0,max=1,
                                CHAR_CSTE = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON")
                               ),
          b_char_limite = BLOC(condition = "( CHAR_LIMITE != None )",
@@ -16508,24 +15361,24 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='o',typ=cham_mater),
                        CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
                        RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
                        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
                        PRECISION      = SIMP(statut='f',typ='R',defaut= 1.0E-3),
                        CRITERE        = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
                        TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',max='**'),
                        LIST_ORDRE     = SIMP(statut='f',typ=listis),
-                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       INST           = SIMP(statut='f',typ='R',max='**'),
                        LIST_INST      = SIMP(statut='f',typ=listr8),
          ),
 
-         CARA_GEOM      = FACT(statut='f',max='**',
+         CARA_GEOM      = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
                                TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               MAILLE       = SIMP(statut='f',typ=ma,max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,max='**'),
                                SYME_X       = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
                                SYME_Y       = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
                                ORIG_INER    = SIMP(statut='f',typ='R',min=2,max=2),
@@ -16534,16 +15387,16 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        fr="calcul des caractéristiques géométriques d'un section de poutre",
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
          ),
 
-         CARA_POUTRE    = FACT(statut='f',max='**',
+         CARA_POUTRE    = FACT(statut='f',min=1,max='**',
                                regles=(AU_MOINS_UN('TOUT','GROUP_MA'),
                                        ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
                                TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
-                               GROUP_MA      = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-                               GROUP_MA_INTE = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               GROUP_MA      = SIMP(statut='f',typ=grma,max='**'),
+                               GROUP_MA_INTE = SIMP(statut='f',typ=grma,max='**'),
                                CARA_GEOM     = SIMP(statut='f',typ=tabl_cara_geom),
                                LAPL_PHI      = SIMP(statut='f',typ=evol_ther),
                                LAPL_PHI_Y    = SIMP(statut='f',typ=evol_ther),
@@ -16558,19 +15411,19 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
                        fr="calcul des caractéristiques mécaniques d'un section de poutre",
                        MODELE         = SIMP(statut='o',typ=modele),
                        CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
-                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_ther,char_acou),max='**' ),
                        MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
          ),
 
-          AIRE_INTERNE   = FACT(statut='f',max='**',
-                                GROUP_MA_BORD  = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+          AIRE_INTERNE   = FACT(statut='f',min=1,max='**',
+                                GROUP_MA_BORD  = SIMP(statut='o',typ=grma,max='**'),
                                ),
          b_aire_interne = BLOC(condition = "( AIRE_INTERNE != None )",
                        fr="calcul de l'aire d'un trou dans un maillage 2D",
                        MODELE         = SIMP(statut='o',typ=modele),
          ),
 
-         TRAV_EXT       = FACT(statut='f',),
+         TRAV_EXT       = FACT(statut='f',min=1,max=1),
          b_trav_ext = BLOC(condition = "( TRAV_EXT != None )",
                        fr="calcul du travail des efforts extérieurs",
                        RESULTAT       = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans) ),
@@ -16583,8 +15436,7 @@ POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=post_elem_prod,docu="U4.81.22-e",r
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 
  )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16619,8 +15471,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16648,13 +15499,13 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.
                       regles=(PRESENT_PRESENT('CORR_KE','MATER'),
                               PRESENT_PRESENT('CORR_SIGM_MOYE','MATER'),
                               PRESENT_PRESENT('DOMMAGE','MATER'),),
-             HISTOIRE       = FACT(statut='o',
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
                                  regles=(UN_PARMI('SIGM','EPSI'),),
                                  SIGM  = SIMP(statut='f',typ=(fonction,formule)),
                                  EPSI  = SIMP(statut='f',typ=(fonction,formule)),),
              COMPTAGE       = SIMP(statut='o',typ='TXM',into=("RAINFLOW","RCCM","NATUREL")),
              DELTA_OSCI     = SIMP(statut='f',typ='R',defaut= 0.0E+0),  
-             COEF_MULT      = FACT(statut='f',
+             COEF_MULT      = FACT(statut='f',min=1,max=1,
                                  KT    = SIMP(statut='o',typ='R'),),
              CORR_KE        = SIMP(statut='f',typ='TXM',into=("RCCM",)),
              DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER","MANSON_COFFIN",
@@ -16667,7 +15518,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.
          ),
 
          b_periodique = BLOC( condition = "CHARGEMENT=='PERIODIQUE'",
-             HISTOIRE       = FACT(statut='o',
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
                                  SIGM_XX  = SIMP(statut='o',typ=(fonction,formule)),
                                  SIGM_YY  = SIMP(statut='o',typ=(fonction,formule)),
                                  SIGM_ZZ  = SIMP(statut='o',typ=(fonction,formule)),
@@ -16681,7 +15532,7 @@ POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=tabl_post_fatig,docu="U4.83.
          ),
 
          b_quelconque = BLOC( condition = "CHARGEMENT=='QUELCONQUE'",
-             HISTOIRE       = FACT(statut='o',
+             HISTOIRE       = FACT(statut='o',min=1,max=1,
                                  SIGM_XX  = SIMP(statut='o',typ=(fonction,formule)),
                                  SIGM_YY  = SIMP(statut='o',typ=(fonction,formule)),
                                  SIGM_ZZ  = SIMP(statut='o',typ=(fonction,formule)),
@@ -16698,8 +15549,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16722,8 +15572,7 @@ POST_GOUJ2E=OPER(nom="POST_GOUJ2E",op=187,sd_prod=tabl_post_gouj2e,reentrant='n'
             UIinfo={"groupes":("Outils métier",)},
          TABLE           =SIMP(statut='o',typ=tabl_post_rele),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16758,10 +15607,10 @@ POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
          b_fond_fiss   =BLOC (condition="(FOND_FISS!= None)",
                          MAILLAGE      = SIMP(statut='o',typ=maillage),
                          PRECISION     = SIMP(statut='f',typ='R',defaut=0.001),
-                         NOEUD         = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                         GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-                         SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**')
+                         NOEUD         = SIMP(statut='f',typ=no,max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no,max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,max='**')
                          ),
          MATER         =SIMP(statut='o',typ=mater,
                              fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
@@ -16775,21 +15624,20 @@ POST_K1_K2_K3=OPER(nom="POST_K1_K2_K3",op=188,sd_prod=tabl_post_k,
                              fr="distance maximum à partir du fond de fissure à utiliser pour le calcul"),  
          PREC_VIS_A_VIS= SIMP(statut='f',typ='R',defaut=0.1),
          TOUT_ORDRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE    =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_ORDRE    =SIMP(statut='f',typ='I',max='**'),
          LIST_ORDRE    =SIMP(statut='f',typ=listis),
-         INST          =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         INST          =SIMP(statut='f',typ='R',max='**'),
          LIST_INST     =SIMP(statut='f',typ=listr8),
              b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
                PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),
                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
              ),
          INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
-         VECT_K1       =SIMP(statut='o',typ='R',max=3,
+         VECT_K1       =SIMP(statut='o',typ='R',max='**',
                              fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"),  
          TITRE         =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 11/03/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16817,14 +15665,14 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=tabl_post_beta,
          MAILLAGE      = SIMP(statut='o',typ=maillage),
          MATER_REV     = SIMP(statut='o',typ=mater),
          EPAIS_REV     = SIMP(statut='o',typ='R'),
-         FISSURE       = FACT(statut='o',
+         FISSURE       = FACT(statut='o',min=1,max=1,
             DECALAGE       = SIMP(statut='f',typ='R',defaut=-2.e-04),
             PROFONDEUR     = SIMP(statut='o',typ='R'),
             LONGUEUR       = SIMP(statut='o',typ='R'),
             ORIENTATION    = SIMP(statut='o',typ='TXM',
                                  into=("CIRC","LONGI"),),
          ),
-         K1D           = FACT(statut='o',max='**',
+         K1D           = FACT(statut='o',min=1,max='**',
             TABL_MECA_REV  = SIMP(statut='o',typ=(tabl_post_rele)),
             TABL_MECA_MDB  = SIMP(statut='o',typ=(tabl_post_rele)),
             TABL_THER      = SIMP(statut='o',typ=(tabl_post_rele)),
@@ -16832,8 +15680,7 @@ POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=tabl_post_beta,
          ),
          TITRE         = SIMP(statut='f',typ='TXM',max='**'),  
 );
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16858,7 +15705,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
          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='**'),
-         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+         OPTION          =SIMP(statut='o',typ='TXM',max='**',
                                into=("PM_PB",
                                      "SN",
                                      "FATIGUE_SPMAX",
@@ -16869,29 +15716,29 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
      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',max='**',fr="Segment sur lequel s effectue le depouillement",
+         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'),),
            INTITULE        =SIMP(statut='f',typ='TXM' ),
            CHEMIN          =SIMP(statut='f',typ=(courbe,surface),),
-           NOEUD           =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            GROUP_NO        =SIMP(statut='f',typ=grno),
              b_acce_noeud     =BLOC(condition="(NOEUD != None)or(GROUP_NO != None)",
                PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),
                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
                                    ),
                                ),
-         TRANSITOIRE     =FACT(statut='o',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" ),
            NB_OCCUR        =SIMP(statut='f',typ='I',defaut= 1,fr="nombre d occurences réelles de ce transitoire" ),
            NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("SIEF_ELNO_ELGA","SIGM_ELNO_DEPL") ),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            LIST_ORDRE      =SIMP(statut='f',typ=listis ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8 ),
            b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
@@ -16904,39 +15751,39 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
          MATER           =SIMP(statut='o',typ=mater ),
          TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
                                fr="Ke meca seul ou partition mecanique + thermique" ),
-         CHAR_MECA   =FACT(statut='o',max='**',fr="Chargements mécaniques",
-           NUME_CHAR     =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
-           NOM_CHAR      =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
-           TYPE_CHAR     =SIMP(statut='f',typ='TXM',fr="nature du chargement",into=( "SEISME","AUTRE"),defaut="AUTRE",),
-           FX            =SIMP(statut='f',typ='R',fr="effort suivant x", ),
-           FY            =SIMP(statut='f',typ='R',fr="effort suivant y", ),
-           FZ            =SIMP(statut='f',typ='R',fr="effort suivant z", ),
-           MX            =SIMP(statut='o',typ='R',fr="moment suivant x", ),
-           MY            =SIMP(statut='o',typ='R',fr="moment suivant y", ),
-           MZ            =SIMP(statut='o',typ='R',fr="moment suivant z", ),
+         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',fr="resultats mécaniques unitaires",
-           TABL_FX       =SIMP(statut='f',typ=table,
+         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,
+           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,
+           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,
+           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,
+           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,
+           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,
+           TABL_PRES     =SIMP(statut='o',typ=table,max=1,
                               fr="table relevé des contraintes pour chargement unitaire de pression"),
                          ),
-          RESU_THER   =FACT(statut='f',max='**',fr="resultats thermiques",
-           NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
-           TABL_RESU_THER =SIMP(statut='o',typ=table,
+          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',max='**',fr="Situation",ang="situation_ang",
+         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" ),
@@ -16959,69 +15806,69 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
                                fr="Ke meca seul ou partition mecanique + thermique" ),
          MODELE          =SIMP(statut='o',typ=modele),
          CARA_ELEM       =SIMP(statut='o',typ=cara_elem),
-         ZONE_ANALYSE =FACT(statut='o',fr="liste des mailles ou des noeuds analysés",
+         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,validators=NoRepeat(),max='**'),
-            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma,max='**'),
             ),
-         RESU_MECA   =FACT(statut='o',max='**',fr="Chargements mécaniques",
+         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',fr="numéro du chargement" ),
-           NOM_CHAR      =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
-           TYPE_CHAR     =SIMP(statut='f',typ='TXM',fr="nature du chargement",into=( "SEISME","AUTRE"),defaut="AUTRE",),
+           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',into=("EFGE_ELNO_DEPL","SIEF_ELNO_ELGA"),),
+             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',),
-             INST            =SIMP(statut='f',typ='R',),
-             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             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',max='**',fr="indices de contraintes",
+         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',defaut=1.0,fr="indice de contraintes C1 du RCCM"),
-            K1              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K1 du RCCM"),
-            C2              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C2 du RCCM"),
-            K2              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K2 du RCCM"),
-            C3              =SIMP(statut='f',typ='R',defaut=0.5,fr="indice de contraintes C3 du RCCM"),
-            K3              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K3 du RCCM"),
+            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,validators=NoRepeat(),max='**',
+            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,validators=NoRepeat(),max='**',
+            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,validators=NoRepeat(),max='**'),
-               NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               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',max='**',fr="resultats thermiques",
+          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',fr="numéro de la table de résultat thermique" ),
-            TABL_RESU_THER =SIMP(statut='o',typ=table,
+            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,
+            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,validators=NoRepeat(),max='**'),
-            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            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,validators=NoRepeat(),max='**'),
-               NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+               NOEUD           =SIMP(statut='f',typ=no,max='**'),
             ),
                            ),
-         SITUATION         =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+         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" ),
@@ -17039,8 +15886,7 @@ POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=tabl_post_rccm,
                                ),
                      ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 # ======================================================================
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17061,7 +15907,7 @@ 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-e",reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
-         ACTION          =FACT(statut='o',max='**',
+         ACTION          =FACT(statut='o',min=1,max='**',
            regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
                    EXCLUS('CHEMIN','GROUP_NO'),
                    EXCLUS('CHEMIN','NOEUD'),
@@ -17069,18 +15915,19 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.
                    UN_PARMI('RESULTAT','CHAM_GD'),            
                    UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
                    PRESENT_PRESENT('TRAC_DIR','DIRECTION'),          
+                   PRESENT_PRESENT('TRAC_DIRECTION','DIRECTION'),
                    ENSEMBLE('MOMENT','POINT'),
                    PRESENT_PRESENT('MOMENT','RESULTANTE'),
+                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIRECTION','TRAC_NORMALE'),
                    PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
-                   EXCLUS('TRAC_DIR','TRAC_NOR'),
                    PRESENT_PRESENT('ORIGINE','AXE_Z'),),
            INTITULE        =SIMP(statut='o',typ='TXM'),  
            CHEMIN          =SIMP(statut='f',typ=(courbe,surface) ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
            CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_no_var2_r,
                                                  cham_elem_sief_r,cham_elem_epsi_r,cham_elem_flux_r,cham_elem_crit_r,
@@ -17093,7 +15940,7 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.
            b_sensibilite   =BLOC(condition="RESULTAT != None",
                                  fr="Définition des paramètres de sensibilité",
                                  ang="Definition of sensitivity parameters",
-             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                    fr="Liste des paramètres de sensibilité.",
                                    ang="List of sensitivity parameters"),),
 
@@ -17102,15 +15949,15 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.
                             'INST','LIST_INST','FREQ','LIST_FREQ','NOEUD_CMP','NOM_CAS'), ),           
              NOM_CHAM        =SIMP(statut='o',typ='TXM' ),  
              TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+             NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
              LIST_ORDRE      =SIMP(statut='f',typ=listis),
-             NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+             NUME_MODE       =SIMP(statut='f',typ='I',max='**'),  
              LIST_MODE       =SIMP(statut='f',typ=listis),
-             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
-             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),  
-             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),  
+             FREQ            =SIMP(statut='f',typ='R',max='**'),  
              LIST_FREQ       =SIMP(statut='f',typ=listr8),
-             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+             INST            =SIMP(statut='f',typ='R',max='**'),  
              LIST_INST       =SIMP(statut='f',typ=listr8),
              PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
@@ -17132,16 +15979,17 @@ POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=tabl_post_rele,docu="U4.81.
            TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
            TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
            DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+           TRAC_DIRECTION  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_NORMALE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
  
            VECT_Y          =SIMP(statut='f',typ='R',max='**'),  
            MOYE_NOEUD      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
-           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE"),validators=NoRepeat(),max=2),
+           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE"),max=2),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   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
@@ -17163,8 +16011,8 @@ 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',
-           METHODE         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="UTO_2_3",
+         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'),  
            LONG_FISS       =SIMP(statut='o',typ='R'),  
@@ -17173,8 +16021,7 @@ POST_SIMPLIFIE=OPER(nom="POST_SIMPLIFIE",op=185,sd_prod=tabl_post_simpli,
            TEMP_ANALYSE    =SIMP(statut='f',typ='R'),  
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17199,12 +16046,12 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d"
                  PRESENT_PRESENT('RESU_GENE','NOEUD','LOI_USURE'),
                  PRESENT_PRESENT('PUIS_USURE','LOI_USURE'),),
          TUBE_NEUF       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         ETAT_INIT       =FACT(statut='f',
+         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'),  
                          ),
          RESU_GENE       =SIMP(statut='f',typ=tran_gene),
-         NOEUD           =SIMP(statut='f',typ=no,),
+         NOEUD           =SIMP(statut='f',typ=no,max=1),
          INST_INIT       =SIMP(statut='f',typ='R',defaut=-1.0E+0),  
          INST_FIN        =SIMP(statut='f',typ='R'),  
          NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
@@ -17214,13 +16061,13 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d"
            regles=(UN_PARMI('MOBILE','MATER_USURE','SECTEUR'), 
                    EXCLUS('MATER_USURE','OBSTACLE'),
                    EXCLUS('MOBILE','USURE_OBST'),),
-           MOBILE          =FACT(statut='f',
+           MOBILE          =FACT(statut='f',min=1,max=1,
              COEF_USURE      =SIMP(statut='o',typ='R'), 
            ),   
-           OBSTACLE        =FACT(statut='f',
+           OBSTACLE        =FACT(statut='f',min=1,max=1,
              COEF_USURE      =SIMP(statut='o',typ='R'), 
            ),
-           SECTEUR         =FACT(statut='f',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")),
@@ -17236,14 +16083,14 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d"
            regles=(UN_PARMI('MOBILE','MATER_USURE'), 
                    EXCLUS('MATER_USURE','OBSTACLE'),
                    EXCLUS('MOBILE','USURE_OBST'),),
-           MOBILE          =FACT(statut='f',
+           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',
+           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'), 
@@ -17259,13 +16106,13 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d"
            regles=(UN_PARMI('MOBILE','MATER_USURE'), 
                    EXCLUS('MATER_USURE','OBSTACLE'),
                    EXCLUS('MOBILE','USURE_OBST'),),
-           MOBILE          =FACT(statut='f',
+           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',
+           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),  
@@ -17287,14 +16134,13 @@ POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=tabl_post_usur,docu="U4.84.05-d"
          ANGL_INCLI      =SIMP(statut='f',typ='R'),  
          ANGL_ISTHME     =SIMP(statut='f',typ='R'),  
          ANGL_IMPACT     =SIMP(statut='f',typ='R'),  
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+         INST            =SIMP(statut='f',typ='R',max='**'),  
          LIST_INST       =SIMP(statut='f',typ=listr8),
          COEF_INST       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 11/03/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17317,7 +16163,7 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentra
               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',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=char_meca),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",into=("FIXE_CSTE",)),
@@ -17325,9 +16171,9 @@ POST_ZAC=OPER(nom="POST_ZAC",op= 175,sd_prod=mult_elas,docu="U4.83.21-b",reentra
          EVOL_ELAS       =SIMP(statut='o',typ=evol_elas),
          b_evol_elas     =BLOC(condition="EVOL_ELAS != None",
            regles=(UN_PARMI('NUME_ORDRE','LIST_INST','INST'),),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),  
            LIST_INST       =SIMP(statut='f',typ=listr8),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+           INST            =SIMP(statut='f',typ='R',max='**'),  
          ),
          TEMP_ZAC        =SIMP(statut='f',typ='R',defaut=0.0E+0),  
          EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
@@ -17338,8 +16184,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 06/09/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17361,9 +16206,6 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',fr="Poursui
                 docu="U4.11.03-g",sd_prod = ops.POURSUITE,
             UIinfo={"groupes":("Gestion du travail",)},
                 op_init = ops.POURSUITE_context,fichier_ini = 1,
-         HDF             =FACT(statut='f',min=1,max=1,
-           FICHIER         =SIMP(fr="nom du fichier hdf associe",statut='o',typ='TXM'),
-         ),
          PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
                            into=("OUI","NON"),defaut="OUI"),
          BASE            =FACT(fr="définition des parmètres associés aux bases JEVEUX",
@@ -17406,8 +16248,7 @@ POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',fr="Poursui
            UNITE           =SIMP(statut='f',typ='I',defaut=15),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& 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
@@ -17431,8 +16272,7 @@ PRE_CHAR_IDEAS=PROC(nom="PRE_CHAR_IDEAS",op=100,docu="U7.01.02-e",
          UNITE_ASTER     =SIMP(statut='f',typ='I',defaut=21),  
          MODELE          =SIMP(statut='o',typ=modele),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17456,8 +16296,7 @@ PRE_GIBI=PROC(nom="PRE_GIBI",op=49,docu="U7.01.11-g",
          UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17482,8 +16321,7 @@ PRE_GMSH=PROC(nom="PRE_GMSH",op=47,docu="U7.01.01-g",
          UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17508,8 +16346,7 @@ PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,docu="U7.01.01-g",
          UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
          CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17532,8 +16369,7 @@ PROCEDURE=MACRO(nom="PROCEDURE",op=ops.build_procedure, docu="U4.13.03-f",
           fr="Nommer le fichier de commandes secondaires",
           NOM  =SIMP(statut='f',typ='TXM',defaut=" "),
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17566,8 +16402,7 @@ PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=prod_matr_cham_prod,
          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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17600,7 +16435,7 @@ def proj_champ_prod(RESULTAT=None,CHAM_NO_REFE=None,**args ):
     if AsType(CHAM_NO_REFE) == cham_no_flux_r : return cham_no_flux_r
     raise AsException("type de concept resultat non prevu")
 
-PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-d",reentrant='f',
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-d",reentrant='n',
             UIinfo={"groupes":("Résultats et champs",)},
                 fr="Projection d'un champ aux noeuds sur les noeuds d'un autre maillage",
 #
@@ -17618,43 +16453,39 @@ PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,docu="U4.72.05-
            regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
                    EXCLUS('TOUT_CHAM','NOM_CHAM',), ),
            RESULTAT        =SIMP(statut='o',typ=(evol_ther,evol_elas,evol_noli,evol_char) ),
-           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                               fr="Liste des paramètres de sensibilité.",
-                               ang="List of sensitivity parameters",),
            MODELE_1        =SIMP(statut='o',typ=modele),
            MODELE_2        =SIMP(statut='o',typ=modele),
 
            TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
 
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),
            LIST_ORDRE      =SIMP(statut='f',typ=listis),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
            LIST_INST       =SIMP(statut='f',typ=listr8),
-           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           FREQ            =SIMP(statut='f',typ='R',max='**' ),
            LIST_FREQ       =SIMP(statut='f',typ=listr8),
          ),
 
-         VIS_A_VIS       =FACT(statut='f',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",) ),
-           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no,max='**'),
            TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma,max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no,max='**'),
          ),
 
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17684,14 +16515,13 @@ PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
                     docu="U4.63.12-f",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,mode_stat ) ),
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          MATR_ASSE       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
          MATR_ASSE_GENE  =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
 )  ;
 
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17722,22 +16552,22 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
             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',
+         MODELE_CALCUL   =FACT(statut='o',min=1,max=1,
            MODELE          =SIMP(statut='o',typ=(modele) ),
            BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,) ),
                          ),
-         MODELE_MESURE   =FACT(statut='o',
+         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",) ),
                          ),
-         CORR_MANU       =FACT(statut='f',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),
                          ),
-         RESOLUTION      =FACT(statut='f',
+         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. ),
@@ -17745,14 +16575,13 @@ PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
            REGUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
            b_regul =BLOC(condition="REGUL!='NON'",
                          regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
-                         COEF_PONDER   =SIMP(statut='f',typ='R',defaut=0.     ,max='**' ),  
+                         COEF_PONDER =SIMP(statut='f',typ='R',max='**',defaut=0. ),  
                          COEF_PONDER_F =SIMP(statut='f',typ=(fonction,formule),max='**' ),
                         ),
              ),
 
           ); 
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17775,7 +16604,7 @@ PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=tabl_intsp,docu="U4.63.
                     fr="Projection d un ou plusieurs spectres de turbulenc sur un ensemble de bases modales ",
       regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),
               ENSEMBLE('FREQ_INIT','FREQ_FIN','NB_POIN'),),
-         SPEC_TURB       =SIMP(statut='o',typ=spectre,validators=NoRepeat(),max='**' ),
+         SPEC_TURB       =SIMP(statut='o',typ=spectre,max='**' ),
          BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu ),
          MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
          CHAM_NO         =SIMP(statut='f',typ=cham_no_depl_r ),
@@ -17791,8 +16620,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17815,14 +16643,13 @@ PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
                     docu="U4.63.13-f",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,mode_stat ) ),
+         BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,mode_gene ) ),
          NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
          TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
          VECT_ASSE       =SIMP(statut='f',typ=cham_no_depl_r ),
          VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -17843,22 +16670,22 @@ 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-b",reentrant='n',
             UIinfo={"groupes":("Post traitements",)},
-         LIST_PARA       =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("SIGM_REFE","M",) ),
-         RESU            =FACT(statut='o',max='**',
+         LIST_PARA       =SIMP(statut='o',typ='TXM',max='**',into=("SIGM_REFE","M",) ),
+         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) ),
            MODELE          =SIMP(statut='o',typ=(modele) ),
            CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
            TEMPE           =SIMP(statut='f',typ='R' ),
-           LIST_INST_RUPT  =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST_RUPT  =SIMP(statut='o',typ='R',max='**' ),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
            LIST_INST       =SIMP(statut='f',typ=(listr8) ),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
            COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.E0 ),
                          ),
          OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY",) ),
@@ -17868,24 +16695,23 @@ 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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
 # RESPONSABLE MCOURTOI M.COURTOIS
 def recu_fonction_prod(RESULTAT=None,TABLE=None,OBSTACLE=None,
@@ -17914,7 +16740,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
 
          CHAM_GD         =SIMP(statut='f',typ=(cham_no_depl_r,cham_no_temp_r,cham_no_pres_r,cham_elem_sief_r,
                                                cham_elem_vari_r,cham_elem_epsi_r,cham_elem_flux_r,
-                                               cham_elem_pres_r,) ),
+                                               cham_elem_pres_r,cham_elem_meta_r ) ),
          RESULTAT        =SIMP(statut='f',typ=(evol_elas,dyna_trans,evol_noli,evol_ther,dyna_harmo ) ),
          RESU_GENE       =SIMP(statut='f',typ=tran_gene),
 #  concept table à créer
@@ -17940,7 +16766,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
                                    fr="Récupération de la fonction à partir d un concept melasflu",
            regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE'),),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            NUME_MODE       =SIMP(statut='o',typ='I' ),
            PARA_X          =SIMP(statut='o',typ='TXM',into=("VITE_FLU",) ),
            PARA_Y          =SIMP(statut='o',typ='TXM',into=("FREQ","AMOR") ),
@@ -17958,7 +16784,7 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
              TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="FONCTION",into=("FONCTION","FONCTION_C") ),
            ),
 
-           FILTRE          =FACT(statut='f',max='**',
+           FILTRE          =FACT(statut='f',min=1,max='**',
               NOM_PARA        =SIMP(statut='o',typ='TXM' ),
               CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
                                     into=("EQ","LT","GT","NE","LE","GE","VIDE",
@@ -17990,20 +16816,20 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
                    EXCLUS('GROUP_NO','NOEUD'),
                    EXCLUS('NOEUD_CHOC','GROUP_NO_CHOC'),
                    UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM' ),
            NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            LIST_ORDRE      =SIMP(statut='f',typ=listis ),
            TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8 ),
-           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
            LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
            b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-             INTERP_NUME     =SIMP(statut='f',typ='TXM',into=("NON","LIN") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN") ),
            ),
            NOM_CMP         =SIMP(statut='f',typ='TXM' ),
 
@@ -18022,17 +16848,17 @@ RECU_FONCTION=OPER(nom="RECU_FONCTION",op=  90,sd_prod=recu_fonction_prod,
 #           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','TOUT_INST','LIST_INST','FREQ','LIST_FREQ'),),
            NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
            LIST_ORDRE      =SIMP(statut='f',typ=listis ),
            TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            LIST_INST       =SIMP(statut='f',typ=listr8 ),
-           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
            LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
            b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
-             INTERP_NUME     =SIMP(statut='f',typ='TXM',into=("NON","LIN") ),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN") ),
            ),
            b_local_cham = BLOC ( condition = "NOM_CHAM!='PTEM'", fr="Opérandes de localisation du champ",
              regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD','NOEUD_CHOC','GROUP_NO_CHOC'),
@@ -18093,8 +16919,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18122,8 +16947,7 @@ RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,docu="U4.71.03-f",
          CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF" ,into=("ABSOLU","RELATIF") ),
          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18151,8 +16975,7 @@ RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table,
          NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18189,8 +17012,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18229,8 +17051,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18276,34 +17097,33 @@ REST_BASE_PHYS=OPER(nom="REST_BASE_PHYS",op=  75,sd_prod=rest_base_phys_prod,
          
          MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
          TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I',max='**' ),  
          TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         INST            =SIMP(statut='f',typ='R',max='**' ),  
          LIST_INST       =SIMP(statut='f',typ=listr8 ),
-         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         FREQ            =SIMP(statut='f',typ='R',max='**' ),  
          LIST_FREQ       =SIMP(statut='f',typ=listr8 ),
          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',into=("OUI",) ),
          CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",   
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',max=8,defaut="ACCE",   
                                into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
                                      "SIGM_ELNO_DEPL","FORC_NODA",) ),
          TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+         NOEUD           =SIMP(statut='f',typ=no,max='**'),
  
          ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction,formule)),
-         DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3 ),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**' ),
 
          SQUELETTE       =SIMP(statut='f',typ=squelette ),
          SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
          SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18327,27 +17147,26 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
          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=2,validators=NoRepeat(),max=2    ),  
-         NUME_ORDRE      =SIMP(statut='f',typ='I'      ,validators=NoRepeat(),max='**' ),  
+         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='**'),
-         MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
-         NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),  
-         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=7,    
-                               into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",
+         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=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',
-           NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
-           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),  
+         EXCIT           =FACT(statut='f',max=1,
+           NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),  
          ),
          MOUVEMENT       =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU","DIFFERENTIEL") ),
          OPTION          =SIMP(statut='f',typ='TXM',defaut="DIAG_DIAG",    
                                into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18365,12 +17184,11 @@ REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=tabl_intsp,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-RETOUR=MACRO(nom="RETOUR",op= ops.build_retour,docu="U4.13.02-f",
+RETOUR=MACRO(nom="RETOUR",op= -2,docu="U4.13.02-f",
             UIinfo={"groupes":("Gestion du travail",)},
             fr="Retour au fichier de commandes appelant", 
 ) ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18397,7 +17215,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=char_meca),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
@@ -18408,7 +17226,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            IRRA     =SIMP(statut='f',typ=evol_varc),
          ),
          COMP_INCR       =C_COMP_INCR(),
-         COMP_ELAS       =FACT(statut='f',max='**',
+         COMP_ELAS       =FACT(statut='f',min=1,max='**',
            RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
                                  into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
                                        "ELAS_POUTRE_GR","CABLE")),
@@ -18420,10 +17238,10 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GREEN","GREEN_GR",) ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
-         ETAT_INIT       =FACT(statut='f',
+         ETAT_INIT       =FACT(statut='f',min=1,max=1,
            regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI','VARI_NON_LOCAL',),
                    EXCLUS('EVOL_NOLI','DEPL',),
                    EXCLUS('EVOL_NOLI','SIGM',),
@@ -18442,7 +17260,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            NUME_DIDI       =SIMP(statut='f',typ='I'),
            INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
          ),
-         INCREMENT       =FACT(statut='o',
+         INCREMENT       =FACT(statut='o',min=1,max=1,
            regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
                    EXCLUS('NUME_INST_FIN','INST_FIN'),),
            LIST_INST       =SIMP(statut='o',typ=listr8),
@@ -18461,7 +17279,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            NOM_CMP         =SIMP(statut='f',typ='TXM',),
            VALE            =SIMP(statut='f',typ='R'),
          ),
-         NEWTON          =FACT(statut='d',
+         NEWTON          =FACT(statut='d',min=1,max=1,
            REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1 ),
            PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
            MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
@@ -18469,7 +17287,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            REAC_ITER       =SIMP(statut='f',typ='I',defaut=0),
            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
          ),
-         RECH_LINEAIRE   =FACT(statut='f',
+         RECH_LINEAIRE   =FACT(statut='f',min=1,max=1,
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3),
            ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
@@ -18478,7 +17296,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
            RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2),
          ),
-         PILOTAGE        =FACT(statut='f',
+         PILOTAGE        =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","PRED_ELAS_INCR","DEFORMATION","ANA_LIM") ),
            COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
@@ -18489,13 +17307,13 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
            SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
-           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
                          ),
-         CONVERGENCE     =FACT(statut='d',
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
            regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
            SIGM_REFE       =SIMP(statut='f',typ='R'),
            EPSI_REFE       =SIMP(statut='f',typ='R'),
@@ -18518,7 +17336,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
          ),
          PARM_THETA      =SIMP(statut='f',typ='R'
                               ,defaut= 1. ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -18540,40 +17358,37 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
            ),
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
          ),
-         ARCHIVAGE       =FACT(statut='f',
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
                    EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
            LIST_INST       =SIMP(statut='f',typ=(listr8) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
            PAS_ARCH        =SIMP(statut='f',typ='I' ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
            ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
-           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA",
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA",
                                                                      "VARI_NON_LOCAL","LANL_ELGA")),
          ),
-         OBSERVATION     =FACT(statut='f',max='**',
+         OBSERVATION     =FACT(statut='f',min=1,max='**',
            regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),
                    PRESENT_PRESENT('MAILLE','POINT'),),
-           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
                                               "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU")),
            NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
            LIST_ARCH       =SIMP(statut='f',typ=listis),
            LIST_INST       =SIMP(statut='f',typ=listr8),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',max='**' ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
            PAS_OBSE        =SIMP(statut='f',typ='I'),
-           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
-           POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           POINT           =SIMP(statut='f',typ='I',max='**'),
          ),
-           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
-                               fr="Liste des paramètres de sensibilité",
-                               ang="List of sensitivity parameters"),
-           SOLV_NON_LOCAL  =FACT(statut='f',
+           SOLV_NON_LOCAL  =FACT(statut='f',min=1,max=1,
              METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
              b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
                RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -18594,7 +17409,7 @@ STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
              ),
              EPS             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            ),
-           LAGR_NON_LOCAL  =FACT(statut='f',
+           LAGR_NON_LOCAL  =FACT(statut='f',max=1,
              ITER_DUAL_MAXI  =SIMP(statut='f',typ='I',defaut= 50),
              RESI_DUAL_ABSO  =SIMP(statut='o',typ='R'),
              RESI_PRIM_ABSO  =SIMP(statut='o',typ='R'),
@@ -18604,8 +17419,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 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18629,12 +17443,12 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur num
             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',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,formule) ),
-           NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2),
-           VALE_PARA       =SIMP(statut='o',typ='R'  ,validators=NoRepeat(),max=2),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max=2),
+           VALE_PARA       =SIMP(statut='o',typ='R',max=2),
            VALE_REFE       =SIMP(statut='f',typ='R' ),
            VALE_REFE_C     =SIMP(statut='f',typ='C' ),
            CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
@@ -18647,7 +17461,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',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,formule) ),
            PARA            =SIMP(statut='f',typ='R' ),
@@ -18663,7 +17477,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',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 ),
@@ -18691,8 +17505,7 @@ TEST_FONCTION=PROC(nom="TEST_FONCTION",op= 135,fr="Extraction d une valeur num
            ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 # RESPONSABLE VABHHTS J.PELLET
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -18719,16 +17532,16 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g",
          regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','OBJET')),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
 
-         CHAM_NO         =FACT(statut='f',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'),
                    PRESENT_PRESENT( 'GROUP_NO','NOM_CMP'),
                    UN_PARMI('VALE','VALE_I','VALE_C'),),
            CHAM_GD         =SIMP(statut='o',typ=cham_no),
-           NOEUD           =SIMP(statut='f',typ=no   ),
-           GROUP_NO        =SIMP(statut='f',typ=grno ),
-           NOM_CMP         =SIMP(statut='f',typ='TXM'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
            TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
            VALE            =SIMP(statut='f',typ='R'),
            VALE_I          =SIMP(statut='f',typ='I'),
@@ -18740,19 +17553,19 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g",
            VERSION         =SIMP(statut='f',typ='TXM'),
          ),
 
-         CHAM_ELEM       =FACT(statut='f',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'),
                    PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
                    PRESENT_PRESENT('POINT','NOM_CMP'),
                    UN_PARMI('VALE','VALE_I','VALE_C'), ),
-           CHAM_GD         =SIMP(statut='o',typ=cham_elem),
-           MAILLE          =SIMP(statut='f',typ=ma),
+           CHAM_GD         =SIMP(statut='o',typ=cham_elem),# CO()
+           MAILLE          =SIMP(statut='f',typ=ma),# CO()
            POINT           =SIMP(statut='f',typ='I' ),
            SOUS_POINT      =SIMP(statut='f',typ='I'),
-           NOEUD           =SIMP(statut='f',typ=no),
-           GROUP_NO        =SIMP(statut='f',typ=grno),
+           NOEUD           =SIMP(statut='f',typ=no),# CO()
+           GROUP_NO        =SIMP(statut='f',typ=grno),# CO()
            NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
            TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
            VALE            =SIMP(statut='f',typ='R' ),
@@ -18765,7 +17578,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g",
            VERSION         =SIMP(statut='f',typ='TXM' ),
          ),
 
-         RESU            =FACT(statut='f',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'),
@@ -18783,15 +17596,15 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g",
            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='**'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**' ),
            NOM_CAS         =SIMP(statut='f',typ='TXM'),
            ANGL            =SIMP(statut='f',typ='R'),
            PARA            =SIMP(statut='f',typ='TXM'),
-           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM'),
            NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
-           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
-           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
            POINT           =SIMP(statut='f',typ='I'),
            SOUS_POINT      =SIMP(statut='f',typ='I'),
            TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
@@ -18824,8 +17637,7 @@ TEST_RESU=PROC(nom="TEST_RESU",op=23,docu="U4.92.01-g",
            VERSION         =SIMP(statut='f',typ='TXM' ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18849,13 +17661,10 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
             UIinfo={"groupes":("Impression",)},
          regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),),
          FICHIER         =SIMP(statut='f',typ='TXM',defaut="RESULTAT"),
-#  concept table à tester
+#  concept table à créer
          TABLE           =SIMP(statut='o',typ=table),
 
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
-                                 fr="Paramètre de sensibilité.",
-                                 ang="Sensitivity parameter"),
-         FILTRE          =FACT(statut='f',max='**',
+         FILTRE          =FACT(statut='f',min=1,max='**',
            NOM_PARA        =SIMP(statut='o',typ='TXM' ),
            CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
                                  into=("EQ","LT","GT","NE","LE","GE","VIDE",
@@ -18881,11 +17690,9 @@ TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
                                into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
          b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
              VERSION         =SIMP(statut='f',typ='TXM' ),
-         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
          ),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18909,16 +17716,16 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g"
          MODELE          =SIMP(statut='o',typ=modele),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
          ),
-         INCREMENT       =FACT(statut='f',
+         INCREMENT       =FACT(statut='f',min=1,max=1,
            LIST_INST       =SIMP(statut='o',typ=listr8 ),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            NUME_FIN        =SIMP(statut='f',typ='I'),
          ),
-         TEMP_INIT       =FACT(statut='f',
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
            STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
            EVOL_THER       =SIMP(statut='f',typ=evol_ther),
@@ -18926,17 +17733,17 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g"
            VALE            =SIMP(statut='f',typ='R'),
            NUME_INIT       =SIMP(statut='f',typ='I'),
          ),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                fr="Liste des paramètres de sensibilité.",
                                ang="List of sensitivity parameters",
          ),
-           SENS_INIT       =FACT(statut='f',
+           SENS_INIT       =FACT(statut='f',min=1,max=1,
              regles=(EXCLUS('STATIONNAIRE','EVOL_THER', ),),
              STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
              EVOL_THER       =SIMP(statut='f',typ=evol_ther),
              NUME_INIT       =SIMP(statut='f',typ='I'),
            ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -18958,11 +17765,11 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g"
            ),
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
-         ARCHIVAGE       =FACT(statut='f',
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST'),),
            LIST_ARCH       =SIMP(statut='f',typ=listis),
            LIST_INST       =SIMP(statut='f',typ=listr8),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",
                                  into=("RELATIF","ABSOLU")),
@@ -18972,8 +17779,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,docu="U4.54.01-g"
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -18997,7 +17803,7 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-
          MODELE          =SIMP(statut='o',typ=(modele) ),
          CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
          CARA_ELEM       =SIMP(statut='c',typ=(cara_elem) ),
-         COMP_THER_NL    =FACT(statut='d',max='**',
+         COMP_THER_NL    =FACT(statut='d',min=1,max='**',
            RELATION        =SIMP(statut='f',typ='TXM',defaut="THER_NL",
                                  into=("THER_NL",
                                        "THER_HYDR",
@@ -19008,20 +17814,20 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-
                                        ) ),
       regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
-           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
-           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
          ),
          EVOL_THER_SECH  =SIMP(statut='f',typ=evol_ther),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=char_ther),
            FONC_MULT       =SIMP(statut='f',typ=(fonction,formule)),
          ),
-         INCREMENT       =FACT(statut='f',
+         INCREMENT       =FACT(statut='f',min=1,max=1,
            LIST_INST       =SIMP(statut='o',typ=listr8),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            NUME_FIN        =SIMP(statut='f',typ='I'),
          ),
-         TEMP_INIT       =FACT(statut='f',
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
            regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
            STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
            EVOL_THER       =SIMP(statut='f',typ=evol_ther),
@@ -19029,21 +17835,21 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-
            VALE            =SIMP(statut='f',typ='R'),
            NUME_INIT       =SIMP(statut='f',typ='I'),
          ),
-         NEWTON          =FACT(statut='d',
+         NEWTON          =FACT(statut='d',min=1,max=1,
            REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
            RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
            ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 0 ),
          ),
-         CONVERGENCE     =FACT(statut='d',
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
            RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
            RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
            ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
          ),
-         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),max='**',
                                fr="Liste des paramètres de sensibilité.",
                                ang="List of sensitivity parameters",
          ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -19058,32 +17864,31 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,docu="U4.54.02-
            ),
            b_gcpc          =BLOC(condition = "METHODE == 'GCPC' ", fr="Parametres de la méthode du gradient conjugué",
              PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
-             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I'  ,defaut= 0 ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
              RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
-             RESI_RELA       =SIMP(statut='f',typ='R'  ,defaut= 1.E-6 ),
-             NMAX_ITER       =SIMP(statut='f',typ='I'  ,defaut= 0 ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
            ),
            SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
-         ARCHIVAGE       =FACT(statut='f',
+         ARCHIVAGE       =FACT(statut='f',min=1,max=1,
            regles=(UN_PARMI('LIST_ARCH','PAS_ARCH','LIST_INST','INST', ),),
            LIST_ARCH       =SIMP(statut='f',typ=(listis) ),
            LIST_INST       =SIMP(statut='f',typ=(listr8) ),
-           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',max='**'),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
            PAS_ARCH        =SIMP(statut='f',typ='I'),
            CHAM_EXCLU      =SIMP(statut='f',typ='TXM',into=("VARI",)),
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
-         OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,
+         OPTION          =SIMP(statut='f',typ='TXM',max='**',
                                into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
   
 )  ;
-
-#& MODIF COMMANDE  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#& MODIF COMMANDE  DATE 22/04/2003   AUTEUR MCOURTOI M.COURTOIS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19108,21 +17913,21 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
          MODELE          =SIMP(statut='o',typ=modele ),
          CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
          CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
-         EXCIT           =FACT(statut='o',max='**',
+         EXCIT           =FACT(statut='o',min=1,max='**',
            CHARGE          =SIMP(statut='o',typ=char_ther ),
            FONC_MULT       =SIMP(statut='c',typ=(fonction,formule) ),
          ),
-         TEMP_INIT       =FACT(statut='f',
+         TEMP_INIT       =FACT(statut='f',min=1,max=1,
            EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
            NUME_INIT       =SIMP(statut='f',typ='I',defaut= 0 ),
          ),
-         CONVERGENCE     =FACT(statut='d',
+         CONVERGENCE     =FACT(statut='d',min=1,max=1,
            CRIT_TEMP_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
            CRIT_ENTH_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
            ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
            ARRET           =SIMP(statut='c',typ='TXM',defaut="OUI",into=("OUI","NON") ),
          ),
-         SOLVEUR         =FACT(statut='d',
+         SOLVEUR         =FACT(statut='d',min=1,max=1,
            METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ),
            b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
              RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
@@ -19150,4 +17955,3 @@ THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
 
 
 
-
index d5ecddd5d450ab31a1e49e08e9b63372aa2e5b00..01d206963691cd54ff275f51a290e7a25d9758b1 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 06/09/2003   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#@ MODIF ops Cata  DATE 07/04/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -39,10 +39,6 @@ def DEBUT(self,PAR_LOT,CODE,**args):
    """
        Fonction sdprod de la macro DEBUT
    """
-   # La commande DEBUT ne peut exister qu'au niveau jdc
-   if self.jdc is not self.parent :
-      raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
-
    self.jdc.set_par_lot(PAR_LOT)
    if CODE!=None :
       self.jdc.fico=CODE['NOM']
@@ -53,8 +49,6 @@ def build_debut(self,**args):
    """
    Fonction ops pour la macro DEBUT
    """
-   self.jdc.UserError=self.codex.error
-
    if self.jdc.par_lot == 'NON' :
       self.jdc._Build()
    # On execute la fonction debut pour initialiser les bases
@@ -69,20 +63,16 @@ def build_debut(self,**args):
    self.definition.op=None
    return ier
 
-def POURSUITE(self,PAR_LOT,CODE,HDF,**args):
+def POURSUITE(self,PAR_LOT,CODE,**args):
    """
        Fonction sdprod de la macro POURSUITE
    """
-   # La commande POURSUITE ne peut exister qu'au niveau jdc
-   if self.jdc is not self.parent :
-      raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
-
    self.jdc.set_par_lot(PAR_LOT)
    if CODE!=None :
       self.jdc.fico=CODE['NOM']
    else:
       self.jdc.fico=None
-   if (self.codex and os.path.isfile("glob.1")) or HDF!=None:
+   if self.codex and os.path.isfile("glob.1"):
      # Le module d'execution est accessible et glob.1 est present
      # Pour eviter de rappeler plusieurs fois la sequence d'initialisation
      # on memorise avec l'attribut fichier_init que l'initialisation
@@ -143,7 +133,6 @@ def build_poursuite(self,**args):
    # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE
    # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans
    # la fonction sdprod de la commande (ops.POURSUITE))
-   self.jdc.UserError=self.codex.error
    return 0
 
 def INCLUDE(self,UNITE,**args):
@@ -174,37 +163,37 @@ def build_include(self,**args):
    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
    # le numero de la commande n est pas utile en phase de construction
    # La macro INCLUDE ne sera pas numérotée (incrément=None)
-   ier=0
    self.set_icmd(None)
    icmd=0
-   # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien.
-   #ier=self.codex.opsexe(self,icmd,-1,1)
+   ier=self.codex.opsexe(self,icmd,-1,1)
    return ier
 
 def detruire(self,d):
    """
        Cette fonction est la fonction op_init de la PROC DETRUIRE
    """
-   if self["CONCEPT"]!=None:
-     sd=[]
-     for mc in self["CONCEPT"]:
-       mcs=mc["NOM"]
-       if type(mcs) == types.ListType or type(mcs) == types.TupleType:
-         for e in mcs:
-           if isinstance(e,ASSD):
-             sd.append(e)
-             e=e.nom
-           if d.has_key(e):del d[e]
-           if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
-       else:
-         if isinstance(mcs,ASSD):
-           sd.append(mcs)
-           mcs=mcs.nom
-         if d.has_key(mcs):del d[mcs]
-         if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
-     for s in sd:
-       # On signale au parent que le concept s n'existe plus apres l'étape self
-       self.parent.delete_concept_after_etape(self,s)
+   sd=[]
+   for mc in self["CONCEPT"]:
+     mcs=mc["NOM"]
+     if type(mcs) == types.ListType or type(mcs) == types.TupleType:
+       for e in mcs:
+         if isinstance(e,ASSD):
+           sd.append(e)
+           e=e.nom
+         if d.has_key(e):del d[e]
+         if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
+     else:
+       if isinstance(mcs,formule):
+         cr=self.parent.report()
+         cr.fatal("la destruction d'une FORMULE est impossible" )
+       if isinstance(mcs,ASSD):
+         sd.append(mcs)
+         mcs=mcs.nom
+       if d.has_key(mcs):del d[mcs]
+       if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
+   for s in sd:
+     # On signale au parent que le concept s n'existe plus apres l'étape self
+     self.parent.delete_concept_after_etape(self,s)
 
 def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
    """
@@ -285,13 +274,6 @@ def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
    text=string.join(ll,'\n')
    return text
 
-def post_INCLUDE(self):
-  """
-      Cette fonction est executée apres toutes les commandes d'un INCLUDE (RETOUR)
-      Elle sert principalement pour les INCLUDE_MATERIAU : remise a blanc du prefixe Fortran
-  """
-  self.codex.opsexe(self,0,-1,2)
-
 def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
                     EXTRACTION,UNITE_LONGUEUR,INFO,**args):
   """ 
@@ -323,9 +305,6 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
     # et le contexte de l etape (local au sens Python)
     # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
     linecache.cache[f]=0,0,string.split(self.text,'\n'),f
-
-    self.postexec=post_INCLUDE
-
     if self.jdc.par_lot == 'NON':
       # On est en mode commande par commande, on appelle la methode speciale
       self.Execute_alone()
@@ -361,19 +340,6 @@ def build_procedure(self,**args):
     # On ne numérote pas une macro PROCEDURE (incrément=None)
     self.set_icmd(None)
     icmd=0
-    #ier=self.codex.opsexe(self,icmd,-1,3)
-    return ier
-
-def build_retour(self,**args):
-    """
-    Fonction ops de la macro RETOUR appelée lors de la phase de Build
-    """
-    ier=0
-    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
-    # le numero de la commande n est pas utile en phase de construction
-    # On ne numérote pas une macro RETOUR (incrément=None)
-    self.set_icmd(None)
-    icmd=0
-    #ier=self.codex.opsexe(self,icmd,-1,2)
+    ier=self.codex.opsexe(self,icmd,-1,3)
     return ier
 
diff --git a/Aster/INSTALL b/Aster/INSTALL
new file mode 100644 (file)
index 0000000..f345250
--- /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 
+
+
+
+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/NEWS b/Aster/NEWS
new file mode 100644 (file)
index 0000000..66a003f
--- /dev/null
@@ -0,0 +1,18 @@
+Verion 1.4 (5/2003):
+   Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
+   Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
+   Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
+   Ajout du bouton de documentation dans le pannneau FORMULE (AO2002-447)
+   Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
+
+Verion 1.3 (11/2002):
+   Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
+   Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
+   sur click droit de la souris sur l'icone de la commande)
+   Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes)
+   Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails)
+   Corrections diverses 
+
+Version 1.2 (5/2002):
+    Reconception de la version 1.1 : décomposition en packages Python
+    Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002
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..a7e8062
--- /dev/null
@@ -0,0 +1,22 @@
+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_PARA='INST',
+                           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..bad17ff
--- /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..d3555c2
--- /dev/null
@@ -0,0 +1,209 @@
+# 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()
+
+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_PARA='INST',
+                               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_PARA='INST',
+                               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_PARA='INST',
+                      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_PARA='INST',
+                      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_PARA='INST',
+                      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/incl.11 b/Aster/Tests/incl.11
new file mode 100644 (file)
index 0000000..2e89f00
--- /dev/null
@@ -0,0 +1 @@
+MA=LIRE_MAILLAGE()
diff --git a/Aster/Tests/incl.12 b/Aster/Tests/incl.12
new file mode 100644 (file)
index 0000000..6bdb45d
--- /dev/null
@@ -0,0 +1 @@
+MMA=LIRE_MAILLAGE()
diff --git a/Aster/Tests/incl.13 b/Aster/Tests/incl.13
new file mode 100644 (file)
index 0000000..3e1feee
--- /dev/null
@@ -0,0 +1 @@
+a=1/
diff --git a/Aster/Tests/incl1.comm b/Aster/Tests/incl1.comm
new file mode 100644 (file)
index 0000000..e68cf5a
--- /dev/null
@@ -0,0 +1,3 @@
+DEBUT()
+INCLUDE(UNITE=13)
+FIN()
diff --git a/Aster/Tests/inclmat.comm b/Aster/Tests/inclmat.comm
new file mode 100644 (file)
index 0000000..b05656a
--- /dev/null
@@ -0,0 +1,9 @@
+DEBUT()
+MA=LIRE_MAILLAGE()
+INCLUDE_MATERIAU(NOM_AFNOR='A42',
+                TYPE_MODELE='REF',
+                VARIANTE='C',
+                TYPE_VALE='NOMI',
+                NOM_MATER='MAT',
+               )
+FIN()
diff --git a/Aster/Tests/inclmat2.comm b/Aster/Tests/inclmat2.comm
new file mode 100644 (file)
index 0000000..b605ec5
--- /dev/null
@@ -0,0 +1,14 @@
+DEBUT()
+INCLUDE_MATERIAU(NOM_AFNOR='A42',
+                TYPE_MODELE='REF',
+                VARIANTE='C',
+                TYPE_VALE='NOMI',
+                NOM_MATER='M',
+               )
+INCLUDE_MATERIAU(NOM_AFNOR='A42',
+                TYPE_MODELE='REF',
+                VARIANTE='F',
+                TYPE_VALE='NOMI',
+                NOM_MATER='N',
+               )
+FIN()
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..228f97a
--- /dev/null
@@ -0,0 +1,122 @@
+"""
+     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_4'
+# ==========Path du noyau local           ====================
+path_Noyau=".."
+# ============================================================
+nom_distrib="Eficas"+version+"AsterSTA7"
+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('../Misc',os.path.join(path_distrib,'Misc'),['*.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',
+                                                            'properties.py',
+                                                            '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..1d18074c2e49908087dd53150b6e49209237cdd2 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,15 @@ 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'),
-              ('ASTER','v6',os.path.join(rep_cata,'cata_STA6.py'),'python','defaut'),
+catalogues = (
+              #('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'),
+              #('ASTER','v6',os.path.join(rep_cata,'cata_STA6.py'),'python'),
+              ('ASTER','v7',os.path.join(rep_cata,'cata_STA7.py'),'python','defaut'),
              )
 
index 2debb64d1a3fb15ec9c28852a860e8db0513a828..01d867012c0ac667084ff4a1ddda68095969d54a 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
 """
@@ -18,4 +38,3 @@ if len(sys.argv) > 1 :
 else:
     # on veut ouvrir Eficas 'vide'
     eficas_go.lance_eficas(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/properties.py b/Aster/properties.py
new file mode 100644 (file)
index 0000000..c2cdabf
--- /dev/null
@@ -0,0 +1,24 @@
+#@ MODIF properties Accas DATE 10/10/2002 AUTEUR gcbhhhh M.ADMINISTRATEUR
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+#     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+#     DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "7.1.0"
+date = "23/04/2003"
diff --git a/Aster/sdist.py b/Aster/sdist.py
new file mode 100644 (file)
index 0000000..6dcfb9d
--- /dev/null
@@ -0,0 +1,125 @@
+"""
+     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_4'
+# ==========Path du noyau fourni par Aster====================
+path_Noyau="../../AccasAster"
+# ============================================================
+nom_distrib="Eficas"+version+"AsterSTA7"
+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','NEWS'])
+
+   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('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+   # AIDE
+   copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+   copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
+   copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
+   copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
+   # Code_Aster
+   copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
+                                                            'editeur.ini',
+                                                            'properties.py',
+                                                            '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(os.path.join(path_Noyau,'Macro'),os.path.join(path_distrib,'Aster','Cata','Macro'),['*.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'
+
+
diff --git a/Descartes/properties.py b/Descartes/properties.py
new file mode 100644 (file)
index 0000000..96d09b7
--- /dev/null
@@ -0,0 +1,2 @@
+version = "6.3.20"
+date = "10/10/2002"
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..dd0a4898eaafc5623846970eff48f57ce3262e13 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
@@ -246,6 +265,7 @@ class ObjectTreeItem(TreeItem,Delegate):
         représentatif de self.object
         --> à surcharger par les différents items
         """
+        raise Exception("MESSAGE AU DEVELOPPEUR : il faut surcharger la methode get_objet_commentarise() pour la classe "+self.__class__.__name__)
         pass
         
     def isvalid(self):
@@ -294,10 +314,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 +410,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..740b1eb8f17167717e5235556ba22dfefbf4685b 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
 """
 # Modules Python
 import sys
+import types
 import Pmw
 import Tkinter
+from tkMessageBox import showinfo,askyesno,showerror
 
 # Modules Eficas
 import splash
 import prefs
 import fontes
+import tooltip
+import properties
+from widgets import Fenetre
+from Misc import MakeNomComplet
+
+VERSION="EFICAS v1.4"
 
 class APPLI: 
   def __init__ (self,master,code='ASTER',fichier=None) :
@@ -21,7 +48,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,9 +56,16 @@ class APPLI:
       self.format_fichier = Tkinter.StringVar()
       self.message=''
       self.cree_composants_graphiques()
-      self.load_extensions()
-      self.affiche_FAQ()
+      self.load_appli_composants()                     # Creation du BUREAU
       splash.fini_splash()
+      self.affiche_FAQ()
+      # AY : cas ou le nom du fichier a été passé en argument
+      if fichier :
+           try :
+                self.bureau.openJDC( str(MakeNomComplet.FILENAME(fichier)) )
+           except Exception,e :
+                showerror( "ARGUMENT INVALIDE", str(e) )
+      # AY : fin
 
   def send_message(self,message):
       self.message=message
@@ -54,7 +88,7 @@ class APPLI:
       """
           Cree les constituants de l'application :
            - menubar
-           - tollbar
+           - toolbar
            - bureau
            - statusbar
       """
@@ -69,18 +103,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 +144,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,10 +162,10 @@ class APPLI:
       """
           Retourne un texte d'informations sur la session courante d'EFICAS
       """
-      texte = 'EFICAS v1.1\n\n'
-      texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n'
-      texte = texte + 'Equipe : MTI/MMN\n\n'
-      texte = texte + 'Code utilisé : %s\n' %self.code
+      texte = VERSION + '\n\n'
+      texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
+      texte = texte + 'Equipe : SINETICS\n\n'
+      texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
       return texte
 
   def efface_aide(self,event):
@@ -150,24 +185,54 @@ 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)
+
+  def update_jdc_courant(self):
+      self.bureau.update_jdc_courant()
+
+  def affiche_alerte(self,titre,message):
+      f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
+      f.wait()
+
+
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..eb3269926ca8fb3b718a0f81b00a1114d0d672f4 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
@@ -106,8 +139,11 @@ class BUREAU:
       CONTEXT.unset_current_step()
       J=self.cata[0].JdC(cata=self.cata,
                          cata_ord_dico=self.cata_ordonne_dico,
-                         appli=self.appli)
+                         appli=self.appli,
+                         rep_mat=self.appli.CONFIGURATION.rep_mat,
+                         )
       self.JDCName=J.nom
+      self.fileName=None
       self.ShowJDC(J,self.JDCName)
       self.appli.toolbar.active_boutons()
 
@@ -175,6 +211,7 @@ class BUREAU:
           if not hasattr(self,'JDC') : return
           titre="rapport de validation du jeu de commandes courant"
           cr = self.JDC.report()
+          self.update_jdc_courant()
       elif mode == 'CATA':
           from Noyau.N_CR import CR
           cr = CR()
@@ -196,11 +233,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 +246,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 :
@@ -242,7 +280,9 @@ class BUREAU:
       CONTEXT.unset_current_step()
       J=self.cata[0].JdC(procedure=text,appli=self.appli,
                          cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
-                         nom = self.JDCName)
+                         nom = self.JDCName,
+                         rep_mat=self.appli.CONFIGURATION.rep_mat,
+                         )
       J.analyse()
       txt_exception = J.cr.get_mess_exception()
       if txt_exception :
@@ -256,8 +296,9 @@ class BUREAU:
          # si le JDC ne contient rien (vide), on retourne ici
          if len(self.JDC.etapes) == 0 : return
          # dans le cas où le JDC est invalide, on affiche son CR
-         cr = self.JDC.report()
-         if not cr.estvide() : 
+          if not self.JDC.isvalid():
+         #cr = self.JDC.report()
+         #if not cr.estvide() : 
             self.appli.top.update()
             self.visuCR(mode='JDC')
 
@@ -333,7 +374,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 +546,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 +583,13 @@ 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)
+
+   def update_jdc_courant(self):
+      self.JDCDisplay_courant.update()
+
 
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..efa8685b1487fd2c7a0188c2979cae09295fb428 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
@@ -126,6 +138,15 @@ class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
       Retourne la liste des fils de self
       """
       return []
+
+
+    def get_objet_commentarise(self):
+       """
+           La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem
+           surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
+           elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
+       """
+       raise Exception( 'Citoyen : tu peux "commentariser" une commande MAIS PAS UN COMMENTAIRE' )
   
 import Extensions
 treeitem =COMMTreeItem
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..14614c197a6e664352c4d723ea973778e0378ed9 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
@@ -66,7 +78,7 @@ class FORMULEPanel(panels.OngletPanel):
     self.option_menu_typ.place(relx=0.33,rely=0.23)
     Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
     self.entry_arg = Entry(self.frame_valeur)
-    Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.55)
+    Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.65)
     self.entry_exp = Entry(self.frame_valeur)
     # binding sur les entries
     self.entry_nom.bind("<Return>",self.verif_nom)
@@ -75,15 +87,21 @@ class FORMULEPanel(panels.OngletPanel):
     # affichage des entries
     self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
     self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
-    self.entry_exp.place(relx=0.35,rely=0.55,relwidth=0.55)
-    # affichage d'une phrase d'aide
-    aide = """
-    Un retour de chariot dans une zone de saisie vous permet de vérifier si
-    la valeur que vous avez entrée est valide.
-    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
-    valeurs seront effectivement prises en compte
-    """
-    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.7,anchor='n')
+
+    # affichage d'une phrase d'aide pour les arguments
+    aide = """Entrer les arguments sous la forme
+TYPE : VARIABLE séparés par des virgules (,)
+Exemple REEL:INST,ENTIER:COEF """
+    Label(self.frame_valeur,text=aide, justify="l").place(relx=0.5,rely=0.47,anchor='n') 
+
+    self.entry_exp.place(relx=0.35,rely=0.65,relwidth=0.60)
+    # affichage d'une phrase d'aide pour l'expression
+    aide = """Un retour de chariot dans une zone de saisie vous permet de vérifier si
+la valeur que vous avez entrée est valide.
+Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
+valeurs seront effectivement prises en compte."""
+    Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.75,anchor='n')
+
     # affichage des nom, type retourné, arguments et corps de la FORMULE
     self.display_valeur()
     # affichage des boutons
@@ -100,9 +118,10 @@ class FORMULEPanel(panels.OngletPanel):
     self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
     self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
 
-    self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
-    self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
-    self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center')
+    self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center')
 
   def change_valeur(self):
     """
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..6c627bbd9b67ef063b2b05b71299ef3f24709cf8 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
@@ -11,7 +23,7 @@ import types
 import Tkinter
 import Pmw
 from tkFileDialog import *
-from tkMessageBox import showinfo,showerror
+from tkMessageBox import showinfo,showerror,askyesno
 import traceback
 
 # Modules Eficas
@@ -20,11 +32,11 @@ import panels
 import fontes
 import compooper
 import convert
-from widgets import Fenetre
+from widgets import Fenetre,FenetreYesNo
 
 #
-__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.9 2002/11/12 18:36:08 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')
@@ -56,22 +68,10 @@ class MACROPanel(panels.OngletPanel):
     self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
     nb.tab('Mocles').focus_set()
     nb.setnaturalsize()
-    #self.monmenu=Tkinter.Menu(self.parent.appli.menubar,tearoff=0)
-    #self.monmenu.add_command(label='Build',command=self.Build)
-    #self.monmenu.add_command(label='View',command=self.View)
-    #self.parent.appli.add_menu(label="Macro",menu=self.monmenu)    
     self.affiche()
 
-  def Build(self):
-    print "Build"
-    self.node.item.object.Build()
-
-  def View(self):
-    print "View"
-    MacroDisplay(self.parent.appli,self.node.item.object,self.node.item.object.nom)
-
   def makeFichierPage(self,page):
-    """\r
+    """
     Affiche la page d'onglet correspondant au changement du fichier
     dont a besoin la macro\r
     """
@@ -83,9 +83,9 @@ class MACROPanel(panels.OngletPanel):
     Tkinter.Button(page,text='Valider',command = self.change_fichier_init).place(relx=0.3,rely=0.8)
     Tkinter.Button(page,text='Browse',command = self.browse_fichier_init).place(relx=0.5,rely=0.8)
     Tkinter.Button(page,text='Annuler',command = self.annule_fichier_init).place(relx=0.7,rely=0.8)
-    if hasattr(self.node.item.object,'fichier_init'):\r
-      if self.node.item.object.fichier_init :\r
-        self.entry.insert(0,self.node.item.object.fichier_init)
+    if hasattr(self.node.item.object,'fichier_ini'):
+      if self.node.item.object.fichier_ini :
+        self.entry.insert(0,self.node.item.object.fichier_ini)
     self.entry.focus()
 
   def convert_file(self,file):
@@ -115,9 +115,23 @@ class MACROPanel(panels.OngletPanel):
     """ 
         Effectue le changement de fichier d'initialisation s'il est valide 
     """
-    if not hasattr(self.node.item.object,'fichier_init'):
-       self.node.item.object.fichier_init=None
-    old_fic = self.node.item.object.fichier_init
+    if not hasattr(self.node.item.object,'fichier_ini'):
+       self.node.item.object.fichier_ini=None
+       self.node.item.object.fichier_text=None
+       self.node.item.object.fichier_err="Le fichier n'est pas defini"
+       self.node.item.object.contexte_fichier_init={}
+       self.node.item.object.recorded_units={}
+       self.node.item.object.fichier_unite="PasDefini"
+       import Extensions.jdc_include
+       self.node.item.object.JdC_aux=Extensions.jdc_include.JdC_include
+
+    old_fic = self.node.item.object.fichier_ini
+    old_text = self.node.item.object.fichier_text
+    old_err = self.node.item.object.fichier_err
+    old_context=self.node.item.object.contexte_fichier_init
+    old_units=self.node.item.object.recorded_units
+    old_etapes=self.node.item.object.etapes
+
     new_fic = self.entry.get()
     if not os.path.isfile(new_fic) :
       showinfo("Fichier introuvable","Le fichier que vous avez saisi\n"+
@@ -126,50 +140,88 @@ class MACROPanel(panels.OngletPanel):
       return
     # On convertit le fichier
     text=self.convert_file(new_fic)
-    if not text:return
+    # Si probleme a la lecture-conversion on arrete le traitement
+    if not text:
+       return
+    self.node.item.object.recorded_units={}
+
     try:
-      self.node.item.object.make_contexte(new_fic,text)
-      self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom())
+      self.node.item.object.make_contexte_include(new_fic,text)
     except:
-      #traceback.print_exc()
+      # Erreurs lors de l'evaluation de text dans un JDC auxiliaire
+      self.parent.appli.affiche_infos("Fichier invalide")
       l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
-      showinfo("Fichier invalide",
-               "Erreur dans l'interprétation du nouveau fichier ...\n"+
-               "L'ancien va être restauré\n"+string.join(l))
+      f=FenetreYesNo(self.parent.appli,titre="Fichier invalide : voulez vous retablir l ancien fichier ?",
+                             texte="Erreur dans l'interprétation du nouveau fichier ...\n\n"+string.join(l),
+                             yes="Retablir",no="Changer")
+      f.wait()
+      reponse=f.result
+      if reponse:
+         # On retablit l'ancien fichier
+         self.entry.delete(0,Tkinter.END)
+         self.node.item.object.fichier_ini=old_fic
+         self.node.item.object.fichier_text=old_text
+         self.node.item.object.fichier_err=old_err
+         self.node.item.object.contexte_fichier_init=old_context
+         self.node.item.object.recorded_units=old_units
+         self.node.item.object.etapes=old_etapes
+         self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré")
+         if old_fic:
+             self.entry.insert(0,self.node.item.object.fichier_ini)
+      else:
+         # On conserve la memoire du nouveau fichier
+         # mais on n'utilise pas les concepts crees par ce fichier
+         # on met l'etape en erreur : fichier_err=string.join(l)
+         self.node.item.object.init_modif()
+         self.node.item.object.fichier_ini=new_fic
+         self.node.item.object.fichier_text=text
+         self.node.item.object.fichier_err=string.join(l)
+         # On enregistre la modification de fichier
+         self.node.item.object.record_unite()  
+         #self.node.item.object.etapes=[]
+         self.node.item.object.g_context={}
+         # Le contexte du parent doit etre reinitialise car les concepts produits ont changé
+         self.node.item.object.parent.reset_context()
 
-      self.entry.delete(0,Tkinter.END)
-      self.parent.appli.affiche_infos("Fichier invalide")
+         self.node.item.object.old_contexte_fichier_init=old_context
+         self.node.item.object.contexte_fichier_init={}
+         self.node.item.object.reevalue_sd_jdc()
 
-      if old_fic:
-         # On convertit le fichier
-         #text=self.convert_file(old_fic)
-         #if not text:return
-         #self.node.item.object.make_contexte(old_fic,text)
-         self.node.item.object.fichier_init=old_fic
-         self.entry.insert(0,self.node.item.object.fichier_init)
-         self.parent.appli.affiche_infos("Fichier invalide ... Ancien fichier restauré")
+         self.node.item.object.fin_modif()
+         self.parent.appli.affiche_infos("Fichier invalide ... Nouveau fichier mémorisé")
+         self.node.update()
       return
-    # si on passe ici, c'est que le new_fic a bien été correctement 
-    #  interprété ...
-    self.node.item.object.fichier_init = new_fic
-    # il faut lancer la réévaluation de tout le jdc ... 
+
+    # L'evaluation de text dans un JDC auxiliaire s'est bien passé
+    # on peut poursuivre le traitement
+    self.node.item.object.init_modif() 
+    self.node.item.object.fichier_ini = new_fic
+    self.node.item.object.fichier_text=text
+    self.node.item.object.fichier_err=None
+    # On enregistre la modification de fichier
+    self.node.item.object.record_unite()  
+    # Le contexte du parent doit etre reinitialise car les concepts produits ont changé
+    self.node.item.object.parent.reset_context()
+
+    # Si des concepts ont disparu lors du changement de fichier, on demande leur suppression
+    self.node.item.object.old_contexte_fichier_init=old_context
     self.node.item.object.reevalue_sd_jdc()
-    self.node.racine.update()
+
+    self.node.item.object.fin_modif()
+    self.parent.appli.affiche_infos("Fichier %s modifié" %self.node.item.get_nom())
+    self.node.update()
 
   def annule_fichier_init(self,event=None):
-    """ retaure dans self.entry le nom de fichier_init"""
+    """ Restaure dans self.entry le nom de fichier_init"""
     self.entry.delete(0,Tkinter.END)
-    self.entry.insert(0,self.node.item.object.fichier_init)
+    self.entry.insert(0,self.node.item.object.fichier_ini)
 
   def browse_fichier_init(self,event=None):
     """ 
          Propose à l'utilisateur une Bsf et retourne le fichier 
          sélectionné dans self.entry 
     """
-    file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom(),
-                         #  filetypes = ( ("Aster", ".comm"),("Python", ".py")),
-                         #  defaultextension=".comm"
-                          )
+    file = askopenfilename(title="Choix du fichier %s" %self.node.item.get_nom())
     if file != '' :
       self.entry.delete(0,Tkinter.END)
       self.entry.insert(0,file)
@@ -186,13 +238,13 @@ class MACROTreeItem(compooper.EtapeTreeItem):
       Retourne le nom de l'icône à afficher dans l'arbre
       Ce nom dépend de la validité de l'objet
       """
-      if self.object.isactif():
+      if not self.object.isactif():
+        return "ast-white-square"
+      else:
         if self.object.isvalid():
           return "ast-green-square"
         else:
           return "ast-red-square"
-      else:
-        return "ast-white-square"
 
   def GetLabelText(self):
       """ Retourne 3 valeurs :
@@ -230,6 +282,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,38 +327,36 @@ 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()
 
-import Accas
+class INCLUDETreeItem(MACROTreeItem):
+  rmenu_specs=[("View","makeView")]
+
+  def makeView(self,appli):
+    nom=self.object.nom
+    if hasattr(self.object,'fichier_ini'):
+       if self.object.fichier_ini is None:
+          nom=nom+' '+"Fichier non défini"
+       else:
+          nom=nom+' '+self.object.fichier_ini
+    macrodisplay.makeMacroDisplay(appli,self.object,nom)
+
+class INCLUDE_MATERIAUTreeItem(INCLUDETreeItem): pass
+class POURSUITETreeItem(INCLUDETreeItem): pass
+
 treeitem=MACROTreeItem
+def treeitem(appli, labeltext, object, setfunction=None):
+   if object.nom == "INCLUDE_MATERIAU":
+      return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "INCLUDE":
+      return INCLUDETreeItem(appli, labeltext, object, setfunction)
+   elif object.nom == "POURSUITE":
+      return POURSUITETreeItem(appli, labeltext, object, setfunction)
+   else:
+      return MACROTreeItem(appli, labeltext, object, setfunction)
+
+import Accas
 objet=Accas.MACRO_ETAPE
     
-class MacroDisplay:
-  def __init__(self,appli,jdc,nom_jdc):
-    self.fenetre = Tkinter.Toplevel()
-    self.fenetre.configure(width = 800,height=500)
-    self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
-    self.fenetre.title("Visualisation Macro_Etape")
-    self.jdc=jdc
-    self.nom_jdc=nom_jdc
-    self.appli=appli
-    self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
-                                     hull_width=600,
-                                     hull_height=500,
-                                     borderframe=1)
-    self.canvas=self.mainPart.component('canvas')
-    Pmw.Color.changecolor(self.canvas,background='gray95')
-    self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
-    self.item=MACRO2TreeItem(self.appli,nom_jdc,jdc)
-    import treewidget
-    self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None)
-    self.tree.draw()
-    
-  def quit(self):
-    self.fenetre.destroy()
-
+import macrodisplay
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..88e8e38868a38e483d006b5a65a1373464181c97 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
@@ -45,20 +60,27 @@ class newSIMPPanel(panels.OngletPanel):
       nb.setnaturalsize()
       
 # ----------------------------------------------------------------------------------------
-#   Méthodes utlisées pour l'affectation de la valeur donnée par l'utilisateur
+#   Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
 #    au mot-clé courant
 # ----------------------------------------------------------------------------------------
 
   def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
       """
-      Enregistre  val comme valeur de self.node.item.object SANS faire de test de validité
+          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 :
+          #XXX Pourquoi proceder ainsi ? Il n'est pas possible de mettre
+          # None comme valeur du mot cle. 
+          # Probablement que ce debranchement permet de mettre record_valeur
+          # en call back, il faut donc aller chercher la valeur dans l'entry
           valeur= self.entry.get()
           self.entry.delete(0,END)
+          #XXX Pour permettre la mise a None du mot cle, on remet None si valeur == ''
+          if valeur == '':valeur=None
       self.node.item.set_valeur(valeur,evaluation='non')
       self.parent.appli.affiche_infos(mess)
       if self.node.item.get_position()=='global':
@@ -67,11 +89,12 @@ 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
+#   Méthodes utilisées pour la manipulation des items dans les listes de choix
 # ----------------------------------------------------------------------------------------
   def selectValeur(self,name):
       self.selected_valeur = name
@@ -104,7 +127,9 @@ class newSIMPPanel(panels.OngletPanel):
           return
       liste_valeurs.append(self.selected_choix)
       liste_choix = self.Liste_choix.get_liste()
-      liste_choix.remove(self.selected_choix)
+      # PN en attendant mieux
+      if "TYPE_ANCRAGE" not in self.node.item.get_genealogie():
+         liste_choix.remove(self.selected_choix)
       self.Liste_valeurs.put_liste(liste_valeurs)
       self.Liste_choix.put_liste(liste_choix)
       self.selected_choix = None
@@ -115,6 +140,12 @@ class newSIMPPanel(panels.OngletPanel):
   def deselectChoix(self,name):
       self.selectChoix = None
       
+  def raisecmd(self,page):
+      try:
+         self.entry.focus()
+      except:
+         pass
+
 class SHELLPanel(newSIMPPanel):
   """
   Classe Panel utilisé pour les mots-clés simples qui attendent un shell pour valeur
@@ -181,7 +212,18 @@ class PLUSIEURS_Panel(newSIMPPanel):
       Méthode qui récupère la liste des valeurs donnée par l'utilisateur
       et l'affecte au mot-clé courant.
       """
-      l_valeurs = self.Liste_valeurs.get_liste()
+      l1_valeurs = self.Liste_valeurs.get_liste()
+      # PN : remplacement des paramétres par leur nom (cf get_liste)
+      #      
+      l_valeurs=[]
+      for  val in l1_valeurs :
+           if val.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
+               v=val.nom
+           else:
+                v=val
+           l_valeurs.append(v)
+    
+      print "l_valeurs = ", l_valeurs
       longueur = len(l_valeurs)
       if longueur < min or longueur > max :
           self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
@@ -193,21 +235,22 @@ class PLUSIEURS_Panel(newSIMPPanel):
       else:
          valeur = None
       self.parent.appli.affiche_infos("Valeur acceptée")
+      print "valeur = " ,valeur
       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,10 +348,12 @@ 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
+      aide = self.get_aide()
+      aide = justify_text(texte=aide)
       bulle_aide=self.get_bulle_aide()
       objet_mc = self.node.item.get_definition()
       min,max = self.node.item.GetMinMax()
@@ -324,6 +369,8 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
       self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
       self.frame_boutons = Frame(page)
       self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
+      self.frame_aide = Frame(page)
+      self.frame_aide.place(relx=0.1,rely=0.75,relwidth=0.9,relheight=0.1)
       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
                                  ("<Button-3>",self.deselectValeur),
                                  ("<Double-Button-1>",self.sup_valeur))
@@ -357,6 +404,35 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
       for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
           fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
           fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
+      self.frame_aide.update()
+      self.aide = Label(self.frame_aide,
+                        text = aide,
+                        justify='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)
+
+  def get_aide(self):
+      """
+      Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
+      que saisit l'utilisateur
+      """
+      mc = self.node.item.get_definition()
+      d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
+                  'I'   : 'entiers',
+                  'C'   : 'complexes'}
+      type = mc.type[0]
+      if not d_aides.has_key(type) : 
+        if mc.min == mc.max:
+           return str(mc.min)+" valeur(s) est(sont) attendue(s)"
+         else :
+           return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
+      if mc.min == mc.max:
+          return "Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
+      else :
+          return "Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
+      return "  "
 
   def get_bulle_aide(self):
       """
@@ -424,12 +500,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 +517,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 +534,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 +781,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):
   """
@@ -761,6 +840,37 @@ class UNIQUE_ASSD_Panel(UNIQUE_Panel):
   Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
   d'un type dérivé d'ASSD
   """
+  def valid_valeur_automatique(self):
+      """
+         Réalise la validation d'un concept sans remonter dans le
+         node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1)
+         Identique à valid_valeur moins appel de self.node.parent.select()
+         On pourrait supposer que le seul concept présent est valide et donc ne pas
+         réaliser tous les tests de vérification.
+      """
+      if self.parent.modified == 'n' : self.parent.init_modif()
+      valeur = self.get_valeur()
+      self.erase_valeur()
+      anc_val = self.node.item.get_valeur()
+      test = self.node.item.set_valeur(valeur)
+      if not test :
+          mess = "impossible d'évaluer : %s " %`valeur`
+          self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
+      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)
+
   def makeValeurPage(self,page):
       """
           Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une 
@@ -775,6 +885,12 @@ class UNIQUE_ASSD_Panel(UNIQUE_Panel):
       # Remplissage du panneau
       self.valeur_choisie = StringVar()
       self.valeur_choisie.set('')
+      min,max =  self.node.item.GetMinMax()
+      if (min == 1 and min == max and len(liste_noms_sd)==1):
+          if self.valeur_choisie.get() != liste_noms_sd[0]:
+            self.valeur_choisie.set(liste_noms_sd[0])
+             self.valid_valeur_automatique()
+        
       self.frame_valeur = Frame(page)
       self.frame_valeur.pack(fill='both',expand=1)
       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
@@ -878,7 +994,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 +1004,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 +1021,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,24 +1104,56 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel):
           self.label_valeur.place_forget()
           self.entry_co.focus()
       elif new_concept == 'NON':
-          self.label_co.place_forget()
-          self.entry_co.place_forget()
-          self.l_resu.place(relx=0.05,rely=0.7)
-          self.label_valeur.place(relx=0.45,rely=0.7)
+          # On est passe de OUI à NON, on supprime la valeur
+# PN correction de bug (on passe de non a non et cela supprime la valeur)
+# ajout du if de le ligne suivane
+          if self.node.item.is_CO():
+                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)
+                self.label_valeur.place(relx=0.45,rely=0.7)
           
   def display_valeur(self):
       """
       Affiche la valeur de l'objet pointé par self
       """
       valeur = self.node.item.get_valeur()
-      if valeur == None : return # pas de valeur à afficher ...
+      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 +1184,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()
@@ -1012,6 +1220,7 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
       if valeur == None : return # pas de valeur à afficher ...
       self.entry.delete(0,END)
       self.entry.insert(0,valeur)
+      self.entry.focus()
       
 class UNIQUE_COMP_Panel(UNIQUE_Panel):
   """
@@ -1047,7 +1256,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):
@@ -1102,7 +1315,11 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       elif self.wait_into():
           # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
           min,max = self.GetMinMax()
-          if max != 1 and ((min != 0 and min != max) or (min == 0)):
+          # PN : 
+          # Remplacement du if ??
+          #if max != 1 and ((min != 0 and min != max) or (min == 0)):
+          assert (min <= max)
+          if max > 1 :
              # l'objet attend une liste de valeurs
              self.panel = PLUSIEURS_INTO_Panel
           else:
@@ -1135,7 +1352,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 +1374,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 +1435,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 +1494,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..f9e97f9b5fe14896d28cea74ab4b47e1c949282d 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
@@ -12,12 +31,16 @@ from tkMessageBox import askyesno,showerror
 import traceback
 
 # Modules Eficas
+import patches
 import appli
 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)
@@ -46,7 +69,7 @@ class EFICAS(appli.APPLI):
         self._ulfile.setentry('')
         self.dialog.deactivate(result)
         self.ulfile = None
-        self.text=''
+        self.text=None
 
   def get_file(self,unite=None,fic_origine = ''):
       """ 
@@ -107,3 +130,10 @@ class EFICAS(appli.APPLI):
          showerror("Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
          return None
 
+  def affiche_texte(self,entete,texte):
+      """Cette methode ouvre une fenetre modale dans laquelle on affiche un texte
+      """
+      self.affiche_infos(entete)
+      f=Fenetre(self, titre=entete, texte = texte)
+      f.wait()
+
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')
diff --git a/Editeur/icons/Sep.gif b/Editeur/icons/Sep.gif
new file mode 100644 (file)
index 0000000..87e716d
Binary files /dev/null and b/Editeur/icons/Sep.gif differ
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..da4d1ac82486a5c00b079de03517698e74d470a2 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 contient la classe JDCDISPLAY qui réalise l'affichage
    du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
    les informations attachées au noeud de l'arbre sélectionné
 """
 # Modules Python
+import types
 import Tkinter
 import Pmw
 
@@ -25,6 +45,7 @@ class JDCDISPLAY:
       self.jdc=jdc
       self.nom_jdc=nom_jdc
       self.fichier=None
+      self.panel_courant=None
 
       if not appli:
          class Appli:
@@ -52,11 +73,51 @@ 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)
+                 self.appli,self.select_node,self.make_rmenu)
+
+   def make_rmenu(self,node,event):
+      if hasattr(node.item,'rmenu_specs'):
+         rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0)
+         #node.select()
+         self.cree_menu(rmenu,node.item.rmenu_specs,node)
+         rmenu.tk_popup(event.x_root,event.y_root)
+
+   def cree_menu(self,menu,itemlist,node):
+      """
+            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,node)
+            elif method[0] == '&':
+                 # On a une chaine avec & en tete => on cree un radiobouton
+                 try:
+                    command=getattr(node.item,method[1:])
+                    menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command:c(a))
+                    if radio == None:radio=number_item
+                 except:pass
+            else:
+                 try:
+                    command=getattr(node.item,method)
+                    menu.add_command(label=label,command=lambda a=self.appli,c=command:c(a))
+                 except:pass
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
 
    def select_node(self,node):
       """
@@ -78,13 +139,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,25 +228,27 @@ 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)
       else:
           showinfo("Copie impossible",
                    "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
-          return
+      return
 
    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 +277,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 !")
@@ -217,3 +306,9 @@ class JDCDISPLAY:
       # on rend la copie à nouveau possible en libérant le flag edit
       self.edit="copier"
 
+   def update(self):
+      """Cette methode est utilisee par le JDC associe pour 
+         signaler des modifications globales du JDC
+      """
+      self.tree.update()
+
diff --git a/Editeur/macrodisplay.py b/Editeur/macrodisplay.py
new file mode 100644 (file)
index 0000000..9c80f26
--- /dev/null
@@ -0,0 +1,147 @@
+#            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 MacroDisplay qui realise l'affichage 
+   des sous commandes d'une macro sous forme d'arbre
+"""
+# Modules Python
+import types
+import Tkinter,Pmw
+
+# Modules EFICAS
+import images
+import tooltip
+import Objecttreeitem
+from widgets import Fenetre
+
+class MACRO2TreeItem(Objecttreeitem.ObjectTreeItem):
+  def IsExpandable(self):
+    return 1
+
+  def GetText(self):
+      return  "    "
+
+  def GetIconName(self):
+    if self.object.isvalid():
+      return "ast-green-square"
+    else:
+      return "ast-red-square"
+
+  def keys(self):
+    return range(len(self.object.etapes))
+
+  def GetSubList(self):
+    sublist=[]
+    for key in self.keys():
+      liste = self.object.etapes
+      try:
+        value = liste[key]
+      except KeyError:
+        continue
+      def setfunction(value, key=key, object=liste):
+        object[key] = value
+      item = self.make_objecttreeitem(self.appli,value.ident() + " : ", value, setfunction)
+      sublist.append(item)
+    return sublist
+
+  def verif_condition_bloc(self):
+      # retourne la liste des sous-items dont la condition est valide
+      # sans objet pour le JDC
+      return [],[]
+
+  def get_l_noms_etapes(self):
+      """ Retourne la liste des noms des étapes de self.object"""
+      return self.object.get_l_noms_etapes()
+
+class MacroDisplay:
+  def __init__(self,appli,jdc,nom_jdc):
+    self.fenetre = Tkinter.Toplevel()
+    self.fenetre.configure(width = 800,height=500)
+    self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+    self.fenetre.title("Visualisation Macro_Etape")
+    self.jdc=jdc
+    self.nom_jdc=nom_jdc
+    self.appli=appli
+    self.barre=Tkinter.Frame(self.fenetre,relief="ridge",bd=2)
+    self.barre.pack(expand=1,fill=Tkinter.X)
+    if self.jdc.fichier_text is not None:
+      b=Tkinter.Button(self.barre,image=images.get_image("Zoom24"),command=self.visufile)
+      b.pack(side='left')
+      tp=tooltip.TOOLTIP(b,"View file")
+    self.mainPart=Pmw.ScrolledCanvas(self.fenetre,
+                                     hull_width=600,
+                                     hull_height=500,
+                                     borderframe=1)
+    self.canvas=self.mainPart.component('canvas')
+    Pmw.Color.changecolor(self.canvas,background='gray95')
+    self.mainPart.pack(padx=10,pady=10,fill = 'both', expand = 1)
+    self.item=MACRO2TreeItem(self.appli,nom_jdc,jdc)
+    import treewidget
+    self.tree = treewidget.Tree(self.appli,self.item,self.mainPart,command=None,rmenu=self.make_rmenu)
+    self.tree.draw()
+
+  def visufile(self):
+    Fenetre(self.appli,titre="Source du fichier inclus",texte=self.jdc.fichier_text)
+
+  def make_rmenu(self,node,event):
+      if hasattr(node.item,'rmenu_specs'):
+         rmenu = Tkinter.Menu(self.canvas, tearoff=0)
+         self.cree_menu(rmenu,node.item.rmenu_specs,node)
+         rmenu.tk_popup(event.x_root,event.y_root)
+
+  def cree_menu(self,menu,itemlist,node):
+      """
+            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,node)
+            elif method[0] == '&':
+                 # On a une chaine avec & en tete => on cree un radiobouton
+                 try:
+                    command=getattr(node.item,method[1:])
+                    menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command:c(a))
+                    if radio == None:radio=number_item
+                 except:pass
+            else:
+                 try:
+                    command=getattr(node.item,method)
+                    menu.add_command(label=label,command=lambda a=self.appli,c=command:c(a))
+                 except:pass
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
+
+  def quit(self):
+    self.fenetre.destroy()
+
+def makeMacroDisplay(appli,jdc,nom_jdc):
+  return MacroDisplay(appli,jdc,nom_jdc)
+
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..61b142c9fabd22604aa7aa94cc737c1a311c26c3 100644 (file)
@@ -1,16 +1,33 @@
-#@ 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 tkMessageBox
+import time
 
 from widgets import ListeChoix
+from widgets import ListeChoixParGroupes
+import prefs
+import options
 
 SEPARATEUR = '-'*30
 
@@ -21,6 +38,9 @@ class Panel(Frame) :
   Elle est toujours dérivée.
   """
   def __init__(self,parent,panneau,node) :
+      # Le parent d'un panel est un objet de la classe JDCDISPLAY ou derivee
+      # ou un objet qui a les attributs : appli (de classe APPLI ou derivee),
+      # modified et la methode init_modif
       self.parent=parent
       self.panneau = panneau
       self.node=node
@@ -29,6 +49,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
@@ -149,10 +195,9 @@ class Panel(Frame) :
       """
       Suppression du noeud courant
       """
+      # On signale au parent du panel (le JDCDisplay) une modification 
       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 +209,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 +226,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):
       """
@@ -218,11 +261,24 @@ class OngletPanel(Panel) :
               self._any.focus()
           except:
               pass
+      elif page == 'Commande':
+          try:
+              self.command_entry.component('entry').focus()
+          except:
+              pass
+
 
   def affiche(self):
       page=self.nb.getcurselection()
       self.nb.page(page).focus_set()
-      if page == 'Concept':self._any.component('entry').focus_set()
+      if page == 'Concept':
+          try:
+#            _any est un pointeur sur entry
+#            component est une methode de pmw 
+#            a priori, jamais ok
+              self._any.component('entry').focus_set()
+          except:
+              pass
       self.tkraise()
 
 # ------------------------------------------------------------------------
@@ -248,7 +304,7 @@ class OngletPanel(Panel) :
       self._any.focus()
       # aide associée au panneau
       bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner
-      au concept retoruné par l'opérateur courant et pressez <Return> pour valider"""
+      au concept retounré par l'opérateur courant et pressez <Return> pour valider"""
       page.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
       page.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
         
@@ -280,18 +336,30 @@ 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()
+      self.command_entry=Liste.entry
       # aide associée au panneau
       bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes"""
       Liste.MCbox.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
@@ -301,11 +369,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"""
@@ -392,7 +468,6 @@ class OngletPanel(Panel) :
              command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center')
     
   def deselectMC(self,name):
-      #EFICAS.affiche_infos('')
       self.parent.appli.affiche_infos('')
     
   def get_liste_cmd_old(self):
@@ -404,7 +479,6 @@ class OngletPanel(Panel) :
       return listeCmd
 
   def deselectCmd(self,name):
-      #EFICAS.affiche_infos('')
       self.parent.appli.affiche_infos('')
     
   def execConcept(self):
@@ -421,7 +495,6 @@ class OngletPanel(Panel) :
       # Pourquoi node.etape ???
       #test,mess = self.node.etape.item.nomme_sd(nom)
       test,mess = self.node.item.nomme_sd(nom)
-      #EFICAS.affiche_infos(mess)
       self.parent.appli.affiche_infos(mess)
       self.node.racine.update()
   
@@ -432,10 +505,14 @@ class OngletPanel(Panel) :
     """
     Cette méthode a pour but de commentariser la commande pointée par self.node
     """
-    commande_comment = self.node.item.get_objet_commentarise()
-    #XXX il faudrait ici aussi eviter l'appel à EFICAS
-    self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None)
-    #EFICAS.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None)
+    # On traite par une exception le cas où l'utilisateur final cherche à désactiver
+    # (commentariser) un commentaire.
+    try :
+        commande_comment = self.node.item.get_objet_commentarise()
+        self.parent.appli.bureau.JDCDisplay_courant.ReplaceObjectNode(self.node,commande_comment,None)
+    except Exception,e:
+        tkMessageBox.showerror("TOO BAD",str(e))
+    return
       
 class Panel_Inactif(Panel):
   """
@@ -463,3 +540,4 @@ class Panel_Inactif(Panel):
       self.bouton_sup.place(relx=0.5,rely=0.8,anchor='center')
 
 
+if __name__ == "__main__" : pass
diff --git a/Editeur/patches.py b/Editeur/patches.py
new file mode 100644 (file)
index 0000000..fd67411
--- /dev/null
@@ -0,0 +1,87 @@
+#            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 modifications mineures du comportement
+   du noyau ou de validation
+"""
+import string
+
+if 1:
+   # Modification de la fonction justify_text de Noyau.N_CR
+   separateurs=(' ',',','/')
+   def split(ligne,cesure):
+       ligne= string.rstrip(ligne)
+       if len(ligne) <= cesure : 
+          return ligne
+       else:
+          coupure=cesure
+          while ligne[coupure] not in separateurs and coupure > 0:
+             coupure = coupure - 1
+          if coupure == 0:
+             # Il faut augmenter la cesure
+             coupure =cesure
+             while ligne[coupure] not in separateurs and coupure < len(ligne)-1 :
+                coupure = coupure + 1
+          if coupure == len(ligne)-1:
+             return ligne
+          else:
+             return ligne[:coupure+1]+ '\n' + split(ligne[coupure+1:],cesure)
+
+   def justify_text(texte='',cesure=50):
+       texte = string.strip(texte)
+       liste_lignes = string.split(texte,'\n')
+       l=[split(l,cesure) for l in liste_lignes]
+       texte_justifie=string.join(l,'\n')
+       return texte_justifie
+   try:
+      import Noyau.N_CR
+      Noyau.N_CR.justify_text=justify_text
+   except:
+      pass
+
+def encadre_message(texte,motif):
+  """
+     Retourne la chaine de caractères texte entourée d'un cadre formés
+     d'éléments 'motif'
+  """
+  texte = justify_text(texte,cesure=80)
+  lignes = string.split(texte,'\n')
+  longueur = 0
+  for ligne in lignes :
+    if len(ligne)> longueur : longueur = len(ligne)
+  longueur = longueur + 4
+  txt = motif*longueur+'\n'
+  for ligne in lignes :
+    txt = txt + motif + ' '+ligne+' '*(longueur-len(motif+ligne)-2)+motif+'\n'
+  txt = txt + motif*longueur+'\n'
+  return txt
+
+if __name__ == "__main__":
+   print encadre_message(motif='!',
+texte="""- Il faut au moins un mot-clé parmi : ('DEBUT', 'POURSUITE')     
+- Il faut au moins un mot-clé parmi : ('FIN',)               
+- Il faut qu'au moins un objet de la liste : ('DEBUT', 'POURSUITE') soit suivi d'au moins un objet de la liste : ('FIN',) 
+ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,yyyyyyyyyyyyyyyy
+""")
+
+
+
index 47667a09bb71911e3851bdb139a94ba91d2cd5fb..68e4aaa917f5e032b54abfcf2af04afed88c25f1 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):
       """ 
@@ -51,6 +69,7 @@ class READERCATA:
       """
       message1 = "Compilation des fichiers Eficas \n\n Veuillez patienter ..."
       splash._splash.configure(text = message1)
+      self.configure_barre(4)
       if len(self.appli.CONFIGURATION.catalogues) == 1:
           self.fic_cata = self.appli.CONFIGURATION.catalogues[0][2]
           self.code = self.appli.CONFIGURATION.catalogues[0][0]
@@ -77,18 +96,40 @@ 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'
+
+      splash._splash.configure(text = "Debut compil cata: %d s" % time.clock())
       # compilation éventuelle du catalogue
       test = self.compile_cata(self.fic_cata,self.fic_cata_c)
+      self.update_barre()
+      splash._splash.configure(text = "Fin compil cata: %d s" % time.clock())
       if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata)
+
       # import du catalogue
+      splash._splash.configure(text = "Debut import_cata: %d s" % time.clock())
       self.cata = self.import_cata(self.fic_cata)
+      self.update_barre()
+      splash._splash.configure(text = "Fin import_cata: %d s" % 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()
+      #
+      splash._splash.configure(text = "Debut Retrouve_Ordre: %d s" % 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()
+      self.update_barre()
+      splash._splash.configure(text = "Fin Retrouve_Ordre: %d s" % time.clock())
+      #
+      # analyse des données liées à l'IHM : UIinfo
+      #
+      uiinfo.traite_UIinfo(self.cata)
+      self.update_barre()
+      #
       # 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 +142,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 +167,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 +197,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 +249,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)
@@ -201,7 +283,7 @@ class READERCATA:
           self.version_code = liste_choix[0]
           return
       # création d'une boîte de dialogue modale
-      self.fenetre_choix_cata = Pmw.Dialog(self.parent,
+      self.fenetre_choix_cata = Pmw.Dialog(splash._splash, #avec self.parent, ne marche pas sous Windows
                                            buttons=('OK','ANNULER'),
                                            defaultbutton = 'OK',
                                            title = "Choix d'une version du code %s" %self.code,
@@ -252,7 +334,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..abcab131b689c05870dfabd3e3547d5bdbf62fc7 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
@@ -27,52 +46,6 @@ class TOOLBAR:
       b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
       b.bind("<Leave>", self.efface_balloon)
 
-      #self.creer_boutons()
-
-  def creer_boutons(self):
-      self.l_boutons = (('New24',self.appli.newJDC,"Création d'un nouveau fichier",'always'),
-                        ('Open24',self.appli.openJDC,"Ouverture d'un fichier existant",'always'),
-                        ('Save24',self.appli.saveJDC,"Sauvegarde du fichier courant",'always'),
-                        ('Zoom24',self.appli.visuJDC,"Visualisation du fichier de commandes",'always'),
-                        None,
-                        ('Copy24',self.appli.copy,"Copie l'objet courant",'jdc'),
-                        ('Cut24',self.appli.cut,"Coupe l'objet courant",'jdc'),
-                        ('Paste24',self.appli.paste,"Colle l'objet copié après l'objet courant",'jdc'),
-                        None,
-                        ('Delete24',self.appli.delete,"Supprime l'objet courant",'jdc'),
-                        ('Help24',self.appli.view_doc,"Documentation de l'objet courant",'jdc')
-                        )
-      # liste des boutons à activer quand statut != 'always'
-      self.l_boutons_a_activer = [] 
-
-      for bouton in self.l_boutons :
-          if not bouton :
-              # on veut afficher un bouton vide (=espace entre boutons)
-              Button(self.barreboutons,
-                     image = images.get_image('New24'),
-                     relief = 'flat').pack(side='left')
-              continue
-          nom_fic,commande,texte,statut = bouton
-          b = Button(self.barreboutons,
-                     image = images.get_image(nom_fic),
-                     command = commande,
-                     relief='flat')
-          b.pack(side='left')
-          b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t))
-          b.bind("<Leave>", self.efface_balloon)
-          if statut != 'always':
-              self.l_boutons_a_activer.append(b)
-      # bouton Infos à l'extrême droite de la barre des boutons
-      b = Button(self.barreboutons,
-                 image = images.get_image('About24'),
-                 command = self.view_infos)
-      b.pack(side='right')
-      texte = "Infos EFICAS"
-      b.bind("<Enter>",lambda e,s=self,but=b,t=texte : s.affiche_balloon(e,but,t,pos='right'))
-      b.bind("<Leave>", self.efface_balloon)
-      # inactive les boutons qui doivent l'être tant qu'aucun JDC courant
-      self.inactive_boutons()
-
   def inactive_boutons(self):
       """
       Inactive les boutons de la liste self.l_boutons_a_activer
@@ -137,16 +110,17 @@ 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)
               Button(self.barreboutons,
-                     image = images.get_image('New24'),
+                     image = images.get_image('Sep'),
+                     state='disabled',
                      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..87bda661c07b40e18176a4d32e1d4d932a54f64e 100644 (file)
@@ -1,14 +1,55 @@
+#            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):
+    def __init__(self,widget,text=None):
         self.widget=widget
-        self.text = None
+        self.text = text
         self.timer = None
         self.tooltip = None
         self.label = None
@@ -76,3 +117,10 @@ class TOOLTIP:
         self.tooltip.wm_geometry("%+d%+d" % (x, y))
         self.tooltip.wm_deiconify()
 
+if __name__ == "__main__":
+   root=Tkinter.Tk()
+   label = Tkinter.Label(root, text="coucou")
+   label.pack()
+   tp=TOOLTIP(label,"texte d'aide")
+   root.mainloop()
+
index 5ec26438ba59c5c6d55ee64af3c6097b064e2daf..14ab086ea6c497375dd501cb3a7f1bfbadcfe1b7 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
@@ -8,7 +27,7 @@ import Objecttreeitem
 import treewidget
 
 class TREEITEMINCANVAS:
-   def __init__(self,object,nom="",parent=None,appli=None,sel=None):
+   def __init__(self,object,nom="",parent=None,appli=None,sel=None,rmenu=None):
       self.object=object
       self.nom=nom
 
@@ -25,14 +44,17 @@ 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):
             return
-      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel)
+      self.tree=treewidget.Tree(self.appli,self.item,self.canvas,command=sel,rmenu=rmenu)
       self.tree.draw()
 
    def mainloop(self):
       self.parent.mainloop()
 
+   def update(self):
+      """Cette methode est utilisee pour signaler une mise a jour des objets associes"""
+      self.tree.update()
index a0d6554eacc6172e053c382649c465fd5ada1c63..311189fe75d0fa6baf9935d65a903ffd127ba09e 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,14 +25,14 @@ 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.11 2003/03/07 16:17:12 eficas Exp $"
 #
 
 Fonte_Standard = fontes.standard
 
 class Tree :
-    def __init__(self,appli,jdc_item,scrolledcanvas,command = None):
+    def __init__(self,appli,jdc_item,scrolledcanvas,command = None,rmenu=None):
         self.item = jdc_item
         self.scrolledcanvas = scrolledcanvas
         self.canvas = self.scrolledcanvas.component('canvas')
@@ -28,14 +40,19 @@ class Tree :
         self.canvas.bind("<Key-Next>", self.page_down)
         self.canvas.bind("<Key-Up>", self.unit_up)
         self.canvas.bind("<Key-Down>", self.unit_down)             
+        self.canvas.bind("<1>", self.canvas_select)             
         self.tree = self
         self.command = command
+        self.rmenu=rmenu
         self.appli = appli
         self.parent = None
         self.racine = self
         self.node_selected = None
         self.build_children()
 
+    def canvas_select(self,event):
+        self.canvas.focus_set()
+
     def page_up(self,event):
         event.widget.yview_scroll(-1, "page")
     def page_down(self,event):
@@ -48,7 +65,7 @@ class Tree :
     def build_children(self):
         """ Construit la liste des enfants de self """
         self.children = []
-        child = Node(self,self.item,self.command)
+        child = Node(self,self.item,self.command,self.rmenu)
         self.children.append(child)
         child.state='expanded'
 
@@ -59,16 +76,9 @@ class Tree :
         for child in self.children:
             child.draw(x,lasty)
             lasty = child.lasty + 15
-            child.trace_ligne()
-        #self.update()
         self.children[0].select()
         self.resizescrollregion()
 
-    def deselectall_old(self):
-        """ déselectionne tous les éléments de l'arbre """
-        for child in self.children:
-            child.deselect()
-
     def deselectall(self):
         """ déselectionne tous les éléments de l'arbre """
         if self.node_selected :
@@ -79,8 +89,17 @@ class Tree :
         for child in self.children:
             child.update()
 
+    def update_valid(self) :
+        """Cette methode a pour but de mettre a jour la validite du noeud
+           et de propager la demande de mise à jour à son parent
+        """
+        pass
+
     def resizescrollregion(self):
-        self.scrolledcanvas.resizescrollregion()
+        x0,y0,x1,y1=self.canvas.bbox(ALL)
+        # On ajoute une marge approximativement de la moitié du canvas
+        y1=y1+self.canvas.winfo_height()/2
+        self.canvas.configure(scrollregion = (x0,y0,x1,y1))
 
     def select_next(self,event):
         self.node_selected.select_next()
@@ -95,17 +114,42 @@ class Tree :
     def verif_all(self):
         for child in self.children :
             self.verif_all_children()
+
+    def see(self,items):
+        x1, y1, x2, y2=apply(self.canvas.bbox, items)
+        while x2 > self.canvas.canvasx(0)+self.canvas.winfo_width():
+            old=self.canvas.canvasx(0)
+            self.canvas.xview_scroll( 1, 'units')
+            # avoid endless loop if we can't scroll
+            if old == self.canvas.canvasx(0):
+                break
+        while y2 > self.canvas.canvasy(0)+self.canvas.winfo_height():
+            old=self.canvas.canvasy(0)
+            self.canvas.yview_scroll( 1, 'units')
+            if old == self.canvas.canvasy(0):
+                break
+        # done in this order to ensure upper-left of object is visible
+        while x1 < self.canvas.canvasx(0):
+            old=self.canvas.canvasx(0)
+            self.canvas.xview_scroll( -1, 'units')
+            if old == self.canvas.canvasx(0):
+                break
+        while y1 < self.canvas.canvasy(0):
+            old=self.canvas.canvasy(0)
+            self.canvas.yview_scroll( -1, 'units')
+            if old == self.canvas.canvasy(0):
+                break
             
 class Node :
-    def __init__(self,parent,item,command=None):
+    def __init__(self,parent,item,command=None,rmenu=None):
         self.parent = parent
         self.item = item
         self.command = command
+        self.rmenu=rmenu
         self.tree = self.parent.tree
         self.appli = self.parent.appli
         self.canvas = self.parent.canvas
         self.init()
-        #self.build_children()
 
     def init(self):
         self.state='collapsed'
@@ -139,7 +183,7 @@ class Node :
         sublist = self.item._GetSubList()
         if not sublist : return
         for item in sublist :
-            child = Node(self,item,self.command)
+            child = Node(self,item,self.command,self.rmenu)
             self.children.append(child)
             
     #-----------------------------------------------
@@ -157,16 +201,7 @@ class Node :
         self.tree.node_selected = self
         if self.command:apply(self.command,(self,))
         self.highlight()
-        self.canvas.focus_force()
-        #self.make_visible()
-
-    def deselect_old(self, event=None):
-        """ Déselectionne self """
-        self.selected = 0
-        if self.displayed == 1:
-            self.dehighlight()
-        for child in self.children:
-            child.deselect()
+        self.make_visible()
 
     def deselect(self, event=None):
         """ Déselectionne self """
@@ -175,9 +210,10 @@ class Node :
             
     def make_visible(self):
         """ Rend l'objet self visible cad déplace le scroll pour que self soit dans
-        la fenêtre de visu"""
-        x0,y0,x1,y1 = self.canvas.bbox(ALL)
-        self.canvas.yview("moveto",self.y/y1)
+            la fenêtre de visu
+        """
+        lchild=self.last_child()
+        self.tree.see((self.image_id,lchild.image_id))
         
     def select_next(self,ind=0):
         """ on doit chercher à sélectionner dans l'ordre:
@@ -208,6 +244,15 @@ class Node :
             self.parent.children[index].select()
         except:
             self.parent.select()
+
+    def popup(self,event=None):
+        """
+            Declenche le traitement associé au clic droit de la souris
+            sur l'icone du Node
+        """
+        if not self.rmenu:return
+        apply(self.rmenu,(self,event))
+
     #-----------------------------------------------
     # Méthodes de recherche d'informations
     #-----------------------------------------------
@@ -273,6 +318,7 @@ class Node :
         if image != None :
             self.image_id = self.canvas.create_image(self.x+15,self.y,image = image)
             self.canvas.tag_bind(self.image_id,"<1>",self.select)
+            self.canvas.tag_bind(self.image_id,"<3>",self.popup)
             self.id.append(self.image_id)
         else:
             self.image_id = None
@@ -292,6 +338,7 @@ class Node :
             child.draw(x,y)
             nb = child.get_nb_children()
             y = y + 20*(nb+1)
+        self.trace_ligne()
 
     def drawtext(self):
         """ Affiche les deux zones de texte après l'icône de couleur de l'objet """
@@ -315,6 +362,7 @@ class Node :
         self.id.append(self.label_id)
         # bindings sur le widget label
         self.label.bind("<1>", self.select)
+        self.label.bind("<3>", self.popup)
         self.label.bind("<Enter>",self.enter)
         self.label.bind("<Leave>",self.leave)
         # valeur de cet objet à afficher
@@ -366,26 +414,17 @@ class Node :
         nb = self.get_nb_children()
         self.state = 'collapsed'
         self.collapse_children()
-        self.efface()
-        try:
-            self.move(-20*nb)
-        except:
-            pass
-        self.draw(self.x,self.y)
+        self.redraw(-nb)
         self.select()
-        self.update()
-
+   
     def expand(self,event = None):
         """ Expanse self et le retrace """
         if not self.item.isactif() : return
         if not self.children : self.build_children()
         self.state = 'expanded'
         nb = self.get_nb_children()
-        self.move(20*nb)
-        self.efface()
-        self.draw(self.x,self.y)
+        self.redraw(nb)
         self.select()
-        self.update()
 
     def redraw(self,nb):
         """ Redessine self :  nb est le décalage à introduire
@@ -395,7 +434,12 @@ class Node :
         # on efface self et on le redessine
         self.efface()
         self.draw(self.x,self.y)
-        self.update()
+        # Il n'est pas nécessaire d'appeler update
+        # il suffit d'updater les coordonnees et de retracer les lignes
+        self.racine.update_coords()
+        self.racine.trace_ligne()
+        self.update_valid()
+        self.tree.resizescrollregion()
         
     def update_coords(self):
         """ Permet d'updater les coordonnes de self et de tous ses enfants"""
@@ -432,6 +476,15 @@ class Node :
             for child in self.children:
                 if child.displayed != 0 : child.update_texte()
         
+    def update_valid(self) :
+        """Cette methode a pour but de mettre a jour la validite du noeud
+           et de propager la demande de mise à jour à son parent
+        """
+        if self.image_id != None :
+            image = self.geticonimage()
+            self.canvas.itemconfig(self.image_id,image=image)
+        self.parent.update_valid()
+
     def update(self,event=None) :
         """ Classe Node :
             Cette méthode est appelée pour demander l update d un noeud 
@@ -468,6 +521,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
@@ -476,8 +530,6 @@ class Node :
             print 'dy=',dy
         # on déplace tous les items de dy
         self.canvas.move('move',0,dy)
-        # il faut réactualiser la zone de scroll
-        self.tree.resizescrollregion()
 
     def trace_ligne(self):
         """ Dessine les lignes verticales entre frères et entre père et premier fils"""
@@ -493,22 +545,16 @@ class Node :
             try:
                 child.trace_ligne()
             except:
+               print "Erreur dans trace_ligne :"
                 print child
                 print child.item.object
 
-    def make_visible_OBSOLETE(self,nb):
-        """ Cette méthode a pour but de rendre le noeud self (avec tous ses descendants
-        affichés) visible dans le canvas """
-        x = self.canvas.canvasx(self.canvas.cget('width'))
-        y = self.canvas.canvasy(self.canvas.cget('height'))
-        #print 'x,y =',x,y
-        x0,y0,x1,y1 = self.canvas.bbox(ALL)
-        #print 'x0,y1=',x0,y1
-        y_deb = self.y
-        nb = self.get_nb_children()
-        y_fin = y_deb + 20*nb
-        #print 'y_deb,y_fin=',y_deb,y_fin
-        
+    def last_child(self):
+        lchild=self
+        if self.state == 'expanded' and self.children:
+           lchild= self.children[-1].last_child()
+        return lchild
+
     #------------------------------------------------------------------
     # Méthodes de création et destruction de noeuds
     # Certaines de ces méthodes peuvent être appelées depuis l'externe
@@ -521,30 +567,32 @@ 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 :
             # un fils de même nom existe déjà : on remplace
             # un MCFACT (ou une MCList) par une (autre) MCList
-            child = Node(self,item,self.command)
+            child = Node(self,item,self.command,self.rmenu)
             self.replace_node(enfant,child)
         else :            
-            child = Node(self, item,self.command)
+            child = Node(self, item,self.command,self.rmenu)
             if pos is None:
                 self.children.append(child)
             else :
@@ -576,7 +624,6 @@ class Node :
         """
         if not self.children : self.build_children()
         if pos == None :
-            #pos = len(self.children)
             if type(fils) == types.InstanceType:
                 pos = self.item.get_index_child(fils.nom)
             else:
@@ -585,10 +632,12 @@ class Node :
         if child == 0 :
             # on n'a pas pu créer le noeud fils
             return 0
-        child.displayed = 1
         self.state = 'expanded'
+        child.displayed = 1
+        if child.item.isactif():
+           child.state = 'expanded'
+        if not child.children : child.build_children()
         if verif == 'oui':
-            if not child.children : child.build_children()
             test = child.item.isMCList()
             if test :
                 child.children[-1].verif_condition()
@@ -611,6 +660,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)
@@ -625,8 +677,6 @@ class Node :
         nbnew = self.get_nb_children()
         self.redraw(nbnew-nbold)
         child.select()
-        child.expand()
-        #child.make_visible()
         if retour == 'oui': return child
 
     def delete_node_child(self,child):
@@ -676,6 +726,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 +741,17 @@ 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 +762,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 +771,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..1d648f27f6cdc1731ea54d5b82eafa150227b626 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
@@ -73,6 +85,7 @@ class Fenetre :
 
     def wait(self):
         self.fenetre.grab_set()
+        self.zone_texte.focus_set()
         self.fenetre.wait_window(self.fenetre)
 
     def quit(self):
@@ -98,7 +111,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) :
@@ -108,194 +122,238 @@ class Fenetre :
             else:
                 showinfo("Sauvegarde effectuée","Sauvegarde effectuée dans le fichier %s" %file)
 
+class FenetreYesNo(Fenetre):
+    def __init__(self,appli,titre="",texte="",yes="Yes",no="No"):
+        self.appli=appli
+        self.fenetre = Toplevel()
+        self.fenetre.configure(width = 800,height=500)
+        self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
+        self.fenetre.title(titre)
+        self.texte = string.replace(texte,'\r\n','\n')
+        self.titre = titre
+        fonte=fontes.standardcourier10
+        # définition des frames
+        self.frame_texte = Frame(self.fenetre)
+        self.frame_boutons = Frame(self.fenetre)
+        self.frame_boutons.place(relx=0,rely=0,    relwidth=1.,relheight=0.1)
+        self.frame_texte.place(  relx=0,rely=0.1,  relwidth=1, relheight=0.9)
+        # définition de la zone texte et du scrollbar
+        self.zone_texte = Text(self.frame_texte,font=fonte)
+        self.zone_texte.bind("<Key-Prior>", self.page_up)
+        self.zone_texte.bind("<Key-Next>", self.page_down)
+        self.zone_texte.bind("<Key-Up>", self.unit_up)
+        self.zone_texte.bind("<Key-Down>", self.unit_down)
+        self.scroll_v = Scrollbar (self.frame_texte,command = self.zone_texte.yview)
+        #self.scroll_h = Scrollbar (self.frame_texte,command = self.zone_texte.xview)
+        self.scroll_v.pack(side='right',fill ='y')
+        #self.scroll_h.pack(side='bottom',fill ='x')
+        self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10)
+        self.zone_texte.configure(yscrollcommand=self.scroll_v.set)
+        # définition des boutons
+        self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes)
+        self.but_no = Button(self.frame_boutons,text = no,command = self.no)
+        self.but_yes.place(relx=0.4,rely=0.5,anchor='center')
+        self.but_no.place(relx=0.6,rely=0.5,anchor='center')
+        # affichage du texte
+        self.affiche_texte(self.texte)
+        centerwindow(self.fenetre)
+
+    def yes(self):
+        self.result=1
+        self.quit()
+
+    def no(self):
+        self.result=0
+        self.quit()
+
 class FenetreDeSelection(Fenetre):
-    """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée.\r
-        Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.\r
-    """\r
-    def __init__(self,panel,item,appli,titre="",texte=""):\r
-        Fenetre.__init__(self,appli,titre=titre,texte=texte)\r
-        self.fenetre.configure(width = 320,height=400)\r
+    """ Classe dérivée de Fenêtre permettant la récupération d'une zone de texte sélectionnée.
+        Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.
+    """
+    def __init__(self,panel,item,appli,titre="",texte=""):
+        Fenetre.__init__(self,appli,titre=titre,texte=texte)
+        self.fenetre.configure(width = 320,height=400)
         centerwindow(self.fenetre)
         self.panel = panel
         self.item = item
         self.fenetre.title(titre)
-        self.but_save.configure(text="Ajouter",command=self.traite_selection)\r
-        # séparateur par défaut\r
-        self.separateur = ";"\r
-        # création de la zone de saisie du séparateur\r
-        l_separateurs_autorises = self.get_separateurs_autorises()\r
-        self.choix_sep = Pmw.ComboBox(self.frame_boutons,\r
-                                      label_text = "Séparateur :",\r
-                                      labelpos = 'w',\r
-                                      listheight = 100,\r
-                                      selectioncommand = self.choose_separateur,\r
-                                      scrolledlist_items = l_separateurs_autorises)\r
-        self.choix_sep.component('entry').configure(width=6)\r
-        self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')\r
-        self.choix_sep.selectitem(self.separateur)\r
-        # Replacement\r
-        self.but_quit.place_forget()\r
-        self.but_save.place_forget()\r
-        self.but_save.place(relx=0.6,rely=0.5,anchor='center')\r
-        self.but_quit.place(relx=0.8,rely=0.5,anchor='center')\r
-\r
-    def get_separateurs_autorises(self):\r
-        """\r
-        Retourne la liste des séparateurs autorisés\r
-        """\r
-        return ['espace',';',',']\r
-\r
-    def choose_separateur(self,nom_sep):\r
-        """\r
-        Affecte à self.separateur le caractère séparateur correspondant à nom_sep\r
-        """\r
-        if nom_sep == 'espace' :\r
-            self.separateur = ' '\r
-        else:\r
-            self.separateur = nom_sep\r
-        \r
-    def traite_selection(self):\r
-        """ Cette méthode effectue tous les traitements nécessaires pour vérifier\r
-            et affecter la liste de valeurs à l'objet réprésenté par self.item\r
-        """\r
-        # Récupère la liste des chaines de caractères de la zone sélectionnée\r
-        message,liste = self.recupere_liste()\r
-        if self.test_probleme(message,"Sélectionnez des données") == 0:\r
-            return\r
-        # Vérifie que le nombre de données est dans les limites attendues\r
-        message = self.verif_liste(liste)\r
-        if self.test_probleme(message,"Vérifiez le nombre de données") == 0:\r
-            return\r
-        # Crée une liste de valeurs du type attendu\r
-        message,liste_valeurs = self.creation_liste_valeurs(liste)\r
-        if self.test_probleme(message,"Vérifiez le type des données") == 0:\r
-            return\r
-        # Vérifie que chaque valeur est dans le domaine exigé\r
-        message = self.verif_valeurs(liste_valeurs)\r
-        if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:\r
-            return\r
-        # Ajoute les valeurs dans la liste de valeurs du mot-clé\r
-        self.ajouter_valeurs(liste_valeurs)\r
-        self.appli.affiche_infos("Liste de valeurs acceptée")\r
-\r
-    def test_probleme(self, message, message_eficas):\r
-        """ Cette méthode affiche un message d'erreur si message != ''\r
-            et retourne 0, sinon retourne 1 sans rien afficher.\r
-        """\r
-        if message != "":\r
-            showinfo("Problème",message)\r
-            self.fenetre.tkraise()\r
-            self.appli.affiche_infos(message_eficas)\r
-            return 0\r
-        else:\r
-            return 1\r
-\r
-    def recupere_liste(self):\r
-        """ Cette méthode récupère le texte de la zone sélectionnée, construit et\r
-            retourne une liste avec les chaines qui se trouvent entre les séparateurs.\r
-            S'il n'y a pas de données selectionnées, elle retourne un message d'erreur\r
-            et une liste vide.\r
-        """\r
-        message = ""\r
-        try:\r
-            selection=self.fenetre.selection_get()\r
-        except:\r
-            message = "Pas de donnée sélectionnée"\r
-            return message,None\r
-        # les retours chariots doivent être interprétés comme des séparateurs\r
-        selection = string.replace(selection,'\n',self.separateur)\r
-        # on splitte la sélection suivant le caractère séparateur\r
-        liste_chaines = string.split(selection,self.separateur)\r
-        l_chaines = []\r
-        for chaine in liste_chaines:\r
-            chaine = string.strip(chaine)\r
-            if chaine != '' : l_chaines.append(chaine)\r
-        return message,l_chaines\r
-\r
-    def verif_liste(self, liste):\r
-        """ Cette méthode effectue des tests sur le nombre d'éléments de la liste\r
-            et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur\r
-            correspondant.\r
-        """\r
-        message = ""\r
-        # nombre d'éléments sélectionnés\r
-        nombre_elements = len(liste)\r
-        # nombre d'éléments déja dans la liste du panel\r
-        nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())\r
-        multiplicite = self.item.GetMultiplicite()\r
-        if (nombre_elements % multiplicite) != 0:\r
-            message = "Vous devez sélectionner "+str(multiplicite)+" * n données"\r
-            return message\r
-        nombre_valeurs = nombre_elements / multiplicite\r
-        cardinalite = self.item.GetMinMax()\r
-        if nombre_valeurs < cardinalite[0]:\r
-            message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"\r
-            return message\r
-        if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):\r
-            message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"\r
-            return message\r
-\r
-        return message\r
-\r
-    def creation_liste_valeurs(self, liste):\r
-        """ Cette méthode crée et retourne une liste de valeurs du type attendu\r
-            par le mot-clé. La liste de valeurs est créée à partir de la liste\r
-            de chaines de caractères transmise.\r
-        """\r
-        type_attendu = self.item.GetType()[0]\r
-        if type_attendu == 'R':\r
-            return self.convertir(liste, f_conversion= float)\r
-        elif type_attendu == 'I':\r
-            return self.convertir(liste, f_conversion= int)\r
-        elif type_attendu == 'TXM':\r
-            return self.convertir(liste)\r
-        else:\r
-            message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"\r
-            return message,None\r
-\r
-    def convertir(self, liste, f_conversion=None):\r
-        """ Cette méthode essaie de convertir les éléments de la liste avec la\r
-            fonction f_conversion si elle existe, et retourne la liste des\r
-            éléments dans le type voulu en cas de succès, sinon retourne None.\r
-        """\r
-        liste_valeurs = []\r
-        message = ""\r
-        for chaine in liste:\r
-            if f_conversion:\r
-                try:\r
-                    liste_valeurs.append(f_conversion(chaine))\r
-                except:\r
-                    message = "Impossible de convertir "+chaine+" dans le type attendu"\r
-                    return message,None\r
-            else:\r
-                liste_valeurs.append(chaine)\r
-        return message,liste_valeurs\r
-\r
-    def verif_valeurs(self, liste_valeurs):\r
-        """ Cette méthode teste tous les éléments de la liste, et retourne 1 si chaque\r
-            élément est dans le domaine voulu.\r
-        """\r
-        message = ""\r
-        for valeur in liste_valeurs:\r
-            test = self.item.IsInIntervalle(valeur)\r
-            if test == 0:\r
-                intervalle = str(self.item.GetIntervalle()[0])+","+str(self.item.GetIntervalle()[1])\r
-                message = "La valeur "+str(valeur)+" n'est pas dans l'intervalle ["+intervalle+"]"\r
-                return message\r
-        return message\r
-\r
-    def ajouter_valeurs(self, liste_valeurs):\r
-        """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""\r
-        liste = self.panel.Liste_valeurs.get_liste()\r
-        liste.extend(liste_valeurs)\r
+        self.but_save.configure(text="Ajouter",command=self.traite_selection)
+        # séparateur par défaut
+        self.separateur = ";"
+        # création de la zone de saisie du séparateur
+        l_separateurs_autorises = self.get_separateurs_autorises()
+        self.choix_sep = Pmw.ComboBox(self.frame_boutons,
+                                      label_text = "Séparateur :",
+                                      labelpos = 'w',
+                                      listheight = 100,
+                                      selectioncommand = self.choose_separateur,
+                                      scrolledlist_items = l_separateurs_autorises)
+        self.choix_sep.component('entry').configure(width=6)
+        self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')
+        self.choix_sep.selectitem(self.separateur)
+        # Replacement
+        self.but_quit.place_forget()
+        self.but_save.place_forget()
+        self.but_save.place(relx=0.6,rely=0.5,anchor='center')
+        self.but_quit.place(relx=0.8,rely=0.5,anchor='center')
+
+    def get_separateurs_autorises(self):
+        """
+        Retourne la liste des séparateurs autorisés
+        """
+        return ['espace',';',',']
+
+    def choose_separateur(self,nom_sep):
+        """
+        Affecte à self.separateur le caractère séparateur correspondant à nom_sep
+        """
+        if nom_sep == 'espace' :
+            self.separateur = ' '
+        else:
+            self.separateur = nom_sep
+        
+    def traite_selection(self):
+        """ Cette méthode effectue tous les traitements nécessaires pour vérifier
+            et affecter la liste de valeurs à l'objet réprésenté par self.item
+        """
+        # Récupère la liste des chaines de caractères de la zone sélectionnée
+        message,liste = self.recupere_liste()
+        if self.test_probleme(message,"Sélectionnez des données") == 0:
+            return
+        # Vérifie que le nombre de données est dans les limites attendues
+        message = self.verif_liste(liste)
+        if self.test_probleme(message,"Vérifiez le nombre de données") == 0:
+            return
+        # Crée une liste de valeurs du type attendu
+        message,liste_valeurs = self.creation_liste_valeurs(liste)
+        if self.test_probleme(message,"Vérifiez le type des données") == 0:
+            return
+        # Vérifie que chaque valeur est dans le domaine exigé
+        message = self.verif_valeurs(liste_valeurs)
+        if self.test_probleme(message,"Vérifiez le domaine des valeurs") == 0:
+            return
+        # Ajoute les valeurs dans la liste de valeurs du mot-clé
+        self.ajouter_valeurs(liste_valeurs)
+        self.appli.affiche_infos("Liste de valeurs acceptée")
+
+    def test_probleme(self, message, message_eficas):
+        """ Cette méthode affiche un message d'erreur si message != ''
+            et retourne 0, sinon retourne 1 sans rien afficher.
+        """
+        if message != "":
+            showinfo("Problème",message)
+            self.fenetre.tkraise()
+            self.appli.affiche_infos(message_eficas)
+            return 0
+        else:
+            return 1
+
+    def recupere_liste(self):
+        """ Cette méthode récupère le texte de la zone sélectionnée, construit et
+            retourne une liste avec les chaines qui se trouvent entre les séparateurs.
+            S'il n'y a pas de données selectionnées, elle retourne un message d'erreur
+            et une liste vide.
+        """
+        message = ""
+        try:
+            selection=self.fenetre.selection_get()
+        except:
+            message = "Pas de donnée sélectionnée"
+            return message,None
+        # les retours chariots doivent être interprétés comme des séparateurs
+        selection = string.replace(selection,'\n',self.separateur)
+        # on splitte la sélection suivant le caractère séparateur
+        liste_chaines = string.split(selection,self.separateur)
+        l_chaines = []
+        for chaine in liste_chaines:
+            chaine = string.strip(chaine)
+            if chaine != '' : l_chaines.append(chaine)
+        return message,l_chaines
+
+    def verif_liste(self, liste):
+        """ Cette méthode effectue des tests sur le nombre d'éléments de la liste
+            et retourne 1 si la liste est correcte, sinon 0 et le message d'erreur
+            correspondant.
+        """
+        message = ""
+        # nombre d'éléments sélectionnés
+        nombre_elements = len(liste)
+        # nombre d'éléments déja dans la liste du panel
+        nombre_in_liste = len(self.panel.Liste_valeurs.get_liste())
+        multiplicite = self.item.GetMultiplicite()
+        if (nombre_elements % multiplicite) != 0:
+            message = "Vous devez sélectionner "+str(multiplicite)+" * n données"
+            return message
+        nombre_valeurs = nombre_elements / multiplicite
+        cardinalite = self.item.GetMinMax()
+        if nombre_valeurs < cardinalite[0]:
+            message = "Vous devez sélectionner au moins "+str(cardinalite[0])+" valeurs"
+            return message
+        if cardinalite[1] != "**" and nombre_valeurs > (long(cardinalite[1])-nombre_in_liste):
+            message = "La liste ne peut avoir plus de "+str(cardinalite[1])+" valeurs"
+            return message
+
+        return message
+
+    def creation_liste_valeurs(self, liste):
+        """ Cette méthode crée et retourne une liste de valeurs du type attendu
+            par le mot-clé. La liste de valeurs est créée à partir de la liste
+            de chaines de caractères transmise.
+        """
+        type_attendu = self.item.GetType()[0]
+        if type_attendu == 'R':
+            return self.convertir(liste, f_conversion= float)
+        elif type_attendu == 'I':
+            return self.convertir(liste, f_conversion= int)
+        elif type_attendu == 'TXM':
+            return self.convertir(liste)
+        else:
+            message = "Seuls les entiers, les réels et les chaines de caractères sont convertis"
+            return message,None
+
+    def convertir(self, liste, f_conversion=None):
+        """ Cette méthode essaie de convertir les éléments de la liste avec la
+            fonction f_conversion si elle existe, et retourne la liste des
+            éléments dans le type voulu en cas de succès, sinon retourne None.
+        """
+        liste_valeurs = []
+        message = ""
+        for chaine in liste:
+            if f_conversion:
+                try:
+                    liste_valeurs.append(f_conversion(chaine))
+                except:
+                    message = "Impossible de convertir "+chaine+" dans le type attendu"
+                    return message,None
+            else:
+                liste_valeurs.append(chaine)
+        return message,liste_valeurs
+
+    def verif_valeurs(self, liste_valeurs):
+        """ Cette méthode teste tous les éléments de la liste, et retourne 1 si chaque
+            élément est dans le domaine voulu.
+        """
+        message = ""
+        for valeur in liste_valeurs:
+            test = self.item.IsInIntervalle(valeur)
+            if test == 0:
+                intervalle = str(self.item.GetIntervalle()[0])+","+str(self.item.GetIntervalle()[1])
+                message = "La valeur "+str(valeur)+" n'est pas dans l'intervalle ["+intervalle+"]"
+                return message
+        return message
+
+    def ajouter_valeurs(self, liste_valeurs):
+        """ Cette méthode ajoute les nouvelles valeurs à la liste existante."""
+        liste = self.panel.Liste_valeurs.get_liste()
+        liste.extend(liste_valeurs)
         self.panel.Liste_valeurs.put_liste(liste)
 
 class Formulaire:
-    """\r
+    """
     Cette classe permet de créer une boîte Dialog dans laquelle
-    on affiche un formulaire à remplir par l'utilisateur\r
+    on affiche un formulaire à remplir par l'utilisateur
     """
-    def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None):\r
+    def __init__(self,fen_pere,obj_pere=None,titre="",texte="",items=(),mode='query',commande=None):
         if items in ((),[]) : return
         self.items = items
         self.titre = titre
@@ -306,25 +364,25 @@ class Formulaire:
         self.command = commande
         self.display()
 
-    def display(self):\r
+    def display(self):
         self.init_validateurs()
         self.init_fenetre()
         self.init_texte()
         self.init_items_formulaire()
         self.fenetre.activate(geometry='centerscreenalways')
-\r
-    def init_validateurs(self):\r
-        """\r
-        Crée le dictionnaire des validateurs des objets reconnus par le formulaire\r
-        """\r
-        self.d_validateurs = {}\r
-        self.d_validateurs['rep']  = self.repvalidator\r
-        self.d_validateurs['file'] = self.filevalidator\r
-        self.d_validateurs['cata']= self.catavalidator\r
+
+    def init_validateurs(self):
+        """
+        Crée le dictionnaire des validateurs des objets reconnus par le formulaire
+        """
+        self.d_validateurs = {}
+        self.d_validateurs['rep']  = self.repvalidator
+        self.d_validateurs['file'] = self.filevalidator
+        self.d_validateurs['cata']= self.catavalidator
         
-    def init_fenetre(self):\r
-        """\r
-        Crée la fenêtre Dialog\r
+    def init_fenetre(self):
+        """
+        Crée la fenêtre Dialog
         """
         if self.mode == 'query':
             buttons=('Valider','Annuler')
@@ -340,118 +398,118 @@ class Formulaire:
                                   buttons=buttons,
                                   defaultbutton = defaultbutton,
                                   title = self.titre,
-                                  command = self.execute)\r
+                                  command = self.execute)
         self.fenetre.withdraw()
         
-    def init_texte(self):\r
-        """\r
-        Crée le label qui affiche le texte à l'intérieur du panneau\r
+    def init_texte(self):
         """
-        fonte=fontes.standard\r
-        fr_texte = Frame(self.fenetre.interior(),height=60)\r
+        Crée le label qui affiche le texte à l'intérieur du panneau
+        """
+        fonte=fontes.standard
+        fr_texte = Frame(self.fenetre.interior(),height=60)
         fr_texte.pack(side='top',fill='x',expand=1)
         Label(fr_texte,text = self.texte, font=fonte).place(relx=0.5,rely=0.5,anchor='center')
-\r
-    def init_items_formulaire(self):\r
-        """\r
-        Crée et affiche les items dans la boîte de dialogue\r
-        """\r
-        self.radiobut = 0\r
-        self.widgets = []\r
-        self.item_widgets = {}\r
-        length_maxi = 0\r
+
+    def init_items_formulaire(self):
+        """
+        Crée et affiche les items dans la boîte de dialogue
+        """
+        self.radiobut = 0
+        self.widgets = []
+        self.item_widgets = {}
+        length_maxi = 0
         for item in self.items:
-            if len(item[0])>length_maxi : length_maxi = len(item[0])\r
-        window = self.fenetre.interior()\r
-        for item in self.items :\r
-            label,nature,nom_var,defaut = item\r
-            # création de la frame\r
-            fr_item = Frame(window,height=40,width=700)\r
-            fr_item.pack(side='top',fill='x',expand=1)\r
-            # création du label\r
-            Label(fr_item,text = label).place(relx=0.05,rely=0.4)\r
+            if len(item[0])>length_maxi : length_maxi = len(item[0])
+        window = self.fenetre.interior()
+        for item in self.items :
+            label,nature,nom_var,defaut = item
+            # création de la frame
+            fr_item = Frame(window,height=40,width=700)
+            fr_item.pack(side='top',fill='x',expand=1)
+            # création du label
+            Label(fr_item,text = label).place(relx=0.05,rely=0.4)
             if nature in ('rep','file','cata'):
-                # création de l'entry\r
-                e_item = Entry(fr_item) \r
-                e_item.place(relx=0.5,rely=0.4,relwidth=0.45)\r
-                self.widgets.append(e_item)\r
-                self.item_widgets[item] = e_item\r
-                if defaut : e_item.insert(0,str(defaut))\r
-            elif nature == 'YesNo':\r
-                # création de la StringVar\r
-                var = StringVar()\r
-                setattr(self,'item_'+nom_var,var)\r
-                var.set(defaut)\r
-                # création du radiobouton\r
-                rb1 = Radiobutton(fr_item,text='OUI',variable=var,value='OUI')\r
-                rb2 = Radiobutton(fr_item,text='NON',variable=var,value='NON')\r
-                rb1.place(relx=0.65,rely=0.5,anchor='center')\r
-                rb2.place(relx=0.80,rely=0.5,anchor='center')\r
-                self.widgets.append((rb1,rb2))\r
-                self.item_widgets[item] = var\r
-        # détermination de la méthode à appliquer sur les boutons\r
-        if self.mode == 'query':\r
-            function = self.active\r
-        elif self.mode == 'display':\r
-            function = self.inactive\r
-        else:\r
-            return\r
-        # on applique la méthode sur les boutons (activation ou désactivation)    \r
-        for widget in self.widgets :\r
-            if type(widget) == types.TupleType:\r
-                for widg in widget :\r
-                    apply(function,(widg,),{})\r
-            else:\r
-                apply(function,(widget,),{})\r
-\r
-    def active(self,widget):\r
-        """\r
-        Active le widget passé en argument\r
-        """\r
-        widget.configure(state='normal',bg='white')\r
-\r
-    def inactive(self,widget):\r
-        """\r
-        Inactive le widget passé en argument\r
-        """\r
-        if not isinstance(widget,Radiobutton) :\r
-            widget.configure(state='disabled',bg='gray95')\r
-        else :\r
-            widget.configure(state='disabled')\r
-\r
-# --------------------------------------------------------------------------------\r
-#       Validateurs des noms de répertoire, de fichiers et de catalogues\r
-# --------------------------------------------------------------------------------\r
+                # création de l'entry
+                e_item = Entry(fr_item) 
+                e_item.place(relx=0.5,rely=0.4,relwidth=0.45)
+                self.widgets.append(e_item)
+                self.item_widgets[item] = e_item
+                if defaut : e_item.insert(0,str(defaut))
+            elif nature == 'YesNo':
+                # création de la StringVar
+                var = StringVar()
+                setattr(self,'item_'+nom_var,var)
+                var.set(defaut)
+                # création du radiobouton
+                rb1 = Radiobutton(fr_item,text='OUI',variable=var,value='OUI')
+                rb2 = Radiobutton(fr_item,text='NON',variable=var,value='NON')
+                rb1.place(relx=0.65,rely=0.5,anchor='center')
+                rb2.place(relx=0.80,rely=0.5,anchor='center')
+                self.widgets.append((rb1,rb2))
+                self.item_widgets[item] = var
+        # détermination de la méthode à appliquer sur les boutons
+        if self.mode == 'query':
+            function = self.active
+        elif self.mode == 'display':
+            function = self.inactive
+        else:
+            return
+        # on applique la méthode sur les boutons (activation ou désactivation)  
+        for widget in self.widgets :
+            if type(widget) == types.TupleType:
+                for widg in widget :
+                    apply(function,(widg,),{})
+            else:
+                apply(function,(widget,),{})
+
+    def active(self,widget):
+        """
+        Active le widget passé en argument
+        """
+        widget.configure(state='normal',bg='white')
+
+    def inactive(self,widget):
+        """
+        Inactive le widget passé en argument
+        """
+        if not isinstance(widget,Radiobutton) :
+            widget.configure(state='disabled',bg='gray95')
+        else :
+            widget.configure(state='disabled')
+
+# --------------------------------------------------------------------------------
+#       Validateurs des noms de répertoire, de fichiers et de catalogues
+# -------------------------------------------------------------------------------
 
     def repvalidator(self,text):
-        """\r
-        Teste si text peut faire référence à un répertoire ou non\r
-        Retourne 1 si valide, 0 sinon\r
-        """\r
+        """
+        Teste si text peut faire référence à un répertoire ou non
+        Retourne 1 si valide, 0 sinon
+        """
         return os.path.isdir(text),'Répertoire introuvable : %s' %text
 
     def filevalidator(self,text):
-        """\r
-        Teste si text peut faire référence à un fichier ou non\r
-        Retourne 1 si valide, 0 sinon\r
-        """\r
+        """
+        Teste si text peut faire référence à un fichier ou non
+        Retourne 1 si valide, 0 sinon
+        """
         return os.path.isfile(text),'Fichier introuvable : %s' %text
-\r
-    def catavalidator(self,text):\r
-        """\r
-        Teste si  text est un chemin d'accès valide à un catalogue\r
-        Retourne 1 si valide, 0 sinon\r
-        """\r
-        return os.path.isfile(text),"Catalogue introuvable : %s" %text\r
-\r
-# --------------------------------------------------------------------------------\r
-#       Méthodes callbacks des boutons et de fin\r
-# --------------------------------------------------------------------------------\r
+
+    def catavalidator(self,text):
+        """
+        Teste si  text est un chemin d'accès valide à un catalogue
+        Retourne 1 si valide, 0 sinon
+        """
+        return os.path.isfile(text),"Catalogue introuvable : %s" %text
+
+# --------------------------------------------------------------------------------
+#       Méthodes callbacks des boutons et de fin
+# --------------------------------------------------------------------------------
         
-    def execute(self,txt):\r
-        """\r
-        Cette commande est activée à chaque clic sur un bouton.\r
-        Redirige l'action sur la bonne méthode en fonction du bouton activé\r
+    def execute(self,txt):
+        """
+        Cette commande est activée à chaque clic sur un bouton.
+        Redirige l'action sur la bonne méthode en fonction du bouton activé
         """
         if txt == 'Valider':
             self.fini()
@@ -464,26 +522,26 @@ class Formulaire:
             print "Nom de bouton inconnu"
             self.quit()
 
-    def fini(self):\r
-        """\r
-        Commande qui termine le panneau et sauvegarde les nouvelles options\r
-        dans l'objet resultat (dictionnaire)\r
+    def fini(self):
+        """
+        Commande qui termine le panneau et sauvegarde les nouvelles options
+        dans l'objet resultat (dictionnaire)
         """
         dico={}
-        for item,widget in self.item_widgets.items():\r
-            nom_var = item[2]\r
+        for item,widget in self.item_widgets.items():
+            nom_var = item[2]
             type_var = item[1]
-            valeur = widget.get()\r
-            if self.d_validateurs.has_key(type_var):\r
-                test = self.d_validateurs[type_var](valeur)\r
-                if not test :\r
-                    # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode\r
-                    # sans tuer la fenêtre bien sûr\r
-                    widget.selection_range(0,END)\r
+            valeur = widget.get()
+            if self.d_validateurs.has_key(type_var):
+                test = self.d_validateurs[type_var](valeur)
+                if not test :
+                    # une entrée n'est pas valide --> on la met en surbrillance et on quitte la méthode
+                    # sans tuer la fenêtre bien sûr
+                    widget.selection_range(0,END)
                     return
             dico[nom_var] = valeur
         self.fenetre.destroy()    
-        self.resultat=dico\r
+        self.resultat=dico
         
     def quit(self):
         self.fenetre.destroy()
@@ -542,7 +600,7 @@ class ListeChoix :
 
     def affiche_liste(self):
         """ Affiche la liste dans la fenêtre"""
-        i=0
+        liste_labels=[]
         self.MCbox.config(state=NORMAL)
         self.MCbox.delete(1.0,END)
         for objet in self.liste :
@@ -554,13 +612,15 @@ 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,
                         text = mot,
                         fg = 'black',bg = 'gray95',justify = 'left')
           self.dico_labels[mot]=label
+          liste_labels.append(label)
           self.MCbox.window_create(END,
                                    window=label,
                                    stretch = 1)
@@ -569,12 +629,13 @@ class ListeChoix :
               label.bind(self.liste_commandes[0][0],lambda e,s=self,c=self.liste_commandes[0][1],x=objet,l=label : s.selectitem(x,l,c))
               label.bind(self.liste_commandes[1][0],lambda e,s=self,c=self.liste_commandes[1][1],x=objet,l=label : s.deselectitem(l,x,c))
               label.bind(self.liste_commandes[2][0],lambda e,s=self,c=self.liste_commandes[2][1],x=objet,l=label : s.chooseitem(x,l,c))
-          try :
-              self.liste_marques.index(i)
-              self.markitem(label)
-          except:
+
+        for marque in self.liste_marques:
+           try:
+              self.markitem(liste_labels[marque])
+           except:
               pass
-          i=i+1
+
         self.MCbox.config(state=DISABLED)
         self.selection = None
 
@@ -623,12 +684,16 @@ class ListeChoix :
     def get_liste_old(self):
         return self.liste
 
+    # PN attention à la gestion des paramétres
+    # cela retourne H = 1 , et ni H, ni 1
+    #            print repr(val)
+    #            print val.__class__.__name__
     def get_liste(self):
         l=[]
         for val in self.liste:
             try:
-                val = eval(val)
-                l.append(val)
+                v = eval(val)
+               l.append(v)
             except:
                 l.append(val)
         return l
@@ -690,9 +755,9 @@ class Affichage :
       self.progress.update()
 
 class Ask_Format_Fichier :
-    """\r
+    """
     Cette classe permet de créer une fenêtre Toplevel dans laquelle
-    on propose le choix du format de fichier de commandes à ouvrir\r
+    on propose le choix du format de fichier de commandes à ouvrir
     """
     def __init__(self,appli):
         self.fenetre = Toplevel()
@@ -806,3 +871,105 @@ 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"""
+        liste_labels=[]
+        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
+           liste_labels.append(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))
+
+        for marque in self.liste_marques:
+           try:
+              self.markitem(liste_labels[marque])
+           except:
+              pass
+
+        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 ad2da7b4d7c837febcf313c1f7f34daaf6afdd76..8cfbf9642c41ccfd38bde11e01b3dd5ee75c6825 100644 (file)
@@ -36,13 +36,13 @@ class Appli:
 
    def affiche_infos(self,message):
       self.statusbar.showtext(message)
-      print message
+      #print message
       return
 
    def efface_aide(self,event):
       return
 
    def affiche_aide(self,event,aide):
-      print aide
+      #print aide
       return
 
index 957bcab3351de448a251eb210a86a7e0580de7d2..94574a454e5efb3be7e3227caf6f8d13d7d2e3f5 100644 (file)
@@ -5,9 +5,11 @@
 import prefs
 
 import sys
-sys.path[:0]=['../..','../../Editeur','../../..']
+sys.path[:0]=['../..','../../Editeur','../../Aster' ]
+
+from Cata import cata_STA6
+cata=cata_STA6
 
-from Cata import cata
 from analyse_catalogue import analyse_catalogue
 
 from Appli import Appli
@@ -17,10 +19,12 @@ f=open('ahlv100a.comm','r')
 text=f.read()
 f.close()
 
-fic_cata="../../../Cata/cata.py"
+fic_cata="../../Aster/Cata/cata_STA6.py"
 cata_ordonne = analyse_catalogue(None,fic_cata)
+
 j=cata.JdC(procedure=text,cata=cata,nom="ahlv100a",
-            cata_ord_dico=cata_ordonne.dico)
+            cata_ord_dico=cata_ordonne.entites)
+
 j.compile()
 if not j.cr.estvide():
    print j.cr
index 380b75f0ac9b5fd31d71dc9f813bdd1e082133b0..d1f347e1f796fcf6e8d592306bf1506b7e26760c 100644 (file)
@@ -11,3 +11,7 @@ ICONDIR=os.path.join(REPINI,'../..','Editeur','icons')
 
 # INSTALLDIR sert à localiser faqs.txt et les modules Eficas
 #INSTALLDIR=os.path.join(REPINI,'..','Editeur')
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
diff --git a/Exemples/profile/prefs.py b/Exemples/profile/prefs.py
new file mode 100644 (file)
index 0000000..261ee3b
--- /dev/null
@@ -0,0 +1,88 @@
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+
+# 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'
+
+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'),
+                      ]
+              ),
+             ]
+           }
+
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..ae97d9512b7ea193ae867756d4d576b3acd0fbeb 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,8 @@ class COMMANDE_COMM:
         self.definition=self
         self.nom = ''
         self.niveau = self.parent.niveau
+        self.actif=1
+        self.state="unchanged"
         #self.appel = N_utils.callee_where(niveau=2)
         if reg=='oui' : self.register()
             
@@ -216,3 +230,22 @@ 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
+       
+    def control_sdprods(self,d):
+      """sans objet pour les commandes commentarisées"""
+      pass
index 733a20164431d0cb432afd1d93df6c62ee9aa67c..d36328c63de23e12866a6dbb101aaaa4bff1e143 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
@@ -25,6 +44,7 @@ class COMMENTAIRE :
     self.nom=''
     self.niveau = self.parent.niveau
     self.actif=1
+    self.state="unchanged"
     self.register()
 
   def register(self):
@@ -145,5 +165,22 @@ 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]
+
+  def control_sdprods(self,d):
+      """sans objet """
+      pass
 
index 31c7c20a3a2a9682790d94ca158fb60fffcdcf2d..fb109ec085b8ce07ee6b2f23ceb1ff32a9c60fe5 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):
 
@@ -17,6 +37,7 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
     self.etapes_niveaux = []
     self.dict_niveaux={}
     self.editmode = 0
+    self.state="undetermined"
     self.build_niveaux()
 
   def build_niveaux(self):
@@ -109,3 +130,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
diff --git a/Extensions/jdc_include.py b/Extensions/jdc_include.py
new file mode 100644 (file)
index 0000000..94ae32e
--- /dev/null
@@ -0,0 +1,106 @@
+#            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 JDC_INCLUDE qui sert a inclure
+   dans un jeu de commandes une partie de jeu de commandes
+   au moyen de la fonctionnalite INCLUDE ou INCLUDE_MATERIAU
+   Quand l'utilisateur veut inclure un fichier il faut versifier
+   que le jeu de commandes inclus est valide et compatible
+   avec le contexte avant et apres l'insertion
+"""
+from Accas import JDC,ASSD,AsException,JDC_CATA
+
+
+class JDC_POURSUITE(JDC):
+   def __init__(self,definition=None,procedure=None,cata=None,
+                     cata_ord_dico=None,parent=None,
+                     nom='SansNom',appli=None,context_ini=None,
+                     jdc_pere=None,etape_include=None,prefix_include=None,
+                     recorded_units=None,old_recorded_units=None,**args):
+
+      JDC.__init__(self, definition=definition,
+                         procedure=procedure,
+                         cata=cata,
+                         cata_ord_dico=cata_ord_dico,
+                         parent=parent,
+                         nom=nom,
+                         appli=appli,
+                         context_ini=context_ini,
+                         **args
+                         )
+      self.jdc_pere=jdc_pere
+      self.etape_include=etape_include
+      self.prefix_include=prefix_include
+      if recorded_units is not None:self.recorded_units=recorded_units
+      if old_recorded_units is not None:self.old_recorded_units=old_recorded_units
+
+   def NommerSdprod(self,sd,sdnom,restrict='non'):
+      """
+          Nomme la SD apres avoir verifie que le nommage est possible : nom
+          non utilise
+          Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
+          Si le nom est deja utilise, leve une exception
+          Met le concept créé dans le concept global g_context
+      """
+      if self.prefix_include:
+          if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom
+      o=self.sds_dict.get(sdnom,None)
+      if isinstance(o,ASSD):
+         raise AsException("Nom de concept deja defini : %s" % sdnom)
+
+      # Il faut verifier en plus que le jdc_pere apres l'etape etape_include
+      # ne contient pas deja un concept de ce nom
+      #if self.jdc_pere.get_sd_apres_etape(sdnom,etape=self.etape_include):
+         # Il existe un concept apres self => impossible d'inserer
+      #   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.sds_dict[sdnom]=sd
+      sd.nom=sdnom
+
+      # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
+      if restrict == 'non':
+         self.g_context[sdnom]=sd
+
+class JDC_INCLUDE(JDC_POURSUITE):
+   def active_etapes(self):
+      for e in self.etapes:
+         e.active()
+
+class JDC_CATA_INCLUDE(JDC_CATA):
+   class_instance=JDC_INCLUDE
+
+class JDC_CATA_POURSUITE(JDC_CATA):
+   class_instance=JDC_POURSUITE
+
+from Accas import AU_MOINS_UN,A_CLASSER
+
+JdC_include=JDC_CATA_INCLUDE(code='ASTER', execmodul=None)
+
+JdC_poursuite=JDC_CATA_POURSUITE(code='ASTER', execmodul=None,
+                                 regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                                           AU_MOINS_UN('FIN'),
+                                           A_CLASSER(('DEBUT','POURSUITE'),'FIN')
+                                          )
+                               )
+
+
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..3eff619cc6ddfca6c0eb0856bb09ffd40e445ed0 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,8 @@ class PARAMETRE :
     self.definition=self
     self.jdc = self.parent = CONTEXT.get_current_step()
     self.niveau=self.parent.niveau
+    self.actif=1
+    self.state='undetermined'
     self.register()
 
   def interprete_valeur(self,val):
@@ -249,7 +270,12 @@ class PARAMETRE :
     """
     return []
 
+  def verif_existence_sd(self):
+     pass
 
+  def control_sdprods(self,d):
+      """sans objet """
+      pass
 
 
 
index 73bf9bd6189b872f4b07b7f3b6d9b42064b97278..73228beeb235c5bbb3a89a73c3a9a80d7879f30b 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,8 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) :
     self.jdc = self.parent = CONTEXT.get_current_step()
     self.definition=self
     self.niveau = self.parent.niveau
+    self.actif=1
+    self.state='undetermined'
     # Ceci est-il indispensable ???
     #self.appel = N_utils.callee_where(niveau=2)
     self.register()
@@ -60,6 +81,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..5ccb189e1ae94296e2966777f6947f7b925c927f 100644 (file)
@@ -1,35 +1,51 @@
+#            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 sys
 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()
+      sdname=''
       if self.reuse != None:
         sdname= self.reuse.get_name()
       else:
-        sdname=self.sd.get_name()
+        if self.sd:sdname=self.sd.get_name()
       if string.find(sdname,'sansnom') != -1 or string.find(sdname,'SD_') != -1:
         # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
         return ''
@@ -45,7 +61,6 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       """
          Met l'état de l'étape à : modifié
          Propage la modification au parent
-         Si la fonction op_init existe, l'active
       """
       # Une action
       # doit etre realisée apres init_modif et la validite reevaluée
@@ -62,10 +77,10 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
           ex : INCLUDE et POURSUITE
       """
       if self.isvalid() :
-         if type(self.definition.op_init) == types.FunctionType :
-            apply(self.definition.op_init,(self,self.master.g_context))   
-      self.state = 'modified'
-    
+         d=self.parent.get_contexte_apres(self)
+      if self.parent:
+        self.parent.fin_modif()
+
    def nomme_sd(self,nom) :
       """
           Cette méthode a pour fonction de donner un nom (nom) au concept 
@@ -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):
       """ 
@@ -147,9 +190,9 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
           Il faut ajouter la sd si elle existe au contexte global du JDC
           et à la liste des sd
       """
+      if self.actif:return
       self.actif = 1
       if not self.sd : return
-      # XXX Pourquoi faut-il faire ce qui suit ??? par defaut les etapes sont actives
       try:
         self.jdc.append_sdprod(self.sd)
       except:
@@ -166,6 +209,31 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       self.jdc.del_sdprod(self.sd)
       self.jdc.delete_concept_after_etape(self,self.sd)
 
+   def control_sdprods(self,d):
+      """
+          Cette methode doit updater le contexte fournit par
+          l'appelant en argument (d) en fonction de sa definition
+          tout en verifiant que ses concepts produits ne sont pas 
+          deja definis dans le contexte
+      """
+      if type(self.definition.op_init) == types.FunctionType:
+        apply(self.definition.op_init,(self,d))
+      if self.sd:
+        if d.has_key(self.sd.nom):
+           # Le concept est deja defini
+           if self.reuse and self.reuse is d[self.sd.nom]:
+              # Le concept est reutilise : situation normale
+              pass
+           else:
+              # Redefinition du concept, on l'annule
+              #XXX on pourrait simplement annuler son nom pour conserver les objets
+              # l'utilisateur n'aurait alors qu'a renommer le concept (faisable??)
+              self.sd=self.reuse=self.sdnom=None
+              self.init_modif()
+        else:
+           # Le concept n'est pas defini, on peut updater d
+           d[self.sd.nom]=self.sd
+
    def supprime_sdprods(self):
       """ 
           Fonction:
@@ -174,8 +242,6 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
             Une procedure n'en a aucun
             Une macro en a en général plus d'un
       """
-      # XXX pour les macros il faudrait peut etre aussi 
-      #     supprimer les concepts a droite du = ???
       if not self.is_reentrant() :
         # l'étape n'est pas réentrante
         # le concept retourné par l'étape est à supprimer car il était 
@@ -201,11 +267,28 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       for child in self.mc_liste :
         child.delete_concept(sd)
 
+   def replace_concept(self,old_sd,sd):
+      """
+          Inputs :
+             old_sd=concept remplace
+             sd = nouveau concept 
+          Fonction :
+             Mettre a jour les mots cles de l etape et eventuellement
+             le concept produit si reuse
+             suite au remplacement  du concept old_sd
+      """
+      if self.reuse and self.reuse == old_sd:
+        self.sd=self.reuse=sd
+        self.init_modif()
+      for child in self.mc_liste :
+        child.replace_concept(old_sd,sd)
+
    def make_register(self):
       """
          Initialise les attributs jdc, id, niveau et réalise les
          enregistrements nécessaires
          Pour EFICAS, on tient compte des niveaux
+         Surcharge la methode make_register du package Noyau
       """
       if self.parent :
          self.jdc = self.parent.get_jdc_root()
@@ -234,9 +317,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 +355,116 @@ 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.state="unchanged"
+         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..1d9fc27
--- /dev/null
@@ -0,0 +1,45 @@
+#            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''')
+
+# On ajoute la classe formule pour etre cohérent avec la
+# modification de C Durand sur la gestion des formules dans le superviseur
+# On conserve l'ancienne classe fonction (ceinture et bretelles)
+class fonction(FONCTION) : pass
+class formule(FONCTION) : pass
+
index 51100165d7c079f0a968678c5125bc582ab4dea1..b76b4b5a39d1b178f5f87a5e32ff29c3c5be3b30 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)
@@ -234,7 +262,7 @@ class FORM_ETAPE(MACRO_ETAPE):
          Inputs :
            sd=concept detruit
          Fonction :
-           Mettre a jour les mos cles de l etape et eventuellement le concept produit si reuse
+           Mettre a jour les mots cles de l etape et eventuellement le concept produit si reuse
            suite à la disparition du concept sd
            Seuls les mots cles simples MCSIMP font un traitement autre que de transmettre aux fils,
           sauf les objets FORM_ETAPE qui doivent vérifier que le concept détruit n'est pas 
@@ -242,3 +270,14 @@ class FORM_ETAPE(MACRO_ETAPE):
         """
         self.init_modif()
          
+    def replace_concept(self,old_sd,sd):
+        """
+         Inputs :
+           old_sd=concept remplace
+           sd = nouveau concept
+         Fonction :
+           Les objets FORM_ETAPE devraient vérifier que le concept remplacé n'est pas
+           utilisé dans le corps de la fonction
+        """
+        self.init_modif()
+
index 2c26ab8e653adb28a2595a0b9ac955ee3a1bfeac..98e2e8b81bb56ff0ae7814bdfa711bdddbb435ea 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,9 @@ class JDC(I_OBJECT.OBJECT):
       self.niveau=self
       self.params=[]
       self.fonctions=[]
+      self._etape_context=None
+      self.recorded_units={}
+      self.old_recorded_units={}
 
    def get_cmd(self,nomcmd):
       """
@@ -38,20 +59,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 +116,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 +127,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 +135,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 +148,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 +162,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 +190,42 @@ 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_avec_detruire(self,nom_sd,sd,etape,avec='non'):
+      """ 
+           Cette méthode retourne la SD sd de nom nom_sd qui est éventuellement
+            définie apres etape en tenant compte des concepts detruits
+           Si avec vaut 'non' exclut etape de la recherche
+      """
+      ietap=self.etapes.index(etape)
+      if avec == 'non':ietap=ietap+1
+      d={nom_sd:sd}
+      for e in self.etapes[ietap:]:
+         if e.isactif():
+            e.update_context(d)
+            autre_sd=d.get(nom_sd,None)
+            if autre_sd is None:
+              # Le concept a ete detruit
+              return None
+            if autre_sd is not sd :
+              # L'etape produit un concept de meme nom
+              if hasattr(e,'reuse') and e.reuse == autre_sd:
+                 # Le concept est reutilise, ce n'est pas un produit de l'etape
+                 continue
+              else:
+                 # Le concept est produit par l'etape
+                 return autre_sd
+      # On n'a rien trouve. Pas de concept de nom nom_sd
+      return None
+
+   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 +233,68 @@ 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 get_contexte_avant(self,etape):
+      """
+         Retourne le dictionnaire des concepts connus avant etape
+         On tient compte des commandes qui modifient le contexte
+         comme DETRUIRE ou les macros
+         Si etape == None, on retourne le contexte en fin de JDC
+      """
+      # L'étape courante pour laquelle le contexte a été calculé est
+      # mémorisée dans self.index_etape_courante
+      # XXX on pourrait faire mieux dans le cas PAR_LOT="NON" : en
+      # mémorisant l'étape
+      # courante pendant le processus de construction des étapes.
+      # Si on insère des commandes (par ex, dans EFICAS), il faut préalablement
+      # remettre ce pointeur à 0
+      if etape:
+         index_etape=self.etapes.index(etape)
+      else:
+         index_etape=len(self.etapes)
+      if index_etape >= self.index_etape_courante:
+         # On calcule le contexte en partant du contexte existant
+         d=self.current_context
+         if self.index_etape_courante==0 and self.context_ini:
+            d.update(self.context_ini)
+         liste_etapes=self.etapes[self.index_etape_courante:index_etape]
+      else:
+         d=self.current_context={}
+         if self.context_ini:d.update(self.context_ini)
+         liste_etapes=self.etapes
+
+      for e in liste_etapes:
+         if e is etape:
+            break
+         if e.isactif():
+            e.update_context(d)
+      self.index_etape_courante=index_etape
+      return d
+
+   def get_contexte_apres(self,etape):
+      """
+         Retourne le dictionnaire des concepts connus apres etape
+         On tient compte des commandes qui modifient le contexte
+         comme DETRUIRE ou les macros
+         Si etape == None, on retourne le contexte en fin de JDC
+      """
+      if not etape: return self.get_contexte_avant(etape)
+
+      d=self.get_contexte_avant(etape)
+      if etape.isactif():etape.update_context(d)
+      self.index_etape_courante=self.index_etape_courante+1
+      return d
 
    def active_etapes(self):
       """
@@ -205,6 +325,10 @@ class JDC(I_OBJECT.OBJECT):
           un jeu de commandes
       """
       self.init_modif()
+      # On memorise le contexte avant l'etape a supprimer
+      d=self.get_contexte_avant(etape)
+      index_etape=self.etapes.index(etape)
+
       self.etapes.remove(etape)
       if etape.niveau is not self:
         # Dans ce cas l'étape est enregistrée dans un niveau
@@ -213,25 +337,13 @@ class JDC(I_OBJECT.OBJECT):
       etape.supprime_sdprods()
       self.active_etapes()
 
-   def del_sdprod(self,sd):
-      """
-          Supprime la SD sd de la liste des sd et des dictionnaires de contexte
-      """
-      if sd in self.sds : self.sds.remove(sd)
-      if self.g_context.has_key(sd.nom) : del self.g_context[sd.nom]
-
-   def delete_concept(self,sd):
-      """ 
-          Inputs :
-             sd=concept detruit
-          Fonction :
-             Mettre a jour les etapes du JDC suite à la disparition du 
-             concept sd
-             Seuls les mots cles simples MCSIMP font un traitement autre 
-             que de transmettre aux fils
-      """
-      for etape in self.etapes :
-        etape.delete_concept(sd)
+      # Apres suppression de l'etape il faut controler que les etapes
+      # suivantes ne produisent pas des concepts DETRUITS dans op_init de etape
+      for e in self.etapes[index_etape:]:
+         e.control_sdprods(d)
+      
+      self.reset_context()
+      self.fin_modif()
 
    def analyse(self):
       self.compile()
@@ -267,6 +379,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 +415,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
 
@@ -314,17 +440,6 @@ class JDC(I_OBJECT.OBJECT):
       if self.appli:
          self.appli.send_message(message)
 
-#XXX ne semble pas servir pour JDC
-#   def reevalue_sd_jdc(self):
-      #""" 
-          #Avec la liste des SD qui ont été supprimées, propage la disparition de ces
-          #SD dans toutes les étapes et descendants
-      #"""
-      #l_sd = self.diff_contextes()
-      #if len(l_sd) == 0 : return
-      #for sd in l_sd:
-        #self.jdc.delete_concept(sd)
-
    def init_modif(self):
       """
       Méthode appelée au moment où une modification va être faite afin de 
@@ -333,6 +448,7 @@ class JDC(I_OBJECT.OBJECT):
       self.state = 'modified'
 
    def fin_modif(self):
+      self.isvalid()
       pass
 
    def get_liste_mc_inconnus(self):
@@ -369,7 +485,201 @@ class JDC(I_OBJECT.OBJECT):
          fproc=open(file,'r')
          text=fproc.read()
          fproc.close()
+      if file == None : return None,None
       text=string.replace(text,'\r\n','\n')
       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,restrict='non'):
+      """
+          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 indication de l'étape
+      # traitée. 
+      # Cette etape est indiquee par l'attribut _etape_context qui a ete 
+      # positionné préalablement par un appel à set_etape_context
+
+      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.sds_dict.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.sds_dict[sdnom]=sd
+      sd.nom=sdnom
+
+      # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC
+      if restrict == 'non':
+         self.g_context[sdnom]=sd
+
+
+   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_sdprod(self,sd):
+      """
+          Supprime la SD sd de la liste des sd et des dictionnaires de contexte
+      """
+      if sd in self.sds : self.sds.remove(sd)
+      if self.g_context.has_key(sd.nom) : del self.g_context[sd.nom]
+      if self.sds_dict.has_key(sd.nom) : del self.sds_dict[sd.nom]
+
+   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]
+
+   def append_sdprod(self,sd):
+      """
+          Ajoute la SD sd à la liste des sd en vérifiant au préalable qu'une SD de
+          même nom n'existe pas déjà
+      """
+      if sd == None or sd.nom == None:return
+
+      o=self.sds_dict.get(sd.nom,None)
+      if isinstance(o,ASSD):
+         raise AsException("Nom de concept deja defini : %s" % sd.nom)
+      self.sds_dict[sd.nom]=sd
+      self.g_context[sd.nom] = sd
+      if sd not in self.sds : self.sds.append(sd)
+
+   def append_param(self,param):
+      """
+          Ajoute le paramètre param à la liste des params
+          et au contexte global
+      """
+      # il faudrait vérifier qu'un paramètre de même nom n'existe pas déjà !!!
+      if param not in self.params : self.params.append(param)
+      self.g_context[param.nom]=param
+
+   def append_fonction(self,fonction):
+      """
+          Ajoute la fonction fonction à la liste des fonctions
+          et au contexte global
+      """
+      # il faudrait vérifier qu'une fonction de même nom n'existe pas déjà !!!
+      if fonction not in self.fonctions : self.fonctions.append(fonction)
+      self.g_context[fonction.nom]=fonction
+
+   def delete_concept_after_etape(self,etape,sd):
+      """
+          Met à jour les étapes du JDC qui sont après etape en fonction
+          de la disparition du concept sd
+      """
+      index = self.etapes.index(etape)+1
+      if index == len(self.etapes) : 
+         return # etape est la dernière étape du jdc ...on ne fait rien !
+      for child in self.etapes[index:]:
+        child.delete_concept(sd)
+
+   def delete_concept(self,sd):
+      """
+          Inputs :
+             sd=concept detruit
+          Fonction :
+             Mettre a jour les etapes du JDC suite à la disparition du
+             concept sd
+             Seuls les mots cles simples MCSIMP font un traitement autre
+             que de transmettre aux fils
+      """
+      for etape in self.etapes :
+        etape.delete_concept(sd)
+
+   def replace_concept_after_etape(self,etape,old_sd,sd):
+      """
+          Met à jour les étapes du JDC qui sont après etape en fonction
+          du remplacement du concept sd
+      """
+      index = self.etapes.index(etape)+1
+      if index == len(self.etapes) :
+         return # etape est la dernière étape du jdc ...on ne fait rien !
+      for child in self.etapes[index:]:
+        child.replace_concept(old_sd,sd)
+
+   def dump_state(self):
+      print "dump_state"
+      print "JDC.state: ",self.state
+      for etape in self.etapes :
+         print etape.nom+".state: ",etape.state
+      
+   def change_unit(self,unit,etape,old_unit):
+      if self.recorded_units.has_key(old_unit):del self.recorded_units[old_unit]
+      self.record_unit(unit,etape)
+
+   def record_unit(self,unit,etape):
+      """Enregistre les unites logiques incluses et les infos relatives a l'etape"""
+      if unit is None:
+         # Cas de POURSUITE
+         self.recorded_units[None]=(etape.fichier_ini ,etape.fichier_text,etape.recorded_units)
+      else:
+         self.recorded_units[unit]=(etape.fichier_ini ,etape.fichier_text,etape.recorded_units)
+
+#ATTENTION cette methode surcharge la methode du package Validation : a reintegrer
+   def isvalid(self,cr='non'):
+      """
+        Méthode booléenne qui retourne 0 si le JDC est invalide, 1 sinon
+      """
+      # FR : on prend en compte l'état du JDC ('unchanged','modified','undetermined')
+      # afin d'accélérer le test de validité du JDC
+      if self.state == 'unchanged':
+        return self.valid
+      else:
+        valid = 1
+        texte,test = self.verif_regles()
+        if test == 0:
+          if cr == 'oui': self.cr.fatal(string.strip(texte))
+          valid = 0
+        if valid :
+          for e in self.etapes:
+            if not e.isactif() : continue
+            if not e.isvalid():
+              valid = 0
+              break
+        self.state="unchanged"
+        self.valid = valid
+        return self.valid
+
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..2e7ee36bdd9cea335b672136a0d9be47c75da468 100644 (file)
+#            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 sys
 import traceback,types,string
 
 # Modules Eficas
 import I_ETAPE
 from Noyau.N_ASSD import ASSD
 
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
+import Noyau, Validation.V_MACRO_ETAPE
+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)
+      self.typret=None
+      self.recorded_units={}
+
+  def copy(self):
+      """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+          et sans sd
+          On surcharge la methode de ETAPE pour exprimer que les concepts crees
+          par la MACRO d'origine ne sont pas crees par la copie mais eventuellement 
+          seulement utilises
+      """
+      etape=I_ETAPE.ETAPE.copy(self)
+      etape.sdprods=[]
+      return etape
 
   def get_sdprods(self,nom_sd):
     """ 
          Fonction : retourne le concept produit par l etape de nom nom_sd
                     s il existe sinon None
     """
-    if self.sd:
-      if self.sd.nom == nom_sd:
-         return self.sd
+    if self.sd and self.sd.nom == nom_sd :return self.sd
     for co in self.sdprods:
-      if co.nom==nom_sd:return co
+      if co.nom == nom_sd:return co
+    if type(self.definition.op_init) == types.FunctionType:
+      d={}
+      apply(self.definition.op_init,(self,d))
+      return d.get(nom_sd,None)
     return None
 
-  def make_contexte(self,fichier,text):    
-    """
-        Cette méthode sert à créer un contexte en interprétant un texte source
-        Python
-    """
-    # on récupère le contexte d'un nouveau jdc dans lequel on interprete text
-    contexte = self.get_contexte_jdc(fichier,text)
-    if contexte == None :
-      raise Exception("Impossible de relire le fichier")
-    else:
-      self.g_context = contexte
-      if hasattr(self,'contexte_fichier_init'):
-        self.old_contexte_fichier_init = self.contexte_fichier_init
-      self.contexte_fichier_init = contexte
-      # XXX la validité ne doit pas etre forcée à 1. Que faut-il faire exactement ???
-      self.init_modif()
-      #self.valid = 1
-      #self.state = 'unchanged'
-
   def get_contexte_jdc(self,fichier,text):
     """ 
          Interprète text comme un texte de jdc et retourne le 
          contexte final
          cad le dictionnaire des sd disponibles à la dernière étape
          Si text n'est pas un texte de jdc valide, retourne None
+         ou leve une exception
          --> utilisée par ops.POURSUITE et INCLUDE
     """
     try:
-       # on essaie de créer un objet JDC...
+       # on essaie de créer un objet JDC auxiliaire avec un contexte initial
        context_ini = self.parent.get_contexte_avant(self)
 
+       # Indispensable avant de creer un nouveau JDC
        CONTEXT.unset_current_step()
-       j=self.jdc.definition(procedure=text,cata=self.jdc.cata,
-                             nom=fichier,
-                             context_ini = context_ini,
-                             appli=self.jdc.appli)
+       args=self.jdc.args
+       prefix_include=None
+       if hasattr(self,'prefix'):
+          prefix_include=self.prefix
+       # ATTENTION : le dictionnaire recorded_units sert à memoriser les unites des 
+       # fichiers inclus. Il est preferable de garder le meme dictionnaire pendant
+       # tout le traitement et de ne pas le reinitialiser brutalement (utiliser clear plutot)
+       # si on ne veut pas perdre la memoire des unites.
+       # En principe si la memorisation est faite au bon moment il n'est pas necessaire
+       # de prendre cette precaution mais ce n'est pas vrai partout.
+       old_recorded_units=self.recorded_units.copy()
+       self.recorded_units.clear()
+
+       j=self.JdC_aux( procedure=text,cata=self.jdc.cata,
+                                nom=fichier,
+                                context_ini = context_ini,
+                                appli=self.jdc.appli,
+                                jdc_pere=self.jdc,etape_include=self,
+                                prefix_include=prefix_include,
+                                recorded_units=self.recorded_units,
+                                old_recorded_units=old_recorded_units,**args)
+
        j.analyse()
+       # On récupère les étapes internes (pour validation)
+       self.etapes=j.etapes
     except:
        traceback.print_exc()
+       # On force le contexte (etape courante) à self
+       CONTEXT.unset_current_step()
+       CONTEXT.set_current_step(self)
        return None
-    CONTEXT.set_current_step(self)
+
     if not j.cr.estvide():
-        raise Exception("Impossible de relire le fichier\n"+str(j.cr))
+       # Erreurs dans l'INCLUDE. On garde la memoire du fichier mais on n'insere pas les concepts
+       # On force le contexte (etape courante) à self
+       CONTEXT.unset_current_step()
+       CONTEXT.set_current_step(self)
+       raise Exception("Impossible de relire le fichier\n"+str(j.cr))
 
-    #XXX la validité d'un source inclus n'est pas identique à celle d'un JDC complet
-    #    impossible de la tester en dehors du JDC d'accueil
-    #cr=j.report()
-    #if not cr.estvide():
-    #    raise Exception("Le fichier contient des erreurs\n"+str(j.cr))
+    cr=j.report()
+    if not cr.estvide():
+       # On force le contexte (etape courante) à self
+       CONTEXT.unset_current_step()
+       CONTEXT.set_current_step(self)
+       raise Exception("Le fichier include contient des erreurs\n"+str(j.cr))
+
+    # On recupere le contexte apres la derniere etape
     j_context=j.get_contexte_avant(None)
-    # XXX j.g_context doit donner le meme résultat
-    # On retourne le contexte apres la derniere etape
-    # XXX j.supprime() ???
+
+    # Cette verification n'est plus necessaire elle est integree dans le JDC_INCLUDE
     self.verif_contexte(j_context)
-    # Le contexte est acceptable. On récupère les étapes internes (pour validation)
-    self.etapes=j.etapes
+
+    # On remplit le dictionnaire des concepts produits inclus
+    # en retirant les concepts présents dans le  contexte initial
+    # On ajoute egalement le concept produit dans le sds_dict du parent
+    # sans verification car on est sur (verification integrée) que le nommage est possible
+    self.g_context.clear()
+    for k,v in j_context.items():
+       if not context_ini.has_key(k) or context_ini[k] != v:
+           self.g_context[k]=v
+           self.parent.sds_dict[k]=v
+
+
+    # On recupere le contexte courant
+    self.current_context=j.current_context
+    self.index_etape_courante=j.index_etape_courante
+
+    # XXX j.supprime() ???
+    # On rétablit le contexte (etape courante) à self
+    CONTEXT.unset_current_step()
+    CONTEXT.set_current_step(self)
+
     return j_context
 
   def verif_contexte(self,context):
@@ -89,35 +160,87 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
      """
      for nom_sd,sd in context.items():
         if not isinstance(sd,ASSD):continue
-        if self.parent.get_sd_apres_etape(nom_sd,etape=self):
-           # Il existe un concept apres self => impossible d'inserer
+        #if self.parent.get_sd_apres_etape(nom_sd,etape=self):
+        if self.parent.get_sd_apres_etape_avec_detruire(nom_sd,sd,etape=self):
+           # Il existe un concept produit par une etape apres self => impossible d'inserer
+           # On force le contexte (etape courante) à self
+           CONTEXT.unset_current_step()
+           CONTEXT.set_current_step(self)
            raise Exception("Impossible d'inclure le fichier. Un concept de nom " + 
                            "%s existe déjà dans le jeu de commandes." % nom_sd)
 
   def reevalue_sd_jdc(self):
      """
          Avec la liste des SD qui ont été supprimées, propage la 
-         disparition de ces SD dans totues les étapes et descendants
+         disparition de ces SD dans toutes les étapes et descendants
      """
-     l_sd = self.diff_contextes()
-     if len(l_sd) == 0 : return
-     for sd in l_sd:
-        self.jdc.delete_concept(sd)
+     l_sd_supp,l_sd_repl = self.diff_contextes()
+     for sd in l_sd_supp:
+        self.parent.delete_concept_after_etape(self,sd)
+     for old_sd,sd in l_sd_repl:
+        self.parent.replace_concept_after_etape(self,old_sd,sd)
 
   def diff_contextes(self):
      """ 
          Réalise la différence entre les 2 contextes 
          old_contexte_fichier_init et contexte_fichier_init
-         cad retourne la liste des sd qui ont disparu 
+         cad retourne la liste des sd qui ont disparu ou ne derivent pas de la meme classe
+         et des sd qui ont ete remplacees
      """
-     if not hasattr(self,'old_contexte_fichier_init'):return []
+     if not hasattr(self,'old_contexte_fichier_init'):return [],[]
      l_sd_suppressed = []
+     l_sd_replaced = []
      for old_key in self.old_contexte_fichier_init.keys():
        if not self.contexte_fichier_init.has_key(old_key):
          if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
            l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
-     return l_sd_suppressed
+       else:
+         if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
+            # Un concept de meme nom existe
+            old_class=self.old_contexte_fichier_init[old_key].__class__
+            if not isinstance(self.contexte_fichier_init[old_key],old_class):
+               # S'il n'est pas d'une classe derivee, on le supprime
+               l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
+            else:
+               l_sd_replaced.append((self.old_contexte_fichier_init[old_key],self.contexte_fichier_init[old_key]))
+     return l_sd_suppressed,l_sd_replaced
       
+  def control_sdprods(self,d):
+      """
+          Cette methode doit updater le contexte fournit par
+          l'appelant en argument (d) en fonction de sa definition
+          tout en verifiant que ses concepts produits ne sont pas
+          deja definis dans le contexte
+      """
+      if hasattr(self,"fichier_unite"):
+         self.update_fichier_init(self.fichier_unite)
+         self.init_modif()
+
+      if type(self.definition.op_init) == types.FunctionType:
+        apply(self.definition.op_init,(self,d))
+      if self.sd:
+        if d.has_key(self.sd.nom):
+           # Le concept est deja defini
+           if self.reuse and self.reuse is d[self.sd.nom]:
+              # Le concept est reutilise : situation normale
+              pass
+           else:
+              # Redefinition du concept, on l'annule
+              #XXX on pourrait simplement annuler son nom pour conserver les objets
+              # l'utilisateur n'aurait alors qu'a renommer le concept (faisable??)
+              self.sd=self.reuse=self.sdnom=None
+              self.init_modif()
+        else:
+           # Le concept n'est pas defini, on peut updater d
+           d[self.sd.nom]=self.sd
+      # On verifie les concepts a droite du signe =
+      for co in self.sdprods:
+        if d.has_key(co.nom) and co is not d[co.nom] :
+           self.delete_concept(co)
+        else:
+           d[co.nom]=co
+       
+
   def supprime_sdprods(self):
       """
           Fonction:
@@ -140,9 +263,346 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
       # Si la macro a des etapes et des concepts inclus, on les detruit
       for nom_sd,co in self.g_context.items():
          if not isinstance(co,ASSD):continue
-         print "Delete: ",self.nom,co.nom
          self.parent.del_sdprod(co)
          self.parent.delete_concept(co)
       # On met g_context à blanc
       self.g_context={}
          
+#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro)
+  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()
+        # Si on est arrive ici, l'etape est valide
+        self.state="unchanged"
+        self.valid=1
+        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
+        # On choisit de retourner None et de mettre l'etape invalide 
+        self.sd=None
+        self.sdnom=None
+        self.state="unchanged"
+        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))
+
+  def make_contexte_include(self,fichier,text):
+    """
+        Cette méthode sert à créer un contexte en interprétant un texte source
+        Python
+    """
+    # on récupère le contexte d'un nouveau jdc dans lequel on interprete text
+    contexte = self.get_contexte_jdc(fichier,text)
+    if contexte == None :
+      raise Exception("Impossible de construire le jeu de commandes correspondant au fichier")
+    else:
+      # Pour les macros de type include : INCLUDE, INCLUDE_MATERIAU et POURSUITE
+      # l'attribut g_context est un dictionnaire qui contient les concepts produits par inclusion
+      # l'attribut contexte_fichier_init est un dictionnaire qui contient les concepts produits
+      # en sortie de macro. g_context est obtenu en retirant de contexte_fichier_init les concepts
+      # existants en debut de macro contenus dans context_ini (dans get_contexte_jdc)
+      # g_context est utilisé pour avoir les concepts produits par la macro
+      # contexte_fichier_init est utilisé pour avoir les concepts supprimés par la macro
+      self.contexte_fichier_init = contexte
+
+  def reevalue_fichier_init(self):
+      """Recalcule les concepts produits par le fichier enregistre"""
+      old_context=self.contexte_fichier_init
+      try:
+         self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+      except:
+         l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+         self.fichier_err = string.join(l)
+         #self.etapes=[]
+         self.g_context={}
+
+         self.old_contexte_fichier_init=old_context
+         self.contexte_fichier_init={}
+         self.reevalue_sd_jdc()
+         return
+
+      # L'evaluation s'est bien passee
+      self.fichier_err = None
+      self.old_contexte_fichier_init=old_context
+      self.reevalue_sd_jdc()
+
+  def update_fichier_init(self,unite):
+      """Reevalue le fichier init sans demander (dans la mesure du possible) a l'utilisateur 
+         les noms des fichiers
+         Ceci suppose que les relations entre unites et noms ont été memorisees préalablement
+      """
+      
+      self.fichier_err=None
+      self.old_contexte_fichier_init=self.contexte_fichier_init
+
+      if unite != self.fichier_unite or not self.parent.recorded_units.has_key(unite):
+         # Changement d'unite ou Nouvelle unite
+         f,text=self.get_file(unite=unite,fic_origine=self.parent.nom)
+         units={}
+         if f is not None:
+            self.fichier_ini = f
+            self.fichier_text=text
+         self.recorded_units=units
+         if self.fichier_ini is None and self.jdc.appli:
+            self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+                     message="Ce fichier ne sera pas pris en compte\n"+"Le fichier associé n'est pas défini")
+      else:
+         # Meme unite existante
+         f,text,units=self.parent.recorded_units[unite]
+         self.fichier_ini = f
+         self.fichier_text=text
+         self.recorded_units=units
+
+      if self.fichier_ini is None:
+         # Le fichier n'est pas défini
+         self.fichier_err="Le fichier associé n'est pas défini"
+         self.parent.change_unit(unite,self,self.fichier_unite)
+         self.g_context={}
+         self.contexte_fichier_init={}
+         self.parent.reset_context()
+         self.reevalue_sd_jdc()
+         return
+
+      try:
+        self.make_contexte_include(self.fichier_ini,self.fichier_text)
+        # Les 3 attributs fichier_ini fichier_text recorded_units doivent etre corrects
+        # avant d'appeler change_unit
+        self.parent.change_unit(unite,self,self.fichier_unite)
+      except:
+        # Erreurs lors de l'evaluation de text dans un JDC auxiliaire
+        l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+        # On conserve la memoire du nouveau fichier
+        # mais on n'utilise pas les concepts crees par ce fichier
+        # on met l'etape en erreur : fichier_err=string.join(l)
+        self.fichier_err=string.join(l)
+        self.parent.change_unit(unite,self,self.fichier_unite)
+        self.g_context={}
+        self.contexte_fichier_init={}
+
+      # Le contexte du parent doit etre reinitialise car les concepts produits ont changé
+      self.parent.reset_context()
+      # Si des concepts ont disparu lors du changement de fichier, on demande leur suppression
+      self.reevalue_sd_jdc()
+
+  def record_unite(self):
+      if self.nom == "POURSUITE":
+         self.parent.record_unit(None,self)
+      else:
+         if hasattr(self,'fichier_unite') : 
+            self.parent.record_unit(self.fichier_unite,self)
+
+  def make_poursuite(self):
+      """ Cette methode est appelée par la fonction sd_prod de la macro POURSUITE
+      """
+      if not hasattr(self,'fichier_ini') :
+         # Si le fichier n'est pas defini on le demande
+         f,text=self.get_file_memo(fic_origine=self.parent.nom)
+         # On memorise le fichier retourne
+         self.fichier_ini = f
+         self.fichier_unite = None
+         self.fichier_text = text
+         self.fichier_err=None
+         import Extensions.jdc_include
+         self.JdC_aux=Extensions.jdc_include.JdC_poursuite
+         self.contexte_fichier_init={}
+
+         if f is None:
+             self.fichier_err="Le fichier POURSUITE n'est pas defini"
+             self.parent.record_unit(None,self)
+             raise Exception(self.fichier_err)
+
+         try:
+           self.make_contexte_include(self.fichier_ini,self.fichier_text)
+           self.parent.record_unit(None,self)
+         except:
+           l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+           if self.jdc.appli:
+              self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier poursuite",
+                                            message="Ce fichier ne sera pas pris en compte\n"+string.join(l)
+                                           )
+           self.parent.record_unit(None,self)
+           self.g_context={}
+           self.fichier_err = string.join(l)
+           self.contexte_fichier_init={}
+           raise
+
+      else:
+         # Si le fichier est deja defini on ne reevalue pas le fichier
+         # et on leve une exception si une erreur a été enregistrée
+         self.update_fichier_init(None)
+         if self.fichier_err is not None: raise Exception(self.fichier_err)
+
+  def get_file(self,unite=None,fic_origine=''):
+      """Retourne le nom du fichier et le source correspondant a l'unite unite
+         Initialise en plus recorded_units
+      """
+      units={}
+      if self.jdc :
+         f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine)
+      else:
+         f,text=None,None
+      self.recorded_units=units
+      return f,text
+
+  def get_file_memo(self,unite=None,fic_origine=''):
+      """Retourne le nom du fichier et le source correspondant a l'unite unite
+         Initialise en plus recorded_units
+      """
+      units={}
+      if self.parent.old_recorded_units.has_key(unite):
+         f,text,units=self.parent.old_recorded_units[unite]
+         self.recorded_units=units
+         return f,text
+      elif self.jdc :
+         f,text=self.jdc.get_file(unite=unite,fic_origine=fic_origine)
+      else:
+         f,text=None,None
+      self.recorded_units=units
+      if f is None and self.jdc.appli:
+         self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+                          message="Ce fichier ne sera pas pris en compte\n"+"Le fichier associé n'est pas défini")
+      return f,text
+
+#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro)
+  def make_include(self,unite=None):
+      """
+          Inclut un fichier dont l'unite logique est unite
+          Cette methode est appelee par la fonction sd_prod de la macro INCLUDE
+          Si l'INCLUDE est invalide, la methode doit produire une exception 
+          Sinon on retourne None. Les concepts produits par l'INCLUDE sont
+          pris en compte par le JDC parent lors du calcul du contexte (appel de ???)
+      """
+
+      # On supprime l'attribut unite qui bloque l'evaluation du source de l'INCLUDE
+      # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
+      del self.unite
+      # Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None
+      if not unite : return
+
+      if not hasattr(self,'fichier_ini') : 
+         # Si le fichier n'est pas defini on le demande
+         f,text=self.get_file_memo(unite=unite,fic_origine=self.parent.nom)
+         # On memorise le fichier retourne
+         self.fichier_ini  = f
+         self.fichier_text = text
+         self.contexte_fichier_init={}
+         self.fichier_unite=unite
+         self.fichier_err=None
+         import Extensions.jdc_include
+         self.JdC_aux=Extensions.jdc_include.JdC_include
+
+         if f is None:
+             self.fichier_err="Le fichier INCLUDE n est pas defini"
+             self.parent.record_unit(unite,self)
+             raise Exception(self.fichier_err)
+
+         try:
+           self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+           self.parent.record_unit(unite,self)
+         except:
+           l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+           if self.jdc.appli:
+              self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+                                            message="Ce fichier ne sera pas pris en compte\n"+string.join(l)
+                                           )
+           self.parent.record_unit(unite,self)
+           self.g_context={}
+           self.fichier_err = string.join(l)
+           self.contexte_fichier_init={}
+           raise
+
+      else:
+         # Si le fichier est deja defini on ne reevalue pas le fichier
+         # et on leve une exception si une erreur a été enregistrée
+         self.update_fichier_init(unite)
+         self.fichier_unite=unite
+         if self.fichier_err is not None: raise Exception(self.fichier_err)
+        
+
+#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro)
+  def make_contexte(self,fichier,text):
+    """
+        Cette méthode sert à créer un contexte pour INCLUDE_MATERIAU
+        en interprétant un texte source Python
+        Elle est appelee par la fonction sd_prd d'INCLUDE_MATERIAU
+    """
+    # On supprime l'attribut mat qui bloque l'evaluation du source de l'INCLUDE_MATERIAU
+    # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini
+    if hasattr(self,'mat'):del self.mat
+    self.fichier_ini =fichier
+    self.fichier_unite =fichier
+    self.fichier_text=text
+    self.fichier_err=None 
+    self.contexte_fichier_init={}
+    # On specifie la classe a utiliser pour le JDC auxiliaire
+    import Extensions.jdc_include
+    self.JdC_aux=Extensions.jdc_include.JdC_include
+    try:
+       self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+       self.parent.record_unit(self.fichier_unite,self)
+    except:
+       l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
+       self.fichier_err = string.join(l)
+       self.parent.record_unit(self.fichier_unite,self)
+       self.g_context={}
+       self.contexte_fichier_init={}
+       raise
+
+#ATTENTION : cette methode surcharge celle de Noyau (a garder en synchro)
+  def update_sdprod(self,cr='non'):
+     # Cette methode peut etre appelee dans EFICAS avec des mots cles de 
+     # la commande modifies. Ceci peut conduire a la construction ou
+     # a la reconstruction d'etapes dans le cas d'INCLUDE ou d'INCLUDE_MATERIAU
+     # Il faut donc positionner le current_step avant l'appel
+     CONTEXT.unset_current_step()
+     CONTEXT.set_current_step(self)
+     valid=Validation.V_MACRO_ETAPE.MACRO_ETAPE.update_sdprod(self,cr=cr)
+     CONTEXT.unset_current_step()
+     return valid
+
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..fd773d947cedf5ea6c5209d2018275f43a4feb87 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
 
@@ -285,6 +309,18 @@ class MCCOMPO(I_OBJECT.OBJECT):
     for child in self.mc_liste :
       child.delete_concept(sd)
 
+  def replace_concept(self,old_sd,sd):
+    """
+        Inputs :
+           old_sd=concept remplace
+           sd = nouveau concept
+        Fonction :
+           Mettre a jour les fils de l objet suite au remplacement  du
+           concept old_sd
+    """
+    for child in self.mc_liste :
+      child.replace_concept(old_sd,sd)
+
   def delete_mc_global(self,mc):
     """ 
         Supprime le mot-clé mc de la liste des mots-clés globaux de l'étape 
@@ -304,11 +340,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 +376,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 +394,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 +408,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..c201ed25509c6e74a68d4e8b7cd3bf961456a273 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 []
@@ -48,12 +71,30 @@ class MCList:
     for child in self.data :
       child.delete_concept(sd)
 
+  def replace_concept(self,old_sd,sd):
+    """
+        Inputs :
+           old_sd=concept remplacé
+           sd=nouveau concept
+        Fonction :
+           Mettre a jour les fils de l objet suite au remplacement 
+           du concept old_sd
+    """
+    for child in self.data :
+      child.replace_concept(old_sd,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 +109,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 +134,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..06e4b6cf3b3e3508f8ad34cfd912789937551a2c 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
 
@@ -157,6 +200,7 @@ class MCSIMP(I_OBJECT.OBJECT):
         self.val = new_valeur
         self.valeur = valeur
         self.init_modif()
+        self.fin_modif()
         return 1
       else:
         # On n'a pas trouve de concept ni réussi à évaluer la valeur 
@@ -165,31 +209,36 @@ 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()
             return 0
-          self.val=self.valeur
           self.init_modif()
+          self.val=self.valeur
+          self.fin_modif()
           return 1
         elif type(new_valeur)==types.StringType and self.wait_TXM():
+          self.init_modif()
           self.val = new_valeur
           self.valeur = new_valeur
-          self.init_modif()
+          self.fin_modif()
           return 1
         else:
           return 0
     else :
       # on ne fait aucune vérification ...
+      self.init_modif()
       try:
         self.valeur = eval(new_valeur)
         self.val = eval(new_valeur)
-        self.init_modif()
+        self.fin_modif()
         return 1
       except:
         self.valeur = new_valeur
         self.val = new_valeur
-        self.init_modif()
+        self.fin_modif()
         return 1
 
   def eval_valeur(self,new_valeur):
@@ -204,11 +253,22 @@ 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)
         return objet,1
       except Exception:
+# PN :
+#    - Ajout de quote autour de la valeur en cas de chaine de caracteres 
+        if type(new_valeur)==types.StringType and self.wait_TXM():
+            new_valeur="'"+new_valeur+"'"
+            try :
+               objet = eval(new_valeur,d)
+               return objet,1
+            except :
+               return None,0
         if CONTEXT.debug : traceback.print_exc()
         return None,0
 
@@ -235,12 +295,42 @@ class MCSIMP(I_OBJECT.OBJECT):
         self.val=None
         self.init_modif()
 
+  def replace_concept(self,old_sd,sd):
+    """
+        Inputs :
+           old_sd=concept remplacé
+           sd=nouveau concept
+        Fonction :
+           Met a jour la valeur du mot cle simple suite au remplacement 
+           du concept old_sd
+    """
+    if type(self.valeur) == types.TupleType :
+      if old_sd in self.valeur:
+        self.valeur=list(self.valeur)
+        i=self.valeur.index(old_sd)
+        self.valeur[i]=sd
+        self.init_modif()
+    elif type(self.valeur) == types.ListType:
+      if old_sd in self.valeur:
+        i=self.valeur.index(old_sd)
+        self.valeur[i]=sd
+        self.init_modif()
+    else:
+      if self.valeur == old_sd:
+        self.valeur=sd
+        self.val=sd
+        self.init_modif()
+
   def copy(self):
     """ Retourne une copie de self """
     objet = self.makeobjet()
-    #XXX est ce utile ??
-    objet.valeur = copy(self.valeur)
-    objet.val = copy(self.val)
+    # 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 +347,146 @@ 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.init_modif()
+      self.valeur = new_objet
+      self.val = new_objet
+      self.fin_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
+       # Est ce init_modif ou init_modif_up
+       # Normalement init_modif va avec fin_modif
+       self.init_modif()
+       self.fin_modif()
+     else:
+       if isinstance(self.valeur,ASSD) :
+         if self.valeur not in l_sd_avant_etape :
+            self.valeur = None
+             self.init_modif()
+             self.fin_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
+#ATTENTION : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
+# Elles doivent etre reintegrees des que possible
+
+  def isvalid(self,cr='non'):
+      """
+         Cette méthode retourne un indicateur de validité de l'objet
+         de type MCSIMP
+
+         - 0 si l'objet est invalide
+
+         - 1 si l'objet est valide
+
+         Le paramètre cr permet de paramétrer le traitement. 
+         Si cr == 'oui'
+             la méthode construit également un comte-rendu de validation
+             dans self.cr qui doit avoir été créé préalablement.
+      """
+      if self.state == 'unchanged':
+        return self.valid
+      else:
+        valid = 1
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = None
+        v=self.valeur
+        #  presence
+        if self.isoblig() and v == None :
+          if cr == 'oui' :
+            self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
+          valid = 0
+        # type,into ...
+        valid = self.verif_type(cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
+        self.valid = valid
+        self.state = 'unchanged'
+        # Si la validité du mot clé a changé, on le signale à l'objet parent
+        if not old_valid:
+          self.init_modif_up()
+        elif old_valid != self.valid : 
+          self.init_modif_up()
+        return self.valid
+
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..5b86633238e63f268c2c823b80b94b2225cc5a17 100644 (file)
@@ -1,4 +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 I_ETAPE
+
+
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
+import sys
+import traceback,types,string
+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 +53,41 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
       for child in self.mc_liste :
         child.delete_concept(sd)
 
+   def replace_concept(self,old_sd,sd):
+      """
+          Inputs :
+             old_sd=concept remplacé
+             sd=nouveau concept
+          Fonction :
+             Mettre a jour les mots cles de l etape
+             suite au remplacement du concept old_sd
+      """
+      for child in self.mc_liste :
+        child.replace_concept(old_sd,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:
+        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
diff --git a/Minicode/Test1/incl.13 b/Minicode/Test1/incl.13
new file mode 100644 (file)
index 0000000..3e1feee
--- /dev/null
@@ -0,0 +1 @@
+a=1/
diff --git a/Minicode/Test1/incl.14 b/Minicode/Test1/incl.14
new file mode 100644 (file)
index 0000000..f0b5c0a
--- /dev/null
@@ -0,0 +1,2 @@
+MMA=LIRE_MAILLAGE()
+MA=LIRE_MAILLAGE()
diff --git a/Minicode/Test1/incl.17 b/Minicode/Test1/incl.17
new file mode 100644 (file)
index 0000000..3378d96
--- /dev/null
@@ -0,0 +1,3 @@
+MMA=LIRE_MAILLAGE()
+MA=LIRE_MAILLAGE()
+DETRUIRE(CONCEPT=_F(NOM=MA))
diff --git a/Minicode/Test1/incl.23 b/Minicode/Test1/incl.23
new file mode 100644 (file)
index 0000000..5e020f0
--- /dev/null
@@ -0,0 +1,2 @@
+YYY=LIRE_MAILLAGE()
+YY=LIRE_MAILLAGE()
diff --git a/Minicode/Test1/incl.26 b/Minicode/Test1/incl.26
new file mode 100644 (file)
index 0000000..a5cfd11
--- /dev/null
@@ -0,0 +1,3 @@
+YYY=LIRE_MAILLAGE()
+MACRO3(MAIL2=MA)
+YY=LIRE_MAILLAGE()
diff --git a/Minicode/Test1/main.comm b/Minicode/Test1/main.comm
new file mode 100644 (file)
index 0000000..9f72a6b
--- /dev/null
@@ -0,0 +1,13 @@
+# Changer l'include 14
+# 1 en reprenant le meme fichier
+# 2 en prenant le fichier incl.17 qui contient une commande DETRUIRE
+# 3 en remplacant le fichier incl.23 par incl.26
+# 4 en remplacant incl.17 par incl.13
+
+DEBUT()
+INCLUDE(UNITE=14)
+DETRUIRE()
+INCLUDE(UNITE=23)
+DETRUIRE()
+FIN()
+
diff --git a/Minicode/Test2/deb0.comm b/Minicode/Test2/deb0.comm
new file mode 100644 (file)
index 0000000..4f36dbc
--- /dev/null
@@ -0,0 +1,3 @@
+DEBUT()
+INCLUDE(UNITE=24)
+FIN()
diff --git a/Minicode/Test2/deb1.comm b/Minicode/Test2/deb1.comm
new file mode 100644 (file)
index 0000000..4b084ba
--- /dev/null
@@ -0,0 +1,4 @@
+POURSUITE()
+MMA=LIRE_MAILLAGE()
+INCLUDE(UNITE=23)
+FIN()
diff --git a/Minicode/Test2/deb2.comm b/Minicode/Test2/deb2.comm
new file mode 100644 (file)
index 0000000..9287018
--- /dev/null
@@ -0,0 +1,4 @@
+DEBUT()
+MA=LIRE_MAILLAGE()
+INCLUDE(UNITE=22)
+FIN()
diff --git a/Minicode/Test2/incl.22 b/Minicode/Test2/incl.22
new file mode 100644 (file)
index 0000000..3e3609f
--- /dev/null
@@ -0,0 +1,3 @@
+XXX=LIRE_MAILLAGE()
+XX=LIRE_MAILLAGE()
+INCLUDE(UNITE=24)
diff --git a/Minicode/Test2/incl.23 b/Minicode/Test2/incl.23
new file mode 100644 (file)
index 0000000..5e020f0
--- /dev/null
@@ -0,0 +1,2 @@
+YYY=LIRE_MAILLAGE()
+YY=LIRE_MAILLAGE()
diff --git a/Minicode/Test2/incl.24 b/Minicode/Test2/incl.24
new file mode 100644 (file)
index 0000000..993fd41
--- /dev/null
@@ -0,0 +1,2 @@
+VVV=LIRE_MAILLAGE()
+VV=LIRE_MAILLAGE()
diff --git a/Minicode/Test2/inclmat.comm b/Minicode/Test2/inclmat.comm
new file mode 100644 (file)
index 0000000..b605ec5
--- /dev/null
@@ -0,0 +1,14 @@
+DEBUT()
+INCLUDE_MATERIAU(NOM_AFNOR='A42',
+                TYPE_MODELE='REF',
+                VARIANTE='C',
+                TYPE_VALE='NOMI',
+                NOM_MATER='M',
+               )
+INCLUDE_MATERIAU(NOM_AFNOR='A42',
+                TYPE_MODELE='REF',
+                VARIANTE='F',
+                TYPE_VALE='NOMI',
+                NOM_MATER='N',
+               )
+FIN()
diff --git a/Minicode/Test2/main.comm b/Minicode/Test2/main.comm
new file mode 100644 (file)
index 0000000..1af07c1
--- /dev/null
@@ -0,0 +1,9 @@
+POURSUITE()
+MA=LIRE_MAILLAGE()
+INCLUDE_MATERIAU(NOM_AFNOR='A42',
+                TYPE_MODELE='REF',
+                VARIANTE='C',
+                TYPE_VALE='NOMI',
+                NOM_MATER='MAT',
+               )
+FIN()
diff --git a/Minicode/Test2/main2.comm b/Minicode/Test2/main2.comm
new file mode 100644 (file)
index 0000000..36135a3
--- /dev/null
@@ -0,0 +1,3 @@
+POURSUITE()
+MA=LIRE_MAILLAGE()
+FIN()
diff --git a/Minicode/Test3/incl.14 b/Minicode/Test3/incl.14
new file mode 100644 (file)
index 0000000..f0b5c0a
--- /dev/null
@@ -0,0 +1,2 @@
+MMA=LIRE_MAILLAGE()
+MA=LIRE_MAILLAGE()
diff --git a/Minicode/Test3/incl.15 b/Minicode/Test3/incl.15
new file mode 100644 (file)
index 0000000..a431804
--- /dev/null
@@ -0,0 +1,2 @@
+INCLUDE(UNITE=16)
+MA=LIRE_MAILLAGE()
diff --git a/Minicode/Test3/incl.16 b/Minicode/Test3/incl.16
new file mode 100644 (file)
index 0000000..f0b5c0a
--- /dev/null
@@ -0,0 +1,2 @@
+MMA=LIRE_MAILLAGE()
+MA=LIRE_MAILLAGE()
diff --git a/Minicode/Test3/main.comm b/Minicode/Test3/main.comm
new file mode 100644 (file)
index 0000000..e95c4b0
--- /dev/null
@@ -0,0 +1,5 @@
+# Changer unite 15 par incl.14
+DEBUT()
+INCLUDE(UNITE=15)
+MA=LIRE_MAILLAGE()
+FIN()
index 40975a2d96f828b5e65a94c32a69d7ade8a240d1..5f86f0a5bf153ba664592109b6da8ae283484209 100755 (executable)
@@ -3,21 +3,37 @@
 import Accas
 from Accas import *
 
+#CONTEXT.debug=1
+
 import ops
 
-JdC = JDC_CATA(code='SATURNE',
+JdC = JDC_CATA(code='ASTER',
                execmodul=None,
                regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
                          AU_MOINS_UN('FIN'),
                          A_CLASSER(('DEBUT','POURSUITE'),'FIN')
                         )
-              );
+              )
 
 # P. RASCLE MMN
 # remarques diverses sur le catalogue Saturne
 # - dans les blocs, il faut au moins un mot clé de statut obligatoire
 # probleme de rafraichissement des blocs dépendants quand la valeur d'un mot cle global (ITURB) passe de 1 à 0
 
+# Type le plus general
+class entier  (ASSD):pass
+class reel    (ASSD):pass
+class complexe(ASSD):pass
+class liste   (ASSD):pass
+class chaine  (ASSD):pass
+
+# Type geometriques
+class no  (GEOM):pass
+class grno(GEOM):pass
+class ma  (GEOM):pass
+class grma(GEOM):pass
+
+
 class sonde(ASSD):pass
 class varsca(ASSD):pass
 class flusca(ASSD):pass
@@ -36,7 +52,42 @@ 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
+class mater           (ASSD):pass
+
+
+# fonction :
+#--------------------------------
+class para_sensi(fonction):pass
+class fonction_c(fonction):pass
+
+# matr_asse :
+#--------------------------------
+class matr_asse(ASSD):pass
+class matr_asse_depl_c(matr_asse):pass
+class matr_asse_depl_r(matr_asse):pass
+class matr_asse_gene_r(matr_asse):pass
+class matr_asse_gene_c(matr_asse):pass
+class matr_asse_pres_c(matr_asse):pass
+class matr_asse_pres_r(matr_asse):pass
+class matr_asse_temp_c(matr_asse):pass
+class matr_asse_temp_r(matr_asse):pass
+
 
 # fin entete
 
@@ -101,6 +152,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 +1307,448 @@ 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),
+);
+
+def macro3_prod(self,MAILLAGE,MAIL2,**args):
+   self.type_sdprod(MAIL2,maillage)
+   if not MAILLAGE:return None
+   return maillage
+
+MACRO3 =MACRO(nom="MACRO3",op= -5 ,docu="U4.61.21-c",
+                      sd_prod=macro3_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MAILLAGE          =SIMP(statut='f',typ=maillage),
+         MAIL2          =SIMP(statut='o',typ=(CO,maillage)),
+);
+
+def errmacro_prod(self,MAILLAGE,**args):
+   #Erreur de programmation
+   a=1/0
+   return maillage
+
+ERRMACRO =MACRO(nom="ERRMACRO",op= -5 ,docu="U4.61.21-c",
+                      sd_prod=errmacro_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MAILLAGE          =SIMP(statut='o',typ=maillage),
+);
+
+def erroper_prod(self,MAILLAGE,**args):
+   #Erreur de programmation
+   a=1/0
+   return maillage
+
+ERROPER =OPER(nom="ERROPER",op= -5 ,docu="U4.61.21-c",
+                      sd_prod=erroper_prod,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MAILLAGE          =SIMP(statut='o',typ=maillage),
+);
+
+def errproc_init(self,MAILLAGE,**args):
+   #Erreur de programmation
+   a=1/0
+
+ERRPROC =PROC(nom="ERRPROC",op= -5 ,docu="U4.61.21-c",
+                      op_init=errproc_init,
+                      fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ",
+         MAILLAGE          =SIMP(statut='o',typ=maillage),
+);
+
+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')),
+                            ),
+                   ),
+          );
+
+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='**'),
+        ),
+);
+
+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' ),
+         TYPE_MODELE     =SIMP(statut='o',typ='TXM',into=("REF","PAR") ),
+         VARIANTE        =SIMP(statut='o',typ='TXM',
+                               into=("A","B","C","D","E","F","G","H","I","J",
+                                     "K","L","M","N","O","P","Q","R","S","T","U","V",
+                                     "W","X","Y","Z",) ),
+         TYPE_VALE       =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
+         NOM_MATER       =SIMP(statut='o',typ='TXM' ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 32 ),
+         EXTRACTION      =FACT(statut='f',min=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) ),
+)  ;
+
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,**args):
+  if VALE != None  : return fonction
+  if VALE_C != None  : return fonction_c
+  if VALE_PARA != None  : return fonction
+  if NOEUD_PARA != None  : return fonction
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+                    ,fr="Définition des valeurs réelles ou complexes d une fonction réelle",
+                     docu="U4.31.02-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",
+                                     "INST","X","Y","Z","EPSI","META","FREQ","PULS",
+                                     "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+                                     "PGAZ","PCAP","VITE") ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
+         VALE_C          =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction complexe définie par une liste de couples"),
+         VALE_PARA       =SIMP(statut='f',typ=listr8,
+                               fr ="Fonction réelle définie par deux concepts de type listr8" ),
+         b_vale_para     =BLOC(condition = "VALE_PARA != None",
+           VALE_FONC       =SIMP(statut='o',typ=listr8 ),
+         ),
+         NOEUD_PARA      =SIMP(statut='f',typ=no,max='**',
+                               fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
+         b_noeud_para    =BLOC(condition = "NOEUD_PARA != None",
+           MAILLAGE        =SIMP(statut='o',typ=maillage ),
+           VALE_Y          =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+
+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'),
+               EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+               ),
+#
+# comportement élastique
+#
+           ELAS            =FACT(statut='f',min=0,max=1,
+             E               =SIMP(statut='o',typ='R',val_min=0.E+0),
+             NU              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_FO         =FACT(statut='f',min=0,max=1,
+             regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),),
+             E               =SIMP(statut='o',typ=fonction),
+             NU              =SIMP(statut='o',typ=fonction),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA           =SIMP(statut='f',typ=fonction),
+             AMOR_ALPHA      =SIMP(statut='f',typ=fonction),
+             AMOR_BETA       =SIMP(statut='f',typ=fonction),
+             AMOR_HYST       =SIMP(statut='f',typ=fonction),
+             K_DESSIC        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_ENDOGE        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FONC_DESORP     =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP","INST",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="INST",into=("TEMP","INST",) ),
+             VERI_P3         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+             VERI_P4         =SIMP(statut='c',typ='TXM',defaut="SECH",into=("SECH",) ),
+           ),
+#
+# comportement thermique
+#
+           THER_NL         =FACT(statut='f',min=0,max=1,
+             regles=(UN_PARMI('BETA','RHO_CP', ),),
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("TEMP",) ),
+           ),
+           THER_HYDR       =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             BETA            =SIMP(statut='f',typ=fonction),
+             AFFINITE        =SIMP(statut='o',typ=fonction),
+             CHALHYDR        =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="TEMP",into=("HYDR",) ),
+             VERI_P2         =SIMP(statut='c',typ='TXM',defaut="HYDR",into=("HYDR",) ),
+           ),
+           THER            =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_FO         =FACT(statut='f',min=0,max=1,
+             LAMBDA          =SIMP(statut='o',typ=fonction),
+             RHO_CP          =SIMP(statut='f',typ=fonction),
+             VERI_P1         =SIMP(statut='c',typ='TXM',defaut="INST",into=("INST",) ),
+           ),
+)
+
+RETOUR=PROC(nom="RETOUR",op= -2,docu="U4.13.02-e",
+            UIinfo={"groupes":("Gestion du travail",)},
+            fr="Retour au fichier de commandes appelant",
+) ;
+
index 1cb03d643b7488982cd51974a87dad3d65213536..d225b5aad56b83af40fc95c1b114807c689793d5 100644 (file)
@@ -12,12 +12,15 @@ 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"
+rep_mat="/home01/chris/ASTER/projet_Eficas/Devel/SUPER6_3/TestsAster/materiau"
 
 catalogues = (
-  ('SATURNE','v1',os.path.join(rep_cata,'cata_saturne2.py'),'asterv5'),
-  ('SATURNE','v2',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'),
+  ('ASTER','v1',os.path.join(rep_cata,'cata_saturne2.py'),'asterv5'),
+  ('ASTER','v2',os.path.join(rep_cata,'cata_saturne.py'),'python','defaut'),
              )
 
index c8a97ac187baac5665176a2de6b5a8cfec4eb320..26d7d4ee6db4aaf798fdbb8bed0fc8dda07ed4a4 100755 (executable)
@@ -3,19 +3,47 @@
     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 Misc.Trace
 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():
+   #Misc.Trace.begin_trace()
+   if len(sys.argv) > 1 :
+       # on veut ouvrir un fichier directement au lancement d'Eficas
+       eficas_go.lance_eficas(code='ASTER',fichier = sys.argv[1])
+   else:
+       # on veut ouvrir Eficas 'vide'
+       eficas_go.lance_eficas(code='ASTER')
+   Misc.Trace.end_trace()
+
+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 560e898071f3b7bd051e55ff527b4c4e77ee91cb..eecdc4427de74cb3ad6726ea5c971542fb3780f1 100644 (file)
@@ -1,7 +1,21 @@
+#@ MODIF ops Cata  DATE 23/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.                                 
 #
-__version__="$Name: FR_28_06_10_00 $"
-__Id__="$Id: ops.py,v 1.12.18.3 2001/06/19 12:24:51 iliade Exp $"
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
 #
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC 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
@@ -11,6 +25,15 @@ import string,linecache,os,traceback,re
 import Accas
 from Accas import ASSD
 
+try:
+   import aster
+   # Si le module aster est présent, on le connecte
+   # au JDC
+   import Build.B_CODE
+   Build.B_CODE.CODE.codex=aster
+except:
+   pass
+
 def DEBUT(self,PAR_LOT,**args):
    """
        Fonction sdprod de la macro DEBUT
@@ -23,35 +46,35 @@ def POURSUITE(self,PAR_LOT,**args):
    """
    self.jdc.set_par_lot(PAR_LOT)
    if self.codex and os.path.isfile("glob.1"):
-      # Le module d'execution est accessible et glob.1 est present
-      if hasattr(self,'fichier_init'):return
-      self.fichier_init='glob.1'
-      self.jdc.initexec()
-      lot,ier,lonuti,concepts=self.codex.poursu(self,1)
-      self.icmd=lonuti
-      #print "Fin de debut",ier,lot,lonuti
-      pos=0
-      d={}
-      while pos+80 < len(concepts)+1:
-        nomres=concepts[pos:pos+8]
-        concep=concepts[pos+8:pos+24]
-        nomcmd=concepts[pos+24:pos+40]
-        statut=concepts[pos+40:pos+48]
-        if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
-           exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
-        pos=pos+80
-      for k,v in d.items():
-        self.parent.NommerSdprod(v,k)
-      self.g_context=d
-      return
+     # Le module d'execution est accessible et glob.1 est present
+     if hasattr(self,'fichier_init'):return
+     self.fichier_init='glob.1'
+     self.jdc.initexec()
+     lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+     self.icmd=lonuti
+     #print "Fin de debut",ier,lot,lonuti
+     pos=0
+     d={}
+     while pos+80 < len(concepts)+1:
+       nomres=concepts[pos:pos+8]
+       concep=concepts[pos+8:pos+24]
+       nomcmd=concepts[pos+24:pos+40]
+       statut=concepts[pos+40:pos+48]
+       if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
+          exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
+       pos=pos+80
+     for k,v in d.items():
+       self.parent.NommerSdprod(v,k)
+     self.g_context=d
+     return
    else:
-      # Si le module d'execution n est pas accessible ou glob.1 absent on 
-      # demande un fichier (EFICAS)
-      # Il faut éviter de réinterpréter le fichier à chaque appel de
-      # POURSUITE
-      if hasattr(self,'fichier_init'):
-         return
-      self.make_poursuite()
+     # Si le module d'execution n est pas accessible ou glob.1 absent on 
+     # demande un fichier (EFICAS)
+     # Il faut éviter de réinterpréter le fichier à chaque appel de
+     # POURSUITE
+     if hasattr(self,'fichier_init'):
+        return
+     self.make_poursuite()
 
 def POURSUITE_context(self,d):
    """
@@ -69,6 +92,7 @@ def INCLUDE(self,UNITE,**args):
    """ 
        Fonction sd_prod pour la macro INCLUDE
    """
+   if not UNITE : return
    if hasattr(self,'unite'):return
    self.unite=UNITE
 
@@ -102,11 +126,13 @@ def detruire(self,d):
            sd.append(e)
            e=e.nom
          if d.has_key(e):del d[e]
+         if self.jdc.sds_dict.has_key(e):del self.jdc.sds_dict[e]
      else:
        if isinstance(mcs,ASSD):
          sd.append(mcs)
          mcs=mcs.nom
        if d.has_key(mcs):del d[mcs]
+       if self.jdc.sds_dict.has_key(mcs):del self.jdc.sds_dict[mcs]
    for s in sd:
      # On signale au parent que le concept s n'existe plus apres l'étape self
      self.parent.delete_concept_after_etape(self,s)
@@ -151,9 +177,9 @@ def subst_materiau(text,NOM_MATER,EXTRACTION):
              if m.group(3) == "EVAL":
                ll.append("  "+m.group(1)+' = EVAL("'+m.group(4)+"("+str(TEMP)+')"),')
              elif m.group(3) == "SUPPR":
-              pass
+               pass
              else:
-              ll.append(l)
+               ll.append(l)
            else: # On cherche la fin du mot cle facteur en cours de substitution
              m=regfin.match(l)
              if m: # On l a trouve. On le supprime de la liste
@@ -179,13 +205,16 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
       Fonction sd_prod pour la macro INCLUDE_MATERIAU
   """
   mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'')
-  if not hasattr(self,'mat') or self.mat != mat:
-    self.mat=mat
+  if not hasattr(self,'mat') or self.mat != mat or self.nom_mater != NOM_MATER :
     # On récupère le répertoire des matériaux dans les arguments 
     # supplémentaires du JDC
-    rep_mat=self.jdc.args["rep_mat"]
+    rep_mat=self.jdc.args.get("rep_mat","NOrep_mat")
     f=os.path.join(rep_mat,mat)
+    self.mat=mat
+    self.nom_mater=NOM_MATER
     if not os.path.isfile(f):
+       del self.mat
+       self.make_contexte(f,"#Texte sans effet pour reinitialiser le contexte a vide\n")
        raise "Erreur sur le fichier materiau: "+f
     # Les materiaux sont uniquement disponibles en syntaxe Python
     # On lit le fichier et on supprime les éventuels \r
@@ -201,7 +230,6 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
     # et le contexte de l etape (local au sens Python)
     # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
     linecache.cache[f]=0,0,string.split(self.text,'\n'),f
-    code=compile(self.text,f,'exec')
     if self.jdc.par_lot == 'NON':
       # On est en mode commande par commande
       # On teste la validite de la commande avec interruption eventuelle
@@ -213,7 +241,5 @@ def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
       # commandes car le prefixe PRFXCO doit etre initialise dans le Fortran
       self.codex.opsexe(self,0,-1,-self.definition.op)  
 
-    d={}
-    self.g_context = d
-    self.contexte_fichier_init = d
-    exec code in self.parent.g_context,d
+    self.make_contexte(f,self.text)
+
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'
+
+
diff --git a/Minicode/properties.py b/Minicode/properties.py
new file mode 100644 (file)
index 0000000..96d09b7
--- /dev/null
@@ -0,0 +1,2 @@
+version = "6.3.20"
+date = "10/10/2002"
diff --git a/Misc/MakeNomComplet.py b/Misc/MakeNomComplet.py
new file mode 100644 (file)
index 0000000..9a9e592
--- /dev/null
@@ -0,0 +1,142 @@
+# Auteur : A. Yessayan
+# Date : jeudi 06/03/2003 a 14:36:00
+
+"""
+
+Module MakeNomComplet
+---------------------
+    Construction du nom complet d'un fichier dans un répertoire existant.
+    Le fichier n'existe pas forcément mais le répertoire doit OBLIGATOIREMENT
+    exister.
+    
+    Usage :
+           import MakeNomComplet
+
+           txt="main.py"
+           txt="./main.py"
+           txt="/tmp/main.py"
+           try :
+                nom_complet=str(MakeNomComplet.FILNAME( txt ))
+                dir_name = MakeNomComplet.dirname(txt)
+                fic_name = MakeNomComplet.basename(txt)
+           except Exception,e:
+                print txt,' est un nom INVALIDE'
+                print str(e) 
+
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+if DEVELOPPEUR :
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id: MakeNomComplet.py,v 1.1 2003/03/06 16:09:53 eficas Exp $" )
+    developpeur.sortie.write( "\n" )
+
+
+import string
+import os
+import os.path
+import types
+import re
+
+class FILENAME :
+    def __init__( self , s ) :
+        assert(type(s)==types.StringType)
+        assert(len(s)>0)
+        self.text = s
+        self.rep=None
+        self.file=None
+        liste=string.split( self.text , '/' )
+        l=len(liste)
+        assert(l>=1)
+        if l == 1 :
+            rep="."
+        else :
+            # evaluation des eventuels paramètres shell : DEBUT
+            l_evalue=[]
+            for d in liste :
+                if len(d) and d[0]=='$' :
+                     d=re.sub( "[\${}]" , "" , d )
+                     d=os.getenv(d)
+                l_evalue.append(d)
+            # evaluation des eventuels paramètres shell : FIN
+
+            rep=string.join( l_evalue[0:l-1] , '/' )
+        try :
+            self.rep = self.getcwd_( rep )
+            self.file = liste[-1]
+        except Exception,e :
+            raise Exception( "nom de repertoire INVALIDE : "+rep )
+
+    def getcwd_ ( self , rep ) :
+        prev = os.getcwd()
+        os.chdir( rep )
+        wd = os.getcwd()
+        os.chdir( prev )
+        return wd
+
+    def dirname( self ) :
+        return self.rep
+
+    def basename( self ) :
+        return self.file
+
+    def __str__ ( self ) :
+        return self.rep+'/'+self.file
+        
+        
+
+
+def dirname( s ) :
+    """
+    retourne dans une string, le nom complet du répertoire
+    du fichier dont le nom est passe dans s.
+    S'il n' y a pas de chemin dans s, c'ets le nom complet
+    du répertoire courant qui est retourné.
+    N.B. : ce repertoire doit exister
+    """
+    f=FILENAME(s)
+    return f.dirname()
+
+
+def basename( s ) :
+    """
+    retourne dans une string, le nom simple du fichier dont le nom
+    est passe dans s.
+    N.B. : le repertoire (s'il ya un chemin dans s) doit exister
+    """
+    f=FILENAME(s)
+    return f.basename()
+
+
+if __name__ == "__main__" :
+
+    import sys
+
+    import MakeNomComplet
+
+    s="${PWD}/MakeNomComplet.py"
+    print dirname( s )
+    print basename( s )
+    print str(MakeNomComplet.FILENAME(s))
+
+    print dirname( "MakeNomComplet.py" )
+    print basename( "MakeNomComplet.py" )
+
+    print dirname( "./MakeNomComplet.py" )
+    print basename( "./MakeNomComplet.py" )
+
+
+    try :
+       print basename( "/toto/main.py" )
+       print "ERREUR"
+        sys.exit(5)
+    except Exception,e :
+        print str(e)
+       print "OKAY"
+        pass
+    print "FIN NORMALE DE "+__name__
+    sys.exit(0)
index 9aac3d2b7c3fd966b4f9060e40ba8a98b3e165eb..cce9b4bea026d94be767293196f38e5ff37f746c 100644 (file)
@@ -14,19 +14,127 @@ def begin_trace():
 def end_trace():
      sys.settrace(None)
 
+def filter(filename):
+  return (filename[-10:] == 'Tkinter.py') or (filename[:21] == '/home01/chris/pkg/Pmw')
+
+cara="+"
+ldec=2
+dec = cara*ldec
+curframe=None
+
+def compute_level(frame):
+   """Calcule le niveau dans la pile d'execution"""
+   level=0
+   while frame is not None:
+      frame=frame.f_back
+      level=level+1
+   return level-1
+  
+
 def dispatch_call(frame, arg):
      """ Cette fonction est appelée par trace_dispatch
          pour tracer les appels à des fonctions ou méthodes
      """
+     global dec,curframe
+     try:
+       dec = cara*ldec*compute_level(frame)
+       name = frame.f_code.co_name
+       if not name: name = '???'
+       if not filter(frame.f_code.co_filename):
+           print dec +' call', name, frame.f_lineno,frame.f_code.co_filename
+       # La trace des appels suivants est decalee de +
+       dec=dec+cara*ldec
+     except:
+       print "Pb dans dispatch_call: ",frame,curframe
+     return trace_dispatch
+
+def dispatch_exception(frame, arg):
+     """ Cette fonction est appelée par trace_dispatch
+         pour tracer les exceptions
+     """
+     global dec,curframe
+     try:
+       dec = cara*ldec*(compute_level(frame)+1)
+       name = frame.f_code.co_name
+       if not name: name = '???'
+       if not filter(frame.f_code.co_filename):
+          print dec+' exception', name, frame.f_lineno,frame.f_code.co_filename,arg[0],arg[1]
+     except:
+       print "Pb dans dispatch_exception: ",frame,curframe
+     return trace_dispatch
+
+def dispatch_return(frame, arg):
+     """ Cette fonction est appelée par trace_dispatch
+         pour tracer les retours de fonction
+     """
+     global dec,curframe
+#     print dec+' return', arg
+     dec = cara*ldec*compute_level(frame)
+     return trace_dispatch
+
+def dispatch_line(frame, arg):
+     """ Cette fonction est appelée par trace_dispatch
+         pour tracer les lignes de source
+     """
+     import linecache
      name = frame.f_code.co_name
      if not name: name = '???'
-     print '+++ call', name, arg
+     fn=frame.f_code.co_filename
+     line = linecache.getline(fn, frame.f_lineno)
+     print dec,name,frame.f_lineno,':',line.strip()
+     return trace_dispatch
 
 def trace_dispatch(frame,event,arg):
      """ Cette fonction sert à tracer tous les appels
          à des fonctions ou à des méthodes.
      """
-     if event == 'call':
-        return dispatch_call(frame, arg)
+     if event == 'call': return dispatch_call(frame, arg)
+     if event == 'return': return dispatch_return(frame, arg)
+#     if event == 'line': return dispatch_line(frame, arg)
+     if event == 'exception': return dispatch_exception(frame, arg)
      return trace_dispatch
 
+def a(x):
+   b(x)
+
+def b(x):
+   return x
+
+def d(x):
+   return 1/x
+
+def e():
+   try:
+     c=1/0
+   except:
+     pass
+
+def f():
+   try:
+     c=1/0
+   except:
+     b(10)
+     raise
+
+def g():
+   try:
+      f()
+   except:
+      pass
+
+def _test():
+   begin_trace()
+   a(5)
+   try:
+     d(0)
+   except:
+     pass
+   b(4)
+   g()
+   e()  
+   end_trace()
+   b(3)
+
+if __name__ == "__main__":
+    _test()
+
index f00a8b54e1fbc582e3273fc74ee9ccc897b9f97c..d92a7f41ee435d4b0aa70b74cf8a602fdbb24b92 100644 (file)
@@ -137,6 +137,12 @@ class BLOC(N_ENTITE.ENTITE):
           l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
           raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
                      '\n',"Erreur dans la condition : ", self.condition,string.join(l))
+        except TypeError:
+          # erreur 'normale' : un mot-clé est en fait un morceau de mot clef : TYPE_CHAM[0:2] par exemple 
+          if CONTEXT.debug:
+             l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+             print "WARNING : Erreur a l'evaluation de la condition "+string.join(l)
+          return 0
         except:
           l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
           raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
index 07523ed1d7a2807637d58b7ee9a528a965d37647..d2bd6f21e23c1b5c405b12c3986d5ed95f6c25fc 100644 (file)
@@ -129,10 +129,16 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
                # On ne nomme le concept que dans le cas de non reutilisation 
                # d un concept
                sd.nom=nom
+         if self.jdc and self.jdc.par_lot == "NON" :
+            self.Execute()
+         return sd
       except AsException,e:
          raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
                               'fichier : ',self.appel[1],e)
       except EOFError:
+         # XXX Normalement le contexte courant doit etre le parent.
+         # Il n'y a pas de raison de remettre le contexte au parent
+         #self.reset_current_step()
          raise
       except :
          l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
@@ -140,14 +146,11 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
                            'fichier : ',self.appel[1]+'\n',
                             string.join(l))
 
-      self.Execute()
-      return sd
-
    def Execute(self):
       """
-         Cette methode est un point d'entree prevu pour realiser une execution immediatement
-         apres avoir construit les mots cles et le concept produit.
-         Par defaut, elle ne fait rien. Elle doit etre surchargee dans une autre partie du programme.
+         Cette methode est prevue pour faire une execution dans le cas
+         ou par_lot == 'NON'
+         Par defaut, elle ne fait rien
       """
       return
 
@@ -180,14 +183,16 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
       else:
         sd_prod=self.definition.sd_prod
       # on teste maintenant si la SD est réutilisée ou s'il faut la créer
-      if self.definition.reentrant != 'n' and self.reuse:
-        # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale.
-        # Elle sera traitee ulterieurement.
+      if self.reuse:
+        # Il est preferable de traiter cette erreur ultérieurement : ce n'est pas une erreur fatale
+        #if AsType(self.reuse) != sd_prod:
+        #  raise AsException("type de concept reutilise incompatible avec type produit")
         self.sd=self.reuse
       else:
         self.sd= sd_prod(etape=self)
-        # Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur. 
-        # On ne fait rien ici. L'erreur sera traiter par la suite.
+        # Si reuse n'a pas ete donné, c'est une erreur. Ne pas corriger afin de la detecter ensuite
+        #if self.definition.reentrant == 'o':
+        #  self.reuse = self.sd
       return self.sd
 
    def get_type_produit(self):
index e7ea93b127c2681e424b9bc827ca9c40b62ffb8e..868fac35563acd187d4d1e84b200ae8ca12c8935 100644 (file)
@@ -99,7 +99,6 @@ NONE = None
       self.current_context={}
       self.condition_context={}
       self.index_etape_courante=0
-      self.UserError="UserError"
 
    def compile(self):
       """
@@ -183,34 +182,25 @@ NONE = None
         s= traceback.format_exception_only("Erreur de nom",e)[0][:-1]
         message = "erreur de syntaxe,  %s ligne %d" % (s,l[-1][1])
         if CONTEXT.debug :
+          #prbanner(message)
           traceback.print_exc()
         self.cr.exception(message)
         CONTEXT.unset_current_step()
 
-      except self.UserError,exc_val:
-        self.traiter_user_exception(exc_val)
-        CONTEXT.unset_current_step()
-    
       except :
         # erreur inattendue
         # sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info() 
         # (tuple de 3 éléments)
-        if CONTEXT.debug : traceback.print_exc()
-
-        exc_typ,exc_val,exc_fr=sys.exc_info()
-        l=traceback.format_exception(exc_typ,exc_val,exc_fr)
+        if CONTEXT.debug :
+          traceback.print_exc()
+          #prbanner("erreur non prevue et non traitee prevenir \
+          #           la maintenance "+self.nom)
+        l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
+                                     sys.exc_info()[2])
         self.cr.exception("erreur non prevue et non traitee prevenir la maintenance "+
                            self.nom+'\n'+ string.join(l))
-        del exc_typ,exc_val,exc_fr
         CONTEXT.unset_current_step()
 
-   def traiter_user_exception(self,exc_val):
-       """Cette methode realise un traitement sur les exceptions utilisateur    
-          Par defaut il n'y a pas de traitement. La méthode doit etre 
-          surchargée pour en introduire un.
-       """
-       return 
-
    def register(self,etape):
       """
          Cette méthode ajoute etape dans la liste des etapes : self.etapes
@@ -253,9 +243,9 @@ NONE = None
                   Dans le cas du JDC, le deuxième cas ne peut pas se produire.
       """
       sd= etape.get_sd_prod()
-      if sd != None and (etape.definition.reentrant == 'n' or etape.reuse is None) :
+      if sd != None and etape.reuse == None:
          # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation 
-         # d un concept. Commande non reentrante ou reuse absent.
+         # d un concept
          self.NommerSdprod(sd,nomsd)
       return sd
 
@@ -267,7 +257,6 @@ NONE = None
           Met le concept créé dans le concept global g_context
       """
       if CONTEXT.debug : print "JDC.NommerSdprod ",sd,sdnom
-
       o=self.sds_dict.get(sdnom,None)
       if isinstance(o,ASSD):
          raise AsException("Nom de concept deja defini : %s" % sdnom)
@@ -319,8 +308,8 @@ NONE = None
             if os.path.exists("fort."+str(unite)):
                file= "fort."+str(unite)
          if file == None :
-            raise AsException("Impossible de trouver le fichier correspondant"
-                               a l unite %s" % unite)
+            raise AsException("Impossible de trouver le fichier correspondant \
+                               a l unite %s" % unite)
          if not os.path.exists(file):
             raise AsException("%s n'est pas un fichier existant" % unite)
       fproc=open(file,'r')
index 6061b2a3464691c33413883a40df163b334e114f..757f3a0e41c1f256ac5e417cdf4582463130ebc9 100644 (file)
@@ -124,13 +124,15 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
                # d un concept
                sd.nom=nom
          self.reset_current_step()
+         if self.jdc and self.jdc.par_lot == "NON" :
+            self.Execute()
+         return sd
       except AsException,e:
          self.reset_current_step()
          raise AsException("Etape ",self.nom,'ligne : ',self.appel[0],
                               'fichier : ',self.appel[1],e)
-      except (EOFError,self.jdc.UserError):
-         # Le retablissement du step courant n'est pas strictement necessaire. On le fait pour des raisons de coherence
-         self.reset_current_step()
+      except EOFError:
+         #self.reset_current_step()
          raise
       except :
          self.reset_current_step()
@@ -139,9 +141,6 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
                            'fichier : ',self.appel[1]+'\n',
                             string.join(l))
 
-      self.Execute()
-      return sd
-
    def get_sd_prod(self):
       """
         Retourne le concept résultat d'une macro étape
@@ -168,7 +167,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
           # les concepts produits dans self.sdprods, il faut le mettre à zéro avant de l'appeler
           self.sdprods=[]
           sd_prod= apply(sd_prod,(self,),d)
-        except (EOFError,self.jdc.UserError):
+        except EOFError:
           raise
         except:
           if CONTEXT.debug: traceback.print_exc()
@@ -176,9 +175,10 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
           raise AsException("impossible d affecter un type au resultat\n",string.join(l[2:]))
 
       # on teste maintenant si la SD est réutilisée ou s'il faut la créer
-      if self.definition.reentrant != 'n' and self.reuse:
-        # Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale.
-        # Elle sera traitee ulterieurement.
+      if self.reuse:
+        # Il est preferable de traiter cette erreur ultérieurement : ce n'est pas une erreur fatale
+        #if AsType(self.reuse) != sd_prod:
+        #  raise AsException("type de concept reutilise incompatible avec type produit")
         self.sd=self.reuse
       else:
         if sd_prod == None:
@@ -186,8 +186,9 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
         else:
           self.sd= sd_prod(etape=self)
           self.typret=sd_prod
-          # Si la commande est obligatoirement reentrante et reuse n'a pas ete specifie, c'est une erreur. 
-          # On ne fait rien ici. L'erreur sera traitee par la suite. 
+        # Si reuse n'a pas ete donné, c'est une erreur. Ne pas corriger afin de la detecter ensuite
+        #if self.definition.reentrant == 'o':
+        #  self.reuse = self.sd
       return self.sd
 
    def get_type_produit(self,force=0):
@@ -367,7 +368,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
          # On force également le nom stocké dans l'attribut sdnom : on lui donne le nom 
          # du concept associé à nomsd
          etape.sdnom=sd.nom
-      elif etape.definition.reentrant != 'n' and etape.reuse != None:
+      elif etape.reuse != None:
          # On est dans le cas d'une commande avec reutilisation d'un concept existant
          # get_sd_prod fait le necessaire : verifications, associations, etc. mais ne cree 
          # pas un nouveau concept. Il retourne le concept reutilise
@@ -408,7 +409,6 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       # les macros devrait peut etre etre déplacée dans Build ???
 
       if CONTEXT.debug : print "MACRO.NommerSdprod: ",sd,sdnom
-
       if hasattr(self,'prefix'):
         # Dans le cas de l'include_materiau on ajoute un prefixe au nom du concept
         if sdnom != self.prefix:sdnom=self.prefix+sdnom
@@ -416,7 +416,7 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
       if self.Outputs.has_key(sdnom):
         # Il s'agit d'un concept de sortie de la macro produit par une sous commande
         sdnom=self.Outputs[sdnom].nom
-      elif sdnom != '' and sdnom[0] == '_':
+      elif sdnom[0] == '_':
         # Si le nom du concept commence par le caractere _ on lui attribue
         # un identificateur JEVEUX construit par gcncon et respectant
         # la regle gcncon legerement adaptee ici
index e15e5e33cafee1b6efb9b3f248698c7dc8cb2ed2..adce3fe8260dca1dedf43bf0a32b0c1f2337174b 100644 (file)
@@ -97,6 +97,8 @@ class PROC_ETAPE(N_ETAPE.ETAPE):
                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)
@@ -108,9 +110,6 @@ class PROC_ETAPE(N_ETAPE.ETAPE):
                           'fichier : ',self.appel[1]+'\n',
                           string.join(l))
 
-      self.Execute()
-      return None
-
    def supprime(self):
       """
          Méthode qui supprime toutes les références arrières afin que l'objet puisse
diff --git a/Noyau/N_VALIDATOR.py b/Noyau/N_VALIDATOR.py
deleted file mode 100644 (file)
index 1fcbe33..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-#@ MODIF N_VALIDATOR Noyau  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
-# ======================================================================
-"""
-   Ce module contient toutes les classes necessaires pour
-   implanter le concept de validateur dans Accas
-"""
-import types,exceptions
-
-class ValError ( exceptions.Exception ):
-      pass
-
-class Valid:
-   """
-        Cette classe est la classe mere des validateurs Accas
-        Elle doit etre derivee 
-        Elle ne presente que la signature des methodes
-        indispensables pour son bon fonctionnement
-
-        @ivar cata_info: raison de la validite ou de l'invalidite du validateur meme
-        @type cata_info: C{string}
-   """
-   def __init__(self,*tup,**args):
-       """ 
-           Cette methode sert a initialiser les attributs du validateur 
-       """
-       self.cata_info=""
-       raise "Must be implemented"
-
-   def info(self):
-       return "valeur valide" 
-
-   def verif(self,valeur):
-       """
-           Cette methode sert a verifier si la valeur passee en argument est consideree
-           comme valide ou non par le validateur. Dans le premier cas le validateur retourne 1
-           (valide) sinon 0 (invalide).
-
-           @type valeur: tout type python
-           @param valeur: valeur du mot cle a valider
-           @rtype: C{boolean}
-           @return: indicateur de validite 1 (valide) ou 0 (invalide)
-       """
-       raise "Must be implemented"
-   
-   def error(self,valeur):
-       return 0
-
-   def verif_cata(self):
-       """
-           Cette methode sert a realiser des verifications du validateur lui meme.
-           Elle est facultative et retourne 1 (valide) par defaut.
-           Elle retourne 0 si le validateur est lui meme invalide si par exemple ses
-           parametres de definition ne sont pas corrects.
-           La raison de l'invalidite est stockee dans l'attribut cata_info.
-
-           @rtype: C{boolean}
-           @return: indicateur de validite 1 (valide) ou 0 (invalide)
-       """
-       return 1
-
-class RangeVal(Valid):
-      """
-          Exemple de classe validateur : verification qu'une valeur
-          est dans un intervalle.
-          Pour une liste on verifie que tous les elements sont 
-          dans l'intervalle
-          Susceptible de remplacer les attributs "vale_min" "vale_max"
-          dans les catalogues
-      """
-      def __init__(self,low,high):
-          self.low=low
-          self.high=high
-          self.cata_info="%s doit etre inferieur a %s" %(low,high)
-
-      def info(self):
-          return "valeur dans l'intervalle %s , %s" %(self.low,self.high)
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                if val < self.low :return 0
-                if val > self.high:return 0
-             return 1
-          else:
-             if valeur < self.low :return 0
-             if valeur > self.high:return 0
-             return 1
-
-      def verif_cata(self):
-          if self.low > self.high : return 0
-          return 1
-
-class CardVal(Valid):
-      """
-          Exemple de classe validateur : verification qu'une liste est
-          d'une longueur superieur a un minimum (min) et inferieure
-          a un maximum (max).
-          Susceptible de remplacer les attributs "min" "max" dans les
-          catalogues
-      """
-      def __init__(self,min='**',max='**'):
-          self.min=min
-          self.max=max  
-          self.cata_info="%s doit etre inferieur a %s" % (min,max)
-
-      def info(self):
-          return "longueur comprise entre  %s et %s" % (self.min,self.max)
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             if self.max != '**' and len(valeur) > self.max:return 0
-             if self.min != '**' and len(valeur) < self.min:return 0
-             return 1
-          else:
-             if self.max != '**' and 1 > self.max:return 0
-             if self.min != '**' and 1 < self.min:return 0
-             return 1
-
-      def verif_cata(self):
-          if self.min != '**' and self.max != '**' and self.min > self.max : return 0
-          return 1
-
-class PairVal(Valid):
-      """
-          Exemple de classe validateur : verification qu'une valeur
-          est paire.
-          Pour une liste on verifie que tous les elements sont
-          pairs
-      """
-      def __init__(self):
-          self.cata_info=""
-
-      def info(self):
-          return "valeur paire"
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                if val % 2 != 0:return 0
-             return 1
-          else:
-             if valeur % 2 != 0:return 0
-             return 1
-
-class EnumVal(Valid):
-      """
-          Exemple de classe validateur : verification qu'une valeur
-          est prise dans une liste de valeurs.
-          Susceptible de remplacer l attribut "into" dans les catalogues
-      """
-      def __init__(self,into=()):
-          if type(into) not in (types.ListType,types.TupleType): into=(into,)
-          self.into=into
-          self.cata_info=""
-
-      def info(self):
-          return "valeur dans %s" % `self.into`
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                if val not in self.into:return 0
-             return 1
-          else:
-             if valeur not in self.into:return 0
-             return 1
-
-class NoRepeat(Valid):
-      """
-          Verification d'absence de doublons dans la liste.
-      """
-      def __init__(self):
-          self.cata_info=""
-
-      def info(self):
-          return ": présence de doublon dans la liste"
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             liste=list(valeur)
-             for val in liste:
-                if liste.count(val)!=1 : return 0
-             return 1
-          else:
-             return 1
-
-class LongStr(Valid):
-      """
-          Verification de la longueur d une chaine
-      """
-      def __init__(self,low,high):
-          self.low=low
-          self.high=high
-          self.cata_info=""
-
-      def info(self):
-          return "longueur de la chaine entre %s et %s" %(self.low,self.high)
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                if len(val) < self.low :return 0
-                if len(val) > self.high:return 0
-             return 1
-          else:
-             if len(valeur) < self.low :return 0
-             if len(valeur) > self.high:return 0
-             return 1
-
-class OrdList(Valid):
-      """
-          Verification qu'une liste est croissante ou decroissante
-      """
-      def __init__(self,ord):
-          self.ord=ord
-          self.cata_info=""
-
-      def info(self):
-          return "liste %s" % self.ord
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             if self.ord=='croissant':
-                var=valeur[0]
-                for val in valeur[1:]:
-                   if val<var:return 0
-                   var=val
-                return 1
-             elif self.ord=='decroissant':
-                var=valeur[0]
-                for val in valeur[1:]:
-                   if val>var:return 0
-                   var=val
-                return 1
-          else:
-             return 1
-
-
-CoercableFuncs = { types.IntType:     int,
-                   types.LongType:    long,
-                   types.FloatType:   float,
-                   types.ComplexType: complex,
-                   types.UnicodeType: unicode }
-
-class TypeVal(Valid):
-      """
-          Cette classe est un validateur qui controle qu'une valeur
-          est bien du type Python attendu.
-          Pour une liste on verifie que tous les elements sont du bon type.
-      """
-      def __init__(self, aType):
-          if type(aType) != types.TypeType:
-             aType=type(aType)
-          self.aType=aType
-          try:
-             self.coerce=CoercableFuncs[ aType ]
-          except:
-             self.coerce = self.identity
-
-      def info(self):
-          return "valeur de %s" % self.aType
-
-      def identity ( self, value ):
-          if type( value ) == self.aType:
-             return value
-          raise ValError
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                 try:
-                    self.coerce(val)
-                 except:
-                    return 0
-             return 1
-          else:
-             try:
-                self.coerce(valeur)
-             except:
-                return 0
-             return 1
-
-class InstanceVal(Valid):
-      """
-          Cette classe est un validateur qui controle qu'une valeur est
-          bien une instance (au sens Python) d'une classe
-          Pour une liste on verifie chaque element de la liste
-      """
-      def __init__(self,aClass):
-          if type(aClass) == types.InstanceType:
-             aClass=aClass.__class__
-          self.aClass=aClass
-
-      def info(self):
-          return "valeur d'instance de %s" % self.aClass.__name__
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                 if not isinstance(val,self.aClass): return 0
-             return 1
-          if not isinstance(valeur,self.aClass): return 0
-          return 1
-
-def ImpairVal(valeur):
-    """
-        Cette fonction est un validateur. Elle verifie que la valeur passee
-        est bien un nombre impair.
-    """
-    if type(valeur) in (types.ListType,types.TupleType):
-       for val in valeur:
-           if val % 2 != 1:return 0
-       return 1
-    else:
-       if valeur % 2 != 1:return 0
-       return 1
-
-ImpairVal.info="valeur impaire"
-    
-class F1Val(Valid):
-      """
-          Cette classe est un validateur de dictionnaire (mot cle facteur ?). Elle verifie
-          que la somme des cles A et B vaut une valeur donnee
-          en parametre du validateur
-      """
-      def __init__(self,somme=10):
-          self.somme=somme
-          self.cata_info=""
-
-      def info(self):
-          return "valeur %s pour la somme des cles A et B " % self.somme
-
-      def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
-             for val in valeur:
-                if not val.has_key("A"):return 0
-                if not val.has_key("B"):return 0
-                if val["A"]+val["B"]  != self.somme:return 0
-             return 1
-          else:
-             if not valeur.has_key("A"):return 0
-             if not valeur.has_key("B"):return 0
-             if valeur["A"]+valeur["B"]  != self.somme:return 0
-             return 1
-
-class FunctionVal(Valid):
-      """
-          Cette classe est un validateur qui est initialise avec une fonction
-      """
-      def __init__(self,function):
-          self.function=function
-
-      def info(self):
-          return self.function.info
-
-      def verif(self,valeur):
-          return self.function(valeur)
-
-class OrVal(Valid):
-      """
-          Cette classe est un validateur qui controle une liste de validateurs
-          Elle verifie qu'au moins un des validateurs de la liste a valide la valeur
-      """
-      def __init__(self,validators=()):
-          if type(validators) not in (types.ListType,types.TupleType): validators=(validators,)
-          self.validators=[]
-          for validator in validators:
-              if type(validator) == types.FunctionType:
-                 self.validators.append(FunctionVal(validator))
-              else:
-                 self.validators.append(validator)
-          self.cata_info=""
-
-      def info(self):
-          return "\n ou ".join([v.info() for v in self.validators])
-
-      def verif(self,valeur):
-          for validator in self.validators:
-              v=validator.verif(valeur)
-              if v :
-                 return 1
-          return 0
-
-      def verif_cata(self):
-          infos=[]
-          for validator in self.validators:
-              v=validator.verif_cata()
-              if not v :infos.append(validator.cata_info)
-          if infos:
-             self.cata_info="\n".join(infos)
-             return 0
-          self.cata_info=""
-          return 1
-
-class AndVal(Valid):
-      """
-          Cette classe est un validateur qui controle une liste de validateurs
-          Elle verifie que tous les validateurs de la liste sont positifs
-      """
-      def __init__(self,validators=()):
-          if type(validators) not in (types.ListType,types.TupleType): validators=(validators,)
-          self.validators=[]
-          for validator in validators:
-              if type(validator) == types.FunctionType:
-                 self.validators.append(FunctionVal(validator))
-              else:
-                 self.validators.append(validator)
-          self.cata_info=""
-
-      def info(self):
-          return " et ".join([v.info() for v in self.validators])
-
-      def verif(self,valeur):
-          for validator in self.validators:
-              v=validator.verif(valeur)
-              if not v :
-                 self.local_info=validator.info()
-                 return 0
-          return 1
-
-      def verif_cata(self):
-          infos=[]
-          for validator in self.validators:
-              v=validator.verif_cata()
-              if not v :infos.append(validator.cata_info)
-          if infos:
-             self.cata_info="\n".join(infos)
-             return 0
-          self.cata_info=""
-          return 1
-
-def do_liste(validators):
-    """ 
-       Convertit une arborescence de validateurs en OrVal ou AndVal
-       validators est une liste de validateurs ou de listes ou de tuples
-    """
-    valids=[]
-    for validator in validators:
-        if type(validator) == types.FunctionType:
-           valids.append(FunctionVal(validator))
-        elif type(validator) == types.TupleType:
-           valids.append(OrVal(do_liste(validator)))
-        elif type(validator) == types.ListType:
-           valids.append(AndVal(do_liste(validator)))
-        else:
-           valids.append(validator)
-    return valids
-
-def validatorFactory(validator):
-    if type(validator) == types.FunctionType:
-       return FunctionVal(validator)
-    elif type(validator) == types.TupleType:
-       return OrVal(do_liste(validator))
-    elif type(validator) == types.ListType:
-       return AndVal(do_liste(validator))
-    else:
-       return validator
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/Saturne/properties.py b/Saturne/properties.py
new file mode 100644 (file)
index 0000000..96d09b7
--- /dev/null
@@ -0,0 +1,2 @@
+version = "6.3.20"
+date = "10/10/2002"
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'
+
+
diff --git a/Syrthes/properties.py b/Syrthes/properties.py
new file mode 100644 (file)
index 0000000..96d09b7
--- /dev/null
@@ -0,0 +1,2 @@
+version = "6.3.20"
+date = "10/10/2002"
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']
diff --git a/Utilites/__init__.py b/Utilites/__init__.py
new file mode 100644 (file)
index 0000000..d109f6c
--- /dev/null
@@ -0,0 +1,31 @@
+"""
+    $Id: __init__.py,v 1.3 2003/02/06 15:11:22 eficas Exp $
+
+    Le package UTILITES contient les fonctions permettant
+    d'instrumenter un script :
+    - MESSAGE (module message)
+    - SCRUTE (module scrute)
+    - PAUSE (module pause)
+"""
+
+
+##__all__ = [ "ici" , "message" , "scrute" , "pause" , "appels" ]
+
+try :
+       from developpeur import *
+except :
+       pass
+from ici import *
+from execute import *
+from pause import *
+from scrute import *
+from message import *
+from appels import *
+from modification import *
+
+
+
+if __name__ == "__main__" :
+    MODIFICATION( "toto" )
+    developpeur.write( dir()+'\n' )
+    developpeur.write( "import du package effectué !" +'\n' )
diff --git a/Utilites/appels.py b/Utilites/appels.py
new file mode 100644 (file)
index 0000000..d4638a4
--- /dev/null
@@ -0,0 +1,118 @@
+"""
+Module appels
+-------------
+    le module appels ...
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+def NULL( *l_args, **d_args  ) : pass
+
+if DEVELOPPEUR :
+
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+
+    import sys
+    import re
+    import ici
+    import funcname
+    
+    
+    def Alonge( chaine , longueur ) :
+        return chaine+' ' # provisoirement on ne complete pas la chaine
+        k=len(chaine)
+        while( k<longueur ) :
+            chaine = chaine + ' '
+            k+=1
+        return chaine
+    
+    def APPELS( dec="" ) :
+    
+        """
+        Fonction APPELS
+        ---------------
+        La fonction APPELS ...
+        ..
+    
+    
+        Usage :
+            from appels import APPELS
+            APPELS()
+        """
+    
+    ### try :
+    ###     1/0
+    ### except :
+    ###     import traceback
+    ###     trace=traceback.extract_stack()
+    ###     print trace
+    
+        nombre_de_blancs=None
+    
+        import traceback
+        trace=traceback.extract_stack()
+    
+        trace.reverse()
+    
+        decalage=dec
+        sys.stderr.flush()
+        sys.stdout.flush()
+    
+        developpeur.sortie.write( 3*'\n' )
+        developpeur.sortie.write( decalage )
+        developpeur.sortie.write( "LISTE des appels" )
+        developpeur.sortie.write( '\n' )
+        developpeur.sortie.flush()
+        if len(trace)>2 :
+            decalage += '\t'
+    
+            # Recherche du plus long nom de fichier pour la mise en forme
+            lmax=0
+            for e in trace[2:-1] :
+                fic,numero,fonc,inst = e
+                position=fic+":"+str(numero)+":"
+           if len(position)>lmax : lmax=len(position)
+            lmax += 1 # Pour eloigner les informations du nom du fichier
+    
+            for e in trace[1:-1] :
+                fic,numero,fonc,inst = e
+                position = chaine=fic+":"+str(numero)+":"
+                position = Alonge( chaine=position , longueur=lmax )
+                developpeur.sortie.write( decalage+position)
+                developpeur.sortie.flush()
+                fname=funcname.FUNCNAME(fic,numero)
+                developpeur.sortie.write( str(fname) )
+                developpeur.sortie.write( ' : ' )
+                developpeur.sortie.write( inst )
+                developpeur.sortie.write( '\n' )
+                developpeur.sortie.flush()
+                decalage += ""
+    
+        fic,numero,fonc,inst = trace[-1]
+        position = chaine=fic+":"+str(numero)+":"
+        position = Alonge( chaine=position , longueur=lmax )
+        developpeur.sortie.write( decalage+position)
+        developpeur.sortie.flush()
+        fname="__main__"
+        developpeur.sortie.write( str(fname) )
+        developpeur.sortie.write( ' : ' )
+        developpeur.sortie.write( inst )
+        developpeur.sortie.write( 3*'\n' )
+        developpeur.sortie.flush()
+    
+    
+        return
+
+else :
+       APPELS = NULL
+
+
+
+if __name__ == "__main__" :
+    TOTO=NULL
+    TOTO(  dec="" )
diff --git a/Utilites/developpeur.py b/Utilites/developpeur.py
new file mode 100644 (file)
index 0000000..6fc7bf4
--- /dev/null
@@ -0,0 +1,36 @@
+"""
+    Ce module permet de définir la variable DEVELOPPEUR indiquant
+    que l'utilisateur courant fait partie de la liste des développeurs.
+    Ce qui lui donne un accès aux versions actives des fonctions
+    ICI, MESSAGE, SCRUTE, ... définies dans le module Utilites
+    à condition qu'ils utilisent le module sur une station cli*.
+
+    Pour ajouter un nouveau développeur, il faut modifier le dictionaire
+    d_dev ci-dessous
+"""
+
+
+DEVELOPPEUR=None
+
+import os
+def hostname() :
+       return os.uname()[1]
+group_eficas=108
+group_salome=107
+
+
+# Test pour identifier un utilisateur développeur d'Eficas
+groups = os.getgroups()
+test_devel = hostname()[0:3]=="cli" and ( group_eficas in groups or group_salome in groups )
+if test_devel :
+    d_dev = { 10618 : "antoine" , 10621 : "Pascale" , 20132 : "chris" , 10214 : "salome" }
+    if os.getuid() in d_dev.keys() :
+        DEVELOPPEUR=d_dev[ os.getuid() ]
+        import sys
+        sortie=sys.stderr
+        sortie.write( "import de "+__name__+" : $Id$" )
+        sortie.write( "\n" )
+
+
+if __name__ == "__main__" :
+    print DEVELOPPEUR
diff --git a/Utilites/execute.py b/Utilites/execute.py
new file mode 100644 (file)
index 0000000..8e18e4d
--- /dev/null
@@ -0,0 +1,71 @@
+"""
+Module exec
+-----------
+    le module exec ...
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+if DEVELOPPEUR :
+
+    import message
+    import scrute
+    import types
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+    developpeur.sortie.flush()
+
+
+    class EXEC :
+
+        def __init__ ( self, texte, contexte=None, verbeux=1 ) :
+
+            assert( type(texte) == types.StringType )
+            if contexte == None :
+                contexte = globals()
+
+            if verbeux :
+                message.MESSAGE( "execution de "+texte )
+            try :
+                exec texte in contexte
+            except Exception,e :
+                if verbeux :
+                    import traceback
+                    traceback.print_exc()
+                    developpeur.sortie.write( "\n\n\n" )
+                    message.MESSAGE( "Exception interceptee" )
+                    scrute.SCRUTE( texte )
+                    scrute.SCRUTE( contexte )
+                    scrute.SCRUTE( e.__class__.__name__ )
+                    scrute.SCRUTE( str(e) )
+                    developpeur.sortie.write( "\n\n\n" )
+                    developpeur.sortie.flush()
+                raise 
+
+
+else :
+    class EXEC : pass
+
+
+
+
+if __name__ == "__main__" :
+    class Ex(Exception) : pass
+    def toto() :
+        print "toto"
+        raise Ex( "y a bel et bien un erreur" )
+
+    def tutu() :
+        s = "toto()"
+        EXEC( s , verbeux=1)
+
+    try :
+        tutu()
+    except Exception,ee :
+        scrute.SCRUTE(str(ee))
+        scrute.SCRUTE(ee.__class__)
+        pass
diff --git a/Utilites/funcname.py b/Utilites/funcname.py
new file mode 100644 (file)
index 0000000..bd27291
--- /dev/null
@@ -0,0 +1,100 @@
+import re,types
+import sys
+
+sortie=sys.stderr
+sortie.write( "import de "+__name__+" : $Id$" )
+sortie.write( "\n" )
+
+def get_nombre_de_blancs( str ) :
+    nombre_de_blancs=0
+    if str :
+        nombre_de_blancs=len(re.sub( "[^ ].*$" , "" , str ))
+    return nombre_de_blancs
+
+
+
+def get_classname( filename, lineno ) :
+    """
+        Cette méthode sert à trouver dans quelle classe (le cas échéant)
+        se trouve l'instruction numéro lineno dans le fichier filename.
+    """
+    classname = ""
+    current_func = ""
+    assert(type(filename)==types.StringType)
+    ####print "RECHERCHE de la classe de "+filename+" ligne : ",lineno
+    if lineno>0 :
+        try :
+               f=open( filename , 'r' )
+       except Exception,e :
+               print ">>>>",str(e)
+               sys.stdout.flush()
+               sys.exit(17)
+
+        s = f.read()
+        f.close()
+        l_lines = s.split( '\n' )
+        k=1
+        inst = l_lines[lineno]
+        nb_blancs= get_nombre_de_blancs( inst )
+
+        for line in l_lines :
+            if k == lineno :
+                break
+            elif re.search( "^ *def ", line ) != None :
+                if get_nombre_de_blancs( line ) < nb_blancs :
+                    current_func=re.sub( "^ *def  *" , "" , line )
+                    current_func=re.sub( " *\(.*$" , "" , current_func )
+            elif re.search( "^class ", line ) != None :
+                classname = re.sub( "^class  *" , "" , line )
+                classname = re.sub( " *[(:].*$" , "" , classname )
+               current_func = ""
+            elif current_func != "" and re.search( "^[^ \t]", line ) != None :
+               current_func = ""
+               classname = ""
+            k = k+1
+    if current_func == "" : current_func="__main__"
+    return classname ,current_func
+
+
+
+
+class FUNCNAME :
+
+    """
+        Conversion des 3 informations nom de méthode, nom de fichier
+        numéro de ligne en un nom complet de méthode
+    """
+
+    def __init__ ( self , *args ) :
+
+       # le premier argument est optionnel (c'est un nom de fonction 
+        # qu'on peut reconstituer avec le nom du fichier et le numéro de ligne.
+        k=0
+        self.name = None
+        if len(args)>2 :
+            if args[k] != "" : self.name = args[k]
+            k = k+1
+
+        assert(args[k]!=None)
+        assert(args[k]!="")
+        self.filename = args[k]        # recuperation du nom du fichier source
+
+        k = k+1
+        assert(args[k]>0)
+        self.lineno = args[k]  # recupération du numero de ligne
+
+        self.classname,funcname = get_classname( self.filename, self.lineno )
+        if self.name == None : self.name = funcname
+        ###assert(funcname==self.name or self.name=="main" or self.name=="<lambda>" ), "attendue '"+self.name+"' - trouvee '"+funcname+"'"
+
+    def __str__ ( self ) :
+        if self.classname != "" :
+            name=self.classname+"."+self.name
+        else :
+            name=self.name
+        return name
+
+
+if __name__ == "__main__" :
+       print  'FUNCNAME("","funcname.py", 68)='+str(FUNCNAME("","funcname.py", 63) )
+       print  'FUNCNAME("funcname.py", 68)='+str(FUNCNAME("funcname.py", 63) )
diff --git a/Utilites/ici.py b/Utilites/ici.py
new file mode 100644 (file)
index 0000000..cd79c6a
--- /dev/null
@@ -0,0 +1,71 @@
+"""
+Module ici
+----------
+    le module ici propose la fonction ICI pour afficher
+    le fichier courant et le numéro de la ligne courante.
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+def NULL( *l_args, **d_args  ) : pass
+
+if DEVELOPPEUR :
+
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+
+    import sys
+
+    def ICI(offset=1) :
+    
+        """
+        Fonction ICI
+        ------------
+        La fonction ICI affiche sur la stderr, le nom du fichier qui l'appelle,
+        le numéro de la ligne ou elle est appelée et retourne ces deux informations.
+    
+        Usage :
+            from ici import ICI
+            ICI()
+            filename,lineno=ICI()
+
+        N.B. : la fonction ICI n'est opérante que pour les développeurs
+        """
+    
+        sys.stdout.flush()
+        sys.stderr.flush()
+        try :
+            1/0
+        except :
+            ###f=sys.exc_info()[2].tb_frame.f_back
+            ###lineno=f.f_lineno
+            ###code=f.f_code
+            ###filename=code.co_filename
+    
+            import traceback
+            trace=traceback.extract_stack()
+    
+            indice = len(trace)-(2+offset)
+            if indice<0 : indice=0
+    
+    
+            assert( indice<len(trace) ),"valeur de offset INVALIDE : "+str(offset)+" taille de la table "+len(trace)
+            file_name, lineno, func_name, dummytxt = trace[ indice ]
+    
+            assert( (indice>0) or (func_name=="?") )
+            if func_name=="?" : func_name = "main"
+    
+        if offset >= 0 :
+                import funcname
+                developpeur.sortie.write( file_name+':'+str(lineno)+': ('+str(funcname.FUNCNAME(func_name,file_name,lineno))+') : ' )
+                developpeur.sortie.flush()
+    
+        return file_name,lineno
+
+
+else :
+       ICI = NULL
diff --git a/Utilites/message.py b/Utilites/message.py
new file mode 100644 (file)
index 0000000..fa94124
--- /dev/null
@@ -0,0 +1,90 @@
+"""
+Module message
+--------------
+    le module message propose la fonction MESSAGE pour afficher
+    sur la stderr, le texte passé en argument.
+    N.B. : la fonction MESSAGE n'est opérante que pour les développeurs
+           (la variable DEVELOPPEUR doit être définie)
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+def NULL( *l_args, **d_args  ) : pass
+
+if DEVELOPPEUR :
+
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+
+    import sys
+    import ici
+
+    def MESSAGE( text , offset=1 ) :
+
+        """
+        Fonction MESSAGE
+        ----------------
+        La fonction MESSAGE affiche sur la stderr, le texte passé en argument.
+        Elle précise également le nom du fichier et le numéro de la ligne où
+        elle a été appelée.
+
+        Usage :
+        from message import MESSAGE
+
+        MESSAGE("debut du traitement")
+        MESSAGE( "Exception interceptée "+str(e) )
+        """
+
+        ici.ICI( offset )
+        developpeur.sortie.write( str(text)+'\n' )
+        developpeur.sortie.flush()
+        return
+
+
+
+    def DEBUT() :
+
+        """
+        Fonction DEBUT
+        --------------
+        La fonction DEBUT affiche sur la stderr, le texte signalant le début
+        d'un traitement
+
+        Usage :
+            from message import *
+            DEBUT()
+            N.B. : la fonction DEBUT n'est opérante que pour les développeurs
+        """
+
+        developpeur.sortie.write( '\n\n' )
+        MESSAGE("DEBUT du traitement [",offset=2)
+        return
+
+
+
+    def FIN() :
+
+        """
+        Fonction FIN
+        ------------
+        La fonction FIN affiche sur la stderr, le texte signalant la fin
+        d'un traitement
+
+        Usage :
+            from message import *
+            FIN()
+
+            N.B. : la fonction FIN n'est opérante que pour les développeurs
+        """
+
+        MESSAGE("] FIN du traitement",offset=2)
+        return
+
+else :
+    MESSAGE= NULL
+    DEBUT = NULL
+    FIN = NULL
diff --git a/Utilites/modification.py b/Utilites/modification.py
new file mode 100644 (file)
index 0000000..f5f8e6b
--- /dev/null
@@ -0,0 +1,46 @@
+"""
+Module intervention
+-------------------
+    Permet aux développeurs de signer leur intervention à
+    destination des autres développeurs.
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+def NULL( *l_args, **d_args  ) : pass
+
+
+if DEVELOPPEUR :
+
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+    import ici
+
+    def MODIFICATION( text , offset=1 ) :
+    
+        """
+        Fonction MODIFICATION
+        ---------------------
+    
+        Usage :
+            from utilites import MODIFICATION
+    
+            utilites.MODIFICATION("auteur,date et intention")
+        """
+    
+        ici.ICI( offset )
+        developpeur.sortie.write( "MODIFICATION "+str(text)+'\n' )
+        developpeur.sortie.flush()
+        return
+
+
+else :
+    MODIFICATION = NULL
+        
+
+if __name__ == "__main__" :
+    MODIFICATION( "baratin inutile" )
diff --git a/Utilites/pause.py b/Utilites/pause.py
new file mode 100644 (file)
index 0000000..d7dcafa
--- /dev/null
@@ -0,0 +1,64 @@
+"""
+Module pause
+------------
+    le module pause propose la fonction PAUSE pour effectuer
+    une attente.
+"""
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+def NULL( *l_args, **d_args  ) : pass
+
+if DEVELOPPEUR :
+
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+
+    import sys
+    import ici
+    
+    def PAUSE( secondes ) :
+    
+        """
+    
+        Fonction PAUSE
+        ----------------
+        La fonction PAUSE permet d'interrompre le traitement pendant un délai
+        passé en argument. La localisation de l'appel est tracée sur la stderr
+    
+        Usage :
+            from pause import PAUSE
+    
+            PAUSE(secondes=5)
+        """
+    
+        if secondes > 0 :
+            developpeur.sortie.write( "\n\n\n" )
+            ici.ICI()
+                
+            developpeur.sortie.write( "pause de "+str(secondes)+" secondes" )
+            developpeur.sortie.write( "\n\n\n" )
+            developpeur.sortie.flush()
+    
+            import time
+            time.sleep( secondes )
+    
+        developpeur.sortie.flush()
+    
+        return
+
+else :
+    PAUSE = NULL
+
+
+if __name__ == "__main__" :
+    print
+    print "PAUSE(secondes=-1)"
+    PAUSE(secondes=-1)
+    print "PAUSE(secondes=0)"
+    PAUSE(secondes=0)
+    print "PAUSE(secondes=2)"
+    PAUSE(secondes=2)
diff --git a/Utilites/scrute.py b/Utilites/scrute.py
new file mode 100644 (file)
index 0000000..90ade35
--- /dev/null
@@ -0,0 +1,130 @@
+"""
+Module scrute
+-------------
+    Le module scrute propose la fonction SCRUTE qui affiche sur
+    la stderr, la valeur de l'objet (passé en argument)
+    précédée le nom de l'objet.
+    Il propose également la fonction EXAMINE qui détaille sur
+    la stderr le contenu d'un objet
+    
+    N.B. : les fonctions SCRUTE e EXAMINE ne sont opérantes que pour les développeurs
+           (la variable DEVELOPPEUR doit être définie)
+"""
+
+try :
+       from developpeur import DEVELOPPEUR
+except :
+       DEVELOPPEUR=None
+
+def NULL( *l_args, **d_args  ) : pass
+
+if DEVELOPPEUR :
+
+    import developpeur
+    developpeur.sortie.write( "import de "+__name__+" : $Id$" )
+    developpeur.sortie.write( "\n" )
+    import re
+    import linecache
+    import ici
+    import sys
+
+    def SCRUTE( valeur ) :
+
+        """
+        Fonction SCRUTE
+        ---------------
+        La fonction SCRUTE affiche sur la stderr, la valeur (passée en argument)
+        d'une variable précédée de son nom.
+        L'affichage précise également le nom du fichier et le numéro
+        de la ligne où la fonction SCRUTE a été appelée.
+
+        N.B. : le type de la variable doit posséder de préférence une méthode __str__
+
+        Usage :
+        from scrute import SCRUTE
+        r=1.0
+        SCRUTE(r)
+        SCRUTE(r+1)
+        SCRUTE(f(r))
+        Erreur :
+        SCRUTE(r) ; SCRUTE(f(r)) # ==> ERREUR
+        """
+
+
+        filename,lineno=ici.ICI()
+
+        line = linecache.getline( filename, lineno )
+
+        ll=re.sub( "\s*#.*$" , '' ,line)
+
+        l_occurrences=[]
+        l_occurrences=re.findall( "SCRUTE" , ll )
+        assert(len(l_occurrences)>0),__name__+" : pas de SCRUTE trouvé !"
+        assert(len(l_occurrences)<=1),\
+        __name__+" : "+str(len(l_occurrences))+" SCRUTE sur la même ligne ; c'est LIMITE à 1 !"
+
+        ll=re.sub( "\s*;.*$" , '' ,line)
+        regex='^.*SCRUTE[^(]*\('
+        l=re.sub( regex , '' ,ll)
+        regex='\)[^)]*$'
+        nom_objet=re.sub( regex , '' ,l)
+
+        try :
+            developpeur.sortie.write( nom_objet+'=' )
+            s=str(valeur)
+            developpeur.sortie.write( s )
+            developpeur.sortie.write( " ("+str(type(valeur))+")" )
+        except : pass
+        developpeur.sortie.write( '\n' )
+        developpeur.sortie.flush()
+
+        return
+
+    def makeClassName( ob ) :
+        import types
+        if type(ob) == types.InstanceType :
+            return str(ob.__class__)
+        else :
+            return str(type(ob))
+        
+
+    def EXAMINE( ob ) :
+        """
+        Affiche sur la developpeur.sortie le contenu d'un objet
+
+        Usage :
+            class KLASS : pass
+            import Utilites
+            object=KLASS()
+            Utilites.EXAMINE(object)
+        """
+
+        appel_EXAMINE=1
+        f = sys._getframe( appel_EXAMINE )
+        context=f.f_locals
+
+        filename,lineno=ici.ICI()
+        line = linecache.getline( filename, lineno )
+        nom=re.sub( "^.*EXAMINE *\(", "" , line )
+        nom=re.sub( " *[,\)].*$", "" , nom )
+        nom=re.sub( "\n", "" , nom )
+        developpeur.sortie.write( "Examen de "+nom+" de type "+makeClassName(ob)+"\n" )
+
+        for att in dir(ob) :
+            st=nom+'.'+att
+            developpeur.sortie.write( '\t'+st+' = ' )
+            developpeur.sortie.flush()
+            commande="import developpeur;developpeur.sortie.write( str("+st+")+'\\n' )"
+            try :
+                exec commande in context
+            except :
+                commande="import sys; sys.stderr.write( str("+st+")+'\\n' )"
+                exec commande in context
+            
+        return
+
+
+else :
+
+    SCRUTE = NULL
+    EXAMINE = NULL
index 4afd640c6e47ff9d0a596b23ad627b20224b6453..eb37b685e0d4b987519f3c548a6ccaa912b10ba2 100644 (file)
@@ -39,56 +39,6 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
    """
    """
 
-   def valid_child(self):
-       """ Cette methode teste la validite des mots cles de l'etape """
-       for child in self.mc_liste :
-           if not child.isvalid():
-              return 0 
-       return 1
-
-   def valid_regles(self,cr):
-       """ Cette methode teste la validite des regles de l'etape """
-       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)))
-          return 0 
-       return 1
-
-   def valid_sdnom(self,cr):
-       """ Cette methode teste la validite du nom du concept produit par l'etape """
-       valid=1
-       if self.sd.nom != None :
-          if self.jdc and self.jdc.definition.code == 'ASTER' and len(self.sd.nom) > 8 :
-             #  le nom de la sd doit avoir une longueur <= 8 caractères pour ASTER
-             if cr == 'oui' :
-                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
-             valid = 0
-          if string.find(self.sd.nom,'sansnom') != -1 :
-             # la SD est 'sansnom' : --> erreur
-             if cr == 'oui' :
-                self.cr.fatal("Pas de nom pour le concept retourné")
-             valid = 0
-          elif string.find(self.sd.nom,'SD_') != -1 :
-             # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
-             if cr == 'oui' :
-                self.cr.fatal("Pas de nom pour le concept retourné")
-             valid = 0
-       return valid
-
-   def get_valid(self):
-       if hasattr(self,'valid'):
-          return self.valid
-       else:
-          self.valid=None
-          return None
-
-   def set_valid(self,valid):
-       old_valid=self.get_valid()
-       self.valid = valid
-       self.state = 'unchanged'
-       if not old_valid or old_valid != self.valid : 
-           self.init_modif_up()
-
    def isvalid(self,sd='oui',cr='non'):
       """ 
          Methode pour verifier la validité de l'objet ETAPE. Cette méthode
@@ -110,37 +60,62 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
       if self.state == 'unchanged' :
         return self.valid
       else:
-        valid=self.valid_child()
-        valid=valid * self.valid_regles(cr)
-
+        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
-
-        if self.definition.reentrant == 'n' and self.reuse:
-          # Il ne peut y avoir de concept reutilise avec un OPER non reentrant
-          if cr == 'oui' : self.cr.fatal('Operateur non reentrant : ne pas utiliser reuse ')
-          valid=0
+        #
+        # On complète les tests avec ceux sur le concept produit
+        #
+        if hasattr(self,'valid'):
+          old_valid = self.valid
+        else:
+          old_valid = 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:
-          valid = valid * self.valid_sdnom(cr)
-
+          # 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' :
+              if cr == 'oui' :
+                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
+              valid = 0
+            if string.find(self.sd.nom,'sansnom') != -1 :
+              # la SD est 'sansnom' : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
+            elif string.find(self.sd.nom,'SD_') != -1 :
+              # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
         if valid:
           valid = self.update_sdprod(cr)
-
-        self.set_valid(valid)
-
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
         return self.valid
 
    def update_sdprod(self,cr='non'):
@@ -198,6 +173,7 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
         if self.definition.reentrant == 'o':
            if cr == 'oui' : self.cr.fatal('Commande obligatoirement reentrante : specifier reuse=concept')
            valid=0 
+           #self.reuse = self.sd
       return valid
 
 
index 740c4913e798e8743310cd58e105522c3369fd90..1ceca1e5cb25efb13f268bf4d490090aea1fa796 100644 (file)
@@ -61,38 +61,58 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
       if self.state == 'unchanged' :
         return self.valid
       else:
-        valid=self.valid_child()
-        valid=valid * self.valid_regles(cr)
-
+        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:
+          old_valid = None
+        # on teste, si elle existe, le nom de la sd (sa longueur doit etre <= 8 caractères)
         if self.sd != None :
-           valid = valid * self.valid_sdnom(cr)
-
-        if self.definition.reentrant == 'n' and self.reuse:
-           # Il ne peut y avoir de concept reutilise avec une MACRO  non reentrante
-           if cr == 'oui' : self.cr.fatal('Macro-commande non reentrante : ne pas utiliser reuse ')
-           valid=0
-
+          # la SD existe déjà : on regarde son nom
+          if self.sd.get_name() != None :
+            if len(self.sd.nom) > 8 :
+              if cr == 'oui' :
+                self.cr.fatal("Le nom de concept %s est trop long (8 caractères maxi)" %self.sd.nom)
+              valid = 0
+          if string.find(self.sd.nom,'sansnom') != -1 :
+              # la SD est 'sansnom' : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
+          elif string.find(self.sd.nom,'SD_') != -1 :
+              # la SD est 'SD_' cad son nom = son id donc pas de nom donné par utilisateur : --> erreur
+              if cr == 'oui' :
+                self.cr.fatal("Pas de nom pour le concept retourné")
+              valid = 0
         if valid:
           valid = self.update_sdprod(cr)
-
         # Si la macro comprend des etapes internes, on teste leur validite
         for e in self.etapes:
           if not e.isvalid():
             valid=0
             break
-
-        self.set_valid(valid)
-
+        self.valid = valid
+        self.state = 'unchanged'
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
         return self.valid
 
    def update_sdprod(self,cr='non'):
@@ -161,6 +181,7 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
         if self.definition.reentrant == 'o':
            if cr == 'oui' : self.cr.fatal('Commande obligatoirement reentrante : specifier reuse=concept')
            valid=0
+           #self.reuse = self.sd
       return valid
 
    def report(self):
index e4d43bc1b0f5928a46634e9fb8e22ce118b66aef..b80e670d274b734a7cb7dbdaa015f849b899b63c 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF V_MCSIMP Validation  DATE 09/09/2003   AUTEUR DURAND C.DURAND 
+#@ MODIF V_MCSIMP Validation  DATE 20/01/2003   AUTEUR DURAND C.DURAND 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -86,21 +86,12 @@ class MCSIMP:
             self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
           valid = 0
         # type,into ...
-        valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
-        #
-        # On verifie les validateurs s'il y en a
-        #
-        if self.definition.validators and not self.definition.validators.verif(self.valeur):
-           if cr == 'oui' :
-              self.cr.fatal(string.join(("Mot-clé : ",self.nom,"devrait avoir ",self.definition.validators.info())))
-           valid=0
-        # fin des validateurs
-        #
+        valid = self.verif_type(cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
         self.valid = valid
         self.state = 'unchanged'
         # Si la validité du mot clé a changé, on le signale à l'objet parent
-        if not old_valid or old_valid != self.valid : 
-           self.init_modif_up()
+        if old_valid:
+          if old_valid != self.valid : self.init_modif_up()
         return self.valid
 
    def isoblig(self):
@@ -136,15 +127,18 @@ class MCSIMP:
    def verif_type(self,val=None,cr='non'):
       """
         FONCTION :
-         Cette methode verifie que le type de l'argument val est en conformite avec celui 
-         qui est declare dans la definition du mot cle simple.
-         Elle a plusieurs modes de fonctionnement liés à la valeur de cr.
-         Si cr vaut 'oui' : elle remplit le compte-rendu self.cr sinon elle ne le remplit pas.
+         Cette méthode a plusieurs modes de fonctionnement liés à la valeur de val et de cr.
+         Si cr ne vaut pas 'oui' : elle ne remplit pas le compte-rendu self.cr
+         Si val vaut None, elle vérifie le type de self.valeur
+         Si val ne vaut pas None, elle vérifie le type de val
         PARAMETRE DE RETOUR :
-         Cette méthode retourne une valeur booléenne qui vaut 1 si le type de val est correct ou 0 sinon
+         Cette méthode retourne une valeur booléenne qui vaut 1 si le type est correct ou 0 sinon
          
       """
-      valeur = val
+      if val != None:
+        valeur = val
+      else:
+        valeur = self.valeur
       if valeur == None :
         if cr == 'oui':
           self.cr.fatal("None n'est pas une valeur autorisée")
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..0b8cac83da41776ced6c8af50a6af364d743d0bc 100644 (file)
@@ -1,17 +1,33 @@
-#@ 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
+try :
+    import TextTools
+except : 
+    ""
 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 2003/07/01 10:26:14 salome Exp $"
 #
 
 Keywords=('MAILLE_1','MAILLE_2','MAILLE_ESCL','MAILLE_FOND','MAILLE_MAIT','MAILLE_ORIG','MAILLE',
@@ -446,6 +462,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..8052f0c38765c8f958284bcf3d3603faa40b5a53 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.
     XXX Ce fichier doit etre corrigé pour incorporer deux modifications
     réalisées dans la version V1_1p1 d'EFICAS
 """
-from TextTools import *
+try :
+    from TextTools import *
+except :
+    ""
 
 #
 __version__="$Name:  $"
-__Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
+__Id__="$Id: tables.py,v 1.2 2003/07/01 10:26:14 salome Exp $"
 #
 
 err0='ERR0 , erreur non identifiee : '
@@ -24,488 +46,501 @@ 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)
-
-white_set=set(whitespace)
-
-delim=" ();:=,!&*/%\n"
-
-whitespace = \
-    (None,AllIn,' \t')
-
-opt_whitespace = \
-    whitespace      + (MatchOk,)
-
-t_opt_whitespace = \
-    whitespace      + (+1,)
-
-t_opt_whitenl = \
-  (None,AllIn,' \t\n\r',+1)
-
-t_err = (
-    (None,AllNotIn,';',+1),
-    (None,Is,';'),
-    (None,Skip,-1),
-)
-
-commespaces = \
-    ('comments',Table,(
-      (None,IsInSet,white_set,+1,+4),
-      (None,Is,'%',MatchFail),
-      # <comment>
-      (None,AllNotIn,'\n\r',+1),
-      (None,AllIn,'\n\r',+1),
-      # <blancs>
-      (None,AllInSet,white_set,+1),
-      (None,Is,'%',MatchOk,-3),
-    ))
-
-t_commespaces = (
-      (None,IsInSet,white_set,+1,+4),
-      (None,Is,'%',MatchFail),
-      # <comment>
-      (None,AllNotIn,'\n\r',+1),
-      (None,AllIn,'\n\r',+1),
-      # <blancs>
-      (None,AllInSet,white_set,+1),
-      (None,Is,'%',MatchOk,-3),
-)
-
-x_commespaces = \
-    ('comments',Table,(
-         # <debut>
-         (None,Is,'%',+3,+1),
-            (None,AllNotIn,'\n\r',+1),
-            (None,AllIn,'\n\r',+1,-2),
-         (None,AllInSet,white_set,+1,-3),
-    ))
-
-t_ident = \
-    ('ident',Table,(
-      (None,IsIn,alpha+'_'),
-      (None,AllIn,alpha+'_'+number,MatchOk),
-    ))
-
-t_identificateur = (
-      (None,IsIn,alpha+'_'),
-      (None,AllIn,alpha+'_'+number,MatchOk),
-)
-
-t_identmc = (
-      (None,IsIn,alpha+'_'),
-      (None,AllIn,alpha+'_'+number,+1),
-      (None,Table,t_commespaces,+1),
-      (None,Is,':',MatchFail),
-)
-
-n_ident = \
-    (None,Table,(
-      (None,IsIn,alpha+'_'),
-      (None,AllIn,alpha+'_'+number,MatchOk),
-    ))
-
-n_string = \
-    (None,Table,(
-      (None,Is,"'"),
-      # <loop>
-      (None,AllNotIn,"'",+1),
-      (None,Word,"''",+1,-1),
-      (None,Is,"'",MatchFail,MatchOk),
-    ))
-
-t_number = \
-    ('num',Table,(
-      (None,IsIn,'-+',+1),
-      (None,Is,'.',+2),
-      (None,IsIn,number,MatchFail,+4),
-      # <entiere>
-      (None,IsIn,number,MatchFail),
-      (None,AllIn,number,+1),
-      (None,Is,'.',+2),
-      # <decimal>
-      (None,AllIn,number,+1),
-      # <exposant>                      # si pas exposant termine number trouve
-      (None,IsIn,'deDE',MatchOk),
-      (None,IsIn,'-+',+1),
-      (None,AllIn,number,MatchFail,MatchOk),
-    ))
-
-n_number = \
-    (None,Table,(
-      (None,IsIn,'-+',+1),
-      (None,Is,'.',+2),
-      (None,IsIn,number,MatchFail,+4),
-      # <entiere>
-      (None,IsIn,number,MatchFail),
-      (None,AllIn,number,+1),
-      (None,Is,'.',+2),
-      # <decimal>
-      (None,AllIn,number,+1),
-      # <exposant>                      # si pas exposant termine number trouve
-      (None,IsIn,'deDE',MatchOk),
-      (None,IsIn,'-+',+1),
-      (None,AllIn,number,MatchFail,MatchOk),
-    ))
-
-t_complexe = \
-  ('CPLX',Table,(
-    ("RI",Word,'RI',+7),
-    commespaces     + (+1,),
-    t_number        + (MatchFail,),      # ce n est pas un complexe
-    commespaces     + (+1,),             # a partir d ici c est un complexe => produire erreurs
-    (None,Is,',',+1),
-    commespaces     + (+1,),
-    t_number        + (MatchFail,MatchOk),
-    # <mp>
-    ("MP",Word,'MP',MatchFail),
-    commespaces     + (+1,),
-    t_number        + (MatchFail,),      # ce n est pas un complexe
-    commespaces     + (+1,),             # a partir d ici c est un complexe => produire erreurs
-    (None,Is,',',+1),
-    commespaces     + (+1,),
-    t_number        + (MatchFail,MatchOk),
-    # <err>
-    (err7,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_vexpr = (
-    ('par',Is,'(',+5,+1),
-      commespaces     + (+1,),
-      ('vexpr',Table,ThisTable,+26),
-      commespaces     + (+1,),
-      ('par2',Is,')',+25,+15),
-    t_number        + (+1,+14),
-    t_complexe      + (+1,+13),
-    ('sign',IsIn,'+-',+3,+1),
-      commespaces     + (+1,),
-      ('vexpr',Table,ThisTable,+19,+10),
-    ("PI",Word,'PI',+1,+9),
-    t_ident         + (MatchFail,),
-    commespaces     + (+1,),
-    ('listpar',Is,'(',+6,+1), # on peut avoir une liste de parametres
-      # <params>
-      commespaces     + (+1,),
-      ('param',Table,ThisTable,+13),
-      commespaces     + (+1,),
-      (None,Is,',',+1,-3),
-      ('finlist',Is,')',+11),
-    # <op>
-    commespaces     + (+1,),
-    ('exp',Word,'**',+3,+1),
-      commespaces     + (+1,),
-      ('vexpr',Table,ThisTable,+6,MatchOk),
-    ('op',IsIn,'+-*/',+3,+1),
-      commespaces     + (+1,),
-      ('vexpr',Table,ThisTable,+3,MatchOk),
-    (None,Jump,To,MatchOk),
-    # <err>
-    (err0,Table,t_err,MatchFail,MatchOk),
-    # <err10>
-    (err10,Table,t_err,MatchFail,MatchOk),
-    # <err9>
-    (err9,Table,t_err,MatchFail,MatchOk),
-)
-
-t_liste_param = \
-  ('liste',Table,(
-    t_ident,
-    commespaces     + (+1,),
-    (None,Is,'('),
-    commespaces     + (+1,),
-    t_vexpr         + (MatchFail,),
-    # <suite>
-    commespaces     + (+1,),
-    (None,Is,',',+3),
-    commespaces     + (+1,),
-    t_vexpr         + (+3,-3),
-    # <fin>
-    commespaces     + (+1,),
-    (None,Is,')',+1,MatchOk),
-    # <err>
-    (err7,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_eval_expr = \
-  ('EVAL',Table,(
-    (None,Word,'EVAL'),
-    commespaces     + (+1,),
-    (None,Is,'(',+5),
-    commespaces     + (+1,),
-    ('vexpr',Table,t_vexpr,+3),
-    commespaces     + (+1,),
-    (None,Is,')',+1,MatchOk),
-    # <err>
-    (err7,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_entier = \
-    ('entier',Table,(
-      (None,IsIn,number),
-      (None,AllIn,number,+1),
-      (None,IsIn,delim,MatchFail,+1),
-      (None,Skip,-1),
-    ))
-
-t_comment = \
-  ('comment',Table,(
-     (None,Is,'%'),
-     (None,AllNotIn,'\n\r',+1),
-     (None,AllIn,'\n\r',MatchOk),
-  ))
-
-t_nullline = \
-  ('Null',AllIn,' ;\t\n\r')
-
-t_passline = \
-  ('passline',Table,(
-    (None,AllNotIn,newline,+1),
-    (None,IsIn,newline),
-  ))
-
-t_reste = \
-  ('reste',Table,(
-    (None,AllNotIn,';',+1),
-  ))
-
-t_rest2 = \
-  ('reste',Table,(
-    (None,AllNotIn,';',+1),
-    (None,Is,';'),
-    (None,AllNotIn,'\n',+1),
-    (None,Is,'\n',MatchOk,MatchOk),
-  ))
-
-t_formule = \
-  ('formule',Table,(
-    commespaces     + (+1,),
-    (None,Word,'!FORMULE'),
-    commespaces     + (+1,),
-    (None,Is,'(',+32),
-    commespaces     + (+1,),
-    ('type',Table,t_identificateur,+29),
-    commespaces     + (+1,),
-    (None,Is,':',+27),
-    commespaces     + (+1,),
-    (None,Is,'(',+26),
-    commespaces     + (+1,),
-    ('id',Table,t_identificateur,+23),
-    commespaces     + (+1,),
-    (None,Is,'(',+22),
-    # <params>
-    commespaces     + (+1,),
-    ('typ',Table,t_identmc,+1),
-    commespaces     + (+1,),
-    ('id',Table,t_identificateur,+17),
-    commespaces     + (+1,),
-    (None,Is,',',+1,-5),
-    commespaces     + (+1,),
-    (None,Is,')',-7),
-    commespaces     + (+1,),
-    (None,Is,'=',+11),
-    commespaces     + (+1,),
-    ('vexpr',Table,t_vexpr,+9),
-    commespaces     + (+1,),
-    (None,Is,')',+8),
-    commespaces     + (+1,),
-    (None,Is,')',+6),
-    commespaces     + (+1,),
-    (None,Is,';',+3),
-    (None,AllNotIn,'\n',+1),
-    (None,Is,'\n',MatchOk,MatchOk),
-    # <err>
-    (err0,Table,t_err,MatchFail,MatchOk),
-    # <err9>
-    (err9,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_nom_ope = \
-    ('nom_ope',Table,(
-      (None,Word,'EVAL',+1,MatchFail),  # EVAL n est pas un nom d operateur, il est reserve
-      (None,IsIn,alpha+'_'),
-      (None,AllIn,alpha+'_'+number,+1),
-      commespaces     + (+1,),
-      (None,Is,'(',MatchFail),
-      (None,Skip,-1),
-    ))
-
-t_arg = \
-  ('arg',Table,(
-    n_string        + (+1,MatchOk),
-    n_ident,
-  ))
-
-t_larg = \
-  ('larg',Table,(
-    (None,Is,'(',MatchFail),
-    # <arg>
-    commespaces     + (+1,),
-    t_complexe      + (+1,+4),
-    t_number        + (+1,+3),
-    t_eval_expr     + (+1,+2),
-    t_arg           + (MatchFail,+1),
-    # <suite>
-    commespaces     + (+1,),
-    (None,Is,',',+1),
-    (None,Is,')',-7,MatchOk),
-  ))
-
-t_mcf = \
-  ('mcf',Table,(
-    (None,Is,'(',MatchFail),
-    ("comments",Table,t_commespaces,+1),
-    (None,Is,')',+1,MatchOk),
-    t_ident         + (MatchFail,),
-    ("comments",Table,t_commespaces,+1),
-    (None,Is,':',MatchFail),            # a partir d ici on est dans un mot cle facteur (erreurs eventuelles)
-    # <args>
-    ("comments",Table,t_commespaces,+1),
-    t_larg          + (+1,+5),
-    t_complexe      + (+1,+4),
-    t_number        + (+1,+3),
-    t_eval_expr     + (+1,+2),
-    t_arg           + (+8,),
-    # <suite>
-    ("comments",Table,t_commespaces,+1),
-    (None,Is,',',+1),
-    ("comments",Table,t_commespaces,+1),
-    (None,Is,')',+1,MatchOk),
-    t_ident         + (+3,),
-    ("comments",Table,t_commespaces,+1),
-    (None,Is,':',+1,-12),
-    # <err>
-    (err7,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_comm = \
-  ('comm',Table,(                        # on attend les arguments entre () sinon erreur
-    (None,Is,'(',+21),
-    commespaces     + (+1,),
-    (None,Is,')',+1,MatchOk),
-    # <call>
-    t_ident         + (+18,),
-    commespaces     + (+1,),
-    (None,Is,':',+16),
-    commespaces     + (+1,),
-    t_mcf           + (+5,),
-    # <mcfsuite>
-    commespaces     + (+1,),
-    (None,Is,',',+1),
-    commespaces     + (+1,),
-    t_mcf           + (+7,-3),
-    # <args>
-    t_larg          + (+1,+5),
-    t_complexe      + (+1,+4),
-    t_number        + (+1,+3),
-    t_eval_expr     + (+1,+2),
-    t_arg           + (+5,),
-    # <suite>
-    commespaces     + (+1,),
-    # <sep>
-    (None,Is,',',+1),
-    commespaces     + (+1,),
-    (None,Is,')',-17,MatchOk),
-    # <err>
-    (err1,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_affe = \
-  ('affe',Table,(
-    commespaces     + (+1,),
-    t_larg          + (+1,+6),
-    t_complexe      + (+1,+5),
-    t_number        + (+1,+4),
-    t_eval_expr     + (+1,+3),
-    t_arg           + (+1,+2),
-    (None,Jump,To,+2),
-    # <suite>
-    (None,Jump,To,MatchOk),
-    # <err>
-    (err0,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_reuse = \
-  ('reuse',Table,(
-    t_opt_whitespace,
-    t_ident,
-    t_opt_whitespace,
-    (None,Is,'=',+5),
-    t_opt_whitespace,
-    t_nom_ope       + (+2,+1),
-    # <comm>
-    t_comm          + (MatchFail,MatchOk),
-    # <affe>
-    t_affe          + (MatchFail,MatchOk),
-    # <err>
-    (err8,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_noreuse = \
-  ('noreuse',Table,(
-    t_opt_whitespace,
-    t_ident,
-    t_opt_whitenl,
-    (None,Is,'=',+3,+1),     # on a affaire a un operateur ou une affectation
-      t_opt_whitespace,
-      t_nom_ope       + (+4,+3),
-    (None,Is,'(',+5,+1),
-    (None,Skip,-1),
-    # <comm>
-    t_comm          + (+2,MatchOk),
-    # <affe>
-    t_affe          + (+1,MatchOk),
-    # <err>
-    (err0,Table,t_err,MatchFail,MatchOk),
-    # <err8>
-    (err8,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_fin = \
-  ('commande',Table,(
-    ('noreuse',Table,(
-      t_opt_whitespace,
-      ('ident',Word,"FIN"),
-      t_opt_whitenl,
-      (None,Is,'(',MatchFail),          # On est vraiment sur d avoir la commande FIN apres avoir identifie (
-      # On recule d un caractere pour identifier les arguments entre parenthèses
-      (None,Skip,-1),
-      t_comm          + (+1,MatchOk),
-      (err0,Table,t_err,MatchFail,MatchOk),
-    )),
-    commespaces     + (+1,),
-    (None,Is,';',+1,MatchOk),
-    # <err>
-    (err0,Table,t_err,MatchFail,MatchOk),
-  ))
-
-t_commande = \
-  ('commande',Table,(
-    t_opt_whitespace,
-    (None,Is,'&',+2,+1),
-      t_reuse         + (MatchFail,+2),
-    t_noreuse       + (MatchFail,),
-    # <fin>
-    commespaces     + (+1,),
-    (None,Is,';',+1,MatchOk),
-    # <err>
-    (err0,Table,t_err,MatchFail,MatchOk),
-  ))
-
-aster_script = (
-  # <top>
-  t_nullline      + (+1,+0),
-  t_comment       + (+1,-1),
-  t_formule       + (+1,-2),
-  t_fin           + (+1,+4),
-  t_commande      + (+1,-4),
-  t_passline      + (+1,-5),
-  (None,EOF,Here,-6),
-  # <AfterFin>
-  t_nullline      + (+1,+0),
-  t_passline      + (+1,-1),
-  (None,EOF,Here,-2),
-)
-
-
-
+        err10,err11)
+
+try :
+    delim=" ();:=,!&*/%\n"
+
+    whitespace = \
+        (None,AllIn,' \t')
+
+    opt_whitespace = \
+        whitespace      + (MatchOk,)
+
+    t_opt_whitespace = \
+        whitespace      + (+1,)
+
+    t_opt_whitenl = \
+      (None,AllIn,' \t\n\r',+1)
+
+    t_err = (
+        (None,AllNotIn,';',+1),
+        (None,Is,';'),
+        (None,Skip,-1),
+    )
+
+    commespaces = \
+        ('comments',Table,(
+          (None,IsInSet,white_set,+1,+4),
+          (None,Is,'%',MatchFail),
+          # <comment>
+          (None,AllNotIn,'\n\r',+1),
+          (None,AllIn,'\n\r',+1),
+          # <blancs>
+          (None,AllInSet,white_set,+1),
+          (None,Is,'%',MatchOk,-3),
+        ))
+
+    t_commespaces = (
+          (None,IsInSet,white_set,+1,+4),
+          (None,Is,'%',MatchFail),
+          # <comment>
+          (None,AllNotIn,'\n\r',+1),
+          (None,AllIn,'\n\r',+1),
+          # <blancs>
+          (None,AllInSet,white_set,+1),
+          (None,Is,'%',MatchOk,-3),
+    )
+
+    x_commespaces = \
+        ('comments',Table,(
+             # <debut>
+             (None,Is,'%',+3,+1),
+                (None,AllNotIn,'\n\r',+1),
+                (None,AllIn,'\n\r',+1,-2),
+             (None,AllInSet,white_set,+1,-3),
+        ))
+
+    t_ident = \
+        ('ident',Table,(
+          (None,IsIn,alpha+'_'),
+          (None,AllIn,alpha+'_'+number,MatchOk),
+        ))
+
+    t_identificateur = (
+          (None,IsIn,alpha+'_'),
+          (None,AllIn,alpha+'_'+number,MatchOk),
+    )
+
+    t_identmc = (
+          (None,IsIn,alpha+'_'),
+          (None,AllIn,alpha+'_'+number,+1),
+          (None,Table,t_commespaces,+1),
+          (None,Is,':',MatchFail),
+    )
+
+    n_ident = \
+        (None,Table,(
+          (None,IsIn,alpha+'_'),
+          (None,AllIn,alpha+'_'+number,MatchOk),
+        ))
+
+    n_string = \
+        (None,Table,(
+          (None,Is,"'"),
+          # <loop>
+          (None,AllNotIn,"'",+1),
+          (None,Word,"''",+1,-1),
+          (None,Is,"'",MatchFail,MatchOk),
+        ))
+
+    t_number = \
+        ('num',Table,(
+          (None,IsIn,'-+',+1),
+          (None,Is,'.',+2),
+          (None,IsIn,number,MatchFail,+4),
+          # <entiere>
+          (None,IsIn,number,MatchFail),
+          (None,AllIn,number,+1),
+          (None,Is,'.',+2),
+          # <decimal>
+          (None,AllIn,number,+1),
+          # <exposant>                      # si pas exposant termine number trouve
+          (None,IsIn,'deDE',MatchOk),
+          (None,IsIn,'-+',+1),
+          (None,AllIn,number,MatchFail,MatchOk),
+        ))
+
+    n_number = \
+        (None,Table,(
+          (None,IsIn,'-+',+1),
+          (None,Is,'.',+2),
+          (None,IsIn,number,MatchFail,+4),
+          # <entiere>
+          (None,IsIn,number,MatchFail),
+          (None,AllIn,number,+1),
+          (None,Is,'.',+2),
+          # <decimal>
+          (None,AllIn,number,+1),
+          # <exposant>                      # si pas exposant termine number trouve
+          (None,IsIn,'deDE',MatchOk),
+          (None,IsIn,'-+',+1),
+          (None,AllIn,number,MatchFail,MatchOk),
+        ))
+
+    t_complexe = \
+      ('CPLX',Table,(
+        ("RI",Word,'RI',+7),
+        commespaces     + (+1,),
+        t_number        + (MatchFail,),      # ce n est pas un complexe
+        commespaces     + (+1,),             # a partir d ici c est un complexe => produire erreurs
+        (None,Is,',',+1),
+        commespaces     + (+1,),
+        t_number        + (MatchFail,MatchOk),
+        # <mp>
+        ("MP",Word,'MP',MatchFail),
+        commespaces     + (+1,),
+        t_number        + (MatchFail,),      # ce n est pas un complexe
+        commespaces     + (+1,),             # a partir d ici c est un complexe => produire erreurs
+        (None,Is,',',+1),
+        commespaces     + (+1,),
+        t_number        + (MatchFail,MatchOk),
+        # <err>
+        (err7,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    # 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,),
+          ('vexpr',Table,ThisTable,+26),
+          commespaces     + (+1,),
+          ('par2',Is,')',+25,+15),
+        t_number        + (+1,+14),
+        t_complexe      + (+1,+13),
+        ('sign',IsIn,'+-',+3,+1),
+          commespaces     + (+1,),
+          ('vexpr',Table,ThisTable,+19,+10),
+        t_PI            + (+1,+9),
+        t_ident         + (MatchFail,),
+        commespaces     + (+1,),
+        ('listpar',Is,'(',+6,+1), # on peut avoir une liste de parametres
+          # <params>
+          commespaces     + (+1,),
+          ('param',Table,ThisTable,+13),
+          commespaces     + (+1,),
+          (None,Is,',',+1,-3),
+          ('finlist',Is,')',+11),
+        # <op>
+        commespaces     + (+1,),
+        ('exp',Word,'**',+3,+1),
+          commespaces     + (+1,),
+          ('vexpr',Table,ThisTable,+6,MatchOk),
+        ('op',IsIn,'+-*/',+3,+1),
+          commespaces     + (+1,),
+          ('vexpr',Table,ThisTable,+3,MatchOk),
+        (None,Jump,To,MatchOk),
+        # <err>
+        (err0,Table,t_err,MatchFail,MatchOk),
+        # <err10>
+        (err10,Table,t_err,MatchFail,MatchOk),
+        # <err9>
+        (err9,Table,t_err,MatchFail,MatchOk),
+    )
+    
+    t_liste_param = \
+      ('liste',Table,(
+        t_ident,
+        commespaces     + (+1,),
+        (None,Is,'('),
+        commespaces     + (+1,),
+        t_vexpr         + (MatchFail,),
+        # <suite>
+        commespaces     + (+1,),
+        (None,Is,',',+3),
+        commespaces     + (+1,),
+        t_vexpr         + (+3,-3),
+        # <fin>
+        commespaces     + (+1,),
+        (None,Is,')',+1,MatchOk),
+        # <err>
+        (err7,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_eval_expr = \
+      ('EVAL',Table,(
+        (None,Word,'EVAL'),
+        commespaces     + (+1,),
+        (None,Is,'(',+5),
+        commespaces     + (+1,),
+        ('vexpr',Table,t_vexpr,+3),
+        commespaces     + (+1,),
+        (None,Is,')',+1,MatchOk),
+        # <err>
+        (err7,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_entier = \
+        ('entier',Table,(
+          (None,IsIn,number),
+          (None,AllIn,number,+1),
+          (None,IsIn,delim,MatchFail,+1),
+          (None,Skip,-1),
+        ))
+    
+    t_comment = \
+      ('comment',Table,(
+         (None,Is,'%'),
+         (None,AllNotIn,'\n\r',+1),
+         (None,AllIn,'\n\r',MatchOk),
+      ))
+    
+    t_nullline = \
+      ('Null',AllIn,' ;\t\n\r')
+    
+    t_passline = \
+      ('passline',Table,(
+        (None,AllNotIn,newline,+1),
+        (None,IsIn,newline),
+      ))
+    
+    t_reste = \
+      ('reste',Table,(
+        (None,AllNotIn,';',+1),
+      ))
+    
+    t_rest2 = \
+      ('reste',Table,(
+        (None,AllNotIn,';',+1),
+        (None,Is,';'),
+        (None,AllNotIn,'\n',+1),
+        (None,Is,'\n',MatchOk,MatchOk),
+      ))
+    
+    t_formule = \
+      ('formule',Table,(
+        commespaces     + (+1,),
+        (None,Word,'!FORMULE'),
+        commespaces     + (+1,),
+        (None,Is,'(',+32),
+        commespaces     + (+1,),
+        ('type',Table,t_identificateur,+29),
+        commespaces     + (+1,),
+        (None,Is,':',+27),
+        commespaces     + (+1,),
+        (None,Is,'(',+26),
+        commespaces     + (+1,),
+        ('id',Table,t_identificateur,+23),
+        commespaces     + (+1,),
+        (None,Is,'(',+22),
+        # <params>
+        commespaces     + (+1,),
+        ('typ',Table,t_identmc,+1),
+        commespaces     + (+1,),
+        ('id',Table,t_identificateur,+17),
+        commespaces     + (+1,),
+        (None,Is,',',+1,-5),
+        commespaces     + (+1,),
+        (None,Is,')',-7),
+        commespaces     + (+1,),
+        (None,Is,'=',+11),
+        commespaces     + (+1,),
+        ('vexpr',Table,t_vexpr,+9),
+        commespaces     + (+1,),
+        (None,Is,')',+9),
+        commespaces     + (+1,),
+        (None,Is,')',+7),
+        commespaces     + (+1,),
+        (None,Is,';',+3),
+        (None,AllNotIn,'\n',+1),
+        (None,Is,'\n',MatchOk,MatchOk),
+        # <err>
+        (err0,Table,t_err,MatchFail,MatchOk),
+        # <err9>
+        (err9,Table,t_err,MatchFail,MatchOk),
+        # <err11>
+        (err11,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_nom_ope = \
+        ('nom_ope',Table,(
+          (None,Word,'EVAL',+1,MatchFail),  # EVAL n est pas un nom d operateur, il est reserve
+          (None,IsIn,alpha+'_'),
+          (None,AllIn,alpha+'_'+number,+1),
+          commespaces     + (+1,),
+          (None,Is,'(',MatchFail),
+          (None,Skip,-1),
+        ))
+    
+    t_arg = \
+      ('arg',Table,(
+        n_string        + (+1,MatchOk),
+        n_ident,
+      ))
+    
+    t_larg = \
+      ('larg',Table,(
+        (None,Is,'(',MatchFail),
+        # <arg>
+        commespaces     + (+1,),
+        t_complexe      + (+1,+4),
+        t_number        + (+1,+3),
+        t_eval_expr     + (+1,+2),
+        t_arg           + (MatchFail,+1),
+        # <suite>
+        commespaces     + (+1,),
+        (None,Is,',',+1),
+        (None,Is,')',-7,MatchOk),
+      ))
+    
+    t_mcf = \
+      ('mcf',Table,(
+        (None,Is,'(',MatchFail),
+        ("comments",Table,t_commespaces,+1),
+        (None,Is,')',+1,MatchOk),
+        t_ident         + (MatchFail,),
+        ("comments",Table,t_commespaces,+1),
+        (None,Is,':',MatchFail),            # a partir d ici on est dans un mot cle facteur (erreurs eventuelles)
+        # <args>
+        ("comments",Table,t_commespaces,+1),
+        t_larg          + (+1,+5),
+        t_complexe      + (+1,+4),
+        t_number        + (+1,+3),
+        t_eval_expr     + (+1,+2),
+        t_arg           + (+8,),
+        # <suite>
+        ("comments",Table,t_commespaces,+1),
+        (None,Is,',',+1),
+        ("comments",Table,t_commespaces,+1),
+        (None,Is,')',+1,MatchOk),
+        t_ident         + (+3,),
+        ("comments",Table,t_commespaces,+1),
+        (None,Is,':',+1,-12),
+        # <err>
+        (err7,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_comm = \
+      ('comm',Table,(                        # on attend les arguments entre () sinon erreur
+        (None,Is,'(',+21),
+        commespaces     + (+1,),
+        (None,Is,')',+1,MatchOk),
+        # <call>
+        t_ident         + (+18,),
+        commespaces     + (+1,),
+        (None,Is,':',+16),
+        commespaces     + (+1,),
+        t_mcf           + (+5,),
+        # <mcfsuite>
+        commespaces     + (+1,),
+        (None,Is,',',+1),
+        commespaces     + (+1,),
+        t_mcf           + (+7,-3),
+        # <args>
+        t_larg          + (+1,+5),
+        t_complexe      + (+1,+4),
+        t_number        + (+1,+3),
+        t_eval_expr     + (+1,+2),
+        t_arg           + (+5,),
+        # <suite>
+        commespaces     + (+1,),
+        # <sep>
+        (None,Is,',',+1),
+        commespaces     + (+1,),
+        (None,Is,')',-17,MatchOk),
+        # <err>
+        (err1,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_affe = \
+      ('affe',Table,(
+        commespaces     + (+1,),
+        t_larg          + (+1,+6),
+        t_complexe      + (+1,+5),
+        t_number        + (+1,+4),
+        t_eval_expr     + (+1,+3),
+        t_arg           + (+1,+2),
+        (None,Jump,To,+2),
+        # <suite>
+        (None,Jump,To,MatchOk),
+        # <err>
+        (err0,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_reuse = \
+      ('reuse',Table,(
+        t_opt_whitespace,
+        t_ident,
+        t_opt_whitespace,
+        (None,Is,'=',+5),
+        t_opt_whitespace,
+        t_nom_ope       + (+2,+1),
+        # <comm>
+        t_comm          + (MatchFail,MatchOk),
+        # <affe>
+        t_affe          + (MatchFail,MatchOk),
+        # <err>
+        (err8,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_noreuse = \
+      ('noreuse',Table,(
+        t_opt_whitespace,
+        t_ident,
+        t_opt_whitenl,
+        (None,Is,'=',+3,+1),     # on a affaire a un operateur ou une affectation
+          t_opt_whitespace,
+          t_nom_ope       + (+4,+3),
+        (None,Is,'(',+5,+1),
+        (None,Skip,-1),
+        # <comm>
+        t_comm          + (+2,MatchOk),
+        # <affe>
+        t_affe          + (+1,MatchOk),
+        # <err>
+        (err0,Table,t_err,MatchFail,MatchOk),
+        # <err8>
+        (err8,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_fin = \
+      ('commande',Table,(
+        ('noreuse',Table,(
+          t_opt_whitespace,
+          ('ident',Word,"FIN"),
+          t_opt_whitenl,
+          (None,Is,'(',MatchFail),          # On est vraiment sur d avoir la commande FIN apres avoir identifie (
+          # On recule d un caractere pour identifier les arguments entre parenthèses
+          (None,Skip,-1),
+          t_comm          + (+1,MatchOk),
+          (err0,Table,t_err,MatchFail,MatchOk),
+        )),
+        commespaces     + (+1,),
+        (None,Is,';',+1,MatchOk),
+        # <err>
+        (err0,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    t_commande = \
+      ('commande',Table,(
+        t_opt_whitespace,
+        (None,Is,'&',+2,+1),
+          t_reuse         + (MatchFail,+2),
+        t_noreuse       + (MatchFail,),
+        # <fin>
+        commespaces     + (+1,),
+        (None,Is,';',+1,MatchOk),
+        # <err>
+        (err0,Table,t_err,MatchFail,MatchOk),
+      ))
+    
+    aster_script = (
+      # <top>
+      t_nullline      + (+1,+0),
+      t_comment       + (+1,-1),
+      t_formule       + (+1,-2),
+      t_fin           + (+1,+4),
+      t_commande      + (+1,-4),
+      t_passline      + (+1,-5),
+      (None,EOF,Here,-6),
+      # <AfterFin>
+      t_nullline      + (+1,+0),
+      t_passline      + (+1,-1),
+      (None,EOF,Here,-2),
+    )
+    
+except:
+    print "Textools non importe"
+    
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..feb815e9b9a17cf1f6819b04f0bbabb30e35f505 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
 
@@ -195,11 +207,10 @@ class PARSEUR_PYTHON:
 
     def analyse(self):
         """
-        Transforme dans self.fichier les commentaires Python (#...) par un objet
-        commentaire qui pourra donc être interprété par EFICAS.
-        Stocke le résultat dans self.texte
+        Eclate la chaine self.texte en self.l_objets une liste lignes d'instructions
+        et de commentaires (parmi lesquels des instructions "commentarisées").
         """
-        #l_lignes = open(self.fichier,'r').readlines()
+        #AY##l_lignes = open(self.fichier,'r').readlines()
         l_lignes = string.split(self.texte,'\n')
         commentaire_courant             = None
         commande_courante               = None
@@ -233,6 +244,10 @@ class PARSEUR_PYTHON:
                             # on crée un objet commande_commentarisee_courante
                             commande_commentarisee_courante = COMMANDE_COMMENTARISEE(self)
                             commande_commentarisee_courante.append_text(ligne)
+                        # si la ligne courante se termine par un ';', on décide - par hypothèse et peut-être à tort - que
+                        # la commande commentarisée courante est terminée !!
+                        if re.search( '; *$', ligne ) != None :
+                            commande_commentarisee_courante = None
                         continue
                     else:
                         # on a un double commentaire en fin de ligne
@@ -288,7 +303,8 @@ class PARSEUR_PYTHON:
                         else:
                             #--> poursuite d'une affectation
                             affectation_courante.append_text(ligne)
-                                
+
+
     def get_texte(self):
         """
         Retourne le texte issu de l'analyse
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..9f83fd1afb826910fff15d9bed2e6bb83257d4af 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.
@@ -186,10 +205,18 @@ class PythonGenerator:
          Cette méthode convertit un COMMENTAIRE
          en une liste de chaines de caractères à la syntaxe python
       """
-      l_lignes = string.split(obj.valeur,'\n')
+      # modification pour répondre à la demande de C. Durand, d'éviter
+      # l'ajout systématique d'un dièse, à la suite du commentaire
+      # Dans la chaine de caracteres obj.valeur, on supprime le dernier
+      # saut de ligne
+      sans_saut = re.sub("\n$","",obj.valeur)
+      l_lignes = string.split(sans_saut,'\n')
       txt=''
       for ligne in l_lignes:
         txt = txt + '#'+ligne+'\n'
+
+      # suppression du dernier saut de ligne
+      txt = re.sub("\n$","",txt)
       return txt
 
    def generPARAMETRE_EVAL(self,obj):
@@ -393,7 +420,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 +480,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 +490,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 +505,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 +516,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()
+