FEM: Fix file paths + tidy up naming

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
Przemo Firszt 2015-09-22 10:50:09 +01:00 committed by Yorik van Havre
parent 60062892a6
commit ee7beea983
4 changed files with 34 additions and 16 deletions

View File

@ -164,13 +164,13 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
def write_inp_file(self):
import ccxInpWriter as iw
import sys
self.base_name = ""
self.inp_file_name = ""
try:
inp_writer = iw.inp_writer(self.analysis, self.mesh, self.material,
self.fixed_constraints, self.force_constraints,
self.pressure_constraints, self.analysis_type,
self.eigenmode_parameters, self.working_dir)
self.base_name = inp_writer.write_calculix_input_file()
self.inp_file_name = inp_writer.write_calculix_input_file()
except:
print "Unexpected error when writing CalculiX input file:", sys.exc_info()[0]
raise
@ -179,7 +179,7 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
import multiprocessing
import os
import subprocess
if self.base_name != "":
if self.inp_file_name != "":
ont_backup = os.environ.get('OMP_NUM_THREADS')
if not ont_backup:
ont_backup = ""
@ -187,7 +187,7 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
# change cwd because ccx may crash if directory has no write permission
# there is also a limit of the length of file names so jump to the document directory
cwd = QtCore.QDir.currentPath()
f = QtCore.QFileInfo(self.base_name)
f = QtCore.QFileInfo(self.inp_file_name)
QtCore.QDir.setCurrent(f.path())
p = subprocess.Popen([self.ccx_binary, "-i ", f.baseName()],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
@ -212,6 +212,15 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
else:
self.base_name = base_name
## sets inp file name that is used to determine location and name of frd result file.
# Normally inp file name is set set by write_inp_file
# Can be used to read mock calculations file
def set_inp_file_name(self, inp_file_name=None):
if inp_file_name is not None:
self.inp_file_name = inp_file_name
else:
self.inp_file_name = self.working_dir + '/' + self.base_name + '.inp'
def set_analysis_type(self, analysis_type=None):
if analysis_type is None:
self.analysis_type = "static"
@ -243,16 +252,16 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
import ccxFrdReader
import os
self.results_present = False
result_file = self.working_dir + '/' + self.base_name + ".frd"
if os.path.isfile(result_file):
ccxFrdReader.importFrd(result_file, self.analysis)
frd_result_file = os.path.splitext(self.inp_file_name)[0] + '.frd'
if os.path.isfile(frd_result_file):
ccxFrdReader.importFrd(frd_result_file, self.analysis)
for m in self.analysis.Member:
if m.isDerivedFrom("Fem::FemResultObject"):
self.result_object = m
if self.result_object is not None:
self.results_present = True
else:
raise Exception('FEM: No results found at {}!'.format(result_file))
raise Exception('FEM: No results found at {}!'.format(frd_result_file))
def use_results(self, results_name=None):
for m in self.analysis.Member:

View File

@ -460,17 +460,16 @@ class _JobControlTaskPanel:
self.ext_editor_process.start(ext_editor_path, [filename])
def editCalculixInputFile(self):
filename = self.base_name + '.inp'
print 'editCalculixInputFile {}'.format(filename)
print 'editCalculixInputFile {}'.format(self.inp_file_name)
if self.fem_prefs.GetBool("UseInternalEditor", True):
FemGui.open(filename)
FemGui.open(self.inp_file_name)
else:
ext_editor_path = self.fem_prefs.GetString("ExternalEditorPath", "")
if ext_editor_path:
self.start_ext_editor(ext_editor_path, filename)
self.start_ext_editor(ext_editor_path, self.inp_file_name)
else:
print "External editor is not defined in FEM preferences. Falling back to internal editor"
FemGui.open(filename)
FemGui.open(self.inp_file_name)
def runCalculix(self):
print 'runCalculix'

View File

@ -208,6 +208,11 @@ class FemTest(unittest.TestCase):
self.assertTrue(True if fea.base_name == static_base_name else False,
"Setting base name to {} failed".format(static_base_name))
fcc_print('Setting inp file name to read test {}.frd file...'.format('cube_static'))
fea.set_inp_file_name()
self.assertTrue(True if fea.inp_file_name == static_analysis_inp_file else False,
"Setting inp file name to {} failed".format(static_analysis_inp_file))
fcc_print('Checking FEM frd file read from static analysis...')
fea.load_results()
fcc_print('Result object created as \"{}\"'.format(fea.result_object.Name))
@ -244,6 +249,11 @@ class FemTest(unittest.TestCase):
self.assertTrue(True if fea.base_name == frequency_base_name else False,
"Setting base name to {} failed".format(frequency_base_name))
fcc_print('Setting inp file name to read test {}.frd file...'.format('cube_frequency'))
fea.set_inp_file_name()
self.assertTrue(True if fea.inp_file_name == frequency_analysis_inp_file else False,
"Setting inp file name to {} failed".format(frequency_analysis_inp_file))
fcc_print('Checking FEM frd file read from frequency analysis...')
fea.load_results()

View File

@ -23,8 +23,8 @@ class inp_writer:
self.dir_name = FreeCAD.ActiveDocument.TransientDir.replace('\\', '/') + '/FemAnl_' + analysis_obj.Uid[-4:]
if not os.path.isdir(self.dir_name):
os.mkdir(self.dir_name)
self.base_name = self.dir_name + '/' + self.mesh_object.Name
self.file_name = self.base_name + '.inp'
self.base_name = self.mesh_object.Name
self.file_name = self.dir_name + '/' + self.base_name + '.inp'
self.fc_ver = FreeCAD.Version()
def write_calculix_input_file(self):
@ -48,7 +48,7 @@ class inp_writer:
self.write_step_end(inpfile)
self.write_footer(inpfile)
inpfile.close()
return self.base_name
return self.file_name
def write_element_sets_material_and_femelement_type(self, f):
f.write('\n***********************************************************\n')