FEM: examples, use single quotes instead of double ones

This commit is contained in:
Bernd Hahnebach
2019-09-05 21:43:50 +02:00
parent 9217a08601
commit 516d087dde
3 changed files with 82 additions and 82 deletions

View File

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

View File

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

View File

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