Abaqus二次开发

合集下载

ABAQUS-二次开发-边界条件

ABAQUS-二次开发-边界条件

ABAQUS-二次开发-边界条件这个例子模拟三峡库区的水位涨落时,涉水土质滑坡的渗流场分布情况的,是以前做的,蛮好玩的。

如果大家关心些新闻的话,三峡库区有涨水、蓄水、排水、枯水这个一年一次循环的周期,关键问题就在于怎么在数值模拟中考虑这个时间单位这里用的是“天”,任何问题,只要把单位统一化,就可以实现自己所定义的单位系统下的问题,这个大家应该是很熟悉的了。

t=2天t=4天t=8天t=16天t=20天t=26天图2 浸润线位置随涨水时间t变化图数值模拟中实现这个问题,需要对边界条件上加载孔隙水压力的方式动手脚了,首先把时间定下来,然后把每个时间对应的水位高度定下来,然后就是写对应的程序了,关键就在于,需要在各个位置的节点处定义不同的pp_t幅值曲线。

这个问题使用子程序会很方便,也可以不用,只需要定义一堆关键字吧,但是GUI方式是完全没法实现的。

其实软件关键字的背后也就是他的脚本语言,就好像是FLAC里写一句struct cable,这个命令本身只有给你看懂那么一个傻瓜意义意义。

看看关键字怎么定义的:*AMPLITUDE,name=down1,VALUE=ABSOLUTE0,0,30,-300,180,-300*AMPLITUDE,name=down2,VALUE=ABSOLUTE0,10,1,0,30,-290,180,-290*AMPLITUDE,name=down3,VALUE=ABSOLUTE0,20,2,0,30,-280,180,-280*AMPLITUDE,name=down4,VALUE=ABSOLUTE0,30,3,0,30,-270,180,-270*AMPLITUDE,name=down5,VALUE=ABSOLUTE0,40,4,0,30,-260,180,-260*AMPLITUDE,name=down6,VALUE=ABSOLUTE0,50,5,0,30,-250,180,-250*AMPLITUDE,name=down7,VALUE=ABSOLUTE0,60,6,0,30,-240,180,-240*AMPLITUDE,name=down8,VALUE=ABSOLUTE0,70,7,0,30,-230,180,-230*AMPLITUDE,name=down9,VALUE=ABSOLUTE0,80,8,0,30,-220,180,-220*AMPLITUDE,name=down10,VALUE=ABSOLUTE0,90,9,0,30,-210,180,-210*AMPLITUDE,name=down11,VALUE=ABSOLUTE 0,100,10,0,30,-200,180,-200*AMPLITUDE,name=down12,VALUE=ABSOLUTE 0,110,11,0,30,-190,180,-190*AMPLITUDE,name=down13,VALUE=ABSOLUTE 0,120,12,0,30,-180,180,-180*AMPLITUDE,name=down14,VALUE=ABSOLUTE 0,130,13,0,30,-170,180,-170*AMPLITUDE,name=down15,VALUE=ABSOLUTE 0,140,14,0,30,-160,180,-160*AMPLITUDE,name=down16,VALUE=ABSOLUTE 0,150,15,0,30,-150,180,-150*AMPLITUDE,name=down17,VALUE=ABSOLUTE 0,160,16,0,30,-140,180,-140*AMPLITUDE,name=down18,VALUE=ABSOLUTE 0,170,17,0,30,-130,180,-130*AMPLITUDE,name=down19,VALUE=ABSOLUTE 0,180,18,0,30,-120,180,-120*AMPLITUDE,name=down20,VALUE=ABSOLUTE 0,190,19,0,30,-110,180,-110*AMPLITUDE,name=down21,VALUE=ABSOLUTE 0,200,20,0,30,-100,180,-100*AMPLITUDE,name=down22,VALUE=ABSOLUTE 0,210,21,0,30,-90,180,-90*AMPLITUDE,name=down23,VALUE=ABSOLUTE 0,220,22,0,30,-80,180,-80*AMPLITUDE,name=down24,VALUE=ABSOLUTE 0,230,23,0,30,-70,180,-70*AMPLITUDE,name=down25,VALUE=ABSOLUTE0,240,24,0,30,-60,180,-60*AMPLITUDE,name=down26,VALUE=ABSOLUTE0,250,25,0,30,-50,180,-50*AMPLITUDE,name=down27,VALUE=ABSOLUTE0,260,26,0,30,-40,180,-40*AMPLITUDE,name=down28,VALUE=ABSOLUTE0,270,27,0,30,-30,180,-30*AMPLITUDE,name=down29,VALUE=ABSOLUTE0,280,28,0,30,-20,180,-20*AMPLITUDE,name=down30,VALUE=ABSOLUTE0,290,29,0,30,-10,180,-10*AMPLITUDE,name=down31,VALUE=ABSOLUTE0,300,29.9,0,180,0*BOUNDARY,AMPLITUDE=down1Part-1-1.nod30,8,,0*BOUNDARY,AMPLITUDE=down2Part-1-1.nod29,8,,10*BOUNDARY,AMPLITUDE=down3Part-1-1.nod28,8,,20*BOUNDARY,AMPLITUDE=down4*BOUNDARY,AMPLITUDE=down5 Part-1-1.nod26,8,,40*BOUNDARY,AMPLITUDE=down6 Part-1-1.nod25,8,,50*BOUNDARY,AMPLITUDE=down7 Part-1-1.nod24,8,,60*BOUNDARY,AMPLITUDE=down8 Part-1-1.nod23,8,,70*BOUNDARY,AMPLITUDE=down9 Part-1-1.nod22,8,,80*BOUNDARY,AMPLITUDE=down10 Part-1-1.nod21,8,,90 *BOUNDARY,AMPLITUDE=down11 Part-1-1.nod20,8,,100 *BOUNDARY,AMPLITUDE=down12 Part-1-1.nod19,8,,110 *BOUNDARY,AMPLITUDE=down13 Part-1-1.nod18,8,,120 *BOUNDARY,AMPLITUDE=down14 Part-1-1.nod17,8,,130*BOUNDARY,AMPLITUDE=down15 Part-1-1.nod16,8,,140*BOUNDARY,AMPLITUDE=down16 Part-1-1.nod15,8,,150*BOUNDARY,AMPLITUDE=down17 Part-1-1.nod14,8,,160*BOUNDARY,AMPLITUDE=down18 Part-1-1.nod13,8,,170*BOUNDARY,AMPLITUDE=down19 Part-1-1.nod12,8,,180*BOUNDARY,AMPLITUDE=down20 Part-1-1.nod11,8,,190*BOUNDARY,AMPLITUDE=down21 Part-1-1.nod10,8,,200*BOUNDARY,AMPLITUDE=down22 Part-1-1.nod9,8,,210*BOUNDARY,AMPLITUDE=down23*BOUNDARY,AMPLITUDE=down24Part-1-1.nod7,8,,230*BOUNDARY,AMPLITUDE=down25Part-1-1.nod6,8,,240*BOUNDARY,AMPLITUDE=down26Part-1-1.nod5,8,,250*BOUNDARY,AMPLITUDE=down27Part-1-1.nod4,8,,260*BOUNDARY,AMPLITUDE=down28Part-1-1.nod3,8,,270*BOUNDARY,AMPLITUDE=down29Part-1-1.nod2,8,,280*BOUNDARY,AMPLITUDE=down30Part-1-1.nod1,8,,290*BOUNDARY,AMPLITUDE=down31Part-1-1.nod0,8,,300以上是一部分关键字,其实根本问题就是找到对应节点,对各个节点附上与时间相关的边界。

python abaqus 二次开发 循环提交作业

python abaqus 二次开发 循环提交作业

Python是一种高级编程语言,它在科学计算、数据分析、人工智能等领域有着广泛的应用。

Abaqus是一款常用的商业有限元软件,它主要用于工程结构分析和仿真。

二次开发是指在现有软件的基础上,使用编程语言对软件进行扩展和定制化。

1. Python在Abaqus二次开发中的应用在Abaqus软件中,Python被作为主要的二次开发语言来使用。

用户可以利用Python对Abaqus进行自动化操作、批量处理、数据分析等工作。

Python的简洁语法和强大的库支持,使得Abaqus二次开发变得更加高效和灵活。

2. Abaqus中的循环提交作业在Abaqus中,循环提交作业是指对多个任务进行批量处理的操作。

用户需要对多个模型进行相似的分析,可以利用循环提交作业的方式来提高分析效率。

通过编写Python脚本,可以实现循环读取模型文件并提交分析任务的功能。

3. Python在循环提交作业中的应用Python在Abaqus中循环提交作业的过程中发挥着重要的作用。

用户可以利用Python脚本来实现对多个模型的批量处理,节约时间和人力成本。

Python的循环结构和文件操作能力,使得循环提交作业变得更加简单和高效。

4. 二次开发与循环提交作业的结合通过Python的二次开发功能,用户可以定制化地实现循环提交作业的功能。

用户可以编写Python脚本来实现针对特定工程需求的循环提交作业流程,提高软件的灵活性和适用性。

二次开发也可以使得循环提交作业的过程更加智能化和自动化。

5. 实例分析以某工程仿真为例,用户需要对多个零件进行疲劳分析。

通过Python的二次开发,用户可以编写循环提交作业的脚本,实现自动读取不同零件模型并提交分析任务的功能。

这样一来,用户无需手动逐个提交任务,极大地提高了分析工作的效率。

Python在Abaqus的二次开发中能够很好地支持循环提交作业的功能。

通过二次开发,用户可以定制化地实现循环提交作业的流程,提高软件的适用性和工作效率。

Abaqus二次开发疲劳裂缝伸展模拟

Abaqus二次开发疲劳裂缝伸展模拟

Abaqus二次开发疲劳裂缝伸展模拟疲劳是指材料在往复荷载的作用引起的损伤,进而开裂的过程。

由于疲劳计算本构较多以及过程相对复杂,目前的有限元软件中很少有对疲劳的模拟。

而abaq us通过各种子程序可以实现疲劳过程的二次开发。

下面介绍一下两种疲劳的本构以及实现效果。

1、应力路径与疲劳累计的关系AB段是弹性加载阶段,此时不会发生疲劳,达到B点时发生初始损伤,BC段为损伤后继续加载,如果不考虑疲劳,损伤会沿着CC‘进行,即单调损伤。

如果在C点卸载至D点,损伤也不会增加,之后加载至E点后疲劳损伤会累计,之后重复卸载-重加载-卸载过程(卸载不考虑疲劳损伤,加载考虑疲劳损伤),直至疲劳损伤量到1。

加载路径2、疲劳本构(1)Siegmund疲劳方程引自:功率模块引线键合界面的疲劳断裂特性研究(2)Lemaitre疲劳方程引自:含夹杂物轴承钢中裂纹的萌生与扩展3、三点弯曲梁模型及疲劳裂缝伸展结果模型左侧为固定约束,右侧为铰接,模型中下部位设置1mm的长的初始裂缝。

模型采用平面应变单元C3D8R,裂缝采用cohesive单元模拟。

模型顶部施加1. 1MPa的循环荷载,直至试样完全开裂。

分析步采用动力隐式分析步,材料采用弹塑性本构,cohesive单元采用双线性本构。

三点弯曲梁疲劳裂缝伸展4、DCB模型及疲劳裂缝伸展结果模型采用平面应变单元C3D8R,裂缝采用cohesive单元模拟。

模型边界施加1 MPa的循环荷载,直至试样完全开裂。

分析步采用动力隐式分析步,cohesive 单元采用双线性本构。

DCB疲劳裂缝伸展损伤后应力应变曲线疲劳损伤量变化曲线。

浅谈ABAQUS数值模拟中的二次开发问题

