FEM: ccx tools, better error handling on run ccx

This commit is contained in:
Bernd Hahnebach
2019-01-04 11:06:17 +01:00
committed by wmayer
parent eef8aaef03
commit d4c86acfd4
2 changed files with 27 additions and 28 deletions

View File

@@ -764,29 +764,13 @@ class _CommandFemSolverRun(CommandManager):
import femsolver.run
from PySide import QtGui
def load_results(ret_code):
if ret_code == 0:
self.fea.load_results()
elif ret_code == 201:
if self.fea.solver.AnalysisType == 'check':
print('We run into the NOANALYSIS problem!')
# https://forum.freecadweb.org/viewtopic.php?f=18&t=31303&start=10#p260743
self.fea.load_results()
else:
print("CalculiX failed ccx finished with error {}".format(ret_code))
self.solver = self.selobj
if self.solver.Proxy.Type == 'Fem::FemSolverCalculixCcxTools':
print('CalxuliX ccx tools solver!')
from femtools import ccxtools
self.fea = ccxtools.FemToolsCcx(None, self.solver)
self.fea.reset_mesh_purge_results_checked()
message = self.fea.check_prerequisites()
if message:
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
return
self.fea.finished.connect(load_results)
QtCore.QThreadPool.globalInstance().start(self.fea)
self.fea.run()
else:
print('Frame work solver!')
try:

View File

@@ -666,18 +666,33 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
def run(self):
message = self.check_prerequisites()
if not message:
self.write_inp_file()
if self.inp_file_name != "":
FreeCAD.Console.PrintMessage("Writing CalculiX input file completed!\n")
else:
# TODO do not run solver, do not try to read results in a smarter way than an Exception
raise Exception('Error on writing CalculiX input file.\n')
self.ccx_run()
if message:
error_message = "CalculiX was not started due to missing prerequisites:\n{}\n".format(message)
FreeCAD.Console.PrintError(error_message)
if FreeCAD.GuiUp:
QtGui.QMessageBox.critical(None, "Missing prerequisite", error_message)
return False
else:
FreeCAD.Console.PrintError("CalculiX was not started due to missing prerequisites:\n{}\n".format(message))
# ATM it is not possible to start CalculiX if prerequisites are not fulfilled
self.load_results()
self.write_inp_file()
if self.inp_file_name == "":
error_message = "Error on writing CalculiX input file.\n"
FreeCAD.Console.PrintError(error_message)
if FreeCAD.GuiUp:
QtGui.QMessageBox.critical(None, "Error", error_message)
return False
else:
FreeCAD.Console.PrintMessage("Writing CalculiX input file completed.\n")
ret_code = self.ccx_run()
if ret_code != 0:
error_message = "CalculiX finished with error {}".format(ret_code)
FreeCAD.Console.PrintError(error_message)
if FreeCAD.GuiUp:
QtGui.QMessageBox.critical(None, "Error", error_message)
return False
else:
self.load_results()
# TODO: output an error message if there where problems reading the results
return True
def has_no_material_assigned(self):
if ' *ERROR in calinput: no material was assigned' in self.ccx_stdout: