1 from PyQt4 import QtGui, QtCore
2 from PyQt4.uic import loadUi
3 from utils import completeResPath
8 class MainCFWidget(QtGui.QTabWidget):
10 QtGui.QTabWidget.__init__(self)
11 loadUi(completeResPath("MainCFWidget.ui"), self)
12 self._python_dump = []
14 def scanWidgets(self):
17 for k in self.__dict__:
18 att = self.__dict__[k]
19 if isinstance(att, QtGui.QWidget):
20 name = str(att.objectName())
23 if name.endswith("RadioButton"):
24 assert(isinstance(att, QtGui.QRadioButton))
27 name=name[:len(name)-len("_RadioButton")]#On retire le suffixe _Radiobutton
28 if name.startswith("Dim") :
29 dictCF["spaceDim"]=int(name[len("Dim")])
30 elif name=="DriftModel" or "name==SinglePhase" or name.endswith("Equation") or name.endswith("TwoFluid") :
31 dictCF["ModelName"]=name
32 elif name=="InputFileName" :
33 dictCF["InputFileName"]=True
34 elif name=="MeshCreation" :
35 dictCF["MeshCreation"]=True
36 elif name.endswith("spinBox") :
37 assert(isinstance(att, QtGui.QSpinBox))
40 name=name[:len(name)-len("_spinBox")]#On retire le suffixe _SpinBox
47 elif name=="NO_MaxNbOfTimeStep" :
48 dictCF["MaxNbOfTimeStep"]=val
49 elif name=="NO_FreqSave" :
50 dictCF["FreqSave"]=val
51 elif name.endswith("doubleSpinBox"):
52 assert(isinstance(att, QtGui.QDoubleSpinBox))
55 name=name[:len(name)-len("_doubleSpinBox")]#On retire le suffixe _doubleSpinBox
56 if name.endswith("Conductivity") :
57 dictCF["Conductivity"]=val
58 elif name.endswith("Conductivity_Phase1") :
59 dictCF["Conductivity1"]=val
60 elif name.endswith("Conductivity_Phase2") :
61 dictCF["Conductivity2"]=val
62 elif name.endswith("Viscosity") :
63 dictCF["Viscosity"]=val
64 elif name.endswith("Viscosity_Phase1") :
65 dictCF["Viscosity1"]=val
66 elif name.endswith("Viscosity_Phase2") :
67 dictCF["Viscosity2"]=val
68 elif name.endswith("HeatSource") :
69 dictCF["HeatSource"]=val
70 elif name.endswith("FrictionCoefficients") :
71 dictCF["FrictionCoefficients"]=val
72 elif name.endswith("Gravity_1d") :
73 dictCF["Gravity_1d"]=val
74 elif name.endswith("Gravity_2d") :
75 dictCF["Gravity_2d"]=val
76 elif name.endswith("Gravity_3d") :
77 dictCF["Gravity_3d"]=val
90 elif name=="NO_TimeMax" :
92 elif name=="NO_Precision" :
93 dictCF["Precision"]=val
96 elif name.endswith("_IC") :#Initial conditions
97 name=name[:len(name)-len("_IC")]#On retire le suffixe _IC
98 if name.endswith("Concentration") :
99 dictCF["InitialConcentration"]=val
100 elif name.endswith("Alpha") :
101 dictCF["InitialAlpha"]=val
102 elif name.endswith("Pressure") :
103 dictCF["InitialPressure"]=val
104 elif name.endswith("Temperature") :
105 dictCF["InitialTemperature"]=val
106 elif name.endswith("Velocity_1d") :
107 dictCF["InitialVelocity_1d"]=val
108 elif name.endswith("Velocity_2d") :
109 dictCF["InitialVelocity_2d"]=val
110 elif name.endswith("Velocity_3d") :
111 dictCF["InitialVelocity_3d"]=val
112 elif name.endswith("_BC") :#Boundary conditions
113 name=name[3:len(name)-len("_BC")]#On retire le préfixe SP_ ou DM_ au début et le suffixe _BC à la fin
115 elif name.endswith('comboBox'):
116 assert(isinstance(att, QtGui.QComboBox))
117 val = att.currentText()
119 name=name[:len(name)-len("_comboBox")]#On retire le suffixe _comboBox
120 if name.endswith("1barOr155bar") :
121 dictCF["pressureEstimate"]=val
122 elif name.endswith("GasOrLiquid") :
123 dictCF["fluidType"]=val
124 elif name.endswith("_BC") :#Boundary conditions
125 name=name[4:len(name)-len("_BC")]#On retire le préfixe SP_ ou DM_ au début et le suffixe _BC à la fin
127 elif name=="NO_Method" :
130 dictCF["LS"]=val #Linear solver
131 elif name=="NO_Scheme" :
133 elif name=="NO_Scheme_type" :
134 dictCF["Scheme_type"]=val
135 elif name=="NO_Preconditioner" :
136 dictCF["Preconditioner"]=val
137 elif name.endswith('lineEdit'):
138 assert(isinstance(att, QtGui.QLineEdit))
139 val = str(att.text())
141 name=name[:len(name)-len("_lineEdit")]#On retire le suffixe _comboBox
143 if name=="NO_ResultFileName" :
144 dictCF["ResultFileName"]=val
145 elif name=="InputFileName" :
146 dictCF["InputFileName"]=val
150 def onLaunchSimu(self):
151 print "Reading widgets"
152 dictCF = self.scanWidgets()
154 print "Setting Model and VV_Constant"
155 ######## Setting Model and VV_Constant #########################
156 if dictCF["ModelName"]=="SinglePhase" :
157 exec "myProblem = cf.%s(cf.%s,cf.%s,%s)" % (dictCF["ModelName"],dictCF["fluidType"],dictCF["pressureEstimate"],dictCF["spaceDim"])
158 nVar = myProblem.getNumberOfVariables()
159 VV_Constant =[0]*nVar
160 VV_Constant[0] = dictCF["InitialPressure"]
161 VV_Constant[1] = dictCF["InitialVelocity_1d"]
162 if dictCF["spaceDim"] >1 :
163 VV_Constant[2] = dictCF["InitialVelocity_2d"]
164 if dictCF["spaceDim"] >2 :
165 VV_Constant[3] = dictCF["InitialVelocity_3d"]
166 VV_Constant[nVar-1] = dictCF["InitialTemperature"]
167 elif dictCF["ModelName"]=="DriftModel" :
168 exec "myProblem = cf.%s(cf.%s,%s)" % (dictCF["ModelName"],dictCF["pressureEstimate"],dictCF["spaceDim"])
169 nVar = myProblem.getNumberOfVariables()
170 VV_Constant =[0]*nVar
171 VV_Constant[0] = dictCF["InitialConcentration"]
172 VV_Constant[1] = dictCF["InitialPressure"]
173 VV_Constant[2] = dictCF["InitialVelocity_1d"]
174 if dictCF["spaceDim"] >1 :
175 VV_Constant[3] = dictCF["InitialVelocity_2d"]
176 if dictCF["spaceDim"] >2 :
177 VV_Constant[4] = dictCF["InitialVelocity_3d"]
178 VV_Constant[nVar-1] = dictCF["InitialTemperature"]
180 raise NameError('Model not yet handled', dictCF["ModelName"])
182 print "Setting initial data"
183 ############ setting initial data ################################
184 if dictCF["spaceDim"] ==1 :
185 print "spaceDim= ", dictCF["spaceDim"]
186 print "VV_Constant= ", VV_Constant
187 print "Xinf= ", dictCF["Xinf"]
188 print "Xsup= ", dictCF["Xsup"]
189 print "Nx= ", dictCF["Nx"]
190 myProblem.setInitialFieldConstant( dictCF["spaceDim"], VV_Constant, dictCF["Xinf"], dictCF["Xsup"], dictCF["Nx"],"Left","Right");
191 print "Initial field set"
192 elif dictCF["spaceDim"] ==2 :
193 myProblem.setInitialFieldConstant( dictCF["spaceDim"], VV_Constant, dictCF["Xinf"], dictCF["Xsup"], dictCF["Nx"],"Left","Right", dictCF["Yinf"], dictCF["Ysup"], dictCF["Ny"],"Bottom","Top");
194 elif dictCF["spaceDim"] ==3 :
195 myProblem.setInitialFieldConstant( dictCF["spaceDim"], VV_Constant, dictCF["Xinf"], dictCF["Xsup"], dictCF["Nx"],"Back","Front", dictCF["Yinf"], dictCF["Ysup"], dictCF["Ny"],"Left","Right", dictCF["Zinf"], dictCF["Zsup"], dictCF["Nz"],"Bottom","Top");
197 raise NameError('Dimension should be 1, 2 or 3', dictCF["spaceDim"])
199 # for k, v in dictCF.items():
200 # line = "cf.set%s(%s)" % (k, v)
202 # self._python_dump.append(line)
204 ######## 1D for the moment ######################
205 if dictCF["ModelName"]=="SinglePhase" :
206 myProblem.setInletBoundaryCondition("Left",dictCF["Temperature_Left"],dictCF["Concentration_Left"],dictCF["Velocity_1d_Left"])
207 myProblem.setOutletBoundaryCondition("Right", dictCF["Pressure_Right"]);
208 elif dictCF["ModelName"]=="DriftModel" :
209 myProblem.setInletBoundaryCondition("Left",dictCF["DM_Temperature_Left"],dictCF["DM_Velocity_1d_Left"])
210 myProblem.setOutletBoundaryCondition("Right", dictCF["DM_Pressure_Right"]);
212 ########## Physical forces #################
213 myProblem.setHeatSource(dictCF["HeatSource"]);
214 gravite=[0]*dictCF["spaceDim"]
215 gravite[0]=dictCF["Gravity_1d"]
216 if dictCF["spaceDim"] >1 :
217 gravite[1]=dictCF["Gravity_2d"]
218 if dictCF["spaceDim"] >2 :
219 gravite[2]=dictCF["Gravity_3d"]
220 myProblem.setGravity(gravite)
222 ########## Numerical options ###############
223 exec "myProblem.setNumericalScheme(cf.%s, cf.%s)" % (dictCF["Scheme"],dictCF["Method"])
224 myProblem.setWellBalancedCorrection(True);
226 myProblem.setCFL(dictCF["CFL"]);
227 myProblem.setPrecision(dictCF["Precision"]);
228 myProblem.setMaxNbOfTimeStep(dictCF["MaxNbOfTimeStep"]);
229 myProblem.setTimeMax(dictCF["TimeMax"]);
230 myProblem.setFreqSave(dictCF["FreqSave"]);
231 myProblem.setFileName(dictCF["ResultFileName"]);
232 myProblem.saveConservativeField(True);
233 #myProblem.setVerbose(True);
234 myProblem.usePrimitiveVarsInNewton(True);
235 if(dictCF["spaceDim"]>1):
236 myProblem.saveVelocity();
239 myProblem.initialize()
244 print( "Simulation " + dictCF["ResultFileName"] + " is successful !" );
247 print( "Simulation " + dictCF["ResultFileName"] + " failed ! " );
250 print( "------------ End of calculation !!! -----------" );
252 myProblem.terminate()
254 # TODO use a helper object here.