浅谈ABAQUS数值模拟中的二次开发问题
延性损伤.doc )
例子:一个基于J2理论的针对大变形弹塑性材料 的本构方程 (例:umat\umat.doc)
1.3.4其他(VMAT、URDFIL…)
功能:比如VMAT是指动力学计算中的用户自定 义材料本构,通过URDFIL可以把计算数据写 入指定文件,USDFLD可以定义场变量(一个 场变量对应一个参数值)为状态变量(位移、 应力)的函数等。
浅谈数值模拟中的 二次开发问题
二次开发问题的分类
1 改变软件初始环境变量
2 创建新的图形用户界面 3 子程序开发
1. 1 改变软件初始环境变量
软件差异较大 不具有通用意义
1.2 创建新的图形用户界面
1.2.1 前后处理小插件(例:1\1.2.1.doc) 1.2.2 创建的方式 ① 软件脚本语言(上例) ② 面向对象语言,如C++,java等 ③ bat文件(例:1\1.2.2.3.doc)
例2 边界条件与时间和坐标相关
(例:dload\例2水位 变化\up-down.avi,dload\例2水位变化\边界条件.doc)
例3 非均布载荷 (例:dload\例3非均布载荷\非均布载荷.doc) 例4 载荷随分析步变化 (例:dload\例4不同step不同载荷\
载荷随分析步变化.doc)
2 结语
数值模拟没有以前理解中的那么局限,好 好研究一下,会发现是自.3.1 定义复杂边界条件
1.3.2 用户自定义单元子程序(UEL)
1.3.3 用户自定义材料子程序(UMAT)
1.3.4 其他(VMAT、URDFIL…)
1.3.1定义复杂边界条件
例1 移动载荷 (例:dload\例1移动载荷\dz.avi,dload\例1移

abaqus python二次开发入门案例

abaqus python二次开发入门案例

Abaqus是一款强大的工程仿真软件,而Python则是一种高效、易学的编程语言。

通过Python 对Abaqus进行二次开发,可以大大提高仿真效率。

以下是Abaqus Python二次开发入门案例的步骤:
安装Abaqus和Python
首先需要安装Abaqus和Python。

Abaqus可以从官网下载安装包,而Python则可以从官网下载安装。

了解Abaqus Python API
在Abaqus中,Python API是用来编写脚本和插件的工具。

通过Python API,可以实现对Abaqus 的二次开发。

需要了解Abaqus Python API的基本知识,包括模块、工具、数据对象等等。

编写Python脚本
根据需求,编写Python脚本来实现特定的功能。

例如,可以编写一个脚本,用来自动生成模型、执行仿真、结果后处理等等。

在编写脚本的过程中,需要使用Abaqus Python API提供的函数和方法。

运行Python脚本
将编写的Python脚本保存,并在Abaqus中运行。

在运行脚本之前,需要确保Abaqus已经启动,并且已经连接到了Python解释器。

调试和优化
在运行脚本的过程中,可能会遇到各种问题,需要进行调试和优化。

需要对Python脚本进行逐步调试,找到问题所在,并且优化代码,提高仿真效率。

以上是Abaqus Python二次开发入门案例的基本步骤。

在开发过程中,需要不断学习和积累经验,才能够更好地利用Python API实现对Abaqus的二次开发。

abaqus二次开发获取点的方法

abaqus二次开发获取点的方法

在Abaqus二次开发中,获取点的方法通常涉及对几何元素或节点的操作。

以下是一些常用的方法:
1. 使用`findAt`方法:`findAt`方法可以根据点的坐标来捕获几何元素或几何元素序列。

如果提供的参数是一个包含三个坐标的元组(tuple),则可以捕获单个几何元素;如果参数是一个包含多个坐标点的元组的元组(tuple of tuples),则可以捕获一个几何元素序列。

2. 访问`Vertex`或`Datum point`的成员属性`pointOn`:顶点(Vertex)和基准点(Datum point)都具有`pointOn`成员属性,可以通过下标直接获取其坐标值。

3. 使用`MeshNode`的`coordinates`成员函数:网格节点(MeshNode)具有`coordinates`成员函数,通过该函数也可以获取节点的坐标值。

4. 利用Abaqus Scripting Interface(ASI)或Python Scripting:Abaqus提供了ASI和Python Scripting功能,这些工具可以帮助用户进行二次开发,实现更复杂的操作和自动化流程。

5. 直接修改inp文件:虽然这种方法需要对inp文件中大量的节点和单元进行操作,但在特殊情况下,如果熟悉inp文件的结构,也可以通过直接修改inp文件来进行二次开发。

6. 后处理二次开发:在Abaqus的后处理阶段,二次开发可以实现大规模数据的提取和个性化的复杂数据处理逻辑。

ABAQUS二次开发-Python脚本运行方式

ABAQUS二次开发-Python脚本运行方式

ABAQUS二次开发—Python编程语言
1.1 ABAQUS软件界面下运行Python脚本 方式2:
点击“File”=>“Run Script…”弹出选择Python脚本文件,点击“OK”后直接运行
ABAQUS二次开发—Python编程语言
1.1 ABAQUS软件界面下运行Python脚本 方式3:
方式2:启动ABAQUS/Viewer界面的同时运行Python脚本 abaqus viewer script=D:\myPython.py abaqus viewer startup=D:\myPython.py
注:方式2中的Python脚本只能进行后处理过程,否则一 个错误将发生
ABAQUS二次开发—Python编程语言
点击“File”=>“Macro Manager…”弹出选择Python宏文件,点击“Run”后运行
ABAQUS二次开ห้องสมุดไป่ตู้—Python编程语言
1.1 ABAQUS软件界面下运行Python脚本
方式4:
2
1
4
3
1 打开Python脚本文件 2 选择要执行的脚本 3 选择执行脚本的方式 4 运行脚本文件
1.2 以命令行形式运行ABAQUS/Python脚本
方式3:不启动ABAQUS/CAE 界面的同时运行Python脚本 abaqus cae noGUI=D:\myPython.py
方式4:不启动ABAQUS/Viewer界面的同时运行Python脚本 abaqus viewer noGUI=D:\myPython.py
注:ABAQUS软件界面不会出现,脚本文件中的任何打印 输出将被忽略。适用于生成cae或直接提交计算 的脚本文件。

Abaqus二次开发介绍

Abaqus二次开发介绍

Abaqus⼆次开发介绍ABAQUS提供了两种⼆次开发的接⼝,⼀是⼦程序接⼝(user subroutine),⼀种是脚本接⼝(Abaqus scripting interface),Abaqus的脚本语⾔是在python语⾔的基础上进⾏的定制开发,它扩充了python的对象模型和数据类型,使Abaqus脚本接⼝的功能更加强⼤,⼀般来说,Abaqus脚本接⼝可以实现以下功能①创建、修改ABAQUS模型中的属性,如部件、材料、荷载和分析步等②创建、修改和提交分析作业③读取和写⼊ABAQUS输出数据⽂件④查看分析结果Abaqus中python脚本的通信关系如下图所⽰从图中可以看出,ABAQUS可以通过三种⽅式运⾏脚本⽂件(1)GUI。

Abaqus在采⽤GUI进⾏建模的同时,会⽣成⼀个rpy格式的脚本⽂件。

当然,也可以通过macro管理器录制⼀段宏命令(2)命令⾏。

在abaqus CAE界⾯底端的命令⾏键⼊python命令,点击回车后即可⾃动运⾏。

(3)编辑脚本⽂件。

预先编辑好脚本⽂件,在start session 对话框或者file按钮⾥选择run script运⾏脚本。

也可以在ABAQUS command窗⼝中键⼊命令运⾏脚本Abaqus cae script=myscript.pyAbaqus cae startup=myscript.py启动CAE界⾯并运⾏脚本Abaqus viewer script=myscript.pyAbaqus viewer startup=myscript.py启动Viewer并运⾏脚本Abaqus cae noGUI=myscript.pyAbaqus viewer noGUI=myscript.py不启动CAE或者Viewer运⾏脚本此外,ABAQUS也提供了⼀个python编译器,可以通过file→abaqus pde运⾏详细的python命令,⼤家可以通过帮助⽂件中的Abaqus Scripting Reference Guide进⾏查看。

abaqus-python二次开发方法

abaqus-python二次开发方法

abaqus-python二次开发方法(超实用)基于的二次开发对于很多新手来说都是一个神秘的,感觉是高难度的问题,致使很多新手对二次开发的研究都处于初级了解阶段,或完全不感冒阶段。

其实二次开发很简单,某种意义上讲,常用的ABAQUS二次开发方式有两种,(1)直接修改inp文件,这种方式需要对inp文件中大量的节点和单元进行操作,一般不建议采用inp文件进行二次开发(除非有特殊的关键字或标识符,其实关键字也可以用python语言来进行二次开发,笔者亲证)。

采用inp文件进行二次开发数据量大,行数多,一旦发生问题难以检测错误原因(2)采用abaqus语言,自编脚本,简单容易,非常适合初学者。

这里主要介绍python入门python语言的开发远没有想象中的难,其实基于abaqus语言的二次开发更像是word或excel里的VBA,我们只要通过录制一段宏文件,就可以简单迅速的完成一个模型的建立,当我们人为的对这段宏文件进行修改,就可以完成对该模型的修改,非常适合有大量相同或类似模型的建立,防止用户一遍又一遍繁琐的建模操作。

简单的步骤如下:1.在建模前先打开file--Macro Manager,然后新建一个宏文件(在Home或Work都行,只要你最终能找到这个文件),此时会弹出Record Macro对话框,托至不碍事的地方2.进行正常的cae建模就行,至到建模完成3.点击Record Macro对话框的Stop Mecording,此时命令栏会显示“Macro "Macroname" has been added to "E:\Temp\Macroname.py"”,前期任务搞定4.此时用文本编辑器打开此py文件,py文件中有些文字是没有用的,把“def Macro1 ...import connectorBehavior”都可以删掉,每行字前的空格都要去掉(文本编辑器里一般有列模式,用列模式可以对整个文本的进行操作)5.复制你新生成的python文件,并对该文件中的参数进行修改,在提交给abaqus--cae就可以完成重复建模了,如此可以无限重复,其实python语言都是大白话,你能看懂的需要指出的是:1.可以结合其它编程语言如VB、VC 配合修改参数并生成py文件,使用更为灵活2.生成py文件可以直接在cae中选择file-run script,选择你生成的python文件3.可以用python文件直接生成cae模型文件,可在py文件最后添加"mdb.saveAs(pathName='" *** "')"4.可以通过cmd命令直接将py文件提交个abaqus内核,让abaqus进行运算,cmd命令为“Shell"C:\Windows\SysWOW64\cmd.exe /k abaqus cae noGUI=" **** ".py ", vbHide等待abaqus运算的py语言"myJob.submit(consistencyChecking=OFF, datacheckJob=True)"。

ABAQUS二次开发教程

ABAQUS二次开发教程

ABAQUS (Python 语言)二次开发人生苦短,我用 Python作者: Fan ShengbaoPython2.72017 年 12 月目录1第一章 Python 程序基本语法 ......................................................................................................1.1Python 语法结构 (1)1.2Python 元组 (1)1.3Python 列表 (1)1.4Python 字典 (2)1.5Python 集合 (3)1.6Python 字符串 (3)1.7Python 分支语句 (4)1.8Python 循环语句 (5)1.8.1for 循环 (5)1.8.2while 循环 (5)1.9Python 定义函数 (5)1.10Python 模块 (6)1.11Python 包 (7)1.12Python 文件和目录 (7)1.12.1目录操作 (7)1.12.2文件操作 (7)1.13Python 异常处理 (8)9第二章 ABAQUS/Python 二次开发 .............................................................................................2.1ABAQUS执行 Python 程序 (9)2.2编写 ABAQUS/Python 程序 (10)2.3ABAQUS录制 Python 程序 (10)2.4ABAQUS/Python 对象介绍 (11)2.4.1 session 对象 (11)2.4.2 mdb 对象 (11)2.4.3 odb 对象 (13)2.5ABAQUS完整二次开发示例 (14)2.6ABAQUS二次开发常用函数 (16)2.6.1 Part 模块常用函数 (16)第一章 Python 程序基本语法1.1 Python 语法结构Python 语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。

abaqus 二次开发详解

abaqus 二次开发详解

#开头的为注释行.第一步, 建立建模环境, 这一步中py将从abaqus中导入建模所需的所有程序模块.from part import *接下来定义草图环境mdb.models['Model A'].Sketch(name='__profile__', sheetSize=200.0)mdb.models['ModelA'].sketches['__profile__'].sketchOptions.setValues(constructionGeometry=ON, decimalPlaces=2, dimensionTextHeight=5.0, grid=ON,gridFrequency=2, gridSpacing=5.0, sheetSize=200.0, viewStyle=AXISYM)上面的设定为大小200*200, 格栅间距为5, 文字标注高度为5.mdb.models['Model A'].sketches['__profile__'].ObliqueConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))本句语句设定轴对称模型的对称轴线位置mdb.models['Model A'].sketches['__profile__'].rectangle(point1=(0.0, 0.0),point2=(40.0, -40.0))该语句绘制矩形, 从点0,0 至点40,-40mdb.models['Model A'].Part(dimensionality=AXISYMMETRIC, name='Boden',type=DEFORMABLE_BODY)定义模型为轴对称, 名字为boden,为可变形体mdb.models['Model A'].parts['Boden'].BaseShell(sketch=mdb.models['ModelA'].sketches['__profile__'])del mdb.models['Model A'].sketches['__profile__']绘图完成不要忘记收回建模环境所占的内存第二节: 材料定义 -------------------- 2楼第三节: 装配 -------------------- 3楼第四节: 分析步定义 -------------------- 4楼第五节: 接触定义 -------------------- 5楼第六节: 荷载边界定义 ----------------- 6楼第七节: 网格划分控制 ------------------ 7楼第八节, 任务提交及杂项功能 -------- 8楼关于如何在python中提交多个任务的问题 9楼第二节, 材料定义from material import *from section import *从ABAQUS提供的接口中导入材料库和组件库mdb.models['Model-A'].Material(name='Boden')定义材料名mdb.models['Model A'].materials['Boden'].Density(table=((2000.0, ), ))定义材料密度mdb.models['Model A'].materials['Boden'].Elastic(table=((210546.3, 0.3333), ))定义材料线弹性模量和泊松比, 其它的材料, 如弹塑性, 粘弹性材料均对应不同的对象函数. mdb.models['Model A'].HomogeneousSolidSection(material='Boden',name='boden',thickness=1.0)mdb.models['ModelA'].parts['Boden'].assignSection(region=Region(faces=mdb.models['ModelA'].parts['Boden'].faces[0:1]), sectionName='boden')设定组件为坐标无关性材料,厚度为单位厚度, 并将属性附给所用的组件第三节, 装配from assembly import *首先, 导入装配所用到的对象mdb.models['ModelA'].rootAssembly.DatumCsysByThreePoints(coordSysType=CYLINDRICAL, origin=(0.0, 0.0, 0.0), point1=(1.0, 0.0, 0.0), point2=(0.0,0.0, -1.0))定义坐标类型为柱坐标, 原点0,0,0,另外两个为单位向量, 确定该坐标轴的方向.mdb.models['Model A'].rootAssembly.Instance(name='Boden-1',part=mdb.models['Model A'].parts['Boden'])生成草图对像boden的实体, 名字叫Boden-1. 无偏移插入第四节, 定义分析步from step import *象其它步一样, 先导入分析步要用到的模块mdb.models['Model A'].ImplicitDynamicsStep(initialInc=0.005,maxNumInc=1024,name='Step-1', noStop=OFF, nohaf=OFF,previous='Initial',timeIncrementationMethod=FIXED, timePeriod=5.12)定义对动力隐式分析, 时长为0.005*1024=5.12个时间单位, 前一步为Initialmdb.models['Model A'].fieldOutputRequests['F-Output-1'].setValues(variables=('U',))定义输出到ODB文件的数据, 这里只定义了位移输出mdb.models['Model A'].fieldOutputRequests['F-Output-1'].setValues(frequency=1)定义位移输出的频率为每步都输出mdb.models['Model A'].steps['Step-1'].Restart(frequency=1, overlay=ON)定义重启动析, 每一步记录, 只记录最后一次的正确状态第五节, 定义接触from interaction import *依然是先导入所用的模块mdb.models['Model A'].rootAssembly.PartitionEdgeByParam(edges=(mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[3], ), parameter=0.975)在上部即第3面的97.5%的地方设定一个点, 用于定义接触mdb.models['Model A'].ContactProperty('IntProp-1')定义接触属性名mdb.models['Model A'].interactionProperties['IntProp-1'].TangentialBehavior(formulation=FRICTIONLESS)mdb.models['Model A'].interactionProperties['IntProp-1'].NormalBehavior(allowSeparation=OFF, augmentedLagrange=OFF, pressureOverclosure=HARD)定义接触特性,为无摩擦硬接触不允许分开mdb.models['Model A'].SurfaceToSurfaceContactStd(adjustMethod=NONE,createStepName='Initial', interactionProperty='IntProp-1', master=Region(side1Edges=mdb.models['Model A'].rootAssembly.instances['fun-1'].edges[0:1]), name='Int-1', slave=Region(side1Edges=mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[4:5]), sliding=FINITE)这一句是建立接触对, 分别为两个面上的一条边, 这里边的定义由ABAQUS内定, 具体可以查阅参考手册第六节, 荷载边界定义from load import *mdb.models['Model A'].PeriodicAmplitude(a_0=1.0, data=((3.0, 1.1), (3.2, 1.7)), frequency=2.454, name='Fourier',start=0.0, timeSpan=STEP)定义fourier级数表示的荷载mdb.models['Model A'].Pressure(amplitude='Fourier', createStepName='Step-1', distribution=UNIFORM, magnitude=50.0, name='Load-1', region=Region(side1Edges=mdb.models['Model A'].rootAssembly.instances['fun-1'].edges[2:3]))定义压强, 设定加载的分析步,区域及放大系数mdb.models['Model A'].DisplacementBC(amplitude=UNSET,createStepName='Initial',distribution=UNIFORM, localCsys=None, name='BC-1', region=Region(edges=mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[0:1]+\mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[2:3]+\mdb.models['Model A'].rootAssembly.instances['fun-1'].edges[3:4]),u1=SET,u2=UNSET, ur3=UNSET)mdb.models['Model A'].DisplacementBC(amplitude=UNSET, createStepName='Initial', distribution=UNIFORM, localCsys=None, name='BC-2', region=Region(edges=mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[1:2]),u1=UNSET, u2=SET, ur3=UNSET)设定边界位移为0的边界条件, 注意语法中对象相加的方法.第七节, 网格划分控制from mesh import *import mesh导入网格划分模块elemType1 = mesh.ElemType(elemCode=CAX8,elemLibrary=STANDARD,secondOrderAccuracy=OFF, hourglassControl=STIFFNESS, distortionControl=OFF)elemType2 = mesh.ElemType(elemCode=CAX6M, elemLibrary=STANDARD)a1 = mdb.models['Model A'].rootAssemblyf1 = a1.instances['Boden-1'].facesfaces1 = f1[0:1]regions =(faces1, )a1.setElementType(regions=regions, elemTypes=(elemType1, elemType2))定义其中一个物体的网格为二次8结点单元, 如果其中有无法划分成四边形单元的情况, 则用三角形二次6结点单元.elemType1 = mesh.ElemType(elemCode=CAX4, elemLibrary=STANDARD)elemType2 = mesh.ElemType(elemCode=CAX3, elemLibrary=STANDARD)a1 = mdb.models['Model A'].rootAssemblyf1 = a1.instances['fun-1'].facesfaces1 = f1[0:1]regions =(faces1, )a1.setElementType(regions=regions, elemTypes=(elemType1, elemType2))定义其中一个物体的网格为一次4结点单元,如果其中有无法划分成四边形单元的情况, 则用三角形一次3结点单元.mdb.models['Model A'].rootAssembly.seedPartInstance(regions=(mdb.models['Model A'].rootAssembly.instances['fun-1'], ), size=0.5)mdb.models['Model A'].rootAssembly.seedPartInstance(regions=(mdb.models['Model A'].rootAssembly.instances['Boden-1'], ), size=1)定义网格划分全局单元大小.mdb.models['Model A'].rootAssembly.generateMesh(regions=(mdb.models['ModelA'].rootAssembly.instances['Boden-1'],mdb.models['ModelA'].rootAssembly.instances['fun-1']))按照定义划分单元第八节, 任务提交及杂项功能mdb.models.changeKey(fromName='Model A', toName='Fall-Muster')修改模型名称mdb.Model(name='Fall-015', objectToCopy=mdb.models['Fall-Muster'])拷贝模型mdb.models['Fall-015'].materials['Boden'].elastic.setValues(table=((210546.3, 0.15),))修改模型中的材料属性mdb.Job(contactPrint=OFF, description='', echoPrint=OFF, explicitPrecision=SINGLE, historyPrint=OFF, model='Fall-015', modelPrint=OFF,multiprocessingMode=THREADS, name='Job-015', nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1, parallelizationMethodExplicit=LOOP,parallelizationMethodStandard=TREE, preMemory=1024.0, scratch='',standardMemory=2048.0, standardMemoryPolicy=MODERATE, type=ANALYSIS,userSubroutine='')生成任务mdb.saveAs(pathName='D:/temp/FundamentSchwingungStudie')保存模型mdb.jobs['Job-015'].submit()提交任务关于如何在python中提交多个任务的问题:如果您使用下面这样的命令做的提交mdb.jobs['Job-01'].submit()mdb.jobs['Job-02'].submit()mdb.jobs['Job-03'].submit()你就会看到, 所有的任务是一次性提交的, 多个任务在一起运行, 这肯定不是你想看到的结果, 如何完成一个接着一个的提交呢, 其实很简单, 在每个任务后面加上一句mdb.jobs['Job-01'].waitForCompletion()就可以了.那么上面的语句就改为mdb.jobs['Job-01'].submit()mdb.jobs['Job-01'].waitForCompletion()mdb.jobs['Job-02'].submit()mdb.jobs['Job-02'].waitForCompletion()mdb.jobs['Job-03'].submit()mdb.jobs['Job-03'].waitForCompletion()......就一切OK了。

基于Python的Abaqus二次开发实例讲解

基于Python的Abaqus二次开发实例讲解

基于Python的Abaqus二次开发实例讲解(asian58 2013.6.26)基于Python的Abaqus的二次开发便捷之处在于:1、所有的代码均可以先在Abaqus\CAE中操作一遍后再通过rp文件读取,然后再在此基础上进行相应的修改;2、Python是一种解释性语言,读起来非常清晰,因此在修改程序的过程中,不存在程序难以理解的问题;3、Python是一种通用性的、功能非常强大的面向对象编程语言,有许多成熟的类似于Matlab函数的程序在网络上流传,为后期进一步的数据处理提供了方便。

为了更加方便地完成Abaqus的二次开发,需进行一些相关约定:1、所有参数化直接通过点的坐标值进行,直接对几何尺寸的参数化反而更加繁琐;2、程序参数化已不允许在模型中添加太多的Tie,因此不同零部件的绑定直接通过共节点来进行,这就要求建模方法与常规的建模方法有所区别。

思路如下:将一个整机拆成几个大的Part来建立,一个Part中包含许多零件,这样在划分网格式时就可以自动实现共节点的绑定。

不同的零件可通过建立不同的Set来进行区分,不同Part 的绑定可以通过Tie来实现。

将一个复杂的结构拆成几个恰当的Part来建立,一方面可以将复杂的模型简单化,使建立复杂模型成为可能;另一方面,不同的Part可单独调用,从而又可实现程序的模块化,增加程序的适应范围,延长程序的使用寿命,也方便后期程序的维护和修改。

3、通过py文件建立起的模型要进行参数优化,已不适合采用Isight中Abaqus模块,需要用到Isight的Simcode模块。

下面详细解释一个臂架的py文件。

#此程序用来绘制臂架前段#导入相关模块# -*- coding: mbcs -*-from abaqus import *from abaqusConstants import *#定义整个臂架的长、宽、高L0=14300W0=1650H0=800#创建零件P01_12 L1=H0+200 W1=200 T1=12s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=2000.0)g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=STANDALONE)s.rectangle(point1=(W0/2, L1/2), point2=(W0/2+W1, -L1/2))s.rectangle(point1=(-W0/2, L1/2), point2=(-W0/2-W1, -L1/2))p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, type=DEFORMABLE_BODY)p = mdb.models['Model-1'].parts['Part-1'] p.BaseShell(sketch=s)session.viewports['Viewport: 1'].setValues(displayedObject=p) del mdb.models['Model-1'].sketches['__profile__']#定义零件的厚度p = mdb.models['Model-1'].parts['Part-1'] f = p.faces pickedFaces01 = f.findAt (((W0/2, L1/2, 0),),((-W0/2, L1/2, 0),), ) p.assignThickness(faces=pickedFaces01, thickness=T1) p.Set(faces=pickedFaces01, name='P01_12')#创建辅助平面和辅助坐标系p = mdb.models['Model-1'].parts['Part-1']p.DatumCsysByThreePoints(name='Datum csys-1', coordSysType=CARTESIAN, origin=( 0.0, 0.0, 0.0), line1=(1.0, 0.0, 0.0), line2=(0.0, 1.0, 0.0))p = mdb.models['Model-1'].parts['Part-1']p.DatumPlaneByPrincipalPlane(principalPlane=XYPLANE, offset=L0)#创建零件P02_12 L2=L1 W2=W1 T2=12p = mdb.models['Model-1'].parts['Part-1'] d = p.datums#将草图原点参数化t = p.MakeSketchTransform(sketchPlane=d[5], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0, L0)) s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=29006.85, gridSpacing=725.17, transform=t) g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']s.rectangle(point1=(W0/2, L2/2), point2=(W0/2+W2, -L2/2))s.rectangle(point1=(-W0/2, L2/2), point2=(-W0/2-W2, -L2/2))p = mdb.models['Model-1'].parts['Part-1']d2 = p.datumsp.Shell(sketchPlane=d2[5], sketchUpEdge=d2[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件的厚度p = mdb.models['Model-1'].parts['Part-1'] Array f = p.facespickedFaces02 = f.findAt(((W0/2, L1/2, L0),),((-W0/2, L1/2, L0),), )p.assignThickness(faces=pickedFaces02, thickness=T2)p.Set(faces=pickedFaces02, name='P02_12')#创建零件P03_12和零件P04_08T3=12T4=8p = mdb.models['Model-1'].parts['Part-1']d = p.datumst = p.MakeSketchTransform(sketchPlane=d[5], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0, L0)) s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=29006.85, gridSpacing=725.17, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)#创建草图p = mdb.models['Model-1'].parts['Part-1']s.Line(point1=(-W0/2-W1, H0/2), point2=(-W0/2, H0/2))s.Line(point1=(W0/2, H0/2), point2=(W0/2+W1, H0/2))s.Line(point1=(-W0/2-W1, -H0/2), point2=(-W0/2, -H0/2))s.Line(point1=(W0/2, -H0/2), point2=(W0/2+W1, -H0/2))p = mdb.models['Model-1'].parts['Part-1']d2 = p.datumsp.ShellExtrude(sketchPlane=d2[5], sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L0, flipExtrudeDirection=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P03_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facespickedFaces03 = f.findAt(((-W0/2, H0/2, L0/2),),((W0/2, H0/2, L0/2),),)p.assignThickness(faces=pickedFaces03, thickness=T3)p.Set(faces=pickedFaces03, name='P03_12')#定义零件P04_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facespickedFaces04 = f.findAt(((-W0/2, -H0/2, L0/2),),((W0/2, -H0/2, L0/2),),)p.assignThickness(faces=pickedFaces04, thickness=T4)p.Set(faces=pickedFaces04, name='P04_12')#创建零件P05_08T5=8p = mdb.models['Model-1'].parts['Part-1']d = p.datumst = p.MakeSketchTransform(sketchPlane=d[5], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0, L0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=29006.85, gridSpacing=725.17, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']s.Line(point1=(-W0/2-W1/2, H0/2), point2=(-W0/2-W1/2, -H0/2))s.Line(point1=(W0/2+W1/2, H0/2), point2=(W0/2+W1/2, -H0/2))p = mdb.models['Model-1'].parts['Part-1']d2 = p.datumsp.ShellExtrude(sketchPlane=d2[5], sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L0,flipExtrudeDirection=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P05_8的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facespickedFaces05 = f.findAt(((-W0/2-W1/2, 0, L0/2),),((W0/2+W1/2, 0, L0/2),),)p.assignThickness(faces=pickedFaces05, thickness=T5)p.Set(faces=pickedFaces05, name='P05_08')#创建零件P06_08L6=W0+W1n=L0//2520+1T6=8p = mdb.models['Model-1'].parts['Part-1']f, d = p.faces, p.datumst = p.MakeSketchTransform(sketchPlane=f[0], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(W0/2+W1/2, -H0/2,0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=28684, gridSpacing=717, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']#循环命令绘制平行隔板for i in range(0,n): Array s.Line(point1=(-500-(i*2520), H0), point2=(-500-(i*2520), 0.0))p = mdb.models['Model-1'].parts['Part-1']f1, d2 = p.faces, p.datumsp.ShellExtrude(sketchPlane=f1[0], sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L6,flipExtrudeDirection=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P06_08的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facesfor i in range(0,n): Array pickedFaces = f.findAt(((0, H0/4, 500+i*2520),))p.assignThickness(faces=pickedFaces, thickness=T6)p.Set(faces=pickedFaces, name='P06_08_'+str(1+i))#创建零件P07_12,P08_12W7=200L7=W0+W1T7=12T8=12p = mdb.models['Model-1'].parts['Part-1']f, e = p.faces, p.edgest = p.MakeSketchTransform(sketchPlane=f.findAt(coordinates=(W0/2+W1/2, 0.0, 100.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 0.0)),sketchOrientation=RIGHT,sketchPlaneSide=SIDE1,origin=(W0/2+W1/2, -H0/2, 0.0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=53678, gridSpacing=1341, transform=t)g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']#循环命令绘制平行隔板for i in range(0,n):s.Line(point1=(400+i*2520, -H0), point2=(600+i*2520, -H0))s.Line(point1=(400+i*2520, 0), point2=(600+i*2520, 0))p = mdb.models['Model-1'].parts['Part-1']f1, e1 = p.faces, p.edgesp.ShellExtrude(sketchPlane=f.findAt(coordinates=(W0/2+W1/2, 0.0, 100.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 0.0)),sketchPlaneSide=SIDE1,sketchOrientation=RIGHT, sketch=s, depth=W0+W1, flipExtrudeDirection=ON, keepInternalBoundaries=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P07_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facesfor i in range(0,n):pickedFaces07 = f.findAt(((0, H0/2, 400+i*2520),),((0, H0/2, 600+i*2520),),) p.assignThickness(faces=pickedFaces07, thickness=T7)p.Set(faces=pickedFaces07, name='P07_12_'+str(1+i))fp=[]for i in range(0,2):fp.append(f.findAt(((0, H0/2, 400+i*2520),),((0, H0/2, 600+i*2520),),))p.Set(faces=fp, name='P07_fp')#定义零件P08_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facesfor i in range(0,n):pickedFaces08 = f.findAt(((0, -H0/2, 400+i*2520),),((0, -H0/2, 600+i*2520),),) p.assignThickness(faces=pickedFaces08, thickness=T7)p.Set(faces=pickedFaces08, name='P08_12_'+str(1+i))#为中间隔板创建空腔#定义相关参数边界距离、圆角d0=100r0=100p = mdb.models['Model-1'].parts['Part-1']f1, e1 = p.faces, p.edgest = p.MakeSketchTransform(f.findAt(coordinates=(0, 0.0, 500.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 500.0)),sketchPlaneSide=SIDE1, sketchOrientation=RIGHT,origin=(0.0, 0.0, 500.0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=5910.0, gridSpacing=147.0, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)#创建矩形s.rectangle(point1=(-W0/2-W1/2+d0, H0/2-d0), point2=(W0/2+W1/2-d0, -H0/2+d0)) #创建圆角s.FilletByRadius(radius=r0,curve1=g[29], nearPoint1=(-W0/2-W1/2+d0, H0/2-d0), curve2=g[26], nearPoint2=(-W0/2-W1/2+d0, H0/2-d0))s.FilletByRadius(radius=r0, curve1=g[26], nearPoint1=(-W0/2-W1/2+d0, -H0/2+d0), curve2=g[27], nearPoint2=(-W0/2-W1/2+d0, -H0/2+d0)) s.FilletByRadius(radius=r0, curve1=g[27], nearPoint1=(W0/2+W1/2-d0, -H0/2+d0), curve2=g[28], nearPoint2=(W0/2+W1/2-d0, -H0/2+d0)) s.FilletByRadius(radius=r0, curve1=g[28], nearPoint1=(W0/2+W1/2-d0, H0/2-d0), curve2=g[29], nearPoint2=(W0/2+W1/2-d0, H0/2-d0))p = mdb.models['Model-1'].parts['Part-1']f1, d2 = p.faces, p.datumsp.CutExtrude(f.findAt(coordinates=(0, 0.0, 500.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 500.0)),sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L0, flipExtrudeDirection=OFF)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#开始建立梁Beam_1p = mdb.models['Model-1'].parts['Part-1']f, d = p.faces, p.datums#绘制参考面p.DatumPlaneByOffset(plane=f.findAt(coordinates=(W0/2, -H0/2, 100.0)),flip=SIDE2, offset=8.0)dp1 = d.keys()[-1]p = mdb.models['Model-1'].parts['Part-1']d = p.datumst = p.MakeSketchTransform(sketchPlane=d[dp1], sketchUpEdge=d[4].axis1,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0,0.0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=31857.0, gridSpacing=796.0, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']#计算中间加强梁的数量if n%2==1:n1=n//2 n2=n//2 else:n1=n//2 n2=n//2-1 for i in range(0,n1):s.Line(point1=(-500-i*2520*2, W0/2+W1/2), point2=(-500-2520-i*2520*2,-W0/2-W1/2 )) for i in range(0,n2):s.Line(point1=(-500-2520-i*2520*2,-W0/2-W1/2), point2=(-500-2*2520-i*2520*2,W0/2+W1/2 ))#在基准平面dp1上面绘制梁p = mdb.models['Model-1'].parts['Part-1'] d2 = p.datums e = p.edgesp.Wire(sketchPlane=d2[dp1], sketchUpEdge=d2[4].axis1, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s) s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__'] edges1=[] for i in range(0,n-1): edges1.append (e.findAt(((0, -H0/2-8, 500+2520/2+i*2520),),)) p.Set(edges=edges1, name='Beam_1') ############################开始定义有限元分析的相关参数 #定义材料mdb.models['Model-1'].Material(name='steel')mdb.models['Model-1'].materials['steel'].Elastic(table=((210000.0, 0.3), )) mdb.models['Model-1'].materials['steel'].Density(table=((7.8e-06, ), ))#定义壳单元属性mdb.models['Model-1'].HomogeneousShellSection(name='shell', preIntegrate=OFF, material='steel', thicknessType=UNIFORM, thickness=10.0, thicknessField='', idealization=NO_IDEALIZATION, poissonDefinition=DEFAULT,thicknessModulus=None, temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, numIntPts=5) #赋所有壳单元属性p = mdb.models['Model-1'].parts['Part-1']for i in range(1,5):region1 = p.sets['P0'+str(i)+'_12']p.SectionAssignment(region=region1, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY , offsetField='',thicknessAssignment=FROM_GEOMETRY )region2 = p.sets['P05_08']p.SectionAssignment(region=region2, sectionName='shell', offset=0.0, offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)for i in range(1,n+1): Array region3 = p.sets['P06_08_'+str(i)]p.SectionAssignment(region=region3, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)for i in range(1,n+1):region4 = p.sets['P07_12_'+str(i)]p.SectionAssignment(region=region4, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)for i in range(1,n+1):region5 = p.sets['P08_12_'+str(i)]p.SectionAssignment(region=region5, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)#定义梁单元属性mdb.models['Model-1'].LProfile(name='L_65', a=65.0, b=65.0, t1=7.0, t2=7.0)mdb.models['Model-1'].BeamSection(name='B_65', integration=DURING_ANALYSIS,poissonRatio=0.0, profile='L_65', material='steel', temperatureVar=LINEAR,consistentMassMatrix=False)#赋所有梁单元属性p = mdb.models['Model-1'].parts['Part-1']region = p.sets['Beam_1']p.SectionAssignment(region=region, sectionName='B_65', offset=0.0,offsetType=MIDDLE_SURFACE, offsetField='',thicknessAssignment=FROM_SECTION)p.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0, 0.0,-1.0))#定义装配体import assemblya = mdb.models['Model-1'].rootAssemblya.DatumCsysByDefault(CARTESIAN)p = mdb.models['Model-1'].parts['Part-1']a.Instance(name='Part-1-1', part=p, dependent=ON)#定义分析步import stepmdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial')#定义底面与梁的tiedimport interactiona = mdb.models['Model-1'].rootAssemblyregion1=a.instances['Part-1-1'].sets['P04_12']region2=a.instances['Part-1-1'].sets['Beam_1']mdb.models['Model-1'].Tie(name='Constraint-1', master=region1, slave=region2, positionToleranceMethod=COMPUTED, adjust=OFF, tieRotations=ON, thickness=ON)#开始定义耦合#导入相关模块import regionToolseta = mdb.models['Model-1'].rootAssemblyd, r = a.datums, a.referencePoints#定义参考点a.ReferencePoint(point=(0.0, H0/2, 500+2520/2))rp1 = r.keys()[-1]refPoints1=(r1[rp1], )region1=regionToolset.Region(referencePoints=refPoints1)s1 = a.instances['Part-1-1'].facesregion2 = a.instances['Part-1-1'].sets['P07_fp']mdb.models['Model-1'].Coupling(name='Constraint-2', controlPoint=region1, surface=region2, influenceRadius=WHOLE_SURFACE, couplingType=DISTRIBUTING, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON, ur2=ON, ur3=ON)#########################定义边界条件import loada = mdb.models['Model-1'].rootAssemblyd, r = a.datums, a.referencePointsregion = a.instances['Part-1-1'].sets['P02_12']mdb.models['Model-1'].DisplacementBC(name='SPC', createStepName='Initial', region=region, u1=SET, u2=SET, u3=SET, ur1=SET, ur2=SET, ur3=SET,amplitude=UNSET, distributionType=UNIFORM, fieldName='', localCsys=None)a = mdb.models['Model-1'].rootAssemblyregion = a.instances['Part-1-1'].sets['P08_12_'+str(n-1)]mdb.models['Model-1'].DisplacementBC(name='SPC2', createStepName='Initial', region=region, u1=SET, u2=SET, u3=SET, ur1=SET, ur2=SET, ur3=SET,amplitude=UNSET, distributionType=UNIFORM, fieldName='', localCsys=None)r1 = a.referencePointsrefPoints1=(r1[rp1], )region = regionToolset.Region(referencePoints=refPoints1)mdb.models['Model-1'].ConcentratedForce(name='force', createStepName='Step-1',region=region, cf2=-10000.0, distributionType=UNIFORM, field='',localCsys=None)mdb.models['Model-1'].Gravity(name='G', createStepName='Step-1', comp2=-9.8, distributionType=UNIFORM, field='')#################划分网格import meshp = mdb.models['Model-1'].parts['Part-1']p.seedPart(size=20.0, deviationFactor=0.1, minSizeFactor=0.1)p.generateMesh()a = mdb.models['Model-1'].rootAssembly###############创建作业并提交分析import jobmdb.Job(name='006', model='Model-1', description='', type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90,memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',scratch='', multiprocessingMode=DEFAULT, numCpus=4, numDomains=4) mdb.jobs['006'].submit(consistencyChecking=ON)mdb.jobs['006'].waitForCompletion()###############进入后处理模块import visualizationo3 = session.openOdb(name='F:/ABAQUS/006.odb')session.viewports['Viewport: 1'].setValues(displayedObject=o3)session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=( CONTOURS_ON_DEF, ))session.viewports['Viewport: 1'].view.setValues(session.views['Iso'])mdb.saveAs(pathName='F:/ABAQUS/006.cae')第11 页共11 页。

ABAQUS二次开发教程

ABAQUS二次开发教程

ABAQUS(Python语言)二次开发人生苦短,我用Python作者:Fan ShengbaoPython2.72017年12月目录第一章Python程序基本语法 (1)1.1Python语法结构 (1)1.2Python元组 (1)1.3Python列表 (1)1.4Python字典 (2)1.5Python集合 (3)1.6Python字符串 (3)1.7Python分支语句 (4)1.8Python循环语句 (5)1.8.1for循环 (5)1.8.2while循环 (5)1.9Python定义函数 (5)1.10Python模块 (6)1.11Python包 (7)1.12Python文件和目录 (7)1.12.1目录操作 (7)1.12.2文件操作 (7)1.13Python异常处理 (8)第二章ABAQUS/Python二次开发 (9)2.1ABAQUS执行Python程序 (9)2.2编写ABAQUS/Python程序 (10)2.3ABAQUS录制Python程序 (10)2.4ABAQUS/Python对象介绍 (11)2.4.1 session对象 (11)2.4.2 mdb对象 (11)2.4.3 odb对象 (13)2.5ABAQUS完整二次开发示例 (14)2.6ABAQUS二次开发常用函数 (16)2.6.1 Part模块常用函数 (16)第一章Python程序基本语法1.1Python语法结构Python语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。

下面是一段Python程序示例:#-*- coding:utf-8 -*-for i in range(1,10):for j in range(1,i+1):print str(j)+'x'+str(i)+' = '+str(i*j),print该段程序主要功能是实现乘法口诀表输出打印,其中“#-*- coding:utf-8 -*-”是约定文档的编码方式。

Abaqus中的二次开发

Abaqus中的二次开发

Abaqus中的二次开发Abaqus中的二次开发可以分为两大类:1)基于FORTRAN语言的用户子程序开发;2)基于Python的脚本开发。

