1学习笔记学习资料:《Python语言在Abaqus中的应用》20世纪60年代,Ray W. Clough教授在发表的论文《The Finite Element in Plane Stress Analysis》中首次提出有限单元法,此后,有限单元法的理论得到迅速发展,并广泛应用于各种力学问题和非线性问题,成为分析大型复杂工程结构的强有力手段。
Abaqus提供两种接口:1)用户子程序接口(User Subroutine)。
该接口使用Fortran语言进行开发,主要用于自定义本构关系、自定义单元等。
常用的用户子程序包括(V)UMAT、(V)UEL、(V)FRIC、(V)DLOD等。
2)Abaqus脚本接口(Abaqus Scripting Interface)。
该接口是在Python语言的基础上进行的定制开发,它扩充了Python的对象模型和数据类型,使Abaqus脚本接口的功能更加强大。
一般情况下,Abaqus的脚本接口主要用于前处理(例如,快速建模)、后处理(例如,创建和访问输出数据库)、自定义模块(例如,自动后处理模块等)。
Python语言是公认的功能强大的面向对象的编程语言,Abaqus脚本接口在它的基础上又添加了许多数据类型和核心模块,因此功能更加强大。
即便如此,Abaqus脚本接口仍然允许读者编写自己的模块或函数,以扩展其功能。
保留字Python的保留字:Python语言的代码简洁,易于阅读,保留字相对较少;Python语言中不包含分号(;)、begin、end等标记,而是通过使用空格或制表键缩进的方式进行代码分隔。
编写程序时,尽量不要选择保留字作为变量名、函数名等开发工具&运行环境:1)Python Win:【开始】→【程序】→【ActiveState ActivePython 2.6(32-bit)】→【PythonWin Editor】;运行按F5或【File】→【Debug】→【Go】2)Abaqus运行环境:启动Abaqus/CAE,【File】→【Abaqus PDE】※在Abaqus中编写Python源代码,可以与Abaqus/CAE进行实时互动,而且代码修改后的效果能够立即在Abaqus/CAE中得到体现,便于调试和修改。
Abaqus中的PDE也提供了多种编辑、调试程序的功能,包括代码着色、自动缩进、断点设置与管理、堆栈(stack)、观察列表(watch list)等功能。
3)EditPlus编辑器:模板代码:#!/user/bin/python 使Python程序可以在UNIX操作系统下运行# -* - coding:UTF-8 -*- 设置编码集为UTF-8,使得编写Python代码过程中可以输入中文字符编写规则1)合理使用注释:注释语句放在# 后;中文注释必须先添加# -* - coding:UTF-8 -*- 2)合理使用空行:空行的作用在于分隔两段不同功能或不同含义的代码,便于以后代码的维护或重构。
一般情况下,变形程序代码时应该在函数与函数之间、类的方法之间、类和函数入口之间设置空行,用来表示一段新代码的开始。
一般情况下,最好设置两个空行。
※空行是源代码的一部分,但不是语法的部分,不会报错。
在Abaqus脚本结构中使用空行是一定要十分谨慎。
如果存在嵌套循环时使用空行,一定注意空行的缩进格式。
在EditPlus编辑器下可以很清楚地看到缩进层次。
如果不便于查看空行缩进,则可以将空行作为注释行进行处理,即以#开始。
3)语句的分隔:Python中可以用分号分隔语句,物理行间的分号也可以省略,但如果一个物理行中包含多个逻辑行,则需要以分号分隔。
※习惯上一个物理行只写一个逻辑行,如果逻辑行太长需要多个物理行编写,则用反斜杠“\”作为换行符,这种做法叫做“行连接”,如果逻辑行中使用了圆括号( )、方括号[ ]、大括号{ }等暗示行连接,则无需使用反斜线。
4)模块的导入方式:模块(module)指的是某些类或函数的集合,用于实现特定功能。
importfrom … import …5)命名规则:便于大型程序的协作开发变量名:首字母一般是字母或下划线,其他字符可由字母、下划线或数字组成。
定义时不得使用保留字;避免使用i、j、k等单个字母;变量名尽可能地表达该变量的含义、定义变量时尽量避免使用缩写,方便模块名:一般首字符是小写英文字母。
扩展名为.py的文件本身就是一个模块,因此,模块名也是文件名。
类名:通常类名首字母必须大写,其他字母小写;访问类的属性和方法的表示方式为:在对象名后面跟操作符“.”。
对象名:使用小写字母。
函数名:首字母小写,并通过下划线或单词首字母大写的方式增加函数名的可读性。
对于导入模块快中的函数名,则使用模块名作为其前缀。
6)代码缩进:每行代码前输入空格或制表符来表示代码之间的层次(空格数量没有明确要求,1个即可,但习惯上每层间4空格)关系,对于Python而言,代码缩进是一种语法,如果缩进错误会抛出IdentationError异常;Python采用代码缩进和冒号“:”来区分代码块之间的层次关系。
※使用IDE开发工具或EditPlus等文本编辑软件编写代码时,编辑软件能够不起冒号并实现自动缩进,可以大大提高代码的编写效率。
数据类型1)数字类型:整型int:可以使用二进制、八进制、十六进制;Python能根据数值的大小自动将整型数转换为长整型,定义时更加方便。
长整形long:浮点型float:只有双精度浮点型数据复数类型complex:c=1+2j布尔型数据bool:2)字符串类型:使用单引号(’)、双引号(”)、三引号(’’’)来表示字符串类型的数据,其中单引号和双引号的作用相同,使用它们定义字符串时,字符串中所有的空格和制表符都被保留;三引号是Python特有的语法,用来定义多行字符串,三引号内还可以任意使用单、双引号或换行符※三引号是三个单引号※若单引号表示的字符串中还有单引号,如’what’s your name’,系统将无法判断字符串起始点而报错,这时可以用转义字符(\)实现,如’what\’s your name’;也可以使用双引号”what’s your name”。
※常用转义字符及含义※如果字符串末尾处有一个单独的反斜线\,则表示下一行是续行,如:3)元组(tuple):由一系列元素组成,且每个元素可以存储不同类型的数据。
4)列表(list):5)字典(dictionary):变量和常量Python语言中的变量无需声明,赋值操作包含了变量声明的定义。
需要注意的是:Python语言每一次新的赋值操作都将创建一个新的变量,即使创建的变量名相同,但是变量的标识却不相同。
变量在使用之前必须赋值,因为只有为变量赋值后该变量才被创建。
可以在一条语句中同时为多个变量赋值,如a, b, c = 1, 2, 3全局变量:全局变量指的是能够被不同的函数、类或文件所共享的变量。
全局变量可以被文件内部的任何函数访问,也可以被外部文件访问。
一般情况下,在函数块之外定义的变量都可以认为是全局变量。
为使代码更加易读,最好在文件的开始位置定义全局变量。
全局变量用global语句声明。
※很多情况下,两个变量名相同的变量并非表示同一个变量,变量名只是变量的标识符。
相同的变量名出现在代码的不同位置,含义往往是不相同的。
为变量命名时,好的习惯:1)为避免混淆全局变量和局部变量,可以将全局变量放到单独的文件中,便于管理和修改。
2)尽量不要使用全局变量。
全局变量对于不同的模块都可以自由访问,可能导致全局变量的不可预知性,造成错误,且这种错误非常隐蔽,难以发现和改正。
局部变量:局部变量指的是只能在函数或代码块范围内使用的变量。
函数或代码块一旦结束,局部变量的生命周期也将结束。
常量:初始化之后就不能改变的固定值。
例如字符串、数字等。
编写程序时,可以根据需要将所有的常量定义在一个块中,使用时通过导入模块来实现。
运算符和表达式赋值运算符=算数运算符:加+ 减- 乘* 除/幂** x**y将返回x的y次幂取模% 返回除法的余数取整数// 返回商的整数部分※Python不支持自增、自减运算关系运算符:小于< 大于> 小于等于<= 大于等于>= 等于== 不等于!= <> ※关系运算符返回值True 或False逻辑运算符:与and 或or 非not※逻辑运算符返回值True 或False【重】运算符优先级(序号越大表示优先级越高)文件类型1)源代码文件:.py(源代码文件,由python.exe执行).pyw(专门用于开发图形用户界面,由pythonw.exe执行)2)字节代码文件:.pyc(源代码文件经编译后生成,不能在文本编辑器中打开或编辑)3)优化代码文件:.pyo(经过优化的源文件生成,需要使用指令行工具生成)元组(tuple):由一系列元素组成,且每个元素可以存储不同类型的数据。
创建:tuple_name=(元素0 元素1, …)※元组创建时可以为空;只有一个元素时,也应该加逗号,否则系统无法识别是元组还是表达式。
例:zoo=(‘wolf’, ‘elephant’, ‘penguin’)emptytuple=()newzoo=(‘wolf’,)※元组索引从0开始计数,如zoo[0]表示其中第一个元素※print语句后面可以跟具备定制功能的带符号%的元组。
定制功能可以输出特定格式,元组中各元素的顺序必须与定制的顺序一一对应,例:age = 33name='John'print '%s is %d years old' % (name,age)print 'Why is %s playing with that snake?' % name这里如果不加%的话无法输出※如果要在字符串中输出%,则应该是%%访问元组有两种方式:1)索引,从0开始计数,tuple_name[0]2)切片,如tuple_name[1:3](冒号前后的数字可有可无,但是冒号必须存在),表示元组中第2个元素开始,到第4个元素结束(不包含第4个元素)※元组也可以成为新元组的元素:zoo = ('wolf', 'elephant', 'penguin')print 'Number of animals in the zoo is', len(zoo)new_zoo = ('monkey', 'dolphin', zoo)print 'Number of animals in the new zoo is', len(new_zoo)print 'All animals in new zoo are', new_zooprint 'Animals brought from old zoo are', new_zoo[2]print 'Last animal brought from old zoo is', new_zoo[2][2] 输出:Python语言中创建元组的过程称为“打包”;将元组中各个元素分别赋值给多个变量的过程称为“解包”:zoo = ('wolf', 'elephant', 'penguin')a,b,c=zoo列表创建列表:list_name=[元素1, 元素2, …]列表中各个元素包含在方括号中。