From da426b36cd838ccc019ea8304d4bf78f49f06614 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 1 Dec 2017 19:45:10 +0100 Subject: [PATCH] FEM: new solver frame work, fix it in the regard of the analysis object change to a real group object --- src/Mod/Fem/FemUtils.py | 6 +++--- .../PyGui/_CommandFemConstraintBodyHeatSource.py | 7 ++----- .../_CommandFemConstraintElectrostaticPotential.py | 7 ++----- .../Fem/PyGui/_CommandFemConstraintFlowVelocity.py | 7 ++----- .../_CommandFemConstraintInitialFlowVelocity.py | 7 ++----- src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py | 14 +++++--------- src/Mod/Fem/PyGui/_CommandFemSolverElmer.py | 7 +------ src/Mod/Fem/TestFem.py | 6 +++--- src/Mod/Fem/femsolver/calculix/tasks.py | 2 +- src/Mod/Fem/femsolver/elmer/tasks.py | 4 ++-- src/Mod/Fem/femsolver/run.py | 8 ++++---- src/Mod/Fem/femsolver/z88/tasks.py | 2 +- 12 files changed, 28 insertions(+), 49 deletions(-) diff --git a/src/Mod/Fem/FemUtils.py b/src/Mod/Fem/FemUtils.py index bba8615ede..af2715908c 100644 --- a/src/Mod/Fem/FemUtils.py +++ b/src/Mod/Fem/FemUtils.py @@ -42,9 +42,9 @@ def findAnalysisOfMember(member): raise ValueError("Member must not be None") for obj in member.Document.Objects: if obj.isDerivedFrom("Fem::FemAnalysis"): - if member in obj.Member: + if member in obj.Group: return obj - if _searchGroups(member, obj.Member): + if _searchGroups(member, obj.Group): return obj return None @@ -62,7 +62,7 @@ def getMember(analysis, t): if analysis is None: raise ValueError("Analysis must not be None") matching = [] - for m in analysis.Member: + for m in analysis.Group: if isDerivedFrom(m, t): matching.append(m) return matching diff --git a/src/Mod/Fem/PyGui/_CommandFemConstraintBodyHeatSource.py b/src/Mod/Fem/PyGui/_CommandFemConstraintBodyHeatSource.py index 5eca8ca392..1ef0469c54 100644 --- a/src/Mod/Fem/PyGui/_CommandFemConstraintBodyHeatSource.py +++ b/src/Mod/Fem/PyGui/_CommandFemConstraintBodyHeatSource.py @@ -49,12 +49,9 @@ class _CommandFemConstraintBodyHeatSource(FemCommands): self.is_active = 'with_analysis' def Activated(self): - FreeCAD.ActiveDocument.openTransaction( - "Create FemConstraintBodyHeatSource") + FreeCAD.ActiveDocument.openTransaction("Create FemConstraintBodyHeatSource") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand( - "FemGui.getActiveAnalysis().Member += " - "[ObjectsFem.makeConstraintBodyHeatSource(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeConstraintBodyHeatSource(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ConstraintBodyHeatSource', _CommandFemConstraintBodyHeatSource()) diff --git a/src/Mod/Fem/PyGui/_CommandFemConstraintElectrostaticPotential.py b/src/Mod/Fem/PyGui/_CommandFemConstraintElectrostaticPotential.py index 065dda05fa..a1723caa06 100644 --- a/src/Mod/Fem/PyGui/_CommandFemConstraintElectrostaticPotential.py +++ b/src/Mod/Fem/PyGui/_CommandFemConstraintElectrostaticPotential.py @@ -49,12 +49,9 @@ class _CommandFemConstraintElectrostaticPotential(FemCommands): self.is_active = 'with_analysis' def Activated(self): - FreeCAD.ActiveDocument.openTransaction( - "Create FemConstraintElectrostaticPotential") + FreeCAD.ActiveDocument.openTransaction("Create FemConstraintElectrostaticPotential") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand( - "FemGui.getActiveAnalysis().Member += " - "[ObjectsFem.makeConstraintElectrostaticPotential(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeConstraintElectrostaticPotential(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ConstraintElectrostaticPotential', _CommandFemConstraintElectrostaticPotential()) diff --git a/src/Mod/Fem/PyGui/_CommandFemConstraintFlowVelocity.py b/src/Mod/Fem/PyGui/_CommandFemConstraintFlowVelocity.py index b05af00f98..86a2924d8a 100644 --- a/src/Mod/Fem/PyGui/_CommandFemConstraintFlowVelocity.py +++ b/src/Mod/Fem/PyGui/_CommandFemConstraintFlowVelocity.py @@ -49,12 +49,9 @@ class _CommandFemConstraintFlowVelocity(FemCommands): self.is_active = 'with_analysis' def Activated(self): - FreeCAD.ActiveDocument.openTransaction( - "Create FemConstraintFlowVelocity") + FreeCAD.ActiveDocument.openTransaction("Create FemConstraintFlowVelocity") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand( - "FemGui.getActiveAnalysis().Member += " - "[ObjectsFem.makeConstraintFlowVelocity(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeConstraintFlowVelocity(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ConstraintFlowVelocity', _CommandFemConstraintFlowVelocity()) diff --git a/src/Mod/Fem/PyGui/_CommandFemConstraintInitialFlowVelocity.py b/src/Mod/Fem/PyGui/_CommandFemConstraintInitialFlowVelocity.py index 2a142b3e7f..5e5be0a56c 100644 --- a/src/Mod/Fem/PyGui/_CommandFemConstraintInitialFlowVelocity.py +++ b/src/Mod/Fem/PyGui/_CommandFemConstraintInitialFlowVelocity.py @@ -50,12 +50,9 @@ class _CommandFemConstraintInitialFlowVelocity(FemCommands): self.is_active = 'with_analysis' def Activated(self): - FreeCAD.ActiveDocument.openTransaction( - "Create FemConstraintInitialFlowVelocity") + FreeCAD.ActiveDocument.openTransaction("Create FemConstraintInitialFlowVelocity") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand( - "FemGui.getActiveAnalysis().Member += " - "[ObjectsFem.makeConstraintInitialFlowVelocity(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeConstraintInitialFlowVelocity(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ConstraintInitialFlowVelocity', _CommandFemConstraintInitialFlowVelocity()) diff --git a/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py b/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py index 49ab731922..950c4ed4a7 100644 --- a/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py +++ b/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py @@ -50,7 +50,7 @@ class _CommandFemSolverCalculix(FemCommands): use_new_solver_frame_work = ccx_prefs.GetBool("useNewSolverFrameWork", True) if use_old_solver_frame_work and not use_new_solver_frame_work: has_nonlinear_material_obj = False - for m in FemGui.getActiveAnalysis().Member: + for m in FemGui.getActiveAnalysis().Group: if hasattr(m, "Proxy") and m.Proxy.Type == "FemMaterialMechanicalNonlinear": has_nonlinear_material_obj = True FreeCAD.ActiveDocument.openTransaction("Create SolverCalculix") @@ -62,17 +62,13 @@ class _CommandFemSolverCalculix(FemCommands): FreeCADGui.doCommand("solver.MaterialNonlinearity = 'nonlinear'") FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(solver)") else: - FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument))") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculixOld(FreeCAD.ActiveDocument))") else: - analysis = FemGui.getActiveAnalysis() FreeCAD.ActiveDocument.openTransaction("Create CalculiX solver object") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand( - "FreeCAD.ActiveDocument.%s.Member += " - "[ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument)]" - % analysis.Name) - FreeCAD.ActiveDocument.commitTransaction() - FreeCAD.ActiveDocument.recompute() + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument))") + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() FreeCADGui.addCommand('FEM_SolverCalculix', _CommandFemSolverCalculix()) diff --git a/src/Mod/Fem/PyGui/_CommandFemSolverElmer.py b/src/Mod/Fem/PyGui/_CommandFemSolverElmer.py index 5505f93835..03eaf29549 100644 --- a/src/Mod/Fem/PyGui/_CommandFemSolverElmer.py +++ b/src/Mod/Fem/PyGui/_CommandFemSolverElmer.py @@ -31,7 +31,6 @@ __url__ = "http://www.freecadweb.org" import FreeCAD from .FemCommands import FemCommands import FreeCADGui -import FemGui from PySide import QtCore @@ -46,13 +45,9 @@ class _CommandFemSolverElmer(FemCommands): self.is_active = 'with_analysis' def Activated(self): - analysis = FemGui.getActiveAnalysis() FreeCAD.ActiveDocument.openTransaction("Create Elmer solver object") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand( - "FreeCAD.ActiveDocument.%s.Member += " - "[ObjectsFem.makeSolverElmer(FreeCAD.ActiveDocument)]" - % analysis.Name) + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverElmer(FreeCAD.ActiveDocument))") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() diff --git a/src/Mod/Fem/TestFem.py b/src/Mod/Fem/TestFem.py index 68beac1593..5b39b0a725 100644 --- a/src/Mod/Fem/TestFem.py +++ b/src/Mod/Fem/TestFem.py @@ -625,7 +625,7 @@ class FemCcxAnalysisTest(unittest.TestCase): solver_ccx2_object.EigenmodeHighLimit = 1000000.0 solver_ccx2_object.EigenmodeLowLimit = 0.0 self.assertTrue(solver_ccx2_object, "FemTest of new ccx solver failed") - analysis.Member = analysis.Member + [solver_ccx2_object] + analysis.addObject(solver_ccx2_object) fcc_print('Checking inpfile writing for new solver frame work...') if not os.path.exists(static2_analysis_dir): # new solver frameworkd does explicit not create a non existing directory @@ -644,7 +644,7 @@ class FemCcxAnalysisTest(unittest.TestCase): # use new solver frame work elmer solver solver_elmer_object = ObjectsFem.makeSolverElmer(self.active_doc, 'SolverElmer') self.assertTrue(solver_elmer_object, "FemTest of elmer solver failed") - analysis.Member = analysis.Member + [solver_elmer_object] + analysis.addObject(solver_elmer_object) solver_elmer_eqobj = ObjectsFem.makeEquationElasticity(self.active_doc, solver_elmer_object) self.assertTrue(solver_elmer_eqobj, "FemTest of elmer elasticity equation failed") @@ -657,7 +657,7 @@ class FemCcxAnalysisTest(unittest.TestCase): mesh_gmsh.CharacteristicLengthMin = "9 mm" mesh_gmsh.FemMesh = mesh_object.FemMesh # elmer needs a GMHS mesh object, FIXME error message on Python solver run mesh_gmsh.Part = box - analysis.Member = analysis.Member + [mesh_gmsh] + analysis.addObject(mesh_gmsh) self.active_doc.removeObject(mesh_object.Name) fcc_print('machine_elmer') diff --git a/src/Mod/Fem/femsolver/calculix/tasks.py b/src/Mod/Fem/femsolver/calculix/tasks.py index 5c12561517..8456f9dd78 100644 --- a/src/Mod/Fem/femsolver/calculix/tasks.py +++ b/src/Mod/Fem/femsolver/calculix/tasks.py @@ -170,7 +170,7 @@ class _Container(object): self.contact_constraints = [] self.transform_constraints = [] - for m in analysis.Member: + for m in analysis.Group: if m.isDerivedFrom("Fem::FemMeshObject"): if not self.mesh: self.mesh = m diff --git a/src/Mod/Fem/femsolver/elmer/tasks.py b/src/Mod/Fem/femsolver/elmer/tasks.py index 5f6ecf6b0d..826f48b781 100644 --- a/src/Mod/Fem/femsolver/elmer/tasks.py +++ b/src/Mod/Fem/femsolver/elmer/tasks.py @@ -132,7 +132,7 @@ class Solve(run.Solve): "App::TextDocument", self.solver.Name + "Output") self.solver.ElmerOutput.Label = self.solver.Label + "Output" self.solver.ElmerOutput.ReadOnly = True - self.analysis.Member += [self.solver.ElmerOutput] + self.analysis.addObject(self.solver.ElmerOutput) class Results(run.Results): @@ -149,4 +149,4 @@ class Results(run.Results): self.solver.ElmerResult = self.analysis.Document.addObject( "Fem::FemPostPipeline", self.solver.Name + "Result") self.solver.ElmerResult.Label = self.solver.Label + "Result" - self.analysis.Member += [self.solver.ElmerResult] + self.analysis.addObject(self.solver.ElmerResult) diff --git a/src/Mod/Fem/femsolver/run.py b/src/Mod/Fem/femsolver/run.py index 3a7ec4ec6e..31dafa9bc4 100644 --- a/src/Mod/Fem/femsolver/run.py +++ b/src/Mod/Fem/femsolver/run.py @@ -283,7 +283,7 @@ class Check(BaseTask): return True def checkSupported(self, allSupported): - for m in self.analysis.Member: + for m in self.analysis.Group: if FemUtils.isOfType(m, "Fem::Constraint"): supported = False for sc in allSupported: @@ -326,7 +326,7 @@ class _DocObserver(object): for doc in App.listDocuments().itervalues(): for obj in doc.Objects: if obj.isDerivedFrom("Fem::FemAnalysis"): - self._saved[obj] = obj.Member + self._saved[obj] = obj.Group @classmethod def attach(cls): @@ -399,8 +399,8 @@ class _DocObserver(object): def _getAdded(self, analysis): if analysis not in self._saved: self._saved[analysis] = [] - delta = set(analysis.Member) - set(self._saved[analysis]) - self._saved[analysis] = analysis.Member + delta = set(analysis.Group) - set(self._saved[analysis]) + self._saved[analysis] = analysis.Group return delta def _resetAll(self, analysis): diff --git a/src/Mod/Fem/femsolver/z88/tasks.py b/src/Mod/Fem/femsolver/z88/tasks.py index 4d411b87ba..84b075ef70 100644 --- a/src/Mod/Fem/femsolver/z88/tasks.py +++ b/src/Mod/Fem/femsolver/z88/tasks.py @@ -168,7 +168,7 @@ class _Container(object): self.contact_constraints = [] self.transform_constraints = [] - for m in analysis.Member: + for m in analysis.Group: if m.isDerivedFrom("Fem::FemMeshObject"): if not self.mesh: self.mesh = m