Skip to content

Commit

Permalink
FEM: Make sure ccx working dir is set
Browse files Browse the repository at this point in the history
Also TestFem and check_prerequisities are corrected

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
  • Loading branch information
PrzemoF authored and wwmayer committed Oct 19, 2015
1 parent b79cc69 commit 26d18db
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 10 deletions.
22 changes: 18 additions & 4 deletions src/Mod/Fem/FemTools.py
Expand Up @@ -201,6 +201,11 @@ def check_prerequisites(self):
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:
Expand Down Expand Up @@ -312,11 +317,20 @@ def set_analysis_type(self, analysis_type=None):
# @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()

Expand Down
17 changes: 17 additions & 0 deletions src/Mod/Fem/InitGui.py
Expand Up @@ -58,6 +58,23 @@ def Initialize(self):
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"
Expand Down
16 changes: 10 additions & 6 deletions src/Mod/Fem/TestFem.py
Expand Up @@ -182,7 +182,12 @@ def test_new_analysis(self):
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))

Expand All @@ -192,11 +197,6 @@ def test_new_analysis(self):
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")
Expand Down Expand Up @@ -238,6 +238,10 @@ def test_new_analysis(self):
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")
Expand Down

0 comments on commit 26d18db

Please sign in to comment.