FEM: examples, ccx cantilever add face and edgemesh

This commit is contained in:
Bernd Hahnebach
2021-07-25 21:30:15 +02:00
parent a2413094f6
commit ad9a44e690
13 changed files with 2609 additions and 8 deletions

View File

@@ -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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -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",

View 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

View 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

File diff suppressed because it is too large Load Diff

View 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