FEM: Make sure ccx working dir is set
Also TestFem and check_prerequisities are corrected Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
parent
b79cc695a1
commit
26d18db2d3
|
@ -201,6 +201,11 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
|||
message += "No active Analysis\n"
|
||||
if self.analysis_type not in self.known_analysis_types:
|
||||
message += "Unknown analysis type: {}\n".format(self.analysis_type)
|
||||
if not self.working_dir:
|
||||
message += "Working directory not set\n"
|
||||
import os
|
||||
if not (os.path.isdir(self.working_dir)):
|
||||
message += "Working directory \'{}\' doesn't exist.".format(self.working_dir)
|
||||
if not self.mesh:
|
||||
message += "No mesh object in the Analysis\n"
|
||||
if not self.material:
|
||||
|
@ -312,11 +317,20 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
|||
# @param self The python object self
|
||||
# @working_dir directory to be used for writing .inp file and executing CalculiX ccx
|
||||
def setup_working_dir(self, working_dir=None):
|
||||
if working_dir is None:
|
||||
self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem")
|
||||
self.working_dir = self.fem_prefs.GetString("WorkingDir", "/tmp")
|
||||
else:
|
||||
import os
|
||||
if working_dir is not None:
|
||||
self.working_dir = working_dir
|
||||
else:
|
||||
self.working_dir = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem").GetString("WorkingDir")
|
||||
|
||||
if not (os.path.isdir(self.working_dir)):
|
||||
try:
|
||||
os.makedirs(self.working_dir)
|
||||
except:
|
||||
print ("Dir \'{}\' doesn't exist and cannot be created.".format(self.working_dir))
|
||||
import tempfile
|
||||
self.working_dir = tempfile.gettempdir()
|
||||
print ("Dir \'{}\' will be used instead.".format(self.working_dir))
|
||||
# Update inp file name
|
||||
self.set_inp_file_name()
|
||||
|
||||
|
|
|
@ -58,6 +58,23 @@ class FemWorkbench (Workbench):
|
|||
FreeCAD.Console.PrintError("CalculiX ccx binary not found! Please set it manually in FEM preferences.\n")
|
||||
except Exception as e:
|
||||
FreeCAD.Console.PrintError(e.message)
|
||||
fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem")
|
||||
|
||||
import os
|
||||
working_dir = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem").GetString("WorkingDir")
|
||||
if not (os.path.isdir(working_dir)):
|
||||
try:
|
||||
os.makedirs(working_dir)
|
||||
except:
|
||||
print ("Dir \'{}\' from FEM preferences doesn't exist and cannot be created.".format(working_dir))
|
||||
import tempfile
|
||||
working_dir = tempfile.gettempdir()
|
||||
print ("Dir \'{}\' will be used instead.".format(working_dir))
|
||||
if working_dir:
|
||||
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem").SetString("WorkingDir", working_dir)
|
||||
else:
|
||||
FreeCAD.Console.PrintError("Setting working directory \'{}\' for ccx failed!\n")
|
||||
|
||||
|
||||
def GetClassName(self):
|
||||
return "FemGui::Workbench"
|
||||
|
|
|
@ -182,7 +182,12 @@ class FemTest(unittest.TestCase):
|
|||
self.analysis.Member = self.analysis.Member + [self.pressure_constraint]
|
||||
|
||||
fea = FemTools.FemTools(self.analysis, test_mode=True)
|
||||
fcc_print('Checking FEM inp file prerequisites...')
|
||||
fcc_print('Setting up working directory {}'.format(static_analysis_dir))
|
||||
fea.setup_working_dir(static_analysis_dir)
|
||||
self.assertTrue(True if fea.working_dir == static_analysis_dir else False,
|
||||
"Setting working directory {} failed".format(static_analysis_dir))
|
||||
|
||||
fcc_print('Checking FEM inp file prerequisites for static analysis...')
|
||||
error = fea.check_prerequisites()
|
||||
self.assertFalse(error, "FemTools check_prerequisites returned error message: {}".format(error))
|
||||
|
||||
|
@ -192,11 +197,6 @@ class FemTest(unittest.TestCase):
|
|||
fea.set_analysis_type("static")
|
||||
self.assertTrue(True if fea.analysis_type == 'static' else False, "Setting anlysis type to \'static\' failed")
|
||||
|
||||
fcc_print('Setting up working directory {}'.format(static_analysis_dir))
|
||||
fea.setup_working_dir(static_analysis_dir)
|
||||
self.assertTrue(True if fea.working_dir == static_analysis_dir else False,
|
||||
"Setting working directory {} failed".format(static_analysis_dir))
|
||||
|
||||
fcc_print('Writing {}/{}.inp for static analysis'.format(static_analysis_dir, mesh_name))
|
||||
error = fea.write_inp_file()
|
||||
self.assertFalse(error, "Writing failed")
|
||||
|
@ -238,6 +238,10 @@ class FemTest(unittest.TestCase):
|
|||
self.assertTrue(True if fea.working_dir == frequency_analysis_dir else False,
|
||||
"Setting working directory {} failed".format(frequency_analysis_dir))
|
||||
|
||||
fcc_print('Checking FEM inp file prerequisites for frequency analysis...')
|
||||
error = fea.check_prerequisites()
|
||||
self.assertFalse(error, "FemTools check_prerequisites returned error message: {}".format(error))
|
||||
|
||||
fcc_print('Writing {}/{}.inp for frequency analysis'.format(frequency_analysis_dir, mesh_name))
|
||||
error = fea.write_inp_file()
|
||||
self.assertFalse(error, "Writing failed")
|
||||
|
|
Loading…
Reference in New Issue
Block a user