]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
partage avec Eric du cata
authorpascale.noyret <pascale.noyret@edf.fr>
Thu, 22 Oct 2020 12:29:13 +0000 (14:29 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Thu, 22 Oct 2020 12:29:13 +0000 (14:29 +0200)
Vimmp/cata_CSAndCPS_v1.py [new file with mode: 0755]

diff --git a/Vimmp/cata_CSAndCPS_v1.py b/Vimmp/cata_CSAndCPS_v1.py
new file mode 100755 (executable)
index 0000000..8ed43ae
--- /dev/null
@@ -0,0 +1,626 @@
+from Accas import *
+
+class composant(ASSD):pass
+class geometricDomain(ASSD):pass
+class modeleNumDuCompo(UserASSD):pass
+class especeChimique(UserASSD):pass
+class userParticle(UserASSD) :pass
+class userAtom(userParticle) :pass
+class userMolecule(userParticle) :pass
+class userDiscrete(userParticle) :pass
+class userDPD(userParticle) :pass
+
+dictSystemTypeModeleNumerique = { 'Quantum system' : (),
+                   'Classical particle system' : ('MD', 'DPD', 'LBM', 'SDPD','SPH','CFD_Discrete_Particles'),
+                   'Continuum system' :('Fluid_Fields','Fluid_Particles', 'SPH','Lagrangian one-particle pdf'),
+                                }
+
+# PN a faire --> ajouter un  MC modeleNumerique ( apres avoir renomme le modeleNumerique actuel en classe de modele numerique) et le dictionnaire d apres 
+dictTypModNumModNum = {
+    ('Continuum system','Particles') : ('SPH','Lagrangian one-fluid-particle pdf'),
+    ('Continuum system','Fields')    : ('FV','FEM', 'Spectral method'),
+    ('Classical particle system','Particles') : ('MD', 'DPD',  'SDPD','SPH','CFD_Discrete_Particles'),
+    ('Classical particle system','Fields')    : ('LBM',),
+    ('Quantum system','Particles')    : ('Particle method',),
+    ('Quantum system','Fields')    : ('Wave',),
+}
+
+dictCodeModeleNumerique = { 
+    
+    'Code_Saturne' : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'Fluent'       : ('FV',),
+    'Culgi Package': (),
+    'DEM_SD'       : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'DFTB+'        : ('density functional tight binding method',),
+    'DL_MESO_DPD'  : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'DL_MESO_LBE'  : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'DL_POLY_4'    : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'GROMACS'      : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'GROMACS_LS'   : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'LAMMPS'       : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'NWChem'       : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'OpenFOAM'     : ('Lagrangian one-fluid-particle pdf', 'FV', 'CFD_Discrete_Particles',),
+    'Quantum EXPRESSO'   : ('Particle method', 'Wave',),
+    'RHEO_AGGRATE' : ('Particle method', 'Wave',),
+    'RHEO_DROP'    : ('Particle method', 'Wave',),
+    'STAR_CCM+'    : ('FV', 'Particles',),
+    'Code Nill'    : ('Spectral method', ),
+}
+
+dictCodeFormat =    {
+    'Code_Saturne' : ('med', 'cgns', 'msh', 'des', 'unv ',  'Use converter'),
+    'Culgi Package': ('cof',),
+    'DEM_SD' : ('geo', 'ascii'),
+    'DFTB+' : ('geo', 'ascii'),
+    'Fluent'   : ('FluentFormat', 'Use converter'),
+    'OpenFOAM' : ('OpenFoamFormat', 'Med', 'Use converter'),
+}
+
+dictTermeLE = {
+    ('Fields','Particles') : ('Fluid_Velocity_Field', 
+                              'Fluid_Temperature_Field', 
+                             'Fluid_Species_Mass_Fraction_Fluid',),
+    ('Particles','Fields') : ('Fluid_Particle_Momentum_Exchange_Field', 
+                              'Fluid_Particle_Thermal_Exchange_Field', 
+                              'Lagrangian one-particle pdfFluid_Particle_Mass_Source_Field', 
+                              'Particle_Volumetric_Concentration_Modified_Fluid_Viscosity',
+                              'Particle_Extra_Stress_Tensor'),
+}
+
+dictCodeConvertisseur = {
+    ('Saturne', 'OpenFOAM') : ('gmsh', 'Saturne2CDM  and CDM2OpenFoam'),
+    ('Saturne', 'Fluent')   : ( 'Saturne2CDM and CDM2Fluent'),
+    ('Fluent', 'OpenFOAM')  : ('Fluent2CDM and CDM2OpenFoam'),
+              }
+
+def prepareBlocSystemType(systemType) :
+    condition  = "SystemType == '" + systemType + "'"
+    Identifier =  SIMP(statut='o', typ=(modeleNumDuCompo,'createObject'),)
+    ModelType  =  SIMP(statut='o', typ='TXM', into = ('Particles', 'Fields'))
+    dicoArgs={}
+    for typeMod in ('Particles', 'Fields'):
+        conditionType = "ModelType == '" + typeMod + "'" 
+        NumericalMethod = SIMP(statut='o',typ='TXM',  into=dictTypModNumModNum[systemType, typeMod], 
+                               position='global_jdc', intoXML=allValueInDict(dictTypModNumModNum))
+        dicoBloc = {}
+        for modeleNumerique in list(dictTypModNumModNum[systemType,typeMod]):
+            conditionNum = "NumericalMethod == '" + modeleNumerique + "'"
+            setCode = set()
+            for code in dictCodeModeleNumerique.keys():
+                if modeleNumerique in dictCodeModeleNumerique[code]: setCode.add(code)
+            Solver = SIMP(statut='o', typ='TXM', into=list(setCode), intoXML=list(dictCodeModeleNumerique.keys()) )
+            monNomBloc='b_ModelName_' + modeleNumerique.replace(' ','_') 
+            if setCode !=set(): dicoBloc[monNomBloc]=BLOC(condition=conditionNum, nomXML='b_ModelName',Solver=Solver)
+        dicoArgs['b_modelType'+typeMod] = BLOC(condition=conditionType, NumericalMethod=NumericalMethod,**dicoBloc)
+    NumericalModel = FACT(statut='o', max= '**', Identifier=Identifier, ModelType=ModelType, **dicoArgs)
+    return BLOC(condition=condition, nomXML='b_systemType', NumericalModel=NumericalModel)
+
+def calculCommun( key1, key2, dico):
+    monSet=set()
+    if not key1 in dico: return ()
+    if not key2 in dico: return ()
+    for val in dico[key1]:
+       if val in dico[key2]:
+         monSet.add(val)
+    if monSet == set() : monSet.add ('No common format')
+    return list(monSet)
+
+def allValueInDict( dico):
+    monSet=set()
+    for clef in dico :
+        for val in dico[clef] : monSet.add(val)
+    return monSet
+
+def creeBlocPourLesFichiers (laCondition, NomDuFichier, ListeFormats):
+    SIMPFormatFichier = SIMP(statut='o', typ = 'TXM', into = tuple(ListeFormats) + ('others',), )
+    dicoDesBlocs = {}
+    for formatFich in ListeFormats :
+        nomBloc     = 'b_format_fichier' + str(formatFich)
+        typeDesFichiers = ('Fichier', formatFich + " Files (*." + formatFich + ");;All Files (*)",)
+        blocCondition ="FileFormat == '" + formatFich + "'"
+        dicoDesBlocs[nomBloc] = BLOC( condition = blocCondition, FileName = SIMP(statut='o', typ = typeDesFichiers ),)
+    dicoDesBlocs['b_format_fichier_others'] = BLOC(condition="FileFormat == 'others'", FileName = SIMP(statut='o', typ = ('Fichier','All Files (*)'),),)
+    return BLOC(condition=laCondition, FileFormat = SIMPFormatFichier, **dicoDesBlocs)
+
+def champ(nomDelaContante, labels ,nbReels ) :
+# ajouter les extensions pour le fichier et les blocs associes
+# certains champs ne seront jamais uniformes
+ #Input_Mode  = SIMP( statut='o', typ='TXM', into=('uniform value','values directly assigned','values read in file','analytical function', 'call to a service')),
+#PNPN : Passer le nom du champ pour le label du vecteur
+    dicoBloc = {}
+    dicoBloc[nomDelaContante] = SIMP( statut='o', typ='R')
+    return FACT( statut='o',
+       Input_Mode = SIMP( statut='o', typ='TXM', into=('uniform value','values directly assigned','values read in file','analytical function',)),
+       b_uniforme = BLOC( condition = "Input_Mode == 'uniform value'", **dicoBloc),
+       b_vsaisies = BLOC( condition = "Input_Mode == 'values directly assigned'",
+         Field = SIMP( typ='R', statut='o', max ='**'),
+             #Vecteur = SIMP( fenetreIhm='Tableau', homo = labels,
+             #                   statut='o', min=2, max='**',
+             #                  typ=Tuple(nbReels),
+             #                   validators=VerifTypeTuple(("'R',"*nbReels),),) # end particle
+        ), #b_vsaisie
+       b_vdsfich = BLOC( condition = "Input_Mode == 'values read in file'",
+         Format = SIMP( statut='o', typ='TXM', into=['txt','Med',], position='global' ),
+         td_txt = BLOC(condition = 'Format == "txt"',
+           File  = SIMP( statut='o', typ=('Fichier','Text Files(*.txt);All Files (*)'),),
+          ),
+         td_med_1 = BLOC( condition = 'Format == "Med"',
+           File  = SIMP( statut='o', typ=('Fichier','Med Files(*.med);All Files (*)'),),
+        ),
+        td_med_2 = BLOC( condition = 'Format == "Med"',
+           FieldName = SIMP( statut='o', typ='TXM',),
+        ),
+     ),
+     b_vfct = BLOC( condition = "Input_Mode == 'analytical function'",
+        Function = SIMP( statut='o', typ='TXM',),
+     ),
+     #b_vserc = BLOC( condition = "Input_Mode == 'call to a service'",
+     #   Service = SIMP( statut='o', typ='TXM',),
+     #),
+    )
+
+
+
+
+def FactTurbulence(statut):
+   return FACT (statut=statut, 
+          TurbulenceModellingType = SIMP(typ='TXM', statut='o', into =['No Model (DNS)', 
+                      'Spatial filtering (LES)', 'One-point moment', 'One-point PDF']) ,
+       bloc_one_point = BLOC(condition= "TurbulenceModellingType == 'One-point moment'",
+            RANSModel = SIMP(statut="o", typ="TXM", into=['Turbulent-Viscosity Model(TVM)', 'Reynolds Stress Model (RSM)']),
+            bloc_TVM  = BLOC(condition= "RANSModel == 'Turbulent-Viscosity Model(TVM)'",
+                 TVMChoice = SIMP(typ='TXM', statut='o', into=['k-epsilon', 'k-omega']),
+                        ), # fin bloc_TVM
+            bloc_RSM = BLOC(condition = "RANSModel == 'Reynolds Stress Model (RSM)'",
+                 RSMChoice = SIMP(typ='TXM', statut='o', into=['Rotta', 'LRR-IP','LRR-QI','SSG']),
+                        ), # fin bloc_RSM
+            ), # fin bloc_one_point
+       bloc_one_spatial = BLOC(condition = "TurbulenceModellingType == 'Spatial filtering (LES)'",
+            ChoiceOfApproach  = SIMP(typ='TXM', statut='o', into=['Field-based LES', 'Filtered Density Function (FDF)']),
+            SubgridScaleModel = SIMP(typ='TXM', statut='o', into=['No SGS', 'Smagorinsky','Dynamical model', 'SGS Transport Equations']),
+            ), # fin bloc_one_spatial
+       bloc_one_point_pdf = BLOC(condition = "TurbulenceModellingType == 'One-point PDF'",
+            ChoiceOfApproach = SIMP(typ='TXM', statut='o', into=['One-point Eulerian PDF', 'One-particle Lagrangian PDF']),
+            bloc_lagrangian_pdf=BLOC(condition = "ChoiceOfApproach == 'One-particle Lagrangian PDF'",
+                StochasticModel  = SIMP(typ='TXM', statut='o', into=['Langevin','Other'], defaut='Langevin'),
+            )# fin lagrangian
+            ), # fin bloc_one_point_pdf
+       bloc_no_model = BLOC(condition = "TurbulenceModellingType == 'No Model (DNS)'",
+                ChoiceOfApproach = SIMP(statut='o', typ='TXM', into=['Field-based DNS', 'N-Particle Method']),
+                   bloc_Field = BLOC(condition = "ChoiceOfApproach == 'Field-based DNS'", 
+                       NumericalMethod=SIMP(statut='o', typ='TXM', into=['FV', 'Spectral Method']),
+                   ),# fin bloc_Field
+                   bloc_N_particle = BLOC(condition = "ChoiceOfApproach == 'N-Particle Method'", 
+                       NumericalMethod=SIMP(statut='o', typ='TXM', into=['SPH', 'Vortex Method']),
+                   ),# fin bloc_N_particle
+            ), # fin bloc_no_model
+)# fin du bloc return de la fonction factTurbulence
+
+def Particle(cardinalite) :
+   return FACT (statut='o', max=cardinalite, 
+     ParticleNature = SIMP( statut='o', typ='TXM', into=['Atoms', 'Molecules', 'Dissipative', 'Fluid Particle', 'Discrete Particle']),
+     b_Atom = BLOC( condition='ParticleNature == "Atoms"', 
+       AtomsName        = SIMP( statut='o', typ=(userAtom,'createObject'),),
+       Atom             = FACT (statut ='o', max= '**',
+          ChemicalSpecie = SIMP( statut='o', typ='TXM'),
+          Number         = SIMP (statut ='o', typ = 'I'),
+          ElectricCharge  = SIMP( statut='o', typ='R'),
+          MagneticMoment  = SIMP( statut='o', typ='R'),
+          Size  = SIMP( statut='f', typ='R'),  # relevant ?
+       ),
+     ),
+     b_Molecule = BLOC( condition='ParticleNature == "Molecules"',
+       MoleculeName    = SIMP( statut='o', typ=(userMolecule,'createObject'),),
+       ChemicalSpecie = FACT ( max='**', statut='o',
+          ChemicalSpecieName = SIMP( statut='o', typ=userAtom),
+          Proportion         = SIMP( statut='o', typ='R', val_max =1),
+       ),
+       ElectricCharge  = SIMP( statut='o', typ='R'),
+       MagneticMoment  = SIMP( statut='o', typ='R'),
+       Shape = SIMP( statut='f', typ='TXM', into=['Linear', 'Trigonal Planar', 'Angular', 'Tetrahedral', 'Octahedral', 'Trigonal pyramid', 'Other']),
+     ),
+     b_Dissipative = BLOC( condition='ParticleNature == "Dissipative"',
+       DPDName     = SIMP( statut='o', typ=(userDPD,'createObject'),),
+       BondedParticles = SIMP(statut="o", typ=bool, defaut=False),
+     ),
+     b_Discrete = BLOC( condition='ParticleNature == "Discrete Particle"',
+       DiscreteParticleName  = SIMP(statut='o', typ=(userDiscrete,'createObject'),),
+       TypeOfDiscreteParticle = SIMP( statut='o', typ='TXM', into=['Solid', 'Droplets', 'Bubbles','Bio Organism'],),
+       b_TypeDP_Solid = BLOC( condition ='TypeOfDiscreteParticle == "Solid"',
+         TypeOfSolid   = SIMP( statut='o', typ='TXM', into=['Primary Particle', 'Assemblage / Aggregate'], position = 'global'),
+            b_SolidPrimary  =  BLOC( condition='TypeOfSolid == "Primary Particle"',
+            ),
+            b_SolidAggregate = BLOC( condition='TypeOfSolid == "Assemblage / Aggregate"',
+            ),
+       ),
+       b_TypeBio_Solid = BLOC( condition='TypeOfDiscreteParticle == "Bio Organism"',
+           TypeOfOrganism = SIMP( statut='o', typ='TXM', into=['Unicellular', 'Multicellular']),
+            b_Unicellular = BLOC( condition ='TypeOfOrganism=="Unicellular"',
+              Unicellular = SIMP( statut='o', typ='TXM', into=["Bactaria"], defaut='Bactaria')
+             ),
+            b_Multicellular = BLOC( condition ='TypeOfOrganism=="Multicellular"',
+              Multicellular = SIMP( statut='o', typ='TXM', into=["Animal","Fongus","Plant"])
+             ),
+       ), # b_TypeBio_Solid
+       Properties = FACT ( statut ='o',
+          Geometry   = SIMP( statut='o', typ='TXM', into=['Sphere', 'Ellopsoids', 'Other Shape']),
+          b_geom_Sphere = BLOC( condition = 'Geometry == "Sphere"',
+             ParticleRadius = SIMP( statut='o', typ ='R', val_min = 0),
+          ),
+          Weight = FACT (statut = 'o',
+             Mass = SIMP( statut='o', typ ='R', val_min = 0),
+             Density = SIMP( statut='o', typ ='R', val_min = 0),
+          ),
+          Mechanical = SIMP( statut='o', typ='TXM', into=['Rigid', 'Flexible', 'Deformable']),
+          b_SolidAggregate = BLOC( condition='TypeOfSolid == "Assemblage / Aggregate"',
+            Morphological = FACT (statut = 'o',
+              Consigne = SIMP(statut="o", homo="information", typ="TXM", defaut='Choose optional properties'),
+              FractalDimension       = SIMP( statut='f', typ='R'),
+              NumberOfPrimaryParticle = SIMP (statut ='f',typ='I'),
+              EquivalentSize         = SIMP( statut='f', typ='R'),
+              Porosoty               = SIMP( statut='f', typ='R'),
+           ), # Morphological
+          ), # b_SolidAggregate
+          ElectroMagnetic = FACT (statut = 'f',
+              ElectricCharge     = SIMP( statut='o', typ='R'),
+              MagneticMoment     = SIMP( statut='o', typ='R'),
+          ),
+          b_SolidAggregateBonded = BLOC( condition='TypeOfSolid == "Assemblage / Aggregate"',
+              BondedParticles = FACT(
+                ListOfBondedParticles = SIMP(statut='o', max='**',  typ = userParticle),
+              ),
+          ),
+       ), # Properties
+     ), # b_Discrete 
+############################
+             
+            List_Of_Bonded_Particles = FACT( statut='f', 
+            # -------------------------------------------#
+               Bonded_Particles = FACT( statut='o', max = "**",
+                  Name_Of_Bonded_Particles   = SIMP( statut='o', typ='TXM'),
+                  Species_in_Particle        = SIMP( statut='o', min=2, typ='TXM' , max = "**"),
+                                 ), # Bonded_Particles
+            ), # List_Of_Bonded_Particles
+
+            List_Of_Interactions = FACT( statut='o', max = "**",
+            # --------------------------------------------------#
+
+               Bonded_Interactions = FACT( statut='o', max = "**",
+
+                #Type_Of_Bonded_Interaction = SIMP( statut='o', typ='TXM', into=['No', 'Covalent Bond Length', 'FENE', 'Covalent Bond Angle', 'Dihedral Angles', 'Improper Dihedral', 'Frozen Motion' ], defaut='No', position='global'),
+                Type_Of_Bonded_Interaction = SIMP( statut='o', typ='TXM', into=['No', 'Covalent Bond Length', 'FENE', 'Covalent Bond Angle', 'Dihedral Angles', 'Improper Dihedral', 'Frozen Motion' ], defaut='No'),
+
+                #La saisie de l'ensemble des liaisons d'un meme type peut se faire ds le meme bloc (soit ds un fichier, soit manuelle)
+                #Une seule valeur de distante? est a saisir pour l'ensemble
+                # bloc_covalent_1 = BLOC( condition = 'Type_Of_Bonded_Interaction in ("Covalent Bond Length","FENE")',
+                # ), # fin bloc_covalent_1
+                bloc_covalent_length = BLOC( condition = 'Type_Of_Bonded_Interaction == "Covalent Bond Length"',
+                   Interaction_Length_Parameters = FACT( statut='o', max="**",
+                       Apply_To_Bonded_Particles = SIMP( statut='o', max='**', typ='TXM'),
+                       Spring_Stifness           = SIMP( statut='o', typ='R', val_min=0),
+                       Mean_Bond_Length          = SIMP( statut='o', typ='R', val_min=0),
+                     ), # fin Interation_Length_Parameters 
+                ), # fin Bond_Length_Parameters
+                bloc_covalent_angle = BLOC( condition = 'Type_Of_Bonded_Interaction == "Covalent Bond Angle"',
+                   Interaction_Angles_Parameters = FACT( statut='o', max="**",
+                       Apply_To_Bonded_Particles = SIMP( statut='o', max='**', typ='TXM'),
+                       Spring_Stifness           = SIMP( statut='o', typ='R', val_min=0),
+                       Mean_Bond_Angle           = SIMP( statut='o', typ='R', val_min=0),
+                   ), # fin Interation_Angles_Parameters 
+                ), # fin bloc_covalent_length_and_angle
+
+                #bloc_covalent_length_and_angle = BLOC( condition = 'Type_Of_Bonded_Interaction == "Covalent Bond Length" or Type_Of_Bonded_Interaction == "Covalent Bond Angle"',
+                #   Bond_Parameters = FACT( statut='o', max="**",
+                #        Apply_To_Bonded_Particles  = SIMP( statut='o', max='**', typ='TXM'),
+                #        Spring_Stifness   = SIMP( statut='o', typ='R', val_min=0),
+                #        bloc_covalent_length = BLOC( condition = 'Type_Of_Bonded_Interaction == "Covalent Bond Length"',
+                #            Mean_Bond_Length  = SIMP( statut='o', typ='R', val_min=0),
+                #         ), # fin Bond_Length_Parameters
+                #        bloc_covalent_angle = BLOC( condition = 'Type_Of_Bonded_Interaction == "Covalent Bond Angle"',
+                #            Mean_Bond_Angle  = SIMP( statut='o', typ='R', val_min=0),
+                #         ), # fin Bond_Length_Parameters
+                #     ), # fin Bond_Length_Parameters 
+                #), # fin bloc_covalent_length_and_angle
+
+                bloc_FENE = BLOC( condition = 'Type_Of_Bonded_Interaction == "FENE"',
+                   Applies_To_All_Particles = SIMP( statut='o', typ=bool, defaut=True), 
+                   bloc_not_on_all = BLOC( condition = 'Applies_To_All_Particles == False',
+                      FENE_Parameters = FACT( statut='o', max="**",
+                          Species_Pair      = SIMP( statut='o', max=2, typ='TXM'),
+                          Spring_Constant_H = SIMP( statut='o', typ='R', val_min=0),
+                          LMax              = SIMP( statut='o', typ='R', val_min=0),
+                                       ), # fin FENE_Parameters
+                       ), # fin bloc_not_on_all
+                   bloc_on_all = BLOC( condition = 'Applies_To_All_Particles == True',
+                       Spring_Constant_H = SIMP( statut='o', typ='R', val_min=0),
+                       LMax              = SIMP( statut='o', typ='R', val_min=0),
+                    ), # fin bloc_on_all
+                ), # fin bloc_FENE
+
+                bloc_le_reste = BLOC( condition = 'Type_Of_Bonded_Interaction in ("Dihedral Angles", "Improper Dihedral", "Frozen Motion")',
+                      Particle_Name = SIMP( statut="f", typ='TXM'),
+                      #Consigne = SIMP( statut="o", homo="information", typ="TXM", defaut='Not Implemented Yet'),
+              
+                ),
+               ), #  fin Bonded_Interaction
+
+                                               # ------------------------------- #
+
+               Unbonded_Interactions     = FACT( statut='o', max= "**",
+
+                Type_Of_Unbonded_Interaction = SIMP( statut='o', typ='TXM', into=['No', 'electro_magnetic', 'Repulsion_and_VdW', 'Soft_Potentiel', ], defaut='No', position='global',fenetreIhm='menuDeroulant'),
+
+                bloc_elec = BLOC( condition = 'Type_Of_Unbonded_Interaction == "electro_magnetic"',
+                     Permittivity  = SIMP( statut='o', typ='R', position='global_jdc'),
+                     Magnetic      = SIMP( statut='o', typ=bool, defaut=False,),
+                     bloc_magnetic = BLOC( condition = 'Magnetic == True',
+                            Permability = SIMP( statut='o', typ='R'),
+                     ), # bloc_magnetic
+                 ),# fin bloc_elec
+
+                bloc_VdW = BLOC( condition = 'Type_Of_Unbonded_Interaction == "Repulsion_and_VdW"',
+                  Species_Pair_Parameters = FACT( statut='o', max="**",
+                    Type_Repulsion_and_VdW  = SIMP( statut='o', typ='TXM', into = [ 'Lennard_Jones', 'Hard_sphere_model']),
+                    Species_Pair = SIMP( statut='o', max=2, typ='TXM'),
+                    VdW_Radius     = SIMP( statut='o', typ='R', val_min=0),
+                    b_Lennard = BLOC( condition = "Type_Repulsion_and_VdW == 'Lennard_Jones'",
+                         Depth_Of_The_Potential_Well = SIMP( statut='o', typ='R', val_min=0),
+                          ), # fin b_Lennard
+                  ), # fin Species_Pair_Parameters 
+                 ), # bloc_VdW
+
+                 b_Param_Soft_Potentiel = BLOC( condition = "Type_Of_Unbonded_Interaction == 'Soft_Potentiel'",
+                       Groot_Warren_Repulsion = SIMP( statut='o', typ='R', defaut=25.0, val_min=0),
+                       Groot_Warren_Cutoff    = SIMP( statut='o', typ='R', defaut=1.0, val_min=0),
+                       Drag_Coefficient       = SIMP( statut='o', typ='R'),                       # les 2 valent 0 pour MD
+                       Drag_Force_Cutoff      = SIMP( statut='o', typ='R', val_min=0),
+                 ), # b_Param_Soft_Potentiel
+                   
+             ), # fin UnBonded_Interactions
+
+                                               # ------------------------------- #
+
+             External_Field_Interaction = FACT( statut='o', max= "**",
+                Type_Of_Interaction_With_An_External_Field = SIMP( statut='o', typ='TXM', into=['No','gravitational field','electric field','magnetic field', 'Hydrodynamic_Field'], fenetreIhm='menuDeroulant', defaut ='No'),
+                b_gravite = BLOC( condition = 'Type_Of_Interaction_With_An_External_Field=="gravitational field"',
+                  G = SIMP( statut='o', typ='R', defaut=9.81),
+                ),
+                b_elect = BLOC( condition = 'Type_Of_Interaction_With_An_External_Field=="electric field"',
+                  Electric_Field = champ('E', ('E',), 1),
+                ),
+                b_magnetic = BLOC( condition = 'Type_Of_Interaction_With_An_External_Field=="magnetic field"',
+                  Magnetic_Field = champ('B', ('B',), 1),
+                ),
+                b_hydrodynamic = BLOC( condition = 'Type_Of_Interaction_With_An_External_Field=="hydrodynamic field"',
+                  Hydrodynamic_Field = champ('U', ('U',), 1),
+                ),
+                b_External_Field_Interaction = BLOC( condition = 'Type_Of_Interaction_With_An_External_Field != "No"',
+                   Field_Applies_On_All_Species = SIMP( statut='o', typ=bool, defaut=True),
+                   b_porte_espece = BLOC( condition = 'Field_Applies_On_All_Species == False ',
+                     Species_List = SIMP( statut='o', typ='TXM', max= '**'),             # faire un typ = "espece"
+                   ),
+                ), # fin b_External_Field_Interaction
+                ), #  fin Interaction_External_Field
+
+          ), # fin List_Of_Interactions
+
+############################
+ )
+
+def bloc_CPS():
+   return BLOC(condition = 'SystemType == "Classical particle system"',
+    Particle = Particle('**'),
+)
+
+def bloc_FluideMacro():
+   return BLOC(condition = 'SystemType == "Continuum system"',
+     FluidComplexe = SIMP(typ=bool,  statut='o', defaut = False,),
+
+     FlowNature    = SIMP(typ='TXM', statut='o', into =['Laminar', 'Turbulent'], position='global'),
+     bloc_FlowNature_Turbulent = BLOC(condition = ' FlowNature == "Turbulent"',
+        TurbulenceForFlowDynamics = FactTurbulence('o'), 
+      ), #------ fin bloc_FlowNature_Turbulent
+
+
+# ---------------------- Effets thermiques
+
+     Thermal = FACT (statut ='o',
+      ThermalEffects = SIMP(typ='TXM', statut='o', into =['Non thermal', 
+                            'No effect on flow dynamics', 'Effect on flow dynamics'], defaut='Non thermal'),
+
+      bloc_NonThermalEffects   = BLOC(condition = ' ThermalEffects == "Non thermal" or ThermalEffects == "No effect on flow dynamics"',
+          DensityEquationOfState = SIMP(typ='TXM', statut='o', into =['Constant density'], defaut = 'Constant density'),
+          ), # fin bloc_NonThermalEffects
+
+      bloc_ThermalEffects_Active = BLOC(condition = ' ThermalEffects == "Effect on flow dynamics"',
+          DensityEquationOfState = SIMP(typ='TXM', statut='o', into =['Variable density', 'Compressible']),
+# PNJPM est ce suffisant ?
+          ), # fin bloc_ThermalEffects_Active
+      bloc_ThermalEffects   = BLOC(condition = ' ThermalEffects == "Effect on flow dynamics" or ThermalEffects == "No effect on flow dynamics"',
+           bloc_scalar_thermal_flux = BLOC (condition = "FlowNature == 'Turbulent'",
+               ThermalFluxModel = FactTurbulence('f'),
+           ),# fin bloc_scalar_thermal_flux
+          WithChemicalReactions  = SIMP(typ=bool, statut ='o', defaut = False),
+          ), # fin bloc_ThermalEffects
+    ),# fin Fact Thermal
+
+# ---------------------- Scalaire additional 
+      bloc_scalar_FluidTurbulentOrLaminar = BLOC(condition = "(FluidComplexe == False and FlowNature == 'Turbulent') or (FluidComplexe == False and FlowNature == 'Laminar')",
+          AdditionalScalars = FACT(statut = 'f',
+             Scalar = FACT(statut = 'o', max ='**',
+                Name = SIMP(typ='TXM', statut='o',),
+                bloc_scalar_FluidTurbulentandNonComplexe = BLOC (condition = "FlowNature == 'Turbulent'",
+                    ScalarFluxModel = FactTurbulence('f'),
+                ) # bloc_scalar_FluidTurbulentandNonComplexe
+                ),# Scalar 
+           ),# AdditionalScalars 
+          ), # fin FluidTurbulentandNonComplexe
+      #bloc_scalar_FluidLaminaireandNonComplexe = BLOC (condition = "FluidComplexe == False and FlowNature == 'Laminar'",
+      #     AdditionalScalars = FACT (statut = 'o',
+      #      Scalar = FACT (  statut = 'f', max ='**',
+      #         Name = SIMP(typ='TXM', statut='o',),
+      #          ),# Scalar 
+      #      ),# AdditionalScalars 
+      #), # fin FluidLaminaireandNonComplexe
+     bloc_FlowNature_Turbulent_For_Scalars = BLOC(condition = ' FlowNature == "Turbulent"',
+        ScalarTurbulenceModelling = FactTurbulence('f'),
+     ),
+     # il faut une validation de coherence entre l existence de tous les turbulencesModelling
+   )# fin bloc_FluideMacro
+
+JdC = JDC_CATA (
+  code = 'Vimmp',
+  # faire un validateur qui verifie que si on active reactions chimiques il faut que les masses molaires soient rentrees
+)
+
+Component = OPER(nom='Component', sd_prod=composant,
+    SystemType  = SIMP(typ='TXM', into=['Quantum system', 'Classical particle system', 'Continuum system'], statut='o',position='global'),
+    PhysicalDescription = FACT(statut = 'o',
+      b_FluideMacro =  bloc_FluideMacro(),
+      b_bloc_CPS =  bloc_CPS(),
+    ),
+    b_ModeleNumerique_quantum   = prepareBlocSystemType('Quantum system'),
+    b_ModeleNumerique_classical = prepareBlocSystemType('Classical particle system'),
+    b_ModeleNumerique_continuum = prepareBlocSystemType('Continuum system'),
+)
+
+Species = PROC(nom='Species',
+       Specie    = FACT( statut='o', max ="**",
+           Name  = SIMP( statut='o', typ=(especeChimique,'createObject') ),
+           masse_molaire  = SIMP( statut='f', typ='R',),
+        )
+)
+
+#Physical_Description = PROC(nom='Physical_Description',
+#   Component = SIMP(typ=composant, statut ='o',),
+##   bloc_FluideMacro = BLOC(condition = 'systemType == "Continuum system"',)
+## faire un validateur qui verifie que si on active reactions chimiques il faut que les masses molaires soient rentrees
+#
+## ------------------------------------ Bloc FluidMacro ----------------------------------
+#   bloc_FluideMacro = BLOC(condition = 'getEficasAttribut(Component,"SystemType") == "Continuum system"',
+#   #bloc_FluideMacro = BLOC(condition = '"Fields" in getEficasListOfAttributs(Component,["NumericalModel","ModelType"])' ,
+#   # n est ce pas plutot un des modelNumrerique vaut Field ? ou faut-il les 2
+#     FluidComplexe = SIMP(typ=bool,  statut='o', defaut = False),
+#
+#     FlowNature    = SIMP(typ='TXM', statut='o', into =['Laminar', 'Turbulent'], position='global'),
+## -----------  FlowNature  Turbulent
+#     bloc_FlowNature_Turbulent = BLOC(condition = ' FlowNature == "Turbulent"',
+#        TurbulenceForFlowDynamics = FactTurbulence('o'), 
+### PNPN a faire
+##        # controle de coherence entre les modeles de turbulences et les modeles numeriques choisis ),
+##        #  Consigne = SIMP(statut ="o", homo="information", typ="TXM",defaut ='Incoherence')
+##        # il faut verifier la coherence entre le model de turbulence et le model type ),
+##
+#      ), #------ fin bloc_FlowNature_Turbulent
+#
+#
+## ---------------------- Effets thermiques
+#
+#     Thermal = FACT (statut ='o',
+#      ThermalEffects = SIMP(typ='TXM', statut='o', into =['Non thermal', 
+#                            'No effect on flow dynamics', 'Effect on flow dynamics'], defaut='Non thermal'),
+#
+#      bloc_NonThermalEffects   = BLOC(condition = ' ThermalEffects == "Non thermal" or ThermalEffects == "No effect on flow dynamics"',
+#          DensityEquationOfState = SIMP(typ='TXM', statut='o', into =['Constant density'], defaut = 'Constant density'),
+#          ), # fin bloc_NonThermalEffects
+#
+#      bloc_ThermalEffects_Active = BLOC(condition = ' ThermalEffects == "Effect on flow dynamics"',
+#          DensityEquationOfState = SIMP(typ='TXM', statut='o', into =['Variable density', 'Compressible']),
+## PNJPM est ce suffisant ?
+#          ), # fin bloc_ThermalEffects_Active
+#      bloc_ThermalEffects   = BLOC(condition = ' ThermalEffects == "Effect on flow dynamics" or ThermalEffects == "No effect on flow dynamics"',
+#           bloc_scalar_thermal_flux = BLOC (condition = "FlowNature == 'Turbulent'",
+#               ThermalFluxModel = FactTurbulence('f'),
+#           ),# fin bloc_scalar_thermal_flux
+#          WithChemicalReactions  = SIMP(typ=bool, statut ='o', defaut = False),
+#          ), # fin bloc_ThermalEffects
+#    ),# fin Fact Thermal
+#
+## ---------------------- Scalaire additional 
+#      bloc_scalar_FluidTurbulentandNonComplexe = BLOC(condition = "FluidComplexe == False and FlowNature == 'Turbulent'",
+#          AdditionalScalars = FACT(statut = 'o',
+#             Scalar = FACT(statut = 'f', max ='**',
+#                Name = SIMP(typ='TXM', statut='o',),
+#                ScalarFluxModel = FactTurbulence('f'),
+#                ),# Scalar 
+#           ),# AdditionalScalars 
+#          ), # fin FluidTurbulentandNonComplexe
+#      bloc_scalar_FluidLaminaireandNonComplexe = BLOC (condition = "FluidComplexe == False and FlowNature == 'Laminar'",
+#           AdditionalScalars = FACT (statut = 'o',
+#            Scalar = FACT (  statut = 'f', max ='**',
+#               Name = SIMP(typ='TXM', statut='o',),
+#                ),# Scalar 
+#            ),# AdditionalScalars 
+#      ), # fin FluidLaminaireandNonComplexe
+#     bloc_FlowNature_Turbulent_For_Scalars = BLOC(condition = ' FlowNature == "Turbulent"',
+#        ScalarTurbulenceModelling = FactTurbulence('f'),
+#     ),
+#     # il faut une validation de coherence entre l existence de tous les turbulencesModelling
+#   ),# fin bloc_FluideMacro
+#)
+
+Interactions = PROC(nom='Interactions',
+   InteractionComposant = FACT( max = '**',
+      origine     = SIMP(typ=modeleNumDuCompo, statut='o'),
+      destination = SIMP(typ=modeleNumDuCompo, statut='o'),
+# PN a derouler avec une fonction
+      monBloc_FFDP = BLOC ( 
+        condition = 'getEficasAttribut(origine,"ModelType") == "Fields" and getEficasAttribut(destination,"ModelType") == "Particles"' ,
+        termeLE = SIMP(typ='TXM', statut='o', into = dictTermeLE['Fields','Particles'],fenetreIhm='menuDeroulant'),
+          ),
+      monBloc_DPFF = BLOC ( 
+        condition = 'getEficasAttribut(origine,"ModelType") == "Particles" and getEficasAttribut(destination,"ModelType") == "Fields"' ,
+        termeLE = SIMP(typ='TXM', statut='o', into = dictTermeLE['Particles','Fields'],fenetreIhm='menuDeroulant'),
+          ),
+      monBloc_Saturne_Fluent = BLOC ( 
+        condition = 'getEficasAttribut(origine,"Solver") == "Code_Saturne" and getEficasAttribut(destination,"Solver") == "Fluent"' ,
+        Format = SIMP(typ='TXM', statut='o', into = calculCommun( "Code_Saturne", "Fluent",dictCodeFormat) ),
+          ),
+      monBloc_Saturne_OpenFoam = BLOC ( 
+        condition = 'getEficasAttribut(origine,"Solver") == "Code_Saturne" and getEficasAttribut(destination,"Solver") == "OpenFOAM"' ,
+        Format = SIMP(typ='TXM', statut='o', into = calculCommun( "Code_Saturne", "OpenFOAM",dictCodeFormat) ),
+        monBloc_conversion = BLOC (condition = 'Format == "Use converter"',
+             converter = SIMP(typ='TXM', statut='o', into = dictCodeConvertisseur['Saturne', 'OpenFOAM']),
+             ),
+          ),
+      ),
+)
+
+dict_condition={'NumericalMethod' : ('Interactions', 'Component'),
+#                'TypeOfSolid' : ('Component',)
+}
+
+Simulated_Time_Lapse = PROC( nom ="Simulated_Time_Lapse",
+     Initial_Time = SIMP( statut='o', typ='R'),
+     Duration     = SIMP( statut='o', typ='R'),
+)
+#
+Geometric_Domain= OPER( nom='Geometric_Domain', sd_prod=geometricDomain,
+       Shape   = SIMP( statut='o', typ='TXM', into=['Simplified Shape', 'CAD or Mesh']),
+       b_Shape = BLOC( condition = 'Shape == "Simplified Shape"',
+          Box  = SIMP( statut='o', typ='TXM', into=['Cube', 'Sphere','Cylinder'] ),
+          b_Cube = BLOC( condition = 'Box == "Cube"',
+             #Taille_Box_Englobante = SIMP( statut='o', typ='R', max=3, min =3)
+             # derait etre un Tuple(3) mais a faire apres la projection
+             Size_Of_Bounding_Box = SIMP( statut='o', typ=Tuple(3), validators=VerifTypeTuple(('R','R','R'),),)
+          ), # fin b_Cube
+          b_Boule = BLOC( condition = 'Box == "Sphere"',
+            Center = SIMP( statut='o', typ='R', max=3, min =3),
+            # devrait etre un Tuple(3) mais a faire apres la projection
+          ),# fin b_Boule
+          b_Cylinder = BLOC( condition = 'Box == "Cylinder"',
+            Heigth = SIMP( statut="o", typ='R', val_min=0.0, ang='Nanotube length [m]'),
+          ),# fin b_Tube
+          b_Boule_ou_Cylinder = BLOC( condition = 'Box == "Sphere" or Box == "Cylinder"',
+            Radius  = SIMP( statut='o', typ='R', val_min=0.0, ang='radius length [m]') ,
+          ),# fin b_Boule_ouCylinder
+       ), # fin b_Shape
+#
+       b_CAO = creeBlocPourLesFichiers( "Shape == 'CAD or Mesh'",'Domain_File', ['txt','med','I-deas', 'Gmsh', 'top',]),
+
+    Surface=SIMP( statut='o', typ='TXM',max='**',),
+) # fin Geometric_Domain
+
+
+
+