其中第二大类基于Python的脚本开发又可以细分为如下三大类:1)通过Python脚本实现Abaqus参数化建模;2)通过Python脚本实现用户定制化后处理;3)应用Python语言通过FoxGUI Toolkit编写GUI(可视化用户界面)。

今天首先对Abaqus子程序二次开发进行一个概括性的介绍。

虽然Abaqus为用户提供了大量的单元库和求解模型,使用户能够利用这些模型处理绝大多数的问题,但是实际问题毕竟非常复杂,Abaqus不可能求解所有可能出现的问题,所以Abaqus提供了大量的用户自定义子程序(UserSubroutine),允许用户再找不到合适模型的情况下自定义符合自己问题的模型。

这些用户子程序涵盖了建模、载荷到单元的几乎各个部分。

用户子程序具有以下功能和特点:1、如果Abaqus的一些固有模块功能有限,用户子程序可以提高和扩展Abaqus中相应的功能;2、通常用户子程序是用FORTRAN语言的代码写成(Abaqus也提供C++接口);3、它可以以不同的方式运行在模型的不同计算步骤和位置;4、可以在一次计算中包含多个用户子程序。

常用的Abaqus用户子程序举例:DLOAD:用户自定义载荷,例如在复杂工况下,载荷随时间和温度变化;FILM:用户自定义film coefficient,例如定义复杂热交换界面上的热交换系数;UEL:用户自定义单元,是Abaqus用户子程序中功能最强大的,理论上可以实现任意类型的有限元单元定义,通过用户自定义单元和Abaqus的高效求解器,实现任意类型的偏微分方程问题的数值求解;UMAT:用户自定义材料属性,可以用来定义复杂材料的连续模型,用以补充Abaqus材料定义模块功能,例如:自定义复杂特殊塑性模型,自定义复杂特殊损伤模型。

