From 1eb6ce3492dd4ce1b40d3f9467d5afa2bd673875 Mon Sep 17 00:00:00 2001 From: Yohann Pipeau Date: Thu, 6 Jan 2022 11:27:43 +0100 Subject: [PATCH] Addition of units and descriptions to the parameters in the integration bench catalog --- ReacteurNumerique/cata_RN_EDG_PN.py | 681 ++++++++++++++++++++++------ 1 file changed, 547 insertions(+), 134 deletions(-) diff --git a/ReacteurNumerique/cata_RN_EDG_PN.py b/ReacteurNumerique/cata_RN_EDG_PN.py index a9653ec3..de2d2681 100644 --- a/ReacteurNumerique/cata_RN_EDG_PN.py +++ b/ReacteurNumerique/cata_RN_EDG_PN.py @@ -9,13 +9,15 @@ function so, this module must not use relative import. """ # pylint: disable=too-few-public-methods +# TODO: Create a main object that point on the different subobjects and force its name + # EFICAS from Accas import OPER, BLOC, FACT, SIMP, ASSD, JDC_CATA, VerifTypeTuple, Matrice from Extensions.i18n import tr # Warning: The names of these variables are defined by EFICAS -JdC = JDC_CATA(code='RN_EDG') -VERSION_CATALOGUE = 'V_0' +JdC = JDC_CATA(code="RN_EDG") +VERSION_CATALOGUE = "V_0" # Define the minimum and the maximum number of elements (reflectors and fuel # assemblies) on the core's side @@ -39,7 +41,7 @@ class Tuple: return valeur def info(self): # pylint: disable=missing-function-docstring - return 'Tuple de %s elements' % self.ntuple + return "Tuple de %s elements" % self.ntuple class VerifPostTreatment(VerifTypeTuple): @@ -53,17 +55,18 @@ class VerifPostTreatment(VerifTypeTuple): # pylint: disable=missing-function-docstring # pylint: disable=no-self-use + PHYSICS = ("Neutronics", "Thermalhydraulics") + FORMATS = ("MED", "SUM", "MIN", "MAX", "MEAN") + def __init__(self): - super().__init__(('TXM', 'TXM')) - self.cata_info = '' - self.physValeurs = ('Neutronics', 'Thermalhydraulics') - self.typeValeurs = ('MED', 'SUM', 'MIN', 'MAX', 'MEAN') + super().__init__(("TXM", "TXM")) + self.cata_info = "" def info(self): - return tr(': vérifie les \ntypes dans un tuple') + return tr(": vérifie les \ntypes dans un tuple") def infoErreurListe(self): - return tr('Les types entres ne sont pas permis') + return tr("Les types entres ne sont pas permis") def default(self, valeur): return valeur @@ -74,14 +77,14 @@ class VerifPostTreatment(VerifTypeTuple): def convertItem(self, valeur): if len(valeur) != len(self.typeDesTuples): raise ValueError( - tr('%s devrait être de type %s ') % (valeur, self.typeDesTuples)) + tr("%s devrait être de type %s ") % (valeur, self.typeDesTuples)) ok = self.verifType(valeur) if ok == 0: raise ValueError( - tr('%s devrait être de type %s (%d)') % (valeur, self.typeDesTuples, ok)) + tr("%s devrait être de type %s (%d)") % (valeur, self.typeDesTuples, ok)) if ok < 0: raise ValueError( - tr('%s devrait être dans %s ') % (valeur[1], self.typeValeurs)) + tr("%s devrait être dans %s ") % (valeur[1], self.FORMATS)) return valeur def verifItem(self, valeur): @@ -101,7 +104,7 @@ class VerifPostTreatment(VerifTypeTuple): if isinstance(v, (bytes, str)): ok += 1 if ok == len(self.typeDesTuples): - if valeur[1] in self.typeValeurs: + if valeur[1] in self.FORMATS: return 1 return -1 return 0 @@ -128,14 +131,14 @@ class VerifNeutLib(VerifTypeTuple): # pylint: disable=missing-function-docstring def __init__(self): - super().__init__((_Assembly, 'TXM')) - self.cata_info = '' + super().__init__((_Assembly, "TXM")) + self.cata_info = "" def info(self): - return tr(': vérifie les \ntypes dans un tuple') + return tr(": vérifie les \ntypes dans un tuple") def infoErreurListe(self): - return tr('Les types entres ne sont pas permis') + return tr("Les types entres ne sont pas permis") def default(self, valeur): return valeur @@ -146,11 +149,11 @@ class VerifNeutLib(VerifTypeTuple): def convertItem(self, valeur): if len(valeur) != len(self.typeDesTuples): raise ValueError( - tr('%s devrait être de type %s ') % (valeur, self.typeDesTuples)) + tr("%s devrait être de type %s ") % (valeur, self.typeDesTuples)) ok = self.verifType(valeur) if ok == 0: raise ValueError( - tr('%s devrait être de type %s (%d)') % (valeur, self.typeDesTuples, ok)) + tr("%s devrait être de type %s (%d)") % (valeur, self.typeDesTuples, ok)) return valeur def verifItem(self, valeur): @@ -206,193 +209,603 @@ class _ScenarioData(ASSD): Assembly = OPER( - nom='Assembly', + nom="Assembly", sd_prod=_Assembly, - assembly_type=SIMP(statut='o', typ='TXM', into=('UOX', 'MOX', 'REF')), + assembly_type=SIMP( + statut="o", + typ="TXM", + into=("UOX", "MOX", "REF"), + fr="Type d'élément cœur (assemblage combustible ou réflecteur", + ang="Type of the core element (fuel assembly or reflector"), description=BLOC( - condition='assembly_type != "REF"', - assembly_width=SIMP(statut='o', typ='R'), - fuel_density=SIMP(statut='o', typ='R', defaut=0.95), + condition="assembly_type != 'REF'", + assembly_width=SIMP( + statut="o", + typ="R", + unite="m", + fr="Pas inter-assemblage dans le cœur", + ang="Fuel assembly pitch in the core"), + fuel_density=SIMP( + statut="o", + typ="R", + defaut=0.95, + unite="g/cm3", + fr=("Ratio entre masse volumique nominale et la masse volumique " + "théorique des pastilles combustible"), + ang=("Ratio between the nominal density and the theoretical " + "density of the fuel pellets")), radial_description=FACT( - statut='o', - clad_outer_radius=SIMP(statut='o', typ='R'), - guide_tube_outer_radius=SIMP(statut='o', typ='R'), - fuel_rod_pitch=SIMP(statut='o', typ='R'), - nfuel_rods=SIMP(statut='o', typ='I')), + statut="o", + clad_outer_radius=SIMP( + statut="o", + typ="R", + unite="m", + fr="Rayon externe de la gaine des crayons combustible", + ang="Clad external radius of the fuel pins"), + guide_tube_outer_radius=SIMP( + statut="o", + typ="R", + unite="m", + fr="Rayon externe des tubes guides", + ang="Clad external radius of the guide tubes"), + fuel_rod_pitch=SIMP( + statut="o", + typ="R", + unite="m", + fr="Pas inter-crayon dans l'assemblage", + ang="Fuel pin pitch in the assembly"), + nfuel_rods=SIMP( + statut="o", + typ="I", + fr="Nombre de crayons combustibles dans l'assemblage", + ang="Number of fuel pins in the assembly"), + fr="Description radiale de l'assemblage combustible", + ang="Fuel assembly radial description"), axial_description=FACT( - statut='o', - active_length_start=SIMP(statut='o', typ='R'), - active_length_end=SIMP(statut='o', typ='R')), + statut="o", + active_length_start=SIMP( + statut="o", + typ="R", + unite="m", + fr="Altitude basse de la partie active", + ang="Lower altitude of the active part"), + active_length_end=SIMP( + statut="o", + typ="R", + unite="m", + fr="Altitude haute de la partie active", + ang="Upper altitude of the active part"), + fr="Description axiale de l'assemblage combustible", + ang="Fuel assembly axial description"), grids=FACT( - statut='o', + statut="o", mixing=FACT( - statut='o', - positions=SIMP(statut='f', typ='R', max='**'), - size=SIMP(statut='o', typ='R')), + statut="o", + positions=SIMP( + statut="f", + typ="R", + max="**", + unite="m", + fr="Altitude basse de la grille", + ang="Grid lower altitude"), + size=SIMP( + statut="o", + typ="R", + unite="m", + fr="Hauteur de la grille", + ang="Grid height"), + fr="Description des grilles de mélange", + ang="Mixing grids description"), non_mixing=FACT( - statut='o', - positions=SIMP(statut='f', typ='R', max='**'), - size=SIMP(statut='o', typ='R'))))) - - + statut="o", + positions=SIMP( + statut="f", + typ="R", + max="**", + unite="m", + fr="Altitude basse de la grille", + ang="Grid lower altitude"), + size=SIMP( + statut="o", + typ="R", + unite="m", + fr="Hauteur de la grille", + ang="Grid height"), + fr="Description des grilles de maintien", + ang="Holding grids description"), + fr="Description des grilles", + ang="Grids description"), + fr="Description d'un assemblage combustible", + ang="Fuel assembly description"), + fr="Description d'un élément du cœur", + ang="Core element description") + + +# TODO: Define the names of the possible compositions (Black, Grey, B4C, Hafnium and Pyrex) RodBank = OPER( - nom='RodBank', + nom="RodBank", sd_prod=_RodBank, - rod_type=SIMP(statut='o', typ='TXM', into=('homogeneous', 'heterogeneous')), + rod_type=SIMP( + statut="o", + typ="TXM", + into=("homogeneous", "heterogeneous"), + fr="Type de grappes absorbantes", + ang="Type of rod clusters"), description_HOM=BLOC( - condition='rod_type == "homogeneous"', - rod_composition=SIMP(statut='o', typ='TXM')), + condition="rod_type == 'homogeneous'", + rod_composition=SIMP( + statut="o", + typ="TXM", + fr="Type de matériau absorbant des grappes absorbantes", + ang="Absorbing material type of the rod clusters"), + fr="Description d'un groupe de grappes absorbantes homogènes axialement", + ang="Axially homogeneous rod bank description"), description_HET=BLOC( - condition='rod_type == "heterogeneous"', - bottom_composition=SIMP(statut='o', typ='TXM'), - splitting_heigh=SIMP(statut='o', typ='R'), - upper_composition=SIMP(statut='o', typ='TXM')), - step_height=SIMP(statut='o', typ='R'), - nsteps=SIMP(statut='o', typ='I')) + condition="rod_type == 'heterogeneous'", + bottom_composition=SIMP( + statut="o", + typ="TXM", + fr="Type de matériau absorbant dans la partie basse des grappes absorantes", + ang="Absorbing material type in the lower part of the rod clusters"), + splitting_heigh=SIMP( + statut="o", + typ="R", + unite="m", + fr=("Altitude de séparation entre la partie haute et la partie " + "basse des grappes absorbantes"), + ang=("Splitting height between the upper part and the lower part " + "of the rod clusters")), + upper_composition=SIMP( + statut="o", + typ="TXM", + fr="Type de matériau absorbant dans la partie haute des grappes absorantes", + ang="Absorbing material type in the upper part of the rod clusters"), + fr="Description d'un groupe de grappes absorbantes hétérogène axialement", + ang="Axially heterogeneous rod bank description"), + step_height=SIMP( + statut="o", + typ="R", + unite="m", + fr="Hauteur d'un pas", + ang="Step height"), + nsteps=SIMP( + statut="o", + typ="I", + fr="Nombre de pas du groupe de grappes", + ang="Rod bank steps number"), + fr="Description d'un groupe de grappes absorbantes", + ang="Rod bank description") def gen_assembly_maps(): """Generate all the possible maps (one for each possible core size) for the data cointained in ``Techno_data.radial_description.assembly_map``.""" # Build the default axes names - xsym_list = list('ABCDEFGHJKLNPRSTUVWXYZ') + xsym_list = list("ABCDEFGHJKLNPRSTUVWXYZ") xsym_list.reverse() - ysym_list = ['%02d' % i for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS + 1)] + ysym_list = ["%02d" % i for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS + 1)] ysym_list.reverse() def_xaxis = {} def_yaxis = {} for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS + 1): - def_xaxis[i] = ['RW'] + xsym_list[-i:] + ['RE'] - def_yaxis[i] = ['RS'] + ysym_list[-i:] + ['RN'] + def_xaxis[i] = ["RW"] + xsym_list[-i:] + ["RE"] + def_yaxis[i] = ["RS"] + ysym_list[-i:] + ["RN"] dico = {} for i in range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS): - dico['assembly_map_%d' % i] = BLOC( - condition='nb_assembly==%d' % i, - xaxis=SIMP(statut='o', typ='TXM', min=i + 2, max=i + 2, defaut=def_xaxis[i]), - yaxis=SIMP(statut='o', typ='TXM', min=i + 2, max=i + 2, defaut=def_yaxis[i]), + dico["assembly_map_%d" % i] = BLOC( + condition="nb_assembly == %d" % i, + xaxis=SIMP( + statut="o", + typ="TXM", + min=i + 2, + max=i + 2, + defaut=def_xaxis[i], + fr="Nom des repères radiaux du cœur suivant l'axe ouest-est", + ang="Name of core radial marks following the west-east axis"), + yaxis=SIMP( + statut="o", + typ="TXM", + min=i + 2, + max=i + 2, + defaut=def_yaxis[i], + fr="Nom des repères radiaux du cœur suivant l'axe nord-sud", + ang="Name of core radial marks following the north-south axis"), assembly_map=SIMP( - statut='o', + statut="o", typ=Matrice( nbLigs=i + 2, nbCols=i + 2, typElt=_Assembly, listeHeaders=( - ('RW','S','R','P','N','L','K','J','H','G','F','E','D','C','B','A','RE',), - ('RS','15','14','13','12','11','10','09','08','07','06','05','04','03','02','01','RN',)), - defaut=(i + 2) * [(i + 2) * ['.']], - coloree=True)), + ("RW","S","R","P","N","L","K","J","H","G","F","E","D","C","B","A","RE",), + ("RS","15","14","13","12","11","10","09","08","07","06","05","04","03","02","01","RN",)), + defaut=(i + 2) * [(i + 2) * ["."]], + coloree=True), + fr=("Répartition radiale des assemblages combustibles et des " + "réflecteurs dans le cœur"), + ang=("Radial repartition of the fuel assemblies and the " + "reflectors in the core")), rod_map=SIMP( - statut='o', + statut="o", typ=Matrice( nbLigs=i + 2, nbCols=i + 2, valSup=1, valMin=-1, - typElt='TXM', - listeHeaders=None), - defaut=(i + 2) * [(i + 2) * ['.']]), + typElt="TXM", + listeHeaders=None, + coloree=True), + defaut=(i + 2) * [(i + 2) * ["."]], + fr="Répartition radiale des groupes de grappes dans le cœur", + ang="Rod banks radial repartition in the core"), BU_map=SIMP( - statut='o', + statut="o", typ=Matrice( nbLigs=i + 2, nbCols=i + 2, valSup=90000., valMin=0., - typElt='R', + typElt="R", listeHeaders=None, coloree=True), - defaut=(i + 2) * [(i + 2) * ['.']])) + defaut=(i + 2) * [(i + 2) * ["."]], + fr="Taux de combustion moyen des assemblages combustibles en GW.j/t", + ang="Average burnup of the fuel assemblies in GW.d/t"), + fr="Description radiale du cœur", + ang="Core radial description") return dico Techno_data = OPER( - nom='Techno_data', + nom="Techno_data", sd_prod=_TechnoData, - assembly_list=SIMP(statut='o', typ=_Assembly, min=1, max='**'), - rodbank_list=SIMP(statut='o', typ=_RodBank, min=0, max='**'), + assembly_list=SIMP( + statut="o", + typ=_Assembly, + min=1, + max="**", + fr="Sélection des assemblages combustible", + ang="Fuel assemblies selection"), + rodbank_list=SIMP( + statut="o", + typ=_RodBank, + min=0, + max="**", + fr="Sélection des groupes de grappes", + ang="Rod banks selection"), radial_description=FACT( - statut='o', - nb_assembly=SIMP(statut='o', typ='I', into=list(range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS))), + statut="o", + nb_assembly=SIMP( + statut="o", + typ="I", + into=list(range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS)), + fr="Nombre d'éléments combustible sur la tranche du cœur", + ang="Number of fuel elements on one side of the core"), **(gen_assembly_maps())), axial_description=FACT( - statut='o', - lower_refl_size=SIMP(statut='o', typ='R'), - upper_refl_size=SIMP(statut='o', typ='R')), - nominal_power=SIMP(statut='o', typ='R'), - Fuel_power_fraction=SIMP(statut='o', typ='R', defaut=0.974), - by_pass=SIMP(statut='o', typ='R', defaut=0.07), - core_volumic_flowrate=SIMP(statut='o', typ='R')) - - + statut="o", + lower_refl_size=SIMP( + statut="o", + typ="R", + unite="m", + fr="Hauteur du réflecteur axial bas", + ang="Height of bottom axial reflector"), + upper_refl_size=SIMP( + statut="o", + typ="R", + unite="m", + fr="Hauteur du réflecteur axial haut", + ang="Height of top axial reflector")), + nominal_power=SIMP( + statut="o", + typ="R", + unite="W", + fr="Puissance thermique nominale du cœur", + ang="Nominal thermal power of the core"), + Fuel_power_fraction=SIMP( + statut="o", + typ="R", + defaut=0.974, + fr="Fraction de la puissance dissipée dans le combustible", + ang="Power fraction dissipated in the fuel"), + by_pass=SIMP( + statut="o", + typ="R", + defaut=0.07, + fr="Fraction du débit de bypass cœur", + ang="Bypass core flow fraction"), + core_volumic_flowrate=SIMP( + statut="o", + typ="R", + unite="m3/h", + fr="Débit volumique cœur", + ang="Core volume flowrate"), + fr="Description technologique du cœur", + ang="Core technological description") + + +# TODO: Split this class in two: neutronic and thermalhydraulic) +# TODO: Or split this class in N classes (one for each code) Model_data = OPER( - nom='Model_data', + nom="Model_data", sd_prod=_ModelData, - physics=SIMP(statut='o', typ='TXM', into=('Neutronics', 'Thermalhydraulics')), - scale=SIMP(statut='o', typ='TXM', into=('system', 'component', 'local')), + physics=SIMP( + statut="o", + typ="TXM", + into=("Neutronics", "Thermalhydraulics"), + fr="Sélection de la physique du modèle", + ang="Physic model selection"), + scale=SIMP( + statut="o", + typ="TXM", + into=("system", "component", "local"), + fr="Sélection de l'échelle du modèle", + ang="Scale model selection"), b_neutro_compo=BLOC( - condition='physics=="Neutronics" and scale=="component"', - library_map=SIMP(statut='f', typ=Tuple(2), validators=VerifNeutLib(), max='**'), - code=SIMP(statut='o', typ='TXM', into=('COCAGNE', 'APOLLO3')), + condition="physics == 'Neutronics' and scale == 'component'", + # TODO: Split this in two: fuel assemblies libraries and reflector libraries) + # TODO: Use a triplet (assembly, filename, pattern) instead of a doublet for the fuel assemblies libraries + # TODO: Use a doublet (reflector, filename) for the reflector libraries + library_map=SIMP( + statut="f", + typ=Tuple(2), + validators=VerifNeutLib(), + max="**", + fr=("Association des éléments du cœur aux bibliothèques neutroniques " + "sous la forme (assemblage combustible, nom du fichier@pattern) " + "pour les bibliothèques assemblages et sous la forme " + "(réflecteur, nom du fichier) pour les bibliothèques réflecteur"), + ang=("Association between the core elements and the neutronic libraries " + "in the form (fuel assembly, filename@pattern) for the fuel assembly " + "libraries and in the form of (reflector, filename) for the " + "reflector libraries")), + code=SIMP( + statut="o", + typ="TXM", + into=("COCAGNE", "APOLLO3"), + fr="Sélection du code de neutronique cœur", + ang="Core neutronic code selection"), + # TODO: Implement the *4x4* mesh radial_meshing=FACT( - statut='o', - flux_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')), + statut="o", + flux_solver=SIMP( + statut="o", + typ="TXM", + into=("subdivision", "pin-by-pin"), + fr="Type de maillage radial du solveur de flux", + ang="Radial mesh type for the flux solver"), b_flux_subdivision=BLOC( - condition='flux_solver=="subdivision"', - flux_subdivision=SIMP(statut='o', typ='I')), - feedback_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')), + condition="flux_solver == 'subdivision'", + flux_subdivision=SIMP( + statut="o", + typ="I", + fr=("Nombre de sous-divisions à appliquer à chaque maille " + "radiale pour le solveur de flux"), + ang=("Subdivision number to apply to all radial meshes for " + "the flux solver")), + fr=("Paramètres pour les maillages radiaux de type subdivisé " + "pour le solveur de flux"), + ang=("Parameters for the subdivided radial meshes types for the " + "flux solver")), + feedback_solver=SIMP( + statut="o", + typ="TXM", + into=("subdivision", "pin-by-pin"), + fr="Type de maillage radial du solveur de contre-réaction", + ang="Radial mesh type for the feedback solver"), b_feedback_subdivision=BLOC( - condition='feedback_solver=="subdivision"', - feedback_subdivision=SIMP(statut='o', typ='I')))), + condition="feedback_solver == 'subdivision'", + feedback_subdivision=SIMP( + statut="o", + typ="I", + fr=("Nombre de sous-divisions à appliquer à chaque maille " + "radiale pour le solveur de contre-réaction"), + ang=("Subdivision number to apply to all radial meshes for " + "the feedback solver")), + fr=("Paramètres pour les maillages radiaux de type subdivisé " + "pour le solveur de contre-réaction"), + ang=("Parameters for the subdivided radial meshes types for the " + "feedback solver")), + fr="Maillage radial du cœur", + ang="Core radial meshing"), + fr="Description de la modélisation neutronique à l'échelle du composant", + ang="Neutronic modeling description at the component scale"), b_thermo_compo=BLOC( - condition='physics=="Thermalhydraulics" and scale=="component"', - code=SIMP(statut='o', typ='TXM', into=('THYC', 'CATHARE3', 'FLICA4')), + condition="physics == 'Thermalhydraulics' and scale == 'component'", + code=SIMP( + statut="o", + typ="TXM", + into=("THYC", "CATHARE3", "FLICA4"), + fr="Sélection du code de thermohydraulique cœur", + ang="Core thermalhydraulic code selection"), radial_meshing=FACT( - statut='o', - fluid=SIMP(statut='o', typ='TXM', into=('subdivision', 'subchannel')), + statut="o", + fluid=SIMP( + statut="o", + typ="TXM", + into=("subdivision", "subchannel"), + fr="Méthode de maillage radial", + ang="Radial meshing method"), b_fluid_subdivision=BLOC( - condition='fluid=="subdivision"', - fluid_subdivision=SIMP(statut='o', typ='I')), - pellet=SIMP(statut='o', typ='I'), - clad=SIMP(statut='o', typ='I'))), + condition="fluid == 'subdivision'", + fluid_subdivision=SIMP( + statut="o", + typ="I", + fr="Nombre de mailles radiales dans les assemblages combustibles", + ang="Radial mesh number in the fuel assemblies"), + fr="Données spécifiques au maillage radial par subdivision", + ang="Specific data for the radial meshing by subdivision"), + pellet=SIMP( + statut="o", + typ="I", + fr="Nombre de mailles radiales dans la pastille combustible", + ang="Radial mesh number in the fuel pellet"), + clad=SIMP( + statut="o", + typ="I", + fr="Nombre de mailles radiales dans la gaine des crayons combustibles", + ang="Radial mesh number in the clad of the fuel pins"), + fr="Description du maillage radial thermohydraulique à l'échelle du composant", + ang="Thermalhydraulic radial meshing description at the component scale"), + fr="Description de la modélisation thermohydraulique à l'échelle du composant", + ang="Thermalhydraulic modeling description at the component scale"), b_scale_compo=BLOC( - condition='scale=="component"', + condition="scale == 'component'", axial_meshing=FACT( - statut='o', - lower_refl=SIMP(statut='o', typ='I'), - fuel=SIMP(statut='o', typ='I'), - upper_refl=SIMP(statut='o', typ='I'))), + statut="o", + lower_refl=SIMP( + statut="o", + typ="I", + fr="Nombre de mailles axiales dans le réflecteur bas", + ang="Axial mesh number in the lower reflector"), + fuel=SIMP( + statut="o", + typ="I", + fr="Nombre de mailles axiales dans la partie active de l'assemblage combustible", + ang="Axial mesh number in the active part of the fuel assembly"), + upper_refl=SIMP( + statut="o", + typ="I", + fr="Nombre de mailles axiales dans le réflecteur haut", + ang="Axial mesh number in the upper reflector"), + fr="Maillage axial du cœur", + ang="Core axial meshing"), + fr="Description de la modélisation à l'échelle du composant", + ang="Modeling description at the component scale"), b_scale_local=BLOC( - condition='scale=="local"', - mesh_file=SIMP(statut='o', typ='Fichier'))) + condition="scale == 'local'", + mesh_file=SIMP( + statut="o", + typ="Fichier", + fr="Nom du fichier décrivant le maillage", + ang="Name of the file describing the mesh")), + fr="Description de la modélisation physique", + ang="Physical modeling description") Scenario_data = OPER( - nom='Scenario_data', + nom="Scenario_data", sd_prod=_ScenarioData, - initial_power=SIMP(statut='o', typ='R', val_min=0., defaut=100.), + initial_power=SIMP( + statut="o", + typ="R", + val_min=0., + defaut=100., + fr="Puissance thermique initiale du cœur", + ang="Initial thermal power of the core"), initial_power_unit=SIMP( - statut='o', typ='TXM', into=('% Nominal power', 'W'), defaut='% Nominal power'), - initial_core_inlet_temperature=SIMP(statut='o', typ='R', val_min=0., defaut=280.), - initial_boron_concentration=SIMP(statut='o', typ='R', val_min=0., defaut=1300.), - initial_inlet_pressure=SIMP(statut='o', typ='R', defaut=160.2), - initial_outlet_pressure=SIMP(statut='o', typ='R', defaut=157.2), + statut="o", + typ="TXM", + into=("% Nominal power", "W"), + defaut="% Nominal power", + fr="Unité de la puissance thermique initiale du cœur", + ang="Unit of the initial thermal power of the core"), + initial_core_inlet_temperature=SIMP( + statut="o", + typ="R", + val_min=0., + defaut=280., + unite="°C", + fr="Température initiale de l'eau à l'entrée du cœur", + ang="Initial water temperature at the inlet of the core"), + initial_boron_concentration=SIMP( + statut="o", + typ="R", + val_min=0., + defaut=1300., + unite="ppm", + fr="Concentration en bore initiale", + ang="Initial boron concentration"), + initial_inlet_pressure=SIMP( + statut="o", + typ="R", + val_min=0., + defaut=160.2, + unite="bar", + fr="Pression initiale de l'eau à l'entrée du cœur", + ang="Initial water pressure at the inlet of the core"), + initial_outlet_pressure=SIMP( + statut="o", + typ="R", + val_min=0., + defaut=157.2, + unite="bar", + fr="Pression initiale de l'eau à la sortie du cœur", + ang="Initial water pressure at the outlet of the core"), initial_rod_positions=SIMP( - statut='o', - typ=Tuple(2), - validators=VerifTypeTuple(('TXM', 'I')), - ang='Type@label, position (e.g. RodBank@RB, 0)', - max='**'), - scenario_type=SIMP(statut='o', typ='TXM', into=('RIA', )), + statut="o", + typ=Tuple(2), # TODO: Use a triplet (type, name, position) instead of a doublet + validators=VerifTypeTuple(("TXM", "I")), + max="**", + unite="extracted steps", + fr=("Position initiale des groupes de grappes et des grappes dans le " + "cœur sous la forme (type@nom, position) " + "(ex. (Rodbank@RB, 62) pour le groupe de grappe RB positionné à 62 " + "pas extraits et (Rodcluster@H08, 0) pour la grappe H08 " + "complètement insérée)"), + ang=("Initial position of the rod banks and the rod clusters in the " + "core in the form (type@name, position) " + "(e.g. (Rodbank@RB, 62) for the RB rod bank placed at 62 " + "extracted steps and (Rodcluster@H08, 0) for the rod cluster H08 " + "completely inserted)")), + scenario_type=SIMP( + statut="o", + typ="TXM", + into=("RIA", ), + fr="Type de transitoire à modéliser", + ang="Type of transient to model"), b_ria=BLOC( - condition='scenario_type=="RIA"', - ejected_rod=SIMP(statut='o', typ='TXM'), + condition="scenario_type == 'RIA'", + ejected_rod=SIMP( + statut="o", + typ="TXM", + fr="Nom de la grappe éjectée", + ang="Name of the ejected rod cluster"), rod_position_program=SIMP( - statut='o', typ=Tuple(2), validators=VerifTypeTuple(('R', 'I')), max='**'), - SCRAM=SIMP(statut='o', typ='TXM', into=('YES', 'NO')), + statut="o", + typ=Tuple(2), + validators=VerifTypeTuple(("R", "I")), + max="**", + unite="s, extracted steps", + fr="Loi d'éjection à appliquer à la grappe sous la forme (temps, position)", + ang="Ejection law to apply to the ejected rod cluster in the form (time, position)"), + SCRAM=SIMP( + statut="o", + typ="TXM", + into=("YES", "NO"), + fr="Activation/désactivation de l'arrêt automatique du réacteur", + ang="Activation/deactivation of automatic reactor shutdown"), SCRAM_option=BLOC( - condition='SCRAM == "YES"', - SCRAM_power=SIMP(statut='o', typ='R'), - complete_SCRAM_time=SIMP(statut='o', typ='R'))), + condition="SCRAM == 'YES'", + SCRAM_power=SIMP( + statut="o", + typ="R", + unite="MW", + fr=("Puissance thermique du cœur déclenchant un arrêt " + "automatique du réacteur"), + ang="Core thermal power triggering an automatic reactor shutdown"), + complete_SCRAM_time=SIMP( + statut="o", + typ="R", + unite="s", + fr="Temps de chute des grappes", + ang="Rod cluster fall time")), + fr="Données du transitoire 'accident de réactivité'", + ang="Data of the 'Reactivity-initiated Accident' transient"), post_processing=SIMP( - statut='f', typ=Tuple(2), validators=VerifPostTreatment(), max='**')) + statut="f", + typ=Tuple(2), # TODO: Use a triplet (parameter, physic, format) instead of a doublet + validators=VerifPostTreatment(), + max="**", + # TODO: Give all the possible parameters depending of the physics + fr=("Données de sortie du calcul sous la forme (paramètre@physique, format). " + "'physique' peut valoir {physics!r} et 'format' peut valoir {formats!r}".format( + physics=VerifPostTreatment.PHYSICS, + formats=VerifPostTreatment.FORMATS)), + ang=("Output computed data in function of time in the form (parameter@physic, format). " + "'physic' can be {physics!r} and 'format' can be {formats!r})".format( + physics=VerifPostTreatment.PHYSICS, + formats=VerifPostTreatment.FORMATS))), + fr="Description du transitoire", + ang="Transient description") -- 2.39.2