diff --git a/CfdOF/Solve/CfdSolverFoam.py b/CfdOF/Solve/CfdSolverFoam.py index 27a8515d..d1ac69bb 100644 --- a/CfdOF/Solve/CfdSolverFoam.py +++ b/CfdOF/Solve/CfdSolverFoam.py @@ -41,6 +41,7 @@ # Constants START_FROM = ["startTime", "latestTime"] +START_FROM_NAMES = ["Start time", "Latest time"] def makeCfdSolverFoam(name="CfdSolver"): diff --git a/CfdOF/Solve/TaskPanelCfdSolverControl.py b/CfdOF/Solve/TaskPanelCfdSolverControl.py index 11ce89ff..4ef62627 100644 --- a/CfdOF/Solve/TaskPanelCfdSolverControl.py +++ b/CfdOF/Solve/TaskPanelCfdSolverControl.py @@ -31,6 +31,8 @@ import os.path import time from CfdOF.CfdConsoleProcess import CfdConsoleProcess +from CfdOF.Solve import CfdSolverFoam +from CfdOF.CfdTools import setQuantity, indexOrDefault, storeIfChanged if FreeCAD.GuiUp: import FreeCADGui from PySide import QtCore @@ -46,6 +48,7 @@ def __init__(self, solver_runner_obj): self.form = FreeCADGui.PySideUic.loadUi(ui_path) self.analysis_object = CfdTools.getActiveAnalysis() + self.physics_object = CfdTools.getPhysicsModel(self.analysis_object) self.solver_runner = solver_runner_obj self.solver_object = solver_runner_obj.solver @@ -56,6 +59,16 @@ def __init__(self, solver_runner_obj): self.solver_object.Proxy.solver_process = CfdConsoleProcess(finished_hook=self.solverFinished, stdout_hook=self.gotOutputLines, stderr_hook=self.gotErrorLines) + self.form.comboBoxStartFrom.addItems(CfdSolverFoam.START_FROM_NAMES) + if self.physics_object.Time == "Steady": + self.form.inputFieldEndTime.setVisible(False) + self.form.inputFieldWriteInterval.setVisible(False) + self.form.inputFieldTimeStep.setVisible(False) + self.form.labelTimeStep.setVisible(False) + else: + self.form.spinBoxEndTime.setVisible(False) + self.form.spinBoxWriteInterval.setVisible(False) + self.Timer = QtCore.QTimer() self.Timer.setInterval(1000) self.Timer.timeout.connect(self.updateText) @@ -65,6 +78,12 @@ def __init__(self, solver_runner_obj): self.working_dir = CfdTools.getOutputPath(self.analysis_object) + self.form.comboBoxStartFrom.setToolTip("Whether to start from 0 or from the latest time step") + self.form.inputFieldEndTime.setToolTip("The end time for the simulation") + self.form.spinBoxEndTime.setToolTip("The number of iterations for the simulation") + self.form.inputFieldWriteInterval.setToolTip("The time period between each write of the time step") + self.form.spinBoxWriteInterval.setToolTip("The iterations between each write of the time step") + self.form.inputFieldTimeStep.setToolTip("The maximum time step for the simulation (might decrease to maintaine the limits for CFnumber and maxCo ..etc)") self.form.inputParallel.setToolTip("Whether to Solve the Case in Parallel") self.form.inputParallelCores.setToolTip("Number of Parallel Cores to Use") @@ -82,10 +101,28 @@ def __init__(self, solver_runner_obj): self.Timer.start() def load(self): + self.form.comboBoxStartFrom.setCurrentIndex( + indexOrDefault(CfdSolverFoam.START_FROM, self.solver_object.StartFrom, 0)) + if self.physics_object.Time == "Steady": + self.form.spinBoxEndTime.setValue(self.solver_object.MaxIterations) + self.form.spinBoxWriteInterval.setValue(self.solver_object.SteadyWriteInterval) + else: + setQuantity(self.form.inputFieldEndTime, self.solver_object.EndTime) + setQuantity(self.form.inputFieldWriteInterval, self.solver_object.TransientWriteInterval) + setQuantity(self.form.inputFieldTimeStep, self.solver_object.TimeStep) self.form.inputParallel.setChecked(self.solver_object.Parallel) self.form.inputParallelCores.setValue(self.solver_object.ParallelCores) def store(self): + storeIfChanged(self.solver_object, 'StartFrom', + CfdSolverFoam.START_FROM[self.form.comboBoxStartFrom.currentIndex()]) + if self.physics_object.Time == "Steady": + CfdTools.storeIfChanged(self.solver_object, 'MaxIterations', self.form.spinBoxEndTime.value()) + CfdTools.storeIfChanged(self.solver_object, 'SteadyWriteInterval', self.form.spinBoxWriteInterval.value()) + else: + CfdTools.storeIfChanged(self.solver_object, 'EndTime', self.form.inputFieldEndTime.property("quantity").Value) + CfdTools.storeIfChanged(self.solver_object, 'TransientWriteInterval', self.form.inputFieldWriteInterval.property("quantity").Value) + CfdTools.storeIfChanged(self.solver_object, 'TimeStep', self.form.inputFieldTimeStep.property("quantity").Value) CfdTools.storeIfChanged(self.solver_object, 'Parallel', self.form.inputParallel.isChecked()) CfdTools.storeIfChanged(self.solver_object, 'ParallelCores', self.form.inputParallelCores.value()) diff --git a/Gui/TaskPanelCfdSolverControl.ui b/Gui/TaskPanelCfdSolverControl.ui index a44126b0..f24a9c98 100644 --- a/Gui/TaskPanelCfdSolverControl.ui +++ b/Gui/TaskPanelCfdSolverControl.ui @@ -35,6 +35,137 @@ 8 + + + + 75 + true + + + + Time Parameters + + + + + + + Start from + + + + + + + + + + + End time + + + + + + + + 0 + 0 + + + + 0 + + + 1.000000000000000 + + + s + + + 0 + + + + + + + 1 + + + 100000000 + + + + + + + Write interval + + + + + + + + 0 + 0 + + + + 0 + + + 1.000000000000000 + + + s + + + 0 + + + + + + + 1 + + + 100000000 + + + + + + + Time step + + + + + + + + 0 + 0 + + + + 0 + + + 1.000000000000000 + + + s + + + 0 + + + + @@ -47,7 +178,7 @@ - + @@ -60,7 +191,7 @@ - + QFrame::NoFrame diff --git a/Translations/CfdOF_ar.qm b/Translations/CfdOF_ar.qm index 62d9818f..d68c6630 100644 Binary files a/Translations/CfdOF_ar.qm and b/Translations/CfdOF_ar.qm differ diff --git a/Translations/CfdOF_ar.ts b/Translations/CfdOF_ar.ts index 6d428655..a2ef2091 100644 --- a/Translations/CfdOF_ar.ts +++ b/Translations/CfdOF_ar.ts @@ -2635,16 +2635,41 @@ Re-mesh case first? - Solver Parameters + Time Parameters + اعدادات الزمن + + + + Start from + ابدأ من + + + + End time + زمن النهاية + + + + Write interval + فترة الكتابة + + + + Time step + القفزة الزمنية + + + + solver Parameters اعدادات المحلل - + Solve in Parallel تحليل على التوازي - + Number of Parallel Cores عدد الانوية على التوازي