abaqus二次开发

abaqus二次开发

abaqus二次开发Abaqus 使用FQA:Q: abaqus的图形如何copy?A: file>print>file格式为png,可以用Acdsee打开。

Q: 用Abaqus能否计算[Dep]不对称的问题?A: 可以,并且在step里面的edit step对话框other里面的matrix solver有个选项。

Q: 弹塑性矩阵【D】与ddsdde有何联系?A: stress=D*stran;d(stress)=ddsdde*d(stran)。

Q: 在abaqus中,如果采用umat,利用自己的本构,如何让abaqus明白这种材料的弹塑性应变,也就是说,如何让程序返回弹性应变与塑性应变,好在output中输出,我曾想用最笨地方法,在uvarm中定义输出,利用getvrm获取材料点的值,但无法获取增量应力,材料常数等,研究了帮助中的例子,umatmst3.inp,umatmst3.for,他采用mises J2 流动理论,我在output history 显示他已进入塑性状态,但他的PE仍然为0!!?A: 用uvar( )勉强成功。

Q: 本人在用umat作本构模型时,*static,1,500,0.000001,0.1 此时要求的增量步很多,即每次增量要很小,*static1,500 时,在弹性向塑性过度时,出现错误,增量过大,出现尖点.?A: YOU CAN TRY AS FOLLOWS:*STEP,EXTRAPOLATION=NO,INC=2000000*STATIC0.001,500.0,0.00001,0.1。

