目 录

  • Blog Links
  • 一、前言
  • 二、Tcl 命令
    • 2.1 帮助文档
    • 2.2 命令窗口
    • 2.3 运行脚本
    • 2.4 基本语法
  • 三、模型组件
  • 四、几何模型
    • 4.1 几何点/Point
    • 4.2 几何线/Line
      • 4.2.1 创建直线
      • 4.2.2 创建圆及圆弧
      • 4.2.3 创建样条曲线
    • 4.3 几何面/Surface
    • 4.4 几何体/Solid
  • 五、坐标系/向量
    • 5.1 坐标系
    • 5.2 向量
  • 六、有限元模型
    • 6.1 结点
    • 6.2 创建1D网格
    • 6.3 创建2D网格
    • 6.4 创建3D网格
  • 七、编辑
    • 7.1 删除
    • 7.2 阵列
    • 7.3 集合
  • 八、文件
    • 8.1 保存
    • 8.2 输出
      • 8.2.1 Abaqus/inp
      • 8.2.2 ANSYS/cdb
  • 九、尾声
  • 十、参考文献

Blog Links

  • DalNur | 博客总目录

  • HyperMesh 使用指南

  • Python 语言创建 HyerMesh Tcl 命令

  • Python 语言创建 ANSYS APDL 命令流

  • Python 语言创建 Abaqus inp 文件

  • Python 语言创建 SAP2000 s2k 文件

  • ANSYS 参数化建模 实用教程

  • Abaqus 二次开发/建模 教程

  • nCodeDL 疲劳分析 实用教程

  • Python 二次开发 SAP2000 教程

  • Python 二次开发 AutoCAD 教程

  • Python 二次开发 Office 教程

Python   Tool Command Language

一、前言

  Tcl 是一种脚本语言,由 John Ousterhout 创建, 最早称为工具命令语言(Tool Command Language),Tcl 语言功能强大,容易学习。Tcl 经常被用于快速原型开发、脚本编程、GUI 和 测试等方面。

  Tk 为 Tcl 的扩展包,用于定制用户图形界面(GUI),包括常用的窗体控件的定义及其常用的方法。在二次开发时,用户可基于 Tk 提供的基本控件设计面板;基于控件的事件函数调用相关的宏或脚本。

  Tcl 进行功能实现类的二次开发,Tk 用于图形用户界面的二次开发。HyperMesh 支持 Tcl 和 Tk 语言对其进行二次开发。

  在 HyperMesh 程序启动时,将在当前工作目录内创建 command1.tcl 文件,用户在 HyperMesh 中进行的每一步操作所对应的 Tcl 命令都将存储在这个文件中。.tcl 为 ASCII 文件,采用任何一款文本编辑软件均可打开 command1.tcl 文件,并对其进行编辑。此外,还可以通过录制宏的方式,获得实现某一功能的 Tcl 命令。

  为了避免意向不到的错误,在启动 HyperMesh 程序前,可先将当前工作目录内已存在的 command1.tcl 文件删除。

  用户根据自身需求,可将记录在 command.tcl 文件中的这些命令修改为新的命令脚本,从而实现自动化建模。

.tcl文件的位置及其内容

二、Tcl 命令

  在 HyperMesh 系统中,主要有四类命令和函数,它们的名称和功能如下表所示。通常情况下,我们经常用到的是 Tcl Modify Commands ,根据这些命令可创建用于各种数值模拟的模型。

序号 名称 功能
1 Tcl GUI Commands Commands that operate on the HyperMesh GUI widgets.
2 Tcl Modify Commands Commands that modify the HyperMesh database.
3 Tcl Query Commands Commands that query the HyperMesh database.
4 Utility Menu Commands Documentation on the commands that control the Utility menu.

  The functionality of the HyperMesh Tcl Modify Command commands are available through Tcl. Additionally, commands that allow you to extract information from the HyperWorks Desktop database, such as entity ID numbers on a mark, a list of assemblies, component names, elements per component, nodes per element, node values, and so forth. These are known as HyperMesh Tcl Query Command commands. They are used to query information from the database or template system.

2.1 帮助文档

  各种 Tcl Modify Commands 命令的定义和详细说明详见官方帮助文档:HyperWorks Desktop Reference Guides >> HyperMesh >> Scripts >> Commands and Functions >> Tcl Modify Commands ,其查找方式如下图所示。

Tcl Modify Commands

2.2 命令窗口

  单击 HyperMesh 程序中菜单栏内的 View,勾选 Command Window,即可显示命令行窗口,在该窗口中可逐行输入 Tcl 命令,按回车后,该命令将被执行。采用此方式,可对二次开发 Tcl 代码进行调试。

  例如,在命令行中输入 *setbackgroundcolors 255 255 255 255 255 255 ,回车后,视口的背景颜色将被修改为白色,如下图所示。

