FEM: ccx solver task panel run, return error if CalculiX has finished but there are errors in output. Happens on nonpositive jacobians

This commit is contained in:
Bernd Hahnebach
2018-10-24 21:11:36 +02:00
committed by Yorik van Havre
parent 341b72bea8
commit 96f515748b
2 changed files with 27 additions and 4 deletions

View File

@@ -179,6 +179,7 @@ class _TaskPanelFemSolverCalculix:
try:
out = unicode(out, 'utf-8', 'replace')
rx = QtCore.QRegExp("\\*ERROR.*\\n\\n")
print(rx)
rx.setMinimal(True)
pos = rx.indexIn(out)
while not pos < 0:
@@ -189,15 +190,30 @@ class _TaskPanelFemSolverCalculix:
self.femConsoleMessage(out.replace('\n', '<br>'))
except UnicodeDecodeError:
self.femConsoleMessage("Error converting stdout from CalculiX", "#FF0000")
if '*ERROR in e_c3d: nonpositive jacobian' in out:
error_message = (
"\n\nCalculiX returned an error due to "
"nonpositive jacobian determinant in at least one element\n"
"Use the run button on selected solver to get a better error output.\n"
)
FreeCAD.Console.PrintError(error_message)
if '*ERROR' in out:
return False
else:
return True
def UpdateText(self):
if(self.Calculix.state() == QtCore.QProcess.ProcessState.Running):
self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
def calculixError(self, error):
def calculixError(self, error=''):
print("Error() {}".format(error))
self.femConsoleMessage("CalculiX execute error: {}".format(error), "#FF0000")
def calculixNoError(self):
print("CalculiX done without error!")
self.femConsoleMessage("CalculiX done without error!", "#00AA00")
def calculixStarted(self):
print("calculixStarted()")
print(self.Calculix.state())
@@ -218,10 +234,12 @@ class _TaskPanelFemSolverCalculix:
# Restore previous cwd
QtCore.QDir.setCurrent(self.cwd)
self.printCalculiXstdout()
self.Timer.stop()
self.femConsoleMessage("CalculiX done!", "#00AA00")
if self.printCalculiXstdout():
self.calculixNoError()
else:
self.calculixError()
self.form.pb_run_ccx.setText("Re-run CalculiX")
self.femConsoleMessage("Loading result sets...")

View File

@@ -108,7 +108,12 @@ def importFrd(filename, analysis=None, result_name_prefix=None):
if analysis:
analysis_object.addObject(results)
else:
FreeCAD.Console.PrintMessage('We have nodes but no results in frd file, which means we only have a mesh in frd file. Normaly this happens for analysis type "NOANALYSIS".\n')
error_message = (
"We have nodes but no results in frd file, which means we only have a mesh in frd file. "
"Usually this happens for analysis type 'NOANALYSIS' or if CalculiX returned no results because "
"of nonpositive jacobian determinant in at least one element.\n"
)
FreeCAD.Console.PrintMessage(error_message)
if analysis:
analysis_object.addObject(result_mesh_object)