FEM: examples, ccx cantilever add face and edgemesh
This commit is contained in:
@@ -48,13 +48,15 @@ SET(FemExamples_SRCS
|
||||
femexamples/buckling_platebuckling.py
|
||||
femexamples/buckling_lateraltorsionalbuckling.py
|
||||
femexamples/ccx_buckling_flexuralbuckling.py
|
||||
# femexamples/ccx_cantilever_base_face.py
|
||||
femexamples/ccx_cantilever_base_edge.py
|
||||
femexamples/ccx_cantilever_base_face.py
|
||||
femexamples/ccx_cantilever_base_solid.py
|
||||
femexamples/ccx_cantilever_ele_hexa20.py
|
||||
# femexamples/ccx_cantilever_ele_tetra4.py
|
||||
# femexamples/ccx_cantilever_ele_tria3.py
|
||||
# femexamples/ccx_cantilever_ele_tria6.py
|
||||
# femexamples/ccx_cantilever_ele_seg3.py
|
||||
femexamples/ccx_cantilever_ele_tetra4.py
|
||||
femexamples/ccx_cantilever_ele_tria3.py
|
||||
femexamples/ccx_cantilever_ele_tria6.py
|
||||
femexamples/ccx_cantilever_ele_seg2.py
|
||||
femexamples/ccx_cantilever_ele_seg3.py
|
||||
femexamples/ccx_cantilever_faceload.py
|
||||
femexamples/ccx_cantilever_nodeload.py
|
||||
femexamples/ccx_cantilever_prescribeddisplacement.py
|
||||
@@ -92,9 +94,11 @@ SET(FemExampleMeshes_SRCS
|
||||
femexamples/meshes/mesh_buckling_ibeam_tria6.py
|
||||
femexamples/meshes/mesh_buckling_plate_tria6.py
|
||||
femexamples/meshes/mesh_canticcx_hexa20.py
|
||||
# femexamples/meshes/mesh_canticcx_seg3.py
|
||||
femexamples/meshes/mesh_canticcx_seg2.py
|
||||
femexamples/meshes/mesh_canticcx_seg3.py
|
||||
femexamples/meshes/mesh_canticcx_tetra10.py
|
||||
# femexamples/meshes/mesh_canticcx_tria6.py
|
||||
femexamples/meshes/mesh_canticcx_tria3.py
|
||||
femexamples/meshes/mesh_canticcx_tria6.py
|
||||
femexamples/meshes/mesh_capacitance_two_balls_tetra10.py
|
||||
femexamples/meshes/mesh_constraint_centrif_tetra10.py
|
||||
femexamples/meshes/mesh_constraint_tie_tetra10.py
|
||||
|
||||
138
src/Mod/Fem/femexamples/ccx_cantilever_base_edge.py
Normal file
138
src/Mod/Fem/femexamples/ccx_cantilever_base_edge.py
Normal file
@@ -0,0 +1,138 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2020 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * Copyright (c) 2020 Sudhanshu Dubey <sudhanshu.thethunder@gmail.com *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
import FreeCAD
|
||||
|
||||
import Fem
|
||||
import ObjectsFem
|
||||
|
||||
from .manager import get_meshname
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def setup_cantilever_base_edge(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# geometric objects
|
||||
# load line
|
||||
load_line = doc.addObject("Part::Line", "LoadLine")
|
||||
load_line.X1 = 0
|
||||
load_line.Y1 = 0
|
||||
load_line.Z1 = 1000
|
||||
load_line.X2 = 0
|
||||
load_line.Y2 = 0
|
||||
load_line.Z2 = 0
|
||||
|
||||
# cantilever line
|
||||
geom_obj = doc.addObject("Part::Line", "CantileverLine")
|
||||
geom_obj.X1 = 0
|
||||
geom_obj.Y1 = 500
|
||||
geom_obj.Z1 = 500
|
||||
geom_obj.X2 = 8000
|
||||
geom_obj.Y2 = 500
|
||||
geom_obj.Z2 = 500
|
||||
|
||||
doc.recompute()
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
geom_obj.ViewObject.Document.activeView().viewAxonometric()
|
||||
geom_obj.ViewObject.Document.activeView().fitAll()
|
||||
|
||||
# analysis
|
||||
analysis = ObjectsFem.makeAnalysis(doc, "Analysis")
|
||||
|
||||
# solver
|
||||
if solvertype == "calculix":
|
||||
solver_obj = ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX")
|
||||
elif solvertype == "ccxtools":
|
||||
solver_obj = ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools")
|
||||
solver_obj.WorkingDir = u""
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(
|
||||
"Not known or not supported solver type: {}. "
|
||||
"No solver object was created.\n".format(solvertype)
|
||||
)
|
||||
if solvertype == "calculix" or solvertype == "ccxtools":
|
||||
solver_obj.AnalysisType = "static"
|
||||
solver_obj.GeometricalNonlinearity = "linear"
|
||||
solver_obj.ThermoMechSteadyState = False
|
||||
solver_obj.MatrixSolverType = "default"
|
||||
solver_obj.IterationsControlParameterTimeUse = False
|
||||
solver_obj.SplitInputWriter = False
|
||||
analysis.addObject(solver_obj)
|
||||
|
||||
# beam section
|
||||
beamsection_obj = ObjectsFem.makeElementGeometry1D(
|
||||
doc,
|
||||
sectiontype="Rectangular",
|
||||
width=1000.0,
|
||||
height=1000.0,
|
||||
name="BeamCrossSection"
|
||||
)
|
||||
analysis.addObject(beamsection_obj)
|
||||
|
||||
# material
|
||||
material_obj = ObjectsFem.makeMaterialSolid(doc, "MechanicalMaterial")
|
||||
mat = material_obj.Material
|
||||
mat["Name"] = "Calculix-Steel"
|
||||
mat["YoungsModulus"] = "210000 MPa"
|
||||
mat["PoissonRatio"] = "0.30"
|
||||
material_obj.Material = mat
|
||||
analysis.addObject(material_obj)
|
||||
|
||||
# constraint fixed
|
||||
con_fixed = ObjectsFem.makeConstraintFixed(doc, "ConstraintFixed")
|
||||
con_fixed.References = [(geom_obj, "Vertex1")]
|
||||
analysis.addObject(con_fixed)
|
||||
|
||||
# constraint force
|
||||
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
|
||||
con_force.References = [(geom_obj, "Vertex2")]
|
||||
con_force.Force = 9000000.0 # 9'000'000 N = 9 MN
|
||||
con_force.Direction = (load_line, ["Edge1"])
|
||||
con_force.Reversed = False
|
||||
analysis.addObject(con_force)
|
||||
|
||||
# mesh
|
||||
from .meshes.mesh_canticcx_seg3 import create_nodes, create_elements
|
||||
fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating nodes.\n")
|
||||
control = create_elements(fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating elements.\n")
|
||||
femmesh_obj = analysis.addObject(ObjectsFem.makeMeshGmsh(doc, get_meshname()))[0]
|
||||
femmesh_obj.FemMesh = fem_mesh
|
||||
femmesh_obj.Part = geom_obj
|
||||
femmesh_obj.SecondOrderLinear = False
|
||||
femmesh_obj.ElementDimension = "1D"
|
||||
femmesh_obj.CharacteristicLengthMax = "1750.0 mm"
|
||||
femmesh_obj.CharacteristicLengthMin = "1750.0 mm"
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
121
src/Mod/Fem/femexamples/ccx_cantilever_base_face.py
Normal file
121
src/Mod/Fem/femexamples/ccx_cantilever_base_face.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
import FreeCAD
|
||||
|
||||
import Fem
|
||||
import ObjectsFem
|
||||
|
||||
from .manager import get_meshname
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def setup_cantilever_base_face(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# geometric objects
|
||||
geom_obj = doc.addObject("Part::Plane", "CanileverPlate")
|
||||
geom_obj.Width = 1000
|
||||
geom_obj.Length = 8000
|
||||
geom_obj.Placement = FreeCAD.Placement(
|
||||
FreeCAD.Vector(0, 500, 0),
|
||||
FreeCAD.Rotation(0, 0, 90),
|
||||
FreeCAD.Vector(1, 0, 0),
|
||||
)
|
||||
|
||||
doc.recompute()
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
geom_obj.ViewObject.Document.activeView().viewAxonometric()
|
||||
geom_obj.ViewObject.Document.activeView().fitAll()
|
||||
|
||||
# analysis
|
||||
analysis = ObjectsFem.makeAnalysis(doc, "Analysis")
|
||||
|
||||
# solver
|
||||
if solvertype == "calculix":
|
||||
solver_obj = ObjectsFem.makeSolverCalculix(doc, "SolverCalculiX")
|
||||
elif solvertype == "ccxtools":
|
||||
solver_obj = ObjectsFem.makeSolverCalculixCcxTools(doc, "CalculiXccxTools")
|
||||
solver_obj.WorkingDir = u""
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(
|
||||
"Not known or not supported solver type: {}. "
|
||||
"No solver object was created.\n".format(solvertype)
|
||||
)
|
||||
if solvertype == "calculix" or solvertype == "ccxtools":
|
||||
solver_obj.AnalysisType = "static"
|
||||
solver_obj.GeometricalNonlinearity = "linear"
|
||||
solver_obj.ThermoMechSteadyState = False
|
||||
solver_obj.MatrixSolverType = "default"
|
||||
solver_obj.IterationsControlParameterTimeUse = False
|
||||
solver_obj.SplitInputWriter = False
|
||||
analysis.addObject(solver_obj)
|
||||
|
||||
# shell thickness
|
||||
thickness_obj = ObjectsFem.makeElementGeometry2D(doc, 1000, 'Thickness')
|
||||
analysis.addObject(thickness_obj)
|
||||
|
||||
# material
|
||||
material_obj = ObjectsFem.makeMaterialSolid(doc, "MechanicalMaterial")
|
||||
mat = material_obj.Material
|
||||
mat["Name"] = "Calculix-Steel"
|
||||
mat["YoungsModulus"] = "210000 MPa"
|
||||
mat["PoissonRatio"] = "0.30"
|
||||
material_obj.Material = mat
|
||||
analysis.addObject(material_obj)
|
||||
|
||||
# constraint fixed
|
||||
con_fixed = ObjectsFem.makeConstraintFixed(doc, "ConstraintFixed")
|
||||
con_fixed.References = [(geom_obj, "Edge1")]
|
||||
analysis.addObject(con_fixed)
|
||||
|
||||
# constraint force
|
||||
con_force = ObjectsFem.makeConstraintForce(doc, "ConstraintForce")
|
||||
con_force.References = [(geom_obj, "Edge3")]
|
||||
con_force.Force = 9000000.0 # 9'000'000 N = 9 MN
|
||||
con_force.Direction = (geom_obj, ["Edge3"])
|
||||
con_force.Reversed = True
|
||||
analysis.addObject(con_force)
|
||||
|
||||
# mesh
|
||||
from .meshes.mesh_canticcx_tria6 import create_nodes, create_elements
|
||||
fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating nodes.\n")
|
||||
control = create_elements(fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating elements.\n")
|
||||
femmesh_obj = analysis.addObject(ObjectsFem.makeMeshGmsh(doc, get_meshname()))[0]
|
||||
femmesh_obj.FemMesh = fem_mesh
|
||||
femmesh_obj.Part = geom_obj
|
||||
femmesh_obj.SecondOrderLinear = False
|
||||
femmesh_obj.ElementDimension = "2D"
|
||||
femmesh_obj.CharacteristicLengthMax = "500.0 mm"
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
97
src/Mod/Fem/femexamples/ccx_cantilever_ele_seg2.py
Normal file
97
src/Mod/Fem/femexamples/ccx_cantilever_ele_seg2.py
Normal file
@@ -0,0 +1,97 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
import FreeCAD
|
||||
|
||||
import Fem
|
||||
|
||||
from . import manager
|
||||
from .ccx_cantilever_base_edge import setup_cantilever_base_edge
|
||||
from .manager import get_meshname
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def get_information():
|
||||
return {
|
||||
"name": "CCX cantilever seg2 beam elements",
|
||||
"meshtype": "edge",
|
||||
"meshelement": "Seg2",
|
||||
"constraints": ["fixed", "force"],
|
||||
"solvers": ["calculix"],
|
||||
"material": "solid",
|
||||
"equation": "mechanical"
|
||||
}
|
||||
|
||||
|
||||
def get_explanation(header=""):
|
||||
return header + """
|
||||
|
||||
To run the example from Python console use:
|
||||
from femexamples.ccx_cantilever_ele_seg2 import setup
|
||||
setup()
|
||||
|
||||
|
||||
See forum topic post (for seg3):
|
||||
https://forum.freecadweb.org/viewtopic.php?f=18&t=16044
|
||||
|
||||
CalculiX cantilever modeled with seg2 beam elements
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# explanation object
|
||||
# just keep the following line and change text string in get_explanation method
|
||||
manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information())))
|
||||
|
||||
# setup CalculiX cantilever
|
||||
doc = setup_cantilever_base_edge(doc, solvertype)
|
||||
femmesh_obj = doc.getObject(get_meshname())
|
||||
|
||||
# load the seg2 mesh
|
||||
from .meshes.mesh_canticcx_seg2 import create_nodes, create_elements
|
||||
new_fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(new_fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating nodes.\n")
|
||||
control = create_elements(new_fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating elements.\n")
|
||||
|
||||
# overwrite mesh with the seg2 mesh
|
||||
femmesh_obj.FemMesh = new_fem_mesh
|
||||
|
||||
# set mesh obj parameter
|
||||
femmesh_obj.SecondOrderLinear = False
|
||||
femmesh_obj.ElementDimension = "1D"
|
||||
femmesh_obj.ElementOrder = "1st"
|
||||
femmesh_obj.CharacteristicLengthMax = "150.0 mm"
|
||||
femmesh_obj.CharacteristicLengthMin = "150.0 mm"
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
71
src/Mod/Fem/femexamples/ccx_cantilever_ele_seg3.py
Normal file
71
src/Mod/Fem/femexamples/ccx_cantilever_ele_seg3.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
from . import manager
|
||||
from .ccx_cantilever_base_edge import setup_cantilever_base_edge
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def get_information():
|
||||
return {
|
||||
"name": "CCX cantilever seg3 beam elements",
|
||||
"meshtype": "edge",
|
||||
"meshelement": "Seg3",
|
||||
"constraints": ["fixed", "force"],
|
||||
"solvers": ["calculix"],
|
||||
"material": "solid",
|
||||
"equation": "mechanical"
|
||||
}
|
||||
|
||||
|
||||
def get_explanation(header=""):
|
||||
return header + """
|
||||
|
||||
To run the example from Python console use:
|
||||
from femexamples.ccx_cantilever_ele_seg3 import setup
|
||||
setup()
|
||||
|
||||
|
||||
See forum topic post:
|
||||
https://forum.freecadweb.org/viewtopic.php?f=18&t=16044
|
||||
|
||||
CalculiX cantilever modeled with seg3 beam elements
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# explanation object
|
||||
# just keep the following line and change text string in get_explanation method
|
||||
manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information())))
|
||||
|
||||
# setup CalculiX cantilever
|
||||
doc = setup_cantilever_base_edge(doc, solvertype)
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
83
src/Mod/Fem/femexamples/ccx_cantilever_ele_tetra4.py
Normal file
83
src/Mod/Fem/femexamples/ccx_cantilever_ele_tetra4.py
Normal file
@@ -0,0 +1,83 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2019 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * Copyright (c) 2020 Sudhanshu Dubey <sudhanshu.thethunder@gmail.com> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
import Fem
|
||||
|
||||
from . import manager
|
||||
from .ccx_cantilever_faceload import setup as setup_with_faceload
|
||||
from .manager import get_meshname
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def get_information():
|
||||
return {
|
||||
"name": "CCX cantilever tetra4 solid elements",
|
||||
"meshtype": "solid",
|
||||
"meshelement": "Tetra4",
|
||||
"constraints": ["fixed", "force"],
|
||||
"solvers": ["calculix", "elmer", "z88"],
|
||||
"material": "solid",
|
||||
"equation": "mechanical"
|
||||
}
|
||||
|
||||
|
||||
def get_explanation(header=""):
|
||||
return header + """
|
||||
|
||||
To run the example from Python console use:
|
||||
from femexamples.ccx_cantilever_ele_tetra4 import setup
|
||||
setup()
|
||||
|
||||
|
||||
Tetra4 elements. There are really a lot needed thus mesh is cleared.
|
||||
Mesh before run the example.
|
||||
...
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# explanation object
|
||||
# just keep the following line and change text string in get_explanation method
|
||||
manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information())))
|
||||
|
||||
# setup cantilever faceload and exchange the mesh
|
||||
doc = setup_with_faceload(doc, solvertype)
|
||||
femmesh_obj = doc.getObject(get_meshname())
|
||||
|
||||
# clear mesh and set meshing parameter
|
||||
femmesh_obj.FemMesh = Fem.FemMesh()
|
||||
femmesh_obj.SecondOrderLinear = False
|
||||
femmesh_obj.ElementDimension = "3D"
|
||||
femmesh_obj.ElementOrder = "1st"
|
||||
femmesh_obj.CharacteristicLengthMax = "150.0 mm"
|
||||
femmesh_obj.CharacteristicLengthMin = "150.0 mm"
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
97
src/Mod/Fem/femexamples/ccx_cantilever_ele_tria3.py
Normal file
97
src/Mod/Fem/femexamples/ccx_cantilever_ele_tria3.py
Normal file
@@ -0,0 +1,97 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
import FreeCAD
|
||||
|
||||
import Fem
|
||||
|
||||
from . import manager
|
||||
from .ccx_cantilever_base_face import setup_cantilever_base_face
|
||||
from .manager import get_meshname
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def get_information():
|
||||
return {
|
||||
"name": "CCX cantilever tria3 face elements",
|
||||
"meshtype": "face",
|
||||
"meshelement": "Tria3",
|
||||
"constraints": ["fixed", "force"],
|
||||
"solvers": ["calculix"],
|
||||
"material": "solid",
|
||||
"equation": "mechanical"
|
||||
}
|
||||
|
||||
|
||||
def get_explanation(header=""):
|
||||
return header + """
|
||||
|
||||
To run the example from Python console use:
|
||||
from femexamples.ccx_cantilever_ele_tria3 import setup
|
||||
setup()
|
||||
|
||||
|
||||
See forum topic post:
|
||||
|
||||
|
||||
CalculiX cantilever modeled with tria3 face elements
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# explanation object
|
||||
# just keep the following line and change text string in get_explanation method
|
||||
manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information())))
|
||||
|
||||
# setup CalculiX cantilever
|
||||
doc = setup_cantilever_base_face(doc, solvertype)
|
||||
femmesh_obj = doc.getObject(get_meshname())
|
||||
|
||||
# load the tria3 mesh
|
||||
from .meshes.mesh_canticcx_tria3 import create_nodes, create_elements
|
||||
new_fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(new_fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating nodes.\n")
|
||||
control = create_elements(new_fem_mesh)
|
||||
if not control:
|
||||
FreeCAD.Console.PrintError("Error on creating elements.\n")
|
||||
|
||||
# overwrite mesh with the tria3 mesh
|
||||
femmesh_obj.FemMesh = new_fem_mesh
|
||||
|
||||
# set mesh obj parameter
|
||||
femmesh_obj.SecondOrderLinear = False
|
||||
femmesh_obj.ElementDimension = "2D"
|
||||
femmesh_obj.ElementOrder = "1st"
|
||||
femmesh_obj.CharacteristicLengthMax = "150.0 mm"
|
||||
femmesh_obj.CharacteristicLengthMin = "150.0 mm"
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
70
src/Mod/Fem/femexamples/ccx_cantilever_ele_tria6.py
Normal file
70
src/Mod/Fem/femexamples/ccx_cantilever_ele_tria6.py
Normal file
@@ -0,0 +1,70 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2021 Bernd Hahnebach <bernd@bimstatik.org> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program is distributed in the hope that it will be useful, *
|
||||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# * GNU Library General Public License for more details. *
|
||||
# * *
|
||||
# * You should have received a copy of the GNU Library General Public *
|
||||
# * License along with this program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
from . import manager
|
||||
from .ccx_cantilever_base_face import setup_cantilever_base_face
|
||||
from .manager import init_doc
|
||||
|
||||
|
||||
def get_information():
|
||||
return {
|
||||
"name": "CCX cantilever tria6 face elements",
|
||||
"meshtype": "face",
|
||||
"meshelement": "Tria6",
|
||||
"constraints": ["fixed", "force"],
|
||||
"solvers": ["calculix"],
|
||||
"material": "solid",
|
||||
"equation": "mechanical"
|
||||
}
|
||||
|
||||
|
||||
def get_explanation(header=""):
|
||||
return header + """
|
||||
|
||||
To run the example from Python console use:
|
||||
from femexamples.ccx_cantilever_ele_tria6 import setup
|
||||
setup()
|
||||
|
||||
|
||||
See forum topic post:
|
||||
|
||||
CalculiX cantilever modeled with face elements
|
||||
|
||||
"""
|
||||
|
||||
|
||||
def setup(doc=None, solvertype="ccxtools"):
|
||||
|
||||
# init FreeCAD document
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# explanation object
|
||||
# just keep the following line and change text string in get_explanation method
|
||||
manager.add_explanation_obj(doc, get_explanation(manager.get_header(get_information())))
|
||||
|
||||
# setup CalculiX cantilever
|
||||
doc = setup_cantilever_base_face(doc, solvertype)
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
@@ -57,7 +57,9 @@ class FemExamples(QtGui.QWidget):
|
||||
"__init__.py",
|
||||
"__pycache__",
|
||||
"boxanalysis_base.py",
|
||||
"ccx_cantilever_base.py",
|
||||
"ccx_cantilever_base_edge.py",
|
||||
"ccx_cantilever_base_face.py",
|
||||
"ccx_cantilever_base_solid.py",
|
||||
"examplesgui.py",
|
||||
"manager.py",
|
||||
"meshes",
|
||||
|
||||
117
src/Mod/Fem/femexamples/meshes/mesh_canticcx_seg2.py
Normal file
117
src/Mod/Fem/femexamples/meshes/mesh_canticcx_seg2.py
Normal file
@@ -0,0 +1,117 @@
|
||||
def create_nodes(femmesh):
|
||||
# nodes
|
||||
femmesh.addNode(0.0, 500.0, 500.0, 1)
|
||||
femmesh.addNode(8000.0, 500.0, 500.0, 2)
|
||||
femmesh.addNode(148.14814814814792, 500.0, 500.0, 3)
|
||||
femmesh.addNode(296.29629629629585, 500.0, 500.0, 4)
|
||||
femmesh.addNode(444.4444444444438, 500.0, 500.0, 5)
|
||||
femmesh.addNode(592.5925925925918, 500.0, 500.0, 6)
|
||||
femmesh.addNode(740.7407407407396, 500.0, 500.0, 7)
|
||||
femmesh.addNode(888.8888888888874, 500.0, 500.0, 8)
|
||||
femmesh.addNode(1037.0370370370354, 500.0, 500.0, 9)
|
||||
femmesh.addNode(1185.1851851851832, 500.0, 500.0, 10)
|
||||
femmesh.addNode(1333.333333333331, 500.0, 500.0, 11)
|
||||
femmesh.addNode(1481.4814814814792, 500.0, 500.0, 12)
|
||||
femmesh.addNode(1629.6296296296275, 500.0, 500.0, 13)
|
||||
femmesh.addNode(1777.7777777777753, 500.0, 500.0, 14)
|
||||
femmesh.addNode(1925.9259259259236, 500.0, 500.0, 15)
|
||||
femmesh.addNode(2074.0740740740716, 500.0, 500.0, 16)
|
||||
femmesh.addNode(2222.22222222222, 500.0, 500.0, 17)
|
||||
femmesh.addNode(2370.370370370368, 500.0, 500.0, 18)
|
||||
femmesh.addNode(2518.5185185185155, 500.0, 500.0, 19)
|
||||
femmesh.addNode(2666.666666666663, 500.0, 500.0, 20)
|
||||
femmesh.addNode(2814.8148148148107, 500.0, 500.0, 21)
|
||||
femmesh.addNode(2962.962962962958, 500.0, 500.0, 22)
|
||||
femmesh.addNode(3111.1111111111054, 500.0, 500.0, 23)
|
||||
femmesh.addNode(3259.259259259253, 500.0, 500.0, 24)
|
||||
femmesh.addNode(3407.4074074074006, 500.0, 500.0, 25)
|
||||
femmesh.addNode(3555.555555555548, 500.0, 500.0, 26)
|
||||
femmesh.addNode(3703.7037037036957, 500.0, 500.0, 27)
|
||||
femmesh.addNode(3851.851851851843, 500.0, 500.0, 28)
|
||||
femmesh.addNode(3999.9999999999905, 500.0, 500.0, 29)
|
||||
femmesh.addNode(4148.148148148138, 500.0, 500.0, 30)
|
||||
femmesh.addNode(4296.296296296286, 500.0, 500.0, 31)
|
||||
femmesh.addNode(4444.4444444444325, 500.0, 500.0, 32)
|
||||
femmesh.addNode(4592.59259259258, 500.0, 500.0, 33)
|
||||
femmesh.addNode(4740.740740740728, 500.0, 500.0, 34)
|
||||
femmesh.addNode(4888.888888888877, 500.0, 500.0, 35)
|
||||
femmesh.addNode(5037.037037037026, 500.0, 500.0, 36)
|
||||
femmesh.addNode(5185.185185185173, 500.0, 500.0, 37)
|
||||
femmesh.addNode(5333.333333333322, 500.0, 500.0, 38)
|
||||
femmesh.addNode(5481.481481481471, 500.0, 500.0, 39)
|
||||
femmesh.addNode(5629.6296296296205, 500.0, 500.0, 40)
|
||||
femmesh.addNode(5777.777777777769, 500.0, 500.0, 41)
|
||||
femmesh.addNode(5925.925925925918, 500.0, 500.0, 42)
|
||||
femmesh.addNode(6074.074074074067, 500.0, 500.0, 43)
|
||||
femmesh.addNode(6222.222222222214, 500.0, 500.0, 44)
|
||||
femmesh.addNode(6370.370370370363, 500.0, 500.0, 45)
|
||||
femmesh.addNode(6518.518518518513, 500.0, 500.0, 46)
|
||||
femmesh.addNode(6666.6666666666615, 500.0, 500.0, 47)
|
||||
femmesh.addNode(6814.81481481481, 500.0, 500.0, 48)
|
||||
femmesh.addNode(6962.962962962959, 500.0, 500.0, 49)
|
||||
femmesh.addNode(7111.111111111108, 500.0, 500.0, 50)
|
||||
femmesh.addNode(7259.259259259256, 500.0, 500.0, 51)
|
||||
femmesh.addNode(7407.407407407406, 500.0, 500.0, 52)
|
||||
femmesh.addNode(7555.555555555554, 500.0, 500.0, 53)
|
||||
femmesh.addNode(7703.703703703703, 500.0, 500.0, 54)
|
||||
femmesh.addNode(7851.851851851851, 500.0, 500.0, 55)
|
||||
return True
|
||||
|
||||
|
||||
def create_elements(femmesh):
|
||||
# elements
|
||||
femmesh.addEdge([1, 3], 1)
|
||||
femmesh.addEdge([3, 4], 2)
|
||||
femmesh.addEdge([4, 5], 3)
|
||||
femmesh.addEdge([5, 6], 4)
|
||||
femmesh.addEdge([6, 7], 5)
|
||||
femmesh.addEdge([7, 8], 6)
|
||||
femmesh.addEdge([8, 9], 7)
|
||||
femmesh.addEdge([9, 10], 8)
|
||||
femmesh.addEdge([10, 11], 9)
|
||||
femmesh.addEdge([11, 12], 10)
|
||||
femmesh.addEdge([12, 13], 11)
|
||||
femmesh.addEdge([13, 14], 12)
|
||||
femmesh.addEdge([14, 15], 13)
|
||||
femmesh.addEdge([15, 16], 14)
|
||||
femmesh.addEdge([16, 17], 15)
|
||||
femmesh.addEdge([17, 18], 16)
|
||||
femmesh.addEdge([18, 19], 17)
|
||||
femmesh.addEdge([19, 20], 18)
|
||||
femmesh.addEdge([20, 21], 19)
|
||||
femmesh.addEdge([21, 22], 20)
|
||||
femmesh.addEdge([22, 23], 21)
|
||||
femmesh.addEdge([23, 24], 22)
|
||||
femmesh.addEdge([24, 25], 23)
|
||||
femmesh.addEdge([25, 26], 24)
|
||||
femmesh.addEdge([26, 27], 25)
|
||||
femmesh.addEdge([27, 28], 26)
|
||||
femmesh.addEdge([28, 29], 27)
|
||||
femmesh.addEdge([29, 30], 28)
|
||||
femmesh.addEdge([30, 31], 29)
|
||||
femmesh.addEdge([31, 32], 30)
|
||||
femmesh.addEdge([32, 33], 31)
|
||||
femmesh.addEdge([33, 34], 32)
|
||||
femmesh.addEdge([34, 35], 33)
|
||||
femmesh.addEdge([35, 36], 34)
|
||||
femmesh.addEdge([36, 37], 35)
|
||||
femmesh.addEdge([37, 38], 36)
|
||||
femmesh.addEdge([38, 39], 37)
|
||||
femmesh.addEdge([39, 40], 38)
|
||||
femmesh.addEdge([40, 41], 39)
|
||||
femmesh.addEdge([41, 42], 40)
|
||||
femmesh.addEdge([42, 43], 41)
|
||||
femmesh.addEdge([43, 44], 42)
|
||||
femmesh.addEdge([44, 45], 43)
|
||||
femmesh.addEdge([45, 46], 44)
|
||||
femmesh.addEdge([46, 47], 45)
|
||||
femmesh.addEdge([47, 48], 46)
|
||||
femmesh.addEdge([48, 49], 47)
|
||||
femmesh.addEdge([49, 50], 48)
|
||||
femmesh.addEdge([50, 51], 49)
|
||||
femmesh.addEdge([51, 52], 50)
|
||||
femmesh.addEdge([52, 53], 51)
|
||||
femmesh.addEdge([53, 54], 52)
|
||||
femmesh.addEdge([54, 55], 53)
|
||||
femmesh.addEdge([55, 2], 54)
|
||||
return True
|
||||
24
src/Mod/Fem/femexamples/meshes/mesh_canticcx_seg3.py
Normal file
24
src/Mod/Fem/femexamples/meshes/mesh_canticcx_seg3.py
Normal file
@@ -0,0 +1,24 @@
|
||||
def create_nodes(femmesh):
|
||||
# nodes
|
||||
femmesh.addNode(0.0, 500.0, 500.0, 1)
|
||||
femmesh.addNode(8000.0, 500.0, 500.0, 2)
|
||||
femmesh.addNode(1600.0000000000023, 500.0, 500.0, 3)
|
||||
femmesh.addNode(3200.000000000006, 500.0, 500.0, 4)
|
||||
femmesh.addNode(4800.000000000003, 500.0, 500.0, 5)
|
||||
femmesh.addNode(6399.999999999996, 500.0, 500.0, 6)
|
||||
femmesh.addNode(800.0000000000011, 500.0, 500.0, 7)
|
||||
femmesh.addNode(2400.000000000004, 500.0, 500.0, 8)
|
||||
femmesh.addNode(4000.0000000000045, 500.0, 500.0, 9)
|
||||
femmesh.addNode(5599.999999999999, 500.0, 500.0, 10)
|
||||
femmesh.addNode(7199.999999999998, 500.0, 500.0, 11)
|
||||
return True
|
||||
|
||||
|
||||
def create_elements(femmesh):
|
||||
# elements
|
||||
femmesh.addEdge([1, 3, 7], 1)
|
||||
femmesh.addEdge([3, 4, 8], 2)
|
||||
femmesh.addEdge([4, 5, 9], 3)
|
||||
femmesh.addEdge([5, 6, 10], 4)
|
||||
femmesh.addEdge([6, 2, 11], 5)
|
||||
return True
|
||||
1522
src/Mod/Fem/femexamples/meshes/mesh_canticcx_tria3.py
Normal file
1522
src/Mod/Fem/femexamples/meshes/mesh_canticcx_tria3.py
Normal file
File diff suppressed because it is too large
Load Diff
255
src/Mod/Fem/femexamples/meshes/mesh_canticcx_tria6.py
Normal file
255
src/Mod/Fem/femexamples/meshes/mesh_canticcx_tria6.py
Normal file
@@ -0,0 +1,255 @@
|
||||
def create_nodes(femmesh):
|
||||
# nodes
|
||||
femmesh.addNode(0.0, 500.0, 0.0, 1)
|
||||
femmesh.addNode(0.0, 500.00000000000324, 1000.0, 2)
|
||||
femmesh.addNode(8000.0, 500.0, 0.0, 3)
|
||||
femmesh.addNode(8000.0, 500.00000000000324, 1000.0, 4)
|
||||
femmesh.addNode(0.0, 500.0000000000001, 500.0, 5)
|
||||
femmesh.addNode(0.0, 500.00000000000006, 250.0, 6)
|
||||
femmesh.addNode(0.0, 500.00000000000017, 750.0, 7)
|
||||
femmesh.addNode(500.0, 500.0, 0.0, 8)
|
||||
femmesh.addNode(1000.0, 500.0, 0.0, 9)
|
||||
femmesh.addNode(1500.0, 500.0, 0.0, 10)
|
||||
femmesh.addNode(2000.0, 500.0, 0.0, 11)
|
||||
femmesh.addNode(2500.0, 500.0, 0.0, 12)
|
||||
femmesh.addNode(3000.0, 500.0, 0.0, 13)
|
||||
femmesh.addNode(3500.0, 500.0, 0.0, 14)
|
||||
femmesh.addNode(4000.0, 500.0, 0.0, 15)
|
||||
femmesh.addNode(4500.0, 500.0, 0.0, 16)
|
||||
femmesh.addNode(5000.0, 500.0, 0.0, 17)
|
||||
femmesh.addNode(5500.0, 500.0, 0.0, 18)
|
||||
femmesh.addNode(6000.0, 500.0, 0.0, 19)
|
||||
femmesh.addNode(6500.0, 500.0, 0.0, 20)
|
||||
femmesh.addNode(7000.0, 500.0, 0.0, 21)
|
||||
femmesh.addNode(7500.0, 500.0, 0.0, 22)
|
||||
femmesh.addNode(250.0, 500.0, 0.0, 23)
|
||||
femmesh.addNode(750.0, 500.0, 0.0, 24)
|
||||
femmesh.addNode(1250.0, 500.0, 0.0, 25)
|
||||
femmesh.addNode(1750.0, 500.0, 0.0, 26)
|
||||
femmesh.addNode(2250.0, 500.0, 0.0, 27)
|
||||
femmesh.addNode(2750.0, 500.0, 0.0, 28)
|
||||
femmesh.addNode(3250.0, 500.0, 0.0, 29)
|
||||
femmesh.addNode(3750.0, 500.0, 0.0, 30)
|
||||
femmesh.addNode(4250.0, 500.0, 0.0, 31)
|
||||
femmesh.addNode(4750.0, 500.0, 0.0, 32)
|
||||
femmesh.addNode(5250.0, 500.0, 0.0, 33)
|
||||
femmesh.addNode(5750.0, 500.0, 0.0, 34)
|
||||
femmesh.addNode(6250.0, 500.0, 0.0, 35)
|
||||
femmesh.addNode(6750.0, 500.0, 0.0, 36)
|
||||
femmesh.addNode(7250.0, 500.0, 0.0, 37)
|
||||
femmesh.addNode(7750.0, 500.0, 0.0, 38)
|
||||
femmesh.addNode(8000.0, 500.0000000000001, 500.0, 39)
|
||||
femmesh.addNode(8000.0, 500.00000000000006, 250.0, 40)
|
||||
femmesh.addNode(8000.0, 500.00000000000017, 750.0, 41)
|
||||
femmesh.addNode(500.0, 500.0000000000002, 1000.0, 42)
|
||||
femmesh.addNode(1000.0, 500.0000000000002, 1000.0, 43)
|
||||
femmesh.addNode(1500.0, 500.0000000000002, 1000.0, 44)
|
||||
femmesh.addNode(2000.0, 500.0000000000002, 1000.0, 45)
|
||||
femmesh.addNode(2500.0, 500.0000000000002, 1000.0, 46)
|
||||
femmesh.addNode(3000.0, 500.0000000000002, 1000.0, 47)
|
||||
femmesh.addNode(3500.0, 500.0000000000002, 1000.0, 48)
|
||||
femmesh.addNode(4000.0, 500.0000000000002, 1000.0, 49)
|
||||
femmesh.addNode(4500.0, 500.0000000000002, 1000.0, 50)
|
||||
femmesh.addNode(5000.0, 500.0000000000002, 1000.0, 51)
|
||||
femmesh.addNode(5500.0, 500.0000000000002, 1000.0, 52)
|
||||
femmesh.addNode(6000.0, 500.0000000000002, 1000.0, 53)
|
||||
femmesh.addNode(6500.0, 500.0000000000002, 1000.0, 54)
|
||||
femmesh.addNode(7000.0, 500.0000000000002, 1000.0, 55)
|
||||
femmesh.addNode(7500.0, 500.0000000000002, 1000.0, 56)
|
||||
femmesh.addNode(250.0, 500.0000000000002, 1000.0, 57)
|
||||
femmesh.addNode(750.0, 500.0000000000002, 1000.0, 58)
|
||||
femmesh.addNode(1250.0, 500.0000000000002, 1000.0, 59)
|
||||
femmesh.addNode(1750.0, 500.0000000000002, 1000.0, 60)
|
||||
femmesh.addNode(2250.0, 500.0000000000002, 1000.0, 61)
|
||||
femmesh.addNode(2750.0, 500.0000000000002, 1000.0, 62)
|
||||
femmesh.addNode(3250.0, 500.0000000000002, 1000.0, 63)
|
||||
femmesh.addNode(3750.0, 500.0000000000002, 1000.0, 64)
|
||||
femmesh.addNode(4250.0, 500.0000000000002, 1000.0, 65)
|
||||
femmesh.addNode(4750.0, 500.0000000000002, 1000.0, 66)
|
||||
femmesh.addNode(5250.0, 500.0000000000002, 1000.0, 67)
|
||||
femmesh.addNode(5750.0, 500.0000000000002, 1000.0, 68)
|
||||
femmesh.addNode(6250.0, 500.0000000000002, 1000.0, 69)
|
||||
femmesh.addNode(6750.0, 500.0000000000002, 1000.0, 70)
|
||||
femmesh.addNode(7250.0, 500.0000000000002, 1000.0, 71)
|
||||
femmesh.addNode(7750.0, 500.0000000000002, 1000.0, 72)
|
||||
femmesh.addNode(714.9234693877551, 500.0000000000001, 484.05612244897964, 73)
|
||||
femmesh.addNode(1750.0, 500.0000000000001, 500.0, 74)
|
||||
femmesh.addNode(2750.0, 500.0000000000001, 500.0, 75)
|
||||
femmesh.addNode(3750.0, 500.0000000000001, 500.0, 76)
|
||||
femmesh.addNode(4750.0, 500.0000000000001, 500.0, 77)
|
||||
femmesh.addNode(5750.0, 500.0000000000001, 500.0, 78)
|
||||
femmesh.addNode(6756.944444444443, 500.0000000000001, 489.5833333333333, 79)
|
||||
femmesh.addNode(7301.463293650793, 500.0000000000001, 489.7073412698406, 80)
|
||||
femmesh.addNode(1244.1539115646258, 500.0000000000001, 497.34268707482994, 81)
|
||||
femmesh.addNode(2250.0, 500.0000000000001, 500.0, 82)
|
||||
femmesh.addNode(3250.0, 500.0000000000001, 500.0, 83)
|
||||
femmesh.addNode(4250.0, 500.0000000000001, 500.0, 84)
|
||||
femmesh.addNode(5250.0, 500.0000000000001, 500.0, 85)
|
||||
femmesh.addNode(6251.157407407407, 500.0000000000001, 498.2638888888889, 86)
|
||||
femmesh.addNode(355.2776691684587, 500.0000000000001, 632.304566974645, 87)
|
||||
femmesh.addNode(7660.398197179746, 500.00000000000017, 648.5965255878823, 88)
|
||||
femmesh.addNode(7699.764777975907, 500.00000000000006, 310.456176890242, 89)
|
||||
femmesh.addNode(314.0402277112428, 500.00000000000006, 323.27213788472494, 90)
|
||||
femmesh.addNode(1122.0769557823128, 500.00000000000017, 748.6713435374149, 91)
|
||||
femmesh.addNode(1372.0769557823128, 500.00000000000017, 748.6713435374149, 92)
|
||||
femmesh.addNode(2125.0, 500.00000000000017, 750.0, 93)
|
||||
femmesh.addNode(2375.0, 500.00000000000017, 750.0, 94)
|
||||
femmesh.addNode(3125.0, 500.00000000000017, 750.0, 95)
|
||||
femmesh.addNode(3375.0, 500.00000000000017, 750.0, 96)
|
||||
femmesh.addNode(4125.0, 500.00000000000017, 750.0, 97)
|
||||
femmesh.addNode(4375.0, 500.00000000000017, 750.0, 98)
|
||||
femmesh.addNode(5125.0, 500.00000000000017, 750.0, 99)
|
||||
femmesh.addNode(5375.0, 500.00000000000017, 750.0, 100)
|
||||
femmesh.addNode(6125.5787037037035, 500.00000000000017, 749.1319444444445, 101)
|
||||
femmesh.addNode(6375.5787037037035, 500.00000000000017, 749.1319444444445, 102)
|
||||
femmesh.addNode(857.4617346938776, 500.00000000000017, 742.0280612244899, 103)
|
||||
femmesh.addNode(979.5386904761904, 500.0000000000001, 490.6994047619048, 104)
|
||||
femmesh.addNode(1497.0769557823128, 500.0000000000001, 498.67134353741494, 105)
|
||||
femmesh.addNode(1625.0, 500.00000000000017, 750.0, 106)
|
||||
femmesh.addNode(1875.0, 500.00000000000017, 750.0, 107)
|
||||
femmesh.addNode(2000.0, 500.0000000000001, 500.0, 108)
|
||||
femmesh.addNode(2500.0, 500.0000000000001, 500.0, 109)
|
||||
femmesh.addNode(2625.0, 500.00000000000017, 750.0, 110)
|
||||
femmesh.addNode(2875.0, 500.00000000000017, 750.0, 111)
|
||||
femmesh.addNode(3000.0, 500.0000000000001, 500.0, 112)
|
||||
femmesh.addNode(3500.0, 500.0000000000001, 500.0, 113)
|
||||
femmesh.addNode(3625.0, 500.00000000000017, 750.0, 114)
|
||||
femmesh.addNode(3875.0, 500.00000000000017, 750.0, 115)
|
||||
femmesh.addNode(4000.0, 500.0000000000001, 500.0, 116)
|
||||
femmesh.addNode(4500.0, 500.0000000000001, 500.0, 117)
|
||||
femmesh.addNode(4625.0, 500.00000000000017, 750.0, 118)
|
||||
femmesh.addNode(4875.0, 500.00000000000017, 750.0, 119)
|
||||
femmesh.addNode(5000.0, 500.0000000000001, 500.0, 120)
|
||||
femmesh.addNode(5500.0, 500.0000000000001, 500.0, 121)
|
||||
femmesh.addNode(5625.0, 500.00000000000017, 750.0, 122)
|
||||
femmesh.addNode(5875.0, 500.00000000000017, 750.0, 123)
|
||||
femmesh.addNode(6000.5787037037035, 500.0000000000001, 499.13194444444446, 124)
|
||||
femmesh.addNode(6504.050925925925, 500.0000000000001, 493.9236111111111, 125)
|
||||
femmesh.addNode(6628.472222222222, 500.00000000000017, 744.7916666666666, 126)
|
||||
femmesh.addNode(7150.731646825397, 500.00000000000006, 244.8536706349203, 127)
|
||||
femmesh.addNode(7029.203869047618, 500.0000000000001, 489.64533730158695, 128)
|
||||
femmesh.addNode(6878.472222222222, 500.00000000000006, 244.79166666666666, 129)
|
||||
femmesh.addNode(6878.472222222222, 500.00000000000017, 744.7916666666666, 130)
|
||||
femmesh.addNode(7150.731646825397, 500.00000000000017, 744.8536706349203, 131)
|
||||
femmesh.addNode(7400.731646825397, 500.00000000000006, 244.8536706349203, 132)
|
||||
femmesh.addNode(7400.731646825397, 500.00000000000017, 744.8536706349203, 133)
|
||||
femmesh.addNode(857.4617346938776, 500.00000000000006, 242.02806122448982, 134)
|
||||
femmesh.addNode(607.4617346938776, 500.00000000000006, 242.02806122448982, 135)
|
||||
femmesh.addNode(1875.0, 500.00000000000006, 250.0, 136)
|
||||
femmesh.addNode(1625.0, 500.00000000000006, 250.0, 137)
|
||||
femmesh.addNode(2875.0, 500.00000000000006, 250.0, 138)
|
||||
femmesh.addNode(2625.0, 500.00000000000006, 250.0, 139)
|
||||
femmesh.addNode(3875.0, 500.00000000000006, 250.0, 140)
|
||||
femmesh.addNode(3625.0, 500.00000000000006, 250.0, 141)
|
||||
femmesh.addNode(4875.0, 500.00000000000006, 250.0, 142)
|
||||
femmesh.addNode(4625.0, 500.00000000000006, 250.0, 143)
|
||||
femmesh.addNode(5875.0, 500.00000000000006, 250.0, 144)
|
||||
femmesh.addNode(5625.0, 500.00000000000006, 250.0, 145)
|
||||
femmesh.addNode(6628.472222222222, 500.00000000000006, 244.79166666666666, 146)
|
||||
femmesh.addNode(607.4617346938776, 500.00000000000017, 742.0280612244899, 147)
|
||||
femmesh.addNode(1122.0769557823128, 500.00000000000006, 248.67134353741497, 148)
|
||||
femmesh.addNode(1372.0769557823128, 500.00000000000006, 248.67134353741497, 149)
|
||||
femmesh.addNode(2125.0, 500.00000000000006, 250.0, 150)
|
||||
femmesh.addNode(2375.0, 500.00000000000006, 250.0, 151)
|
||||
femmesh.addNode(3125.0, 500.00000000000006, 250.0, 152)
|
||||
femmesh.addNode(3375.0, 500.00000000000006, 250.0, 153)
|
||||
femmesh.addNode(4125.0, 500.00000000000006, 250.0, 154)
|
||||
femmesh.addNode(4375.0, 500.00000000000006, 250.0, 155)
|
||||
femmesh.addNode(5125.0, 500.00000000000006, 250.0, 156)
|
||||
femmesh.addNode(5375.0, 500.00000000000006, 250.0, 157)
|
||||
femmesh.addNode(6125.5787037037035, 500.00000000000006, 249.13194444444446, 158)
|
||||
femmesh.addNode(6375.5787037037035, 500.00000000000006, 249.13194444444446, 159)
|
||||
femmesh.addNode(514.4818485494989, 500.0000000000001, 403.66413016685226, 160)
|
||||
femmesh.addNode(407.0201138556214, 500.00000000000006, 161.63606894236247, 161)
|
||||
femmesh.addNode(177.63883458422936, 500.0000000000001, 566.1522834873225, 162)
|
||||
femmesh.addNode(177.63883458422936, 500.00000000000017, 816.1522834873225, 163)
|
||||
femmesh.addNode(427.63883458422936, 500.00000000000017, 816.1522834873225, 164)
|
||||
femmesh.addNode(535.1005692781068, 500.0000000000001, 558.1803447118123, 165)
|
||||
femmesh.addNode(7599.882388987953, 500.00000000000006, 155.228088445121, 166)
|
||||
femmesh.addNode(7500.614035813351, 500.0000000000001, 400.08175908004125, 167)
|
||||
femmesh.addNode(7830.199098589873, 500.00000000000017, 824.2982627939411, 168)
|
||||
femmesh.addNode(7830.199098589873, 500.0000000000001, 574.2982627939411, 169)
|
||||
femmesh.addNode(7580.199098589873, 500.00000000000017, 824.2982627939411, 170)
|
||||
femmesh.addNode(7480.9307454152695, 500.0000000000001, 569.1519334288614, 171)
|
||||
femmesh.addNode(334.65894843985075, 500.0000000000001, 477.788352429685, 172)
|
||||
femmesh.addNode(7849.882388987953, 500.0000000000001, 405.228088445121, 173)
|
||||
femmesh.addNode(7849.882388987953, 500.00000000000006, 155.228088445121, 174)
|
||||
femmesh.addNode(157.0201138556214, 500.00000000000006, 161.63606894236247, 175)
|
||||
femmesh.addNode(157.0201138556214, 500.0000000000001, 411.6360689423625, 176)
|
||||
femmesh.addNode(7680.081487577827, 500.0000000000001, 479.52635123906214, 177)
|
||||
return True
|
||||
|
||||
|
||||
def create_elements(femmesh):
|
||||
# elements
|
||||
femmesh.addFace([43, 81, 44, 91, 92, 59], 37)
|
||||
femmesh.addFace([45, 82, 46, 93, 94, 61], 38)
|
||||
femmesh.addFace([47, 83, 48, 95, 96, 63], 39)
|
||||
femmesh.addFace([49, 84, 50, 97, 98, 65], 40)
|
||||
femmesh.addFace([51, 85, 52, 99, 100, 67], 41)
|
||||
femmesh.addFace([53, 86, 54, 101, 102, 69], 42)
|
||||
femmesh.addFace([43, 73, 81, 103, 104, 91], 43)
|
||||
femmesh.addFace([44, 81, 74, 92, 105, 106], 44)
|
||||
femmesh.addFace([45, 74, 82, 107, 108, 93], 45)
|
||||
femmesh.addFace([46, 82, 75, 94, 109, 110], 46)
|
||||
femmesh.addFace([47, 75, 83, 111, 112, 95], 47)
|
||||
femmesh.addFace([48, 83, 76, 96, 113, 114], 48)
|
||||
femmesh.addFace([49, 76, 84, 115, 116, 97], 49)
|
||||
femmesh.addFace([50, 84, 77, 98, 117, 118], 50)
|
||||
femmesh.addFace([51, 77, 85, 119, 120, 99], 51)
|
||||
femmesh.addFace([52, 85, 78, 100, 121, 122], 52)
|
||||
femmesh.addFace([53, 78, 86, 123, 124, 101], 53)
|
||||
femmesh.addFace([54, 86, 79, 102, 125, 126], 54)
|
||||
femmesh.addFace([21, 80, 79, 127, 128, 129], 55)
|
||||
femmesh.addFace([55, 79, 80, 130, 128, 131], 56)
|
||||
femmesh.addFace([21, 22, 80, 37, 132, 127], 57)
|
||||
femmesh.addFace([55, 80, 56, 131, 133, 71], 58)
|
||||
femmesh.addFace([8, 9, 73, 24, 134, 135], 59)
|
||||
femmesh.addFace([10, 11, 74, 26, 136, 137], 60)
|
||||
femmesh.addFace([12, 13, 75, 28, 138, 139], 61)
|
||||
femmesh.addFace([14, 15, 76, 30, 140, 141], 62)
|
||||
femmesh.addFace([16, 17, 77, 32, 142, 143], 63)
|
||||
femmesh.addFace([18, 19, 78, 34, 144, 145], 64)
|
||||
femmesh.addFace([20, 21, 79, 36, 129, 146], 65)
|
||||
femmesh.addFace([42, 73, 43, 147, 103, 58], 66)
|
||||
femmesh.addFace([44, 74, 45, 106, 107, 60], 67)
|
||||
femmesh.addFace([46, 75, 47, 110, 111, 62], 68)
|
||||
femmesh.addFace([48, 76, 49, 114, 115, 64], 69)
|
||||
femmesh.addFace([50, 77, 51, 118, 119, 66], 70)
|
||||
femmesh.addFace([52, 78, 53, 122, 123, 68], 71)
|
||||
femmesh.addFace([54, 79, 55, 126, 130, 70], 72)
|
||||
femmesh.addFace([9, 81, 73, 148, 104, 134], 73)
|
||||
femmesh.addFace([10, 74, 81, 137, 105, 149], 74)
|
||||
femmesh.addFace([11, 82, 74, 150, 108, 136], 75)
|
||||
femmesh.addFace([12, 75, 82, 139, 109, 151], 76)
|
||||
femmesh.addFace([13, 83, 75, 152, 112, 138], 77)
|
||||
femmesh.addFace([14, 76, 83, 141, 113, 153], 78)
|
||||
femmesh.addFace([15, 84, 76, 154, 116, 140], 79)
|
||||
femmesh.addFace([16, 77, 84, 143, 117, 155], 80)
|
||||
femmesh.addFace([17, 85, 77, 156, 120, 142], 81)
|
||||
femmesh.addFace([18, 78, 85, 145, 121, 157], 82)
|
||||
femmesh.addFace([19, 86, 78, 158, 124, 144], 83)
|
||||
femmesh.addFace([20, 79, 86, 146, 125, 159], 84)
|
||||
femmesh.addFace([9, 10, 81, 25, 149, 148], 85)
|
||||
femmesh.addFace([11, 12, 82, 27, 151, 150], 86)
|
||||
femmesh.addFace([13, 14, 83, 29, 153, 152], 87)
|
||||
femmesh.addFace([15, 16, 84, 31, 155, 154], 88)
|
||||
femmesh.addFace([17, 18, 85, 33, 157, 156], 89)
|
||||
femmesh.addFace([19, 20, 86, 35, 159, 158], 90)
|
||||
femmesh.addFace([8, 73, 90, 135, 160, 161], 91)
|
||||
femmesh.addFace([2, 5, 87, 7, 162, 163], 92)
|
||||
femmesh.addFace([2, 87, 42, 163, 164, 57], 93)
|
||||
femmesh.addFace([42, 87, 73, 164, 165, 147], 94)
|
||||
femmesh.addFace([22, 89, 80, 166, 167, 132], 95)
|
||||
femmesh.addFace([4, 88, 39, 168, 169, 41], 96)
|
||||
femmesh.addFace([4, 56, 88, 72, 170, 168], 97)
|
||||
femmesh.addFace([56, 80, 88, 133, 171, 170], 98)
|
||||
femmesh.addFace([73, 87, 90, 165, 172, 160], 99)
|
||||
femmesh.addFace([3, 39, 89, 40, 173, 174], 100)
|
||||
femmesh.addFace([3, 89, 22, 174, 166, 38], 101)
|
||||
femmesh.addFace([1, 90, 5, 175, 176, 6], 102)
|
||||
femmesh.addFace([1, 8, 90, 23, 161, 175], 103)
|
||||
femmesh.addFace([80, 89, 88, 167, 177, 171], 104)
|
||||
femmesh.addFace([5, 90, 87, 176, 172, 162], 105)
|
||||
femmesh.addFace([39, 88, 89, 169, 177, 173], 106)
|
||||
return True
|
||||
Reference in New Issue
Block a user