--- /dev/null
+from Accas import *
+
+class composant(ASSD):pass
+class mapper(ASSD):pass
+class converter(mapper):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
+
+class spatialRegion(UserASSD):pass
+class cadShape(spatialRegion):pass
+#class meshGroup(spatialRegion,UserASSDMultiple):pass
+class meshGroup(spatialRegion):pass
+class meshIdentifier(spatialRegion):pass
+class systemGeometry(UserASSD):pass
+class simulatedTime(UserASSD):pass
+class constitutiveRelation(UserASSD):pass
+
+class boundaryObject(UserASSD) : pass
+class scalar(boundaryObject):pass
+class dynamicVariable(boundaryObject):pass
+
+
+# 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', ),
+}
+# Le Code Nill est ajouté en dur au Solver
+
+dictCodeFormat = {
+ 'Code_Saturne' : ('Med', 'cgns', 'msh', 'des', 'unv', ),
+ 'Culgi Package': ('cof',),
+ 'DEM_SD' : ('geo', 'ascii'),
+ 'DFTB+' : ('geo', 'ascii'),
+ 'Fluent' : ('FluentFormat', ),
+ 'OpenFOAM' : ('OpenFoamFormat', 'Med', ),
+}
+
+dictMapperFormat = {
+ 'Med Coupling' : ('Med',),
+ 'Gmsh' : ('Med', 'OpenFoamFormat'),
+}
+
+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'),
+ ('Particles','Particles') : ('Pas encore fait'),
+ ('Fields','Fields') : ('Pas encore fait'),
+}
+
+dictCodeConvertisseur = {
+ ('Saturne', 'OpenFOAM') : ('gmsh', 'Saturne2CDM and CDM2OpenFoam'),
+ ('Saturne', 'Fluent') : ( 'Saturne2CDM and CDM2Fluent'),
+ ('Fluent', 'OpenFOAM') : ('Fluent2CDM and CDM2OpenFoam'),
+}
+
+dictVariableDynamique = {
+ 'K-Epsilon' : ('K', 'epsilon'),
+}
+
+#----------------------------------------
+def prepareBlocSystemType(systemType) :
+#----------------------------------------
+ condition = "SystemType == '" + systemType + "'"
+ Identifier = SIMP(statut='o', typ=(modeleNumDuCompo,'createObject'),)
+ SimulatedTimeLapse = SIMP(statut ='o', typ = simulatedTime)
+ ModelType = SIMP(statut='o', typ='TXM', into = ('Particles', 'Fields'), position='inGetAttribut')
+ dicoArgs={}
+
+ for typeMod in ('Particles', 'Fields'):
+ conditionType = "ModelType == '" + typeMod + "'"
+ NumericalMethod = SIMP(statut='o',typ='TXM', into=dictTypModNumModNum[systemType, typeMod],
+ position='global', 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(): setCode.add('Code Nill')
+ if setCode !=set(): dicoBloc[monNomBloc]=BLOC(condition=conditionNum, nomXML='b_ModelName',Solver=Solver)
+ dicoArgs['b_modelType'+typeMod] = BLOC(condition=conditionType, NumericalMethod=NumericalMethod,**dicoBloc)
+
+ blocMeshRef = BLOC(condition = '(ModelType == "Fields") and (NumericalMethod == "FV")',
+ Mesh_Identifiers = SIMP (statut ='o', max ='**', typ = meshIdentifier),)
+ dicoArgs['blocMeshRef'] = blocMeshRef
+ NumericalModel = FACT(statut='o', max= '**', Identifier=Identifier, ModelType=ModelType,
+ SimulatedTimeLapse=SimulatedTimeLapse, **dicoArgs)
+ return BLOC(condition=condition, nomXML='b_systemType', NumericalModel=NumericalModel)
+
+#-----------------------------------
+def calculCommun(key1, key2, dico):
+#-----------------------------------
+# retourne la liste des valeurs communes a dico[key1] et dico[key2]
+ 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):
+#-------------------------
+# retourne la liste de toutes les valeurs possible dans dico
+ monSet=set()
+ for clef in dico :
+ for val in dico[clef] : monSet.add(val)
+ return monSet
+
+#------------------------------------------------------------------------------------
+def creeBlocPourLesFichiers(laCondition, NomDuFichier, ListeFormats, FieldName=False):
+#-------------------------------------------------------------------------------------
+ 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 (*)'),),)
+ if FieldName:
+ SIMPFieldName = SIMP(statut='o', typ = 'TXM',)
+ return BLOC(condition=laCondition, FileFormat = SIMPFormatFichier, **dicoDesBlocs, FieldName=SIMPFieldName)
+ else :
+ return BLOC(condition=laCondition, FileFormat = SIMPFormatFichier, **dicoDesBlocs)
+
+#------------------------------------------------------------------------------------
+def creeBlocPourLesFichiers2(laCondition, NomDuFichier='FileName', ListeFormats=[], FieldName=False):
+#-------------------------------------------------------------------------------------
+# il faut reflechir pour parametrer NomDuFichier
+# et le type (existing... du fichier)
+# et utiliser le creeBlocPourLesFichiers2
+ SIMPFormatFichier = SIMP(statut='o', typ = 'TXM', into = tuple(ListeFormats) + ('others',), )
+ dicoDesBlocs = {}
+ for formatFich in ListeFormats :
+ dicoArgs={}
+ nomBloc = 'b_format_fichier' + str(formatFich)
+ typeDesFichiers = ('Fichier', formatFich + " Files (*." + formatFich + ");;All Files (*)",)
+ blocCondition = "FileFormat == '" + formatFich + "'"
+ dicoArgs[NomDuFichier] = SIMP(statut='o', typ = typeDesFichiers )
+ dicoDesBlocs[nomBloc] = BLOC( condition = blocCondition, **dicoArgs)
+ dicoArgs={}
+ dicoArgs[NomDuFichier]=SIMP(statut='o', typ = ('Fichier','All Files (*)'),),
+ dicoDesBlocs['b_format_fichier_others'] = BLOC(condition="FileFormat == 'others'", **dicoArgs)
+ if FieldName:
+ SIMPFieldName = SIMP(statut='o', typ = 'TXM',)
+ return BLOC(condition=laCondition, FileFormat = SIMPFormatFichier, **dicoDesBlocs, FieldName=SIMPFieldName)
+ else :
+ 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
+
+#PNPN : Passer le nom du champ pour le label du vecteur
+# A revoir
+ 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 (*)'),),
+ ), # fin vtd_txt
+ 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 FactTermeSource(condition):
+#------------------------------
+ return BLOC (condition=condition,
+ OriginOfSourceTerm = SIMP( statut='o', typ='TXM',into=['Interaction', 'Chemical Reaction', 'Other Scalar']),
+ )
+
+#-------------------------------------
+def FactTurbulence(statut, ajout=None):
+#-------------------------------------
+ listInto = ['Fully resolved (DNS)', 'Spatial filtering (LES)', 'One-point moment', 'One-point PDF']
+ if ajout != None : listInto.append(ajout)
+ return FACT(statut=statut,
+ TurbulenceModellingType = SIMP(typ='TXM', statut='o', into =listInto, ),
+ 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 == 'Fully resolved (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 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 ?
+ ),# Atom
+ ), # fin b_Atom
+ 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']),
+ ), #fin b_Molecule
+ b_Dissipative = BLOC( condition='ParticleNature == "Dissipative"',
+ DPDName = SIMP( statut='o', typ=(userDPD,'createObject'),),
+ BondedParticles = SIMP(statut="o", typ=bool, defaut=False),
+ ), # b_Dissipative
+ 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
+
+############################
+) # fin Particle
+
+def bloc_CPS():
+ return BLOC(condition = 'SystemType == "Classical particle system"',
+ Particle = Particle('**'),
+ )
+
+def bloc_FluideMacro():
+ return BLOC(condition = 'SystemType == "Continuum system"',
+ ComplexFluid = SIMP(typ=bool, statut='o', defaut = False, position='global'),
+ 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',
+ 'Passive on flow dynamics', 'Active on flow dynamics'], defaut='Non thermal', position='global' ),
+ TemperatureInitialisation = FACT( statut ='o',
+ bloc_NonThermalEffects = BLOC(condition = ' ThermalEffects == "Non thermal"',
+ InitialTemperature = SIMP(typ='R', statut='o', val_min=-273.15 ),
+ ), # fin bloc_NonThermal
+ bloc_NonNonThermalEffects = BLOC(condition = 'not(ThermalEffects == "Non thermal")',
+ OriginOfThermalFluxModel = SIMP( statut='o', into =['Given', 'Interaction', 'to be simulated'], typ ='TXM'),
+ BlocGiven =creeBlocPourLesFichiers (' OriginOfThermalFluxModel == "Given"', 'FileName', ('Med', 'cgns' ), FieldName=1),
+ ),
+ ),
+
+ bloc_ThermalEffects_Active = BLOC(condition = ' ThermalEffects == "Active on flow dynamics"',
+ ActiveOnFlowEffect = FACT(statut = 'o', max='**',
+ RelationType = SIMP( statut='o', into =['Equation Of State', 'Force-Flux Relation'], typ ='TXM'),
+ bloc_EOS=BLOC( condition = 'RelationType == "Equation Of State"',
+ TypeOfEquationOfState = SIMP( statut='o', into =['variable density', 'compressible'], typ ='TXM'),
+ ),
+ bloc_NonEOSAndSimple=BLOC( condition = 'RelationType == "Force-Flux Relation" and ComplexFluid == False',
+ TypeOfForceFluxRelation = SIMP( statut='o', into =['Viscosity', 'Diffusivity', 'Thermal Conductivity'], intoXML=['Viscosity', 'Diffusivity', 'Thermal Conductivity','Shear-stress closure', 'Scalar flux'], typ ='TXM'),
+ blocViscosity=BLOC( condition = 'TypeOfForceFluxRelation == "Viscosity"',
+ AFAIRE=SIMP(typ='TXM', statut = 'o', defaut = 'Initialisation ?')
+ ),
+ blocDiffusivity=BLOC( condition = 'TypeOfForceFluxRelation == "Diffusivity"',
+ AFAIRE=SIMP(typ='TXM', statut ='o', defaut = 'Initialisation ?')
+ ),
+ blocConductivity=BLOC( condition = 'TypeOfForceFluxRelation == "Thermal Conductivity"',
+ AFAIRE=SIMP(typ='TXM', statut ='o', defaut = 'Initialisation ?')
+ ),
+ ),
+ bloc_NonEOSAndComplex=BLOC( condition = 'RelationType == "Force-Flux Relation" and ComplexFluid == True',
+ TypeOfForceFluxRelation = SIMP( statut='o', into =['Shear-stress closure', 'Scalar flux'], typ ='TXM', intoXML=['Viscosity', 'Diffusivity', 'Thermal Conductivity','Shear-stress closure', 'Scalar flux']),
+ ),
+ ),
+ ), # fin bloc_ThermalEffects_Active
+
+ DensityInitialisation = FACT( statut ='o',
+ bloc_DensityNonThermal = BLOC(condition = ' ThermalEffects == "Non thermal" or ThermalEffects == "Passive on flow dynamics"',
+ DensityEquationOfState = SIMP(typ='TXM', statut='o', into =['Constant density'], defaut = 'Constant density'),
+ InitialDensity = SIMP(typ='R', statut='o',),
+ ), # fin bloc_DensityNonThermal
+ bloc_DensityAndThermalActive = BLOC(condition = ' ThermalEffects == "Active on flow dynamics"',
+ OriginOfThermalEffects = SIMP( statut='o', into =['Given', 'Constant density'], typ ='TXM', defaut ='Constant density'),
+ BlocGiven =creeBlocPourLesFichiers (' OriginOfThermalEffects == "Given"', 'FileName', ('Med', 'cgns' ), FieldName=1),
+ BlocConstant = BLOC(condition = 'OriginOfThermalEffects == "Constant density"',
+ InitialDensity = SIMP(typ='R', statut='o',),
+ ),
+ ),
+ ), # fin DensityInitialisation
+
+
+ ),# fin Fact Thermal
+
+ bloc_scalar_FluidTurbulentOrLaminar = BLOC(condition = "(ComplexFluid == False and FlowNature == 'Turbulent') or (ComplexFluid == False and FlowNature == 'Laminar')",
+ Scalars = FACT(statut = 'o',
+ bloc_FlowNature_Turbulent_For_Scalars = BLOC(condition = ' FlowNature == "Turbulent"',
+ asTurbulenceForFlowDynamics = SIMP (statut='o', typ=bool, defaut=True),
+ BlocAsTFFD = BLOC(condition = "asTurbulenceForFlowDynamics == False",
+ ScalarsTurbulenceModelling = FactTurbulence('o',),
+ ),
+ ),
+ bloc_ThermalEffects_On = BLOC(condition = ' ThermalEffects == "Active on flow dynamics" or ThermalEffects == "Passive on flow dynamics"',
+ TemperatureScalar =FACT(statut ='o',
+ Name = SIMP(typ=(scalar,'createObject'), statut='o', defaut ='Temperature', homo='constant'),
+ SourceTerm=SIMP(typ=bool, statut='o', defaut=False),
+ blocSourceTerm = FactTermeSource('SourceTerm==True'),
+ # bloc_scalar_FluidTurbulentandNonComplexe = BLOC (condition = "FlowNature == 'Turbulent'",
+ # ImplicitScalarFluxModel = FactTurbulence('f'),
+ # ) # bloc_scalar_FluidTurbulentandNonComplexe
+ ),# ObligatoireScalaire
+ ),
+ Scalar = FACT(statut = 'o', max ='**',
+ Name = SIMP(typ=(scalar,'createObject'), statut='o',),
+ bloc_scalar_FluidTurbulentandNonComplexe = BLOC (condition = "FlowNature == 'Turbulent'",
+ ScalarFluxModel = FactTurbulence('f'),
+ ), # bloc_scalar_FluidTurbulentandNonComplexe
+ SourceTerm=SIMP(typ=bool, statut='o', defaut=False),
+ blocSourceTerm = FactTermeSource('SourceTerm==True'),
+ ),# Scalar
+ ),# AdditionalScalars
+ ), # fin FluidTurbulentandNonComplexe
+ # il faut une validation de coherence entre l existence de tous les turbulencesModelling
+ )# fin bloc_FluideMacro
+
+#-----------------------------------------------------#
+def prepareBoundaryCondition():
+ return FACT( statut='o',max = '**', # max = nb de facette de bord
+ applyOnEssai = SIMP (statut ='o', typ=boundaryObject, ),
+ Type_Of_Boundary_Condition = SIMP( statut='o', typ='TXM', into=['Inlet', 'Outlet', 'Symmetry','Periodicity', 'Wall', 'Free Surface'], ),
+ b_periodique = BLOC( condition = "Type_Of_Boundary_Condition == 'Periodic'",
+ Direction = SIMP( statut='o', typ='TXM', into=['X','Y','Z', 'XYZ']),
+ ), # b_periodique
+
+ b_inlet = BLOC( condition = "Type_Of_Boundary_Condition == 'Inlet'",
+ Formulation_of_Boundary= SIMP( statut='o', typ='TXM', into=['Dirichlet','Neumann','Cauchy']),
+ b_Formulation_of_Boundary_dirichlet = BLOC( condition = 'Formulation_of_Boundary == "Dirichlet"',
+ InletProfile = SIMP (statut ='o', typ='TXM', defaut='QuestionJP'),
+ IntegratedValue = SIMP ( statut='o', typ='R'),
+ #PN : faire une regle
+ ),
+ ), # b_inlet
+ b_designe_Mesh = BLOC(condition = "SystemType == 'Continuum system'",
+ ApplyOnMeshGroups = SIMP (statut ='o', typ=meshGroup, max='**'),
+ ),
+ b_designe_Shape = BLOC(condition = "SystemType == 'Classical particle system'",
+ ApplyOnCadGroups = SIMP (statut ='o', typ=spatialRegion, max='**'),
+ ),
+# b_Formulation_of_Boundary_Neumann = BLOC( condition = 'Formulation_of_Boundary == "Neumann"',
+# ),
+# b_Formulation_of_Boundary_Cauchy = BLOC( condition = 'Formulation_of_Boundary == "Cauchy"',
+# ),
+
+# #b_non_periodique = BLOC( condition = "Type_Of_Boundary_Condition != 'Periodic'",
+# # Boundary_Face = SIMP( statut='o', typ= spatialRegion),
+# #Apply_to_Wich_Quantity = SIMP( statut='o', typ='TXM', into=['Mass FLux', 'Velocity', 'Temperature','Scalars','all',]),
+# ),
+
+ # Formulation_of_Boundary= SIMP( statut='o', typ='TXM', into=['Dirichlet','Neumann']),
+ # b_Formulation_of_Boundary_dirichlet = BLOC( condition = 'Formulation_of_Boundary == "Dirichlet"',
+ # Value = SIMP ( statut='o', typ='R'),
+ # ),
+ ) # Boundary_Conditions
+
+
+
+
+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'),
+ BoundaryConditions = FACT(statut = 'o',
+ DynamicalVariables = FACT (statut ='o',
+ BFlowNatureLaminar = BLOC(condition ='FlowNature == "Laminar"',
+ Fluid_Velocity = SIMP(typ=(dynamicVariable,'createObject'), statut='o', defaut ='Fluid_Velocity', homo='constant'),
+ Fluid_Pressure = SIMP(typ=(dynamicVariable,'createObject'), statut='o', defaut ='Fluid_Pressure', homo='constant'),
+ ),
+ BFlowNatureTurbulent = BLOC(condition ='FlowNature == "Turbulent"',
+ Avarage_Velocity = SIMP(typ=(dynamicVariable,'createObject'), statut='o', defaut ='Average_Velocity', homo='constant'),
+ Fluid_Pressure = SIMP(typ=(dynamicVariable,'createObject'), statut='o', defaut ='Fluid_Pressure', homo='constant'),
+ ),
+ ),
+ BoundaryCondition = prepareBoundaryCondition(),
+ )
+)
+
+Species = PROC(nom='Species',
+ Specie = FACT( statut='o', max ="**",
+ Name = SIMP( statut='o', typ=(especeChimique,'createObject') ),
+ masse_molaire = SIMP( statut='f', typ='R',),
+ )
+)
+
+def monBlocInteractionTypeChamp ():
+ return BLOC (condition = '1 == 1' , # a distinguer selon les cas
+ fieldNameInOrigine = SIMP(typ='TXM', statut='o'),
+ fieldNameInDestination = SIMP(typ='TXM', statut='o'),
+ )
+
+def TousSelonLeTypeDeFormatDisponible(condition, labelName='fileName'):
+ transferType = SIMP(typ='TXM', statut='o', into =['File', 'Memory', 'CorbaObject'])
+ maListe = list(dictCodeFormat.keys())
+ dicoArgs={}
+ #index=0
+ #for Solv1 in maListe[index:]:
+ # for Solv2 in maListe[index:]:
+ # #print (Solv1,Solv2, calculCommun(Solv1, Solv2,dictCodeFormat))
+ # print ('PNPN attention changement de dictCodeFormat tant que getEficasAttribut n est pas correct')
+ # conditionSolv = 'transferType == "File" and getEficasAttribut(origine,"Solver")==Solv1 and getEficasAttribut(destination,"Solver")==Solv2' ,
+ # conditionSolv = 'transferType == "File"'
+ # monBlocFichier=creeBlocPourLesFichiers (conditionSolv, 'FileName', calculCommun(Solv1, Solv2,dictCodeFormat))
+ # dicoArgs['monBlocFichier'+str(index)]=monBlocFichier
+ # index=index+1
+ mesFormats=set()
+ for solv1 in dictCodeFormat.keys() :
+ for f in dictCodeFormat[solv1] : mesFormats.add(f)
+ conditionSolv='transferType == "File"'
+ BlocFichier=creeBlocPourLesFichiers (conditionSolv, labelName, mesFormats)
+ dicoArgs['BlocFichier']=BlocFichier
+ monBlocChamp = BLOC(condition = "transferType=='File'", FieldName=SIMP(typ='TXM', statut='o'))
+ dicoArgs['monBlocChamp']=monBlocChamp
+ return BLOC(condition = condition,transferType=transferType, **dicoArgs)
+
+def SelonLeTypeDeFormatDisponibleMapper(condition):
+ transferType = SIMP(typ='TXM', statut='o', into =['File', 'Memory', 'CorbaObject'])
+ maListe = list(dictCodeFormat.keys())
+ dicoArgs={}
+ index=0
+ for Solv1 in maListe[index:]:
+ for Solv2 in maListe[index:]:
+ #print (Solv1,Solv2, calculCommun(Solv1, Solv2,dictCodeFormat))
+ print ('PNPN attention changement de dictCodeFormat tant que getEficasAttribut n est pas correct')
+ conditionSolv = 'transferType == "File" and getEficasAttribut(origine,"Solver")==Solv1 and getEficasAttribut(destination,"Solver")==Solv2' ,
+ conditionSolv = 'transferType == "File"'
+ monBlocFichier=creeBlocPourLesFichiers (conditionSolv, 'FileName', calculCommun(Solv1, Solv2,dictCodeFormat))
+ dicoArgs['monBlocFichier'+str(index)]=monBlocFichier
+ index=index+1
+ monBlocChamp = BLOC(condition = "transferType=='File'", FieldName=SIMP(typ='TXM', statut='o'))
+ dicoArgs['monBlocChamp']=monBlocChamp
+ return BLOC(condition = condition,transferType=transferType, **dicoArgs)
+
+Mapper = OPER (nom= 'Mapper',sd_prod=mapper,
+ Solver=SIMP(statut='o', typ='TXM', into = list(dictMapperFormat.keys())),
+ )
+Converter = OPER (nom= 'Converter',sd_prod=converter)
+
+Interactions = PROC(nom='Interactions',
+ Interaction = FACT( max = '**',
+ origine = SIMP(typ=modeleNumDuCompo, statut='o'),
+ destination = SIMP(typ=modeleNumDuCompo, statut='o'),
+ monBloc_FFFF = BLOC (
+ condition = 'getEficasAttribut(origine,"ModelType") == "Fields" and getEficasAttribut(destination,"ModelType") == "Fields"' ,
+ termeLE = SIMP(typ='TXM', statut='o', into = dictTermeLE['Fields','Fields'],fenetreIhm='menuDeroulant'),
+ ),
+ monBloc_DPDP = BLOC (
+ condition = 'getEficasAttribut(origine,"ModelType") == "Particles" and getEficasAttribut(destination,"ModelType") == "Particles"' ,
+ termeLE = SIMP(typ='TXM', statut='o', into = dictTermeLE['Particles','Particles'],fenetreIhm='menuDeroulant'),
+ ),
+ 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'),
+ ),
+ couplingPart = FACT( statut='o',
+ couplingMode = SIMP(typ='TXM', statut='o', into =['direct', 'scaling', 'conversion']),
+ monBlocDirect = TousSelonLeTypeDeFormatDisponible( "couplingMode=='direct'" ),
+ monBlocIn = BLOC ( condition = "couplingMode=='scaling' or couplingMode=='conversion'",
+ OutFromComponent = FACT( statut='o',
+ monBlocFormat = TousSelonLeTypeDeFormatDisponible( "1", labelName = 'outFromMapperFileName' ),
+ ),
+ ),
+ monBlocMapper = BLOC ( condition = "couplingMode=='scaling' or couplingMode=='conversion'",
+ ConversionNode = FACT( min=1, max='**', statut ='o',
+ tool = SIMP(typ=mapper, statut ='o'),
+ OutFromMapper = FACT (statut ='o',
+ monBlocFormat = TousSelonLeTypeDeFormatDisponible( "1", labelName = 'outFromMapperFileName' ),
+ ),
+ ),
+ ),
+ ),
+ monBlocUseConverter = BLOC ( condition = "couplingMode=='use converter'",
+ myConverter = SIMP(typ=converter, statut ='o')
+ ),
+ ),
+)
+
+dict_condition={
+'ModelType' : ('Interactions', 'Component'),
+#'NumericalMethod' : ('Interactions', 'Component'),
+# 'TypeOfSolid' : ('Component',)
+}
+
+Temporal_Aspects = PROC( nom ="Temporal_Aspects",
+ Simulated_Time_Laps = FACT (statut='o', max='**',
+ name = SIMP(statut='o', typ=(simulatedTime,'createObject'),),
+ initialTime = SIMP( statut='o', typ='R'),
+ finalTime = SIMP( statut='o', typ='R'),
+ timeDiscretization = SIMP( statut ='o', typ = 'TXM', into = ['Constant Time Step', 'Varying Time Step']),
+ bloc_Constant = BLOC (condition = 'timeDiscretization == "Constant Time Step"',
+ constantTimeStep = SIMP (statut ='o', typ = 'R'),
+ ),
+ bloc_Varying = BLOC (condition = 'timeDiscretization == "Varying Time Step"',
+ CFLNumberCriteria = SIMP (statut ='o', typ = 'R'),
+ FourierNumberCriteria = SIMP (statut ='o', typ = 'R'),
+ ),
+ ),
+)
+#
+Spatial_Aspects = PROC( nom='Spatial_Aspects',
+ System_Geometry = FACT ( statut='o', max='**',
+ System_Geometry_name = SIMP( statut='o', typ=(systemGeometry, 'createObject'),),
+ Shape = FACT (statut ='f', max='**',
+ Shape_Nature = SIMP( statut='o', typ='TXM', into=['Typical Geometry', 'CAD']),
+ b_Shape = BLOC( condition = 'Shape_Nature == "Typical Geometry"',
+ 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'),),)
+ Size_Of_Bounding_Box = SIMP( statut='o', typ='R', max=3, min=3, ),
+ ), # fin b_Cube
+ b_Boule = BLOC( condition = 'Box == "Sphere"',
+ Center = SIMP( statut='o', typ='R', max=3, min =3),
+ ),# 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_Nature == 'CAD'",'Domain_File', ['txt','I-deas', 'Gmsh', 'top',]),
+ ShapeIdentifier=SIMP( statut='o', typ=(cadShape,'createObject'),max='**',),
+ ), # fin Shape
+ ),# System_Geometry
+ Spatial_Discretization = FACT ( statut='f', max="**",
+ Mesh_Name = SIMP( statut='o', typ=(meshIdentifier,'createObject')),
+ b_Mesh = creeBlocPourLesFichiers( "1 == 1",'Domain_File', ['med', 'Gmsh',]),
+ GroupIdentifier = SIMP( statut='o', typ=(meshGroup,'createObject'),max='**',),
+ ),
+ Boundary_Constraints = FACT (statut = 'f',
+ Motion = FACT ( statut='f',
+ Motion_Nature = SIMP(statut='o', typ='TXM', into=['Fixed boudary', 'Translational motion', 'Rotational motion', 'Scaling']),
+ b_Translational_motion=BLOC(condition = 'Motion_Nature == "Translational motion"',
+ Translation_Velocity=SIMP( statut='o', typ='R'),
+ boundaries=SIMP( statut='o', typ=spatialRegion,max='**' ),
+ ),
+ b_Rotational_motion=BLOC(condition = 'Motion_Nature == "Rotational motion"',
+ Rotation_Rate=SIMP( statut='o', typ='R'),
+ boundaries=SIMP( statut='o', typ=spatialRegion,max='**' ),
+ ),
+ b_fixed=BLOC(condition = 'Motion_Nature == "Fixed boudary"',
+ boundaries=SIMP( statut='o', typ=spatialRegion,max='**', homo='SansOrdreNiDoublon'),
+ #boundaries=SIMP( statut='o', typ=spatialRegion,max='**' ),
+ ),
+ ),
+#PN decrire page 28
+ Mapping = FACT ( statut='f',
+ ),
+ ), # Boundary_Constraints
+) # fin Geometric_Domain
+
+TEXTE_NEW_JDC = "\
+Velocity=scalar()\
+"