FEM: examples, some improvements
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
|
||||
"""
|
||||
|
||||
@@ -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()
|
||||
|
||||
"""
|
||||
|
||||
@@ -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()
|
||||
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user