找回密码
 注册
Simdroid-非首页
查看: 12823|回复: 153

[二次开发] Python二次开发程序详解(更新@9楼)

[复制链接]
发表于 2009-3-7 22:55:01 | 显示全部楼层 |阅读模式 来自 德国
本帖最后由 zsq-w 于 2009-10-13 13:07 编辑

######################################
##  Fundamentschwingungsstudie      ##
##  nur geeignet fuer ABAQUS 6.4-1  ##
##    erstellt von D.Chen in 2009   ##
######################################
#开头的为注释行.
第一步, 建立建模环境, 这一步中py将从abaqus中导入建模所需的所有程序模块.
from part import *
接下来定义草图环境
mdb.models['Model-1'].Sketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].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-1'].sketches['__profile__'].ObliqueConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))
本句语句设定轴对称模型的对称轴线位置
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(0.0, 0.0),point2=(40.0, -40.0))
该语句绘制矩形, 从点0,0 至点40,-40
mdb.models['Model-1'].Part(dimensionality=AXISYMMETRIC, name='Boden', type=DEFORMABLE_BODY)
定义模型为轴对称, 名字为boden,为可变形体
mdb.models['Model-1'].parts['Boden'].BaseShell(sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
绘图完成不要忘记收回建模环境所占的内存


第二节: 材料定义      --------------------                 2楼
第三节: 装配             --------------------                 3楼
第四节: 分析步定义   --------------------                 4楼
第五节: 接触定义      --------------------                 5楼
第六节: 荷载边界定义 -----------------                   6楼
第七节: 网格划分控制 ------------------                  7楼
第八节, 任务提交及杂项功能   --------                  8楼
关于如何在python中提交多个任务的问题            9楼

评分

2

查看全部评分

 楼主| 发表于 2009-3-9 16:10:56 | 显示全部楼层 来自 德国
Simdroid开发平台
第四节, 定义分析步
from step import *
象其它步一样, 先导入分析步要用到的模块
mdb.models['Model-1'].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个时间单位, 前一步为Initial
mdb.models['Model-1'].fieldOutputRequests['F-Output-1'].setValues(variables=('U',))
定义输出到ODB文件的数据, 这里只定义了位移输出
mdb.models['Model-1'].fieldOutputRequests['F-Output-1'].setValues(frequency=1)
定义位移输出的频率为每步都输出
mdb.models['Model-1'].steps['Step-1'].Restart(frequency=1, overlay=ON)
定义重启动析, 每一步记录, 只记录最后一次的正确状态
回复 1 不支持 0

使用道具 举报

 楼主| 发表于 2009-3-8 03:05:04 | 显示全部楼层 来自 德国
第二节, 材料定义
from material import *
from section import *
从ABAQUS提供的接口中导入材料库和组件库
mdb.models['Model-1'].Material(name='Boden')
定义材料名
mdb.models['Model-1'].materials['Boden'].Density(table=((2000.0, ), ))
定义材料密度
mdb.models['Model-1'].materials['Boden'].Elastic(table=((210546.3, 0.3333), ))
定义材料线弹性模量和泊松比, 其它的材料, 如弹塑性, 粘弹性材料均对应不同的对象函数.
mdb.models['Model-1'].HomogeneousSolidSection(material='Boden', name='boden',thickness=1.0)
mdb.models['Model-1'].parts['Boden'].assignSection(region=Region(faces=mdb.models['Model-1'].parts['Boden'].faces[0:1]), sectionName='boden')
设定组件为坐标无关性材料,厚度为单位厚度, 并将属性附给所用的组件
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-8 03:13:17 | 显示全部楼层 来自 德国
第三节, 装配
from assembly import *
首先, 导入装配所用到的对象
mdb.models['Model-1'].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-1'].rootAssembly.Instance(name='Boden-1', part=mdb.models['Model-1'].parts['Boden'])
生成草图对像boden的实体, 名字叫Boden-1. 无偏移插入
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-10 17:55:44 | 显示全部楼层 来自 德国
第五节, 定义接触
from interaction import *
依然是先导入所用的模块
mdb.models['Model-1'].rootAssembly.PartitionEdgeByParam(edges=(mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[3], ), parameter=0.975)
在上部即第3面的97.5%的地方设定一个点, 用于定义接触
mdb.models['Model-1'].ContactProperty('IntProp-1')
定义接触属性名
mdb.models['Model-1'].interactionProperties['IntProp-1'].TangentialBehavior(formulation=FRICTIONLESS)
mdb.models['Model-1'].interactionProperties['IntProp-1'].NormalBehavior(allowSeparation=OFF, augmentedLagrange=OFF, pressureOverclosure=HARD)
定义接触特性,为无摩擦硬接触不允许分开
mdb.models['Model-1'].SurfaceToSurfaceContactStd(adjustMethod=NONE,
    createStepName='Initial', interactionProperty='IntProp-1', master=Region(
    side1Edges=mdb.models['Model-1'].rootAssembly.instances['fun-1'].edges[0:1])
    , name='Int-1', slave=Region(
    side1Edges=mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[4:5])
    , sliding=FINITE)
这一句是建立接触对, 分别为两个面上的一条边, 这里边的定义由ABAQUS内定, 具体可以查阅参考手册.
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-11 16:39:05 | 显示全部楼层 来自 德国
第六节, 荷载边界定义
from load import *
mdb.models['Model-1'].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-1'].Pressure(amplitude='Fourier', createStepName='Step-1', distribution=UNIFORM, magnitude=50.0, name='Load-1', region=Region(
    side1Edges=mdb.models['Model-1'].rootAssembly.instances['fun-1'].edges[2:3]))
