FEM: ccx tools solver task panel, switch to self.fea instead of lots of fea instances
This commit is contained in:
@@ -121,11 +121,9 @@ class _TaskPanelFemSolverCalculix:
|
||||
else:
|
||||
self.CalculixBinary = 'ccx'
|
||||
|
||||
self.solver_object = solver_object
|
||||
fea = ccxtools.FemToolsCcx(None, self.solver_object)
|
||||
fea.setup_working_dir()
|
||||
self.working_dir = fea.working_dir
|
||||
# TODO: switch to one self.fea in all task panel defs
|
||||
# since open the task panel is only possible with an active analysis, we do not need to pass the analysis. it will be found
|
||||
self.fea = ccxtools.FemToolsCcx(None, solver_object)
|
||||
self.fea.setup_working_dir()
|
||||
|
||||
self.Calculix = QtCore.QProcess()
|
||||
self.Timer = QtCore.QTimer()
|
||||
@@ -161,12 +159,12 @@ class _TaskPanelFemSolverCalculix:
|
||||
|
||||
def update(self):
|
||||
'fills the widgets'
|
||||
self.form.le_working_dir.setText(self.working_dir)
|
||||
if self.solver_object.AnalysisType == 'static':
|
||||
self.form.le_working_dir.setText(self.fea.working_dir)
|
||||
if self.fea.solver.AnalysisType == 'static':
|
||||
self.form.rb_static_analysis.setChecked(True)
|
||||
elif self.solver_object.AnalysisType == 'frequency':
|
||||
elif self.fea.solver.AnalysisType == 'frequency':
|
||||
self.form.rb_frequency_analysis.setChecked(True)
|
||||
elif self.solver_object.AnalysisType == 'thermomech':
|
||||
elif self.fea.solver.AnalysisType == 'thermomech':
|
||||
self.form.rb_thermomech_analysis.setChecked(True)
|
||||
return
|
||||
|
||||
@@ -251,15 +249,14 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.form.pb_run_ccx.setText("Re-run CalculiX")
|
||||
self.femConsoleMessage("Loading result sets...")
|
||||
self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||
fea = ccxtools.FemToolsCcx(None, self.solver_object)
|
||||
fea.reset_mesh_purge_results_checked()
|
||||
fea.inp_file_name = self.inp_file_name
|
||||
self.fea.reset_mesh_purge_results_checked()
|
||||
self.fea.inp_file_name = self.fea.inp_file_name
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
try:
|
||||
fea.load_results()
|
||||
self.fea.load_results()
|
||||
except:
|
||||
QApplication.restoreOverrideCursor()
|
||||
majorVersion, minorVersion = fea.get_ccx_version()
|
||||
majorVersion, minorVersion = self.fea.get_ccx_version()
|
||||
if majorVersion == 2 and minorVersion <= 10:
|
||||
message = "The used CalculiX version {}.{} creates broken output files.\n" \
|
||||
"Please upgrade to a newer version.".format(majorVersion, minorVersion)
|
||||
@@ -270,13 +267,11 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||
|
||||
def choose_working_dir(self):
|
||||
current_wd = self.setup_working_dir()
|
||||
wd = QtGui.QFileDialog.getExistingDirectory(None, 'Choose CalculiX working directory',
|
||||
current_wd)
|
||||
if not (os.path.isdir(wd)):
|
||||
wd = current_wd
|
||||
self.working_dir = wd
|
||||
self.form.le_working_dir.setText(wd)
|
||||
self.fea.working_dir)
|
||||
if os.path.isdir(wd):
|
||||
self.fea.setup_working_dir(wd)
|
||||
self.form.le_working_dir.setText(self.fea.working_dir)
|
||||
|
||||
def write_input_file_handler(self):
|
||||
self.Start = time.time()
|
||||
@@ -284,13 +279,8 @@ class _TaskPanelFemSolverCalculix:
|
||||
QApplication.restoreOverrideCursor()
|
||||
if self.check_prerequisites_helper():
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
self.inp_file_name = ""
|
||||
fea = ccxtools.FemToolsCcx(None, self.solver_object)
|
||||
fea.update_objects()
|
||||
fea.setup_working_dir(self.working_dir) # we made a new fea which sets the working dir, but we the one from task panel
|
||||
fea.write_inp_file()
|
||||
if fea.inp_file_name != "":
|
||||
self.inp_file_name = fea.inp_file_name
|
||||
self.fea.write_inp_file()
|
||||
if self.fea.inp_file_name != "":
|
||||
self.femConsoleMessage("Write completed.")
|
||||
self.form.pb_edit_inp.setEnabled(True)
|
||||
self.form.pb_run_ccx.setEnabled(True)
|
||||
@@ -304,9 +294,8 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.femConsoleMessage("Check dependencies...")
|
||||
self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||
|
||||
fea = ccxtools.FemToolsCcx(None, self.solver_object)
|
||||
fea.update_objects()
|
||||
message = fea.check_prerequisites()
|
||||
self.fea.update_objects()
|
||||
message = self.fea.check_prerequisites()
|
||||
if message != "":
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite(s)", message)
|
||||
return False
|
||||
@@ -319,16 +308,16 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.ext_editor_process.start(ext_editor_path, [filename])
|
||||
|
||||
def editCalculixInputFile(self):
|
||||
print('editCalculixInputFile {}'.format(self.inp_file_name))
|
||||
print('editCalculixInputFile {}'.format(self.fea.inp_file_name))
|
||||
if self.ccx_prefs.GetBool("UseInternalEditor", True):
|
||||
FemGui.open(self.inp_file_name)
|
||||
FemGui.open(self.fea.inp_file_name)
|
||||
else:
|
||||
ext_editor_path = self.ccx_prefs.GetString("ExternalEditorPath", "")
|
||||
if ext_editor_path:
|
||||
self.start_ext_editor(ext_editor_path, self.inp_file_name)
|
||||
self.start_ext_editor(ext_editor_path, self.fea.inp_file_name)
|
||||
else:
|
||||
print("External editor is not defined in FEM preferences. Falling back to internal editor")
|
||||
FemGui.open(self.inp_file_name)
|
||||
FemGui.open(self.fea.inp_file_name)
|
||||
|
||||
def runCalculix(self):
|
||||
print('runCalculix')
|
||||
@@ -338,19 +327,19 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.femConsoleMessage("Run CalculiX...")
|
||||
|
||||
# run Calculix
|
||||
print('run CalculiX at: {} with: {}'.format(self.CalculixBinary, os.path.splitext(self.inp_file_name)[0]))
|
||||
print('run CalculiX at: {} with: {}'.format(self.CalculixBinary, os.path.splitext(self.fea.inp_file_name)[0]))
|
||||
# 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
|
||||
self.cwd = QtCore.QDir.currentPath()
|
||||
fi = QtCore.QFileInfo(self.inp_file_name)
|
||||
fi = QtCore.QFileInfo(self.fea.inp_file_name)
|
||||
QtCore.QDir.setCurrent(fi.path())
|
||||
self.Calculix.start(self.CalculixBinary, ['-i', fi.baseName()])
|
||||
|
||||
QApplication.restoreOverrideCursor()
|
||||
|
||||
def select_analysis_type(self, analysis_type):
|
||||
if self.solver_object.AnalysisType != analysis_type:
|
||||
self.solver_object.AnalysisType = analysis_type
|
||||
if self.fea.solver.AnalysisType != analysis_type:
|
||||
self.fea.solver.AnalysisType = analysis_type
|
||||
self.form.pb_edit_inp.setEnabled(False)
|
||||
self.form.pb_run_ccx.setEnabled(False)
|
||||
|
||||
@@ -362,16 +351,3 @@ class _TaskPanelFemSolverCalculix:
|
||||
|
||||
def select_thermomech_analysis(self):
|
||||
self.select_analysis_type('thermomech')
|
||||
|
||||
# That function overlaps with ccxtools setup_working_dir and could be removed when the one from ccxtools would be used
|
||||
def setup_working_dir(self):
|
||||
wd = self.working_dir
|
||||
if not (os.path.isdir(wd)):
|
||||
try:
|
||||
os.makedirs(wd)
|
||||
except:
|
||||
print("Dir \'{}\' from FEM preferences doesn't exist and cannot be created.".format(wd))
|
||||
import tempfile
|
||||
wd = tempfile.gettempdir()
|
||||
print("Dir \'{}\' will be used instead.".format(wd))
|
||||
return wd
|
||||
|
||||
Reference in New Issue
Block a user