Q: 模型中存在两个物体的接触,计算过程中报错,怎么回事?A: 接触问题不收敛有两个方面不妨试试:一、在*CONTACT PAIR 里调试ADJUST参数;二、调一些模型参数,比如FRICTION等。

Q: 在边界条件和加载时,总是有initial这个步,然后是我们自己定义的加载步,请问这个initial步,主要作用是什么?能不能去掉?A: 不能去掉,所有的分析都有,是默认的步。

使用python进行ABAQUS的二次开发的简要说明(byYoung2017.06.27)

使用python进行ABAQUS的二次开发的简要说明(byYoung2017.06.27)

使用python进行ABAQUS的二次开发的简要说明(byYoung2017.06.27)(所有用词以英文为准,翻译仅供参考)一、abaqus二次开发总述:首先最重要的知识点需要明确,abaqus在求解核心(Solver/ Kernel)和图形用户界面(GUI)之间使用的交互语言天然就是python,因此使用python进行abaqus二次开发是十分自然的选择(当然你也可以用C++,但是鉴于python所拥有的各类开源库函数的优势,python应当是二次开发的首选)。

abaqus已经使用python 写好了很多用于计算、建模、GUI等操作的模块,因此二次开发的重点在于灵活调用这些模块,完成自己的设计计算需求。

