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:
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user