From 20f1aeb5528cacf558d4e8492626c003d56239b1 Mon Sep 17 00:00:00 2001 From: cvs2git Date: Fri, 13 Sep 2002 16:49:34 +0000 Subject: [PATCH] This commit was manufactured by cvs2git to create tag 'V1_3a4'. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Sprout from I26 2002-09-02 17:27:12 UTC eficas 'Version Aster 6.3.14' Cherrypick from master 2002-09-13 16:49:33 UTC eficas 'CCAR: Modification principale : ajout de la possibilité d'afficher les noms de': AIDE/__init__.py AIDE/aide_gui.py AIDE/aide_objets.py AIDE/index_aide.py Accas/A_ASSD.py Accas/A_AU_MOINS_UN.py Accas/A_A_CLASSER.py Accas/A_BLOC.py Accas/A_ENSEMBLE.py Accas/A_ETAPE.py Accas/A_EVAL.py Accas/A_EXCLUS.py Accas/A_FACT.py Accas/A_FORM.py Accas/A_FORM_ETAPE.py Accas/A_JDC.py Accas/A_JDC_CATA.py Accas/A_MACRO.py Accas/A_MACRO_ETAPE.py Accas/A_MCBLOC.py Accas/A_MCFACT.py Accas/A_MCLIST.py Accas/A_MCNUPLET.py Accas/A_MCSIMP.py Accas/A_NUPLET.py Accas/A_OPER.py Accas/A_PRESENT_ABSENT.py Accas/A_PRESENT_PRESENT.py Accas/A_PROC.py Accas/A_PROC_ETAPE.py Accas/A_SIMP.py Accas/A_UN_PARMI.py Accas/__init__.py Aster/Cata/cata_STA6.py Aster/INSTALL Aster/LICENSE.TERMS Aster/README Aster/alphasdist.py Aster/editeur.ini Aster/eficas_aster.py Aster/prefs.py Aster/sdist.py Descartes/cata_descartes.py Descartes/cata_descartes_new.py Descartes/editeur.ini Descartes/eficas_descartes.py Descartes/prefs.py Editeur/Interp.py Editeur/Objecttreeitem.py Editeur/__init__.py Editeur/analyse_catalogue.py Editeur/appli.py Editeur/autre_analyse_cata.py Editeur/browser.py Editeur/bureau.py Editeur/catabrowser.py Editeur/cataediteur.py Editeur/centerwindow.py Editeur/compobloc.py Editeur/compocomm.py Editeur/compocommandecomm.py Editeur/compofact.py Editeur/compoformule.py Editeur/compojdc.py Editeur/compomacro.py Editeur/compomclist.py Editeur/componiveau.py Editeur/componuplet.py Editeur/compooper.py Editeur/compoparam.py Editeur/compoparameval.py Editeur/compoproc.py Editeur/composimp.py Editeur/configuration.py Editeur/definition_cata.py Editeur/eficas.py Editeur/eficas_go.py Editeur/faq.py Editeur/fenetre_mc_inconnus.py Editeur/fontes.py Editeur/images.py Editeur/import_code.py Editeur/jdcdisplay.py Editeur/menubar.py Editeur/options.py Editeur/panels.py Editeur/readercata.py Editeur/splash.py Editeur/statusbar.py Editeur/toolbar.py Editeur/tooltip.py Editeur/treeitemincanvas.py Editeur/treewidget.py Editeur/uiinfo.py Editeur/utils.py Editeur/widgets.py Exemples/README Exemples/ex11/main.py Exemples/ex18/main.py Extensions/__init__.py Extensions/commande_comm.py Extensions/commentaire.py Extensions/etape_niveau.py Extensions/interpreteur_formule.py Extensions/jdc.py Extensions/mcnuplet.py Extensions/niveau.py Extensions/nuplet.py Extensions/parametre.py Extensions/parametre_eval.py Extensions/pluginloader.py Ihm/I_ASSD.py Ihm/I_A_CLASSER.py Ihm/I_ENTITE.py Ihm/I_ETAPE.py Ihm/I_EXCLUS.py Ihm/I_FONCTION.py Ihm/I_FORM_ETAPE.py Ihm/I_JDC.py Ihm/I_JDC_CATA.py Ihm/I_MACRO_ETAPE.py Ihm/I_MCBLOC.py Ihm/I_MCCOMPO.py Ihm/I_MCFACT.py Ihm/I_MCLIST.py Ihm/I_MCSIMP.py Ihm/I_OBJECT.py Ihm/I_PRESENT_ABSENT.py Ihm/I_PRESENT_PRESENT.py Ihm/I_PROC_ETAPE.py Ihm/I_REGLE.py Ihm/I_UN_PARMI.py Ihm/__init__.py Installation/Doc_technique_install.doc Installation/README Installation/README_install Installation/install.py Minicode/cata_saturne.py Minicode/eficas_mini.py Minicode/prefs.py Noyau/N_MACRO.py Noyau/N_OPER.py Noyau/N_PROC.py Saturne/prefs.py Syrthes/cata_syrthes.py Syrthes/editeur.ini Syrthes/eficas_syrthes.py Syrthes/prefs.py Tools/__init__.py Validation/V_ETAPE.py Validation/V_MACRO_ETAPE.py 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 --- AIDE/__init__.py | 12 + AIDE/aide_gui.py | 212 ++ AIDE/aide_objets.py | 76 + AIDE/index_aide.py | 24 + Accas/A_ASSD.py | 49 + Accas/A_AU_MOINS_UN.py | 19 + Accas/A_A_CLASSER.py | 19 + Accas/A_BLOC.py | 23 + Accas/A_ENSEMBLE.py | 19 + Accas/A_ETAPE.py | 20 +- Accas/A_EVAL.py | 19 + Accas/A_EXCLUS.py | 19 + Accas/A_FACT.py | 23 + Accas/A_FORM.py | 19 + Accas/A_FORM_ETAPE.py | 19 + Accas/A_JDC.py | 21 + Accas/A_JDC_CATA.py | 19 + Accas/A_MACRO.py | 23 + Accas/A_MACRO_ETAPE.py | 19 + Accas/A_MCBLOC.py | 19 + Accas/A_MCFACT.py | 19 + Accas/A_MCLIST.py | 19 + Accas/A_MCNUPLET.py | 19 + Accas/A_MCSIMP.py | 19 + Accas/A_NUPLET.py | 19 + Accas/A_OPER.py | 22 + Accas/A_PRESENT_ABSENT.py | 19 + Accas/A_PRESENT_PRESENT.py | 19 + Accas/A_PROC.py | 23 + Accas/A_PROC_ETAPE.py | 20 +- Accas/A_SIMP.py | 23 + Accas/A_UN_PARMI.py | 19 + Accas/__init__.py | 29 +- Aster/Cata/cata_STA6.py | 4 +- Aster/INSTALL | 40 + Aster/LICENSE.TERMS | 21 + Aster/README | 2 + Aster/alphasdist.py | 120 + Aster/editeur.ini | 25 +- Aster/eficas_aster.py | 20 + Aster/prefs.py | 67 + Aster/sdist.py | 118 + Descartes/cata_descartes.py | 1655 +++++++++++++ Descartes/cata_descartes_new.py | 3084 ++++++++++++++++++++++++ Descartes/editeur.ini | 23 + Descartes/eficas_descartes.py | 41 + Descartes/prefs.py | 25 + Editeur/Interp.py | 20 +- Editeur/Objecttreeitem.py | 30 +- Editeur/__init__.py | 19 + Editeur/analyse_catalogue.py | 38 +- Editeur/appli.py | 103 +- Editeur/autre_analyse_cata.py | 107 + Editeur/browser.py | 19 + Editeur/bureau.py | 60 +- Editeur/catabrowser.py | 30 +- Editeur/cataediteur.py | 32 +- Editeur/centerwindow.py | 19 + Editeur/compobloc.py | 20 +- Editeur/compocomm.py | 20 +- Editeur/compocommandecomm.py | 20 +- Editeur/compofact.py | 20 +- Editeur/compoformule.py | 20 +- Editeur/compojdc.py | 22 +- Editeur/compomacro.py | 36 +- Editeur/compomclist.py | 50 +- Editeur/componiveau.py | 20 +- Editeur/componuplet.py | 24 +- Editeur/compooper.py | 40 +- Editeur/compoparam.py | 20 +- Editeur/compoparameval.py | 20 +- Editeur/compoproc.py | 26 +- Editeur/composimp.py | 307 ++- Editeur/configuration.py | 37 +- Editeur/definition_cata.py | 20 +- Editeur/eficas.py | 24 +- Editeur/eficas_go.py | 19 + Editeur/faq.py | 19 + Editeur/fenetre_mc_inconnus.py | 51 +- Editeur/fontes.py | 19 + Editeur/images.py | 19 + Editeur/import_code.py | 19 + Editeur/jdcdisplay.py | 66 +- Editeur/menubar.py | 32 +- Editeur/options.py | 38 +- Editeur/panels.py | 86 +- Editeur/readercata.py | 100 +- Editeur/splash.py | 19 + Editeur/statusbar.py | 19 + Editeur/toolbar.py | 23 +- Editeur/tooltip.py | 54 + Editeur/treeitemincanvas.py | 21 +- Editeur/treewidget.py | 67 +- Editeur/uiinfo.py | 113 + Editeur/utils.py | 71 +- Editeur/widgets.py | 123 +- Exemples/README | 2 + Exemples/ex11/main.py | 10 + Exemples/ex18/main.py | 3 +- Extensions/__init__.py | 19 + Extensions/commande_comm.py | 37 +- Extensions/commentaire.py | 32 + Extensions/etape_niveau.py | 29 + Extensions/interpreteur_formule.py | 22 +- Extensions/jdc.py | 19 + Extensions/mcnuplet.py | 31 + Extensions/niveau.py | 19 + Extensions/nuplet.py | 23 +- Extensions/parametre.py | 23 +- Extensions/parametre_eval.py | 22 + Extensions/pluginloader.py | 19 + Ihm/I_ASSD.py | 23 + Ihm/I_A_CLASSER.py | 19 + Ihm/I_ENTITE.py | 33 + Ihm/I_ETAPE.py | 237 +- Ihm/I_EXCLUS.py | 22 +- Ihm/I_FONCTION.py | 41 + Ihm/I_FORM_ETAPE.py | 28 + Ihm/I_JDC.py | 164 +- Ihm/I_JDC_CATA.py | 19 + Ihm/I_MACRO_ETAPE.py | 82 +- Ihm/I_MCBLOC.py | 19 + Ihm/I_MCCOMPO.py | 96 +- Ihm/I_MCFACT.py | 19 + Ihm/I_MCLIST.py | 126 +- Ihm/I_MCSIMP.py | 168 +- Ihm/I_OBJECT.py | 55 + Ihm/I_PRESENT_ABSENT.py | 24 +- Ihm/I_PRESENT_PRESENT.py | 19 + Ihm/I_PROC_ETAPE.py | 55 + Ihm/I_REGLE.py | 19 + Ihm/I_UN_PARMI.py | 22 +- Ihm/__init__.py | 19 + Installation/Doc_technique_install.doc | Bin 0 -> 49152 bytes Installation/README | 30 + Installation/README_install | 40 + Installation/install.py | 949 ++++++++ Minicode/cata_saturne.py | 324 ++- Minicode/eficas_mini.py | 37 +- Minicode/prefs.py | 5 + Noyau/N_MACRO.py | 3 +- Noyau/N_OPER.py | 3 +- Noyau/N_PROC.py | 3 +- Saturne/prefs.py | 3 + Syrthes/cata_syrthes.py | 243 ++ Syrthes/editeur.ini | 22 + Syrthes/eficas_syrthes.py | 21 + Syrthes/prefs.py | 25 + Tools/__init__.py | 20 +- convert/Parserv5/Translate.py | 20 + convert/Parserv5/__init__.py | 20 + convert/Parserv5/conv.py | 27 +- convert/Parserv5/tables.py | 44 +- convert/Parserv5/tables.tag | 43 +- convert/__init__.py | 19 + convert/convert_asterv5.py | 19 + convert/convert_ini.py | 19 + convert/convert_pyth.py | 19 + convert/convert_python.py | 19 + convert/parseur_python.py | 20 +- generator/Formatage.py | 19 + generator/__init__.py | 19 + generator/generator_aplat.py | 23 +- generator/generator_asterv5.py | 25 +- generator/generator_ini.py | 19 + generator/generator_pyth.py | 19 + generator/generator_python.py | 34 +- 167 files changed, 11651 insertions(+), 511 deletions(-) create mode 100644 AIDE/__init__.py create mode 100644 AIDE/aide_gui.py create mode 100644 AIDE/aide_objets.py create mode 100644 AIDE/index_aide.py create mode 100644 Accas/A_ASSD.py create mode 100644 Aster/INSTALL create mode 100644 Aster/LICENSE.TERMS create mode 100644 Aster/README create mode 100644 Aster/alphasdist.py create mode 100644 Aster/sdist.py create mode 100755 Descartes/cata_descartes.py create mode 100755 Descartes/cata_descartes_new.py create mode 100644 Descartes/editeur.ini create mode 100755 Descartes/eficas_descartes.py create mode 100644 Descartes/prefs.py create mode 100644 Editeur/autre_analyse_cata.py create mode 100644 Editeur/uiinfo.py create mode 100644 Ihm/I_ASSD.py create mode 100644 Ihm/I_FONCTION.py create mode 100755 Installation/Doc_technique_install.doc create mode 100755 Installation/README create mode 100755 Installation/README_install create mode 100755 Installation/install.py create mode 100755 Syrthes/cata_syrthes.py create mode 100644 Syrthes/editeur.ini create mode 100755 Syrthes/eficas_syrthes.py create mode 100644 Syrthes/prefs.py diff --git a/AIDE/__init__.py b/AIDE/__init__.py new file mode 100644 index 00000000..e4fa4596 --- /dev/null +++ b/AIDE/__init__.py @@ -0,0 +1,12 @@ +import os +import aide_objets +import aide_gui + +def go(fichier=None,master=None): + if not fichier : + fichier=os.path.join(os.path.dirname(__file__),"index_aide.py") + index = aide_objets.INDEX(fichier) + index.build() + o = aide_gui.AIDE_GUI(index,master=master) + o.build() + return o diff --git a/AIDE/aide_gui.py b/AIDE/aide_gui.py new file mode 100644 index 00000000..50aa3ce6 --- /dev/null +++ b/AIDE/aide_gui.py @@ -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("",lambda e,s=self,o=item : s.update_objet(o)) + l.bind("",lambda e,s=self,o=l : s.select_label(o)) + l.bind("",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 index 00000000..e8e923fd --- /dev/null +++ b/AIDE/aide_objets.py @@ -0,0 +1,76 @@ +""" +Ce module génère un objet INDEX par lecture et interprétation du fichier texte +le décrivant (ex : index_aide.py) +""" + +import os + +class ITEM_INDEX : + """ + Construit un objet ITEM_INDEX + """ + def __init__(self,t_item): + self.t_item = t_item + self.init() + + def init(self): + """ + Initialise les structures de données de l'item + """ + self.titre = "" + self.fichier = "" + self.l_items = [] + + def build(self): + """ + Construit les sous-items de self s'il y a lieu et retoruve le label et le fichier de l'item + dans le tuple + """ + self.titre = self.t_item[0] + self.fichier = self.t_item[1] + l_items = self.t_item[2] + if l_items : + for item in l_items : + o = ITEM_INDEX(item) + o.build() + self.l_items.append(o) + +class INDEX : + """ + Construit un objet INDEX (non graphique) à partir de l'interprétation du fichier d'index + (type index_aide.py) passé en argument + """ + def __init__(self,fichier_index): + self.fichier_index = fichier_index + self.init() + + def init(self): + """ + Initialise les structures de données propres à l'index + """ + self.titre = "" + self.fichier = None + self.l_items = [] + + def build(self): + """ + Lit le fichier index et l'interprète + """ + txt = open(self.fichier_index,'r').read() + d = {} + d['repertoire']=os.path.dirname(self.fichier_index) + #txt = "items ="+txt + #print txt + exec txt in d + items = d.get("items",None) + if items : + self.titre = items[0] + self.fichier = items[1] + l_items = items[2] + for item in l_items : + o = ITEM_INDEX(item) + o.build() + self.l_items.append(o) + + + diff --git a/AIDE/index_aide.py b/AIDE/index_aide.py new file mode 100644 index 00000000..9c040965 --- /dev/null +++ b/AIDE/index_aide.py @@ -0,0 +1,24 @@ +""" +Contient la description des fichiers d'aide et leur structuration + +chaque panneau est un tuple de 3 éléments : + +- élément 1 : titre de la page +- élément 2 : URL du fichier à afficher quand on visualise cette page d'aide ou None si aucun +- élément 3 : tuple contenant les sous-panneaux de ce panneau (tuple de 3-tuples) ou None si aucun + +La variable repertoire est initialisee avec le chemin du repertoire local +""" + +import os + +items =("Aide en ligne EFICAS",None, + ( + ("FAQs",os.path.join(repertoire,"..","Editeur","faqs.txt"),None), + ("Install",os.path.join(repertoire,"..","INSTALL"), + ( + ("Procedure d'installation",os.path.join(repertoire,"..","INSTALL"),None), + ) + ), + ), + ) diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py new file mode 100644 index 00000000..b9661c45 --- /dev/null +++ b/Accas/A_ASSD.py @@ -0,0 +1,49 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + +from Ihm import I_ASSD +from Ihm import I_FONCTION +from Noyau import N_ASSD +from Noyau import N_GEOM +from Noyau import N_FONCTION +from Noyau import N_CO + +# On ajoute la classe ASSD dans l'héritage multiple pour recréer +# une hiérarchie d'héritage identique à celle de Noyau +# pour faire en sorte que isinstance(o,ASSD) marche encore après +# dérivation + +class ASSD(N_ASSD.ASSD,I_ASSD.ASSD):pass + +class assd(N_ASSD.assd,I_ASSD.ASSD,ASSD):pass + +class FONCTION(N_FONCTION.FONCTION,I_FONCTION.FONCTION,ASSD): + def __init__(self,etape=None,sd=None,reg='oui'): + N_FONCTION.FONCTION.__init__(self,etape=etape,sd=sd,reg=reg) + I_FONCTION.FONCTION.__init__(self,etape=etape,sd=sd,reg=reg) + +class fonction(N_FONCTION.fonction,I_FONCTION.fonction,ASSD): + def __init__(self,etape=None,sd=None,reg='oui'): + N_FONCTION.fonction.__init__(self,etape=etape,sd=sd,reg=reg) + I_FONCTION.fonction.__init__(self,etape=etape,sd=sd,reg=reg) + +class GEOM(N_GEOM.GEOM,I_ASSD.ASSD,ASSD):pass +class geom(N_GEOM.geom,I_ASSD.ASSD,ASSD):pass +class CO(N_CO.CO,I_ASSD.ASSD,ASSD):pass diff --git a/Accas/A_AU_MOINS_UN.py b/Accas/A_AU_MOINS_UN.py index d7c525b0..eb194670 100644 --- a/Accas/A_AU_MOINS_UN.py +++ b/Accas/A_AU_MOINS_UN.py @@ -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 diff --git a/Accas/A_A_CLASSER.py b/Accas/A_A_CLASSER.py index c3b32deb..b522b2cd 100644 --- a/Accas/A_A_CLASSER.py +++ b/Accas/A_A_CLASSER.py @@ -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 diff --git a/Accas/A_BLOC.py b/Accas/A_BLOC.py index 5b341d6c..668c9395 100644 --- a/Accas/A_BLOC.py +++ b/Accas/A_BLOC.py @@ -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) + diff --git a/Accas/A_ENSEMBLE.py b/Accas/A_ENSEMBLE.py index 6675920b..e9ebac78 100644 --- a/Accas/A_ENSEMBLE.py +++ b/Accas/A_ENSEMBLE.py @@ -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 diff --git a/Accas/A_ETAPE.py b/Accas/A_ETAPE.py index cfd20bd9..6ba5b7e9 100644 --- a/Accas/A_ETAPE.py +++ b/Accas/A_ETAPE.py @@ -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) diff --git a/Accas/A_EVAL.py b/Accas/A_EVAL.py index dff258a9..ab40f123 100644 --- a/Accas/A_EVAL.py +++ b/Accas/A_EVAL.py @@ -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): diff --git a/Accas/A_EXCLUS.py b/Accas/A_EXCLUS.py index 5473d01a..5bbf943e 100644 --- a/Accas/A_EXCLUS.py +++ b/Accas/A_EXCLUS.py @@ -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 diff --git a/Accas/A_FACT.py b/Accas/A_FACT.py index d40a9c59..00da6181 100644 --- a/Accas/A_FACT.py +++ b/Accas/A_FACT.py @@ -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) + diff --git a/Accas/A_FORM.py b/Accas/A_FORM.py index 132a24b9..ea61db3e 100644 --- a/Accas/A_FORM.py +++ b/Accas/A_FORM.py @@ -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 diff --git a/Accas/A_FORM_ETAPE.py b/Accas/A_FORM_ETAPE.py index 9c6483bd..af4d7cf0 100644 --- a/Accas/A_FORM_ETAPE.py +++ b/Accas/A_FORM_ETAPE.py @@ -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 diff --git a/Accas/A_JDC.py b/Accas/A_JDC.py index b709e01f..9216fe5a 100644 --- a/Accas/A_JDC.py +++ b/Accas/A_JDC.py @@ -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) diff --git a/Accas/A_JDC_CATA.py b/Accas/A_JDC_CATA.py index 0a810dc3..10cf409e 100644 --- a/Accas/A_JDC_CATA.py +++ b/Accas/A_JDC_CATA.py @@ -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 diff --git a/Accas/A_MACRO.py b/Accas/A_MACRO.py index 311769f8..c4e841a2 100644 --- a/Accas/A_MACRO.py +++ b/Accas/A_MACRO.py @@ -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) + diff --git a/Accas/A_MACRO_ETAPE.py b/Accas/A_MACRO_ETAPE.py index 29463bd5..9613ebb0 100644 --- a/Accas/A_MACRO_ETAPE.py +++ b/Accas/A_MACRO_ETAPE.py @@ -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 diff --git a/Accas/A_MCBLOC.py b/Accas/A_MCBLOC.py index 3f931840..963ae8f1 100644 --- a/Accas/A_MCBLOC.py +++ b/Accas/A_MCBLOC.py @@ -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 diff --git a/Accas/A_MCFACT.py b/Accas/A_MCFACT.py index 96d172a6..5a1b2a96 100644 --- a/Accas/A_MCFACT.py +++ b/Accas/A_MCFACT.py @@ -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 diff --git a/Accas/A_MCLIST.py b/Accas/A_MCLIST.py index e3fba40a..d2874c59 100644 --- a/Accas/A_MCLIST.py +++ b/Accas/A_MCLIST.py @@ -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 diff --git a/Accas/A_MCNUPLET.py b/Accas/A_MCNUPLET.py index 49bfa75b..76258bae 100644 --- a/Accas/A_MCNUPLET.py +++ b/Accas/A_MCNUPLET.py @@ -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 diff --git a/Accas/A_MCSIMP.py b/Accas/A_MCSIMP.py index 35854885..b517eb65 100644 --- a/Accas/A_MCSIMP.py +++ b/Accas/A_MCSIMP.py @@ -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 diff --git a/Accas/A_NUPLET.py b/Accas/A_NUPLET.py index 1d19c2c0..6c1c5f4c 100644 --- a/Accas/A_NUPLET.py +++ b/Accas/A_NUPLET.py @@ -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 diff --git a/Accas/A_OPER.py b/Accas/A_OPER.py index f7c6107b..b1076cb8 100644 --- a/Accas/A_OPER.py +++ b/Accas/A_OPER.py @@ -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) diff --git a/Accas/A_PRESENT_ABSENT.py b/Accas/A_PRESENT_ABSENT.py index ac2b0b30..fc77397c 100644 --- a/Accas/A_PRESENT_ABSENT.py +++ b/Accas/A_PRESENT_ABSENT.py @@ -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 diff --git a/Accas/A_PRESENT_PRESENT.py b/Accas/A_PRESENT_PRESENT.py index 96f52fd6..bb14edfb 100644 --- a/Accas/A_PRESENT_PRESENT.py +++ b/Accas/A_PRESENT_PRESENT.py @@ -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 diff --git a/Accas/A_PROC.py b/Accas/A_PROC.py index d0b56b07..18abbda4 100644 --- a/Accas/A_PROC.py +++ b/Accas/A_PROC.py @@ -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) + diff --git a/Accas/A_PROC_ETAPE.py b/Accas/A_PROC_ETAPE.py index 9d7c0f89..9f0911ae 100644 --- a/Accas/A_PROC_ETAPE.py +++ b/Accas/A_PROC_ETAPE.py @@ -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) diff --git a/Accas/A_SIMP.py b/Accas/A_SIMP.py index 3cafb492..2af12a7f 100644 --- a/Accas/A_SIMP.py +++ b/Accas/A_SIMP.py @@ -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) + diff --git a/Accas/A_UN_PARMI.py b/Accas/A_UN_PARMI.py index ee7a5058..55b281d3 100644 --- a/Accas/A_UN_PARMI.py +++ b/Accas/A_UN_PARMI.py @@ -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 diff --git a/Accas/__init__.py b/Accas/__init__.py index b61776b3..f3930531 100644 --- a/Accas/__init__.py +++ b/Accas/__init__.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce package contient les classes qui seront effectivement utilisées dans les applications. C'est dans ce package que sont réalisées les combinaisons de classes de base @@ -39,11 +58,11 @@ from A_EXCLUS import EXCLUS from A_ENSEMBLE import ENSEMBLE from A_A_CLASSER import A_CLASSER -from Noyau.N_ASSD import ASSD,assd -from Noyau.N_GEOM import GEOM,geom -from Noyau.N_FONCTION import FONCTION -from Noyau.N_FONCTION import fonction -from Noyau.N_CO import CO +from A_ASSD import ASSD,assd +from A_ASSD import GEOM,geom +from A_ASSD import FONCTION, fonction +from A_ASSD import CO + from Noyau.N__F import _F from Noyau.N_Exception import AsException diff --git a/Aster/Cata/cata_STA6.py b/Aster/Cata/cata_STA6.py index 4204f5e0..82444c0f 100755 --- a/Aster/Cata/cata_STA6.py +++ b/Aster/Cata/cata_STA6.py @@ -29,7 +29,7 @@ except: # __version__="$Name: $" -__Id__="$Id: cata_aster_v6.py,v 1.12 2001/01/16 15:55:05 iliade Exp $" +__Id__="$Id: cata_STA6.py,v 1.1.1.2 2002/09/02 17:27:12 eficas Exp $" # JdC = JDC_CATA(code='ASTER', execmodul=None, @@ -337,6 +337,7 @@ 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':('CACHE',)}, regles=(AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','MASSIF', 'ASSE_GRIL','GRILLE','AFFE_SECT','AFFE_FIBRE'),), MODELE =SIMP(statut='o',typ=modele ), @@ -617,6 +618,7 @@ AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op= 19,sd_prod=cara_elem, AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op= 68,sd_prod=char_acou, fr="Affectation de charges et conditions aux limites acoustiques constantes", docu="U4.44.04-e",reentrant='n', + UIinfo={'groupes':('CALCUL','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") ), diff --git a/Aster/INSTALL b/Aster/INSTALL new file mode 100644 index 00000000..e3a5d8fe --- /dev/null +++ b/Aster/INSTALL @@ -0,0 +1,40 @@ + + +1- Installation standard + +Pour installer EFICAS a partir de la distribution : .tgz +faire : + tar xzvf .tgz + +ce qui a pour effet de créer un répertoire de nom . + +Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader, +les catalogues, il faut modifier le fichier editeur.ini dans le répertoire Aster. + + +ATTENTION : +Si Eficas est installé dans un répertoire particulier d'administration +dans lequel les utilisateurs n'ont pas le droit d'écriture, il faut que +l'administrateur lance Eficas pour générer +les fichiers et catalogues compilés .pyc et _pickled.py + + + +2- Utilisation d'Eficas + +Pour utiliser Eficas, aller dans le répertoire Aster et faire : + python eficas_aster.py + + + +3- Installation avec un noyau pré-installé + +Aller dans le répertoire Aster du répertoire Eficas +et modifier le fichier prefs.py comme suit : +Mettre dans la variable CODE_PATH le chemin absolu vers +le répertoire contenant les deux répertoires Noyau et Validation que vous voulez +utiliser à la place de ceux fournis dans la livraison d'Eficas + +Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster + + diff --git a/Aster/LICENSE.TERMS b/Aster/LICENSE.TERMS new file mode 100644 index 00000000..8c88a1e5 --- /dev/null +++ b/Aster/LICENSE.TERMS @@ -0,0 +1,21 @@ + ====================================================================== + THIS PROGRAM IS FREE SOFTWARE. YOU CAN REDISTRIBUTE IT AND/OR MODIFY + IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY + THE FREE SOFTWARE FOUNDATION, EITHER VERSION 2 OF THE LICENSE, AND + ANY LATER VERSION. + THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT + WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + SEE THE GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS. + ====================================================================== + TRADUCTION EDF ( POUR INFORMATION ) + ====================================================================== + CE PROGRAMME EST UN LOGICIEL LIBRE. VOUS POUVEZ LE DIFFUSER ET/OU LE + MODIFIER SELON LES DISPOSITIONS DE LA LICENCE GRAND PUBLIC GNU (GPL) + TELLE QU'ELLE EST PUBLIEE PAR LA FREE SOFTWARE FOUNDATION, VERSION 2 + DE LA LICENCE ET TOUTE VERSION ULTERIEURE. + CE PROGRAMME EST DIFFUSE AVEC L'ESPOIR QU'IL SERA UTILE, MAIS SANS + GARANTIE, SANS MEME LA GARANTIE IMPLICITE DE QUALIFICATION DE MISE SUR + LE MARCHE OU D'ADAPTATION A UNE UTILISATION PARTICULIERE. + VOIR POUR DE PLUS AMPLES DETAILS LA LICENCE GRAND PUBLIC GNU (GPL) + ====================================================================== diff --git a/Aster/README b/Aster/README new file mode 100644 index 00000000..0597ecbb --- /dev/null +++ b/Aster/README @@ -0,0 +1,2 @@ + +Pour installer EFICAS voir dans le fichier INSTALL diff --git a/Aster/alphasdist.py b/Aster/alphasdist.py new file mode 100644 index 00000000..8095a873 --- /dev/null +++ b/Aster/alphasdist.py @@ -0,0 +1,120 @@ +""" + Ce module sert à construire les distributions de versions alpha d'EFICAS en fonction + du tag CVS courant (Vx_yaz). Une version alpha est une version dont toutes les fonctionnalités + ne sont pas implémentées. On utilise pour ces versions, les packages Noyau Validation Cata et Macro + locaux. + Les distributions sont : + - un tar.gz pour UNIX ne contenant pas mxTextTools + - un zip pour Windows contenant mx TextTools préinstallé + L'utilisation de ce module est la suivante : + 1- Se mettre dans un répertoire de travail + 2- Configurer son environnement pour utiliser le référentiel CVS EFICAS + 3- Exporter les sources d'Eficas par la commande : + cvs export -r TAG -d Eficas_export EficasV1_2 + ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_3a1) + 4- Aller dans le répertoire Eficas_export + 4- Executer le script alphasdist.py + python alphasdist.py + Ce qui a pour effet de creer un repertoire dist contenant les 2 distributions + et de les copier dans le répertoire indiqué par dir_download s'il est accessible + +""" +import os,shutil,glob,sys +import types + +version="$Name: $"[7:-2] or 'Test1_3' +# ==========Path du noyau local ==================== +path_Noyau=".." +# ============================================================ +nom_distrib="Eficas"+version+"AsterSTA6" +path_distrib=os.path.join("dist",nom_distrib) +path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools" +dir_download= "/home/eficas/WWW/telechargement/eficas" + +def main(): + if os.path.isdir('dist'):shutil.rmtree('dist') + + copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL']) + + copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt']) + copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py']) + copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py']) + copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py']) + copyfiles('../Macro',os.path.join(path_distrib,'Macro'),['*.py']) + copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py']) + copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE/fichiers'),['*']) + copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py', + 'editeur.ini', + 'eficas_aster.py', + ]) + copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py']) + copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py']) + + copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py']) + + copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif']) + + copyfiles(os.path.join(path_Noyau,'Noyau'),os.path.join(path_distrib,'Noyau'),['*.py']) + copyfiles(os.path.join(path_Noyau,'Validation'),os.path.join(path_distrib,'Validation'),['*.py']) + copyfiles('../Aster/Cata',os.path.join(path_distrib,'Aster','Cata'),['*.py', + ]) + + copyfiles('../Tools',os.path.join(path_distrib,'Tools'),['*.py']) + copyfiles('../Tools/foztools',os.path.join(path_distrib,'Tools','foztools'),['*.py']) + + tarball= maketarball('dist',nom_distrib,nom_distrib) + try: + shutil.copy(tarball,dir_download) + except: + print "Repertoire de download inconnu : ",dir_download + + try: + shutil.copytree(path_TextTools,os.path.join(path_distrib,'Tools','TextTools')) + except: + print "Impossible de recuperer mxTextTools : ",dir_download + sys.exit(1) + + zipfile= makezipfile('dist',nom_distrib,nom_distrib) + try: + shutil.copy(zipfile,dir_download) + except: + print "Repertoire de download inconnu : ",dir_download + +def make_dir(dir_cible): + if type(dir_cible) is not types.StringType: + raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible` + head,tail=os.path.split(dir_cible) + tails=[tail] + while head and tail and not os.path.isdir(head): + head,tail=os.path.split(head) + tails.insert(0, tail) + + for d in tails: + head = os.path.join(head, d) + if not os.path.isdir(head):os.mkdir(head) + + +def copyfiles(dir_origin,dir_cible,listfiles): + if not os.path.isdir(dir_cible):make_dir(dir_cible) + for glob_files in listfiles: + for file in glob.glob(os.path.join(dir_origin,glob_files)): + shutil.copy(file,dir_cible) + +def maketarball(dir_trav,dir_cible,nom_tar): + prev=os.getcwd() + print prev + os.chdir(dir_trav) + os.system("tar -cf "+nom_tar+".tar "+dir_cible) + os.system("gzip -f9 "+nom_tar+".tar ") + os.chdir(prev) + return os.path.join(dir_trav,nom_tar+".tar.gz") + +def makezipfile(dir_trav,dir_cible,nom_tar): + prev=os.getcwd() + os.chdir(dir_trav) + os.system("zip -rq "+nom_tar+".zip "+dir_cible) + os.chdir(prev) + return os.path.join(dir_trav,nom_tar+".zip") + +main() + diff --git a/Aster/editeur.ini b/Aster/editeur.ini index e86dc069..c9e1a9e7 100644 --- a/Aster/editeur.ini +++ b/Aster/editeur.ini @@ -1,3 +1,23 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + import os import prefs @@ -12,11 +32,14 @@ isdeveloppeur = "NON" path_cata_dev = "/tmp/cata" # Répertoire temporaire rep_travail = "/tmp" +# Répertoire initial +initialdir=os.curdir # Choix des catalogues rep_mat="bidon" -catalogues = (('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'), +catalogues = ( + #('ASTER','v5',os.path.join(rep_cata,'cata_STA5.py'),'asterv5'), ('ASTER','v6',os.path.join(rep_cata,'cata_STA6.py'),'python','defaut'), ) diff --git a/Aster/eficas_aster.py b/Aster/eficas_aster.py index 2debb64d..ca862a94 100755 --- a/Aster/eficas_aster.py +++ b/Aster/eficas_aster.py @@ -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 """ diff --git a/Aster/prefs.py b/Aster/prefs.py index f3d82ae8..261ee3b2 100644 --- a/Aster/prefs.py +++ b/Aster/prefs.py @@ -1,3 +1,23 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + import os # REPINI sert à localiser le fichier editeur.ini @@ -19,3 +39,50 @@ CODE_PATH = None # Par défaut on utilise le répertoire icons dans Editeur ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons') +# lang indique la langue utilisée pour les chaines d'aide : fr ou ang +lang='fr' + +labels= ('Fichier','Edition','Jeu de commandes', +# 'Catalogue','Browsers', + 'Options', + 'Aide', + ) + +appli_composants=['readercata','bureau', +# 'browser', + 'options', + ] + +menu_defs={ 'bureau': [ + ('Fichier',[ + ('Nouveau','newJDC'), + ('Ouvrir','openJDC'), + ('Enregistrer','saveJDC'), + ('Enregistrer sous','saveasJDC'), + None, + ('Fermer','closeJDC'), + ('Quitter','exitEFICAS'), + ] + ), + ('Edition',[ + ('Copier','copy'), + ('Couper','cut'), + ('Coller','paste'), + ] + ), + ('Jeu de commandes',[ + ('Rapport de validation','visuCRJDC'), + # ('Fichier à plat','visu_a_plat'), + ('Fichier format v6','visuJDC_py'), + ('Fichier source','visu_txt_brut_JDC'), + ('Paramètres Eficas','affichage_fichier_ini'), + ('Mots-clés inconnus','mc_inconnus'), + ] + ), + ('Aide',[ + ('Aide EFICAS','aideEFICAS'), + ] + ), + ] + } + diff --git a/Aster/sdist.py b/Aster/sdist.py new file mode 100644 index 00000000..f95b682e --- /dev/null +++ b/Aster/sdist.py @@ -0,0 +1,118 @@ +""" + Ce module sert à construire les distributions d'EFICAS en fonction + du tag CVS courant + Les distributions sont : + - un tar.gz pour UNIX ne contenant pas mxTextTools + - un zip pour Windows contenant mx TextTools préinstallé + L'utilisation de ce module est la suivante : + 1- Se mettre dans un répertoire de travail + 2- Configurer son environnement pour utiliser le référentiel CVS EFICAS + 3- Exporter les sources d'EficasV1 par la commande : + cvs export -r TAG -d Eficas_export EficasV1 + ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_1p1) + 4- Copier le répertoire fourni par Aster (ACCAS6.2.0) au meme niveau que Eficas_export + 5- Aller dans le répertoire Eficas_export + 6- Executer le script sdist.py + python sdist.py + Ce qui a pour effet de creer un repertoire dist contenant les 2 distributions + et de les copier dans le répertoire indiqué par dir_download s'il est accessible + +""" +import os,shutil,glob,sys +import types + +version="$Name: $"[7:-2] or 'Test1_2' +# ==========Path du noyau fourni par Aster==================== +path_Noyau="../../Accas6.3.0" +# ============================================================ +nom_distrib="Eficas"+version+"AsterSTA6" +path_distrib=os.path.join("dist",nom_distrib) +path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools" +dir_download= "/home/eficas/WWW/telechargement/eficas" + +def main(): + if os.path.isdir('dist'):shutil.rmtree('dist') + + copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL']) + + copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt']) + copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py']) + copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py']) + copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py']) + copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py']) + copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE/fichiers'),['*']) + copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py', + 'editeur.ini', + 'eficas_aster.py', + ]) + copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py']) + copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py']) + + copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py']) + + copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif']) + + copyfiles(os.path.join(path_Noyau,'Noyau'),os.path.join(path_distrib,'Noyau'),['*.py']) + copyfiles(os.path.join(path_Noyau,'Validation'),os.path.join(path_distrib,'Validation'),['*.py']) + copyfiles(os.path.join(path_Noyau,'Cata'),os.path.join(path_distrib,'Aster','Cata'),['*.py', + ]) + + copyfiles('../Tools',os.path.join(path_distrib,'Tools'),['*.py']) + copyfiles('../Tools/foztools',os.path.join(path_distrib,'Tools','foztools'),['*.py']) + + tarball= maketarball('dist',nom_distrib,nom_distrib) + try: + shutil.copy(tarball,dir_download) + except: + print "Repertoire de download inconnu : ",dir_download + + try: + shutil.copytree(path_TextTools,os.path.join(path_distrib,'Tools','TextTools')) + except: + print "Impossible de recuperer mxTextTools : ",dir_download + sys.exit(1) + + zipfile= makezipfile('dist',nom_distrib,nom_distrib) + try: + shutil.copy(zipfile,dir_download) + except: + print "Repertoire de download inconnu : ",dir_download + +def make_dir(dir_cible): + if type(dir_cible) is not types.StringType: + raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible` + head,tail=os.path.split(dir_cible) + tails=[tail] + while head and tail and not os.path.isdir(head): + head,tail=os.path.split(head) + tails.insert(0, tail) + + for d in tails: + head = os.path.join(head, d) + if not os.path.isdir(head):os.mkdir(head) + + +def copyfiles(dir_origin,dir_cible,listfiles): + if not os.path.isdir(dir_cible):make_dir(dir_cible) + for glob_files in listfiles: + for file in glob.glob(os.path.join(dir_origin,glob_files)): + shutil.copy(file,dir_cible) + +def maketarball(dir_trav,dir_cible,nom_tar): + prev=os.getcwd() + print prev + os.chdir(dir_trav) + os.system("tar -cf "+nom_tar+".tar "+dir_cible) + os.system("gzip -f9 "+nom_tar+".tar ") + os.chdir(prev) + return os.path.join(dir_trav,nom_tar+".tar.gz") + +def makezipfile(dir_trav,dir_cible,nom_tar): + prev=os.getcwd() + os.chdir(dir_trav) + os.system("zip -rq "+nom_tar+".zip "+dir_cible) + os.chdir(prev) + return os.path.join(dir_trav,nom_tar+".zip") + +main() + diff --git a/Descartes/cata_descartes.py b/Descartes/cata_descartes.py new file mode 100755 index 00000000..ae8d16a5 --- /dev/null +++ b/Descartes/cata_descartes.py @@ -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 index 00000000..bd360594 --- /dev/null +++ b/Descartes/cata_descartes_new.py @@ -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") + ) ; # 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", + 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œur 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œur 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 index 00000000..99f4d639 --- /dev/null +++ b/Descartes/editeur.ini @@ -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 index 00000000..c5368f53 --- /dev/null +++ b/Descartes/eficas_descartes.py @@ -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 index 00000000..c14833ec --- /dev/null +++ b/Descartes/prefs.py @@ -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/Editeur/Interp.py b/Editeur/Interp.py index 5b320e19..752a44c7 100644 --- a/Editeur/Interp.py +++ b/Editeur/Interp.py @@ -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 diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 7e9ff7db..2ee01c7a 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # import généraux @@ -294,10 +313,7 @@ class ObjectTreeItem(TreeItem,Delegate): def get_fr(self): """ Retourne le fr de l'objet pointé par self """ - try: - return self.object.get_fr() - except: - return '' + return self.object.get_fr() def get_docu(self): """ Retourne la clé de doc de l'objet pointé par self """ @@ -393,6 +409,12 @@ class SequenceTreeItem(ObjectTreeItem): def GetText(self): return " " + def additem(self,obj,pos): + # XXX Passer par addentite de MCList ??? + self.object.insert(pos,obj) + item = self.make_objecttreeitem(self.appli, obj.nom + ":", obj) + return item + def suppitem(self,item): if not self.object.isMCList():return 1 try : diff --git a/Editeur/__init__.py b/Editeur/__init__.py index e69de29b..427090e6 100644 --- a/Editeur/__init__.py +++ b/Editeur/__init__.py @@ -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. +# +# +# ====================================================================== diff --git a/Editeur/analyse_catalogue.py b/Editeur/analyse_catalogue.py index b52a564f..2a0d4a0b 100644 --- a/Editeur/analyse_catalogue.py +++ b/Editeur/analyse_catalogue.py @@ -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__" : diff --git a/Editeur/appli.py b/Editeur/appli.py index f8b031f7..41c1e664 100644 --- a/Editeur/appli.py +++ b/Editeur/appli.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe APPLI qui est la classe mère de l'application EFICAS. Elle prend en charge l'organisation générale @@ -6,6 +25,7 @@ """ # Modules Python import sys +import types import Pmw import Tkinter @@ -13,6 +33,9 @@ import Tkinter import splash import prefs import fontes +import tooltip + +VERSION="EFICAS v1.3" class APPLI: def __init__ (self,master,code='ASTER',fichier=None) : @@ -21,7 +44,7 @@ class APPLI: self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS) self.top.minsize(900,500) self.top.geometry("900x500") - self.top.title('EFICAS v1.1 pour '+self.code) + self.top.title(VERSION + ' pour '+self.code) self.top.withdraw() self.initializeTk(master) Pmw.initialise(master) @@ -29,7 +52,7 @@ class APPLI: self.format_fichier = Tkinter.StringVar() self.message='' self.cree_composants_graphiques() - self.load_extensions() + self.load_appli_composants() self.affiche_FAQ() splash.fini_splash() @@ -69,18 +92,18 @@ class APPLI: import statusbar self.statusbar=statusbar.STATUSBAR(self.top) - def load_extensions(self): - splash._splash.configure(text = "Chargement des extensions") - for mname in self.extensions: - self.load_extension(mname) + def load_appli_composants(self): + splash._splash.configure(text = "Chargement des appli_composants") + for mname in self.appli_composants: + self.load_appli_composant(mname) - def load_extension(self,mname): + def load_appli_composant(self,mname): module=__import__(mname,globals(),locals()) factory=getattr(module,mname.upper()) - extension=factory(self,self.top) - setattr(self,mname,extension) - self.fill_menus(extension,extension.menu_defs) - self.toolbar.creer_boutons_extension(extension.button_defs,extension) + appli_composant=factory(self,self.top) + setattr(self,mname,appli_composant) + self.fill_menus(appli_composant,appli_composant.menu_defs) + self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant) def affiche_FAQ(self): import faq @@ -110,6 +133,7 @@ class APPLI: root.option_add('*background', 'grey') root.option_add('*foreground', 'black') root.option_add('*EntryField.Entry.background', 'white') + root.option_add('*Entry*background', 'white') root.option_add('*Listbox*background', 'white') root.option_add('*Listbox*selectBackground', '#00008b') root.option_add('*Listbox*selectForeground', 'white') @@ -127,7 +151,7 @@ class APPLI: """ Retourne un texte d'informations sur la session courante d'EFICAS """ - texte = 'EFICAS v1.1\n\n' + texte = VERSION + '\n\n' texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n' texte = texte + 'Equipe : MTI/MMN\n\n' texte = texte + 'Code utilisé : %s\n' %self.code @@ -150,24 +174,45 @@ class APPLI: x=event.x y=event.y widget=event.widget - self.aide = Tkinter.Label(widget ,text = aide, - bg="yellow",relief="ridge",anchor='w') - self.aide.place(in_=widget, - relx=0.5,rely=0.5,anchor='center') - print aide - return - - def fill_menus(self,extension,defs): + self.aide=tooltip.TOOLTIP(widget) + self.aide.xoffset = 10 + self.aide.yoffset = - widget.winfo_height()/2 + self.aide.setText(aide) + self.aide._showTip() + return + + def cree_menu(self,menu,itemlist,appli_composant): + """ + Ajoute les items du tuple itemlist + dans le menu menu + """ + number_item=0 + radio=None + for item in itemlist: + number_item=number_item + 1 + if not item : + menu.add_separator() + else: + label,method=item + if type(method) == types.TupleType: + # On a un tuple => on cree une cascade + menu_cascade=Tkinter.Menu(menu) + menu.add_cascade(label=label,menu=menu_cascade) + self.cree_menu(menu_cascade,method,appli_composant) + elif method[0] == '&': + # On a une chaine avec & en tete => on cree un radiobouton + command=getattr(appli_composant,method[1:]) + menu.add_radiobutton(label=label,command=command) + if radio == None:radio=number_item + else: + command=getattr(appli_composant,method) + menu.add_command(label=label,command=command) + # Si au moins un radiobouton existe on invoke le premier + if radio:menu.invoke(radio) + + def fill_menus(self,appli_composant,defs): menudict=self.menubar.menudict for mname,itemlist in defs: menu=menudict.get(mname) if not menu:continue - for item in itemlist: - if not item : - menu.add_separator() - else: - label,method=item - command=getattr(extension,method) - menu.add_command(label=label,command=command) - - + self.cree_menu(menu,itemlist,appli_composant) diff --git a/Editeur/autre_analyse_cata.py b/Editeur/autre_analyse_cata.py new file mode 100644 index 00000000..706bf6f2 --- /dev/null +++ b/Editeur/autre_analyse_cata.py @@ -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() diff --git a/Editeur/browser.py b/Editeur/browser.py index 0553c6e3..ba5b9eee 100644 --- a/Editeur/browser.py +++ b/Editeur/browser.py @@ -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 diff --git a/Editeur/bureau.py b/Editeur/bureau.py index 41840842..341ec3f7 100644 --- a/Editeur/bureau.py +++ b/Editeur/bureau.py @@ -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 @@ -58,6 +79,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 +101,7 @@ class BUREAU: def cree_cataitem(self): """ - On récupère dans l'extension readercata les variables + On récupère dans l'appli_composant readercata les variables qui servent par la suite pour la création des JDC """ self.cataitem=self.appli.readercata.cataitem @@ -108,6 +137,7 @@ class BUREAU: cata_ord_dico=self.cata_ordonne_dico, appli=self.appli) self.JDCName=J.nom + self.fileName=None self.ShowJDC(J,self.JDCName) self.appli.toolbar.active_boutons() @@ -196,11 +226,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 +239,7 @@ class BUREAU: initialdir = self.initialdir) if file != '': self.fileName = file - e=extension(file) + e=extension_fichier(file) self.JDCName=stripPath(file) self.initialdir = os.path.dirname(file) else : @@ -333,7 +364,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 +536,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 +573,8 @@ class BUREAU: l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus() o = fenetre_mc_inconnus(l_mc) l = o.wait_new_list() + #print "mc_inconnus_new_list: ",l + #CCAR: Il n' y a pas de retour vers le JDC + def aideEFICAS(self): + AIDE.go(master=self.parent) diff --git a/Editeur/catabrowser.py b/Editeur/catabrowser.py index 24535cbc..c72cd2c9 100644 --- a/Editeur/catabrowser.py +++ b/Editeur/catabrowser.py @@ -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], diff --git a/Editeur/cataediteur.py b/Editeur/cataediteur.py index 5cdbe211..b2f30f00 100644 --- a/Editeur/cataediteur.py +++ b/Editeur/cataediteur.py @@ -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) diff --git a/Editeur/centerwindow.py b/Editeur/centerwindow.py index 95d9d33b..6b80e0d3 100644 --- a/Editeur/centerwindow.py +++ b/Editeur/centerwindow.py @@ -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 diff --git a/Editeur/compobloc.py b/Editeur/compobloc.py index 085c7d97..6f0682a0 100644 --- a/Editeur/compobloc.py +++ b/Editeur/compobloc.py @@ -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 diff --git a/Editeur/compocomm.py b/Editeur/compocomm.py index 194730ed..d31e71de 100644 --- a/Editeur/compocomm.py +++ b/Editeur/compocomm.py @@ -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 diff --git a/Editeur/compocommandecomm.py b/Editeur/compocommandecomm.py index 8b8c9237..cab37e89 100644 --- a/Editeur/compocommandecomm.py +++ b/Editeur/compocommandecomm.py @@ -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 diff --git a/Editeur/compofact.py b/Editeur/compofact.py index 0b52bbb3..7e0a7927 100644 --- a/Editeur/compofact.py +++ b/Editeur/compofact.py @@ -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 diff --git a/Editeur/compoformule.py b/Editeur/compoformule.py index b2d640f9..345bacc7 100644 --- a/Editeur/compoformule.py +++ b/Editeur/compoformule.py @@ -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 diff --git a/Editeur/compojdc.py b/Editeur/compojdc.py index 64461749..f331c612 100644 --- a/Editeur/compojdc.py +++ b/Editeur/compojdc.py @@ -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): diff --git a/Editeur/compomacro.py b/Editeur/compomacro.py index ce439f5d..edbf840c 100644 --- a/Editeur/compomacro.py +++ b/Editeur/compomacro.py @@ -1,9 +1,21 @@ -#@ MODIF compomacro Editeur DATE 02/07/2001 AUTEUR D6BHHJP J.P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== # Modules Python import os,sys,string @@ -23,8 +35,8 @@ import convert from widgets import Fenetre # -__version__="$Name: V1_1p1 $" -__Id__="$Id: compomacro.py,v 1.1.1.1 2001/12/04 15:38:22 eficas Exp $" +__version__="$Name: $" +__Id__="$Id: compomacro.py,v 1.4 2002/05/15 15:31:58 eficas Exp $" # class MACROPanel(panels.OngletPanel): @@ -39,7 +51,7 @@ class MACROPanel(panels.OngletPanel): nb.add('Concept', tab_text='Nommer concept') if ficini == 1: nb.add('Fichierinit',tab_text = 'Fichier %s' %self.node.item.get_nom()) - nb.add('Commande', tab_text='Insérer Commande') + nb.add('Commande', tab_text='Nouvelle Commande') nb.add('Commentaire',tab_text='Paramètre/Commentaire') panneau=Pmw.PanedWidget(nb.page("Mocles"), orient='horizontal') @@ -187,6 +199,11 @@ class MACROTreeItem(compooper.EtapeTreeItem): Ce nom dépend de la validité de l'objet """ if self.object.isactif(): + if self.object.state != 'unchanged': + # Si des modifications ont eu lieu on force le calcul des concepts de sortie + # et celui du contexte glissant + self.object.get_type_produit(force=1) + self.object.parent.reset_context() if self.object.isvalid(): return "ast-green-square" else: @@ -230,6 +247,7 @@ class MACROTreeItem(compooper.EtapeTreeItem): # item.object = MCSIMP, MCFACT, MCBLOC ou MCList if item.object.isoblig() : self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ') + print "Impossible de supprimer un mot-clé obligatoire" return 0 else : self.object.suppentite(item.object) @@ -274,10 +292,6 @@ class MACROTreeItem(compooper.EtapeTreeItem): def verif_condition_bloc(self): return self.object.verif_condition_bloc() - def nomme_sd(self,nom): - """ Lance la méthode de nommage de la SD """ - return self.object.nomme_sd(nom) - def get_noms_sd_oper_reentrant(self): return self.object.get_noms_sd_oper_reentrant() diff --git a/Editeur/compomclist.py b/Editeur/compomclist.py index 74f5254e..e1ba88e4 100644 --- a/Editeur/compomclist.py +++ b/Editeur/compomclist.py @@ -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 diff --git a/Editeur/componiveau.py b/Editeur/componiveau.py index 67ed0df1..f16c2c13 100644 --- a/Editeur/componiveau.py +++ b/Editeur/componiveau.py @@ -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 * diff --git a/Editeur/componuplet.py b/Editeur/componuplet.py index d4e76fb9..04d11082 100644 --- a/Editeur/componuplet.py +++ b/Editeur/componuplet.py @@ -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() diff --git a/Editeur/compooper.py b/Editeur/compooper.py index eceb5cf8..154aa2ab 100644 --- a/Editeur/compooper.py +++ b/Editeur/compooper.py @@ -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 diff --git a/Editeur/compoparam.py b/Editeur/compoparam.py index cd247e05..b5331466 100644 --- a/Editeur/compoparam.py +++ b/Editeur/compoparam.py @@ -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 diff --git a/Editeur/compoparameval.py b/Editeur/compoparameval.py index 13bb98ba..2fa34a60 100644 --- a/Editeur/compoparameval.py +++ b/Editeur/compoparameval.py @@ -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 diff --git a/Editeur/compoproc.py b/Editeur/compoproc.py index 7cbc5edf..88188816 100644 --- a/Editeur/compoproc.py +++ b/Editeur/compoproc.py @@ -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() diff --git a/Editeur/composimp.py b/Editeur/composimp.py index d7ec659b..57e7c505 100644 --- a/Editeur/composimp.py +++ b/Editeur/composimp.py @@ -1,17 +1,32 @@ -#@ MODIF composimp Editeur DATE 05/09/2001 AUTEUR DURAND C.DURAND # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== +# Modules Python import string,types,os from Tkinter import * import Pmw from tkFileDialog import * from tkMessageBox import showinfo from copy import copy,deepcopy +import traceback +# Modules Eficas import Objecttreeitem import prefs import panels @@ -51,7 +66,8 @@ class newSIMPPanel(panels.OngletPanel): def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): """ - Enregistre val comme valeur de self.node.item.object SANS faire de test de validité + Enregistre val comme valeur de self.node.item.object SANS + faire de test de validité """ if self.parent.modified == 'n' : self.parent.init_modif() if name != None: @@ -67,9 +83,9 @@ class newSIMPPanel(panels.OngletPanel): self.node.racine.verif_all() else : self.node.parent.verif() + self.node.update() if self.node.item.isvalid(): self.node.parent.select() - self.node.update() # ---------------------------------------------------------------------------------------- # Méthodes utlisées pour la manipulation des items dans les listes de choix # ---------------------------------------------------------------------------------------- @@ -196,18 +212,18 @@ class PLUSIEURS_Panel(newSIMPPanel): self.record_valeur(valeur) if self.node.item.isvalid(): self.node.parent.select() - # fermeture de la fenêtre de sélection - if self.ajout_valeurs: - self.ajout_valeurs.quit() + # 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 - if self.ajout_valeurs: - self.ajout_valeurs.quit() + # fermeture de la fenêtre de sélection + if self.ajout_valeurs: + self.ajout_valeurs.quit() def traite_reel(self,valeur): """ @@ -305,7 +321,7 @@ class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel): """ Génère la page de saisie de plusieurs valeurs parmi un ensemble discret de possibles - """ + """ self.ajout_valeurs = None # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste), # la liste des choix et la liste des valeurs @@ -424,12 +440,12 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): # Création de l'entry ou de la liste des SD self.label = Label(self.frame_choix,text="Valeur :") self.make_entry(frame = self.frame_choix,command = self.add_valeur_sans_into) - self.label.place(relx=0.05,rely=0.5) - # 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.label.place(relx=0.05,rely=0.5) + # Création d'un bouton "Importer ..." sur le panel. + bouton_valeurs_fichier = Button(self.frame_choix, + text="Importer ...", + command=self.select_in_file) + bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6) self.ajout_valeurs = None # boutons Ajouter et Supprimer bouton_add = Button(self.frame_boutons_fleches, @@ -441,10 +457,12 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): bouton_add.place(relx=0.3,rely=0.35) bouton_sup.place(relx=0.3,rely=0.65) # affichage de l'aide + self.frame_aide.update() self.aide = Label(self.frame_aide, text = aide, justify='center', - anchor='center') + anchor='center', + wraplength=int(self.frame_aide.winfo_width()*0.8)) self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1) self.Liste_valeurs.affiche_liste() # boutons Accepter et Annuler @@ -456,21 +474,24 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel): command = self.annule_modifs_valeur) for but in (bouton_accepter,bouton_annuler): but.pack(side='left',padx=5) - - 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, - titre="Sélection de valeurs", - texte=selection_texte) - except: - showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier) + + def select_in_file(self): + """ Permet d'ouvrir un fichier choisi par l'utilisateur. """ + nom_fichier = askopenfilename(title="Choix fichier :") + if nom_fichier == "": + return + try: + f = open(nom_fichier, "rb") + selection_texte = f.read() + f.close() + self.ajout_valeurs = FenetreDeSelection(self, + self.node.item, + self.parent.appli, + titre="Sélection de valeurs", + texte=selection_texte) + except: + traceback.print_exc() + showinfo("Erreur de fichier","impossible d'ouvir le fichier "+nom_fichier) def get_bulle_aide(self): """ @@ -700,22 +721,20 @@ class UNIQUE_Panel(newSIMPPanel): if not test : mess = "impossible d'évaluer : %s " %`valeur` self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess) - return elif self.node.item.isvalid() : self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + if self.node.item.get_position()=='global': + self.node.etape.verif_all() + elif self.node.item.get_position()=='global_jdc': + self.node.racine.verif_all() + else : + self.node.parent.verif() + self.node.update() self.node.parent.select() else : cr = self.node.item.get_cr() mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() self.record_valeur(anc_val,mess=mess) - return - if self.node.item.get_position()=='global': - self.node.etape.verif_all() - elif self.node.item.get_position()=='global_jdc': - self.node.racine.verif_all() - else : - self.node.parent.verif() - self.node.update() class UNIQUE_INTO_Panel(UNIQUE_Panel): """ @@ -878,7 +897,7 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center') # affichage du bouton 'Nouveau concept' self.b_co = Pmw.OptionMenu(self.frame_valeur,labelpos='w',label_text = "Nouveau concept : ", - items = ('OUI','NON'),menubutton_width=10) + items = ('NON','OUI'),menubutton_width=10) self.b_co.configure(command = lambda e,s=self : s.ask_new_concept()) self.b_co.place(relx=0.05,rely=0.6,anchor='w') self.label_co = Label(self.frame_valeur,text='Nom du nouveau concept :') @@ -888,9 +907,12 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): self.l_resu = Label(self.frame_valeur,text='Structure de donnée choisie :') self.valeur_choisie = StringVar() self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie) - self.aide = Label(self.frame_valeur, text = aide) + self.frame_valeur.update() + self.aide = Label(self.frame_valeur, + text = aide, + wraplength=int(self.frame_valeur.winfo_width()*0.8), + justify='center') self.aide.place(relx=0.5,rely=0.85,anchor='n') - self.b_co.invoke('NON') # affichage de la valeur courante self.display_valeur() @@ -902,13 +924,66 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): pour valoriser le mot-clé simple courant ou cliquez sur NOUVEAU CONCEPT pour entrer le nom d'un concept non encore existant""" + def valid_valeur(self): + """ + Teste si la valeur fournie par l'utilisateur est une valeur permise : + - si oui, l'enregistre + - si non, restaure l'ancienne valeur + """ + if self.parent.modified == 'n' : self.parent.init_modif() + valeur = self.get_valeur() + self.erase_valeur() + anc_val = self.node.item.get_valeur() + test_CO=self.node.item.is_CO(anc_val) + test = self.node.item.set_valeur(valeur) + if not test : + mess = "impossible d'évaluer : %s " %`valeur` + self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess) + return + elif self.node.item.isvalid() : + self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + if test_CO: + # il faut egalement propager la destruction de l'ancien concept + self.node.item.delete_valeur_co(valeur=anc_val) + # et on force le recalcul des concepts de sortie de l'etape + self.node.item.object.etape.get_type_produit(force=1) + # et le recalcul du contexte + self.node.item.object.etape.parent.reset_context() + self.node.parent.select() + else : + cr = self.node.item.get_cr() + mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.record_valeur(anc_val,mess=mess) + return + if self.node.item.get_position()=='global': + self.node.etape.verif_all() + elif self.node.item.get_position()=='global_jdc': + self.node.racine.verif_all() + else : + self.node.parent.verif() + self.node.update() + def valid_nom_concept_co(self,event=None): """ Lit le nom donné par l'utilisateur au concept de type CO qui doit être la valeur du MCS courant et stocke cette valeur """ + if self.parent.modified == 'n' : self.parent.init_modif() + anc_val = self.node.item.get_valeur() nom_concept = self.entry_co.get() - self.node.item.set_valeur_co(nom_concept) + test,mess=self.node.item.set_valeur_co(nom_concept) + if not test: + # On n'a pas pu créer le concept + self.parent.appli.affiche_infos(mess) + return + elif self.node.item.isvalid() : + self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée') + self.node.parent.select() + else : + cr = self.node.item.get_cr() + mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal() + self.record_valeur(anc_val,mess=mess) + return if self.node.item.get_position()=='global': self.node.etape.verif_all() elif self.node.item.get_position()=='global_jdc': @@ -932,6 +1007,9 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): self.label_valeur.place_forget() self.entry_co.focus() elif new_concept == 'NON': + # On est passe de OUI à NON, on supprime la valeur + self.node.item.delete_valeur_co() + self.record_valeur(name=None,mess="Suppression CO enregistrée") self.label_co.place_forget() self.entry_co.place_forget() self.l_resu.place(relx=0.05,rely=0.7) @@ -942,14 +1020,40 @@ class UNIQUE_SDCO_Panel(UNIQUE_ASSD_Panel): Affiche la valeur de l'objet pointé par self """ valeur = self.node.item.get_valeur() - if valeur == None : return # pas de valeur à afficher ... + if valeur == None or valeur == '': + self.valeur_choisie.set('') + return # pas de valeur à afficher ... # il faut configurer le bouton si la valeur est un objet CO # sinon afficher le nom du concept dans self.valeur_choisie - if valeur.__class__.__name__ != 'CO': - self.valeur_choisie.set(valeur.nom) - else: + if self.node.item.is_CO(): self.b_co.invoke('OUI') self.entry_co.insert(0,valeur.nom) + else: + self.valeur_choisie.set(valeur.nom) + + def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'): + """ + Enregistre val comme valeur de self.node.item.object SANS faire de test de validité + """ + if self.parent.modified == 'n' : self.parent.init_modif() + if name != None: + valeur =name + else : + self.entry_co.delete(0,END) + valeur= self.entry_co.get() + self.node.item.set_valeur_co(valeur) + self.parent.appli.affiche_infos(mess) + # On met a jour le display dans le panneau + self.display_valeur() + if self.node.item.get_position()=='global': + self.node.etape.verif_all() + elif self.node.item.get_position()=='global_jdc': + self.node.racine.verif_all() + else : + self.node.parent.verif() + if self.node.item.isvalid(): + self.node.parent.select() + self.node.update() class UNIQUE_BASE_Panel(UNIQUE_Panel): @@ -980,7 +1084,11 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel): self.entry.bind("",lambda e,c=self.valid_valeur:c()) self.entry.focus() # aide associée au panneau - self.aide = Label(self.frame_valeur, text = aide) + self.frame_valeur.update() + self.aide = Label(self.frame_valeur, + text = aide, + wraplength=int(self.frame_valeur.winfo_width()*0.8), + justify='center') self.aide.place(relx=0.5,rely=0.7,anchor='n') # affichage de la valeur du MCS self.display_valeur() @@ -1047,7 +1155,11 @@ class UNIQUE_COMP_Panel(UNIQUE_Panel): self.entry1.place(relx=0.27,rely = 0.5,relwidth=0.35) self.entry2.place(relx=0.65,rely = 0.5,relwidth=0.35) self.entry1.focus() - self.aide = Label(self.frame_valeur, text = aide) + self.frame_valeur.update() + self.aide = Label(self.frame_valeur, + text = aide, + wraplength=int(self.frame_valeur.winfo_width()*0.8), + justify='center') self.aide.place(relx=0.5,rely=0.7,anchor='n') def get_bulle_aide(self): @@ -1135,7 +1247,6 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): else: # on attend un entier, un réel ou une string self.panel = UNIQUE_BASE_Panel - def SetText(self, text): try: @@ -1158,7 +1269,8 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet pointé par self """ - return self.object.GetText() + text= self.object.GetText() + return text def wait_co(self): """ @@ -1218,42 +1330,47 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): def GetMinMax(self): """ Retourne les valeurs min et max de la définition de object """ return self.object.get_min_max() - - 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 GetMultiplicite(self): + """ A préciser. + Retourne la multiplicité des valeurs affectées à l'objet + représenté par l'item. Pour le moment retourne invariablement 1. + """ + return 1 + + def GetType(self): + """ + Retourne le type de valeur attendu par l'objet représenté par l'item. + """ + return self.object.get_type() + + def GetIntervalle(self): + """ + Retourne le domaine de valeur attendu par l'objet représenté + par l'item. + """ + return self.object.getintervalle() + + def IsInIntervalle(self,valeur): + """ + Retourne 1 si la valeur est dans l'intervalle permis par + l'objet représenté par l'item. + """ + return self.object.isinintervalle(valeur) def set_valeur_co(self,nom_co): """ Affecte au MCS pointé par self l'objet de type CO et de nom nom_co """ - self.object.set_valeur_co(nom_co) + return self.object.set_valeur_co(nom_co) def get_sd_avant_du_bon_type(self): """ Retourne la liste des noms des SD présentes avant l'étape qui contient le MCS pointé par self et du type requis par ce MCS """ - return self.object.jdc.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type) + return self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape, + self.object.definition.type) def GetListeValeurs(self) : """ Retourne la liste des valeurs de object """ @@ -1272,6 +1389,34 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): - retourne 'valeur' (chaîne de caractères) sinon """ return self.object.eval_valeur(valeur) + def is_CO(self,valeur=None): + """ + Indique si valeur est un concept produit de la macro + Cette méthode n'a de sens que pour un MCSIMP d'une MACRO + Si valeur vaut None on teste la valeur du mot cle + """ + # Pour savoir si un concept est un nouveau concept de macro + # on regarde s'il est présent dans l'attribut sdprods de l'étape + # ou si son nom de classe est CO. + # Il faut faire les 2 tests car une macro non valide peut etre + # dans un etat pas tres catholique avec des CO pas encore types + # et donc pas dans sdprods (resultat d'une exception dans type_sdprod) + if not valeur:valeur=self.object.valeur + if valeur in self.object.etape.sdprods:return 1 + if type(valeur) is not types.ClassType:return 0 + if valeur.__class__.__name__ == 'CO':return 1 + return 0 + + def delete_valeur_co(self,valeur=None): + """ + Supprime la valeur du mot cle (de type CO) + il faut propager la destruction aux autres etapes + """ + if not valeur : valeur=self.object.valeur + # XXX faut il vraiment appeler del_sdprod ??? + #self.object.etape.parent.del_sdprod(valeur) + self.object.etape.parent.delete_concept(valeur) + import Accas treeitem = SIMPTreeItem objet = Accas.MCSIMP diff --git a/Editeur/configuration.py b/Editeur/configuration.py index 7a191d57..703ec6d4 100644 --- a/Editeur/configuration.py +++ b/Editeur/configuration.py @@ -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): """ diff --git a/Editeur/definition_cata.py b/Editeur/definition_cata.py index d4842980..eeed1410 100644 --- a/Editeur/definition_cata.py +++ b/Editeur/definition_cata.py @@ -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 diff --git a/Editeur/eficas.py b/Editeur/eficas.py index c1d683c1..14419aae 100644 --- a/Editeur/eficas.py +++ b/Editeur/eficas.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe EFICAS qui est l'application proprement dite. Elle est dérivée de la classe APPLI @@ -17,7 +36,10 @@ from widgets import Fenetre class EFICAS(appli.APPLI): - extensions=['readercata','bureau','browser','options'] + try: + from prefs import appli_composants + except: + appli_composants=['readercata','bureau','browser','options'] def get_texte_infos(self): texte=appli.APPLI.get_texte_infos(self) diff --git a/Editeur/eficas_go.py b/Editeur/eficas_go.py index 71f4bd09..3f4df08b 100644 --- a/Editeur/eficas_go.py +++ b/Editeur/eficas_go.py @@ -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 diff --git a/Editeur/faq.py b/Editeur/faq.py index 8caa7ef9..d480fe22 100644 --- a/Editeur/faq.py +++ b/Editeur/faq.py @@ -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 diff --git a/Editeur/fenetre_mc_inconnus.py b/Editeur/fenetre_mc_inconnus.py index 113ec4e4..e2b4cf78 100644 --- a/Editeur/fenetre_mc_inconnus.py +++ b/Editeur/fenetre_mc_inconnus.py @@ -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("",lambda event,en=e,m=mc,s=self : s.select_mc(m,en)) - e.bind("",lambda e,s=self : s.modifie_mc()) + #e.bind("",lambda event,en=e,m=mc,s=self : s.select_mc(m,en)) + #e.bind("",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() diff --git a/Editeur/fontes.py b/Editeur/fontes.py index 013f6d2e..997e77fe 100644 --- a/Editeur/fontes.py +++ b/Editeur/fontes.py @@ -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/images.py b/Editeur/images.py index 31f8e2e2..e586d5ba 100644 --- a/Editeur/images.py +++ b/Editeur/images.py @@ -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 diff --git a/Editeur/import_code.py b/Editeur/import_code.py index 1152f1b7..4d05e343 100644 --- a/Editeur/import_code.py +++ b/Editeur/import_code.py @@ -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 diff --git a/Editeur/jdcdisplay.py b/Editeur/jdcdisplay.py index d85ab06a..05f591ec 100644 --- a/Editeur/jdcdisplay.py +++ b/Editeur/jdcdisplay.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe JDCDISPLAY qui réalise l'affichage du jeu de commandes sous la forme d'un arbre et de panneaux qui portent @@ -25,6 +44,7 @@ class JDCDISPLAY: self.jdc=jdc self.nom_jdc=nom_jdc self.fichier=None + self.panel_courant=None if not appli: class Appli: @@ -52,8 +72,8 @@ class JDCDISPLAY: self.modified='n' self.pane=Pmw.PanedWidget(self.parent,orient='horizontal') - self.pane.add('treebrowser',min=0.5) - self.pane.add('selected',min=0.5) + self.pane.add('treebrowser',min=0.4,size=0.5) + self.pane.add('selected',min=0.4) self.pane.pack(expand=1,fill='both') self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'), self.appli,self.select_node) @@ -78,13 +98,32 @@ class JDCDISPLAY: Lance la génération du panneau contextuel de l'objet sélectionné dans l'arbre """ + if self.panel_courant: + # On detruit le panneau + self.panel_courant.destroy() + o=self.panel_courant + self.panel_courant=None + # Mettre à 1 pour verifier les cycles entre objets + # pour les panneaux + withCyclops=0 + if withCyclops: + from Misc import Cyclops + z = Cyclops.CycleFinder() + z.register(o) + del o + z.find_cycles() + z.show_stats() + z.show_cycles() + + if node.item.isactif(): if hasattr(node.item,"panel"): - return node.item.panel(self,self.pane.pane('selected'),node) + self.panel_courant=node.item.panel(self,self.pane.pane('selected'),node) else: raise Exception("Le noeud sélectionné n'a pas de panel associé") else: - return panels.Panel_Inactif(self,self.pane.pane('selected'),node) + self.panel_courant = panels.Panel_Inactif(self,self.pane.pane('selected'),node) + return self.panel_courant def init_modif(self): """ @@ -148,7 +187,7 @@ class JDCDISPLAY: Ne permet que la copie d'objets de type Commande ou MCF """ objet_a_copier = self.appli.noeud_a_editer.item.get_copie_objet() - if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE'): + if objet_a_copier.__class__.__name__ in ('ETAPE','PROC_ETAPE','MACRO_ETAPE','FORM_ETAPE'): self.doPaste_Commande(objet_a_copier) elif objet_a_copier.__class__.__name__ == "MCFACT": self.doPaste_MCF(objet_a_copier) @@ -159,14 +198,16 @@ class JDCDISPLAY: def doPaste_Commande(self,objet_a_copier): """ - Réalise la copie de l'objet passé en argument qui est nécessairement une commande + Réalise la copie de l'objet passé en argument qui est nécessairement + une commande """ # il faut vérifier que le noeud sélectionné (noeud courant) est bien # une commande ou un JDC sinon la copie est impossible ... if self.node_selected.item.isCommande() : child = self.node_selected.append_brother(objet_a_copier,retour='oui') elif self.node_selected.item.isJdc() : - child = self.node_selected.append_child(objet_a_copier,retour='oui') + child = self.node_selected.append_child(objet_a_copier,pos='first', + retour='oui') else: showinfo("Copie impossible", "Vous ne pouvez coller la commande copiée à ce niveau de l'arborescence !") @@ -195,10 +236,17 @@ class JDCDISPLAY: child = self.node_selected.append_child(objet_a_copier,retour='oui') elif self.node_selected.item.isMCList() : # le noeud courant est une MCList - child = self.node_selected.parent.append_child(objet_a_copier,retour='oui') + child = self.node_selected.parent.append_child(objet_a_copier,pos='first',retour='oui') elif self.node_selected.item.isMCFact(): # le noeud courant est un MCFACT - child = self.node_selected.parent.append_child(objet_a_copier,retour='oui') + if self.node_selected.parent.item.isMCList(): + # le noeud selectionne est un MCFACT dans une MCList + child = self.node_selected.parent.append_child(objet_a_copier, + pos=self.node_selected.item, + retour='oui') + else: + # le noeud MCFACT selectionne n'est pas dans une MCList + child = self.node_selected.parent.append_child(objet_a_copier,retour='oui') else: showinfo("Copie impossible", "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !") diff --git a/Editeur/menubar.py b/Editeur/menubar.py index ad2366e8..89c74406 100644 --- a/Editeur/menubar.py +++ b/Editeur/menubar.py @@ -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') 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) - - - diff --git a/Editeur/options.py b/Editeur/options.py index 0101dd05..db1d1b6f 100644 --- a/Editeur/options.py +++ b/Editeur/options.py @@ -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 diff --git a/Editeur/panels.py b/Editeur/panels.py index 8338308a..c442939d 100644 --- a/Editeur/panels.py +++ b/Editeur/panels.py @@ -1,16 +1,32 @@ -#@ MODIF panels Editeur DATE 02/07/2001 AUTEUR D6BHHJP J.P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== import string import os from Tkinter import * import Pmw +import time from widgets import ListeChoix +from widgets import ListeChoixParGroupes +import prefs +import options SEPARATEUR = '-'*30 @@ -29,6 +45,32 @@ class Panel(Frame) : self.creer_boutons() self.init() + def destroy(self): + Frame.destroy(self) + self.panneau=None + self.parent=None + # Because on herite de Frame + self.master=None + # On supprime explicitement les references aux objets Tk + self.nb=None + self.fr_but=None + self.bouton_cata=None + self.bouton_doc=None + self.bouton_com=None + self.bouton_sup=None + self.frame_eval=None + self.label=None + self.frame_boutons=None + self.frame_comment=None + self.frame_param=None + # On termine la suppression de facon brutale (objets Tk et non Tk) + for k in self.__dict__.keys(): + # il est plus prudent de ne pas détruire le lien sur le Node + # si on voulait mettre l'attribut node à None, il faudrait + # que tous les appels à node.parent.select() apparaissent après + # toutes les autres actions liées au panel (node.item.isglobal(), ...) + if k != 'node' : setattr(self,k,None) + def creer_boutons(self): """ Méthode créant les boutons se trouvant dans la partie contextuelle d'EFICAS @@ -152,7 +194,6 @@ class Panel(Frame) : if self.parent.modified == 'n' : self.parent.init_modif() pere = self.node.parent self.node.delete() - pere.select() def affiche(self): """ Force l'affichage des fenêtres en cours """ @@ -164,10 +205,9 @@ class Panel(Frame) : texte_infos = '' for e in cmd.entites.keys() : if e == name : - texte_infos=cmd.entites[e].fr + texte_infos=getattr(cmd.entites[e],prefs.lang) break if texte_infos == '' : texte_infos="Pas d'infos disponibles" - #EFICAS.affiche_infos(texte_infos) self.parent.appli.affiche_infos(texte_infos) def defMC(self,name): @@ -182,9 +222,8 @@ class Panel(Frame) : def selectCmd(self,name): """ On retrouve la commande sous le curseur pour affichage du fr """ if name != 'COMMENTAIRE' and name != SEPARATEUR: - #EFICAS.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr) - #self.parent.appli.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr) - self.parent.appli.affiche_infos(self.parent.jdc.get_cmd(name).fr) + texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang) + self.parent.appli.affiche_infos(texte_infos) def defCmd(self,name): """ @@ -280,17 +319,28 @@ class OngletPanel(Panel) : but_apres.grid(column = 1,row =3) def makeCommandePage(self,page): + """ + Cree l'onglet + """ frame1 = Frame(page,height = 20) frame1.pack(side='top',fill='x') label = Label(frame1,text ="La commande choisie sera ajoutée\n APRES la commande courante") label.pack(side='top') frame2 = Frame(page) frame2.pack(side='top',fill='both',expand=1) - liste_cmd = self.get_liste_cmd() liste_commandes = (("",self.selectCmd), ("",self.deselectCmd), ("",self.defCmd)) - Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes,filtre='oui',titre = "Commandes") + if options.affichage_commandes == "alphabetic": + liste_cmd = self.get_liste_cmd() + Liste = ListeChoix(self,frame2,liste_cmd,liste_commandes = liste_commandes, + filtre='oui',titre = "Commandes") + else: + liste_groupes=self.node.item.object.niveau.definition.liste_groupes + dict_groupes=self.node.item.object.niveau.definition.dict_groupes + Liste = ListeChoixParGroupes(self,frame2,liste_groupes,dict_groupes, + liste_commandes = liste_commandes, + filtre='oui',titre = "Commandes") Liste.affiche_liste() # aide associée au panneau bulle_aide="""Double-cliquez sur la commande que vous voulez ajouter au jeu de commandes""" @@ -301,11 +351,19 @@ class OngletPanel(Panel) : """ Crée la page correspondant à un objet de type JDC """ - liste_cmd = self.get_liste_cmd() liste_commandes = (("",self.selectCmd), ("",self.deselectCmd), ("",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""" diff --git a/Editeur/readercata.py b/Editeur/readercata.py index 47667a09..1a9f1db3 100644 --- a/Editeur/readercata.py +++ b/Editeur/readercata.py @@ -1,9 +1,29 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module sert à lire un catalogue et à construire un objet CataItem pour Eficas. Il s'appuie sur la classe READERCATA """ # Modules Python +import time import os,sys,py_compile import traceback import cPickle @@ -17,8 +37,11 @@ import fontes import analyse_catalogue from Noyau.N_CR import CR from widgets import Fenetre +from utils import init_rep_cata_dev #import catabrowser +import autre_analyse_cata +import uiinfo class READERCATA: @@ -37,12 +60,7 @@ class READERCATA: self.code=self.appli.code self.appli.format_fichier.set('python') self.OpenCata() - self.cataitem=None - #XXX CCAR : Pour le moment je ne construis pas le CATAItem - #self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.code, - #self.cata, - #objet_cata_ordonne = self.cata_ordonne_dico) def OpenCata(self): """ @@ -77,18 +95,35 @@ class READERCATA: # détermination de fic_cata_c et fic_cata_p self.fic_cata_c = self.fic_cata + 'c' self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py' + print "Debut compil cata: ",time.clock() # compilation éventuelle du catalogue test = self.compile_cata(self.fic_cata,self.fic_cata_c) + print "Fin compil cata: ",time.clock() if not test : showerror("Compilation catalogue","Impossible de compiler le catalogue %s" %self.fic_cata) # import du catalogue + print "Debut import_cata: ",time.clock() self.cata = self.import_cata(self.fic_cata) + print "Fin import_cata: ",time.clock() if not self.cata : showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) + # # analyse du catalogue (ordre des mots-clés) - #XXX A priori ceci fait double emploi. Il faut d'abord calculer l'ordre - # puis fabriquer le CATAItem - #CCAR :self.catalo = catabrowser.CATAItem(self,"Catalogue",self.cata) - self.Retrouve_Ordre_Cata_Standard() + # + print "Debut Retrouve_Ordre: ",time.clock() + # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue + # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation + # des mots clés à la création + #self.Retrouve_Ordre_Cata_Standard() + self.Retrouve_Ordre_Cata_Standard_autre() + print "Fin Retrouve_Ordre: ",time.clock() + # + # analyse des données liées à l'IHM : UIinfo + # + print "Debut UIinfo: ",time.clock() + uiinfo.traite_UIinfo(self.cata) + print "Fin UIinfo: ",time.clock() + # # chargement et analyse des catalogues développeur (le cas échéant) + # if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' : init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev) fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') @@ -101,7 +136,8 @@ class READERCATA: self.cata = (self.cata,) else: self.cata_dev =self.import_cata(fic_cata_dev) - self.Retrouve_Ordre_Cata_Developpeur() + #self.Retrouve_Ordre_Cata_Developpeur() + self.Retrouve_Ordre_Cata_Developpeur_autre() self.cata = (self.cata,self.cata_dev) else: self.cata = (self.cata,) @@ -125,6 +161,15 @@ class READERCATA: traceback.print_exc() return 0 + def Retrouve_Ordre_Cata_Standard_autre(self): + """ + Construit une structure de données dans le catalogue qui permet + à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. + Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui + contient le nom des mots clés dans le bon ordre + """ + self.cata_ordonne_dico=autre_analyse_cata.analyse_catalogue(self.cata) + def Retrouve_Ordre_Cata_Standard(self): """ Retrouve l'ordre des mots-clés dans le catalogue, cad : @@ -146,6 +191,37 @@ class READERCATA: self.Get_Ordre_Cata(mode='cata') self.appli.affiche_infos("Catalogue standard chargé") + def Retrouve_Ordre_Cata_Developpeur(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + splash._splash.configure(text = message,barre='oui') + cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) + self.cata_dev_ordonne_cr = cata_dev_ordonne.cr + cata_dev_ordonne_dico = cata_dev_ordonne.entites + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Retrouve_Ordre_Cata_Developpeur_autre(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + splash._splash.configure(text = message,barre='oui') + cata_dev_ordonne_dico = autre_analyse_cata.analyse_catalogue(self.cata_dev) + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + def Get_Ordre_Cata(self,mode='pickle'): """ Retrouve l'ordre du catalogue : @@ -167,7 +243,7 @@ class READERCATA: splash._splash.configure(text = "Analyse du catalogue",barre='oui') cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) self.cata_ordonne_cr = cata_ordonne.cr - self.cata_ordonne_dico = cata_ordonne.dico + self.cata_ordonne_dico = cata_ordonne.entites splash._splash.configure(text = "Sauvegarde des informations sur le catalogue") f = open(self.fic_cata_p,'w+') p = cPickle.Pickler(f) @@ -252,7 +328,7 @@ class READERCATA: if time1 > time2: try: # le catalogue doit être recompilé avant d'être importé - splash._splash.configure(text="Compilation du catalogue\nCela peut prendre une trentaine de secondes ...") + splash._splash.configure(text="Compilation du catalogue\nCela peut prendre plusieurs secondes ...") py_compile.compile(cata) except: return 0 diff --git a/Editeur/splash.py b/Editeur/splash.py index c3e5339d..3002d375 100644 --- a/Editeur/splash.py +++ b/Editeur/splash.py @@ -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 diff --git a/Editeur/statusbar.py b/Editeur/statusbar.py index 6c0687a1..604025a8 100644 --- a/Editeur/statusbar.py +++ b/Editeur/statusbar.py @@ -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 diff --git a/Editeur/toolbar.py b/Editeur/toolbar.py index e99a56de..938d47fa 100644 --- a/Editeur/toolbar.py +++ b/Editeur/toolbar.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # Modules Python @@ -137,7 +156,7 @@ class TOOLBAR: """ self.fen_infos.destroy() - def creer_boutons_extension(self,l_boutons,extension): + def creer_boutons_appli_composant(self,l_boutons,appli_composant): for bouton in l_boutons : if not bouton : # on veut afficher un bouton vide (=espace entre boutons) @@ -146,7 +165,7 @@ class TOOLBAR: relief = 'flat').pack(side='left') continue nom_fic,commande,texte,statut = bouton - commande=getattr(extension,commande) + commande=getattr(appli_composant,commande) b = Button(self.barreboutons, image = images.get_image(nom_fic), command = commande, diff --git a/Editeur/tooltip.py b/Editeur/tooltip.py index d43992c9..752a57b7 100644 --- a/Editeur/tooltip.py +++ b/Editeur/tooltip.py @@ -1,9 +1,50 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module propose la classe TOOLTIP pour mettre en oeuvre les bulles d'aide """ import Tkinter +import types + +def destruct(obj): + # assist in breaking circular references + if obj is not None: + assert type(obj) is types.InstanceType + for k in obj.__dict__.keys(): + obj.__dict__[k] = None + ##del obj.__dict__[k] + +def after(widget, ms, func, *args): + timer = apply(widget.after, (ms, func) + args) + command = widget._tclCommands[-1] + return (timer, command, widget) + +def after_cancel(t): + if t is not None: + t[2].after_cancel(t[0]) + try: + t[2].deletecommand(t[1]) + except Tkinter.TclError: + pass class TOOLTIP: def __init__(self,widget): @@ -76,3 +117,16 @@ class TOOLTIP: self.tooltip.wm_geometry("%+d%+d" % (x, y)) self.tooltip.wm_deiconify() +if __name__ == "__main__": + root=Tkinter.Tk() + + def aide(event): + tp=TOOLTIP(root) + tp.setText("texte d'aide") + tp._showTip() + + label = Tkinter.Label(root, text="coucou") + label.bind("", aide) + label.pack() + root.mainloop() + diff --git a/Editeur/treeitemincanvas.py b/Editeur/treeitemincanvas.py index 5ec26438..2a1c45ac 100644 --- a/Editeur/treeitemincanvas.py +++ b/Editeur/treeitemincanvas.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # Modules Python @@ -25,7 +44,7 @@ class TREEITEMINCANVAS: self.parent=parent self.item=Objecttreeitem.make_objecttreeitem(self.appli,self.nom,self.object) - self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1) + self.canvas=Pmw.ScrolledCanvas(self.parent,borderframe=1,canvas_background='gray95') self.canvas.pack(padx=10,pady=10,fill = 'both', expand = 1) if not sel: def sel(event=None): diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py index a0d6554e..fe6e4d28 100644 --- a/Editeur/treewidget.py +++ b/Editeur/treewidget.py @@ -1,11 +1,23 @@ -#@ MODIF treewidget Editeur DATE 02/07/2001 AUTEUR D6BHHJP J.P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== -import os,sys,string,re,types +import os,sys,string,re,types,traceback from Tkinter import * @@ -13,8 +25,8 @@ import fontes import images # -__version__="$Name: V1_1p1 $" -__Id__="$Id: treewidget.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $" +__version__="$Name: $" +__Id__="$Id: treewidget.py,v 1.6 2002/09/09 10:39:06 eficas Exp $" # Fonte_Standard = fontes.standard @@ -468,6 +480,7 @@ class Node : try: self.canvas.addtag_overlapping('move',bbox1[0],self.y +10,bbox1[2],bbox1[3]) except: + print "Erreur dans move :" print self print self.item print self.item.object @@ -493,6 +506,7 @@ class Node : try: child.trace_ligne() except: + print "Erreur dans trace_ligne :" print child print child.item.object @@ -521,21 +535,23 @@ class Node : def full_creation(self,name,pos=None): """ - Interface avec ACCAS : création de l'objet de nom name et - du noeud associé. Retourne le noeud fils ainsi créé + Interface avec ACCAS : création de l'objet de nom name et + du noeud associé. Retourne le noeud fils ainsi créé """ item = self.item.additem(name,pos) if item == None or item == 0: # impossible d'ajouter le noeud de nom : name return 0 nature = item.get_nature() - #if nature =="COMMANDE" or nature == "OPERATEUR" or nature == "PROCEDURE": if nature in ("COMMANDE","OPERATEUR","PROCEDURE","COMMENTAIRE", "PARAMETRE","COMMANDE_COMMENTARISEE","PARAMETRE_EVAL"): # on veut ajouter une commande ou un commentaire ou un paramètre # il ne faut pas rechercher un même objet déjà existant # à modifier : il faut tester l'attribut 'repetable' enfant = None + elif self.item.object.isMCList(): + # Dans ce cas on ne fait pas de remplacement. On ne cherche pas un objet de meme nom + enfant=None else : enfant = self.get_node_fils(item.get_nom()) if enfant : @@ -611,6 +627,9 @@ class Node : # on donne la position depuis l'extérieur # (appel de append_child par append_brother par exemple) index = pos + elif type(pos) == types.InstanceType: + # pos est un item. Il faut inserer name apres pos + index = self.item.get_index(pos) +1 else : if type(name) == types.InstanceType: index = self.item.get_index_child(name.nom) @@ -676,6 +695,7 @@ class Node : print 'Erreur dans la destruction de ',self.item.get_nom(),' dans delete' nbnew = pere.get_nb_children() pere.redraw(nbnew-nbold) + pere.select() def copynode(self,node,pos) : """ node est le noeud à copier à la position pos de self ( = parent de node) """ @@ -690,15 +710,16 @@ class Node : try : child.item.object.mc_liste = objet_copie.mc_liste except: - pass + traceback.print_exc() #-------------------------------------------------------------- # Méthodes de vérification du contexte et de validité du noeud #-------------------------------------------------------------- - def traite_mclist(self): + def traite_mclist_OLD(self): """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide ou réduite à un seul élément suite à une destruction """ # self représente une MCList + print "on passe par traite_mclist ",len(self.item) if len(self.item) == 0 : # la liste est vide : il faut la supprimer self.delete() @@ -709,6 +730,8 @@ class Node : noeud = self.children[0] if self.parent.delete_child(self): self.parent.append_node_child(noeud.item,pos=index,verif='non') + else: + print "destruction de self impossible !" #if self.parent.delete_child(self): # self.parent.copynode(self.children[0],index) #else : @@ -716,6 +739,26 @@ class Node : else : return + def traite_mclist(self): + """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide + ou réduite à un seul élément suite à une destruction + """ + # self représente une MCList + if len(self.item) == 0 : + # la liste est vide : il faut la supprimer + self.delete() + elif len(self.item) == 1: + # il ne reste plus qu'un élément dans la liste + # il faut supprimer la liste et créer directement l'objet + index = self.parent.children.index(self) + noeud = self.children[0] + noeud.parent = self.parent + self.parent.delete_node_child(self) + self.parent.item.replace_child(self.item,noeud.item) + self.parent.children.insert(index,noeud) + else : + return + def verif_all(self): self.verif_all_children() diff --git a/Editeur/uiinfo.py b/Editeur/uiinfo.py new file mode 100644 index 00000000..d2fa8ba2 --- /dev/null +++ b/Editeur/uiinfo.py @@ -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) + + + + diff --git a/Editeur/utils.py b/Editeur/utils.py index 9f09ecd4..5fe39483 100644 --- a/Editeur/utils.py +++ b/Editeur/utils.py @@ -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 + diff --git a/Editeur/widgets.py b/Editeur/widgets.py index 5b5d4ea2..2eefd4b2 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -1,9 +1,21 @@ -#@ MODIF widgets Editeur DATE 05/09/2001 AUTEUR DURAND C.DURAND # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== # ---------------------------------------------------------- # Cette classe sert à définir les widgets utilisés par @@ -98,7 +110,8 @@ class Fenetre : """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom à l'utilisateur """ file = asksaveasfilename(defaultextension = '.comm', - initialdir = self.appli.CONFIGURATION.rep_user, + #initialdir = self.appli.CONFIGURATION.rep_user, + initialdir = self.appli.CONFIGURATION.initialdir, title="Sauvegarde du "+self.titre) if file != '': if not save_in_file(file,self.texte) : @@ -554,7 +567,8 @@ class ListeChoix : elif type(objet) in (types.StringType,types.IntType): mot = objet elif type(objet) == types.FloatType : - mot = repr_float(objet) + #mot = repr_float(objet) + mot = str(objet) else: mot=`objet` label = Label(self.MCbox, @@ -806,3 +820,100 @@ class BARRE_K2000(Toplevel): def quit(self): self.quit = 1 + +class ListeChoixParGroupes(ListeChoix) : + """ + Cette classe est utilisée pour afficher une liste de commandes classées par + groupes. L'utilisateur peut réaliser des actions de selection + qui déclenchent des actions spécifiées par les bindings contenus dans liste_commandes + """ + def __init__(self,parent,page,liste_groupes,dict_groupes,liste_commandes=[],liste_marques =[], + active ='oui',filtre='non',titre=''): + self.parent = parent + self.page = page + self.liste_groupes = liste_groupes + self.dict_groupes = dict_groupes + self.dico_labels={} + self.selection = None + self.liste_commandes = liste_commandes + self.liste_marques = liste_marques + self.arg_selected='' + self.active = active + self.titre = titre + self.filtre = filtre + self.init() + + def affiche_liste(self): + """ Affiche la liste dans la fenêtre""" + i=0 + self.MCbox.config(state=NORMAL) + self.MCbox.delete(1.0,END) + for grp in self.liste_groupes: + # On itère sur les groupes + if grp == "CACHE":continue + liste_commandes=self.dict_groupes[grp] + text="GROUPE<<<<<<<< "+grp+" " + text=text+">"*max(0,30-len(text)) + label = Label(self.MCbox, + text = text, + fg = 'black',bg = 'gray95',justify = 'left') + # On stocke la relation entre le nom de la commande et le label + self.dico_labels[grp]=label + self.MCbox.window_create(END, + window=label, + stretch = 1) + self.MCbox.insert(END,'\n') + for cmd in liste_commandes: + label = Label(self.MCbox, + text = cmd, + fg = 'black',bg = 'gray95',justify = 'left') + # On stocke la relation entre le nom de la commande et le label + self.dico_labels[cmd]=label + self.MCbox.window_create(END, + window=label, + stretch = 1) + self.MCbox.insert(END,'\n') + if self.active == 'oui': + label.bind(self.liste_commandes[0][0], + lambda e,s=self,c=self.liste_commandes[0][1],x=cmd,l=label : s.selectitem(x,l,c)) + label.bind(self.liste_commandes[1][0], + lambda e,s=self,c=self.liste_commandes[1][1],x=cmd,l=label : s.deselectitem(l,x,c)) + label.bind(self.liste_commandes[2][0], + lambda e,s=self,c=self.liste_commandes[2][1],x=cmd,l=label : s.chooseitem(x,l,c)) + # On marque les items specifies dans liste_marques + #if i in self.liste_marques : self.markitem(label) + i=i+1 + self.MCbox.config(state=DISABLED) + self.selection = None + + def entry_changed(self,event=None): + """ + Cette méthode est invoquée chaque fois que l'utilisateur modifie le contenu + de l'entry et frappe + """ + 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 + diff --git a/Exemples/README b/Exemples/README index 01553ea1..62a3bace 100644 --- a/Exemples/README +++ b/Exemples/README @@ -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 diff --git a/Exemples/ex11/main.py b/Exemples/ex11/main.py index 08352a34..942472b5 100644 --- a/Exemples/ex11/main.py +++ b/Exemples/ex11/main.py @@ -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'), diff --git a/Exemples/ex18/main.py b/Exemples/ex18/main.py index 3e8f1fa0..43097fee 100644 --- a/Exemples/ex18/main.py +++ b/Exemples/ex18/main.py @@ -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/Extensions/__init__.py b/Extensions/__init__.py index e69de29b..427090e6 100644 --- a/Extensions/__init__.py +++ b/Extensions/__init__.py @@ -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. +# +# +# ====================================================================== diff --git a/Extensions/commande_comm.py b/Extensions/commande_comm.py index 68bd102d..28b91a3b 100644 --- a/Extensions/commande_comm.py +++ b/Extensions/commande_comm.py @@ -1,9 +1,21 @@ -#@ MODIF commande_comm Accas DATE 02/07/2001 AUTEUR D6BHHJP J.P.LEFEBVRE # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== import os,traceback,string @@ -30,6 +42,7 @@ class COMMANDE_COMM: self.definition=self self.nom = '' self.niveau = self.parent.niveau + self.actif=1 #self.appel = N_utils.callee_where(niveau=2) if reg=='oui' : self.register() @@ -216,3 +229,19 @@ class COMMANDE_COMM: """ return [] + def reparent(self,parent): + """ + Cette methode sert a reinitialiser la parente de l'objet + """ + self.parent=parent + self.jdc=parent.get_jdc_root() + self.etape=self + + def verif_existence_sd(self): + """ + Vérifie que les structures de données utilisées dans self existent bien dans le contexte + avant étape, sinon enlève la référence à ces concepts + --> sans objet pour les commandes commentarisées + """ + pass + diff --git a/Extensions/commentaire.py b/Extensions/commentaire.py index 733a2016..993fda43 100644 --- a/Extensions/commentaire.py +++ b/Extensions/commentaire.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe COMMENTAIRE qui sert dans EFICAS pour gérer les commentaires dans un JDC @@ -145,5 +164,18 @@ class COMMENTAIRE : """ return [] + def get_sdprods(self,nom_sd): + """ + Retourne les concepts produits par la commande + """ + return None + def verif_existence_sd(self): + pass + + def get_fr(self): + """ + Retourne le commentaire lui meme tronque a la 1ere ligne + """ + return self.valeur.split('\n',1)[0] diff --git a/Extensions/etape_niveau.py b/Extensions/etape_niveau.py index 31c7c20a..675fb6b8 100644 --- a/Extensions/etape_niveau.py +++ b/Extensions/etape_niveau.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe ETAPE_NIVEAU qui sert à concrétiser les niveaux au sein d'un JDC @@ -5,6 +24,7 @@ import traceback from Noyau import N_OBJECT +import prefs class ETAPE_NIVEAU(N_OBJECT.OBJECT): @@ -109,3 +129,12 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT): self.jdc.suppentite(etape) + def get_fr(self): + """ + Retourne le texte d'aide dans la langue choisie + """ + try : + return getattr(self.definition,prefs.lang) + except: + return '' + diff --git a/Extensions/interpreteur_formule.py b/Extensions/interpreteur_formule.py index 7e2dbdf9..4d1b93d4 100644 --- a/Extensions/interpreteur_formule.py +++ b/Extensions/interpreteur_formule.py @@ -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: diff --git a/Extensions/jdc.py b/Extensions/jdc.py index 8b7cdf29..313ec043 100644 --- a/Extensions/jdc.py +++ b/Extensions/jdc.py @@ -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/mcnuplet.py b/Extensions/mcnuplet.py index da997b6d..310c981d 100644 --- a/Extensions/mcnuplet.py +++ b/Extensions/mcnuplet.py @@ -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 '' + diff --git a/Extensions/niveau.py b/Extensions/niveau.py index b5df8fdf..8b6f0822 100644 --- a/Extensions/niveau.py +++ b/Extensions/niveau.py @@ -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 diff --git a/Extensions/nuplet.py b/Extensions/nuplet.py index 63da3689..f5208fb3 100644 --- a/Extensions/nuplet.py +++ b/Extensions/nuplet.py @@ -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 diff --git a/Extensions/parametre.py b/Extensions/parametre.py index 94f028f0..20455bfe 100644 --- a/Extensions/parametre.py +++ b/Extensions/parametre.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe PARAMETRE qui sert à définir des objets paramètres qui sont compréhensibles et donc affichables @@ -33,6 +52,7 @@ class PARAMETRE : self.definition=self self.jdc = self.parent = CONTEXT.get_current_step() self.niveau=self.parent.niveau + self.actif=1 self.register() def interprete_valeur(self,val): @@ -249,7 +269,8 @@ class PARAMETRE : """ return [] - + def verif_existence_sd(self): + pass diff --git a/Extensions/parametre_eval.py b/Extensions/parametre_eval.py index 73bf9bd6..b45546d9 100644 --- a/Extensions/parametre_eval.py +++ b/Extensions/parametre_eval.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient la classe PARAMETRE_EVAL qui sert à définir des objets paramètres qui sont compréhensibles et donc affichables @@ -36,6 +55,7 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) : self.jdc = self.parent = CONTEXT.get_current_step() self.definition=self self.niveau = self.parent.niveau + self.actif=1 # Ceci est-il indispensable ??? #self.appel = N_utils.callee_where(niveau=2) self.register() @@ -60,6 +80,8 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) : """ if not val : return None d={} + val = string.strip(val) + if val[-1] == ';' : val = val[0:-1] d['EVAL'] = Accas.EVAL try: valeur = eval(val,{},d) diff --git a/Extensions/pluginloader.py b/Extensions/pluginloader.py index 659027d2..378500c0 100644 --- a/Extensions/pluginloader.py +++ b/Extensions/pluginloader.py @@ -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 index 00000000..004d0b86 --- /dev/null +++ b/Ihm/I_ASSD.py @@ -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__) diff --git a/Ihm/I_A_CLASSER.py b/Ihm/I_A_CLASSER.py index 16853f5f..e1f19ca5 100644 --- a/Ihm/I_A_CLASSER.py +++ b/Ihm/I_A_CLASSER.py @@ -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. +# +# +# ====================================================================== """ """ diff --git a/Ihm/I_ENTITE.py b/Ihm/I_ENTITE.py index 3a070e1c..11add723 100644 --- a/Ihm/I_ENTITE.py +++ b/Ihm/I_ENTITE.py @@ -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 diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 8937c110..33a517b7 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -1,29 +1,43 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # Modules Python import string,types from copy import copy +# import rajoutés suite à l'ajout de Build_sd --> à résorber +import traceback +import Noyau +from Noyau import N_Exception +from Noyau.N_Exception import AsException +# fin import à résorber + # Modules EFICAS import I_MCCOMPO class ETAPE(I_MCCOMPO.MCCOMPO): - def __init__(self): - self.niveau=self.jdc - def ident(self): return self.nom - def get_fr(self): - """ - Retourne l'attribut fr de self.definition - """ - try: - return self.definition.fr - except: - return '' - def get_sdname(self): if CONTEXT.debug : print "SDNAME ",self.reuse,self.sd,self.sd.get_name() if self.reuse != None: @@ -63,7 +77,8 @@ class ETAPE(I_MCCOMPO.MCCOMPO): """ if self.isvalid() : if type(self.definition.op_init) == types.FunctionType : - apply(self.definition.op_init,(self,self.master.g_context)) + # XXX Normalement en mode editeur g_context ne peut pas etre utilisé + apply(self.definition.op_init,(self,self.parent.g_context)) self.state = 'modified' def nomme_sd(self,nom) : @@ -79,59 +94,87 @@ class ETAPE(I_MCCOMPO.MCCOMPO): if len(nom) > 8 and self.jdc.definition.code == 'ASTER': return 0,"Nom de concept trop long (maxi 8 caractères)" self.init_modif() - # Cas particulier des opérateurs réentrants 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) + # FR : appel à get_sdprod incorrect : il faut appeler get_sd_avant_etape + #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): + # Un concept de ce nom existe dans le voisinage de l'etape courante # 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): + # 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 + self.sd.nom=nom + self.sdnom=nom + return 1,"Nommage du concept effectué" + if self.isvalid() : + # Normalement l appel de isvalid a mis a jour le concept produit (son type) + # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas + # deja attribué + if self.parent.get_sd_autour_etape(nom,self): + return 0,"Nommage du concept refuse : un concept de meme nom existe deja" + else: + self.sd.nom=nom + self.sdnom=nom + return 1,"Nommage du concept effectué" + else: + # Normalement on ne devrait pas passer ici + return 0,'Normalement on ne devrait pas passer ici' def get_sdprods(self,nom_sd): """ @@ -206,6 +249,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): Initialise les attributs jdc, id, niveau et réalise les enregistrements nécessaires Pour EFICAS, on tient compte des niveaux + Surcharge la methode make_register du package Noyau """ if self.parent : self.jdc = self.parent.get_jdc_root() @@ -234,9 +278,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO): etape.state = 'modified' etape.reuse = None etape.sdnom = None + etape.etape=etape etape.mc_liste=[] for objet in self.mc_liste: new_obj = objet.copy() + new_obj.reparent(etape) etape.mc_liste.append(new_obj) return etape @@ -270,3 +316,104 @@ 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 + else:self.state='undetermined' + 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: + 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)) + + + + + + + + + + + + + + + + + + + + + diff --git a/Ihm/I_EXCLUS.py b/Ihm/I_EXCLUS.py index e53ead8e..844d61f0 100644 --- a/Ihm/I_EXCLUS.py +++ b/Ihm/I_EXCLUS.py @@ -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 index 00000000..b708dee6 --- /dev/null +++ b/Ihm/I_FONCTION.py @@ -0,0 +1,41 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== +from I_ASSD import ASSD + +class FONCTION(ASSD): + def __init__(self,etape=None,sd=None,reg='oui'): + #ASSD.__init__(self,etape=etape,sd=sd,reg=reg) + if reg=='oui': + self.jdc.register_fonction(self) + + def get_formule(self): + """ + Retourne une formule décrivant self sous la forme d'un tuple : + (nom,type_retourne,arguments,corps) + """ + if hasattr(self.etape,'get_formule'): + # on est dans le cas d'une formule Aster + return self.etape.get_formule() + else: + # on est dans le cas d'une fonction + return (self.nom,'REEL','(REEL:x)','''bidon''') + +class fonction(FONCTION) : pass + diff --git a/Ihm/I_FORM_ETAPE.py b/Ihm/I_FORM_ETAPE.py index 51100165..80689be4 100644 --- a/Ihm/I_FORM_ETAPE.py +++ b/Ihm/I_FORM_ETAPE.py @@ -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) diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 2c26ab8e..125fb617 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # Modules Python @@ -6,9 +25,8 @@ import string,linecache # Modules Eficas import I_OBJECT -from Noyau.N_ASSD import assd +from Noyau.N_ASSD import ASSD from Noyau.N_ETAPE import ETAPE -from Noyau.N_CO import CO from Noyau.N_Exception import AsException from Extensions import commentaire,parametre,parametre_eval @@ -21,6 +39,7 @@ class JDC(I_OBJECT.OBJECT): self.niveau=self self.params=[] self.fonctions=[] + self._etape_context=None def get_cmd(self,nomcmd): """ @@ -38,20 +57,32 @@ class JDC(I_OBJECT.OBJECT): l=[] for k,v in d.items(): if type(v) != types.InstanceType : continue - if assd in types_permis or CO in types_permis : - l.append(k) - continue - for type_ok in types_permis: - if type_ok in ('R','I','C','TXM') and v in self.params : l.append(k) - elif type_ok == 'R' and v.__class__.__name__ == 'reel' : l.append(k) - elif type_ok == 'I' and v.__class__.__name__ == 'entier' : l.append(k) - elif type_ok == 'C' and v.__class__.__name__ == 'complexe' : l.append(k) - elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' : l.append(k) - elif type(type_ok) != types.ClassType : continue - elif v.__class__ == type_ok or issubclass(v.__class__,type_ok): l.append(k) + # On considère que seul assd indique un type quelconque pas CO + elif self.assd in types_permis : + l.append(k) + elif self.est_permis(v,types_permis): + l.append(k) l.sort() return l + def est_permis(self,v,types_permis): + for type_ok in types_permis: + if type_ok in ('R','I','C','TXM') and v in self.params : + return 1 + elif type_ok == 'R' and v.__class__.__name__ == 'reel' : + return 1 + elif type_ok == 'I' and v.__class__.__name__ == 'entier' : + return 1 + elif type_ok == 'C' and v.__class__.__name__ == 'complexe' : + return 1 + elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' : + return 1 + elif type(type_ok) != types.ClassType : + continue + elif v.__class__ == type_ok or issubclass(v.__class__,type_ok): + return 1 + return 0 + def addentite(self,name,pos): """ Ajoute une entite : @@ -83,6 +114,7 @@ class JDC(I_OBJECT.OBJECT): if pos == None : pos = 0 self.etapes.insert(pos,objet) self.editmode=0 + self.reset_context() self.active_etapes() return objet elif name == "PARAMETRE_EVAL": @@ -93,6 +125,7 @@ class JDC(I_OBJECT.OBJECT): if pos == None : pos = 0 self.etapes.insert(pos,objet) self.editmode=0 + self.reset_context() self.active_etapes() return objet elif type(name)==types.InstanceType: @@ -100,10 +133,8 @@ class JDC(I_OBJECT.OBJECT): # existante (par copie donc) # on est donc nécessairement en mode editeur ... objet = name - objet.jdc = objet.parent = self - #XXX current_step n'existe plus. A priori le parent devrait etre self - # ainsi que le step courant. - #objet.parent = self.current_step + # Il ne faut pas oublier de reaffecter le parent d'obj (si copie) + objet.reparent(self) self.set_current_step() if isinstance(objet,ETAPE): if objet.nom_niveau_definition == 'JDC': @@ -115,8 +146,12 @@ class JDC(I_OBJECT.OBJECT): objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet) objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition] self.etapes.insert(pos,objet) + # il faut vérifier que les concepts utilisés par objet existent bien + # à ce niveau d'arborescence + objet.verif_existence_sd() self.active_etapes() self.editmode=0 + self.reset_context() return objet else : # On veut ajouter une nouvelle commande @@ -125,11 +160,13 @@ class JDC(I_OBJECT.OBJECT): cmd=self.get_cmd(name) # L'appel a make_objet n'a pas pour effet d'enregistrer l'étape # auprès du step courant car editmode vaut 1 + # Par contre elle a le bon parent grace a set_current_step e=cmd.make_objet() if pos == None : pos = 0 self.etapes.insert(pos,e) self.reset_current_step() self.editmode=0 + self.reset_context() self.active_etapes() return e except: @@ -151,13 +188,15 @@ class JDC(I_OBJECT.OBJECT): def get_sd_avant_etape(self,nom_sd,etape): return self.get_contexte_avant(etape).get(nom_sd,None) - def get_sd_apres_etape(self,nom_sd,etape): + def get_sd_apres_etape(self,nom_sd,etape,avec='non'): """ Cette méthode retourne la SD de nom nom_sd qui est éventuellement - définie apres etape + définie apres etape + Si avec vaut 'non' exclut etape de la recherche """ ietap=self.etapes.index(etape) - for e in self.etapes[ietap+1:]: + if avec == 'non':ietap=ietap+1 + for e in self.etapes[ietap:]: sd=e.get_sdprods(nom_sd) if sd: if hasattr(e,'reuse'): @@ -165,16 +204,17 @@ class JDC(I_OBJECT.OBJECT): return sd return None - def get_sd_autour_etape(self,nom_sd,etape): + def get_sd_autour_etape(self,nom_sd,etape,avec='non'): """ Fonction: retourne la SD de nom nom_sd qui est éventuellement définie avant ou apres etape Permet de vérifier si un concept de meme nom existe dans le périmètre d'une étape + Si avec vaut 'non' exclut etape de la recherche """ sd=self.get_sd_avant_etape(nom_sd,etape) if sd:return sd - return self.get_sd_apres_etape(nom_sd,etape) + return self.get_sd_apres_etape(nom_sd,etape,avec) def active_etapes(self): """ @@ -267,6 +307,12 @@ class JDC(I_OBJECT.OBJECT): """ self.params.append(param) + def register_fonction(self,fonction): + """ + Cette méthode sert à ajouter une fonction dans la liste des fonctions + """ + self.fonctions.append(fonction) + def delete_param(self,param): """ Supprime le paramètre param de la liste des paramètres @@ -297,6 +343,14 @@ class JDC(I_OBJECT.OBJECT): nom = form.nom if not nom : continue if d.has_key(nom): l_fonctions.append(form.get_formule()) + + # on ajoute les concepts produits par DEFI_VALEUR + # XXX On pourrait peut etre faire plutot le test sur le type + # de concept : entier, reel, complexe, etc. + for k,v in d.items(): + if hasattr(v,'etape') and v.etape.nom in ('DEFI_VALEUR',): + l_constantes.append(k) + # on retourne les deux listes return l_constantes,l_fonctions @@ -373,3 +427,69 @@ class JDC(I_OBJECT.OBJECT): linecache.cache[file]=0,0,string.split(text,'\n'),file return file,text + + def get_genealogie(self): + """ + Retourne la liste des noms des ascendants de l'objet self + jusqu'à la première ETAPE parent. + """ + return [] + + def NommerSdprod(self,sd,sdnom): + """ + Nomme la SD apres avoir verifie que le nommage est possible : nom + non utilise + Si le nom est deja utilise, leve une exception + Met le concept créé dans le concept global g_context + """ + # XXX En mode editeur dans EFICAS, le nommage doit etre géré différemment + # Le dictionnaire g_context ne représente pas le contexte + # effectif avant une étape. + # Il faut utiliser get_contexte_avant avec une indication de l'étape + # traitée. Pour le moment, il n'y a pas de moyen de le faire : ajouter + # un attribut dans le JDC ??? + if CONTEXT.debug : print "JDC.NommerSdprod ",sd,sdnom + if self._etape_context: + o=self.get_contexte_avant(self._etape_context).get(sdnom,None) + else: + o=self.g_context.get(sdnom,None) + if isinstance(o,ASSD): + raise AsException("Nom de concept deja defini : %s" % sdnom) + + # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja. + # Ajoute a la creation (appel de reg_sd). + self.g_context[sdnom]=sd + sd.nom=sdnom + + def set_etape_context(self,etape): + """ + Positionne l'etape qui sera utilisee dans NommerSdProd pour + decider si le concept passé pourra etre nommé + """ + self._etape_context=etape + + def reset_context(self): + """ + Cette methode reinitialise le contexte glissant pour pouvoir + tenir compte des modifications de l'utilisateur : création + de commandes, nommage de concepts, etc. + """ + self.current_context={} + self.index_etape_courante=0 + + def del_param(self,param): + """ + Supprime le paramètre param de la liste des paramètres + et du contexte gobal + """ + if param in self.params : self.params.remove(param) + if self.g_context.has_key(param.nom) : del self.g_context[param.nom] + + def del_fonction(self,fonction): + """ + Supprime la fonction fonction de la liste des fonctions + et du contexte gobal + """ + if fonction in self.fonctions : self.fonctions.remove(fonction) + if self.g_context.has_key(fonction.nom) : del self.g_context[fonction.nom] + diff --git a/Ihm/I_JDC_CATA.py b/Ihm/I_JDC_CATA.py index 945ced80..751cacda 100644 --- a/Ihm/I_JDC_CATA.py +++ b/Ihm/I_JDC_CATA.py @@ -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: diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index be318d25..fbe6e461 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ # Modules Python @@ -7,10 +26,18 @@ import traceback,types,string import I_ETAPE from Noyau.N_ASSD import ASSD +# import rajoutés suite à l'ajout de Build_sd --> à résorber +import Noyau +from Noyau import N_Exception +from Noyau.N_Exception import AsException +# fin import à résorber + class MACRO_ETAPE(I_ETAPE.ETAPE): def __init__(self): - I_ETAPE.ETAPE.__init__(self) + # XXX CCAR : ne suis pas certain que typret doive etre + # initialise à None (a verifier) + self.typret=None def get_sdprods(self,nom_sd): """ @@ -61,6 +88,10 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): context_ini = context_ini, appli=self.jdc.appli) j.analyse() + # XXX en passant par un jdc auxiliaire, on risque de rendre les etapes inactives + # on les force dans l'etat actif + for etape in j.etapes: + etape.active() except: traceback.print_exc() return None @@ -146,3 +177,52 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # On met g_context à blanc self.g_context={} + def Build_sd(self,nom): + """ + Construit le concept produit de l'opérateur. Deux cas + peuvent se présenter : + + - le parent n'est pas défini. Dans ce cas, l'étape prend en charge + la création et le nommage du concept. + + - le parent est défini. Dans ce cas, l'étape demande au parent la + création et le nommage du concept. + + """ + if not self.isactif():return + # CCAR : meme modification que dans I_ETAPE + if not self.isvalid(sd='non') : return + else:self.state='undetermined' + self.sdnom=nom + try: + # On positionne la macro self en tant que current_step pour que les + # étapes créées lors de l'appel à sd_prod et à op_init aient la macro + # comme parent + self.set_current_step() + if self.parent: + sd= self.parent.create_sdprod(self,nom) + if type(self.definition.op_init) == types.FunctionType: + apply(self.definition.op_init,(self,self.parent.g_context)) + else: + sd=self.get_sd_prod() + if sd != None and self.reuse == None: + # On ne nomme le concept que dans le cas de non reutilisation + # d un concept + sd.nom=nom + self.reset_current_step() + if self.jdc and self.jdc.par_lot == "NON" : + self.Execute() + return sd + except AsException,e: + self.reset_current_step() + raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], + 'fichier : ',self.appel[1],e) + except EOFError: + #self.reset_current_step() + raise + except : + self.reset_current_step() + l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) + raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], + 'fichier : ',self.appel[1]+'\n', + string.join(l)) diff --git a/Ihm/I_MCBLOC.py b/Ihm/I_MCBLOC.py index 7b8281d8..7b548225 100644 --- a/Ihm/I_MCBLOC.py +++ b/Ihm/I_MCBLOC.py @@ -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): diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py index 24f71cca..d7e828ff 100644 --- a/Ihm/I_MCCOMPO.py +++ b/Ihm/I_MCCOMPO.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ """ import string,types @@ -25,24 +44,6 @@ class MCCOMPO(I_OBJECT.OBJECT): else: return self.nom - def get_genealogie(self): - """ - Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC - ou ETAPE) de self jusqu'au premier objet etape rencontré - """ - l=[] - objet = self - while objet.definition.label != 'JDC' : - if not objet.isMCList() : - l.append(string.strip(objet.nom)) - else : - pass - # Si objet.etape == etape c'est que objet est l'étape origine de la généalogie - if objet.etape == objet: break - objet = objet.parent - l.reverse() - return l - def get_liste_mc_ordonnee(self,liste,dico): """ Retourne la liste ordonnée (suivant le catalogue) des mots-clés @@ -61,8 +62,8 @@ class MCCOMPO(I_OBJECT.OBJECT): """ for arg in liste: objet_cata = dico[arg] - dico=objet_cata.dico - return objet_cata.liste + dico=objet_cata.entites + return objet_cata.ordre_mc def filtre_liste_mc(self,liste_brute): """ @@ -113,6 +114,20 @@ class MCCOMPO(I_OBJECT.OBJECT): liste.remove(k) if self.definition.entites[k].label=='BLOC': liste.remove(k) + # Pour corriger les exces qui pourraient etre commis dans la methode purge_liste + # des regles, on essaie de compenser comme suit : + # on ajoute les mots cles facteurs presents dont l'occurence n'est pas atteinte + for k in liste_mc_presents: + if k in liste:continue + objet = self.get_child(k,restreint = 'oui') + if isinstance(objet,MCFACT): + # un mot-clé facteur ne peut pas être répété plus de self.max fois + if objet.definition.max > 1: + liste.append(k) + elif isinstance(objet,MCList): + nb_occur_maxi = objet[0].definition.max + if len(objet) < nb_occur_maxi: + liste.append(k) return liste def liste_mc_presents(self): @@ -178,6 +193,7 @@ class MCCOMPO(I_OBJECT.OBJECT): """ self.init_modif() if type(name)==types.StringType : + # on est en mode création d'un motcle if self.ispermis(name) == 0 : return 0 objet=self.definition.entites[name](val=None,nom=name,parent=self) if hasattr(objet.definition,'position'): @@ -186,7 +202,9 @@ class MCCOMPO(I_OBJECT.OBJECT): elif objet.definition.position == 'global_jdc' : self.append_mc_global_jdc(objet) else : + # dans ce cas on est en mode copie d'un motcle objet = name + objet.verif_existence_sd() # si un objet de même nom est déjà présent dans la liste # et si l'objet est répétable # il faut créer une MCList et remplacer l'objet de la liste @@ -219,6 +237,8 @@ class MCCOMPO(I_OBJECT.OBJECT): new_obj.init(objet.nom,self) new_obj.append(old_obj) new_obj.append(objet) + # Il ne faut pas oublier de reaffecter le parent d'obj + objet.reparent(self) self.mc_liste.remove(old_obj) self.mc_liste.insert(index,new_obj) self.fin_modif() @@ -227,12 +247,16 @@ class MCCOMPO(I_OBJECT.OBJECT): # une liste d'objets de même type existe déjà #print "une liste d'objets de même type existe déjà" old_obj.append(objet) + # Il ne faut pas oublier de reaffecter le parent d'obj + objet.reparent(self) self.fin_modif() return old_obj if pos == None : self.mc_liste.append(objet) else : self.mc_liste.insert(pos,objet) + # Il ne faut pas oublier de reaffecter le parent d'obj (si copie) + objet.reparent(self) self.fin_modif() return objet @@ -304,11 +328,18 @@ class MCCOMPO(I_OBJECT.OBJECT): def copy(self): """ Retourne une copie de self """ objet = self.makeobjet() + # FR : attention !!! avec makeobjet, objet a le même parent que self + # ce qui n'est pas du tout bon dans le cas d'une copie !!!!!!! + # FR : peut-on passer par là autrement que dans le cas d'une copie ??? + # FR --> je suppose que non + # XXX CCAR : le pb c'est qu'on vérifie ensuite quel parent avait l'objet + # Il me semble preferable de changer le parent a la fin quand la copie est acceptee objet.valeur = copy(self.valeur) objet.val = copy(self.val) objet.mc_liste=[] for obj in self.mc_liste: new_obj = obj.copy() + new_obj.reparent(objet) objet.mc_liste.append(new_obj) return objet @@ -333,9 +364,9 @@ class MCCOMPO(I_OBJECT.OBJECT): for child in self.mc_liste : if child.isvalid() : continue l_child = child.get_liste_mc_inconnus() - if l_child : + for mc in l_child: l = [self] - l.extend(l_child) + l.extend(mc) l_mc.append(l) return l_mc @@ -351,9 +382,9 @@ class MCCOMPO(I_OBJECT.OBJECT): liste_retraits = [] dict = self.cree_dict_valeurs(self.mc_liste) for k,v in self.definition.entites.items(): - #dict = self.cree_dict_valeurs(self.mc_liste) if v.label=='BLOC' : - if v.verif_presence(dict) : + globs= self.jdc and self.jdc.condition_context or {} + if v.verif_presence(dict,globs): # le bloc doit être présent if not self.get_child(k,restreint = 'oui'): # le bloc n'est pas présent et il doit être créé @@ -365,3 +396,20 @@ class MCCOMPO(I_OBJECT.OBJECT): liste_retraits.append(k) return liste_ajouts,liste_retraits + def reparent(self,parent): + """ + Cette methode sert a reinitialiser la parente de l'objet + """ + self.parent=parent + self.jdc=parent.get_jdc_root() + self.etape=parent.etape + for mocle in self.mc_liste: + mocle.reparent(self) + + def verif_existence_sd(self): + """ + Vérifie que les structures de données utilisées dans self existent bien dans le contexte + avant étape, sinon enlève la référence à ces concepts + """ + for motcle in self.mc_liste : + motcle.verif_existence_sd() diff --git a/Ihm/I_MCFACT.py b/Ihm/I_MCFACT.py index 08ab1f16..39670364 100644 --- a/Ihm/I_MCFACT.py +++ b/Ihm/I_MCFACT.py @@ -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): diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py index c08a3834..b9529e33 100644 --- a/Ihm/I_MCLIST.py +++ b/Ihm/I_MCLIST.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== from copy import copy class MCList: @@ -28,9 +47,13 @@ class MCList: return 0 def isoblig(self): - for i in self.data: - if i.isoblig():return 1 - return 0 + """ + Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est + """ + return 0 + #for i in self.data: + # if i.isoblig():return 1 + #return 0 def liste_mc_presents(self): return [] @@ -49,11 +72,17 @@ class MCList: child.delete_concept(sd) def copy(self): + """ + Réalise la copie d'une MCList + """ liste = self.data[0].definition.list_instance() - # XXX Pas de parent ?? - liste.init(self.nom) + # FR -->Il faut spécifier un parent pour la méthode init qui attend 2 arguments ... + liste.init(self.nom,self.parent) for objet in self: new_obj = objet.copy() + # Pour etre coherent avec le constructeur de mots cles facteurs N_FACT.__call__ + # dans lequel le parent de l'element d'une MCList est le parent de la MCList + new_obj.reparent(self.parent) liste.append(new_obj) return liste @@ -68,10 +97,10 @@ class MCList: for mcfact in self.data : if mcfact.isvalid() : continue l_child = mcfact.get_liste_mc_inconnus() - if l_child : - l = [self] - l.extend(l_child) - l_mc.append(l) + for mc in l_child: + l = [self] + l.extend(mc) + l_mc.append(l) return l_mc def verif_condition_regles(self,liste_presents): @@ -93,3 +122,82 @@ class MCList: # Sans objet pour une liste de mots clés facteurs return [],[] + def init_modif(self): + """ + Met l'état de l'objet à modified et propage au parent + qui vaut None s'il n'existe pas + """ + self.state = 'modified' + if self.parent: + self.parent.init_modif() + + def get_etape(self): + """ + Retourne l'étape à laquelle appartient self + Un objet de la catégorie etape doit retourner self pour indiquer que + l'étape a été trouvée + XXX double emploi avec self.etape ??? + """ + if self.parent == None: return None + return self.parent.get_etape() + + def get_genealogie(self): + """ + Retourne la liste des noms des ascendants. + Un objet MCList n'est pas enregistré dans la genealogie. + XXX Meme si le MCFACT fils ne l'est pas lui non plus ???? + """ + if self.parent: + return self.parent.get_genealogie() + else: + return [] + + def get_liste_mc_ordonnee_brute(self,liste,dico): + """ + Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés + d'une entité composée dont le chemin complet est donné sous forme + d'une liste du type :ETAPE + MCFACT ou MCBLOC + ... + """ + for arg in liste: + objet_cata = dico[arg] + dico=objet_cata.entites + return objet_cata.ordre_mc + + def reparent(self,parent): + """ + Cette methode sert a reinitialiser la parente de l'objet + """ + self.parent=parent + self.jdc=parent.jdc + self.etape=parent.etape + for mcfact in self.data: + mcfact.reparent(parent) + + def verif_existence_sd(self): + """ + Vérifie que les structures de données utilisées dans self existent bien dans le contexte + avant étape, sinon enlève la référence à ces concepts + """ + for motcle in self.data : + motcle.verif_existence_sd() + + def get_sd_utilisees(self): + """ + Retourne la liste des concepts qui sont utilisés à l'intérieur de self + ( comme valorisation d'un MCS) + """ + l=[] + for motcle in self.data: + l.extend(motcle.get_sd_utilisees()) + return l + + def get_fr(self): + """ + Retourne la chaine d'aide contenue dans le catalogue + en tenant compte de la langue + """ + try : + return self.data[0].get_fr() + except: + return '' + diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 96fe6ccd..ca1bafa3 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== import types,string import traceback from copy import copy @@ -7,10 +26,21 @@ myrepr.maxstring = 100 myrepr.maxother = 100 from Noyau.N_utils import repr_float + +# Attention : les classes ASSD,.... peuvent etre surchargées +# dans le package Accas. Il faut donc prendre des précautions si +# on utilise les classes du Noyau pour faire des tests (isxxxx, ...) +# Si on veut créer des objets comme des CO avec les classes du noyau +# ils n'auront pas les conportements des autres packages (pb!!!) +# Il vaut mieux les importer d'Accas mais problème d'import circulaire, +# on ne peut pas les importer au début. +# On fait donc un import local quand c'est nécessaire (peut occasionner +# des pbs de prformance). from Noyau.N_ASSD import ASSD,assd from Noyau.N_GEOM import GEOM,geom from Noyau.N_CO import CO -from Noyau.N_EVAL import EVAL +# fin attention + from Extensions import parametre import I_OBJECT @@ -23,13 +53,17 @@ class MCSIMP(I_OBJECT.OBJECT): if self.valeur == None : return None elif type(self.valeur) == types.FloatType : - txt = repr_float(self.valeur) + #txt = repr_float(self.valeur) + # Normalement str fait un travail correct + txt = str(self.valeur) elif type(self.valeur) in (types.ListType,types.TupleType) : txt='(' i=0 for val in self.valeur: if type(val) == types.FloatType : - txt=txt + i*',' + repr_float(val) + # Normalement str fait un travail correct + #txt=txt + i*',' + repr_float(val) + txt=txt + i*',' + str(val) elif type(val) == types.InstanceType and isinstance(val,ASSD): txt = txt + i*',' + val.get_name() else: @@ -43,8 +77,16 @@ class MCSIMP(I_OBJECT.OBJECT): if isinstance(txt,parametre.PARAMETRE): return str(txt) return repr(txt) - # il faut tronquer txt au delà d'un certain nombre de caractères - # et avant tout retour chariot (txt peut être une chaîne de caractères + # txt peut etre une longue chaine sur plusieurs lignes. + # Il est possible de tronquer cette chaine au premier \n et + # de limiter la longueur de la chaine a 30 caracteres. Cependant + # ceci provoque une perte d'information pour l'utilisateur + # Pour le moment on retourne la chaine telle que + return txt + + # Partie de code inaccessible (pour memoire) + # txt est tronquee au dela d'un certain nombre de caractères + # et avant tout retour chariot (txt peut etre une chaine de caractères # sur plusieurs lignes (ex:shell) txt = string.split(txt,'\n')[0] if len(txt) < 30 : @@ -82,7 +124,8 @@ class MCSIMP(I_OBJECT.OBJECT): """ for typ in self.definition.type: if type(typ) == types.ClassType : - if typ is CO : return 1 + if issubclass(typ,CO) : + return 1 return 0 def wait_assd(self): @@ -104,7 +147,7 @@ class MCSIMP(I_OBJECT.OBJECT): """ for typ in self.definition.type: if type(typ) == types.ClassType : - if typ in (GEOM,ASSD,geom,assd) or issubclass(typ,GEOM) : + if typ.__name__ in ("GEOM","ASSD","geom","assd") or issubclass(typ,GEOM) : return 1 return 0 @@ -165,6 +208,8 @@ class MCSIMP(I_OBJECT.OBJECT): # type de nom new_valeur if self.wait_co(): try: + # Pour avoir la classe CO avec tous ses comportements + from Accas import CO self.valeur=CO(new_valeur) except: traceback.print_exc() @@ -204,6 +249,8 @@ class MCSIMP(I_OBJECT.OBJECT): return sd,1 else: d={} + # On veut EVAL avec tous ses comportements. On utilise Accas. Perfs ?? + from Accas import EVAL d['EVAL']=EVAL try : objet = eval(new_valeur,d) @@ -238,9 +285,13 @@ class MCSIMP(I_OBJECT.OBJECT): def copy(self): """ Retourne une copie de self """ objet = self.makeobjet() - #XXX est ce utile ?? - objet.valeur = copy(self.valeur) - objet.val = copy(self.val) + # il faut copier les listes et les tuples mais pas les autres valeurs + # possibles (réel,SD,...) + if type(self.valeur) in (types.ListType,types.TupleType): + objet.valeur = copy(self.valeur) + else: + objet.valeur = self.valeur + objet.val = objet.valeur return objet def makeobjet(self): @@ -257,3 +308,100 @@ class MCSIMP(I_OBJECT.OBJECT): if issubclass(self.valeur.__class__,ASSD) : l.append(self.valeur) return l + + def set_valeur_co(self,nom_co): + """ + Affecte à self l'objet de type CO et de nom nom_co + """ + step=self.etape.parent + if nom_co == None or nom_co == '': + new_objet=None + else: + # Pour le moment on importe en local le CO de Accas. + # Si problème de perfs, il faudra faire autrement + from Accas import CO + # Avant de créer un concept il faut s'assurer du contexte : step + # courant + sd= step.get_sd_autour_etape(nom_co,self.etape,avec='oui') + if sd: + # Si un concept du meme nom existe deja dans la portée de l'étape + # on ne crée pas le concept + return 0,"un concept de meme nom existe deja" + # Il n'existe pas de concept de meme nom. On peut donc le créer + # Il faut néanmoins que la méthode NommerSdProd de step gère les + # contextes en mode editeur + # Normalement la méthode du Noyau doit etre surchargée + # On déclare l'étape du mot clé comme etape courante pour NommerSdprod + cs= CONTEXT.get_current_step() + CONTEXT.unset_current_step() + CONTEXT.set_current_step(step) + step.set_etape_context(self.etape) + new_objet = CO(nom_co) + CONTEXT.unset_current_step() + CONTEXT.set_current_step(cs) + self.valeur = new_objet + self.val = new_objet + self.init_modif() + step.reset_context() + # On force l'enregistrement de new_objet en tant que concept produit + # de la macro en appelant get_type_produit avec force=1 + self.etape.get_type_produit(force=1) + return 1,"Concept créé" + + def reparent(self,parent): + """ + Cette methode sert a reinitialiser la parente de l'objet + """ + self.parent=parent + self.jdc=parent.jdc + self.etape=parent.etape + + def verif_existence_sd(self): + """ + Vérifie que les structures de données utilisées dans self existent bien dans le contexte + avant étape, sinon enlève la référence à ces concepts + """ + l_sd_avant_etape = self.jdc.get_contexte_avant(self.etape).values() + if type(self.valeur) in (types.TupleType,types.ListType) : + l=[] + for sd in self.valeur: + if isinstance(sd,ASSD) : + if sd in l_sd_avant_etape : + l.append(sd) + else: + l.append(sd) + self.valeur=l + self.init_modif() + else: + if isinstance(self.valeur,ASSD) : + if self.valeur not in l_sd_avant_etape : + self.valeur = None + self.init_modif() + + + def get_min_max(self): + """ + Retourne les valeurs min et max admissibles pour la valeur de self + """ + return self.definition.min,self.definition.max + + + def get_type(self): + """ + Retourne le type attendu par le mot-clé simple + """ + return self.definition.type + + + + + + + + + + + + + + diff --git a/Ihm/I_OBJECT.py b/Ihm/I_OBJECT.py index 559ebcd5..23feeefc 100644 --- a/Ihm/I_OBJECT.py +++ b/Ihm/I_OBJECT.py @@ -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 '' + diff --git a/Ihm/I_PRESENT_ABSENT.py b/Ihm/I_PRESENT_ABSENT.py index 5ddd4a80..796d777a 100644 --- a/Ihm/I_PRESENT_ABSENT.py +++ b/Ihm/I_PRESENT_ABSENT.py @@ -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 diff --git a/Ihm/I_PRESENT_PRESENT.py b/Ihm/I_PRESENT_PRESENT.py index e6a841e3..fbd6f681 100644 --- a/Ihm/I_PRESENT_PRESENT.py +++ b/Ihm/I_PRESENT_PRESENT.py @@ -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. +# +# +# ====================================================================== """ """ diff --git a/Ihm/I_PROC_ETAPE.py b/Ihm/I_PROC_ETAPE.py index ddfdabeb..81d6c810 100644 --- a/Ihm/I_PROC_ETAPE.py +++ b/Ihm/I_PROC_ETAPE.py @@ -1,4 +1,32 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== import I_ETAPE + + +# import rajoutés suite à l'ajout de Build_sd --> à résorber +import traceback,types +import Noyau +from Noyau import N_Exception +from Noyau.N_Exception import AsException +# fin import à résorber + class PROC_ETAPE(I_ETAPE.ETAPE): def get_sdname(self): return "" @@ -24,3 +52,30 @@ class PROC_ETAPE(I_ETAPE.ETAPE): for child in self.mc_liste : child.delete_concept(sd) + def Build_sd(self): + """ + Cette methode applique la fonction op_init au contexte du parent + et lance l'exécution en cas de traitement commande par commande + Elle doit retourner le concept produit qui pour une PROC est toujours None + En cas d'erreur, elle leve une exception : AsException ou EOFError + """ + if not self.isactif():return + try: + if self.parent: + if type(self.definition.op_init) == types.FunctionType: + apply(self.definition.op_init,(self,self.parent.g_context)) + else: + pass + if self.jdc.par_lot == "NON" : + self.Execute() + except AsException,e: + raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], + 'fichier : ',self.appel[1],e) + except EOFError: + self.reset_current_step() + raise + except : + l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]) + raise AsException("Etape ",self.nom,'ligne : ',self.appel[0], + 'fichier : ',self.appel[1]+'\n', + string.join(l)) diff --git a/Ihm/I_REGLE.py b/Ihm/I_REGLE.py index 1ff738f3..52a0c47a 100644 --- a/Ihm/I_REGLE.py +++ b/Ihm/I_REGLE.py @@ -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 diff --git a/Ihm/I_UN_PARMI.py b/Ihm/I_UN_PARMI.py index a600514d..bd1ef701 100644 --- a/Ihm/I_UN_PARMI.py +++ b/Ihm/I_UN_PARMI.py @@ -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 diff --git a/Ihm/__init__.py b/Ihm/__init__.py index a2c6164b..f12fbf81 100644 --- a/Ihm/__init__.py +++ b/Ihm/__init__.py @@ -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 index 0000000000000000000000000000000000000000..285a3549f886257670f9fd2c2790cb29b687d7ff GIT binary patch literal 49152 zcmeI5349dg`Nt;-;a(tIq9P0;8Wf@&RYAawfPx}WE-y4Jn@zHk?1tS9hZnZ>Y&|L7 z*y2^K{n*xeUx?PLRZ;)esuU3skZ8T|!UOn!fA74LY%Z>7)i#sQH_yE9%)B!@^Ul1_ zywCeQ^WqCRt8ch-kGGs!(+DTa*|N2j(>yIdgZWH9-NA9%GOxTXTeogib`~((H2sLq zz$7QmU&?Wv(M}ARaOQIrgEj6#N;3a8A8nB(wjmP*#X zOvzPM&t_=hj6Iyp3@z~M9`pYipQAH@CNhU@TQ3ICY>*YAJ7 z&iT&)|Nd{mxoHjla^(j|OSZRCEkF)*gig>C{PlN4>YnZedqZ#72l~LiupbP7^l}=y z{|B<(AQ%ikfrH@?I26Xfj@!t6@pC3#9(QpimgJWSlOb36RoslQA-6|d~VVmqH`GpXHuxAu9cY&UORh@+H%s)!sl{L zyRP~B|20f)dls{qAUT46lBZKaB8& z)boBd=sBw8y0)r|dJe12Dg@~krJ(bh0^RFpfa>Zw&=xKN9phRyQd^|FF{6(iJ9*-m z(UV3`_Kx*I@0e8&b?j;fRhA}Swxv*&qcYUCjEaXV$|A9p(VN^NlGpu3GuIBUn)$&D?Uy!O37a;Y_ zTZGi}aS2lO?KY(9)1Q%g?%j_}uTPDw3#v~PX%0^F`Yp%iQ!!Dds+N&gJ)dpnb?oEg ziLy{>USXWdUt?QmO19EE&LPe~3XmEBCQ7Xys@lgU*pQeUz0)TX~F?)2uws z$~jh^X65NtF0k@vRxUO&=-g=2H(7bJmA|v{Rx9tY@-8dyw(?~wU$yczD_2^%%F6ex z{KCpjMh2ZNHr-E;U(VlAMh2aq+H{eXQ7cci%P+O*%dEWI%4_ZNJFPresx;-EZ{-C> z2Aykc`T;8+vH8#1bnb!PcE=hSbpB-1U3+=?ciMD!o4(7Ydzf_4iP&_JmBmH|of0eW zwfTRy@*|t?sHx|84>L081Z{epl~b*ZTX}|+=NcJwereNxvhop||A9?^Xys>Cc9UA+ z1f3p6<~u#Dbgk@THvM;-_RrrbHh+~puUGKtBJa@Z5H`pEafS#})41}Yh z2rht&;9|HEu7XEk89WYug(u((Xvs6YBXokjU^E;F)8IG=!)!PgZi3&zZSW}k9iD^d z;U)MKTGJMEhAuE3E{7}Nes~Gm(KfV)t}qf#ffD#5+z+q7Yp@BnKuey(z2N|u0#jic zoD2nU0W5~6VFUad-iHt1OW3z9=Lh;iIh+Pp!!>X%+yd`I^8ovTZg3C`fPpXpilG$d z!PW3Otbnz!9$L2JH$yHAgh4PErb7YDfM3BC@EceHkHMR;8s366@HMDSRK?m0dO%P3 z2^<24!EhK2)1VMy5QlP@4QIm7;TLcooDUbnBDezXgnQvWxE~&Zhv8{>2Ht`9;NS2O zY=i*qb0_EwU0^rp20dUO=mVo*42*?iVFH{2B@l%;To3od;>PEg%nu!8NcH{t2(aDp(C`U>&sW#4$rVXb;0+BFuqvVHrFLFTo1<6f!!q zA7~GQ;Rr}V3QmLT;U>5lZh_n3d3YIKf!ARDWhfd`qGge!J3cbkofIz%#hkWXFQZRw z^8B)y@lvPFzFH+e5e=0(9joWv@u5T_K9_g5W=?s_i%=DxK(+Wit8zisOgnGl+G*z< z3ay-xzs_W@Eo3`L!qiJov|_H<)JpwXAc*wYT)Q@TK;k z=|Ov>e#yS{*Ynn@{_o}Mu2Y{5KgGN|(dL_XCfZr^u0;E1meVeocOu#j^Dd-qnx-HB z8K|x|e*N*K>PLbnK<#=|JFPnYPCQ}CmhPPmDb;X63(x#{11v_$OXd0XjdhmQp)6VYyTiR_^F+b-0 zt9q_>3!@3TDOI~BOm-tFGaI4?Rwg5{u$CmR@D#&jyrLw;eG>@;x;QugJnxpL@_%<> z_N^CY-*#d4?=Q^0oz^-xToNgx=e2hKYa|uU%ggKAukNiq7+H&2koVU`2 zHEt+3w>+d>aKDF=<`&bL)Gy@Zx$z365|!nVL@Le+Pxf;Q6Y*%uZV^pYkjJU?j!5UU zG~$LSurgdy$t~T_Wy`WiD&<|PGGnBVcn^}w(n{UYNjFp!jaC0hmfDl<9gWx7+)s_T zKhf~3H$b}HdiWSxpaisp!(j@X2iL#@@F4sXK7-Gph@1H|cobH`8?XvKg)blz#i2V) zhudK}tb|NnV0*v-D1u@*3(kWp;7V8w*TW;Q6kddv;T8A{wcp9FEO|LK&O}r^9vdI6Mo>;RSdRUV%4Y z1Ejwc59WnbFT@AK@h}}uh9W2iz3g5Fo1L#WZ+14@Nr~!|$uwF1@*S67f8kHfPtJ0} zdJn6}aI%lX1ZQmyt-9W zyy0b9VV6DRWR&;b=seVHYkBY2Gi>TQWv+L&EwXB_@?NbC=6gl^)x28vqC-6^&?aYP zR;P7a+78~DAw5^EQHHapZIte-Uc3G|ES=d|IsKho++0>qa|~lLcKsM!dJNj+G^PZ8 zEqy@k`TZH#H>rS3d+-YL@zzXabI+7O`>uDBkX{k%Og)_Z;Kr>t@aB^gk8hnQN$B zHb*erosy@S+`fU4rJ-ap;s$Io8jGgT1ENW;E+sN!lmi+`6p4yN(yUidjx9A(U@A^- z-&UG>yAx({ra9v*>F-sk@l(_QPaQw@cyBAK&lHr;=VZj#_Z;Tj;chaOh?W+QY(-2^?v96DE)S|nYJ23_^quW9yR()Yt=QOtePG3Id%yuy<@ zG`2S9$ZP+TOK)%dnyxs)cQ)etK!;TX(?ioQpO~ukV#4@lazv_ z@-DM!DQenY%9@r-VUv{7rhF-GN=tc@lmaLDqLotQl$J85^`+2BN~u%66gx>Ncal=@ zB&FnOJt=yUQudTDg-=pSpQIE&Etm4Av=l%|DS?tw1SO>mYCW~Dl2QWoJEaIpN*R=t zLa6I5rBG=phLTbaC8Z!rF0}I3Mh1*@b z8l?6=&d7Y{M4OJ;^hH))YUSlt-e%=pMh2Y^Z2ChhKe72;d1C1J`dN9fm4_HfJ+bM# zth~?WudveeA+h~%^(7%k7#Va%TbZ!=7u)nzHvNW`?^xN4K@{4)g^@vLKb!7va+Q^DTDjWF_pBVG5x0~(&dTvto?>LsnPcT#E9cqeS6F$6m4C5vsgXgi zmz(3uS8q4vA7SM zEBhK5bi#eS{6Z@uRu);gz{+!s3_43}`UWeThQN5|uW1O3&O_4>nD1i^vracHfcz6vH_`a%WcKY5-;MMluRK50J z-%rLrP)RBJ+nrFKW&hRSYuSHg2iCMLDNW&XX)3IrJA!^Fy*i9Go7F32|J|46gY9-& zbL&jc{(GX`Zdc`-SidqU?=5RbPM1T--{WY{?tAsIp6rSpSS{4ZuxJ0h4k`QZVDg`3 zKuGP$KM(%#Roj349ADPn($Dv$_Mqu*d!&BJzVz4g)~f#R=lk2$mRf!yH%aYsYNvIk z(x(~s<}B0*@l38Dy06m#Dc#H8t|93kk6)gS=K!|zk1Ks2-`@QHy8TbxMospgCi~9| z-04mBpCr0?@ zfE|Ew3K$nKi5X*tH-Lg3c$qSiu34*}CkjFZ;Y1{o=;tjgNJPp_hK2+%b_lCKM^w9< zc)7+`V8yCs`%1IJrTwyc)Fyd|{1dw8VV?$hg2?Nm?Sbg;AkPGO4_pO*hBswaT~SLc z^)j#b#F_OAv-25Rw%oC+)N?#Lo5edoO(X2E&0Y~Zat{aEbb2gv7dLlYV}Jd7W~V21 zwFs|-OR^hV!i1K)TtXW;Csq$hVHjCOA{+_0)ptXU#oVZ=Xv~hf(G471$e15lfAH&nnrfwcF@Q%8;*Jz3>?yH8YBBpG4kKY&J$95Z_4 z&aZEFR~DaxK{8qzsUF_sS>p=4VNLy9Z=V4@`BI4rGe}DFX_vy>)1?bT2`qx8SMS>?_v~PgHKw8s`t}-TBGd4)J!E_(g28K-a8(GJ2UK+{ujMZE#T~=#h zto`iitFv2=jkt2jP%h})XkjrAw9!1!<{ufwn(7Y{!@^rOvoM6kH0mnZ?|Le^>|IP3f9hH}pzRrL4 zm}Op-_uic#FTHy~UU%}i+Y0iylee8b?Z$yT?BXELI(gN}qwY^2Pda(geF*A0l;@nh z=HxLaZ#j9&$xBWia`K9k2b{Y4Opwi;ao4@cHjsN!l8u#Uo0W;&j2CGfi_3p|w)AhX# zbPaXgCV;NXZLkt-+izR@Z3(;PZ@l}irugqU$5@`e1r4I{?f=qU*FjqE%=oWUos1b7 z^opM9w3rgrDAWPm(~KQ!nGwjyc_OpZu+3dQa=H#fA>%Q}FoKM;!T5#gnxj;1b86#E z{n^QxPPn@>3#G2a$u#>a@%KfY9K*iZS7y!y*^S&+YxXtG?5!J7BeKk%3jIA%)5kD$ zg*|2EjBDA*JvDdqo4U~#-puT!$lnX+XpDouPe!0wPKP#)+)GP)?z%CcGu!NEroW$` zD4tQa6Uff_N1%~=@qSBJ_R+lNJ`UDCnmd8!IahaRUX+H~NUzp*vF#AAyb?p%C zqlFV_ku$whBlnS|Yr?N+S@TyMsy(!H0xfggu8rJ-euef?f*JT*YQW;&m``JDGS$(Vg~ffDY9xy@3fg-H;%!ydh`Pt_mmoE zuWEzdI8fl(=pCGTL2-1D{lRYI7VhV{>{V?*uUXC05-qZ)rmE9Xdm296H655k>%C51 zW>uN~IyH};@O6=JofEi?W8@V2CHb;}YE=Jv+qO8l{X{vgZ-b#5%V3CJ}-!~QkYU&Hn_RR1o}(0UD*KeV0a2YD@0!{P4+4ToQ) z?wyUb#3Nqj5{dQBg8EXYc$qbY-JqsO*EQ?TyT$@@ee=fp(3Q2?^%CmXpLW=X&^!9# zM(n$n^&)J<8EB{LDA$En?Y#g_=*PbB{%aOd-JQH)>M@m?}de-C8Y*ot=U&B<52`iE0IcFYc zxUom_5|LsV4ije6T;=!GD1szjZ{8xcxfSJ!4b~9mxhQ%z{|3xGqbkd2oPBfGLYa}+ zJneVor5WfwqdgYfFqFoLISDUODHy+iQT7kN8+$L+^BNOLSTC73}5RRa&a?YHq8WLunxXC_)) zfRSE*hI?UcGr1MXrAY2X3b-aWBDoOBedv9V+mKv_{AYpOf-ZtfL9Re@1Ck5S zJ@6dJJ#Hn)tw=6GdTz)SNNzxSe#retu0L}7(Q`!ZK63TZ^F+f%<>n(7AG!C)wMT9} za_Nyfk6d}=#v>OVx$nqzM{YZE*^#@BTy^B8BNrXH=g2ijZaH$vkvooDapZ>69pr{1 z7aY0Y$kj$}Hgd6%dyQOc8oATRl}2tfa-os?j9h2rHY1lAxy#5^Ms6~zK!bth zA|v-0xyHyXMlLaOhmk9c++gGaBlj1%zR2z68*lo`N+Z77v}sd~bb6xZ{8!(wZu;aE zkiHUzN4);itUxn4(gvoc-rkx$WeuDrvVW+(y*gsWYHMaJqgf_SPo~q%-Ac>@hyPwj z;1D!FFQOZ{j_{^o2o2g-#D=rU{s`V=lWAFuY=@`dX?Ppf!jn8to`QEED;sSR4uBBM z1v%=z341rETquKEVFk1z+*oVq4FlkCmBm-ePJS?BFt&dccJ2Ilzxri!J2&0U-~Zk0J&QA(#axl?(HUF! z_SX3!F8{F{HwJ#=QZKzrW1uu{C<_PuPQ=C5GWCn--B|i)Y!CF?Uaa5W8w0DcFpAXK z3je0gI1_d=Up7KVv5m}-D<@z z0kz_f!+Y>Cs724F6?dTz42O|03KW=IE&Tr9bD)I1K zoD2#FaxPo~(iComXF&nH-+~QL317mVXbib9K$-&#fw3?P=D-3t56*`rpn%>lgS3rx z(2_dT30{U3uogaqbI>q;3DP*OglplCunOLWjj##6fmYPPQ=k|Yz@@Mdeg}DIB*S19 zoDGk_^UxJdq!-)(e}>*@BL~5JI3HT0iR=a^!KrWoTmk;O-JNJAOQAP)e;`bN>F_MP z27}Q~4u?``LEUd+Tj!wJcXWOZa7=9L-lK<3kI?TMN>0a@k=|(g)fv1Z%y(w^6i9e$ z@c2j~KF=LB(j7Dy*Nc=heY(k+UKl2W^r(@O2j&kRIMAuRV(m0fqMB2)=FJv4?`HP= z!fBqt6Y<(MgIX5y7SX~vJ`?4W|5^Os{=}{CETe8d!~40vzN9~&UP9;VPWWurh~|CV zpADpy^w!XS&1X0+Pw&TTY*v`Qaji1-RwVQVochQx`Lzo8FG^Mo^!Iv)ToY#P2xITF zCNF|=%4-HU8q@KFPmN!-syoE&#u}-;t!=g3_t3#*N0F{dO<+nHLGY5PI+%unfz}vB zU;pvhRU-2u;q8~_Sqbf^{QAqYtL#{LQR3Hav$V7o^5#ZUC54I5+?t2UxOU>DhALd^ zm{c{Gelk6V$&$&k1;x@%VsbvcsAW2P)g7+Z>jJA{)Qi8W^XnGsgd2y8U7T%Ng2zs7Syuw;pt$kz;=;uM)l;OLl42F5 zff@rj%qWvukAl1^8+;ubKR0c)O~;NT@CR_X+Zw^)x>bex0|-n(RRec)$)b^lMkd&8 ze4`W1dQrU2fDijy8XQ_MJ?4%rH4mNifi@b8U>Y40$+e8pHVmEUUE?6PHQdAd75+FH ze@!0w1iXyU*7*hXcJmp{gF+jkRp6nGqb%2hJu{PX<)28vZL;j(%h?tCt@hg0!UQgL zJ300C-Obbl$x)JeYNC@T2?icbG~8a|_+0z?s=De?Zbtv8ylT~_W(y*(X|pjVL%t%Q z-=8RuXJu|*TY?wnv&x-Xx2Be>(6pN^T1Z_`GpPuqX^&X-e<;+N!mKI8TJxT~w}Qf| z9R*`xTp!1TS5s&;g;i5XHHA}CC^dyqy8#qFOkE4NdY*i!_0>Fm@l9WG(-+(H)jRoA7lXcZm+o7wKBy{7T@4GM zpIdLHzi`LoSKftBxBsav_wAVH(eN8v8xjH_n_I|x%#ByKU;&psmac+&2&HRO@Cwzy((UbxFuts@vdE4)@ zGr0N?Yr3NEur9L~U0_+ew(V}ZM)$xsFn(|DC-^Pg3s1p&FrYX6KyW@Rf_LBxDBXwa z4`0JE+|PPW=oz8sf$nqNuet}f!X)ky-7{Of3;O+vRbExI;t?-p#bPg2uP}AR`{x?% zukpTnxXtZym1%5^qt@@~H7=$ZBH9F_V@((h+q4*GeZq$8rKrlSzq(OL@}^|AK@F*j z>|utTO4H-jqg_u;Zi!V7rANt3B~ zc$QIwP5cF&$FzVV={iEa*Hu>)&A#fQ+7r)3tPvIg?W%f-RU`Fo+|YY~-!+16R#kKZ z1u86qALYOP$PBDeQ>$`AeyNq-VRG@j5$yH6!PvJK?`^|77!zYcy%*jfS#6}sKtBYh zTwkK`dPvO6zdf`X)g$7fd1}JzEKUw%a8KTQq2A1{c^T6 zQ7yd4H{3;prDvp?A6|nCQ5`YA>K%w{SY6wb8G0r+#ecz=XLNuJXNSYbI9?0T6#u0u z{)-7%WuIf-Bk8{&{tGvR8Fl3S--WS9bmXONTV2|6lkfdsVdfk9pT17|eBJfa%iQ*w zb+`SlbJCBk>YV&w#vc996`!&UXY4~hyZ%Jc&4BT(& z9kMa;U$*xfS)R#Ty~BW4J7p>ZZArF$S=^gBdl=nG)^pw{&9e0WTC?utBjl|&aKJ(CJa^!bL)@}5*PV#p2p^F2zF#$Spb1se|ekQBO|2rTXiQs52VFUs5HTMqgB&ivQA?rn^rUw%+?>8~60La`$DO zongk~X-r-Vo=#p$hohW~c6_vSY6ku^d>fIdRZd2Z!;q(1dBI)on)N^Kn9+g3e^WE2 z`Fp}ZpV7(T(OW0ieA_bvza4LeP)2QXjBPlB_)l%@nX0hehW+BUbr9R&9e&R(X$%ff(@_*wnFRX*n^-y91O!iUOyw?a2Nx} zLn&xnvb=!)1uLNv-i6la1o8$N3d3OpXbkcw7zf8e95fdB4!9Hk0uO<_hStD3&{*UR zpz+Av>FMbYhk!haj(}5P7MuhZnBt+}k3;syAj@0nZji@PGZdCyun(ZZ7!Rf?$T-XejWd=<(~aQKGoZ22%i$&XKaij6o3I+b z0iLu@CdkXHIkbR|&{yrvW#D_6jbg0qRFJosKdyT%^R0L=_JZEf7Y=~_a1a~^ z@<=-YP6XdG?J?$Ggf@)%?f~*q>jQ^_#)MA=`Ts9~i$P<<<-ztOYyjWC_ao*%gKmr| z>j5rk4EX@iIP%eO3j7M>^>#7b2KT~4@OM}P@`h{1*zzEp2*r@@6_?NH;%Yf{KQgL_ zv25pbif}90-^$N<5-9C|gw%VD@jphIZzADpd3)}D{oY;wIO)#B ze`|{Wx${v?o8o_FoUMCxXMCxf;(zL{&eOkbOuG{QQ^o1)ZOu%4?S?$U-{+~~ed7&f zmuu%w(u;kM@C9T`AC{i$>$W%XRK6LO!DAqu^d@)$R>3-Gj&3*%Ccz@mXPY-eH}pN} zgz`1M~rIeQ5h}_#Dzdu_!36aVorr}m;>tJc?_O~H$bgvSLg}7KrQP8Q0qDkPJjqJ0?XhrcoO~wFN0d# z$#60hfLh;Q!Xmg5K87z~6MO^Nw7PAe9drb>%6TvYil7+EAq8iGTI)q{4?GS}z{~I| ztb+Y$wFiP)@hGSjzaE}~=RmzKtKnb8C(muz!0>G!$F#cA}>yWFx(1vz@4xZI-zlNhruukj)Ifm zZTJ{m>g`V;0qPNX7ER=zpk9LrC_c?P$U_4e29LsX&;jkECk%(9Ap`BBJrqF_UW0d_ z8CpmVoDF(wuY^yb7rNy3eayDy9o@8S=g(i0=XaCmxBpJ|ol07uCd>c#V|#3hyP$Xs z|I<^`-KWd{y;=VEML!cQoVJ;5Gc~74^2cQPZ!+^c{&)eI`P-rtYx2$f>iBpbUV{%n zU7GuH;~fU$K_>nf{0wdYnfRB&8=$UFh3-0p7sn~!cZ15LABWRm5vWV_FK{BG^ejYvppg`~{m<imkLFxkxHHwxl9tODamX)>EWxr4{W( zQW3Ky6*XJS6**f{kzkas2-=d0qOE*I(w0<&7)eFb)^bIPX@OK!?H1&hB3mI9Jx0qF zXorWJi#X+_|cR1|JWMdFrJG;T>n{et+YJrB^CW!QW3x<)%Pf=hzwd^Q5lq0WClq^XOL8c21!L}(0buM fURvJQ%2$*INkwXqRI~=kbBqj{s0~Wr(C7aF7gA*! literal 0 HcmV?d00001 diff --git a/Installation/README b/Installation/README new file mode 100755 index 00000000..4a575ba9 --- /dev/null +++ b/Installation/README @@ -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 index 00000000..081d9428 --- /dev/null +++ b/Installation/README_install @@ -0,0 +1,40 @@ + + + ================================================= + Procédure d'installation d'EFICAS + ================================================= + +Pour lancer la procédure d'installation, tapez : + + python install.py + +Vous pouvez remplacer 'python' par le chemin d'accès de votre interpréteur Python. + +La procédure d'installation commence par vérifier que votre système contient bien les +pré-requis pour EFICAS (cf README) + +La procédure va vous demander un certain nombre de chemins d'accès nécessaires à l'établissement du +fichier de configuration d'EFICAS qui s'appelle editeur.ini et qui se trouvera, une fois EFICAS, +installé, dans le répertoire Eficas/Aster + +- Répertoire d'installation : répertoire dans lequel vous voulez installer Eficas +- Répertoire de travail : répertoire de travail temporaire d'EFICAS +- Répertoire matériaux : répertoire dans lequel se trouvent les catalogues matériaux d'ASTER +- Répertoire doc Aster : répertoire dans lequel se trouve le manuel U4 de la doc Aster (format pdf) + ex : /logiciels/aster/NEW6/doc/pdf/u4 +- Exécutable Acrobat Reader : chemin d'accès complet à l'exécutable Acrobat Reader + + +Catalogues Aster : EFICAS installe par défaut le catalogue Aster v6 qui se trouve en + Eficas/Aster/Cata. + Si vous voulez en installer d'autres, il faut qu'ils se trouvent dans ce même répertoire + ou qu'il y ait un lien dans ce répertoire vers le fichier. + Pour ajouter d'autres catalogues, il faut aller modifier directement le fichier editeur.ini + + + +Lancement d'EFICAS : le fichier à lancer est Eficas/Aster/eficas_aster.py + il faut le lancer précédé du chemin d'accès à l'interpréteur Python comme + pour la procédure d'installation. + + diff --git a/Installation/install.py b/Installation/install.py new file mode 100755 index 00000000..dbe14e34 --- /dev/null +++ b/Installation/install.py @@ -0,0 +1,949 @@ +SUCCES,ECHEC = 1,0 +OUI,NON = 1,0 + +## constantes pour les tests de versions + +python_min = 20 +tcl_min = 83 +tk_min = 83 +pmw_min = 85 +test = 0 + +try: + import sys,string,re,types,traceback + import os,commands +except Exception,e: + print "Mauvaise installation de Python" + print str(e) + +REPERTOIRE = os.path.abspath(os.curdir) + +def strip_points(chaine): + """ + Enlève les caractères autres que les chiffres des chaînes + """ + x="" + for i in range(len(chaine)): + try: + dummy = float(chaine[i]) + x=x+chaine[i] + except: + pass + return x + +class Test_Environnement : + def __init__(self): + self.l_errors = [] + + def test_plate_forme(self): + """ + Teste que la plate-forme est bien supportée + """ + if os.name not in ('nt','posix'): + self.l_errors.append("La plate-forme %s n'est pas supportée" %os.name) + + def test_version_python(self): + """ + Test de la version de python + """ + version = sys.version + n = string.index(version,"(") - 1 + vpyt = strip_points(version[0:n])[0:2] ## recupere les 2 premiers caracteres + if int(vpyt) self.max: + value = self.max + if value < self.min: + value = self.min + # Preserve the new value + c=self.canvas + # Adjust the rectangle + if self.orientation == "horizontal": + c.coords(self.scale,0, 0,float(value) / self.max * self.width, self.height) + else: + c.coords(self.scale,0, self.height - (float(value) / self.max*self.height),self.width, self.height) + # Now update the colors + c.itemconfig(self.scale, fill=self.fillColor) + c.itemconfig(self.label, fill=self.labelColor) + # And update the label + if self.autoLabel=="true": + c.itemconfig(self.label, text=self.labelFormat % value) + else: + c.itemconfig(self.label, text=self.labelFormat % self.labelText) + c.update_idletasks() +try : + import Tkinter + import Pmw + from tkMessageBox import showinfo,askyesno,showerror,askretrycancel +except: + pass + +class SplashScreen(Tkinter.Toplevel): + """ Provides a splash screen. Usage: + Subclass and override 'CreateWidgets()' + In constructor of main window/application call + - S = SplashScreen(main=self) (if caller is Toplevel) + - S = SplashScreen(main=self.master) (if caller is Frame) + - S.quit() after you are done creating your widgets etc. + """ + def __init__(self, master,**args): + Tkinter.Toplevel.__init__(self, master, relief='groove',borderwidth=5) + self.protocol("WM_DELETE_WINDOW",lambda x=0: x+x ) # pour ne pas détruire la fenêtre en pleine copie de fichiers + self.main = master + if self.main != None : + self.main.withdraw() + self.frame = Tkinter.Frame(self) + self.frame.pack(expand=1,fill='both') + self.init(args) + self.geometry("300x200") + self.resizable(0,0) + self.CreateWidgets() + + def init(self,args={}): + self.text = Tkinter.StringVar() + self.text.set('') + self.icone = 'Editeur/icons/logo_edf.gif' + self.barre = 'non' + if args == {} : return + if args.has_key('text'): + self.text.set(args['text']) + if args.has_key('titre'): + self.title(args['titre']) + if args.has_key('code'): + self.code = args['code'] + else: + self.code = 'inconnu' + if self.code == 'ASTER' : + self.icone = 'Editeur/icons/code_aster.gif' + + def CreateWidgets(self): + fic_image = os.path.join("./", self.icone) + if os.path.exists(fic_image): + self.catIcon = Tkinter.PhotoImage(file=os.path.join("./", self.icone)) + Tkinter.Label(self.frame, image=self.catIcon).pack(side=Tkinter.TOP) + else: + Tkinter.Label(self.frame, text = "EFICAS pour Code_Aster").pack(side=Tkinter.TOP) + self.label = Tkinter.Label(self.frame, textvariable=self.text) + self.label.pack(side=Tkinter.TOP,expand=1,fill='both') + self.progress = Slider(self.frame,value=0,max=100,orientation='horizontal', + fillColor='blue',width=200,height=30, + background='white',labelColor='red') + + def update_barre(self,event=None): + """ Permet de faire avancer la barre de progression """ + try: + self.progress.value = self.progress.value+self.increment + self.progress.update() + #self.after(100,self.update_barre) + except: + pass + + def configure_barre(self): + """ Calcule l'incrément de progression de la barre en fonction + du nombre d'opérations à effectuer afin que le compteur + soit à 100% à la fin des opérations""" + self.increment = 100./self.ratio + self.progress.update() + + def configure(self,**args): + if args.has_key('text'): + self.text.set(args['text']) + if args.has_key('titre'): + self.title(args['titre']) + if args.has_key('barre'): + old = self.barre + self.barre = args['barre'] + if self.barre == 'oui' and old == 'non': + self.progress.frame.pack(in_=self.frame,side='top') + elif self.barre == 'non' and old == 'oui': + self.progress.frame.pack_forget() + if args.has_key('ratio'): + self.ratio = args['ratio'] + self.configure_barre() + self.update() + + def quit(self): + self.progress = None + self.withdraw() + self.main.update() + self.main.deiconify() + +def centerwindow(window,parent = 'avec'): + if parent =='avec': + parent = window.winfo_parent() + if type(parent) == types.StringType: + try: + parent = window._nametowidget(parent) + except: + parent = window + # Find size of window. + window.update_idletasks() + width = window.winfo_width() + height = window.winfo_height() + if width == 1 and height == 1: + # If the window has not yet been displayed, its size is + # reported as 1x1, so use requested size. + width = window.winfo_reqwidth() + height = window.winfo_reqheight() + # Place in centre of screen: + if parent =='avec' : + x = (window.winfo_screenwidth() - width) / 2 - parent.winfo_vrootx() + y = (window.winfo_screenheight() - height) / 3 - parent.winfo_vrooty() + else: + x = (window.winfo_screenwidth() - width) / 2 + y = (window.winfo_screenheight() - height) / 3 + if x < 0: + x = 0 + if y < 0: + y = 0 + window.geometry('+%d+%d' % (x, y)) + +class config_item: + """ + Classe utilisée pour représenter chaque option de configuration + """ + def __init__(self, pere, nom): + self.nom = nom + self.pere = pere + self.entree_value = None + self.default = None + self.test = None + self.pere.register_item(self) + + def get_valeur(self): + return os.path.abspath(self.entree.get()) + + def set_entree(self,entree): + self.entree = entree + self.pere.register_entree(entree) + +class Config(Tkinter.Toplevel): + """ + Classe principale : une instance de Config est utilisée pour + créer l'interface. Toutes les actions (création de répertoire, copie + de fichiers ...) sont réalisées par des méthodes de Config ou de ses + composants + """ + pat_rep = re.compile(r'^(rep_)([\w_]*)') # expression réguliere pour reconnaitre les + # les options qui désignent des répertoires + def __init__(self, parent): + self.master = parent + Tkinter.Toplevel.__init__(self,None) + parent.withdraw() + self.title("Installation d'EFICAS") + self.geometry("500x320+0+0") + centerwindow(self) + self.install_running = 0 + #évite que la fenêtre puisse être détruite en pleine copie de fichiers + self.protocol("WM_DELETE_WINDOW",self.exit ) + # création des frames + self.frame_gen = Tkinter.Frame(self,bd=1,relief='groove') + self.frame_gen.place(relx=0,rely=0,relwidth=1,relheight=0.9 ) + self.frame_but = Tkinter.Frame(self,bd=1,relief='groove') + self.frame_but.place(relx=0,rely=0.9 ,relheight=0.1 ,relwidth=1) + # création des items de configuration + self.make_items_config() + # remplissage de la frame générale + self.make_frame_gen() + # remplissage de la frame boutons + self.make_frame_but() + # création boîtes de dialogue + self.init_complementaire() + # init système + self.init_systeme() + + def make_items_config(self): + """ + Création des objets Config_item + """ + self.items = [] + self.items_a_creer = [] + self.liste_rep_crees = [] + self.entrees = [] + # designation, texte d'invite , option par defaut(unix), option par defaut(windows), flag obligatoire/facultatif + self.l_tx_items = (('rep_install' , + "Répertoire d'installation :", + '', + '', + 'o'), + ('rep_travail' , + 'Répertoire de travail :', + 'tmp', + 'tmp', + 'f'), + ('rep_mat' , + 'Répertoire matériaux :', + None, + None, + 'f'), + ('rep_docaster' , + "Chemin d'accès à la doc Aster :" , + None, + None, + 'f' + ), + ('acrobat' , + 'Exécutable Acrobat Reader :', + '/usr/bin/acroread', + 'acrobat.exe', + 'o') + ) + + for item in self.l_tx_items: + nom_item = item[0] + setattr(self,nom_item,config_item(self,nom_item)) + + def make_frame_gen(self): + """ + Création des zones de saisie des paramètres généraux + """ + # Création du label titre de la frame + self.information = Tkinter.Label(self.frame_gen,text="CONFIGURATION D'EFICAS") + self.information.pack(side="top",pady=10) + # création des widgets de saisie des items + for txt in self.l_tx_items: + nom_item = txt[0] + txt_item = txt[1] + if os.name == 'nt': + default_value = txt[3] + else: + default_value = txt[2] + item = getattr(self,nom_item) + wdg_item = Pmw.EntryField(self.frame_gen, + labelpos = 'w', + label_text = txt_item, + command = lambda s=self,i=item : s.select_next_entry(i.entree)) + item.default_value = default_value + item.statut = txt[4] + item.set_entree(wdg_item) + # on affiche les entrées + for entree in self.entrees: + entree.pack(fill='x', expand=1, padx=10, pady=5) + Pmw.alignlabels(self.entrees) + self.entrees[0].focus_set() + #self.rep_cata_dev.entree.configure(entry_state = 'disabled') + self.display_defaults() + + def make_frame_but(self): + """ + Création des boutons de commande Installer et Annuler + """ + self.validButton = Tkinter.Button(self.frame_but, text = 'Installer', command = self.run_install) + self.exitButton = Tkinter.Button(self.frame_but, + text = 'Annuler', + command = lambda s=self : s.exit(annule='oui')) + self.exitButton.place(relx=0.35,rely=0.5,anchor='center') + self.validButton.place(relx=0.65,rely=0.5,anchor='center') + + def init_complementaire(self): + """ + Création de widgets complémentaires (boîtes de dialogue ...) + """ + self.erreur_dialog = Pmw.Dialog(self, + buttons = ('Modifier', 'Annuler'), + defaultbutton = 'Modifier', + title = 'Erreur', + command = self.erreur_exec) + self.erreur_dialog.withdraw() + self.fatale_dialog = Pmw.Dialog(self, + buttons = ('Annuler',), + title = 'Fatal', + command = self.fatale_exec) + self.fatale_dialog.withdraw() + self.info_dialog = Pmw.Dialog(self, + buttons = ('Ok',), + title = 'Attention') + self.info_dialog.configure(command=self.info_dialog.withdraw()) + self.info_dialog.withdraw() + self.attente = SplashScreen(None,code="ASTER") + self.attente.withdraw() + + def init_systeme(self): + """ + Détermine les commandes à exécuter en fonction de l'OS + """ + self.d_commandes = {} + if os.name == 'nt': + self.d_commandes['decompress'] = "unzip.exe " + self.d_commandes['copy'] = "copy " + self.d_commandes['delete'] = "del " + elif os.name == 'posix': + self.d_commandes['decompress'] = "gunzip " + self.d_commandes['copy'] = "cp " + self.d_commandes['delete'] = "rm " + + def run_install(self): + """ + Lance l'installation proprement dite d'EFICAS + """ + self.install_running = 1 + self.afficher_splash() + self.deactivate_entries() # Les entrees et les boutons sont desactivees + self.deactivate_buttons() # pendant les operations d'installation + #self.decompress_archive() + #if not os.path.exists(os.path.join(REPERTOIRE,'Eficas')): + # self.afficher_fatale("Il manque des fichiers d'EFICAS") + # self.install_running = 0 + # return + self.nb_fichiers = self.compte_fichiers(REPERTOIRE) + if self.nb_fichiers == 0: + self.afficher_fatale("Il manque des fichiers d'EFICAS") + self.install_running = 0 + return + # essaie de creer les repertoires. + try: + if self.make_dirs() == ECHEC : + self.activate_entries() + self.activate_buttons() + self.install_running = 0 + return + except: + self.install_running = 0 + self.afficher_fatale("Impossible de créer certains répertoires") + + # affiche la fenêtre avec la barre de progression + self.afficher_copie_fichiers() + # essaie de copier les fichiers d'EFICAS + try: + if self.move_files() == ECHEC: + self.afficher_echec("Impossible de copier les fichiers d'EFICAS") + self.activate_buttons() + self.install_running = 0 + return + except : + traceback.print_exc() + self.install_running = 0 + self.afficher_fatale("Impossible de copier certains fichiers") + + #self.rm_temp_dirs() # efface les répertoires temporaires + try: + self.creer_fic_conf() # crée le fichier eficas.conf + except: + afficher_info("Impossible de créer le fichier de configuration\n Il est possible de le faire a la main") +# self.install_running = 0 + self.afficher_install_terminee() # A ce stade tout est fait et il ne reste plus qu'à attendre + # un clic de souris pour sortir + + def display_defaults(self): + """ + Affiche les valeurs par défaut dans les zones de saisie + """ + # racine indique la racine de l'arborescence + if os.name == 'nt': + racine = 'C:\\' + else: + racine = os.environ['HOME'] + # remplit les zones de saisie avec les options par défaut + for item in self.items: + if item.default_value == None : continue + item.default_value = os.path.join(racine,item.default_value) + item.entree.insert(0,item.default_value) + + def register_item(self,item): + """ + Enregistre l'item dans la liste des items et éventuellement + dans la liste des items à créer (répertoires) + """ + self.items.append(item) + if self.pat_rep.match(item.nom) : + self.items_a_creer.append(item) + + def register_entree(self,entree): + """ + Enregistre la zone de saisie dans la liste des zones + """ + self.entrees.append(entree) + + def select_next_entry(self,entree): + """ + Place le focus dans l'entry suivant celle passée en argument + """ + index = self.entrees.index(entree)+1 + if index != len(self.entrees): + self.entrees[index].component('entry').focus() + + def activate_entries(self): + """ + Active les entrées. Les zones de saisie deviennent éditables. + """ + for item in self.entrees: + item.configure(entry_state='normal') + + def deactivate_entries(self): + """ + Désactive les entrées. Les zones ne sont plus éditables. + """ + for item in self.entrees: # Les entrees sont desactivees + item.configure(entry_state='disabled') # pendant les operations d'installation + + def activate_buttons(self): + """ + active les boutons valider et annuler + """ + self.validButton.configure(state = 'normal') + self.exitButton.configure(state = 'normal') + + def deactivate_buttons(self): + """ + désactive des boutons valider de annuler + """ + self.validButton.configure(state = 'disabled') + self.exitButton.configure(state = 'disabled') + + def erreur_exec(self, result): + """ + Callback exécuté lorsque l'utilisateur clique sur un des boutons + Modifier/Annuler de la fenêtre de dialogue qui lui présente les erreurs + """ + self.erreur_dialog.deactivate(result) + self.removedir() + if result == 'Annuler': + self.install_running = 0 + self.exit(annule='non') + + def fatale_exec(self, result): + """ + Callback exécuté lorsque l'utilisateur clique sur le bouton + Quitter de la fenêtre de dialogue qui lui présente les erreurs fatales + Seule solution : sortir de l'installation + """ + self.fatale_dialog.deactivate(result) + self.install_running = 0 + self.exit(annule='oui') + + def test_confirmation(self,flag,nom): + """ + Callback activé par le clic sur bouton fenêtre demandant confirmation + avant création répertoire facultatif + """ + if flag == 'NON': + self.confirmation.destroy() + self.TEST_confirmation_avant_creation = NON + return + else : + self.confirmation.destroy() + self.TEST_confirmation_avant_creation = OUI + + def afficher_fatale(self, message): + """ + Affiche les erreurs fatales + """ + self.attente.withdraw() + w = Tkinter.Label(self.fatale_dialog.interior(),text = message, pady = 5) + w.pack(expand = 1, fill = 'both', padx = 4, pady = 4) + self.fatale_dialog.configure(deactivatecommand = w.destroy) + self.fatale_dialog.activate() + + def afficher_echec(self, message): + """ + Affiche un message d'erreur + Par construction, dès que l'on passe par cette méthode, on sort de l'installation + en passant le flag install_running à 0 + """ + self.attente.withdraw() + w = Tkinter.Label(self.erreur_dialog.interior(),text = message, pady = 5) + w.pack(expand = 1, fill = 'both', padx = 4, pady = 4) + self.erreur_dialog.configure(deactivatecommand = w.destroy) + self.erreur_dialog.activate() + + def confirmation_avant_creation(self,repertoire): + """ + Affiche une boite de dialogue pour confirmer la création + d'un répertoire facultatif. + """ + self.attente.withdraw() + self.confirmation = Pmw.Dialog(self, + buttons = ('OUI', 'NON'), + defaultbutton = 'OUI', + title = "Répertoire inexistant", + command = lambda f,s=self,r=repertoire : s.test_confirmation(f,r)) + self.confirmation.withdraw() + Tkinter.Label(self.confirmation.interior(), + text="Le répertoire %s n'existe pas \n Voulez-vous le créer ?" %repertoire).pack(side='top') + self.confirmation.activate(geometry='centerscreenalways') + return self.TEST_confirmation_avant_creation + + def afficher_splash(self): + """ + Afficher la boite de message + """ + self.attente.deiconify() + self.attente.tkraise() + centerwindow(self.attente) + self.attente.configure(titre="Installation d'EFICAS", + text="Vérification intégrité sources Eficas", + barre="non") + + def afficher_info(self,message): + """ + Afficher une boite de warning + """ + w = Tkinter.Label(self.info_dialog.interior(),text = message, pady = 5) + w.pack(expand = 1, fill = 'both', padx = 4, pady = 4) + self.info_dialog.configure(deactivatecommand = w.destroy) + self.info_dialog.activate() + + def afficher_copie_fichiers(self): + """ + Afficher la boite de message avec la barre de progression + """ + self.attente.deiconify() + self.attente.tkraise() + self.attente.configure(titre="Installation d'EFICAS", + text="copie des fichiers", + barre="oui") + self.attente.ratio = self.nb_fichiers + self.attente.configure_barre() + + def afficher_install_terminee(self): + """ + Afficher le message Installation terminée + """ + self.withdraw() + self.attente.configure(titre="Installation d'EFICAS", + text="Installation terminée", + barre="non") + self.exitButton.place_forget() + self.validButton.place_forget() + self.validButton = Tkinter.Button(self.attente.frame, + text = 'Quitter', + command = self.exit) + self.validButton.pack(side='top',pady=5) + self.install_running = 0 + + def decompress_archive(self) : + """ + Décompresse l'archive d'EFICAS dans un répertoire temporaire (.) + """ + print "decompress_archive" + #try: + commande = os.path.join(REPERTOIRE,self.d_commandes['decompress']) + fichier = os.path.join(REPERTOIRE,"eficas.zip") + print 'commande =',commande + print 'fichier =',fichier + os.execv(commande,("eficas.zip",)) + #except: + # self.affiche_echec("Erreur dans la décompression") + + def normaliser_chemin(self, nom): + """ + Retourne le chemin d'accès complet à nom + """ + return os.path.abspath(os.path.expanduser(nom)) + + def discriminer_noms(self): + """ + Emet un message d'alerte si des zones de saisie ne sont pas remplies + ou si des noms de répertoires à créer sont identiques. + """ + liste_noms = [] + for item in self.items_a_creer: + nom = item.entree.get() + if nom == self.rep_install.entree.get(): # il faut ajouter 'Eficas' au chemin du repertoire + nom = os.path.join(nom,"Eficas") # d'installation + liste_noms.append(nom) + + test = SUCCES + for item in self.items_a_creer: + nom = item.entree.get() + if len(nom) == 0 : + test = ECHEC + message = "attention : certains répertoires n'ont pas de nom" + self.afficher_echec(message) + item.entree.component('entry').focus() + break + + if test == ECHEC : + return test + + for item in self.items_a_creer: + nom = item.entree.get() + if liste_noms.count(nom) >1 : + test = ECHEC + message = "attention : certains répertoires ont le même nom" + self.afficher_echec(message) + item.entree.component('entry').focus() + break + + return test + + def compte_fichiers(self,path): + """ + Dénombre les fichiers présents dans le répertoire Eficas (et ses sous-répertoires) + """ + nb = 0 + l_fic = os.listdir(path) + l_rep = [] + for fic in l_fic : + if os.path.isdir(os.path.join(path,fic)): + l_rep.append(fic) + else: + nb = nb+1 + for rep in l_rep : + nb = nb + self.compte_fichiers(os.path.join(path,rep)) + return nb + + def creer_fic_conf(self): + """ + Crée le fichier editeur.ini a partir des données saisies + par l'administrateur. + """ + fichier_conf = os.path.join(self.normaliser_chemin(self.rep_install.get_valeur()),"Eficas/Aster/editeur.ini") + f = open(fichier_conf,'w') + f.write("path_doc = "+'"'+self.normaliser_chemin(self.rep_docaster.get_valeur())+'"\n') + f.write("exec_acrobat = "+'"'+self.normaliser_chemin(self.acrobat.get_valeur())+'"\n') + f.write('isdeveloppeur = "NON"\n') + f.write("rep_travail = "+'"'+self.normaliser_chemin(self.rep_travail.get_valeur())+'"\n') + f.write("rep_cata = "+'"'+os.path.join(self.normaliser_chemin(self.rep_install.get_valeur()),"Eficas/Aster/Cata/")+'"\n') # attention au dernier slash + f.write("rep_mat = "+'"'+self.normaliser_chemin(self.rep_mat.get_valeur())+'"\n') + cata = """catalogues = (('ASTER','v6',rep_cata + 'cata_STA6.py','python','defaut'),)\n""" + f.write(cata) + f.close() + + + def move_files(self): + """ + Déplace les fichiers Eficas du répertoire temporaire vers + leur répertoire de destination + """ + # création du répertoire Eficas + rep_eficas = os.path.join(self.rep_install.get_valeur(),'Eficas') + self.copy_rep(REPERTOIRE,rep_eficas) + + def copy_rep(self,rep_dep,rep_arr): + """ + Copie le répertoire path_dep et ses sous-répertoires dans path_arr + """ + l_fichiers = os.listdir(rep_dep) + if not os.path.exists(rep_arr) : + # création du répertoire d'arrivée quand il n'existe pas + self.mkdirs(rep_arr) + for fic in l_fichiers : + nom_complet_dep = os.path.join(rep_dep,fic) + nom_complet_arr = os.path.join(rep_arr,fic) + if os.path.isfile(nom_complet_dep): + commande_copie = self.d_commandes['copy']+nom_complet_dep+' '+nom_complet_arr + commande_delete= self.d_commandes['delete']+nom_complet_dep + try: + os.system(commande_copie) + #os.system(commande_delete) + self.attente.update_barre() + except Exception,e: + pass + elif os.path.isdir(nom_complet_dep): + self.copy_rep(nom_complet_dep,nom_complet_arr) + + def rm_temp_dirs(self): + """ + Détruit le répertoire temporaire de l'archive d'Eficas + """ + rep_arch = os.path.join(REPERTOIRE,'Eficas') + self.rm_r(rep_arch) + + def make_dirs(self): + """ + Crée les répertoires d'accueil des fichiers d'EFICAS + """ + # création des répertoires dont l'utilisateur a donné le nom + if self.discriminer_noms() == ECHEC: + return ECHEC + for item in self.items_a_creer: + if not item.entree.get(): + continue + nom = item.get_valeur() + if nom == self.normaliser_chemin(self.rep_install.entree.get()): # il faut ajouter 'Eficas' au chemin du repertoire + nom = os.path.join(nom,"Eficas") # d'installation + item.test = self.essai_creer(nom,item.statut) + if item.test == ECHEC : + item.entree.component('entry').focus() + return ECHEC + return SUCCES + + def essai_creer(self, nom, statut): + """ + Essaie de créer le répertoire nom s'il n'existe pas déjà. + Si statut == 'f' et si le fichier n'existe pas, demande + confirmation avant création + """ + repertoire = self.normaliser_chemin(nom) # repertoire = chemin absolu de nom + if os.path.exists(repertoire): + if statut == 'o' : + self.afficher_echec("Un fichier ou répertoire de nom "+ repertoire+ " existe déjà !\n"+ + "L'installation ne peut continuer") + return ECHEC + else: + return SUCCES + + if statut == 'f' : + # on demande confirmation de création à l'utilisateur + test = self.confirmation_avant_creation(repertoire) + if test == NON: + return SUCCES + + try: + test = self.mkdirs(repertoire) + return SUCCES + except Exception,e: + message = "La création de "+repertoire+" a échoué :\n %s \n Vérifiez vos droits d'écriture" %str(e) # message d'erreur + self.afficher_echec(message) + return ECHEC + + def mkdirs(self,rep): + """ + Création récursive des répertoires d'installation. + Les noms des répertoires crées sont stockés dans + une liste dont se sert la méthode removedir pour + restaurer l'environnement initial en cas d'annulation. + """ + if rep==os.path.dirname(rep): + return SUCCES + + if os.path.exists(os.path.dirname(rep)): + os.mkdir(rep) + self.liste_rep_crees.append(rep) + return SUCCES + else: + test = self.mkdirs(os.path.dirname(rep)) + if test == SUCCES: + os.mkdir(rep) + self.liste_rep_crees.append(rep) + return SUCCES + else: + return ECHEC + + def rm_r(self,path): + """ + Detruit récursivement path + """ + if not os.path.exists(path): + return + try: + if len(os.listdir(path))!=0: + for entree in os.listdir(path): + entree = os.path.join(path,entree) + self.rm_r(entree) + os.rmdir(path) + except Exception,e: + self.afficher_info("Impossible de détruire le répertoire : "+path+"\n"+"\n"+str(e)+"\n L'installation continue néanmoins") + + def removedir(self): + """ + Destruction des répertoires déja crées (en cas d'annulation) + """ + for rep in self.liste_rep_crees: + self.rm_r(rep) + self.liste_rep_crees = [] + + def exit(self,annule='non'): + """ + Tente de sortir de l'application. + Echoue si installation en cours + """ + if self.install_running : + # l'installation est en cours --> on interdit la sortie + self.afficher_info("Impossible de quitter tant que l'installation est en cours\n Veuillez patienter") + else: + if annule == 'oui' : self.removedir() + self.master.quit() + +if __name__ == '__main__': + test = Test_Environnement().test() + if not test : + # environnement incomplet --> on sort de la procédure d'installation + sys.exit() + else: + import Tkinter + import Pmw + root = Tkinter.Tk() + Pmw.initialise(root) + try: + principal = Config(root) + root.mainloop() + except Exception,e: + print "Erreur non prévue rencontrée : ",str(e) + print "Veuillez prévenir la maintenance" + sys.exit() diff --git a/Minicode/cata_saturne.py b/Minicode/cata_saturne.py index 40975a2d..4c742a6a 100755 --- a/Minicode/cata_saturne.py +++ b/Minicode/cata_saturne.py @@ -3,6 +3,8 @@ import Accas from Accas import * +#CONTEXT.debug=1 + import ops JdC = JDC_CATA(code='SATURNE', @@ -11,13 +13,21 @@ JdC = JDC_CATA(code='SATURNE', AU_MOINS_UN('FIN'), A_CLASSER(('DEBUT','POURSUITE'),'FIN') ) - ); + ) # P. RASCLE MMN # remarques diverses sur le catalogue Saturne # - dans les blocs, il faut au moins un mot clé de statut obligatoire # probleme de rafraichissement des blocs dépendants quand la valeur d'un mot cle global (ITURB) passe de 1 à 0 +# Type le plus general +class entier (ASSD):pass +class reel (ASSD):pass +class complexe(ASSD):pass +class liste (ASSD):pass +class chaine (ASSD):pass + + class sonde(ASSD):pass class varsca(ASSD):pass class flusca(ASSD):pass @@ -36,7 +46,35 @@ class tsr23(ASSD):pass class resti(ASSD):pass class maillage(ASSD):pass -class listr8 (ASSD):pass +class modele(ASSD):pass +class matr_asse(ASSD):pass +class cham_elem_sief_r(ASSD):pass +class theta_geom(ASSD):pass +class cham_mater(ASSD):pass +class cara_elem(ASSD):pass +class char_ther(ASSD):pass +class char_meca(ASSD):pass +class nume_ddl(ASSD):pass +class char_acou(ASSD):pass +class listr8 (ASSD):pass +class matr_elem(ASSD):pass +class matr_elem_depl_c(matr_elem):pass +class matr_elem_depl_r(matr_elem):pass +class matr_elem_pres_c(matr_elem):pass +class matr_elem_temp_r(matr_elem):pass + +# matr_asse : +#-------------------------------- +class matr_asse(ASSD):pass +class matr_asse_depl_c(matr_asse):pass +class matr_asse_depl_r(matr_asse):pass +class matr_asse_gene_r(matr_asse):pass +class matr_asse_gene_c(matr_asse):pass +class matr_asse_pres_c(matr_asse):pass +class matr_asse_pres_r(matr_asse):pass +class matr_asse_temp_c(matr_asse):pass +class matr_asse_temp_r(matr_asse):pass + # fin entete @@ -101,6 +139,33 @@ FORMULE = FORM( nom='FORMULE',op=-5,sd_prod=fonction, COMPLEXE = SIMP(typ = 'shell',max=1), ) ; +AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele,docu="U4.41.01-f1", + fr="Affectation des éléments finis sur le maillage",reentrant='n', + MAILLAGE =SIMP(statut='o',typ=(maillage) ), + INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ), + VERIF =SIMP(statut='f',typ='TXM',max=2,into=("MAILLE","NOEUD") ), + ); +NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl,docu="U4.61.11-f",reentrant='n', + fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice", + MATR_RIGI =SIMP(statut='f',typ=(matr_elem_depl_r ,matr_elem_depl_c, + matr_elem_temp_r,matr_elem_pres_c),max=100 ), + MODELE =SIMP(statut='f',typ=modele ), + b_modele =BLOC(condition = "MODELE != None", + CHARGE =SIMP(statut='f',max='**',typ=(char_meca,char_ther,char_acou, ),), + ), + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC") ), + b_mult_front =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale", + RENUM =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ), + ), + b_ldlt =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT", + RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), + ), + b_gcpc =BLOC(condition="METHODE=='GCPC'",fr="paramètres associés à la méthode gradient conjugué", + RENUM =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK" ), + ), + INFO =SIMP(statut='f',typ='I',into=(1,2)), +) ; + DEFI_SONDE = OPER(nom="DEFI_SONDE",op= 1,sd_prod=sonde, docu="U2D1", fr="définition d'une sonde historique avec ses coordonnées", @@ -1229,3 +1294,258 @@ FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une ) ; +def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE, + SOLVEUR,NUME_DDL,CHARGE,INST,**args): + """ + Ecriture de la macro MACRO_MATR_ASSE + """ + ier=0 + # On met le mot cle NUME_DDL dans une variable locale pour le proteger + numeddl=NUME_DDL + # On importe les definitions des commandes a utiliser dans la macro + # Le nom de la variable doit etre obligatoirement le nom de la commande + CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM') + NUME_DDL =self.get_cmd('NUME_DDL') + ASSE_MATRICE =self.get_cmd('ASSE_MATRICE') + # La macro compte pour 1 dans la numerotation des commandes + self.icmd=1 + + if SOLVEUR: + methode=SOLVEUR['METHODE'] + if methode=='LDLT': + if SOLVEUR['RENUM']: + renum=SOLVEUR['RENUM'] + else: + renum='RCMK' + if renum not in ('SANS','RCMK'): + ier=ier+1 + self.cr.fatal("Avec methode LDLT, RENUM doit etre SANS ou RCMK.") + return ier + elif methode=='MULT_FRONT': + if SOLVEUR['RENUM']: + renum=SOLVEUR['RENUM'] + else: + renum='MDA' + if renum not in ('MDA','MD','METIS'): + ier=ier+1 + self.cr.fatal("Avec methode MULT_FRONT, RENUM doit etre MDA, MD ou RCMK.") + return ier + elif methode=='GCPC': + if SOLVEUR['RENUM']: + renum=SOLVEUR['RENUM'] + else: + renum='SANS' + if renum not in ('SANS','RCMK'): + ier=ier+1 + self.cr.fatal("Avec methode GCPC, RENUM doit etre SANS ou RCMK.") + return ier + else: + methode='MULT_FRONT' + renum ='MDA' + + if numeddl in self.sdprods: + # Si le concept numeddl est dans self.sdprods + # il doit etre produit par la macro + # il faudra donc appeler la commande NUME_DDL + lnume = 1 + else: + lnume = 0 + lrigel = 0 + lmasel = 0 + + iocc=0 + for m in MATR_ASSE: + iocc=iocc+1 + option=m['OPTION'] + if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR', + 'RIGI_THER','RIGI_ACOU') : + ier=ier+1 + self.cr.fatal("LA PREMIERE OPTION DOIT ETRE RIGI_MECA OU RIGI_THER OU RIGI_ACOU OU RIGI_MECA_LAGR") + return ier + + if m['SIEF_ELGA']!=None and option!='RIGI_GEOM': + ier=ier+1 + self.cr.fatal("SIEF_ELGA N EST ADMIS QU AVEC L OPTION RIGI_GEOM") + return ier + + if m['MODE_FOURIER']!=None and option not in ('RIGI_MECA','RIGI_FLUI_STRU','RIGI_THER'): + ier=ier+1 + self.cr.fatal("MODE_FOURIER N EST ADMIS QU AVEC UNE DES OPTIONS RIGI_MECA RIGI_FLUI_STRU RIGI_THER") + return ier + + if (m['THETA']!=None or m['PROPAGATION']!=None) and option!='RIGI_MECA_LAGR': + ier=ier+1 + self.cr.fatal("PROPAGATION ET,OU THETA NE SONT ADMIS QU AVEC L OPTION RIGI_MECA_LAGR") + return ier + motscles={'OPTION':option} + if option == 'AMOR_MECA': + if (not lrigel or not lmasel): + ier=ier+1 + self.cr.fatal("""POUR CALCULER AMOR_MECA, IL FAUT AVOIR CALCULE + RIGI_MECA ET MASS_MECA AUPARAVANT (DANS LE MEME APPEL)""") + return ier + if CHAM_MATER != None: + motscles['RIGI_MECA'] =rigel + motscles['MASS_MECA'] =masel + if CHARGE != None: + if option[0:9] not in ('MASS_THER','RIGI_GEOM','MASS_ID_M'): + motscles['CHARGE'] =CHARGE + if CHAM_MATER != None: motscles['CHAM_MATER'] =CHAM_MATER + if CARA_ELEM != None: motscles['CARA_ELEM'] =CARA_ELEM + if INST != None: motscles['INST'] =INST + if m['SIEF_ELGA'] : motscles['SIEF_ELGA'] =m['SIEF_ELGA'] + if m['MODE_FOURIER']: motscles['MODE_FOURIER']=m['MODE_FOURIER'] + if m['THETA'] : motscles['THETA'] =m['THETA'] + if m['PROPAGATION'] : motscles['PROPAGATION'] =m['PROPAGATION'] + __a=CALC_MATR_ELEM(MODELE=MODELE,**motscles) + + if option == 'RIGI_MECA': + rigel = __a + lrigel = 1 + if option == 'MASS_MECA': + masel = __a + lmasel = 1 + + if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'): + self.DeclareOut('num',numeddl) + # On peut passer des mots cles egaux a None. Ils sont ignores + num=NUME_DDL(MATR_RIGI=__a,METHODE=methode,RENUM=renum) + else: + num=numeddl + + self.DeclareOut('mm',m['MATRICE']) + mm=ASSE_MATRICE(MATR_ELEM=__a,NUME_DDL=num) + return ier + +def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args): + if not MATR_ASSE: raise AsException("Impossible de typer les concepts resultats") + if not NUME_DDL: raise AsException("Impossible de typer les concepts resultats") + self.type_sdprod(NUME_DDL,nume_ddl) + for m in MATR_ASSE: + opti=m['OPTION'] + + if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" , + "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA", + "AMOR_MECA","IMPE_MECA","MASS_ID_MDEP_R","MASS_ID_MDNS_R", + "ONDE_FLUI","MASS_MECA_DIAG" ) : t=matr_asse_depl_r + + if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c + + if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" , + "RIGI_THER_CONV_D","MASS_ID_MTEM_R","MASS_ID_MTNS_R",) : t=matr_asse_temp_r + + if opti == "RIGI_MECA_HYST" : t= matr_asse_depl_c + + self.type_sdprod(m['MATRICE'],t) + return None + +MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,docu="U4.61.21-c", + sd_prod=macro_matr_asse_prod, + fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ", + MODELE =SIMP(statut='o',typ=modele), + CHAM_MATER =SIMP(statut='f',typ=cham_mater), + CARA_ELEM =SIMP(statut='f',typ=cara_elem), + CHARGE =SIMP(statut='f',typ=(char_meca,char_ther,char_acou)), + INST =SIMP(statut='f',typ='R'), + NUME_DDL =SIMP(statut='o',typ=(nume_ddl,CO)), + SOLVEUR =FACT(statut='d',min=01,max=01, + METHODE =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT", + into=("LDLT","MULT_FRONT","GCPC")), + RENUM =SIMP(statut='f',typ='TXM',into=("SANS","RCMK","MD","MDA","METIS")), + ), + MATR_ASSE =FACT(statut='o',min=01,max='**', + MATRICE =SIMP(statut='o',typ=(matr_asse,CO)), + OPTION =SIMP(statut='o',typ='TXM', + into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG", + "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA", + "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU", + "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR", + "RIGI_THER","MASS_THER", + "RIGI_ACOU","MASS_ACOU","AMOR_ACOU", + "MASS_ID_MTEM_R","MASS_ID_MTNS_R","MASS_ID_MDEP_R","MASS_ID_MDNS_R",) + ), + SIEF_ELGA =SIMP(statut='f',typ=cham_elem_sief_r), + MODE_FOURIER =SIMP(statut='f',typ='I'), + THETA =SIMP(statut='f',typ=theta_geom), + PROPAGATION =SIMP(statut='f',typ='R'), + ), + TITRE =SIMP(statut='f',typ='TXM',max='**'), + INFO =SIMP(statut='f',typ='I',defaut=1,into=(1,2)), +) ; + + +def defi_valeur_prod(self,IS=None,R8=None,TX=None,C8=None,LS=None): + if IS != None : return entier + if R8 != None : return reel + if TX != None : return chaine + if C8 != None : return complexe + if LS != None : return liste + raise AsException("type de concept resultat non prevu") + +DEFI_VALEUR=MACRO(nom="DEFI_VALEUR",op=-4,sd_prod=defi_valeur_prod, + fr="Affectation d une valeur à une variable Superviseur", + docu="U4.31.04-e1",reentrant='f', + regles=(UN_PARMI('IS','R8','TX','C8','LS'),), + IS =SIMP(statut='f',typ='I',max='**'), + R8 =SIMP(statut='f',typ='R',max='**'), + TX =SIMP(statut='f',typ='TXM',max='**'), + C8 =SIMP(statut='f',typ='C',max='**'), + LS =SIMP(statut='f',typ='L',max='**'), +) ; + +def macro2_prod(self,MODELE,**args): + return maillage + +MACRO2 =MACRO(nom="MACRO2",op= -5 ,docu="U4.61.21-c", + sd_prod=macro2_prod, + fr="Calcul des matrices assemblées (matr_asse_gd) par exemple de rigidité, de masse ", + MODELE =SIMP(statut='o',typ=modele), +); + +class concept(ASSD):pass + +def op1_prod(x,**args): + if x == 0:return concept + if x == 1:return concept + raise AsException("type de concept resultat non prevu") + +OP1 = OPER(nom='OP1',op=1,sd_prod=op1_prod,reentrant='f', + a=SIMP(statut='o',typ='I',into=(0,1,2)), + b=SIMP(typ=concept), + ccc=FACT(statut='d',d=SIMP(typ='I'),e=SIMP(typ='I')), + b_1=BLOC(condition="a==0", + x=SIMP(statut='o',typ='I',into=(0,1)), + c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')), + ), + b_2=BLOC(condition="a==1", + x=SIMP(statut='o',typ='I',into=(0,1)), + b_2=BLOC(condition="1", + cc=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')), + c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')), + ), + ), + ); + + +def op2_prod(self,x,**args): + if x == 0:return concept + if x == 1:return concept + raise AsException("type de concept resultat non prevu") + +OP2 = MACRO(nom='OP2',op=1,sd_prod=op2_prod,reentrant='f', + a=SIMP(statut='o',typ='I',into=(0,1,2)), + b=SIMP(typ=concept), + ccc=FACT(statut='d',d=SIMP(typ='I'),e=SIMP(typ='I')), + b_1=BLOC(condition="a==0", + x=SIMP(statut='o',typ='I',into=(0,1)), + c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')), + ), + b_2=BLOC(condition="a==1", + x=SIMP(statut='o',typ='I',into=(0,1)), + b_2=BLOC(condition="1", + cc=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')), + c=FACT(d=SIMP(typ='I'),e=SIMP(typ='I')), + ), + ), + ); + diff --git a/Minicode/eficas_mini.py b/Minicode/eficas_mini.py index c8a97ac1..281ccc8e 100755 --- a/Minicode/eficas_mini.py +++ b/Minicode/eficas_mini.py @@ -3,19 +3,44 @@ Ce module sert à lancer EFICAS configuré pour Code_Mini """ # Modules Python -import sys +import sys,os # Modules Eficas import prefs sys.path[:0]=[prefs.INSTALLDIR] +args=sys.argv[1:] +for a in args: + if a == "-display": + os.environ['DISPLAY']=args[args.index("-display")+1] + import Editeur from Editeur import eficas_go -if len(sys.argv) > 1 : - # on veut ouvrir un fichier directement au lancement d'Eficas - eficas_go.lance_eficas(code='SATURNE',fichier = sys.argv[1]) +def main(): + if len(sys.argv) > 1 : + # on veut ouvrir un fichier directement au lancement d'Eficas + eficas_go.lance_eficas(code='SATURNE',fichier = sys.argv[1]) + else: + # on veut ouvrir Eficas 'vide' + eficas_go.lance_eficas(code='SATURNE') + +def hidez(): + from Misc import Cyclops + z = Cyclops.CycleFinder() + z.run(main) + z.find_cycles() + z.show_stats() + z.show_cycles() + # z.show_cycleobjs() + # z.show_sccs() + z.show_arcs() + +withCyclops=0 + +if withCyclops: + hidez() else: - # on veut ouvrir Eficas 'vide' - eficas_go.lance_eficas(code='SATURNE') + main() + diff --git a/Minicode/prefs.py b/Minicode/prefs.py index f3d82ae8..57be183f 100644 --- a/Minicode/prefs.py +++ b/Minicode/prefs.py @@ -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/Noyau/N_MACRO.py b/Noyau/N_MACRO.py index 5aa38361..c02c26f8 100644 --- a/Noyau/N_MACRO.py +++ b/Noyau/N_MACRO.py @@ -85,7 +85,7 @@ class MACRO(N_ENTITE.ENTITE): nommage = nommage def __init__(self,nom,op,sd_prod=None,reentrant='n',repetable='o',fr="",ang="", - docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,**args): + docu="",regles=(),op_init=None,niveau = None,fichier_ini=0,UIinfo=None,**args): """ Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser les attributs de meme nom @@ -125,6 +125,7 @@ class MACRO(N_ENTITE.ENTITE): else: self.niveau=current_cata.get_niveau(niveau) self.niveau.enregistre(self) + self.UIinfo=UIinfo self.affecter_parente() def __call__(self,reuse=None,**args): diff --git a/Noyau/N_OPER.py b/Noyau/N_OPER.py index dd9812e8..2f713787 100644 --- a/Noyau/N_OPER.py +++ b/Noyau/N_OPER.py @@ -85,7 +85,7 @@ class OPER(N_ENTITE.ENTITE): nommage = nommage def __init__(self,nom,op,sd_prod,reentrant='n',repetable='o',fr="",ang="", - docu="",regles=(),op_init=None,niveau = None,**args): + docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args): """ Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser les attributs de meme nom @@ -112,6 +112,7 @@ class OPER(N_ENTITE.ENTITE): else: self.niveau=current_cata.get_niveau(niveau) self.niveau.enregistre(self) + self.UIinfo=UIinfo self.affecter_parente() def __call__(self,reuse=None,**args): diff --git a/Noyau/N_PROC.py b/Noyau/N_PROC.py index 173070fb..e8010663 100644 --- a/Noyau/N_PROC.py +++ b/Noyau/N_PROC.py @@ -79,7 +79,7 @@ class PROC(N_ENTITE.ENTITE): label = 'PROC' def __init__(self,nom,op,reentrant='n',repetable='o',fr="",ang="", - docu="",regles=(),op_init=None,niveau = None,**args): + docu="",regles=(),op_init=None,niveau = None,UIinfo=None,**args): """ Méthode d'initialisation de l'objet PROC. Les arguments sont utilisés pour initialiser les attributs de meme nom @@ -105,6 +105,7 @@ class PROC(N_ENTITE.ENTITE): else: self.niveau=current_cata.get_niveau(niveau) self.niveau.enregistre(self) + self.UIinfo=UIinfo self.affecter_parente() def __call__(self,**args): diff --git a/Saturne/prefs.py b/Saturne/prefs.py index ed24d3cf..c14833ec 100644 --- a/Saturne/prefs.py +++ b/Saturne/prefs.py @@ -19,4 +19,7 @@ CODE_PATH = None # Par défaut on utilise le répertoire icons dans Editeur ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons') +# lang indique la langue utilisée pour les chaines d'aide : fr ou ang +lang='fr' + diff --git a/Syrthes/cata_syrthes.py b/Syrthes/cata_syrthes.py new file mode 100755 index 00000000..43113e96 --- /dev/null +++ b/Syrthes/cata_syrthes.py @@ -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), + NIVEAU(nom='prop_phys',label='Propriétés physiques',valide_vide=0,actif='choix_num==1'), + NIVEAU(nom='cond_init',label='Conditions initiales',valide_vide=0,actif='prop_phys==1'), + NIVEAU(nom='cond_limi',label='Conditions aux limites',valide_vide=0,actif='cond_init==1'), + NIVEAU(nom='flux_volu',label='Flux volumiques',valide_vide=0,actif='cond_limi==1'), + NIVEAU(nom='soli_mouv',label='Solides en mouvement'), + NIVEAU(nom='couplages',label='Couplages'), + NIVEAU(nom='rayonnement',label='Rayonnement',valide_vide=0,actif='flux_volu==1'), + NIVEAU(nom='cond_lim_ray',label='Conditions limites rayonnement',valide_vide=0,actif='rayonnement==1'), + NIVEAU(nom='in_out_ray',label='Entrées/Sorties rayonnement',valide_vide=0,actif='rayonnement==1'), + NIVEAU(nom='fichiers',label='Fichiers pour le calcul')) + ) + + +GENERALITES = PROC(nom='GENERALITES',op=10, + fr="Définition des principales options du calcul", + niveau='generalites', + TYPE_DE_CALCUL=SIMP(typ='TXM', + statut='o', + into=('Syrthes thermique solide seule','Syrthes couplé'), + defaut='Syrthes thermique solide seule', + position='global_jdc'), + TITRE = SIMP(statut='f',typ='TXM'), + DIMENSION = SIMP(statut='o', + typ='I', + into=(2,3), + defaut=2, + position='global_jdc'), + b_axys = BLOC(condition="TYPE_DE_CALCUL=='Syrthes thermique solide seule'", + AXE_SYMETRIE = SIMP(statut='o', + typ='TXM', + into=('AUCUN','OX','OY'), + defaut='AUCUN'))); + +GESTION_DU_CALCUL = PROC(nom='GESTION_DU_CALCUL',op=10, + fr="Gestion des pas de temps et éventuellement du couplage fluide/solide", + niveau='gest_calc', + CALCUL_SYRTHES_SEUL = BLOC(condition="TYPE_DE_CALCUL == 'Syrthes thermique solide seule'", + PAS_DE_TEMPS_SOLIDE = SIMP(typ='I',statut='o'), + NB_PAS_DE_TEMPS = SIMP(typ='I',statut='o'), + SUITE_DE_CALCUL = SIMP(typ='TXM',statut='o',into=('OUI','NON'),defaut='NON')), + CALCUL_SYRTHES_COUPLE = BLOC(condition="TYPE_DE_CALCUL =='Syrthes couplé'", + CORRESPONDANCE_MAILLAGES_F_S = SIMP(statut='o', + typ='TXM', + into=('calcul','lecture sur fichier','calcul et écriture sur fichier'), + defaut='calcul et écriture sur fichier'), + PAS_DE_TEMPS_SOLIDE = SIMP(typ='TXM', + statut='o', + into=('fixé indépendamment','égal à celui du fluide'), + defaut='égal à celui du fluide'), + CHOIX_FREQUENCE_CALCUL_SOLIDE = SIMP(typ='TXM', + statut='o', + into=('calcul solide à chaque pas de temps', + 'calcul solide tous les n pas de temps fluide', + 'calcul fluide tous les n pas de temps solide'), + defaut='calcul solide à chaque pas de temps'), + frequence_calcul = BLOC(condition="CHOIX_FREQUENCE_CALCUL_SOLIDE != 'calcul solide à chaque pas de temps'", + FREQUENCE = SIMP(statut='o', + typ='I'))) + + ); + +GESTION_DES_SORTIES = PROC(nom="GESTION_DES_SORTIES",op=10, + fr="Gestion des résultats du code", + niveau='gest_sort', + IMPRESSIONS_SOLIDE=SIMP(statut='o',typ='TXM', + into=('aucune','minimales','normales','détaillées'), + defaut='normales'), + RESULTATS_DOMAINE_SOLIDE=FACT(statut='o', + FICHIER_CHRONOLOGIQUE=SIMP(typ='TXM',statut='o', + into=('aucune sortie','tous les n pas de temps'), + defaut='aucune sortie'), + pas_de_temps=BLOC(condition="FICHIER_CHRONOLOGIQUE=='tous les n pas de temps'", + PAS_DE_TEMPS=SIMP(statut='o',typ='I')), + FICHIER_LISTING=SIMP(statut='o',typ='TXM', + into=('aucune sortie',), + defaut='aucune sortie'), + HISTORIQUE_SOLIDE=SIMP(statut='o',typ='TXM', + into=('OUI','NON'), + defaut='NON'), + historique=BLOC(condition="HISTORIQUE_SOLIDE=='OUI'", + NOMBRE_CAPTEURS=SIMP(statut='o',typ='I'), + FREQUENCE_ECRITURE=SIMP(statut='o',typ='I',defaut=1), + LISTE_NOEUDS = FACT(statut='o',max='**', + NOEUDS=SIMP(statut='o',max='**',typ='I'), + COMMENTAIRE=SIMP(statut='o',typ='TXM',defaut=""))), + ), + RESULTATS_DOMAINE_FLUIDE=BLOC(condition="TYPE_DE_CALCUL=='Syrthes couplé'", + ECRITURE_MAILLAGE_PEAU_FLUIDE=SIMP(statut='o',into=('OUI','NON'), + defaut='NON',typ='TXM'), + ECRITURE_RESULTATS_PEAU_FLUIDE=SIMP(statut='o',into=('OUI','NON'), + defaut='NON',typ='TXM'), + ECRITURE_CHRONO_PEAU_FLUIDE=SIMP(statut='o',into=('OUI','NON'), + defaut='NON',typ='TXM')) + ); + +CHOIX_NUMERIQUES=PROC(nom="CHOIX_NUMERIQUES",op=10, + fr="Modification des options du solveur", + niveau='choix_num', + SOLVEUR_SOLIDE = FACT(statut='o', + NOMBRE_ITERATIONS=SIMP(statut='o',typ='I'), + PRECISION=SIMP(statut='o',typ='R')) + ); + +PROPRIETES_PHYSIQUES=PROC(nom="PROPRIETES_PHYSIQUES",op=10, + fr="Définition des propriétés physiques des matériaux", + niveau='prop_phys', + DEFINITION_PAR = SIMP(statut='o',typ='TXM',into=('NOEUD','ELEMENT','NOEUD PAR ELEMENT'), + defaut='ELEMENT'), + ISOTROPIE = SIMP(statut='o', typ='TXM', into=('Matériaux isotropes', + 'Matériaux anisotropes', + 'Matériaux orthotropes'), + defaut='Matériaux isotropes'), + proprietes_des_materiaux_isotropes = BLOC(condition="ISOTROPIE=='Mat\351riaux isotropes'", + DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**', + MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**', + CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**', + CONDUCTIVITE_THERMIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')) + ), + proprietes_des_materiaux_orthotropes_2D = BLOC(condition="ISOTROPIE=='Mat\351riaux orthotropes' and DIMENSION==2", + DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**', + MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**', + CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**', + CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'), + CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')) + ), + proprietes_des_materiaux_orthotropes_3D = BLOC(condition="ISOTROPIE=='Mat\351riaux orthotropes' and DIMENSION==3", + DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**', + MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**', + CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**', + CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'), + CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'), + CONDUCTIVITE_EN_Z = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')) + ), + proprietes_des_materiaux_anisotropes_2D = BLOC(condition="ISOTROPIE=='Mat\351riaux anisotropes' and DIMENSION==2", + DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**', + MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**', + CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**', + CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'), + CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'), + ANGLE_SUIVANT_Z = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')) + ), + proprietes_des_materiaux_anisotropes_3D = BLOC(condition="ISOTROPIE=='Mat\351riaux anisotropes' and DIMENSION==3", + DEFINITION_MASSE_VOLUMIQUE=FACT(statut='o',max='**', + MASSE_VOLUMIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CHALEUR_SPECIFIQUE=FACT(statut='o',max='**', + CHALEUR_SPECIFIQUE = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')), + DEFINITION_CONDUCTIVITE_THERMIQUE=FACT(statut='o',max='**', + CONDUCTIVITE_EN_X = SIMP(statut='o',typ='R'), + CONDUCTIVITE_EN_Y = SIMP(statut='o',typ='R'), + CONDUCTIVITE_EN_Z = SIMP(statut='o',typ='R'), + ANGLE_SUIVANT_X = SIMP(statut='o',typ='R'), + ANGLE_SUIVANT_Y = SIMP(statut='o',typ='R'), + ANGLE_SUIVANT_Z = SIMP(statut='o',typ='R'), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES=SIMP(statut='f',typ='TXM')) + ), + ); + +CONDITIONS_INITIALES=PROC(nom="CONDITIONS_INITIALES",op=10, + fr="Définition des conditions initiales", + niveau='cond_init', + Temperature_initiale = FACT(statut='o',max='**', + TEMPERATURE = SIMP(typ='R',statut='o',defaut=20), + REFERENCES = SIMP(statut='o',typ='I',max='**',defaut=-1), + COMMENTAIRES = SIMP(statut='f',typ='TXM') + ) + ); + + +CONDITIONS_LIMITES = PROC(nom='CONDITIONS_LIMITES',op=10, + niveau='cond_limi', + fr="Définition des conditions aux limites", + NOEUD_OU_FACE = SIMP(statut='o',typ='TXM',into=('NOEUD','FACE'),defaut='FACE'), + FLUX_SURFACIQUE=FACT(max='**', + FLUX=SIMP(statut='o',typ='R',defaut=0), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES = SIMP(statut='f',typ='TXM') + ), + DIRICHLET=FACT(max='**', + TEMPERATURE=SIMP(statut='o',typ='R',defaut=20), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES = SIMP(statut='f',typ='TXM') + ), + + COEFFICIENT_ECHANGE=FACT(max='**', + TEMPERATURE=SIMP(statut='o',typ='R',defaut=20), + COEFFICIENT = SIMP(statut='o',typ='R',defaut=0), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES = SIMP(statut='f',typ='TXM') + ), + RESISTANCE_CONTACT=FACT(max='**', + RESISTANCE = SIMP(statut='o',typ='R',defaut=0), + REFERENCES = SIMP(statut='o',typ='I',max='**'), + COMMENTAIRES = SIMP(statut='f',typ='TXM') + ), + ); + diff --git a/Syrthes/editeur.ini b/Syrthes/editeur.ini new file mode 100644 index 00000000..b7ac1321 --- /dev/null +++ b/Syrthes/editeur.ini @@ -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 index 00000000..70176441 --- /dev/null +++ b/Syrthes/eficas_syrthes.py @@ -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 index 00000000..c14833ec --- /dev/null +++ b/Syrthes/prefs.py @@ -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/Tools/__init__.py b/Tools/__init__.py index 0366cee6..c060d833 100644 --- a/Tools/__init__.py +++ b/Tools/__init__.py @@ -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/convert/Parserv5/Translate.py b/convert/Parserv5/Translate.py index 66ddd27c..4cab28d5 100644 --- a/convert/Parserv5/Translate.py +++ b/convert/Parserv5/Translate.py @@ -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 diff --git a/convert/Parserv5/__init__.py b/convert/Parserv5/__init__.py index 96e6d4d3..21ab883a 100644 --- a/convert/Parserv5/__init__.py +++ b/convert/Parserv5/__init__.py @@ -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 diff --git a/convert/Parserv5/conv.py b/convert/Parserv5/conv.py index 8f9621c2..646aef38 100644 --- a/convert/Parserv5/conv.py +++ b/convert/Parserv5/conv.py @@ -1,17 +1,30 @@ -#@ MODIF conv Parsers DATE 17/10/2001 AUTEUR DURAND C.DURAND # CONFIGURATION MANAGEMENT OF EDF VERSION # ====================================================================== -# COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG -# SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND -# REDISTRIBUTION OF THIS FILE. +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# # ====================================================================== + import sys,string import TextTools from tables import ERRORS # -__version__="$Name: V1_1p1 $" -__Id__="$Id: conv.py,v 1.1.1.1 2001/12/04 15:38:23 eficas Exp $" +__version__="$Name: $" +__Id__="$Id: conv.py,v 1.2 2002/05/15 15:32:00 eficas Exp $" # Keywords=('MAILLE_1','MAILLE_2','MAILLE_ESCL','MAILLE_FOND','MAILLE_MAIT','MAILLE_ORIG','MAILLE', @@ -446,6 +459,8 @@ def format_errs(text,tags): def conver(text): from tables import aster_script import re + # On ajoute un '\n' en fin au cas ou il serait absent + text=text+'\n' text=string.upper(text) result, taglist, next = TextTools.tag(text,aster_script) # Pour vérifier les résultats intermédiaires décommenter la ligne suivante diff --git a/convert/Parserv5/tables.py b/convert/Parserv5/tables.py index 513b0011..b258354d 100644 --- a/convert/Parserv5/tables.py +++ b/convert/Parserv5/tables.py @@ -1,4 +1,23 @@ -#@ MODIF tables Parsers DATE 15/02/2001 AUTEUR YESSAYAN A.YESSAYAN +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== + """ Ce fichier définit une table de tags à utiliser avec le package mxTextTools pour décoder un fichier au format Asterv5. @@ -10,7 +29,7 @@ from TextTools import * # __version__="$Name: $" -__Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $" +__Id__="$Id: tables.tag,v 1.1.1.1 2002/03/26 09:08:45 eficas Exp $" # err0='ERR0 , erreur non identifiee : ' @@ -24,9 +43,10 @@ err7='ERR7 , mot cle facteur errone : ' err8='ERR8 , signe = ou ( attendu : ' err9='ERR9 , ( attendue : ' err10='ERR10 , vexpr attendue : ' +err11='ERR11 , ) attendue : ' ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9, - err10) + err10,err11) white_set=set(whitespace) @@ -170,6 +190,16 @@ t_complexe = \ (err7,Table,t_err,MatchFail,MatchOk), )) +# Table pour identifier le keyword PI + +t_PI = \ + ('PI',Table,( + (None,Word,'PI',MatchFail), + (None,IsIn,alpha+'_'+number,MatchOk,+1), + (None,Skip,-1), + (None,Jump,To,MatchFail), + )) + t_vexpr = ( ('par',Is,'(',+5,+1), commespaces + (+1,), @@ -181,7 +211,7 @@ t_vexpr = ( ('sign',IsIn,'+-',+3,+1), commespaces + (+1,), ('vexpr',Table,ThisTable,+19,+10), - ("PI",Word,'PI',+1,+9), + t_PI + (+1,+9), t_ident + (MatchFail,), commespaces + (+1,), ('listpar',Is,'(',+6,+1), # on peut avoir une liste de parametres @@ -307,9 +337,9 @@ t_formule = \ commespaces + (+1,), ('vexpr',Table,t_vexpr,+9), commespaces + (+1,), - (None,Is,')',+8), + (None,Is,')',+9), commespaces + (+1,), - (None,Is,')',+6), + (None,Is,')',+7), commespaces + (+1,), (None,Is,';',+3), (None,AllNotIn,'\n',+1), @@ -318,6 +348,8 @@ t_formule = \ (err0,Table,t_err,MatchFail,MatchOk), # (err9,Table,t_err,MatchFail,MatchOk), + # + (err11,Table,t_err,MatchFail,MatchOk), )) t_nom_ope = \ diff --git a/convert/Parserv5/tables.tag b/convert/Parserv5/tables.tag index 2a28f072..309dd497 100755 --- a/convert/Parserv5/tables.tag +++ b/convert/Parserv5/tables.tag @@ -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: 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: T: - "PI" = Word 'PI' F:next T: + t_PI F:next T: 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: commespaces F:next - Is ')' F: + Is ')' F: commespaces F:next - Is ')' F: + Is ')' F: commespaces F:next Is ';' F: AllNotIn '\n' F:next @@ -298,6 +327,8 @@ t_formule is: err0 = Table t_err F:MatchFail T:MatchOk err9 = Table t_err F:MatchFail T:MatchOk + + err11 = Table t_err F:MatchFail T:MatchOk t_nom_ope is: 'nom_ope' = Table is: diff --git a/convert/__init__.py b/convert/__init__.py index c6d52220..e731b26d 100644 --- a/convert/__init__.py +++ b/convert/__init__.py @@ -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. diff --git a/convert/convert_asterv5.py b/convert/convert_asterv5.py index 780626d8..e025eec2 100644 --- a/convert/convert_asterv5.py +++ b/convert/convert_asterv5.py @@ -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. diff --git a/convert/convert_ini.py b/convert/convert_ini.py index aa32a725..811bc6a5 100644 --- a/convert/convert_ini.py +++ b/convert/convert_ini.py @@ -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. diff --git a/convert/convert_pyth.py b/convert/convert_pyth.py index 30f3b28a..b408ff21 100644 --- a/convert/convert_pyth.py +++ b/convert/convert_pyth.py @@ -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. diff --git a/convert/convert_python.py b/convert/convert_python.py index a5a69cb2..cfe54a6a 100644 --- a/convert/convert_python.py +++ b/convert/convert_python.py @@ -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. diff --git a/convert/parseur_python.py b/convert/parseur_python.py index b999b6ba..b5a45897 100644 --- a/convert/parseur_python.py +++ b/convert/parseur_python.py @@ -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 diff --git a/generator/Formatage.py b/generator/Formatage.py index d54d464c..aaa531a5 100644 --- a/generator/Formatage.py +++ b/generator/Formatage.py @@ -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 diff --git a/generator/__init__.py b/generator/__init__.py index 89d4cb40..39110152 100644 --- a/generator/__init__.py +++ b/generator/__init__.py @@ -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. diff --git a/generator/generator_aplat.py b/generator/generator_aplat.py index c12b6dac..25c3265f 100644 --- a/generator/generator_aplat.py +++ b/generator/generator_aplat.py @@ -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: diff --git a/generator/generator_asterv5.py b/generator/generator_asterv5.py index fa3b9499..08c178af 100644 --- a/generator/generator_asterv5.py +++ b/generator/generator_asterv5.py @@ -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+' ' diff --git a/generator/generator_ini.py b/generator/generator_ini.py index 64b5bfd8..2e2ac93b 100644 --- a/generator/generator_ini.py +++ b/generator/generator_ini.py @@ -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. diff --git a/generator/generator_pyth.py b/generator/generator_pyth.py index 6d911224..34fa5cf7 100644 --- a/generator/generator_pyth.py +++ b/generator/generator_pyth.py @@ -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. diff --git a/generator/generator_python.py b/generator/generator_python.py index 6220c818..fe631f22 100644 --- a/generator/generator_python.py +++ b/generator/generator_python.py @@ -1,3 +1,22 @@ +# CONFIGURATION MANAGEMENT OF EDF VERSION +# ====================================================================== +# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG +# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY +# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY +# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR +# (AT YOUR OPTION) ANY LATER VERSION. +# +# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT +# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF +# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU +# GENERAL PUBLIC LICENSE FOR MORE DETAILS. +# +# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE +# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER, +# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE. +# +# +# ====================================================================== """ Ce module contient le plugin generateur de fichier au format python pour EFICAS. @@ -393,7 +412,7 @@ class PythonGenerator: for arg in liste : l.append(arg) else: - # on a est en présence d'un MCSIMP : on récupère une string + # on est en présence d'un MCSIMP : on récupère une string text =self.generator(v) l.append(v.nom+'='+text) # il faut être plus subtil dans l'ajout de la virgule en différenciant @@ -453,6 +472,8 @@ class PythonGenerator: if hasattr(obj.etape,'sdprods'): if val in obj.etape.sdprods : s = s + "CO('"+ self.generator(val) +"')" + elif val.__class__.__name__ == 'CO': + s = s + "CO('"+ self.generator(val) +"')" else: s = s + self.generator(val) elif isinstance(val,PARAMETRE): @@ -461,6 +482,10 @@ class PythonGenerator: s = s + val.nom else: s = s + self.generator(val) + elif type(val) == types.FloatType : + # Pour un flottant on utilise str qui a une precision de + # "seulement" 12 chiffres : evite les flottants du genre 0.599999999999998 + s = s + str(val) else : s = s + `val` s = s + ',' @@ -472,6 +497,8 @@ class PythonGenerator: if hasattr(obj.etape,'sdprods'): if val in obj.etape.sdprods : s = "CO('"+ self.generator(val) +"')" + elif val.__class__.__name__ == 'CO': + s = "CO('"+ self.generator(val) +"')" else: s = self.generator(val) elif isinstance(val,PARAMETRE): @@ -481,9 +508,8 @@ class PythonGenerator: else: s = self.generator(val) elif type(val) == types.FloatType : - # Pour un réel on fait un formattage spécial - # XXX bizarrement ce n'est pas fait pour une liste - s = repr_float(val) + #s = repr_float(val) + s = str(val) else : s = `val` s= s + ',' -- 2.39.2