定义压强, 设定加载的分析步,区域及放大系数
mdb.models['Model-1'].DisplacementBC(amplitude=UNSET, createStepName='Initial',distribution=UNIFORM, localCsys=None, name='BC-1', region=Region(
    edges=mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[0:1]+\mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[2:3]+\mdb.models['Model-1'].rootAssembly.instances['fun-1'].edges[3:4]), u1=SET,u2=UNSET, ur3=UNSET)
mdb.models['Model-1'].DisplacementBC(amplitude=UNSET, createStepName='Initial', distribution=UNIFORM, localCsys=None, name='BC-2', region=Region(
    edges=mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[1:2]), u1=UNSET, u2=SET, ur3=UNSET)
设定边界位移为0的边界条件, 注意语法中对象相加的方法.
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-11 16:48:44 | 显示全部楼层 来自 德国
第七节, 网格划分控制
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-1'].rootAssembly
f1 = a1.instances['Boden-1'].faces
faces1 = 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-1'].rootAssembly
f1 = a1.instances['fun-1'].faces
faces1 = f1[0:1]
regions =(faces1, )
a1.setElementType(regions=regions, elemTypes=(elemType1, elemType2))
定义其中一个物体的网格为一次4结点单元,如果其中有无法划分成四边形单元的情况, 则用三角形一次3结点单元.
mdb.models['Model-1'].rootAssembly.seedPartInstance(regions=(mdb.models['Model-1'].rootAssembly.instances['fun-1'], ), size=0.5)
mdb.models['Model-1'].rootAssembly.seedPartInstance(regions=(mdb.models['Model-1'].rootAssembly.instances['Boden-1'], ), size=1)
定义网格划分全局单元大小.
mdb.models['Model-1'].rootAssembly.generateMesh(regions=(mdb.models['Model-1'].rootAssembly.instances['Boden-1'],mdb.models['Model-1'].rootAssembly.instances['fun-1']))
按照定义划分单元

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-16 17:46:58 | 显示全部楼层 来自 德国
本帖最后由 zsq-w 于 2009-10-13 13:11 编辑

第八节, 任务提交及杂项功能
mdb.models.changeKey(fromName='Model-1', 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()
提交任务

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-20 16:13:12 | 显示全部楼层 来自 德国
关于如何在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了

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-3-28 22:39:28 | 显示全部楼层 来自 广东深圳
楼主,请问如何用python提取odb中的单元应力,进行处理后再将处理得到的单元应力输入到odb中!非常感谢
回复 不支持

使用道具 举报

 楼主| 发表于 2009-3-29 03:22:40 | 显示全部楼层 来自 德国
具体请查阅
Abaqus Scripting Reference Manual 31.6 和 31.7
回复 不支持

使用道具 举报

发表于 2009-4-3 15:34:58 | 显示全部楼层 来自 福建福州
请问一下 abaqus中的很多对象和对应的方法 是不是都可以在Abaqus Scripting Reference Manual 中找到 好像里面也不是说得很清楚啊
回复 不支持

使用道具 举报

发表于 2009-4-21 18:13:47 | 显示全部楼层 来自 江苏镇江
还有一个问题,怎么用python实现‘set’的设置?
回复 不支持

使用道具 举报

发表于 2009-4-22 15:19:29 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢,学习中!
回复 不支持

使用道具 举报

发表于 2009-4-27 14:26:30 | 显示全部楼层 来自 陕西西安
版大,请问如何读取后处理第一主应力,第二主应力,第二主应力的值,并进行一定的计算啊,比如云图显示变量ud=2(σ2-σ3)/(σ1-σ3)-1.
回复 不支持

使用道具 举报

发表于 2009-4-28 14:58:18 | 显示全部楼层 来自 黑龙江哈尔滨
谢谢楼主了
回复 不支持

使用道具 举报

发表于 2009-4-29 07:51:59 | 显示全部楼层 来自 北京
谢谢了!
回复 不支持

使用道具 举报

发表于 2009-5-2 21:40:51 | 显示全部楼层 来自 上海徐汇区
好贴 谢谢分享
回复 不支持

使用道具 举报

发表于 2009-5-3 18:34:47 | 显示全部楼层 来自 陕西西安
不错,学习中!
回复 不支持

使用道具 举报

发表于 2009-5-7 09:41:44 | 显示全部楼层 来自 上海
目前正在使用python座前处理,感谢楼主提供的有参考价值的资料!!

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 13:28 , Processed in 0.047414 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表