所以原则上,所有能通过abaqus/CAE交互完成的操作,使用脚本都可以实现。

并且由于Python提供的丰富的函数资源库,会使得很多复杂的建模的过程更加参数化,更加可控,有时候甚至更加简单。

其次二次开发的学习要点在于勤查手册,其中Abaqus Scripting User's Manual和Abaqus Scripting User's Reference Manual是查阅的重点,其中后者是abaqus中各个object内置方法,路径,输入参数等的详细说明。

最后关于调用脚本的几种用法说明:(1)直接在命令行调用调用脚本并打开cae界面: abaqus cae script=myscript.py调用用于可视化操作脚本,打开显示界面(注意:此时只有visualization模块被激活): abaqus cae viewer=myscript.py 调用脚本在命令行执行,同时不打开GUI界面,但会进入python 交互界面:abaqus cae noGUI=myscript.py(2)在abaqus的GUI界面调用按照Main Menu: File->Run Script,选择需要调用的脚本文件,abaqus会进行执行(3)在abaqus的命令行交互界面调用(command line interface,在abaqus的GUI界面打开之后,窗口的最下方会有命令输入的位置,在这里也可以调用python脚本,执行方法是键入命令:execfile('myscript.py')abaqus的python脚本其实和其他应用场景下的python脚本没有太多区别,只不过有很多abaqus已经开发好的对象库可供使用,其学习过程和学习任何其他python库都是一致的。

ABAQUS_Fortran二次开发

ABAQUS_Fortran二次开发

目录摘要............................................................... ABSTRACT .. (I)1.绪论 01.1.课题的研究背景 01。

2.............................................. 本文的研究内容和方法1 2。

基于ABAQUS软件的二次开发 (2)2。

1。

...................................................... ABAQUS介绍22.2。

................................................ ABAQUS各模块简介22。

3............................................. ABAQUS的二次开发平台4 2。

4。

........................................... ABAQUS的二次开发语言5 3。

用户材料子程序UMAT (7)3.1。

................................................ UMAT开发环境设置73.2.UMAT注意事项 (8)3。

3.................................................... UMAT接口的原理93.4。

................................................... UMAT的使用方法12 4。

材料非线性问题. (13)4。

1。

............................................ 材料的弹塑性本构关系144.2。

............................................. 非线性有限元算法理论174.3.增量理论常刚度法公式推导 (20)4.4.增量理论切线刚度法公式推导 (21)5.UMAT程序设计和编码 (25)5.1.本构关系描述 (25)5。

ABAQUS二次开发基础

ABAQUS二次开发基础

第9章 ABAQUS二次开发基础知识要点:;ABAQUS二次开发概述;ABAQUS用户子程序接口;ABAQUS用户子程序介绍;应用举例本章导读:本章主要介绍了大型有限元软件ABAQUS二次开发的基本情况,主要包括:ABAQUS二次开发概述、ABAQUS用户子程序接口、ABAQUS用户子程序介绍等,最后给出两个算例,介绍采用ABAQUS进行二次开发以及建立ABAQUS主程序与用户子程序之间口的基本过程。

9.1 ABAQUS二次开发概述随着计算技术和计算机的快速发展,有限元软件的发展速度迅速,功能日渐强大。

目前国际上被广泛采用的通用有限元软件有 ANSYS、MSC、ABAQUS 等。

利用商业软件进行计算现在已是科学研究中的一项重要手段。

由于工程问题的千差万别,不同的用户有不同的专业背景和发展方向,通用软件不免在具体的专业方面有所欠缺,针对这些不足,大部分的通用软件都提供了二次开发功能,以帮助用户减少重复性的编程工作、提高开发起点、缩短研发周期、降低开发成本,并能简化后期维护工作,给用户带来很多方便。

基于通用软件平台进行开发,是目前研究的一个重要发展方向。

ABAQUS 也提供了若干用户子程序(User Subroutines)接口,它是一个功能非常强大且适用的分析工具,与命令行的程序格式相比,用户子程序的限制少得多,从而使用更加灵活方便。

ABAQUS不仅提供标准的有限元分析程序,而且具有良好的开放性,可利用它提供的用户子程序接口生成非标准的分析程序来满足用户的需要,在实际工程中得到广泛应用。

ABAQUS 允许用户通过子程序以代码的形式来扩展主程序的功能,并给用户提供了强大而又灵活的用户子程序接口和应用程序接口(Utility Routine),ABAQUS共有42个用户子程序接口,15个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数值交换等等。

python abaqus 二次开发 循环 提交作业

python abaqus 二次开发 循环 提交作业

在Python中进行ABAQUS二次开发时,可以使用循环来提交多个模拟任务。

以下是一个简单的示例代码,演示如何使用循环提交多个模拟任务:pythonimport abaqusfrom abaqus import *from abaqusConstants import *mdb = Mdb()# 定义模拟任务名称列表sim_names = ['sim1', 'sim2', 'sim3']# 循环提交模拟任务for sim_name in sim_names:# 创建模型model = mdb.models.newModel(name=sim_name)# 创建分析步骤step = model.StaticStep(name='step1', previous='Initial', timePeriod=1.0, initialInc=0.1, minInc=1e-05, maxInc=0.1)# 创建载荷和边界条件# ...# 提交模拟任务job = mdb.jobs.submit(name=sim_name, model=sim_name, steps=[step], ndm=1, nsm=0, nsteps=1, nc=0, np=1, fext='', fint='', fintp='', freq=0, nfreq=10, tsmear=0.0, dt=0.1, tend=1.0, timePeriod=1.0)在这个示例中,我们首先定义了一个包含多个模拟任务名称的列表sim_names。

然后,我们使用for循环遍历每个任务名称,创建一个新的模型,并在模型中定义一个静态分析步骤。

我们还定义了载荷和边界条件,并使用submit方法提交模拟任务。

在submit方法中,我们指定了模拟任务的名称、模型名称、分析步骤、网格尺寸、边界条件等参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Abaqus二次开发——Abaqus/python入门体会入门实例#===========================================================自己的论文要用到有限元进行数值模拟分析,以前都用ansys计算,可ansys中岩土的本构模型只有D-P模型,无法准确的反映土的硬化/软化性质,模拟计算出的结果因此也和实际差别很大。

Abaqus有着丰富的材料模型,超强的非线性分析能力,岩土的模型也很多,因此才转学Abaqus。

Abaqus的cae建模功能还是很好的,但科研课题一般都要进行参数分析,采用cae的建模方法有些不切实际,学了没几天就放弃cae开始学习inp,也是学了一阵子才知道inp不能建立实体模型,只能直接建节点和单元。

复杂的模型inp也无法建立,但采用Python建模就可以解决这个问题。

由于Abaqus的学习资料不多,过了好些日子才知道Abaqus也可以采用Python语言进行建模计算,只是比Ansys的Apdl语言复杂得多,并且除了手册上的Script资料之外,没有较为系统的教程,刚一接触真是让人头痛。

通过查看Simwe论坛上关于Python的帖子,和论坛朋友的帮助,自己在慢慢积累,现在对Python有了一点点了解,算是入了个门。

接触Abaqus也没多久,对python更是一知半解,绝大多数地方根本都不清楚,抽空写一点认识体会主要是给像自己一样刚学习Abqus Python的朋友,能少走一些弯路,节约一些时间。

同时希望大家批评指正、共同讨论、补充。

#--------------------------------------------------------------------------------------------------学习Abaqus/Python基础:Abaqus的cae建模有比较全面的认识;了解一些Python语法知识(大家都不会有太多时间单独学习Python语言本身,只需要有概念了解即可,不懂的地方可以随时查询Python script手册)Abaqus/Python学会使用不太难,可要精通应用还是要付出一定的劳动。

大家所分析的课题专业不同,方向也千差万别,所用到的Abaqus的功能也就有很大的差别,能对自己的工作领域熟练应用就算成功。

Abaqus毕竟只是软件,如何考虑专业知识成功建模才是最困难的。

#--------------------------------------------------------------------------------------------------1. Python与Abaqus2. Abaqus/Python结构3.模型参数分析技巧4.几个命令的体会5.一个Abaqus/Python例子#--------------------------------------------------------------------------------------------------#===========================================================1. Python与Abaqus1.1 Python简介Python是面向对象的语言。

面向对象的语言自己的理解为:语言本身已经定义了许多固定模块,如数学函数、对显示模式的控制、一些对话框的编写等等程序模块,只需要按照程序的指定格式填空即可完成既定任务,格式相对比较固定,因此语言格式看起来非常繁琐,但方便实用能够大量节约程序员的时间。

面向对象语言的使用方式可以比喻为:一棵树分为树干、树枝、细枝和树叶等部分,你要是想得到一个确定位置的树叶(且具大小等属性)只有一个路径可以走即树干-树枝-细枝-树叶,换成面向对象的格式为树干.树枝.细枝.树叶(树叶片数或大小等属性)。

以下是abaqus中Python的一般格式,这些格式都是固定的,我们只需要改变其中的参数即可:mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=0.3)s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=0.3) s.sketchOptions.setValues(decimalPlaces=3, viewStyle=AXISYM)s.setPrimaryObject(option=STANDALONE)s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))Python有着较强的逻辑控制语句如if、for、while等,可以通过循环或条件等语句把复杂且重复的操作变得简单易于操作,也是用参数化编程较cae的最大优势。

