Fem: Enable "Stop CalculiX" button - fixes #11448

This commit is contained in:
marioalexis
2024-02-05 19:37:19 -03:00
committed by Chris Hennes
parent 4fb4288905
commit 05916fcbd3

View File

@@ -103,6 +103,11 @@ class _TaskPanel:
QtCore.SIGNAL("clicked()"),
self.runCalculix
)
QtCore.QObject.connect(
self.form.pb_run_ccx,
QtCore.SIGNAL("clicked()"),
self.stopCalculix
)
QtCore.QObject.connect(
self.form.rb_static_analysis,
QtCore.SIGNAL("clicked()"),
@@ -145,7 +150,7 @@ class _TaskPanel:
)
QtCore.QObject.connect(
self.Calculix,
QtCore.SIGNAL("finished(int)"),
QtCore.SIGNAL("finished(int, QProcess::ExitStatus)"),
self.calculixFinished
)
QtCore.QObject.connect(
@@ -245,7 +250,7 @@ class _TaskPanel:
else:
self.femConsoleMessage("Problems.")
def calculixFinished(self, exitCode):
def calculixFinished(self, exitCode, exitStatus):
# print("calculixFinished(), exit code: {}".format(exitCode))
FreeCAD.Console.PrintLog("calculix state: {}\n".format(self.Calculix.state()))
@@ -254,12 +259,16 @@ class _TaskPanel:
self.Timer.stop()
self.form.pb_run_ccx.setText("Re-run CalculiX")
if exitStatus != QtCore.QProcess.ExitStatus.NormalExit:
return
if self.printCalculiXstdout():
self.calculixNoError()
else:
self.calculixError()
self.form.pb_run_ccx.setText("Re-run CalculiX")
self.femConsoleMessage("Loading result sets...")
self.form.l_time.setText("Time: {0:4.1f}: ".format(time.time() - self.Start))
self.fea.reset_mesh_purge_results_checked()
@@ -354,45 +363,50 @@ class _TaskPanel:
FemGui.open(self.fea.inp_file_name)
def runCalculix(self):
if self.fea.ccx_binary_present is False:
self.femConsoleMessage(
"CalculiX can not be started. Missing or incorrect CalculiX binary: {}"
.format(self.fea.ccx_binary)
if self.Calculix.state() == QtCore.QProcess.ProcessState.NotRunning:
if self.fea.ccx_binary_present is False:
self.femConsoleMessage(
"CalculiX can not be started. Missing or incorrect CalculiX binary: {}"
.format(self.fea.ccx_binary)
)
# TODO deactivate the run button
return
# print("runCalculix")
self.Start = time.time()
self.femConsoleMessage("CalculiX binary: {}".format(self.fea.ccx_binary))
self.femConsoleMessage("CalculiX input file: {}".format(self.fea.inp_file_name))
self.femConsoleMessage("Run CalculiX...")
FreeCAD.Console.PrintMessage(
"run CalculiX at: {} with: {}\n"
.format(self.fea.ccx_binary, self.fea.inp_file_name)
)
# TODO deactivate the run button
return
# print("runCalculix")
self.Start = time.time()
# change cwd because ccx may crash if directory has no write permission
# there is also a limit of the length of file names so jump to the document directory
self.femConsoleMessage("CalculiX binary: {}".format(self.fea.ccx_binary))
self.femConsoleMessage("CalculiX input file: {}".format(self.fea.inp_file_name))
self.femConsoleMessage("Run CalculiX...")
# Set up for multi-threading. Note: same functionality as ccx_tools.py/start_ccx()
ccx_prefs = FreeCAD.ParamGet(self.PREFS_PATH)
env = QtCore.QProcessEnvironment.systemEnvironment()
num_cpu_pref = ccx_prefs.GetInt("AnalysisNumCPUs", 1)
if num_cpu_pref > 1:
env.insert("OMP_NUM_THREADS", str(num_cpu_pref))
else:
cpu_count = os.cpu_count()
if cpu_count is not None and cpu_count > 1:
env.insert("OMP_NUM_THREADS", str(cpu_count))
self.Calculix.setProcessEnvironment(env)
FreeCAD.Console.PrintMessage(
"run CalculiX at: {} with: {}\n"
.format(self.fea.ccx_binary, self.fea.inp_file_name)
)
# change cwd because ccx may crash if directory has no write permission
# there is also a limit of the length of file names so jump to the document directory
self.cwd = QtCore.QDir.currentPath()
fi = QtCore.QFileInfo(self.fea.inp_file_name)
QtCore.QDir.setCurrent(fi.path())
self.Calculix.start(self.fea.ccx_binary, ["-i", fi.baseName()])
# Set up for multi-threading. Note: same functionality as ccx_tools.py/start_ccx()
ccx_prefs = FreeCAD.ParamGet(self.PREFS_PATH)
env = QtCore.QProcessEnvironment.systemEnvironment()
num_cpu_pref = ccx_prefs.GetInt("AnalysisNumCPUs", 1)
if num_cpu_pref > 1:
env.insert("OMP_NUM_THREADS", str(num_cpu_pref))
else:
cpu_count = os.cpu_count()
if cpu_count is not None and cpu_count > 1:
env.insert("OMP_NUM_THREADS", str(cpu_count))
self.Calculix.setProcessEnvironment(env)
QApplication.restoreOverrideCursor()
self.cwd = QtCore.QDir.currentPath()
fi = QtCore.QFileInfo(self.fea.inp_file_name)
QtCore.QDir.setCurrent(fi.path())
self.Calculix.start(self.fea.ccx_binary, ["-i", fi.baseName()])
QApplication.restoreOverrideCursor()
def stopCalculix(self):
if self.Calculix.state() == QtCore.QProcess.ProcessState.Running:
self.Calculix.kill()
def select_analysis_type(self, analysis_type):
if self.fea.solver.AnalysisType != analysis_type: