FEM: code formating, max line length < 100, fem examples

This commit is contained in:
Bernd Hahnebach
2019-05-20 12:31:28 +02:00
parent 56ea020c75
commit 77235b3a3b
2 changed files with 38 additions and 12 deletions

View File

@@ -54,14 +54,18 @@ def setup_cantileverbase(doc=None, solver='ccxtools'):
if solver is None:
pass # no solver is added
elif solver is 'calculix':
solver_object = analysis.addObject(ObjectsFem.makeSolverCalculix(doc, 'SolverCalculiX'))[0]
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 is 'ccxtools':
solver_object = analysis.addObject(ObjectsFem.makeSolverCalculixCcxTools(doc, 'CalculiXccxTools'))[0]
solver_object = analysis.addObject(
ObjectsFem.makeSolverCalculixCcxTools(doc, 'CalculiXccxTools')
)[0]
solver_object.AnalysisType = 'static'
solver_object.GeometricalNonlinearity = 'linear'
solver_object.ThermoMechSteadyState = False
@@ -74,7 +78,9 @@ def setup_cantileverbase(doc=None, solver='ccxtools'):
analysis.addObject(ObjectsFem.makeSolverZ88(doc, 'SolverZ88'))
# material
material_object = analysis.addObject(ObjectsFem.makeMaterialSolid(doc, 'FemMaterial'))[0]
material_object = analysis.addObject(
ObjectsFem.makeMaterialSolid(doc, 'FemMaterial')
)[0]
mat = material_object.Material
mat['Name'] = "CalculiX-Steel"
mat['YoungsModulus'] = "210000 MPa"
@@ -84,7 +90,9 @@ def setup_cantileverbase(doc=None, solver='ccxtools'):
material_object.Material = mat
# fixed_constraint
fixed_constraint = analysis.addObject(ObjectsFem.makeConstraintFixed(doc, name="ConstraintFixed"))[0]
fixed_constraint = analysis.addObject(
ObjectsFem.makeConstraintFixed(doc, name="ConstraintFixed")
)[0]
fixed_constraint.References = [(doc.Box, "Face1")]
# mesh
@@ -96,7 +104,9 @@ def setup_cantileverbase(doc=None, solver='ccxtools'):
control = create_elements(fem_mesh)
if not control:
print('ERROR on creating elements')
femmesh_obj = analysis.addObject(doc.addObject('Fem::FemMeshObject', mesh_name))[0]
femmesh_obj = analysis.addObject(
doc.addObject('Fem::FemMeshObject', mesh_name)
)[0]
femmesh_obj.FemMesh = fem_mesh
doc.recompute()
@@ -109,7 +119,9 @@ def setup_cantileverfaceload(doc=None, solver='ccxtools'):
doc = setup_cantileverbase(doc, solver)
# force_constraint
force_constraint = doc.Analysis.addObject(ObjectsFem.makeConstraintForce(doc, name="ConstraintForce"))[0]
force_constraint = doc.Analysis.addObject(
ObjectsFem.makeConstraintForce(doc, name="ConstraintForce")
)[0]
force_constraint.References = [(doc.Box, "Face2")]
force_constraint.Force = 9000000.0
force_constraint.Direction = (doc.Box, ["Edge5"])
@@ -125,8 +137,16 @@ def setup_cantilevernodeload(doc=None, solver='ccxtools'):
doc = setup_cantileverbase(doc, solver)
# force_constraint
force_constraint = doc.Analysis.addObject(ObjectsFem.makeConstraintForce(doc, name="ConstraintForce"))[0]
force_constraint.References = [(doc.Box, "Vertex5"), (doc.Box, "Vertex6"), (doc.Box, "Vertex7"), (doc.Box, "Vertex8")] # should be possible in one tuple too
force_constraint = doc.Analysis.addObject(
ObjectsFem.makeConstraintForce(doc, name="ConstraintForce")
)[0]
# should be possible in one tuple too
force_constraint.References = [
(doc.Box, "Vertex5"),
(doc.Box, "Vertex6"),
(doc.Box, "Vertex7"),
(doc.Box, "Vertex8")
]
force_constraint.Force = 9000000.0
force_constraint.Direction = (doc.Box, ["Edge5"])
force_constraint.Reversed = True
@@ -136,12 +156,15 @@ def setup_cantilevernodeload(doc=None, solver='ccxtools'):
def setup_cantileverprescribeddisplacement(doc=None, solver='ccxtools'):
# setup CalculiX cantilever, apply a prescribed displacement of 250 mm in -z on the front end face
# setup CalculiX cantilever
# apply a prescribed displacement of 250 mm in -z on the front end face
doc = setup_cantileverbase(doc, solver)
# displacement_constraint
displacement_constraint = doc.Analysis.addObject(ObjectsFem.makeConstraintDisplacement(doc, name="ConstraintDisplacmentPrescribed"))[0]
displacement_constraint = doc.Analysis.addObject(
ObjectsFem.makeConstraintDisplacement(doc, name="ConstraintDisplacmentPrescribed")
)[0]
displacement_constraint.References = [(doc.Box, "Face2")]
displacement_constraint.zFix = False
displacement_constraint.zFree = False

View File

@@ -47,13 +47,16 @@ def run_analysis(doc, base_name, filepath=''):
# ATM we only support one solver, search for a frame work solver and run it
for m in doc.Analysis.Group:
from femtools.femutils import is_derived_from
if is_derived_from(m, "Fem::FemSolverObjectPython") and m.Proxy.Type is not 'Fem::FemSolverCalculixCcxTools':
if is_derived_from(m, "Fem::FemSolverObjectPython") \
and m.Proxy.Type is not 'Fem::FemSolverCalculixCcxTools':
solver = m
break
# we need a file name for the besides dir to work
save_fc_file = join(filepath, (base_name + '.FCStd'))
FreeCAD.Console.PrintMessage('Save FreeCAD file for {} analysis to {}\n.'.format(base_name, save_fc_file))
FreeCAD.Console.PrintMessage(
'Save FreeCAD file for {} analysis to {}\n.'.format(base_name, save_fc_file)
)
doc.saveAs(save_fc_file)
# get analysis workig dir