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:
committed by
Yorik van Havre
parent
341b72bea8
commit
96f515748b
@@ -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...")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user