FEM: examples, add this new package and the module for ccx cantilever
This commit is contained in:
@@ -32,6 +32,13 @@ SET(FemCommands_SRCS
|
||||
femcommands/manager.py
|
||||
)
|
||||
|
||||
SET(FemExamples_SRCS
|
||||
femexamples/__init__.py
|
||||
femexamples/ccx_cantilever_std.py
|
||||
femexamples/manager.py
|
||||
femexamples/mesh_canticcx_tetra10.py
|
||||
)
|
||||
|
||||
SET(FemInOut_SRCS
|
||||
feminout/__init__.py
|
||||
feminout/convert2TetGen.py
|
||||
@@ -206,6 +213,7 @@ SET(FemObjectsScripts_SRCS
|
||||
SET(FemAllScripts
|
||||
${FemScripts_SRCS}
|
||||
${FemCommands_SRCS}
|
||||
${FemExamples_SRCS}
|
||||
${FemInOut_SRCS}
|
||||
${FemMesh_SRCS}
|
||||
${FemResult_SRCS}
|
||||
@@ -235,6 +243,7 @@ fc_copy_sources(FemScriptsTarget "${CMAKE_BINARY_DIR}/Mod/Fem" ${FemAllScripts})
|
||||
# install Python packages (for make install)
|
||||
INSTALL(FILES ${FemScripts_SRCS} DESTINATION Mod/Fem)
|
||||
INSTALL(FILES ${FemCommands_SRCS} DESTINATION Mod/Fem/femcommands)
|
||||
INSTALL(FILES ${FemExamples_SRCS} DESTINATION Mod/Fem/femexamples)
|
||||
INSTALL(FILES ${FemInOut_SRCS} DESTINATION Mod/Fem/feminout)
|
||||
INSTALL(FILES ${FemMesh_SRCS} DESTINATION Mod/Fem/femmesh)
|
||||
INSTALL(FILES ${FemResult_SRCS} DESTINATION Mod/Fem/femresult)
|
||||
|
||||
0
src/Mod/Fem/femexamples/__init__.py
Normal file
0
src/Mod/Fem/femexamples/__init__.py
Normal file
162
src/Mod/Fem/femexamples/ccx_cantilever_std.py
Normal file
162
src/Mod/Fem/femexamples/ccx_cantilever_std.py
Normal file
@@ -0,0 +1,162 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2019 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. *
|
||||
# * *
|
||||
# * FreeCAD 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 FreeCAD; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
|
||||
import FreeCAD
|
||||
import ObjectsFem
|
||||
import Fem
|
||||
|
||||
mesh_name = 'Mesh' # needs to be Mesh to work with unit tests
|
||||
|
||||
|
||||
def init_doc(doc=None):
|
||||
if doc is None:
|
||||
doc = FreeCAD.newDocument()
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantileverbase(doc=None, solver='ccxtools'):
|
||||
# setup CalculiX cantilever base model
|
||||
|
||||
if doc is None:
|
||||
doc = init_doc()
|
||||
|
||||
# part
|
||||
box_obj = doc.addObject('Part::Box', 'Box')
|
||||
box_obj.Height = box_obj.Width = 1000
|
||||
box_obj.Length = 8000
|
||||
|
||||
# analysis
|
||||
analysis = ObjectsFem.makeAnalysis(doc, 'Analysis')
|
||||
|
||||
solver
|
||||
# TODO How to pass multiple solver for one analysis in one doc
|
||||
if solver is None:
|
||||
pass # no solver is added
|
||||
elif solver is 'calculix':
|
||||
solver_object = analysis.addObject(ObjectsFem.makeSolverCalculix(doc, 'SolverCalculiX'))[0]
|
||||
solver_object.AnalysisType = 'static'
|
||||
solver_object.GeometricalNonlinearity = 'linear'
|
||||
solver_object.ThermoMechSteadyState = False
|
||||
solver_object.MatrixSolverType = 'default'
|
||||
solver_object.IterationsControlParameterTimeUse = False
|
||||
elif solver is 'ccxtools':
|
||||
solver_object = analysis.addObject(ObjectsFem.makeSolverCalculixCcxTools(doc, 'CalculiXccxTools'))[0]
|
||||
solver_object.AnalysisType = 'static'
|
||||
solver_object.GeometricalNonlinearity = 'linear'
|
||||
solver_object.ThermoMechSteadyState = False
|
||||
solver_object.MatrixSolverType = 'default'
|
||||
solver_object.IterationsControlParameterTimeUse = False
|
||||
solver_object.WorkingDir = u''
|
||||
elif solver is 'elmer':
|
||||
analysis.addObject(ObjectsFem.makeSolverElmer(doc, 'SolverElmer'))
|
||||
elif solver is 'z88':
|
||||
analysis.addObject(ObjectsFem.makeSolverZ88(doc, 'SolverZ88'))
|
||||
|
||||
# material
|
||||
material_object = analysis.addObject(ObjectsFem.makeMaterialSolid(doc, 'FemMaterial'))[0]
|
||||
mat = material_object.Material
|
||||
mat['Name'] = "CalculiX-Steel"
|
||||
mat['YoungsModulus'] = "210000 MPa"
|
||||
mat['PoissonRatio'] = "0.30"
|
||||
mat['Density'] = "7900 kg/m^3"
|
||||
mat['ThermalExpansionCoefficient'] = "0.012 mm/m/K"
|
||||
material_object.Material = mat
|
||||
|
||||
# fixed_constraint
|
||||
fixed_constraint = analysis.addObject(ObjectsFem.makeConstraintFixed(doc, name="ConstraintFixed"))[0]
|
||||
fixed_constraint.References = [(doc.Box, "Face1")]
|
||||
|
||||
# mesh
|
||||
from femexamples.mesh_canticcx_tetra10 import create_nodes, create_elements
|
||||
fem_mesh = Fem.FemMesh()
|
||||
control = create_nodes(fem_mesh)
|
||||
if not control:
|
||||
print('ERROR on creating nodes')
|
||||
control = create_elements(fem_mesh)
|
||||
if not control:
|
||||
print('ERROR on creating elements')
|
||||
femmesh_obj = analysis.addObject(doc.addObject('Fem::FemMeshObject', mesh_name))[0]
|
||||
femmesh_obj.FemMesh = fem_mesh
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantileverfaceload(doc=None, solver='ccxtools'):
|
||||
# setup CalculiX cantilever, apply 9 MN on surface of front end face
|
||||
|
||||
doc = setup_cantileverbase(doc, solver)
|
||||
|
||||
# force_constraint
|
||||
force_constraint = doc.Analysis.addObject(ObjectsFem.makeConstraintForce(doc, name="ConstraintForce"))[0]
|
||||
force_constraint.References = [(doc.Box, "Face2")]
|
||||
force_constraint.Force = 9000000.0
|
||||
force_constraint.Direction = (doc.Box, ["Edge5"])
|
||||
force_constraint.Reversed = True
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantilevernodeload(doc=None, solver='ccxtools'):
|
||||
# setup CalculiX cantilever, apply 9 MN on the 4 nodes of the front end face
|
||||
|
||||
doc = setup_cantileverbase(doc, solver)
|
||||
|
||||
# force_constraint
|
||||
force_constraint = doc.Analysis.addObject(ObjectsFem.makeConstraintForce(doc, name="ConstraintForce"))[0]
|
||||
force_constraint.References = [(doc.Box, "Vertex5"), (doc.Box, "Vertex6"), (doc.Box, "Vertex7"), (doc.Box, "Vertex8")] # should be possible in one tuple too
|
||||
force_constraint.Force = 9000000.0
|
||||
force_constraint.Direction = (doc.Box, ["Edge5"])
|
||||
force_constraint.Reversed = True
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
|
||||
|
||||
def setup_cantileverprescribeddisplacement(doc=None, solver='ccxtools'):
|
||||
# setup CalculiX cantilever, apply a prescribed displacement of 250 mm in -z on the front end face
|
||||
|
||||
doc = setup_cantileverbase(doc, solver)
|
||||
|
||||
# displacement_constraint
|
||||
displacement_constraint = doc.Analysis.addObject(ObjectsFem.makeConstraintDisplacement(doc, name="ConstraintDisplacmentPrescribed"))[0]
|
||||
displacement_constraint.References = [(doc.Box, "Face2")]
|
||||
displacement_constraint.zFix = False
|
||||
displacement_constraint.zFree = False
|
||||
displacement_constraint.zDisplacement = -250.0
|
||||
|
||||
doc.recompute()
|
||||
return doc
|
||||
|
||||
|
||||
'''
|
||||
from femexamples import ccx_cantilever_std as canti
|
||||
|
||||
canti.setup_cantileverbase()
|
||||
canti.setup_cantileverfaceload()
|
||||
canti.setup_cantilevernodeload()
|
||||
canti.setup_cantileverprescribeddisplacement()
|
||||
|
||||
'''
|
||||
135
src/Mod/Fem/femexamples/manager.py
Normal file
135
src/Mod/Fem/femexamples/manager.py
Normal file
@@ -0,0 +1,135 @@
|
||||
# ***************************************************************************
|
||||
# * Copyright (c) 2019 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. *
|
||||
# * *
|
||||
# * FreeCAD 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 FreeCAD; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
|
||||
import FreeCAD
|
||||
|
||||
|
||||
def run_analysis(doc, base_name, filepath=''):
|
||||
|
||||
from os.path import join, exists
|
||||
from os import makedirs
|
||||
from tempfile import gettempdir as gettmp
|
||||
|
||||
# recompute
|
||||
doc.recompute()
|
||||
|
||||
# print(doc.Objects)
|
||||
# print([obj.Name for obj in doc.Objects])
|
||||
|
||||
# filepath
|
||||
if filepath is '':
|
||||
filepath = join(gettmp(), 'FEM_examples')
|
||||
if not exists(filepath):
|
||||
makedirs(filepath)
|
||||
|
||||
# find solver
|
||||
# ATM we only support one solver, search for a frame work solver and run it
|
||||
for m in doc.Analysis.Group:
|
||||
from femtools.femutils import is_derived_from
|
||||
if is_derived_from(m, "Fem::FemSolverObjectPython") and m.Proxy.Type is not 'Fem::FemSolverCalculixCcxTools':
|
||||
solver = m
|
||||
break
|
||||
|
||||
# we need a file name for the besides dir to work
|
||||
save_fc_file = join(filepath, (base_name + '.FCStd'))
|
||||
FreeCAD.Console.PrintMessage('Save FreeCAD file for {} analysis to {}\n.'.format(base_name, save_fc_file))
|
||||
doc.saveAs(save_fc_file)
|
||||
|
||||
# get analysis workig dir
|
||||
from femsolver.run import _getBesideDir as getpath
|
||||
working_dir = getpath(solver)
|
||||
|
||||
# run analysis
|
||||
from femsolver.run import RESULTS
|
||||
machine = solver.Proxy.createMachine(solver, working_dir)
|
||||
machine.target = RESULTS
|
||||
machine.start()
|
||||
machine.join() # wait for the machine to finish.
|
||||
|
||||
# save doc once again with results
|
||||
doc.save()
|
||||
|
||||
|
||||
def run_all():
|
||||
run_ccx_cantileverfaceload()
|
||||
run_ccx_cantilevernodeload()
|
||||
run_ccx_cantileverprescribeddisplacement()
|
||||
|
||||
|
||||
def run_ccx_cantileverfaceload(solver=None, base_name=None):
|
||||
|
||||
from femexamples.ccx_cantilever_std import setup_cantileverfaceload as setup
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'CantilverFaceLoad'
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
def run_ccx_cantilevernodeload(solver=None, base_name=None):
|
||||
|
||||
from femexamples.ccx_cantilever_std import setup_cantilevernodeload as setup
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'CantileverNodeLoad'
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
def run_ccx_cantileverprescribeddisplacement(solver=None, base_name=None):
|
||||
|
||||
from femexamples.ccx_cantilever_std import setup_cantileverprescribeddisplacement as setup
|
||||
doc = setup()
|
||||
|
||||
if base_name is None:
|
||||
base_name = 'CantileverPrescribedDisplacement'
|
||||
if solver is not None:
|
||||
base_name += ('_' + solver)
|
||||
run_analysis(doc, base_name)
|
||||
|
||||
return doc
|
||||
|
||||
|
||||
'''
|
||||
from femexamples.manager import *
|
||||
|
||||
run_all()
|
||||
|
||||
doc = run_ccx_cantileverfaceload()
|
||||
doc = run_ccx_cantilevernodeload()
|
||||
doc = run_ccx_cantileverprescribeddisplacement()
|
||||
|
||||
doc = run_ccx_cantilevernodeload('calculix')
|
||||
doc = run_ccx_cantilevernodeload('ccxtools')
|
||||
doc = run_ccx_cantilevernodeload('z88')
|
||||
|
||||
'''
|
||||
315
src/Mod/Fem/femexamples/mesh_canticcx_tetra10.py
Normal file
315
src/Mod/Fem/femexamples/mesh_canticcx_tetra10.py
Normal file
@@ -0,0 +1,315 @@
|
||||
def create_nodes(femmesh):
|
||||
# nodes
|
||||
femmesh.addNode(8000.0, 1000.0, 0.0, 1)
|
||||
femmesh.addNode(8000.0, 1000.0, 1000.0, 2)
|
||||
femmesh.addNode(8000.0, 0.0, 0.0, 3)
|
||||
femmesh.addNode(8000.0, 0.0, 1000.0, 4)
|
||||
femmesh.addNode(0.0, 1000.0, 0.0, 5)
|
||||
femmesh.addNode(0.0, 1000.0, 1000.0, 6)
|
||||
femmesh.addNode(0.0, 0.0, 0.0, 7)
|
||||
femmesh.addNode(0.0, 0.0, 1000.0, 8)
|
||||
femmesh.addNode(728.0, 1000.0, 1000.0, 9)
|
||||
femmesh.addNode(1456.0, 1000.0, 1000.0, 10)
|
||||
femmesh.addNode(2184.0, 1000.0, 1000.0, 11)
|
||||
femmesh.addNode(2912.0, 1000.0, 1000.0, 12)
|
||||
femmesh.addNode(3640.0, 1000.0, 1000.0, 13)
|
||||
femmesh.addNode(4368.0, 1000.0, 1000.0, 14)
|
||||
femmesh.addNode(5096.0, 1000.0, 1000.0, 15)
|
||||
femmesh.addNode(5824.0, 1000.0, 1000.0, 16)
|
||||
femmesh.addNode(6552.0, 1000.0, 1000.0, 17)
|
||||
femmesh.addNode(7280.0, 1000.0, 1000.0, 18)
|
||||
femmesh.addNode(728.0, 0.0, 1000.0, 19)
|
||||
femmesh.addNode(1456.0, 0.0, 1000.0, 20)
|
||||
femmesh.addNode(2184.0, 0.0, 1000.0, 21)
|
||||
femmesh.addNode(2912.0, 0.0, 1000.0, 22)
|
||||
femmesh.addNode(3640.0, 0.0, 1000.0, 23)
|
||||
femmesh.addNode(4368.0, 0.0, 1000.0, 24)
|
||||
femmesh.addNode(5096.0, 0.0, 1000.0, 25)
|
||||
femmesh.addNode(5824.0, 0.0, 1000.0, 26)
|
||||
femmesh.addNode(6552.0, 0.0, 1000.0, 27)
|
||||
femmesh.addNode(7280.0, 0.0, 1000.0, 28)
|
||||
femmesh.addNode(728.0, 1000.0, 0.0, 29)
|
||||
femmesh.addNode(1456.0, 1000.0, 0.0, 30)
|
||||
femmesh.addNode(2184.0, 1000.0, 0.0, 31)
|
||||
femmesh.addNode(2912.0, 1000.0, 0.0, 32)
|
||||
femmesh.addNode(3640.0, 1000.0, 0.0, 33)
|
||||
femmesh.addNode(4368.0, 1000.0, 0.0, 34)
|
||||
femmesh.addNode(5096.0, 1000.0, 0.0, 35)
|
||||
femmesh.addNode(5824.0, 1000.0, 0.0, 36)
|
||||
femmesh.addNode(6552.0, 1000.0, 0.0, 37)
|
||||
femmesh.addNode(7280.0, 1000.0, 0.0, 38)
|
||||
femmesh.addNode(728.0, 0.0, 0.0, 39)
|
||||
femmesh.addNode(1456.0, 0.0, 0.0, 40)
|
||||
femmesh.addNode(2184.0, 0.0, 0.0, 41)
|
||||
femmesh.addNode(2912.0, 0.0, 0.0, 42)
|
||||
femmesh.addNode(3640.0, 0.0, 0.0, 43)
|
||||
femmesh.addNode(4368.0, 0.0, 0.0, 44)
|
||||
femmesh.addNode(5096.0, 0.0, 0.0, 45)
|
||||
femmesh.addNode(5824.0, 0.0, 0.0, 46)
|
||||
femmesh.addNode(6552.0, 0.0, 0.0, 47)
|
||||
femmesh.addNode(7280.0, 0.0, 0.0, 48)
|
||||
femmesh.addNode(8000.0, 500.0, 500.0, 49)
|
||||
femmesh.addNode(0.0, 500.0, 500.0, 50)
|
||||
femmesh.addNode(4731.99999977, 500.000001086, 499.999998599, 51)
|
||||
femmesh.addNode(0.0, 500.0, 1000.0, 52)
|
||||
femmesh.addNode(364.0, 1000.0, 1000.0, 53)
|
||||
femmesh.addNode(1092.0, 1000.0, 1000.0, 54)
|
||||
femmesh.addNode(1820.0, 1000.0, 1000.0, 55)
|
||||
femmesh.addNode(2548.0, 1000.0, 1000.0, 56)
|
||||
femmesh.addNode(3276.0, 1000.0, 1000.0, 57)
|
||||
femmesh.addNode(4004.0, 1000.0, 1000.0, 58)
|
||||
femmesh.addNode(4732.0, 1000.0, 1000.0, 59)
|
||||
femmesh.addNode(5460.0, 1000.0, 1000.0, 60)
|
||||
femmesh.addNode(6188.0, 1000.0, 1000.0, 61)
|
||||
femmesh.addNode(6916.0, 1000.0, 1000.0, 62)
|
||||
femmesh.addNode(7640.0, 1000.0, 1000.0, 63)
|
||||
femmesh.addNode(8000.0, 500.0, 1000.0, 64)
|
||||
femmesh.addNode(364.0, 0.0, 1000.0, 65)
|
||||
femmesh.addNode(1092.0, 0.0, 1000.0, 66)
|
||||
femmesh.addNode(1820.0, 0.0, 1000.0, 67)
|
||||
femmesh.addNode(2548.0, 0.0, 1000.0, 68)
|
||||
femmesh.addNode(3276.0, 0.0, 1000.0, 69)
|
||||
femmesh.addNode(4004.0, 0.0, 1000.0, 70)
|
||||
femmesh.addNode(4732.0, 0.0, 1000.0, 71)
|
||||
femmesh.addNode(5460.0, 0.0, 1000.0, 72)
|
||||
femmesh.addNode(6188.0, 0.0, 1000.0, 73)
|
||||
femmesh.addNode(6916.0, 0.0, 1000.0, 74)
|
||||
femmesh.addNode(7640.0, 0.0, 1000.0, 75)
|
||||
femmesh.addNode(0.0, 500.0, 0.0, 76)
|
||||
femmesh.addNode(364.0, 1000.0, 0.0, 77)
|
||||
femmesh.addNode(1092.0, 1000.0, 0.0, 78)
|
||||
femmesh.addNode(1820.0, 1000.0, 0.0, 79)
|
||||
femmesh.addNode(2548.0, 1000.0, 0.0, 80)
|
||||
femmesh.addNode(3276.0, 1000.0, 0.0, 81)
|
||||
femmesh.addNode(4004.0, 1000.0, 0.0, 82)
|
||||
femmesh.addNode(4732.0, 1000.0, 0.0, 83)
|
||||
femmesh.addNode(5460.0, 1000.0, 0.0, 84)
|
||||
femmesh.addNode(6188.0, 1000.0, 0.0, 85)
|
||||
femmesh.addNode(6916.0, 1000.0, 0.0, 86)
|
||||
femmesh.addNode(7640.0, 1000.0, 0.0, 87)
|
||||
femmesh.addNode(8000.0, 500.0, 0.0, 88)
|
||||
femmesh.addNode(364.0, 0.0, 0.0, 89)
|
||||
femmesh.addNode(1092.0, 0.0, 0.0, 90)
|
||||
femmesh.addNode(1820.0, 0.0, 0.0, 91)
|
||||
femmesh.addNode(2548.0, 0.0, 0.0, 92)
|
||||
femmesh.addNode(3276.0, 0.0, 0.0, 93)
|
||||
femmesh.addNode(4004.0, 0.0, 0.0, 94)
|
||||
femmesh.addNode(4732.0, 0.0, 0.0, 95)
|
||||
femmesh.addNode(5460.0, 0.0, 0.0, 96)
|
||||
femmesh.addNode(6188.0, 0.0, 0.0, 97)
|
||||
femmesh.addNode(6916.0, 0.0, 0.0, 98)
|
||||
femmesh.addNode(7640.0, 0.0, 0.0, 99)
|
||||
femmesh.addNode(8000.0, 1000.0, 500.0, 100)
|
||||
femmesh.addNode(0.0, 1000.0, 500.0, 101)
|
||||
femmesh.addNode(8000.0, 0.0, 500.0, 102)
|
||||
femmesh.addNode(0.0, 0.0, 500.0, 103)
|
||||
femmesh.addNode(364.0, 500.0, 1000.0, 104)
|
||||
femmesh.addNode(728.0, 500.0, 1000.0, 105)
|
||||
femmesh.addNode(1092.0, 500.0, 1000.0, 106)
|
||||
femmesh.addNode(1456.0, 500.0, 1000.0, 107)
|
||||
femmesh.addNode(1820.0, 500.0, 1000.0, 108)
|
||||
femmesh.addNode(2184.0, 500.0, 1000.0, 109)
|
||||
femmesh.addNode(2548.0, 500.0, 1000.0, 110)
|
||||
femmesh.addNode(3276.0, 500.0, 1000.0, 111)
|
||||
femmesh.addNode(3640.0, 500.0, 1000.0, 112)
|
||||
femmesh.addNode(4004.0, 500.0, 1000.0, 113)
|
||||
femmesh.addNode(4368.0, 500.0, 1000.0, 114)
|
||||
femmesh.addNode(4732.0, 500.0, 1000.0, 115)
|
||||
femmesh.addNode(5096.0, 500.0, 1000.0, 116)
|
||||
femmesh.addNode(5460.0, 500.0, 1000.0, 117)
|
||||
femmesh.addNode(5824.0, 500.0, 1000.0, 118)
|
||||
femmesh.addNode(6188.0, 500.0, 1000.0, 119)
|
||||
femmesh.addNode(6552.0, 500.0, 1000.0, 120)
|
||||
femmesh.addNode(6916.0, 500.0, 1000.0, 121)
|
||||
femmesh.addNode(7640.0, 500.0, 1000.0, 122)
|
||||
femmesh.addNode(2912.0, 500.0, 1000.0, 123)
|
||||
femmesh.addNode(7280.0, 500.0, 1000.0, 124)
|
||||
femmesh.addNode(364.0, 500.0, 0.0, 125)
|
||||
femmesh.addNode(1092.0, 500.0, 0.0, 126)
|
||||
femmesh.addNode(728.0, 500.0, 0.0, 127)
|
||||
femmesh.addNode(1820.0, 500.0, 0.0, 128)
|
||||
femmesh.addNode(1456.0, 500.0, 0.0, 129)
|
||||
femmesh.addNode(2548.0, 500.0, 0.0, 130)
|
||||
femmesh.addNode(2184.0, 500.0, 0.0, 131)
|
||||
femmesh.addNode(3640.0, 500.0, 0.0, 132)
|
||||
femmesh.addNode(3276.0, 500.0, 0.0, 133)
|
||||
femmesh.addNode(4004.0, 500.0, 0.0, 134)
|
||||
femmesh.addNode(5096.0, 500.0, 0.0, 135)
|
||||
femmesh.addNode(4732.0, 500.0, 0.0, 136)
|
||||
femmesh.addNode(5460.0, 500.0, 0.0, 137)
|
||||
femmesh.addNode(6188.0, 500.0, 0.0, 138)
|
||||
femmesh.addNode(5824.0, 500.0, 0.0, 139)
|
||||
femmesh.addNode(6916.0, 500.0, 0.0, 140)
|
||||
femmesh.addNode(6552.0, 500.0, 0.0, 141)
|
||||
femmesh.addNode(7640.0, 500.0, 0.0, 142)
|
||||
femmesh.addNode(2912.0, 500.0, 0.0, 143)
|
||||
femmesh.addNode(4368.0, 500.0, 0.0, 144)
|
||||
femmesh.addNode(7280.0, 500.0, 0.0, 145)
|
||||
femmesh.addNode(364.0, 1000.0, 500.0, 146)
|
||||
femmesh.addNode(728.0, 1000.0, 500.0, 147)
|
||||
femmesh.addNode(1092.0, 1000.0, 500.0, 148)
|
||||
femmesh.addNode(1456.0, 1000.0, 500.0, 149)
|
||||
femmesh.addNode(1820.0, 1000.0, 500.0, 150)
|
||||
femmesh.addNode(2184.0, 1000.0, 500.0, 151)
|
||||
femmesh.addNode(2548.0, 1000.0, 500.0, 152)
|
||||
femmesh.addNode(3276.0, 1000.0, 500.0, 153)
|
||||
femmesh.addNode(3640.0, 1000.0, 500.0, 154)
|
||||
femmesh.addNode(4004.0, 1000.0, 500.0, 155)
|
||||
femmesh.addNode(4368.0, 1000.0, 500.0, 156)
|
||||
femmesh.addNode(4732.0, 1000.0, 500.0, 157)
|
||||
femmesh.addNode(5096.0, 1000.0, 500.0, 158)
|
||||
femmesh.addNode(5460.0, 1000.0, 500.0, 159)
|
||||
femmesh.addNode(5824.0, 1000.0, 500.0, 160)
|
||||
femmesh.addNode(6188.0, 1000.0, 500.0, 161)
|
||||
femmesh.addNode(6552.0, 1000.0, 500.0, 162)
|
||||
femmesh.addNode(6916.0, 1000.0, 500.0, 163)
|
||||
femmesh.addNode(7640.0, 1000.0, 500.0, 164)
|
||||
femmesh.addNode(2912.0, 1000.0, 500.0, 165)
|
||||
femmesh.addNode(7280.0, 1000.0, 500.0, 166)
|
||||
femmesh.addNode(364.0, 0.0, 500.0, 167)
|
||||
femmesh.addNode(1092.0, 0.0, 500.0, 168)
|
||||
femmesh.addNode(728.0, 0.0, 500.0, 169)
|
||||
femmesh.addNode(1820.0, 0.0, 500.0, 170)
|
||||
femmesh.addNode(1456.0, 0.0, 500.0, 171)
|
||||
femmesh.addNode(2548.0, 0.0, 500.0, 172)
|
||||
femmesh.addNode(2184.0, 0.0, 500.0, 173)
|
||||
femmesh.addNode(3640.0, 0.0, 500.0, 174)
|
||||
femmesh.addNode(3276.0, 0.0, 500.0, 175)
|
||||
femmesh.addNode(4004.0, 0.0, 500.0, 176)
|
||||
femmesh.addNode(5096.0, 0.0, 500.0, 177)
|
||||
femmesh.addNode(4732.0, 0.0, 500.0, 178)
|
||||
femmesh.addNode(5460.0, 0.0, 500.0, 179)
|
||||
femmesh.addNode(6188.0, 0.0, 500.0, 180)
|
||||
femmesh.addNode(5824.0, 0.0, 500.0, 181)
|
||||
femmesh.addNode(6916.0, 0.0, 500.0, 182)
|
||||
femmesh.addNode(6552.0, 0.0, 500.0, 183)
|
||||
femmesh.addNode(7640.0, 0.0, 500.0, 184)
|
||||
femmesh.addNode(2912.0, 0.0, 500.0, 185)
|
||||
femmesh.addNode(4368.0, 0.0, 500.0, 186)
|
||||
femmesh.addNode(7280.0, 0.0, 500.0, 187)
|
||||
femmesh.addNode(8000.0, 250.0, 250.0, 188)
|
||||
femmesh.addNode(8000.0, 250.0, 750.0, 189)
|
||||
femmesh.addNode(8000.0, 750.0, 750.0, 190)
|
||||
femmesh.addNode(8000.0, 750.0, 250.0, 191)
|
||||
femmesh.addNode(0.0, 250.0, 750.0, 192)
|
||||
femmesh.addNode(0.0, 250.0, 250.0, 193)
|
||||
femmesh.addNode(0.0, 750.0, 250.0, 194)
|
||||
femmesh.addNode(0.0, 750.0, 750.0, 195)
|
||||
femmesh.addNode(1456.0, 500.0, 500.0, 196)
|
||||
femmesh.addNode(6552.0, 500.0, 500.0, 197)
|
||||
femmesh.addNode(6916.0, 500.0, 500.0, 198)
|
||||
femmesh.addNode(2184.0, 500.0, 500.0, 199)
|
||||
femmesh.addNode(2548.0, 500.0, 500.0, 200)
|
||||
femmesh.addNode(2912.0, 500.0, 500.0, 201)
|
||||
femmesh.addNode(1820.0, 500.0, 500.0, 202)
|
||||
femmesh.addNode(7640.0, 750.0, 250.0, 203)
|
||||
femmesh.addNode(7640.0, 750.0, 750.0, 204)
|
||||
femmesh.addNode(7280.0, 500.0, 500.0, 205)
|
||||
femmesh.addNode(7640.0, 250.0, 250.0, 206)
|
||||
femmesh.addNode(5460.0, 500.0, 500.0, 207)
|
||||
femmesh.addNode(5096.0, 500.0, 500.0, 208)
|
||||
femmesh.addNode(6188.0, 500.0, 500.0, 209)
|
||||
femmesh.addNode(5824.0, 500.0, 500.0, 210)
|
||||
femmesh.addNode(364.0, 750.0, 250.0, 211)
|
||||
femmesh.addNode(364.0, 750.0, 750.0, 212)
|
||||
femmesh.addNode(364.0, 250.0, 250.0, 213)
|
||||
femmesh.addNode(1092.0, 500.0, 500.0, 214)
|
||||
femmesh.addNode(728.0, 500.0, 500.0, 215)
|
||||
femmesh.addNode(364.0, 250.0, 750.0, 216)
|
||||
femmesh.addNode(4549.99999989, 250.000000543, 249.9999993, 217)
|
||||
femmesh.addNode(4549.99999989, 750.000000543, 249.9999993, 218)
|
||||
femmesh.addNode(4549.99999989, 750.000000543, 749.9999993, 219)
|
||||
femmesh.addNode(4368.0, 500.0, 500.0, 220)
|
||||
femmesh.addNode(4549.99999989, 250.000000543, 749.9999993, 221)
|
||||
femmesh.addNode(4913.99999989, 250.000000543, 749.9999993, 222)
|
||||
femmesh.addNode(4913.99999989, 750.000000543, 749.9999993, 223)
|
||||
femmesh.addNode(3276.0, 500.0, 500.0, 224)
|
||||
femmesh.addNode(3640.0, 500.0, 500.0, 225)
|
||||
femmesh.addNode(4004.0, 500.0, 500.0, 226)
|
||||
femmesh.addNode(4913.99999989, 750.000000543, 249.9999993, 227)
|
||||
femmesh.addNode(4913.99999989, 250.000000543, 249.9999993, 228)
|
||||
return True
|
||||
|
||||
|
||||
def create_elements(femmesh):
|
||||
# elements
|
||||
femmesh.addVolume([40, 19, 10, 20, 168, 106, 196, 171, 66, 107], 149)
|
||||
femmesh.addVolume([10, 31, 30, 40, 150, 79, 149, 196, 128, 129], 150)
|
||||
femmesh.addVolume([38, 17, 18, 47, 163, 62, 166, 140, 197, 198], 151)
|
||||
femmesh.addVolume([32, 41, 11, 12, 130, 199, 152, 165, 200, 56], 152)
|
||||
femmesh.addVolume([12, 32, 41, 42, 165, 130, 200, 201, 143, 92], 153)
|
||||
femmesh.addVolume([42, 21, 12, 22, 172, 110, 201, 185, 68, 123], 154)
|
||||
femmesh.addVolume([10, 31, 40, 11, 150, 128, 196, 55, 151, 202], 155)
|
||||
femmesh.addVolume([11, 12, 41, 21, 56, 200, 199, 109, 110, 173], 156)
|
||||
femmesh.addVolume([20, 41, 11, 40, 170, 199, 108, 171, 91, 202], 157)
|
||||
femmesh.addVolume([20, 41, 21, 11, 170, 173, 67, 108, 199, 109], 158)
|
||||
femmesh.addVolume([32, 11, 41, 31, 152, 199, 130, 80, 151, 131], 159)
|
||||
femmesh.addVolume([11, 10, 20, 40, 55, 107, 108, 202, 196, 171], 160)
|
||||
femmesh.addVolume([38, 17, 47, 37, 163, 197, 140, 86, 162, 141], 161)
|
||||
femmesh.addVolume([38, 18, 49, 48, 166, 204, 203, 145, 205, 206], 162)
|
||||
femmesh.addVolume([46, 15, 45, 36, 207, 208, 96, 139, 159, 137], 163)
|
||||
femmesh.addVolume([47, 16, 46, 37, 209, 210, 97, 141, 161, 138], 164)
|
||||
femmesh.addVolume([18, 4, 2, 49, 122, 64, 63, 204, 189, 190], 165)
|
||||
femmesh.addVolume([18, 17, 27, 47, 62, 120, 121, 198, 197, 183], 166)
|
||||
femmesh.addVolume([38, 18, 48, 47, 166, 205, 145, 140, 198, 98], 167)
|
||||
femmesh.addVolume([12, 23, 42, 22, 111, 175, 201, 123, 69, 185], 168)
|
||||
femmesh.addVolume([26, 47, 27, 17, 180, 183, 73, 119, 197, 120], 169)
|
||||
femmesh.addVolume([50, 29, 9, 6, 211, 147, 212, 195, 146, 53], 170)
|
||||
femmesh.addVolume([27, 48, 18, 47, 182, 205, 121, 183, 98, 198], 171)
|
||||
femmesh.addVolume([8, 7, 39, 50, 103, 89, 167, 192, 193, 213], 172)
|
||||
femmesh.addVolume([40, 9, 39, 30, 214, 215, 90, 129, 148, 126], 173)
|
||||
femmesh.addVolume([42, 21, 41, 12, 172, 173, 92, 201, 110, 200], 174)
|
||||
femmesh.addVolume([50, 9, 29, 39, 212, 147, 211, 213, 215, 127], 175)
|
||||
femmesh.addVolume([29, 7, 50, 39, 125, 193, 211, 127, 89, 213], 176)
|
||||
femmesh.addVolume([31, 11, 41, 40, 151, 199, 131, 128, 202, 91], 177)
|
||||
femmesh.addVolume([47, 16, 37, 17, 209, 161, 141, 197, 61, 162], 178)
|
||||
femmesh.addVolume([40, 9, 30, 10, 214, 148, 129, 196, 54, 149], 179)
|
||||
femmesh.addVolume([2, 38, 49, 1, 164, 203, 190, 100, 87, 191], 180)
|
||||
femmesh.addVolume([2, 38, 18, 49, 164, 166, 63, 190, 203, 204], 181)
|
||||
femmesh.addVolume([48, 49, 38, 3, 206, 203, 145, 99, 188, 142], 182)
|
||||
femmesh.addVolume([38, 49, 1, 3, 203, 191, 87, 142, 188, 88], 183)
|
||||
femmesh.addVolume([49, 4, 3, 48, 189, 102, 188, 206, 184, 99], 184)
|
||||
femmesh.addVolume([28, 48, 4, 18, 187, 184, 75, 124, 205, 122], 185)
|
||||
femmesh.addVolume([49, 18, 4, 48, 204, 122, 189, 206, 205, 184], 186)
|
||||
femmesh.addVolume([7, 50, 5, 29, 193, 194, 76, 125, 211, 77], 187)
|
||||
femmesh.addVolume([50, 6, 5, 29, 195, 101, 194, 211, 146, 77], 188)
|
||||
femmesh.addVolume([50, 9, 19, 6, 212, 105, 216, 195, 53, 104], 189)
|
||||
femmesh.addVolume([50, 19, 9, 39, 216, 105, 212, 213, 169, 215], 190)
|
||||
femmesh.addVolume([50, 19, 8, 6, 216, 65, 192, 195, 104, 52], 191)
|
||||
femmesh.addVolume([40, 9, 10, 19, 214, 54, 196, 168, 105, 106], 192)
|
||||
femmesh.addVolume([51, 44, 34, 14, 217, 144, 218, 219, 220, 156], 193)
|
||||
femmesh.addVolume([51, 24, 44, 14, 221, 186, 217, 219, 114, 220], 194)
|
||||
femmesh.addVolume([25, 15, 24, 51, 116, 115, 71, 222, 223, 221], 195)
|
||||
femmesh.addVolume([43, 12, 32, 13, 224, 165, 133, 225, 57, 153], 196)
|
||||
femmesh.addVolume([43, 12, 23, 42, 224, 111, 174, 93, 201, 175], 197)
|
||||
femmesh.addVolume([43, 12, 13, 23, 224, 57, 225, 174, 111, 112], 198)
|
||||
femmesh.addVolume([43, 12, 42, 32, 224, 201, 93, 133, 165, 143], 199)
|
||||
femmesh.addVolume([34, 13, 14, 44, 155, 58, 156, 144, 226, 220], 200)
|
||||
femmesh.addVolume([14, 24, 15, 51, 114, 115, 59, 219, 221, 223], 201)
|
||||
femmesh.addVolume([23, 24, 14, 44, 70, 114, 113, 176, 186, 220], 202)
|
||||
femmesh.addVolume([33, 32, 13, 43, 81, 153, 154, 132, 133, 225], 203)
|
||||
femmesh.addVolume([34, 33, 13, 43, 82, 154, 155, 134, 132, 225], 204)
|
||||
femmesh.addVolume([35, 14, 15, 51, 157, 59, 158, 227, 219, 223], 205)
|
||||
femmesh.addVolume([25, 45, 15, 51, 177, 208, 116, 222, 228, 223], 206)
|
||||
femmesh.addVolume([44, 43, 13, 23, 94, 225, 226, 176, 174, 112], 207)
|
||||
femmesh.addVolume([35, 34, 14, 51, 83, 156, 157, 227, 218, 219], 208)
|
||||
femmesh.addVolume([46, 15, 36, 16, 207, 159, 139, 210, 60, 160], 209)
|
||||
femmesh.addVolume([36, 35, 15, 45, 84, 158, 159, 137, 135, 208], 210)
|
||||
femmesh.addVolume([37, 36, 16, 46, 85, 160, 161, 138, 139, 210], 211)
|
||||
femmesh.addVolume([25, 26, 16, 46, 72, 118, 117, 179, 181, 210], 212)
|
||||
femmesh.addVolume([47, 16, 17, 26, 209, 61, 197, 180, 118, 119], 213)
|
||||
femmesh.addVolume([47, 16, 26, 46, 209, 118, 180, 97, 210, 181], 214)
|
||||
femmesh.addVolume([27, 28, 18, 48, 74, 124, 121, 182, 187, 205], 215)
|
||||
femmesh.addVolume([35, 34, 51, 45, 83, 218, 227, 135, 136, 228], 216)
|
||||
femmesh.addVolume([13, 14, 44, 23, 58, 220, 226, 112, 113, 176], 217)
|
||||
femmesh.addVolume([44, 25, 24, 51, 178, 71, 186, 217, 222, 221], 218)
|
||||
femmesh.addVolume([44, 45, 25, 51, 95, 177, 178, 217, 228, 222], 219)
|
||||
femmesh.addVolume([46, 15, 16, 25, 207, 60, 210, 179, 116, 117], 220)
|
||||
femmesh.addVolume([46, 15, 25, 45, 207, 116, 179, 96, 208, 177], 221)
|
||||
femmesh.addVolume([50, 8, 19, 39, 192, 65, 216, 213, 167, 169], 222)
|
||||
femmesh.addVolume([35, 51, 15, 45, 227, 223, 158, 135, 228, 208], 223)
|
||||
femmesh.addVolume([34, 44, 43, 13, 144, 94, 134, 155, 226, 225], 224)
|
||||
femmesh.addVolume([51, 44, 45, 34, 217, 95, 228, 218, 144, 136], 225)
|
||||
femmesh.addVolume([9, 29, 39, 30, 147, 127, 215, 148, 78, 126], 226)
|
||||
femmesh.addVolume([40, 9, 19, 39, 214, 105, 168, 90, 215, 169], 227)
|
||||
return True
|
||||
Reference in New Issue
Block a user