]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
Bringing the integration bench catalog into compliance with pylint
authorYohann Pipeau <yohann.pipeau@edf.fr>
Thu, 6 Jan 2022 10:13:16 +0000 (11:13 +0100)
committerEric Fayolle <eric.fayolle@edf.fr>
Fri, 8 Apr 2022 08:39:57 +0000 (10:39 +0200)
ReacteurNumerique/cata_RN_EDG_PN.py

index fe1126a108133f5852f4888866011755585d8d7b..a9653ec38487774ece3ef8524283d83689303d9e 100644 (file)
@@ -1,40 +1,35 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2008-2018 EDF R&D
-#
-# This file is part of SALOME ADAO module
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-import os
+
+"""Definition of the data model used by the integration bench.
+
+Warnings
+--------
+EFICAS will import this file as Python module with the ``__import__`` special
+function so, this module must not use relative import.
+"""
+# pylint: disable=too-few-public-methods
+
+# EFICAS
 from Accas import OPER, BLOC, FACT, SIMP, ASSD, JDC_CATA, VerifTypeTuple, Matrice
 from Extensions.i18n import tr
-import types
-monFichier = os.path.abspath(__file__)
 
-JdC = JDC_CATA(
-    code='RN_EDG'
-)
+# Warning: The names of these variables are defined by EFICAS
+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
+NMIN_CORE_FUEL_ELTS = 1
+NMAX_CORE_FUEL_ELTS = 18
 
-NMIN_ASSEMBLY = 1
-NMAX_ASSEMBLY = 18
+class Tuple:
+    """Organize the data into a fixed size tuple.
 
+    Warnings
+    --------
+    This class respect the EFICAS conventions.
+    """
 
-class Tuple:
     def __init__(self, ntuple):
         self.ntuple = ntuple
 
@@ -43,23 +38,32 @@ class Tuple:
             return None
         return valeur
 
-    def info(self):
-        return "Tuple de %s elements" % self.ntuple
+    def info(self):  # pylint: disable=missing-function-docstring
+        return 'Tuple de %s elements' % self.ntuple
 
 
 class VerifPostTreatment(VerifTypeTuple):
+    """Validate the data comming from ``Scenario_data.post_processing``.
+
+    Warnings
+    --------
+    This class respect the EFICAS conventions.
+    """
+    # pylint: disable=invalid-name
+    # pylint: disable=missing-function-docstring
+    # pylint: disable=no-self-use
 
     def __init__(self):
-        super(VerifPostTreatment, self).__init__(('TXM', 'TXM'))
-        self.cata_info = ""
+        super().__init__(('TXM', 'TXM'))
+        self.cata_info = ''
         self.physValeurs = ('Neutronics', 'Thermalhydraulics')
         self.typeValeurs = ('MED', 'SUM', 'MIN', 'MAX', 'MEAN')
 
     def info(self):
-        return tr(": verifie 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
@@ -70,14 +74,14 @@ class VerifPostTreatment(VerifTypeTuple):
     def convertItem(self, valeur):
         if len(valeur) != len(self.typeDesTuples):
             raise ValueError(
-                tr("%s devrait etre 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 etre 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 etre dans %s ") % (valeur[1], self.typeValeurs))
+                tr('%s devrait être dans %s ') % (valeur[1], self.typeValeurs))
         return valeur
 
     def verifItem(self, valeur):
@@ -87,17 +91,17 @@ class VerifPostTreatment(VerifTypeTuple):
             ok = self.verifType(valeur)
             if ok != 1:
                 return 0
-        except:
+        except:  # pylint: disable=bare-except
             return 0
         return 1
 
-    def verifType(self, valeur):
+    def verifType(self, valeur):  # pylint: disable=arguments-differ
         ok = 0
         for v in valeur:
-            if type(v) == bytes or type(v) == str:
+            if isinstance(v, (bytes, str)):
                 ok += 1
         if ok == len(self.typeDesTuples):
-            if valeur[1] in self.typeValeurs:  # and valeur[1] in self.physValeurs:
+            if valeur[1] in self.typeValeurs:
                 return 1
             return -1
         return 0
@@ -113,16 +117,25 @@ class VerifPostTreatment(VerifTypeTuple):
 
 
 class VerifNeutLib(VerifTypeTuple):
+    """Validate the data comming from ``Model_data.b_neutro_compo.library_map``.
+
+    Warnings
+    --------
+    This class respect the EFICAS conventions.
+    """
+    # pylint: disable=invalid-name
+    # pylint: disable=no-self-use
+    # pylint: disable=missing-function-docstring
 
     def __init__(self):