2.3 运行脚本

  在 HyperMesh 中,运行 Tcl/Tk 脚本的方式一共有 6 种,如下图所示。

Tcl脚本的运行

2.4 基本语法

  Tcl variables are always strings even when they contain numeric values. Tcl 变量按如下方式进行赋值,即将变量 var1 的值定义为 “one plus one equals”。常见的 Tcl基本语法如下所示。

set var1 "one plus one equals"  # 变量赋值
puts $var1  # 打印变量var1的值set pi [expr 2*asin(1.0)]  # 中括号执行计算功能

  更多关于 Tcl 语言的介绍见帮助文档:HyperWorks Desktop Reference Guides >> HyperMesh >> Scripts >> Introduction >> Tcl/Tk >> Tcl 。

三、模型组件

  HyperMesh 采用 Component 对模型进行组织管理,Component 内可以包含几何和网格,这类似于 Abaqus 中的 Part 以及 ANSYS 中的 Component。在 HyperMesh 中,创建组件/部件的命令格式如下:

*startnotehistorystate {Created Component prtname}
*collectorcreateonly components prtname
*endnotehistorystate {Created Component prtname}

  其中,可修改的参数为 prtname,表示所创建的组件/部件名称,新组件创建完成后,它自动被设置为当前活跃的组件,即接下来创建的各种几何和网格,都将存储在该组件内。例如,创建名称为 “Part1” 的组件的 Tcl 命令如下所示:

*startnotehistorystate {Created Component "Part1"}
*collectorcreateonly components "Part1"
*endnotehistorystate {Created Component "Part1"}

创建新组件

  若 HyperMesh 中存在着多个组件,有时需要在各组件间进行切换,则激活已存在的组件的命令格式为:

*currentcollector components prtname

  其中,可修改的参数为 prtname,表示将被激活的组件/部件名称。

  综上,我们可以采用 Python 语言进一步简化上述 Tcl 命令的创建,在此我们定义两个 Python 函数:create_component 和 activate_component ,分别用于自动生成实现新建组件和激活组件功能的 Tcl 命令,代码如下:

def create_component(prtname):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:创建新组件# 参数:prtname为将被创建的新组件的名称# 返回:Tcl命令列表s1 = '*startnotehistorystate {Created Component "%s"}' % prtnames2 = '*collectorcreateonly components "%s"' % prtnames3 = '*endnotehistorystate {Created Component "%s"}' % prtnametmcs = [s1, s2, s3]return tmcs
# 示例
# prtname = "Part-1"
# tmcs = create_component(prtname)
# print(tmcs)
def activate_component(prtname):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:创建新组件# 参数:prtname为将被创建的新组件的名称# 返回:Tcl命令列表s1 = '*currentcollector components "%s"' % prtnametmcs = [s1, ]return tmcs
# 示例
# prtname = "Part-1"
# tmcs = activate_component(prtname)
# print(tmcs)

  不要问为啥采用这么迂回的方式创建 Tcl 命令,因为哥想用 Python 架构起i所有计算程序。

四、几何模型

4.1 几何点/Point

  几何点通常用于创建高维图元,如由两点可确定一条直线,由三点可确定一圆弧等等。在 HyperMesh 中,创建几何点的命令格式如下:

*createpoint x y z csys

  其中,*createpoint 为创建几何点的关键字,类似于 Abaqus inp 文件中的关键字,其后的数据以一个空格作为分隔符号,x、y 和 z 分别为结点的坐标,csys 为所采用的坐标系编号,默认情况下,csys 为 0 ,即表示全局直角坐标系。那么,在全局直角坐标系中创建几何点 (11.6, 20.7, 30.98) 的 Tcl 命令为:

*createpoint 11.6 20.7 30.98 0

  在命令窗口中,输入以上命令,回车后,将在窗口中显示创建的几何点 (11.6, 20.7, 30.98) ,命令输入后的返回值为 1 ,表示命令顺利执行,没有 Bug ,如下图所示。

  基于此,我们可以编写生成自动创建 HyperMesh 几何点 Tcl 命令的 Python 函数 create_point_by_coords,如下:

def create_point_by_coords(prtname, x, y, z, csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:生成根据几何点坐标创建几何点的Tcl命令# 参数:x、y和z为结点坐标;csys为坐标系编号# 参数:csys的默认值为0,表示全局直角坐标系# 参数:prtname为几何点所在的组件/部件名称# 返回:根据坐标创建几何点的Tcl命令列表,对应变量为tmcs(Tcl Modify Commands)s1 = '*currentcollector components "%s"' % prtnames2 = '*createpoint %s %s %s %s' % (x, y, z, csys)tmcs = [s1, s2]return tmcs

4.2 几何线/Line

4.2.1 创建直线

  在 HyperMesh 中,创建直线的命令格式如下所示。其中,*linecreatestraight 为创建直线的关键字,x1、y1、z1 为直线起点的坐标,x2、y2、z2 为直线终点的坐标,一般采用此方式创建直线时,坐标系为全局直角坐标系。

*linecreatestraight x1 y1 z1 x2 y2 z2

  为了节约篇幅,接下来将不进行每个 Tcl 命令的测试展示,生成 创建直线 Tcl 命令的 Python 函数 create_straight_line 如下所示:

def create_straight_line(prtname, p1=[], p2=[]):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:生成创建直线的Tcl命令# 参数:prtname为直线所在的部件名称# 参数:p1为起点坐标列表,其内数据依次为x1、y1和z1# 参数:p2为终点坐标列表,其内数据依次为x2、y2和z2# 返回:创建直线的Tcl命令列表x1, y1, z1 = p1x2, y2, z2 = p2s1 = '*currentcollector components "%s"' % prtnames2 = '*linecreatestraight %s %s %s %s %s %s' % (x1, y1, z1, x2, y2, z2)tmcs = [s1, s2]return tmcs
# 示例
# p1 = [0.9,0.8,0.7]
# p2 = [10.8,10.7,11.5]
# prtname = "Part1"
# tmcs = create_straight(prtname, p1, p2)
# print(tmcs)

4.2.2 创建圆及圆弧

  在 HyperMesh 中,由三个结点创建圆和圆弧的关键字均为 *createcirclefrompoints ,它的命令格式如下:

*createcirclefrompoints list_id circle_flag

  其中,list_id 为结点对象列表的 ID 号,若创建圆弧,则结点列表中,结点的顺序至关重要。cirlce_flag 为创建的类型,若其值取为 1 ,则将创建圆,若其值取为 0 ,则将创建圆弧。在此,我们不区分创建线的点是几何点还是结点,均采用临时结点的方式创建相关的几何线,且在几何线创建完成后,临时结点将被清楚。

  基于此,我们可以编写l两个 Python 函数:create_circle_from_three_points 和 create_arc_from_three_points ,用于自动生成相关的 Tcl 命令,如下所示。

def create_circle_from_three_points(prtname, p1=[], p2=[], p3=[], csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由三点创建圆/Tcl命令# 参数:prtname为圆所在的部件名称# 参数:p1为圆上第1个点坐标列表,其内数据依次为x1、y1和z1# 参数:p2为圆上第2个点坐标列表,其内数据依次为x2、y2和z2# 参数:p3为圆上第3个点坐标列表,其内数据依次为x3、y3和z3# 参数:csys为点所在的坐标系编号,默认为0,即采用全局直角坐标系# 返回:创建圆的Tcl命令列表x1, y1, z1 = p1x2, y2, z2 = p2x3, y3, z3 = p3s1 = '*nodecleartempmark'  # 删除所有临时结点s2 = '*currentcollector components "%s"' % prtname  # 激活部件s3 = 'set var [hm_count nodes "all" 0 0]'  # 当前的结点总数量vars4 = 'set var1 [expr ($var+1)]'  # 新建结点编号s5 = 'set var2 [expr ($var+2)]'  # 新建结点编号s6 = 'set var3 [expr ($var+3)]'  # 新建结点编号s7 = '*createnode %s %s %s %s' % (x1, y1, z1, csys)  # 创建第1个临时结点s8 = '*createnode %s %s %s %s' % (x2, y2, z2, csys)  # 创建第2个临时结点s9 = '*createnode %s %s %s %s' % (x3, y3, z3, csys)  # 创建第3个临时结点# s6 = '*createmark nodes 1 "all"'  # 创造选择集# s7 = '*renumbersolverid nodes 1 1 1 0 0 0 0 0'  # 压缩全部结点编号s10 = '*createlist nodes 1 $var1 $var2 $var3'  # 创建结点对象列表/ID为1/组成结点编号为1、2和3s11 = '*createcirclefrompoints 1 1'  # 创建圆s12 = '*nodecleartempmark'  # 删除所有临时结点tmcs = [s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, ]return tmcs
# 示例
# p1 = [10.7, 0, 0]
# p2 = [0, 10.7, 0]
# p3 = [-10.7, 0, 0]
# prtname = "Part1"
# tmcs = create_circle_from_three_nodes(prtname, p1, p2, p3)
# print(tmcs)
def create_arc_from_three_points(prtname, p1=[], p2=[], p3=[], csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由三点创建圆弧/Tcl命令# 参数:prtname为圆弧所在的部件名称# 参数:p1为圆弧上的起点坐标列表,其内数据依次为x1、y1和z1# 参数:p2为圆弧上的任意一点坐标列表,其内数据依次为x2、y2和z2# 参数:p3为圆弧上的终点坐标列表,其内数据依次为x3、y3和z3# 参数:csys为点所在的坐标系编号,默认为0,即采用全局直角坐标系# 返回:创建圆弧的Tcl命令列表x1, y1, z1 = p1x2, y2, z2 = p2x3, y3, z3 = p3s1 = '*nodecleartempmark'  # 删除所有临时结点s2 = '*currentcollector components "%s"' % prtname  # 激活部件s3 = 'set var [hm_count nodes "all" 0 0]'  # 当前的结点总数量vars4 = 'set var1 [expr ($var+1)]'  # 新建结点编号s5 = 'set var2 [expr ($var+2)]'  # 新建结点编号s6 = 'set var3 [expr ($var+3)]'  # 新建结点编号s7 = '*createnode %s %s %s %s' % (x1, y1, z1, csys)  # 创建第1个临时结点s8 = '*createnode %s %s %s %s' % (x2, y2, z2, csys)  # 创建第2个临时结点s9 = '*createnode %s %s %s %s' % (x3, y3, z3, csys)  # 创建第3个临时结点# s6 = '*createmark nodes 1 "all"'  # 创造选择集# s7 = '*renumbersolverid nodes 1 1 1 0 0 0 0 0'  # 压缩全部结点编号s10 = '*createlist nodes 1 $var1 $var2 $var3'  # 创建结点对象列表/ID为1/组成结点编号为1、2和3s11 = '*createcirclefrompoints 1 0'  # 创建圆弧s12 = '*nodecleartempmark'  # 删除所有临时结点tmcs = [s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, ]return tmcs
# 示例
# p1 = [10.7, 0, 10]
# p2 = [0, 10.7, 10]
# p3 = [-10.7, 0, 10]
# prtname = "Part1"
# tmcs = create_arc_from_three_nodes(prtname, p1, p2, p3)
# print(tmcs)

4.2.3 创建样条曲线

  在 HyperMesh 中,创建样条曲线的关键字为 *linecreatespline ,它的命令格式如下:

*linecreatespline point_type point_list scond econd svector evector

  其中,point_type 为点的类型,可以为 nodes 或 points ,若为 nodes ,则由结点创建样条曲线,若为 points,则由几何点创建样条曲线。point_list 为点列表的 ID,scond 和 econd 为曲线在始端、终端处的边界条件,可以为自由、闭合、指定切向等等。svector 和 evector 样条曲线在始端和终端处切线的方向向量。那么,由此可编写生成创建样条曲线 Tcl 命令流的 Python 函数 :create_spline_from_points ,如下所示。

def create_spline_from_points(prtname, points=[], csys=0, svector=None, evector=None):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由结点创建样条曲线# 参数:prtname为样条曲线所在的部件名称# 参数:points为各结点的坐标信息列表,各点最好顺序排列;csys为结点所在坐标系编号# 参数:svector为样条曲线起点处切线的方向向量,若为None,则样条曲线在起始端为自由状态# 参数:evector为样条曲线终点处切线的方向向量,若为None,则样条曲线在终止端为自由状态# 返回:创建样条曲线的Tcl命令列表num = len(points)  # 结点对象的个数s1 = '*nodecleartempmark'  # 删除所有临时结点s2 = '*currentcollector components "%s"' % prtname  # 激活部件s3 = 'set var [hm_count nodes "all" 0 0]'  # 当前的结点总数量vartmcs = [s1, s2, s3, ]  # tcl命令流列表labels = ""for i in range(num):tmps1 = 'set var%s [expr ($var+%s)]' % ((i + 1), (i + 1))  # 新建结点编号tmcs.append(tmps1)labels = labels + "$var%s " % (i + 1)for i in range(num):xi, yi, zi = points[i]tmps2 = '*createnode %s %s %s %s' % (xi, yi, zi, csys)  # 创建临时结点tmcs.append(tmps2)labels = labels[:-1]s4 = "*createlist nodes 1 %s" % labelstmcs.append(s4)scond, econd = 0, 0xi, yi, zi = 1, 0, 0xj, yj, zj = 1, 0, 0if svector is not None:scond = 3xi, yi, zi = svectorif evector is not None:econd = 3xj, yj, zj = evectors5 = '*createvector 1 %s %s %s' % (xi, yi, zi)  # 创建向量/始端切线的方向向量s6 = '*createvector 2 %s %s %s' % (xj, yj, zj)  # 创建向量/终端切线的方向向量s7 = '*linecreatespline nodes 1 %s %s 1 2' % (scond, econd)s8 = '*nodecleartempmark'  # 删除所有临时结点tmcs = tmcs + [s5, s6, s7, s8]return tmcs
# 示例
# xs = [-10, -8.66, 0, 8.66, 10]
# ys = [0, 5, 10, 5, 0]
# points = []
# for i in range(len(xs)):
#     x, y, z = xs[i], ys[i], 0
#     points.append([x, y, z])
# prtname = "Part1"
# csys = 0
# svector = [0, 1, 0]
# evector = [0, -1, 0]
# tmcs = create_spline_from_points(prtname, points, csys, svector, evector)
# print(tmcs)

4.3 几何面/Surface

  在 HyperMesh 中,创建几何面的方法有很多种,比较常用的两个方法是由组成面的点坐标创建几何面和有封闭的线创建几何面,在此,我们仅讨论空间平面的创建,曲面等复杂几何面以二次开发的方式创建不具有实用意义。创建面的 Tcl 命令根据上述方式确定,本处不再赘述。

  由组成平面的点坐标创建空间几何平面和由组成平面的线编号创建空间几何平面的 Python 函数分别为:create_plane_from_points 和 create_plane_from_lines ,代码如下所示。

def create_plane_from_points(prtname, points=[], csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由点坐标创建几何平面# 参数:prtname为几何平面所在的部件名称# 参数:points为各点的坐标信息列表,点坐标必须顺序排列;csys为结点所在坐标系编号# 返回:创建几何面的Tcl命令列表num = len(points)  # 结点对象的个数s1 = '*nodecleartempmark'  # 删除所有临时结点s2 = '*currentcollector components "%s"' % prtname  # 激活部件s3 = 'set var [hm_count lines "all" 0 0]'  # 当前的线的总数量vartmcs = [s1, s2, s3]labels = ""for i in range(num):tmps1 = 'set var%s [expr ($var+%s)]' % ((i + 1), (i + 1))  # 新建线的编号tmcs.append(tmps1)labels = labels + "$var%s " % (i + 1)for i in range(num - 1):x1, y1, z1 = points[i]x2, y2, z2 = points[i + 1]s3 = '*linecreatestraight %s %s %s %s %s %s' % (x1, y1, z1, x2, y2, z2)tmcs.append(s3)x1, y1, z1 = points[-1]x2, y2, z2 = points[0]s4 = '*linecreatestraight %s %s %s %s %s %s' % (x1, y1, z1, x2, y2, z2)s5 = '*surfacemode 4'labels = labels[:-1]s6 = '*createmark lines 1 %s' % labels  # 组成面的线的选择集合s7 = '*createplane 1 1 0 0 0 0 0's8 = '*splinesurface lines 1 1 1 65'tmcs = tmcs + [s4, s5, s6, s7, s8]return tmcs
# 示例
# p1 = [-10.5, 0, 0]
# p2 = [0, 10.5, 0]
# p3 = [10.5, 0, 0]
# points = [p1, p2, p3]
# prtname = "Part1"
# tmcs = create_surface_from_points(prtname, points, csys=0)
# print(tmcs)
def create_plane_from_lines(prtname, lines=["1", "2", "3"]):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由线编号创建几何平面# 参数:prtname为几何平面所在的部件名称# 参数:lines为线的编号列表,组成面的线必须封闭# 返回:创建几何面的Tcl命令列表num = len(lines)  # 几何线对象的个数s1 = '*currentcollector components "%s"' % prtname  # 激活部件labels = ""for i in range(num):linelabel = lines[i]labels = labels + "%s " % linelabels2 = '*surfacemode 4'labels = labels[:-1]s3 = '*createmark lines 1 %s' % labels  # 组成面的线的选择集合s4 = '*createplane 1 1 0 0 0 0 0's5 = '*splinesurface lines 1 1 1 65'tmcs = [s1, s2, s3, s4, s5, ]return tmcs
# 示例
# lines = ["1", "2", "3"]
# prtname = "Part1"
# tmcs = create_plane_from_lines(prtname, lines)
# print(tmcs)

4.4 几何体/Solid

  在 HyperMesh 中,创建几何体的方法有很多种,比较常用主要有:由闭合几何面创建体、由几何面拉伸而成,由几何面旋转而成等等。而多数情况下,空间 3D 体网格可由 2D 面网格经各种操作得到,因此,几何体的创建不十分必要,本处仅列出由闭合几何面的标签创建空间几何体的 Python 函数:create_solid_from_surfaces ,代码如下:

def create_solid_from_surfaces(prtname, surfaces=["1", "2", "3", "4"]):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由面编号创建几何体# 参数:prtname为几何体所在的部件名称# 参数:surfaces为几何面的编号列表,组成几何体的面必须封闭# 返回:创建几何体的Tcl命令列表num = len(surfaces)  # 几何线对象的个数s1 = '*currentcollector components "%s"' % prtname  # 激活部件labels = ""for i in range(num):surflabel = surfaces[i]labels = labels + "%s " % surflabellabels = labels[:-1]s2 = '*createmark surfaces 1 %s' % labels  # 组成面的线的选择集合s3 = '*solids_create_from_surfaces 1 4 -1 2'tmcs = [s1, s2, s3 ]return tmcs
# 示例
# surfaces = ["2", "3", "4", "5", "6"]
# prtname = "Part1"
# tmcs = create_solid_from_surfaces(prtname, surfaces)
# print(tmcs)

五、坐标系/向量

  在创建数值模型时,有时采用柱坐标系、球坐标系或其他局部直角坐标系建模更为方便。

5.1 坐标系

  在 HyperMesh 中,常采用三个点创建局部直角坐标系,通过给定局部坐标系的原点、局部 x 轴正方向上一点,局部 xy 平面上偏 y 轴正向一点,便可唯一创建一局部直角坐标系。创建局部坐标系的 Python 函数为:create_system_from_three_points ,代码如下:

def create_system_from_three_points(origin=[0, 0, 0], xpoint=[1, 0, 0], ypoint=[0, 1, 0], typenum=0, csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:创建局部坐标系# 参数:origin为局部坐标系的原点的坐标值# 参数:xpoint为部坐标系+x轴上的一点的坐标值# 参数:ypoint为部坐标系偏+y轴上的一点的坐标值、注意偏、可以不在+y轴上、但不能在x轴线上# 参数:typenum为创建的局部坐标系的类型号,0表示直角坐标系,1表示柱坐标系,2表示球坐标系# 参数:csys为以上各点所在的坐标系编号# 返回:创建局部坐标系的Tcl命令列表csysType = {0: "Cartesian", 1: "Cylindrical", 2: "Spherical", }s1 = '*createmark systcols 1 "all"'  # 选择全部坐标系集s2 = '*renumbersolverid systcols 1 1 1 0 0 0 0 0'  # 重新编号s3 = 'set var [hm_count systcols "all" 0 0]'  # 当前的坐标系集的总数量vars4 = 'set var1 [expr ($var+1)]'  # 新建坐标系集的ID/var1s5 = 'set var2 [format "%03s" $var1]'  # 格式化var1/长度3、右对齐、0补齐/var2typename = csysType[type]  # 坐标系类型名称/typenums6 = 'set var3 %s' % typename  # 坐标系类型s7 = 'set csysname [format "CSYS-%s-%s" $var2 $var3]'  # 坐标系集的名称s8 = '*startnotehistorystate {Created systemcollector}'s9 = '*collectorcreateonly systcols $csysname "" 31'  # 31为颜色号/新建坐标系集s10 = '*endnotehistorystate {Created systemcollector}'s11 = '*startnotehistorystate {Systcol $csysname made current}'s12 = '*currentcollector systcols $csysname's13 = '*endnotehistorystate {Systcol $csysname made current}'  # 设置为当前s14 = '*nodecleartempmark'  # 删除所有临时结点s15 = 'set var [hm_count nodes "all" 0 0]'  # 当前的结点的总数量vars16 = 'set var1 [expr ($var+1)]'  # 新建点的编号/原点s17 = 'set var2 [expr ($var+2)]'  # 新建点的编号/+x轴点s18 = 'set var3 [expr ($var+3)]'  # 新建点的编号/偏+y轴点x1, y1, z1 = originx2, y2, z2 = xpointx3, y3, z3 = ypoints19 = '*createnode %s %s %s %s' % (x1, y1, z1, csys)  # 创建原点s20 = '*createnode %s %s %s %s' % (x2, y2, z2, csys)  # 创建+x轴点s21 = '*createnode %s %s %s %s' % (x3, y3, z3, csys)  # 创建偏+y轴点s22 = '*systemcreate3nodes %s $var1 "x-axis" $var2 "xy-plane" $var3' % types23 = '*nodecleartempmark'  # 删除所有临时结点tmcs = [s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23]return tmcs
# 示例
# origin = [10, 0, 0]
# xpoint = [-1, 0, 0]
# ypoint = [0, 1, 0]
# type = 0
# csys = 0
# tmcs = create_system_from_three_points(origin, xpoint, ypoint, type, csys)
# print(tmcs)
# origin = [20, 0, 0]
# xpoint = [-1, 0, 0]
# ypoint = [0, 1, 0]
# type = 1
# csys = 0
# tmcs = create_system_from_three_points(origin, xpoint, ypoint, type, csys)
# print(tmcs)

5.2 向量

  在几何空间中,由两点可唯一确定一向量,创建向量的 Python 函数为:create_vector_two_points ,代码如下:

def create_vector_from_two_points(p1=[0, 0, 0], p2=[1, 1, 1], csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:由两点创建向量# 参数:p1、p2分别为向量的起点和终点坐标# 参数:csys为p1、p2点所在的坐标系编号# 返回:创建向量的Tcl命令列表s1 = '*createmark vectorcols 1 "all"'  # 选择全部向量集s2 = '*renumbersolverid vectorcols 1 1 1 0 0 0 0 0'  # 重新编号s3 = 'set var [hm_count vectorcols "all" 0 0]'  # 当前的向量集的总数量vars4 = 'set var1 [expr ($var+1)]'  # 新建向量集集的ID/var1s5 = 'set var2 [format "%03s" $var1]'  # 格式化var1/长度3、右对齐、0补齐/var2s6 = 'set vectname [format "Vector-%s" $var2]'  # 坐标系集的名称s7 = '*startnotehistorystate {Created vectorcollector}'s8 = '*collectorcreateonly vectorcols $vectname "" 55'  # 55为颜色号/新建向量集s9 = '*endnotehistorystate {Created vectorcollector}'s10 = '*nodecleartempmark'  # 删除所有临时结点s11 = 'set var [hm_count nodes "all" 0 0]'  # 当前的结点的总数量vars12 = 'set var1 [expr ($var+1)]'  # 新建点的编号/起点s13 = 'set var2 [expr ($var+2)]'  # 新建点的编号/终点x1, y1, z1 = p1x2, y2, z2 = p2s14 = '*createnode %s %s %s %s' % (x1, y1, z1, csys)  # 创建向量起点s15 = '*createnode %s %s %s %s' % (x2, y2, z2, csys)  # 创建向量终点s16 = '*vectorcreate_twonode $var1 $var2'  # 创建向量s17 = '*nodecleartempmark'  # 删除所有临时结点tmcs = [s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17]return tmcs
# 示例
# p1 = [10, 10, 10]
# p2 = [0, 0, 0]
# tmcs = create_vector_from_two_points(p1, p2, csys=0)
# print(tmcs)

  值得说明的是,上述代码中的第 14 行,55 表示的是显示颜色,在 HyperMesh 中,用 1 ~ 64 中的任意一数字来便捷指代颜色,具体颜色如下图所示。各显示由左至右、由上之下依次与数字 1 至 64 相对应,如 1 对应黑色,2 对应白色,依次类推。

六、有限元模型

6.1 结点

  在 HyperMesh 中用于创建其他图元的点,通常以临时结点的方式创建更为方便,这些临时结点在模型创建完成后,全部删除即可。在此,我们不区分几何点 Point 与网格结点 Node,在 HyperMesh 中,创建临时结点的命令格式如下:

*createnode x y z csys

  其中,*createnode 为创建结点的关键字,类似于 Abaqus inp 文件中的关键字,其后的数据以一个空格作为分隔符号,x、y 和 z 分别为结点的坐标,csys 为所采用的坐标系编号,默认情况下,csys 为 0 ,即表示全局直角坐标系。那么,在全局直角坐标系中创建结点 (10, 20, 30) 的 Tcl 命令为:

*createnode 10 20 30 0

  在命令窗口中,输入以上命令,回车后,将在窗口中显示创建的结点 (10, 20, 30) ,命令输入后的返回值为 1 ,表示命令顺利执行,没有 Bug ,如下图所示。

  基于此,我们可以编写生成自动创建 HyperMesh 结点 Tcl 命令的 Python 函数 create_node_by_coords,如下:

def create_node_by_coords(prtname, x, y, z, csys=0):# 作者:DalNur;邮箱:liyang@alu.hit.edu.cn# 功能:生成根据结点坐标创建结点的Tcl命令# 参数:x、y和z为结点坐标;csys为坐标系编号# 参数:x、y和z为结点坐标;csys为坐标系编号# 参数:csys的默认值为0,表示全局直角坐标系# 返回:根据坐标创建结点的Tcl命令列表,对应变量为tmcs(Tcl Modify Commands)s1 = '*currentcollector components "%s"' % prtnames2 = '*createnode %s %s %s %s' % (x, y, z, csys)tmcs = [s1, s2]return tmcs
# 示例
# x, y, z = 7.8, 5.9, 6.2
# prtname = "Part1"
# tmcs = create_node_by_coords(prtname, x, y, z)
# print(tmcs)

6.2 创建1D网格

6.3 创建2D网格

6.4 创建3D网格

七、编辑

7.1 删除

7.2 阵列

7.3 集合

八、文件

8.1 保存

8.2 输出

8.2.1 Abaqus/inp

8.2.2 ANSYS/cdb

九、尾声

  以上,便是基于 Python 语言自动创建 HyperMesh Tcl 命令流的简要介绍。

  因篇幅有限,某些非关键功能未做详细介绍,如有疑问,欢迎邮件交流。

  Email: liyang@alu.hit.edu.cn 。

  谨以此文为我 HyperMesh 二次开发的学习做一个阶段性地总结。

  与此同时,也希望能够为初学者/有需要的人提供多一点参考。

  本文仅用于个人学习,除此之外,无其他任何用途。

  因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。

  胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的 pāo 子里快乐徜徉。

  本文逻辑清楚,内容详实,引例丰富。

  欢迎大家点赞、评论及转载,转载请注明出处!

  为我打call,不如为我打款!

  最后,祝各位攻城狮们,珍爱生命,保护发际线!

十、参考文献

[01]. hypermesh二次开发 专栏. CAECoder.

[02]. Hyper mesh 二次开发技术交流. 黄林.

[03]. HYPERMESH自动化介绍 - ALTAIR. 杨稳.

Python 语言创建 HyerMesh Tcl 命令流相关推荐

  1. Python 语言创建 SAP2000 s2k 文件

    目 录 Blog Links 一.前言 二.s2k文件数据库 2.1 数据库结构 2.2 默认Table的创建 三.属性 3.1 材料属性 3.2 框架截面 3.3 板壳截面 3.4 实体截面 四.对 ...

  2. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  3. 使用python语言创建空列表score_使用NLP创建摘要

    你有没有读过很多的报告,而你只想对每个报告做一个快速的总结摘要?你是否曾经遇到过这样的情况? 摘要已成为21世纪解决数据问题的一种非常有帮助的方法.在本篇文章中,我将向你展示如何使用Python中的自 ...

  4. python代码命令行tab补齐_Python语言交互模式下命令tab补全

    本文主要向大家介绍了Python语言交互模式下命令tab补全,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. python默认就可以进行tab补全命令行,在交互模式下,只要自己写个 ...

  5. python语言中、用来安装第三方库的命令_python安装第三方库的方法

    python安装第三方库的方法 发布时间:2020-09-03 11:22:15 来源:亿速云 阅读:76 作者:小新 小编给大家分享一下python安装第三方库的方法,相信大部分人都还不怎么了解,因 ...

  6. 用Python从零开始创建区块链

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 前言 如果你还没有听说过 3 点钟区块链群,说明你还不是链圈的人:如果你还没有加入 3 点钟区块链群,说明你还不是链圈的 ...

  7. 看完此文再不懂区块链算我输:手把手教你用Python从零开始创建区块链

    导读:如果你还没有听说过 3 点钟区块链群,说明你还不是链圈的人:如果你还没有加入 3 点钟区块链群,说明你还不是链圈的大佬:如果你还没有被 3 点钟区块链群刷屏,说明你还体会不到什么是"币 ...

  8. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  9. Plaxis软件:Python命令流自动建模与应用

    有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法.在使用各大软件进行数值模拟建模的过程中,您是否发现GUI界面中重复性的点击输入工作太 ...

最新文章

  1. CVPR 2019收录论文ID公开,你上榜了吗?
  2. SKIP-NAME-RESOLVE ——错误的使用时机造成用户权限
  3. 保存网络文章以供以后使用Instapaper阅读
  4. SpringHibernate4
  5. jenkins linux 发邮件,jenkins——邮件配置
  6. JAVA 创建学生类
  7. Freeview%20Play是什么
  8. 在线SQL美化格式化工具
  9. Codeforces Gym 100338B Spam Filter 字符串哈希+贝叶斯公式
  10. Ansys Speos | 助力汽车按键开关设计与优化
  11. SRCNN 图像超分辨率重建(tf2)
  12. 台服android 模拟器,公主连结抽卡模拟器
  13. 华为ensp配置vrrp
  14. 在JavaScript中创建SVG矢量图EAN13条码
  15. 手把手简单制作一个 Java 木马程序
  16. 动态内表(纵向变横向)
  17. sklearn模块之朴素贝叶斯:(二)伯努利模型的实现
  18. 英式音标26字母(U-Z)
  19. 完整的连接器设计手册_干货 I 关于PCB设计倒角需要了解的一切
  20. phpstudy -sql服务器2008r2 -中控考勤机 -php 组合查询考勤

热门文章

  1. ROS报错处理--1
  2. rabbitmq基础1——消息中间件概念、Rabbitmq的发展起源和基本组件的作用流程
  3. Vue路由的动态添加和缓存
  4. 数据3D可视化简述!
  5. 怎么跳出两层for循环,if条件满足以后要跳出两层for循环,用“break+标签”
  6. 都 2021 年了还不会连 ES6/ES2015 更新了什么都不知道吧
  7. 串口服务器中文使用文档,MOXA串口服务器中文使用文档
  8. oracle 12.2 迅雷下载,oracle下载-oracle数据库v12.2 最新版下载-6188手游网
  9. python用matplotlib画五角星_基于Matplotlib的Python绘图
  10. S32K144EVB快速入门