From 40534e15a87d5328787de1119fc1f50acdb924ec Mon Sep 17 00:00:00 2001 From: muezabdalla Date: Tue, 30 Jun 2026 19:36:57 +0300 Subject: [PATCH 1/4] add a ui for editing time settings for the solver --- CfdOF/Solve/CfdSolverFoam.py | 1 + CfdOF/Solve/TaskPanelCfdSolverControl.py | 31 ++++++ Gui/TaskPanelCfdSolverControl.ui | 135 ++++++++++++++++++++++- 3 files changed, 165 insertions(+), 2 deletions(-) diff --git a/CfdOF/Solve/CfdSolverFoam.py b/CfdOF/Solve/CfdSolverFoam.py index 27a8515d..a0e38fc3 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..72ab87a9 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) @@ -82,10 +95,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..5b0c56f9 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 From 2edb52f65b9bb2e1a788a6399c52b8745a7530a9 Mon Sep 17 00:00:00 2001 From: muezabdalla Date: Wed, 1 Jul 2026 14:05:42 +0300 Subject: [PATCH 2/4] make arabic translation for the time setting ui --- Translations/CfdOF_ar.qm | Bin 65348 -> 65788 bytes Translations/CfdOF_ar.ts | 29 +++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Translations/CfdOF_ar.qm b/Translations/CfdOF_ar.qm index 62d9818fc4a7e8a6ede8cb165297e2347e01470a..281e8105e291e17856ee2b823951a50d300eee08 100644 GIT binary patch delta 649 zcmX|-ZAepL6vxk=>2vSyywj9LEMI2J=}eaM!#+7lDZ@a*LZOIg;MEprw$05iy%;70 z`e7WDKBT=sfdx{IKoK!WDFp)|i=>%l?#1oyTIiQvq(=o09DZ=l|D5yZOl_(EcBbgd zM;i~!D);;5^0Ox|J(>tr0qo-gdNWxY4LHmsSr?F6Nqj7@&`)B6*rE!PZjD2$tOv4~z{0)V$?~9&fSwIqcOmWv&+S zk-TPrk1zP>a~Hey0aFDh=k$b_k8+d*A4zs$h++8_)@$u##fH7wYLd*s1+Cc-_X!Cs z0T_l|j^+u!Dw*Z*wV*yNS0((IPfNRbhdrPR9bzZwi(7SiLinx14lMJ+tApe%W*wbAHxwMh6dVKV7hw}>94CZ=ao zdn&=>b-KOACim5rZJo-1`FHhMJDc}3={sAridCDvbE}G0(lT5;eNfPBcZ?pd)W(Jj m#7bIBZPc=B3Fk|*bUMG=<&})CRNYczNa}La3ee zFn&xHrL;gPLK*Im5h3ED7St`FV7BGn-kW=`f6P-UJ?iw~d-{IAe@0!|EwS;)!jEZ#*c=`T8aFMJwpq%6By1|CEq+|rI0xN0Be0CkE9_L+hKgVQ^tQv31!?gN?HD8#D zDW3J6Bx{^Ee4(aFS+@89Fo*vx1m$1d&eT#db4Y0xEU_JE_v%B=i*IK#t=np=nVFwG^?w1U + time Parameters + اعدادات الزمن + + + + start from + ابدأ من + + + + end time + زمن النهاية + + + + write interval + فترة الكتابة + + + + time step + القفزة الزمنية + + + Solver Parameters اعدادات المحلل - + Solve in Parallel تحليل على التوازي - + Number of Parallel Cores عدد الانوية على التوازي From 39a95966924bd35639194a8e3ab71f142252757c Mon Sep 17 00:00:00 2001 From: muezabdalla Date: Wed, 1 Jul 2026 14:25:47 +0300 Subject: [PATCH 3/4] add the tooltips for the new ui --- CfdOF/Solve/TaskPanelCfdSolverControl.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CfdOF/Solve/TaskPanelCfdSolverControl.py b/CfdOF/Solve/TaskPanelCfdSolverControl.py index 72ab87a9..fdb95c70 100644 --- a/CfdOF/Solve/TaskPanelCfdSolverControl.py +++ b/CfdOF/Solve/TaskPanelCfdSolverControl.py @@ -78,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") From dcef71fd6b1079a4a0f093be0ef8a0be1af069d3 Mon Sep 17 00:00:00 2001 From: muezabdalla Date: Thu, 16 Jul 2026 02:01:32 +0300 Subject: [PATCH 4/4] use initial capitalization --- CfdOF/Solve/CfdSolverFoam.py | 2 +- CfdOF/Solve/TaskPanelCfdSolverControl.py | 10 +++++----- Gui/TaskPanelCfdSolverControl.ui | 10 +++++----- Translations/CfdOF_ar.qm | Bin 65788 -> 65788 bytes Translations/CfdOF_ar.ts | 12 ++++++------ 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/CfdOF/Solve/CfdSolverFoam.py b/CfdOF/Solve/CfdSolverFoam.py index a0e38fc3..d1ac69bb 100644 --- a/CfdOF/Solve/CfdSolverFoam.py +++ b/CfdOF/Solve/CfdSolverFoam.py @@ -41,7 +41,7 @@ # Constants START_FROM = ["startTime", "latestTime"] -START_FROM_NAMES = ["start time", "latest time"] +START_FROM_NAMES = ["Start time", "Latest time"] def makeCfdSolverFoam(name="CfdSolver"): diff --git a/CfdOF/Solve/TaskPanelCfdSolverControl.py b/CfdOF/Solve/TaskPanelCfdSolverControl.py index fdb95c70..4ef62627 100644 --- a/CfdOF/Solve/TaskPanelCfdSolverControl.py +++ b/CfdOF/Solve/TaskPanelCfdSolverControl.py @@ -79,11 +79,11 @@ 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.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") diff --git a/Gui/TaskPanelCfdSolverControl.ui b/Gui/TaskPanelCfdSolverControl.ui index 5b0c56f9..f24a9c98 100644 --- a/Gui/TaskPanelCfdSolverControl.ui +++ b/Gui/TaskPanelCfdSolverControl.ui @@ -43,14 +43,14 @@ - time Parameters + Time Parameters - start from + Start from @@ -61,7 +61,7 @@ - end time + End time @@ -100,7 +100,7 @@ - write interval + Write interval @@ -139,7 +139,7 @@ - time step + Time step diff --git a/Translations/CfdOF_ar.qm b/Translations/CfdOF_ar.qm index 281e8105e291e17856ee2b823951a50d300eee08..d68c66307a5c86f4a4781a3cbb407c6b291079ac 100644 GIT binary patch delta 228 zcmVFP?04!0kDx>jsoA7vF+jl2JyfE0N+EC)dR`~tn~l@+)b0E z1nLH#6953-?30xR&k^hes*A$_0L9J)s*A$_0N!%5bp|H_0hzO%2vz|C-3^oV35f?| zbKL*{-Ym0)3dsTo1E4c7tzi?h8Dw%n5z@F56A zZe$>IX>Db*Q0=w>lVb200aKHF@GO&I?|PG{@Ff9Mlg{v12~=rqWgv5OWpI;F?IV-h e?>m!H@go6OlXmeilLqf60dtcs?=!Qe@m3G&`eDBS delta 253 zcmVF1d$~-0eO*Kjso7bvF+jl2GPI(0N>e@)dR`~s`UT>-td#9 z1nLIA6953;f|Hd6&k>*ns*A$_0L9J)s*A$_0Ny*Zbp|H_0Zp@=2vz|C+`*Ie35f?` zbKL*{-#oL03dsT=2vHsY0OZjO41a|H0ON!VB4QK(0C#f?Bd5~<0Nvn|Z4Gh;?OXr= z;4HJ{4c7tzKeN3Mw%oJ7?UMnMOYtWLQ*Uf`Wpa}{@Gg^>?|PHG@H>-p?I8$dZe$>I zX>Dbb5bh_FR__%7bCYcEER*EZ7LzFO4*_(OIPh2jbd! - time Parameters + Time Parameters اعدادات الزمن - start from + Start from ابدأ من - end time + End time زمن النهاية - write interval + Write interval فترة الكتابة - time step + Time step القفزة الزمنية - Solver Parameters + solver Parameters اعدادات المحلل