-        super(VerifNeutLib, self).__init__((myAssembly, 'TXM'))
-        self.cata_info = ""
+        super().__init__((_Assembly, 'TXM'))
+        self.cata_info = ''
 
     def info(self):
-        return tr(": verifie 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
@@ -133,11 +146,11 @@ class VerifNeutLib(VerifTypeTuple):
     def convertItem(self, valeur):
         if len(valeur) != len(self.typeDesTuples):
             raise ValueError(
-                tr("%s devrait etre 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 etre 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):
@@ -147,16 +160,16 @@ class VerifNeutLib(VerifTypeTuple):
             ok = self.verifType(valeur)
             if ok != 1:
                 return 0
-        except:
+        except:  # pylint: disable=bare-except
             return 0
         return 1
 
-    def verifType(self, valeur):
+    def verifType(self, valeur):  # pylint: disable=arguments-differ
         ok = 0
         a, v = valeur
-        if isinstance(a, myAssembly):
+        if isinstance(a, _Assembly):
             ok += 1
-        if type(v) == bytes or type(v) == str:
+        if isinstance(v, (bytes, str)):
             ok += 1
         if ok == len(self.typeDesTuples):
             return 1
@@ -172,214 +185,214 @@ class VerifNeutLib(VerifTypeTuple):
         return 0
 
 
-class myAssembly(ASSD):
+class _Assembly(ASSD):
     pass
 
 
-class myTechnoData(ASSD):
+class _TechnoData(ASSD):
     pass
 
 
-class myRodBank(ASSD):
+class _RodBank(ASSD):
     pass
 
 
-class myModelData(ASSD):
+class _ModelData(ASSD):
     pass
 
 
-class myScenarioData(ASSD):
+class _ScenarioData(ASSD):
     pass
 
 
-Assembly = OPER(nom='Assembly', sd_prod=myAssembly,
-                #assembly_name=SIMP(statut='o', typ='TXM'),
-                assembly_type=SIMP(statut='o', typ='TXM', into=("UOX", "MOX", "REF")),
-                description=BLOC(condition='assembly_type != "REF"',
-                                 assembly_width=SIMP(statut='o', typ='R'),
-                                 fuel_density=SIMP(statut='o', typ='R', defaut=0.95),
-                                 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')),
-                                 axial_description=FACT(statut='o',
-                                                        active_length_start=SIMP(statut='o', typ='R'),
-                                                        active_length_end=SIMP(statut='o', typ='R')),
-                                 grids=FACT(statut='o',
-                                            mixing=FACT(statut='o',
-                                                        positions=SIMP(
-                                                            statut='f', typ='R', max="**"),
-                                                        size=SIMP(statut='o', typ='R')),
-                                            non_mixing=FACT(statut='o',
-                                                            positions=SIMP(
-                                                                statut='f', typ='R', max='**'),
-                                                            size=SIMP(statut='o', typ='R')),
-                                            )
-                                 )
-                )
-
-
-RodBank = OPER(nom="RodBank", sd_prod=myRodBank,
-               #rodbank_name=SIMP(statut='o', typ='TXM'),
-               rod_type=SIMP(statut='o', typ='TXM', into=("homogeneous", "heterogeneous")),
-               description_HOM=BLOC(condition='rod_type == "homogeneous"',
-                                    rod_composition=SIMP(statut='o', typ='TXM')),
-               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'))
-
-
-def add_lr_refl(ass_list):
-    return ["RW"] + ass_list + ["RE"]
-
-
-def add_tb_refl(ass_list):
-    return ["RS"] + ass_list + ["RN"]
-
-
-def generate_ass_map(nass_list):
-    xsym_list = [a for a in 'ABCDEFGHJKLNPRSTUVWXYZ']
+Assembly = OPER(
+    nom='Assembly',
+    sd_prod=_Assembly,
+    assembly_type=SIMP(statut='o', typ='TXM', into=('UOX', 'MOX', 'REF')),
+    description=BLOC(
+        condition='assembly_type != "REF"',
+        assembly_width=SIMP(statut='o', typ='R'),
+        fuel_density=SIMP(statut='o', typ='R', defaut=0.95),
+        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')),
+        axial_description=FACT(
+            statut='o',
+            active_length_start=SIMP(statut='o', typ='R'),
+            active_length_end=SIMP(statut='o', typ='R')),
+        grids=FACT(
+            statut='o',
+            mixing=FACT(
+                statut='o',
+                positions=SIMP(statut='f', typ='R', max='**'),
+                size=SIMP(statut='o', typ='R')),
+            non_mixing=FACT(
+                statut='o',
+                positions=SIMP(statut='f', typ='R', max='**'),
+                size=SIMP(statut='o', typ='R')))))
+
+
+RodBank = OPER(
+    nom='RodBank',
+    sd_prod=_RodBank,
+    rod_type=SIMP(statut='o', typ='TXM', into=('homogeneous', 'heterogeneous')),
+    description_HOM=BLOC(
+        condition='rod_type == "homogeneous"',
+        rod_composition=SIMP(statut='o', typ='TXM')),
+    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'))
+
+
+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.reverse()
-    ysym_list = ["%02d" % i for i in range(NMIN_ASSEMBLY, NMAX_ASSEMBLY+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 n in range(NMIN_ASSEMBLY, NMAX_ASSEMBLY+1):
-        def_xaxis[n] = add_lr_refl(xsym_list[-n:])
-        def_yaxis[n] = add_tb_refl(ysym_list[-n:])
+    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']
 
     dico = {}
-    for n in nass_list:
-        dico['assembly_map_%d' % n] = BLOC(condition="nb_assembly==%d" % n,
-                                           xaxis=SIMP(statut='o',
-                                                      typ='TXM',
-                                                      min=n+2, max=n+2,
-                                                      defaut=def_xaxis[n]),
-                                           yaxis=SIMP(statut='o',
-                                                      typ='TXM',
-                                                      min=n+2, max=n+2,
-                                                      defaut=def_yaxis[n]),
-                                           assembly_map=SIMP(statut="o",
-                                                      typ=Matrice(nbLigs=n+2,
-                                                              nbCols=n+2,
-                                                              typElt=myAssembly,  # ici c'est le nom de l'assemblage
-                                                              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=(n+2)*[(n+2)*['.']], coloree=True),
-                                           ),
-                                           rod_map=SIMP(statut="o",
-                                                        typ=Matrice(nbLigs=n+2,
-                                                                    nbCols=n+2,
-                                                                    valSup=1,
-                                                                    valMin=-1,
-                                                                    #typElt=myAssembly,  # ici c'est le nom de l'assemblage
-                                                                    typElt='TXM',  # ici c'est le nom de l'assemblage
-                                                                    listeHeaders=None),
-                                                        defaut=(n+2)*[(n+2)*['.']]),
-                                           BU_map=SIMP(statut="o",
-                                                       typ=Matrice(nbLigs=n+2,
-                                                                   nbCols=n+2,
-                                                                   valSup=90000.,
-                                                                   valMin=0.,
-                                                                   typElt='R',  # ici c'est le BU
-                                                                   listeHeaders=None,
-                                                                   coloree=True),
-                                                       defaut=(n+2)*[(n+2)*['.']]))
-
+    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]),
+            assembly_map=SIMP(
+                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)),
+            rod_map=SIMP(
+                statut='o',
+                typ=Matrice(
+                    nbLigs=i + 2,
+                    nbCols=i + 2,
+                    valSup=1,
+                    valMin=-1,
+                    typElt='TXM',
+                    listeHeaders=None),
+                defaut=(i + 2) * [(i + 2) * ['.']]),
+            BU_map=SIMP(
+                statut='o',
+                typ=Matrice(
+                    nbLigs=i + 2,
+                    nbCols=i + 2,
+                    valSup=90000.,
+                    valMin=0.,
+                    typElt='R',
+                    listeHeaders=None,
+                    coloree=True),
+                defaut=(i + 2) * [(i + 2) * ['.']]))
     return dico
 
 
-Techno_data = OPER(nom='Techno_data', sd_prod=myTechnoData,
-                   assembly_list=SIMP(statut='o', typ=myAssembly, min=1, max="**"),  # à resorber quand on mettra dans la Matrice
-                   rodbank_list=SIMP(statut='o', typ=myRodBank, min=0, max="**"),  # idem
-                   radial_description=FACT(statut='o',
-                                           nb_assembly=SIMP(statut='o', typ='I', into=list(range(NMIN_ASSEMBLY, NMAX_ASSEMBLY))),
-                                           **(generate_ass_map(range(NMIN_ASSEMBLY, NMAX_ASSEMBLY)))
-                                           ),  # Radial_Description
-                   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'),
-                   )  # Techno data
-
-Model_data = OPER(nom='Model_data', sd_prod=myModelData,
-                  physics=SIMP(statut='o', typ='TXM', into=(
-                      'Neutronics', 'Thermalhydraulics')),
-                  scale=SIMP(statut='o', typ='TXM', into=(
-                      'system', 'component', 'local')),
-                  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')),
-                                      radial_meshing=FACT(statut='o',
-                                                          flux_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')),
-                                                          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')),
-                                                          b_feedback_subdivision=BLOC(condition='feedback_solver=="subdivision"',
-                                                                                      feedback_subdivision=SIMP(statut='o', typ='I')))),
-                  b_thermo_compo=BLOC(condition='physics=="Thermalhydraulics" and scale=="component"',
-                                      code=SIMP(statut='o', typ='TXM', into=('THYC', 'CATHARE3', 'FLICA4')),
-                                      radial_meshing=FACT(statut='o',
-                                                          fluid=SIMP(statut='o', typ='TXM', into=('subdivision', 'subchannel')),
-                                                          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')),
-                                      ),
-                  b_scale_compo=BLOC(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'))),
-                  b_scale_local=BLOC(condition='scale=="local"',
-                                     mesh_file=SIMP(statut='o', typ='Fichier')),
-                  )
-
-
-Scenario_data = OPER(nom='Scenario_data', sd_prod=myScenarioData,
-                     initial_power=SIMP(statut='o', typ='R', val_min=0.,
-                                        defaut=100.),
-                     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),
-                     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']),
-                     b_ria=BLOC(condition='scenario_type=="RIA"',
-                                ejected_rod=SIMP(statut='o',
-                                                 typ='TXM'),
-                                rod_position_program=SIMP(statut='o',
-                                                          typ=Tuple(2),
-                                                          validators=VerifTypeTuple(['R', 'I']),
-                                                          max='**'),
-                                SCRAM=SIMP(statut='o', typ='TXM', into=("YES", "NO")),
-                                SCRAM_option=BLOC(condition='SCRAM == "YES"',
-                                                  SCRAM_power=SIMP(statut='o', typ='R'),
-                                                  complete_SCRAM_time=SIMP(statut='o', typ='R'),
-                                                  ),
-                                ),
-                     post_processing=SIMP(statut='f',
-                                          typ=Tuple(2),
-                                          validators=VerifPostTreatment(),
-                                          max='**'),
-                     )
+Techno_data = OPER(
+    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='**'),
+    radial_description=FACT(
+        statut='o',
+        nb_assembly=SIMP(statut='o', typ='I', into=list(range(NMIN_CORE_FUEL_ELTS, NMAX_CORE_FUEL_ELTS))),
+        **(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'))
+
+
+Model_data = OPER(
+    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')),
+    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')),
+        radial_meshing=FACT(
+            statut='o',
+            flux_solver=SIMP(statut='o', typ='TXM', into=('subdivision', 'pin-by-pin')),
+            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')),
+            b_feedback_subdivision=BLOC(
+                condition='feedback_solver=="subdivision"',
+                feedback_subdivision=SIMP(statut='o', typ='I')))),
+    b_thermo_compo=BLOC(
+        condition='physics=="Thermalhydraulics" and scale=="component"',
+        code=SIMP(statut='o', typ='TXM', into=('THYC', 'CATHARE3', 'FLICA4')),
+        radial_meshing=FACT(
+            statut='o',
+            fluid=SIMP(statut='o', typ='TXM', into=('subdivision', 'subchannel')),
+            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'))),
+    b_scale_compo=BLOC(
+        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'))),
+    b_scale_local=BLOC(
+        condition='scale=="local"',
+        mesh_file=SIMP(statut='o', typ='Fichier')))
+
+
+Scenario_data = OPER(
+    nom='Scenario_data',
+    sd_prod=_ScenarioData,
+    initial_power=SIMP(statut='o', typ='R', val_min=0., defaut=100.),
+    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),
+    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', )),
+    b_ria=BLOC(
+        condition='scenario_type=="RIA"',
+        ejected_rod=SIMP(statut='o', typ='TXM'),
+        rod_position_program=SIMP(
+            statut='o', typ=Tuple(2), validators=VerifTypeTuple(('R', 'I')), max='**'),
+        SCRAM=SIMP(statut='o', typ='TXM', into=('YES', 'NO')),
+        SCRAM_option=BLOC(
+            condition='SCRAM == "YES"',
+            SCRAM_power=SIMP(statut='o', typ='R'),
+            complete_SCRAM_time=SIMP(statut='o', typ='R'))),
+    post_processing=SIMP(
+        statut='f', typ=Tuple(2), validators=VerifPostTreatment(), max='**'))