FEM: examples, some improvements

This commit is contained in:
Bernd Hahnebach
2019-09-26 07:22:06 +02:00
parent f33aa0cbab
commit d0422fa91c
5 changed files with 49 additions and 49 deletions

View File

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

View File

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

View File

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

View File

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

View File

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