1.2 如何学abaqus Python 命令Abaqus 是采用Python语言编制而成,在cae中所有的操作都可以通过Python脚本命令完成(注:好像Python并不能完全取代inp文件,一些材料属性的参数好像要用inp才能赋值)。

☆学会用python reader程序Abaqus cae可以自动生成python文件,存放在工作目录的 abaqus.rpy 文件中,每一步c ae操作都会产生相应的python命令。

可以通过simwe网友ck436ck436 编写的python rea der程序实时读取产生的命令,反复揣摩、领会每个命令,很快就会有所提高,对python 的命令有所领悟。

与cae建模相同,Python建模也分为:part、property、assembly、step、ineraction、l oad、mesh、job等模块,具体每个模块中的建模命令可参考Python reader读取的命令学习,我们只需去记忆常用的Python命令。

以下是python reader程序下载地址。

/viewthread.php?tid=808007&highlight=Python/group/ck436goooglemail/files☆通过修改abaqus.rpy建立自己的脚本文件是一条捷径1.3 Abaqus/Python学习资料关于Python的学习资料非常多,如Swaroop, C.H.著沈洁元译的《简明 Python 教程》就是很好的参考资料。

王纯业的《Python学习笔记》也不错,simwe论坛可以下载到。

另外就是Abaqus手册:Abaqus Scripting User's ManualAbaqus Scripting Reference ManualGetting Started with Abaqus: Interactive EditionAbaqus手册真是冗长,只能是根据自己的课题有选择的查阅。

#===========================================================2. Abaqus/Python结构Abaqus的object model分为session、mdb和odb三个objects,session为视图模块、md b为模型数据模块、odb为数据输入输出模块。

每个object下面又有很多命令分支,直到执行到所需要的具体命令。

以下各图选自Abaqus Scripting User's Manual,更多书面的的解释可以参考abaqus手册。

每个object都像一棵树,要执行某个命令就需要按照python的面向对象的格式进行。

例如:cell4 = mdb.models['block'].parts['crankcase'].cells[4],要把part模块中编号为4的体赋值给cell4,就需通过路径mdb→models→part→cells(4号体属性),其中'block'、'crankcase'、分别是model和part的名字。

在草图Sketch中画线:s = mdb.models[' block '].ConstrainedSketch(name='grid',sheetSize=3.0)s.Line(point1=(-1.275, 0.0), point2=(-1.125, 0.0))s.Line(point1=(1.125, 0.0), point2=(1.275, 0.0))执行任何一条命令都必须按照结构树的格式进行操作。

我们所看到的python脚本繁杂的语句就是这样形成的。

这样大量的命令不能在短时间内掌握,我们只需要根据自己的需要边建立模型边学习就可以了。

a = mdb.models['Model-1'].rootAssemblys = a.instances['Mount-1'].edgesside1Edges = s.findAt(((0.0475, 0.0, 0.0), ))以上三行与下面的句子是等同的,即把findat找到的edges赋值给side1Edges。

分开来写简单明了,大大缩短了语句的长度。

side1Edges = mdb.models['Model-1'].rootAssembly. instances['Mount-1'].edges. fi ndAt(((0.0475, 0.0, 0.0), ))a.Surface(side1Edges=side1Edges, name='Bottom'),这行语句设置side1Edges所对应的edge为名称'Bottom'的surface的set。

#===========================================================3.模型参数分析技巧Python脚本建模的好处就是可以进行参数分析,即改变我们要分析模型的几何尺寸、材料属性等可变参数,对数值模型进行求解计算,从而对所分析的对象有更全面的了解。

1.对自己要进行参数分析的参数赋值:如几何尺寸或材料属性等a1=20,b1=30,c1=40,命名要符合python规则。

2.cae与Python混合建模,不会的命令就利用cae自动生成,用Python reader记录命令然后进行修改,可以弥补不熟悉Python的缺点;3.逐句修改Python脚本,可以去掉一些不必要的语句并在cae中逐句进行验证。

相关文档
最新文档