FEM: examples, use single quotes instead of double ones
This commit is contained in:
@@ -26,7 +26,7 @@ import FreeCAD
|
||||
import ObjectsFem
|
||||
import Fem
|
||||
|
||||
mesh_name = 'Mesh' # needs to be Mesh to work with unit tests
|
||||
mesh_name = "Mesh" # needs to be Mesh to work with unit tests
|
||||
|
||||
|
||||
def init_doc(doc=None):
|
||||
@@ -35,56 +35,56 @@ def init_doc(doc=None):
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantileverbase(doc=None, solver='ccxtools'):
|
||||
def setup_cantileverbase(doc=None, solver="ccxtools"):
|
||||
# setup CalculiX cantilever base model
|
||||
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# part
|
||||
box_obj = doc.addObject('Part::Box', 'Box')
|
||||
box_obj = doc.addObject("Part::Box", "Box")
|
||||
box_obj.Height = box_obj.Width = 1000
|
||||
box_obj.Length = 8000
|
||||
|
||||
# analysis
|
||||
analysis = ObjectsFem.makeAnalysis(doc, 'Analysis')
|
||||
analysis = ObjectsFem.makeAnalysis(doc, "Analysis")
|
||||
|
||||
# solver
|
||||
# TODO How to pass multiple solver for one analysis in one doc
|
||||
if solver == 'calculix':
|
||||
if solver == "calculix":
|
||||
solver_object = analysis.addObject(
|
||||
ObjectsFem.makeSolverCalculix(doc, 'SolverCalculiX')
|
||||
ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX")
|
||||
)[0]
|
||||
solver_object.AnalysisType = 'static'
|
||||
solver_object.GeometricalNonlinearity = 'linear'
|
||||
solver_object.AnalysisType = "static"
|
||||
solver_object.GeometricalNonlinearity = "linear"
|
||||
solver_object.ThermoMechSteadyState = False
|
||||
solver_object.MatrixSolverType = 'default'
|
||||
solver_object.MatrixSolverType = "default"
|
||||
solver_object.IterationsControlParameterTimeUse = False
|
||||
elif solver == 'ccxtools':
|
||||
elif solver == "ccxtools":
|
||||
solver_object = analysis.addObject(
|
||||
ObjectsFem.makeSolverCalculixCcxTools(doc, 'CalculiXccxTools')
|
||||
ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools")
|
||||
)[0]
|
||||
solver_object.AnalysisType = 'static'
|
||||
solver_object.GeometricalNonlinearity = 'linear'
|
||||
solver_object.AnalysisType = "static"
|
||||
solver_object.GeometricalNonlinearity = "linear"
|
||||
solver_object.ThermoMechSteadyState = False
|
||||
solver_object.MatrixSolverType = 'default'
|
||||
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'))
|
||||
solver_object.WorkingDir = u""
|
||||
elif solver == "elmer":
|
||||
analysis.addObject(ObjectsFem.makeSolverElmer(doc, "SolverElmer"))
|
||||
elif solver == "z88":
|
||||
analysis.addObject(ObjectsFem.makeSolverZ88(doc, "SolverZ88"))
|
||||
|
||||
# material
|
||||
material_object = analysis.addObject(
|
||||
ObjectsFem.makeMaterialSolid(doc, 'FemMaterial')
|
||||
ObjectsFem.makeMaterialSolid(doc, "FemMaterial")
|
||||
)[0]
|
||||
mat = material_object.Material
|
||||
mat['Name'] = "CalculiX-Steel"
|
||||
mat['YoungsModulus'] = "210000 MPa"
|
||||
mat['PoissonRatio'] = "0.30"
|
||||
mat['Density'] = "7900 kg/m^3"
|
||||
mat['ThermalExpansionCoefficient'] = "0.012 mm/m/K"
|
||||
mat["Name"] = "CalculiX-Steel"
|
||||
mat["YoungsModulus"] = "210000 MPa"
|
||||
mat["PoissonRatio"] = "0.30"
|
||||
mat["Density"] = "7900 kg/m^3"
|
||||
mat["ThermalExpansionCoefficient"] = "0.012 mm/m/K"
|
||||
material_object.Material = mat
|
||||
|
||||
# fixed_constraint
|
||||
@@ -98,12 +98,12 @@ def setup_cantileverbase(doc=None, solver='ccxtools'):
|
||||
fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(fem_mesh)
|
||||
if not control:
|
||||
print('ERROR on creating nodes')
|
||||
print("ERROR on creating nodes")
|
||||
control = create_elements(fem_mesh)
|
||||
if not control:
|
||||
print('ERROR on creating elements')
|
||||
print("ERROR on creating elements")
|
||||
femmesh_obj = analysis.addObject(
|
||||
doc.addObject('Fem::FemMeshObject', mesh_name)
|
||||
doc.addObject("Fem::FemMeshObject", mesh_name)
|
||||
)[0]
|
||||
femmesh_obj.FemMesh = fem_mesh
|
||||
|
||||
@@ -111,7 +111,7 @@ def setup_cantileverbase(doc=None, solver='ccxtools'):
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantileverfaceload(doc=None, solver='ccxtools'):
|
||||
def setup_cantileverfaceload(doc=None, solver="ccxtools"):
|
||||
# setup CalculiX cantilever, apply 9 MN on surface of front end face
|
||||
|
||||
doc = setup_cantileverbase(doc, solver)
|
||||
@@ -129,7 +129,7 @@ def setup_cantileverfaceload(doc=None, solver='ccxtools'):
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantilevernodeload(doc=None, solver='ccxtools'):
|
||||
def setup_cantilevernodeload(doc=None, solver="ccxtools"):
|
||||
# setup CalculiX cantilever, apply 9 MN on the 4 nodes of the front end face
|
||||
|
||||
doc = setup_cantileverbase(doc, solver)
|
||||
@@ -153,7 +153,7 @@ def setup_cantilevernodeload(doc=None, solver='ccxtools'):
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantileverprescribeddisplacement(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
|
||||
|
||||
@@ -172,7 +172,7 @@ def setup_cantileverprescribeddisplacement(doc=None, solver='ccxtools'):
|
||||
return doc
|
||||
|
||||
|
||||
'''
|
||||
"""
|
||||
from femexamples import ccx_cantilever_std as canti
|
||||
|
||||
canti.setup_cantileverbase()
|
||||
@@ -180,4 +180,4 @@ canti.setup_cantileverfaceload()
|
||||
canti.setup_cantilevernodeload()
|
||||
canti.setup_cantileverprescribeddisplacement()
|
||||
|
||||
'''
|
||||
"""
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
import FreeCAD
|
||||
|
||||
|
||||
def run_analysis(doc, base_name, filepath=''):
|
||||
def run_analysis(doc, base_name, filepath=""):
|
||||
|
||||
from os.path import join, exists
|
||||
from os import makedirs
|
||||
@@ -38,8 +38,8 @@ def run_analysis(doc, base_name, filepath=''):
|
||||
# print([obj.Name for obj in doc.Objects])
|
||||
|
||||
# filepath
|
||||
if filepath is '':
|
||||
filepath = join(gettmp(), 'FEM_examples')
|
||||
if filepath is "":
|
||||
filepath = join(gettmp(), "FEM_examples")
|
||||
if not exists(filepath):
|
||||
makedirs(filepath)
|
||||
|
||||
@@ -48,14 +48,14 @@ def run_analysis(doc, base_name, filepath=''):
|
||||
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':
|
||||
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'))
|
||||
save_fc_file = join(filepath, (base_name + ".FCStd"))
|
||||
FreeCAD.Console.PrintMessage(
|
||||
'Save FreeCAD file for {} analysis to {}\n.'.format(base_name, save_fc_file)
|
||||
"Save FreeCAD file for {} analysis to {}\n.".format(base_name, save_fc_file)
|
||||
)
|
||||
doc.saveAs(save_fc_file)
|
||||
|
||||
@@ -84,9 +84,9 @@ def run_ccx_cantileverfaceload(solver=None, base_name=None):
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'CantilverFaceLoad'
|
||||
base_name = "CantilverFaceLoad"
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
base_name += ("_" + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
@@ -98,9 +98,9 @@ def run_ccx_cantilevernodeload(solver=None, base_name=None):
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'CantileverNodeLoad'
|
||||
base_name = "CantileverNodeLoad"
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
base_name += ("_" + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
@@ -112,9 +112,9 @@ def run_ccx_cantileverprescribeddisplacement(solver=None, base_name=None):
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'CantileverPrescribedDisplacement'
|
||||
base_name = "CantileverPrescribedDisplacement"
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
base_name += ("_" + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
@@ -126,15 +126,15 @@ def run_rcwall2d(solver=None, base_name=None):
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'RC_FIB_Wall_2D'
|
||||
base_name = "RC_FIB_Wall_2D"
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
base_name += ("_" + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
'''
|
||||
"""
|
||||
from femexamples.manager import *
|
||||
|
||||
run_all()
|
||||
@@ -143,10 +143,10 @@ doc = run_ccx_cantileverfaceload()
|
||||
doc = run_ccx_cantilevernodeload()
|
||||
doc = run_ccx_cantileverprescribeddisplacement()
|
||||
|
||||
doc = run_ccx_cantilevernodeload('calculix')
|
||||
doc = run_ccx_cantilevernodeload('ccxtools')
|
||||
doc = run_ccx_cantilevernodeload('z88')
|
||||
doc = run_ccx_cantilevernodeload("calculix")
|
||||
doc = run_ccx_cantilevernodeload("ccxtools")
|
||||
doc = run_ccx_cantilevernodeload("z88")
|
||||
|
||||
doc = run_rcwall2d()
|
||||
|
||||
'''
|
||||
"""
|
||||
|
||||
@@ -26,7 +26,7 @@ import FreeCAD
|
||||
import ObjectsFem
|
||||
import Fem
|
||||
|
||||
mesh_name = 'Mesh' # needs to be Mesh to work with unit tests
|
||||
mesh_name = "Mesh" # needs to be Mesh to work with unit tests
|
||||
|
||||
|
||||
def init_doc(doc=None):
|
||||
@@ -35,7 +35,7 @@ def init_doc(doc=None):
|
||||
return doc
|
||||
|
||||
|
||||
def setup_rcwall2d(doc=None, solver='ccxtools'):
|
||||
def setup_rcwall2d(doc=None, solver="ccxtools"):
|
||||
# setup reinfoced wall in 2D
|
||||
|
||||
if doc is None:
|
||||
@@ -66,52 +66,52 @@ def setup_rcwall2d(doc=None, solver='ccxtools'):
|
||||
rcwall.Shape = Part.Face(Part.Wire([l1, l2, l3, l4, l5, l6, l7, l8]))
|
||||
|
||||
# analysis
|
||||
analysis = ObjectsFem.makeAnalysis(doc, 'Analysis')
|
||||
analysis = ObjectsFem.makeAnalysis(doc, "Analysis")
|
||||
|
||||
# solver
|
||||
# TODO How to pass multiple solver for one analysis in one doc
|
||||
if solver == 'calculix':
|
||||
if solver == "calculix":
|
||||
solver = analysis.addObject(
|
||||
ObjectsFem.makeSolverCalculix(doc, 'SolverCalculiX')
|
||||
ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX")
|
||||
)[0]
|
||||
solver.AnalysisType = 'static'
|
||||
solver.GeometricalNonlinearity = 'linear'
|
||||
solver.AnalysisType = "static"
|
||||
solver.GeometricalNonlinearity = "linear"
|
||||
solver.ThermoMechSteadyState = False
|
||||
solver.MatrixSolverType = 'default'
|
||||
solver.MatrixSolverType = "default"
|
||||
solver.IterationsControlParameterTimeUse = False
|
||||
elif solver == 'ccxtools':
|
||||
elif solver == "ccxtools":
|
||||
solver = analysis.addObject(
|
||||
ObjectsFem.makeSolverCalculixCcxTools(doc, 'CalculiXccxTools')
|
||||
ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools")
|
||||
)[0]
|
||||
solver.AnalysisType = 'static'
|
||||
solver.GeometricalNonlinearity = 'linear'
|
||||
solver.AnalysisType = "static"
|
||||
solver.GeometricalNonlinearity = "linear"
|
||||
solver.ThermoMechSteadyState = False
|
||||
solver.MatrixSolverType = 'default'
|
||||
solver.MatrixSolverType = "default"
|
||||
solver.IterationsControlParameterTimeUse = False
|
||||
solver.WorkingDir = u''
|
||||
solver.WorkingDir = u""
|
||||
|
||||
# shell thickness
|
||||
thickness = analysis.addObject(
|
||||
ObjectsFem.makeElementGeometry2D(doc, 0, 'ShellThickness')
|
||||
ObjectsFem.makeElementGeometry2D(doc, 0, "ShellThickness")
|
||||
)[0]
|
||||
thickness.Thickness = 150.0
|
||||
|
||||
# material
|
||||
matrixprop = {}
|
||||
matrixprop['Name'] = "Concrete-EN-C35/45"
|
||||
matrixprop['YoungsModulus'] = "32000 MPa"
|
||||
matrixprop['PoissonRatio'] = "0.17"
|
||||
matrixprop['CompressiveStrength'] = "15.75 MPa"
|
||||
matrixprop["Name"] = "Concrete-EN-C35/45"
|
||||
matrixprop["YoungsModulus"] = "32000 MPa"
|
||||
matrixprop["PoissonRatio"] = "0.17"
|
||||
matrixprop["CompressiveStrength"] = "15.75 MPa"
|
||||
# make some hint on the possible angle units in material system
|
||||
matrixprop['AngleOfFriction'] = "30 deg"
|
||||
matrixprop['Density'] = '2500 kg/m^3'
|
||||
matrixprop["AngleOfFriction"] = "30 deg"
|
||||
matrixprop["Density"] = "2500 kg/m^3"
|
||||
reinfoprop = {}
|
||||
reinfoprop['Name'] = "Reinforcement-FIB-B500"
|
||||
reinfoprop['YieldStrength'] = "315 MPa"
|
||||
reinfoprop["Name"] = "Reinforcement-FIB-B500"
|
||||
reinfoprop["YieldStrength"] = "315 MPa"
|
||||
# not an official FreeCAD material property
|
||||
reinfoprop['ReinforcementRatio'] = "0.0"
|
||||
reinfoprop["ReinforcementRatio"] = "0.0"
|
||||
material_reinforced = analysis.addObject(
|
||||
ObjectsFem.makeMaterialReinforced(doc, 'MaterialReinforced')
|
||||
ObjectsFem.makeMaterialReinforced(doc, "MaterialReinforced")
|
||||
)[0]
|
||||
material_reinforced.Material = matrixprop
|
||||
material_reinforced.Reinforcement = reinfoprop
|
||||
@@ -143,12 +143,12 @@ def setup_rcwall2d(doc=None, solver='ccxtools'):
|
||||
fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(fem_mesh)
|
||||
if not control:
|
||||
print('ERROR on creating nodes')
|
||||
print("ERROR on creating nodes")
|
||||
control = create_elements(fem_mesh)
|
||||
if not control:
|
||||
print('ERROR on creating elements')
|
||||
print("ERROR on creating elements")
|
||||
femmesh_obj = analysis.addObject(
|
||||
doc.addObject('Fem::FemMeshObject', mesh_name)
|
||||
doc.addObject("Fem::FemMeshObject", mesh_name)
|
||||
)[0]
|
||||
femmesh_obj.FemMesh = fem_mesh
|
||||
|
||||
@@ -156,8 +156,8 @@ def setup_rcwall2d(doc=None, solver='ccxtools'):
|
||||
return doc
|
||||
|
||||
|
||||
'''
|
||||
"""
|
||||
from femexamples import rc_wall_2d as rc
|
||||
rc.setup_rcwall2d()
|
||||
|
||||
'''
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user