FEM: solver run, add method to run fem solver and use in commands and example module

This commit is contained in:
Bernd Hahnebach
2019-03-21 21:35:28 +01:00
committed by wmayer
parent caacf94578
commit 6a3f0dc936
3 changed files with 66 additions and 38 deletions

View File

@@ -50,6 +50,68 @@ _machines = {}
_dirTypes = {}
def run_fem_solver(solver, working_dir=None):
if App.GuiUp:
import FreeCADGui
from PySide import QtGui
if solver.Proxy.Type == 'Fem::FemSolverCalculixCcxTools':
App.Console.PrintMessage("CalxuliX ccx tools solver!\n")
from femtools import ccxtools
fea = ccxtools.FemToolsCcx(None, solver)
fea.reset_mesh_purge_results_checked()
if working_dir is None:
fea.run()
else:
fea.update_objects()
fea.setup_working_dir(working_dir)
fea.setup_ccx()
message = fea.check_prerequisites()
if not message:
fea.write_inp_file()
fea.ccx_run()
fea.load_results()
else:
App.Console.PrintError("Houston, we have a problem! {}\n".format(message))
else:
App.Console.PrintMessage("Frame work solver!\n")
try:
if working_dir is not None:
machine = getMachine(solver, working_dir)
else:
machine = getMachine(solver)
except MustSaveError:
error_message = (
"Please save the file before executing the solver. "
"This must be done because the location of the working "
"directory is set to \"Beside .FCStd File\"."
)
App.Console.PrintError(error_message + "\n")
if App.GuiUp:
QtGui.QMessageBox.critical(
FreeCADGui.getMainWindow(),
"Can't start Solver",
error_message
)
return
except DirectoryDoesNotExist:
error_message = "Selected working directory doesn't exist."
App.Console.PrintError(error_message + "\n")
if App.GuiUp:
QtGui.QMessageBox.critical(
FreeCADGui.getMainWindow(),
"Can't start Solver",
error_message
)
return
if not machine.running:
machine.reset()
machine.target = RESULTS
machine.start()
machine.join() # wait for the machine to finish.
def getMachine(solver, path=None):
_DocObserver.attach()
m = _machines.get(solver)