diff --git a/src/Mod/Fem/femcommands/commands.py b/src/Mod/Fem/femcommands/commands.py index fd334b817b..43f718ad5b 100644 --- a/src/Mod/Fem/femcommands/commands.py +++ b/src/Mod/Fem/femcommands/commands.py @@ -655,7 +655,8 @@ class _CommandFemSolverRun(CommandManager): print("CalculiX failed ccx finished with error {}".format(ret_code)) self.solver = self.selobj - if hasattr(self.solver, "SolverType") and self.solver.SolverType == "FemSolverCalculix": + if self.solver.Proxy.Type == 'Fem::FemSolverCalculixCcxTools': + print('CalxuliX ccx tools solver!') from femtools import ccxtools self.fea = ccxtools.FemToolsCcx(None, self.solver) self.fea.reset_mesh_purge_results_checked() @@ -666,6 +667,7 @@ class _CommandFemSolverRun(CommandManager): self.fea.finished.connect(load_results) QtCore.QThreadPool.globalInstance().start(self.fea) else: + print('Frame work solver!') try: machine = femsolver.run.getMachine(self.solver) except femsolver.run.MustSaveError: diff --git a/src/Mod/Fem/femobjects/_FemSolverCalculix.py b/src/Mod/Fem/femobjects/_FemSolverCalculix.py index 8a85217e9d..f5feeaacc0 100644 --- a/src/Mod/Fem/femobjects/_FemSolverCalculix.py +++ b/src/Mod/Fem/femobjects/_FemSolverCalculix.py @@ -35,13 +35,10 @@ class _FemSolverCalculix(): """The Fem::FemSolver's Proxy python type, add solver specific properties """ def __init__(self, obj): - self.Type = "Fem::FemSolverCalculix" + self.Type = "Fem::FemSolverCalculixCcxTools" self.Object = obj # keep a ref to the DocObj for nonGui usage obj.Proxy = self # link between App::DocumentObject to this object - obj.addProperty("App::PropertyString", "SolverType", "Base", "Type of the solver", 1) # the 1 set the property to ReadOnly - obj.SolverType = 'FemSolverCalculix' - # fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/General") # not needed ATM ccx_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/Ccx") diff --git a/src/Mod/Fem/femtest/testfemcommon.py b/src/Mod/Fem/femtest/testfemcommon.py index 4cecdf312d..64a4bd9b08 100644 --- a/src/Mod/Fem/femtest/testfemcommon.py +++ b/src/Mod/Fem/femtest/testfemcommon.py @@ -444,7 +444,7 @@ class FemTest(unittest.TestCase): self.assertEqual('Fem::FemMeshResult', typeOfObj(ObjectsFem.makeMeshResult(doc))) self.assertEqual('Fem::FemResultMechanical', typeOfObj(ObjectsFem.makeResultMechanical(doc))) solverelmer = ObjectsFem.makeSolverElmer(doc) - self.assertEqual('Fem::FemSolverCalculix', typeOfObj(ObjectsFem.makeSolverCalculixCcxTools(doc))) + self.assertEqual('Fem::FemSolverCalculixCcxTools', typeOfObj(ObjectsFem.makeSolverCalculixCcxTools(doc))) self.assertEqual('Fem::FemSolverObjectCalculix', typeOfObj(ObjectsFem.makeSolverCalculix(doc))) self.assertEqual('Fem::FemSolverObjectElmer', typeOfObj(solverelmer)) self.assertEqual('Fem::FemSolverObjectZ88', typeOfObj(ObjectsFem.makeSolverZ88(doc))) @@ -496,7 +496,7 @@ class FemTest(unittest.TestCase): self.assertTrue(isOfTypeNew(ObjectsFem.makeMeshResult(doc), 'Fem::FemMeshResult')) self.assertTrue(isOfTypeNew(ObjectsFem.makeResultMechanical(doc), 'Fem::FemResultMechanical')) solverelmer = ObjectsFem.makeSolverElmer(doc) - self.assertTrue(isOfTypeNew(ObjectsFem.makeSolverCalculixCcxTools(doc), 'Fem::FemSolverCalculix')) + self.assertTrue(isOfTypeNew(ObjectsFem.makeSolverCalculixCcxTools(doc), 'Fem::FemSolverCalculixCcxTools')) self.assertTrue(isOfTypeNew(ObjectsFem.makeSolverCalculix(doc), 'Fem::FemSolverObjectCalculix')) self.assertTrue(isOfTypeNew(solverelmer, 'Fem::FemSolverObjectElmer')) self.assertTrue(isOfTypeNew(ObjectsFem.makeSolverZ88(doc), 'Fem::FemSolverObjectZ88')) @@ -547,7 +547,7 @@ class FemTest(unittest.TestCase): self.assertTrue(isDerivedFromFem(ObjectsFem.makeMeshResult(doc), 'Fem::FemMeshResult')) self.assertTrue(isDerivedFromFem(ObjectsFem.makeResultMechanical(doc), 'Fem::FemResultMechanical')) solverelmer = ObjectsFem.makeSolverElmer(doc) - self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverCalculixCcxTools(doc), 'Fem::FemSolverCalculix')) + self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverCalculixCcxTools(doc), 'Fem::FemSolverCalculixCcxTools')) self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverCalculix(doc), 'Fem::FemSolverObjectCalculix')) self.assertTrue(isDerivedFromFem(solverelmer, 'Fem::FemSolverObjectElmer')) self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverZ88(doc), 'Fem::FemSolverObjectZ88')) diff --git a/src/Mod/Fem/femtools/ccxtools.py b/src/Mod/Fem/femtools/ccxtools.py index 579db9efef..5c7cd19a61 100644 --- a/src/Mod/Fem/femtools/ccxtools.py +++ b/src/Mod/Fem/femtools/ccxtools.py @@ -295,7 +295,7 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject): if hasattr(self.solver, "MaterialNonlinearity") and self.solver.MaterialNonlinearity == "nonlinear": if not self.materials_nonlinear: message += "Solver is set to nonlinear materials, but there is no nonlinear material in the analysis.\n" - if self.solver.SolverType == 'FemSolverCalculix' and self.solver.GeometricalNonlinearity != "nonlinear": + if self.solver.Proxy.Type == 'Fem::FemSolverCalculixCcxTools' and self.solver.GeometricalNonlinearity != "nonlinear": # nonlinear geometry --> should be set https://forum.freecadweb.org/viewtopic.php?f=18&t=23101&p=180489#p180489 message += "Solver CalculiX triggers nonlinear geometry for nonlinear material, thus it should to be set too.\n" # mesh