FEM: new solver frame work, fix it in the regard of the analysis object change to a real group object

This commit is contained in:
Bernd Hahnebach
2017-12-01 19:45:10 +01:00
committed by wmayer
parent 9e32d4845b
commit da426b36cd
12 changed files with 28 additions and 49 deletions

View File

@@ -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

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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())

View File

@@ -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()

View File

@@ -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')

View File

@@ -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

View File

@@ -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)

View File

@@ -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):

View File

@@ -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