From d0422fa91cbe5c15578d9f4000046c52e4adda2a Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Thu, 26 Sep 2019 07:22:06 +0200 Subject: [PATCH] FEM: examples, some improvements --- src/Mod/Fem/femexamples/ccx_cantilever_std.py | 24 +++++++++-------- src/Mod/Fem/femexamples/manager.py | 12 ++++----- .../Fem/femexamples/multimaterial_twoboxes.py | 15 ++++------- src/Mod/Fem/femexamples/rc_wall_2d.py | 20 +++++++------- src/Mod/Fem/femexamples/thermomech_spine.py | 27 ++++++++++--------- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/Mod/Fem/femexamples/ccx_cantilever_std.py b/src/Mod/Fem/femexamples/ccx_cantilever_std.py index a036f0c110..50ce7c415b 100644 --- a/src/Mod/Fem/femexamples/ccx_cantilever_std.py +++ b/src/Mod/Fem/femexamples/ccx_cantilever_std.py @@ -45,6 +45,12 @@ def setup_cantileverbase(doc=None, solver="ccxtools"): box_obj = doc.addObject("Part::Box", "Box") box_obj.Height = box_obj.Width = 1000 box_obj.Length = 8000 + doc.recompute() + + if FreeCAD.GuiUp: + import FreeCADGui + FreeCADGui.ActiveDocument.activeView().viewAxonometric() + FreeCADGui.SendMsgToActiveView("ViewFit") # analysis analysis = ObjectsFem.makeAnalysis(doc, "Analysis") @@ -55,25 +61,21 @@ def setup_cantileverbase(doc=None, solver="ccxtools"): solver_object = analysis.addObject( ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX") )[0] - solver_object.AnalysisType = "static" - solver_object.GeometricalNonlinearity = "linear" - solver_object.ThermoMechSteadyState = False - solver_object.MatrixSolverType = "default" - solver_object.IterationsControlParameterTimeUse = False elif solver == "ccxtools": solver_object = analysis.addObject( ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools") )[0] - solver_object.AnalysisType = "static" - solver_object.GeometricalNonlinearity = "linear" - solver_object.ThermoMechSteadyState = False - solver_object.MatrixSolverType = "default" - solver_object.IterationsControlParameterTimeUse = False solver_object.WorkingDir = u"" elif solver == "elmer": analysis.addObject(ObjectsFem.makeSolverElmer(doc, "SolverElmer")) elif solver == "z88": analysis.addObject(ObjectsFem.makeSolverZ88(doc, "SolverZ88")) + if solver == "calculix" or solver == "ccxtools": + solver_object.AnalysisType = "static" + solver_object.GeometricalNonlinearity = "linear" + solver_object.ThermoMechSteadyState = False + solver_object.MatrixSolverType = "default" + solver_object.IterationsControlParameterTimeUse = False # material material_object = analysis.addObject( @@ -94,7 +96,7 @@ def setup_cantileverbase(doc=None, solver="ccxtools"): fixed_constraint.References = [(doc.Box, "Face1")] # mesh - from femexamples.meshes.mesh_canticcx_tetra10 import create_nodes, create_elements + from .meshes.mesh_canticcx_tetra10 import create_nodes, create_elements fem_mesh = Fem.FemMesh() control = create_nodes(fem_mesh) if not control: diff --git a/src/Mod/Fem/femexamples/manager.py b/src/Mod/Fem/femexamples/manager.py index 8d5868d17e..78a1210add 100644 --- a/src/Mod/Fem/femexamples/manager.py +++ b/src/Mod/Fem/femexamples/manager.py @@ -83,7 +83,7 @@ def run_all(): def run_ccx_cantileverfaceload(solver=None, base_name=None): - from femexamples.ccx_cantilever_std import setup_cantileverfaceload as setup + from .ccx_cantilever_std import setup_cantileverfaceload as setup doc = setup() if base_name is None: @@ -97,7 +97,7 @@ def run_ccx_cantileverfaceload(solver=None, base_name=None): def run_ccx_cantilevernodeload(solver=None, base_name=None): - from femexamples.ccx_cantilever_std import setup_cantilevernodeload as setup + from .ccx_cantilever_std import setup_cantilevernodeload as setup doc = setup() if base_name is None: @@ -111,7 +111,7 @@ def run_ccx_cantilevernodeload(solver=None, base_name=None): def run_ccx_cantileverprescribeddisplacement(solver=None, base_name=None): - from femexamples.ccx_cantilever_std import setup_cantileverprescribeddisplacement as setup + from .ccx_cantilever_std import setup_cantileverprescribeddisplacement as setup doc = setup() if base_name is None: @@ -125,7 +125,7 @@ def run_ccx_cantileverprescribeddisplacement(solver=None, base_name=None): def run_multimaterial_twoboxes(solver=None, base_name=None): - from femexamples.multimaterial_twoboxes import setup + from .multimaterial_twoboxes import setup doc = setup() if base_name is None: @@ -139,7 +139,7 @@ def run_multimaterial_twoboxes(solver=None, base_name=None): def run_rcwall2d(solver=None, base_name=None): - from femexamples.rc_wall_2d import setup_rcwall2d as setup + from .rc_wall_2d import setup_rcwall2d as setup doc = setup() if base_name is None: @@ -153,7 +153,7 @@ def run_rcwall2d(solver=None, base_name=None): def run_thermomech_spine(solver=None, base_name=None): - from femexamples.thermomech_spine import setup + from .thermomech_spine import setup doc = setup() if base_name is None: diff --git a/src/Mod/Fem/femexamples/multimaterial_twoboxes.py b/src/Mod/Fem/femexamples/multimaterial_twoboxes.py index d19adff7e0..8f477af75e 100644 --- a/src/Mod/Fem/femexamples/multimaterial_twoboxes.py +++ b/src/Mod/Fem/femexamples/multimaterial_twoboxes.py @@ -84,21 +84,17 @@ def setup(doc=None, solver="ccxtools"): solver_object = analysis.addObject( ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX") )[0] - solver_object.AnalysisType = "static" - solver_object.GeometricalNonlinearity = "linear" - solver_object.ThermoMechSteadyState = False - solver_object.MatrixSolverType = "default" - solver_object.IterationsControlParameterTimeUse = False elif solver == "ccxtools": solver_object = analysis.addObject( ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools") )[0] + solver_object.WorkingDir = u"" + if solver == "calculix" or solver == "ccxtools": solver_object.AnalysisType = "static" solver_object.GeometricalNonlinearity = "linear" solver_object.ThermoMechSteadyState = False solver_object.MatrixSolverType = "default" solver_object.IterationsControlParameterTimeUse = False - solver_object.WorkingDir = u"" # material material_object_low = analysis.addObject( @@ -143,8 +139,7 @@ def setup(doc=None, solver="ccxtools"): pressure_constraint.Reversed = False # mesh - # from femexamples.meshes.mesh_thermomech_spine import create_nodes, create_elements - from femexamples.meshes.mesh_multimaterial_twoboxes import create_nodes, create_elements + from .meshes.mesh_multimaterial_twoboxes import create_nodes, create_elements fem_mesh = Fem.FemMesh() control = create_nodes(fem_mesh) if not control: @@ -162,7 +157,7 @@ def setup(doc=None, solver="ccxtools"): """ -from femexamples import multimaterial_simple as multimat -multimat.setup() +from femexamples import multimaterial_twoboxes as twoboxes +twoboxes.setup() """ diff --git a/src/Mod/Fem/femexamples/rc_wall_2d.py b/src/Mod/Fem/femexamples/rc_wall_2d.py index 765cfc34a2..ecb4b3f408 100644 --- a/src/Mod/Fem/femexamples/rc_wall_2d.py +++ b/src/Mod/Fem/femexamples/rc_wall_2d.py @@ -35,7 +35,7 @@ def init_doc(doc=None): return doc -def setup_rcwall2d(doc=None, solver="ccxtools"): +def setup(doc=None, solver="ccxtools"): # setup reinfoced wall in 2D if doc is None: @@ -64,6 +64,12 @@ def setup_rcwall2d(doc=None, solver="ccxtools"): l8 = ln(v8, v1) rcwall = doc.addObject("Part::Feature", "FIB_Wall") rcwall.Shape = Part.Face(Part.Wire([l1, l2, l3, l4, l5, l6, l7, l8])) + doc.recompute() + + if FreeCAD.GuiUp: + import FreeCADGui + FreeCADGui.ActiveDocument.activeView().viewAxonometric() + FreeCADGui.SendMsgToActiveView("ViewFit") # analysis analysis = ObjectsFem.makeAnalysis(doc, "Analysis") @@ -74,21 +80,17 @@ def setup_rcwall2d(doc=None, solver="ccxtools"): solver = analysis.addObject( ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX") )[0] - solver.AnalysisType = "static" - solver.GeometricalNonlinearity = "linear" - solver.ThermoMechSteadyState = False - solver.MatrixSolverType = "default" - solver.IterationsControlParameterTimeUse = False elif solver == "ccxtools": solver = analysis.addObject( ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools") )[0] + solver.WorkingDir = u"" + if solver == "calculix" or solver == "ccxtools": solver.AnalysisType = "static" solver.GeometricalNonlinearity = "linear" solver.ThermoMechSteadyState = False solver.MatrixSolverType = "default" solver.IterationsControlParameterTimeUse = False - solver.WorkingDir = u"" # shell thickness thickness = analysis.addObject( @@ -139,7 +141,7 @@ def setup_rcwall2d(doc=None, solver="ccxtools"): displacement_constraint.zFix = True # mesh - from femexamples.meshes.mesh_rc_wall_2d_tria6 import create_nodes, create_elements + from .meshes.mesh_rc_wall_2d_tria6 import create_nodes, create_elements fem_mesh = Fem.FemMesh() control = create_nodes(fem_mesh) if not control: @@ -158,6 +160,6 @@ def setup_rcwall2d(doc=None, solver="ccxtools"): """ from femexamples import rc_wall_2d as rc -rc.setup_rcwall2d() +rc.setup() """ diff --git a/src/Mod/Fem/femexamples/thermomech_spine.py b/src/Mod/Fem/femexamples/thermomech_spine.py index 7c373ac7c1..d68196eba8 100644 --- a/src/Mod/Fem/femexamples/thermomech_spine.py +++ b/src/Mod/Fem/femexamples/thermomech_spine.py @@ -46,6 +46,12 @@ def setup(doc=None, solver="ccxtools"): box_obj.Height = 25.4 box_obj.Width = 25.4 box_obj.Length = 203.2 + doc.recompute() + + if FreeCAD.GuiUp: + import FreeCADGui + FreeCADGui.ActiveDocument.activeView().viewAxonometric() + FreeCADGui.SendMsgToActiveView("ViewFit") # analysis analysis = ObjectsFem.makeAnalysis(doc, "Analysis") @@ -56,26 +62,21 @@ def setup(doc=None, solver="ccxtools"): solver_object = analysis.addObject( ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX") )[0] - solver_object.AnalysisType = "thermomech" - solver_object.GeometricalNonlinearity = "linear" - solver_object.ThermoMechSteadyState = True - solver_object.MatrixSolverType = "default" - solver_object.IterationsThermoMechMaximum = 2000 - solver_object.IterationsControlParameterTimeUse = True elif solver == "ccxtools": solver_object = analysis.addObject( ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools") )[0] + solver_object.WorkingDir = u"" + # should be possible with elmer too + # elif solver == "elmer": + # analysis.addObject(ObjectsFem.makeSolverElmer(doc, "SolverElmer")) + if solver == "calculix" or solver == "ccxtools": solver_object.AnalysisType = "thermomech" solver_object.GeometricalNonlinearity = "linear" solver_object.ThermoMechSteadyState = True solver_object.MatrixSolverType = "default" solver_object.IterationsThermoMechMaximum = 2000 solver_object.IterationsControlParameterTimeUse = True - solver_object.WorkingDir = u"" - # should be possible with elmer too - # elif solver == "elmer": - # analysis.addObject(ObjectsFem.makeSolverElmer(doc, "SolverElmer")) # material material_object = analysis.addObject( @@ -124,7 +125,7 @@ def setup(doc=None, solver="ccxtools"): heatflux_constraint.FilmCoef = 5.678 # mesh - from femexamples.meshes.mesh_thermomech_spine import create_nodes, create_elements + from .meshes.mesh_thermomech_spine import create_nodes, create_elements fem_mesh = Fem.FemMesh() control = create_nodes(fem_mesh) if not control: @@ -142,7 +143,7 @@ def setup(doc=None, solver="ccxtools"): """ -from femexamples import thermomech_bar as thermo -thermo.setup() +from femexamples import thermomech_spine as spine +spine.setup() """