Python abaqus实现二维裂纹扩展(XFEM)
自己做的一个简单的案例,用python用于abaqus的模拟比较省时间,留作参考
在abaqus中,点击file——run script——运行脚本就可以了,abaqus工作目录下的.rpy文件是abaqus的日志,进行每一步操作也有相应的代码,可以直接拷贝过来用
#!/usr/bin/env/ python
# -*- coding:utf-8 -*-# === 导入必要的模块 ===
from abaqus import *
from abaqusConstants import *
import mesh
import regionToolset
import job
#----------------------------------------------------------------# === 设置参数 ====
modelName = "mixed_mode_2d"length = 3.0
height = 6.0
width = 1.0crack_len = 1.5
crack_y = 0.05 # 裂缝在y方向平移的距离YM = 2.10E+11 # 杨氏模量(Pa)
MU = 0.3 # 泊松比
MAXPS = 2.2E+08 # 损伤开始的最大主应力
DTOL = 0.05 # 损伤容限
GI = 42200.0 # 断裂能
ETA = 1.0 # Power-law的指数#----------------------------------------------------------------# === 创建模型和视图设置 ===Mdb()viewportName = session.Viewport(name=modelName)
viewportName.makeCurrent()
viewportName.maximize()plateModel = mdb.Model(name=modelName)
del mdb.models['Model-1']#----------------------------------------------------------------# === 创建部件,首先是平板部件 ===
plateSketch = plateModel.ConstrainedSketch(name='plateProfile',sheetSize=height)
plateSketch.rectangle(point1=(0.0, -height/2.0),point2=(length,height/2.0))
platePart = plateModel.Part(dimensionality=TWO_D_PLANAR,name='plate',type=DEFORMABLE_BODY)
platePart.BaseShell(sketch=plateModel.sketches['plateProfile'])# === 创建裂缝几何部件 ===
crackSketch = plateModel.ConstrainedSketch(name='crackProfile',sheetSize=height)
crackSketch.Line(point1=(0.0,crack_y),point2=(crack_len,crack_y))
crackPart=plateModel.Part(dimensionality=TWO_D_PLANAR,name='crack',type=DEFORMABLE_BODY)
crackPart.BaseWire(sketch=plateModel.sketches['crackProfile'])#----------------------------------------------------------------# === 创建一些集合(Set)===
platePart.Set(faces=platePart.faces[:],name='ALL')e1 = platePart.edges.findAt(((length/2.0, -height/2.0, 0.0),))
platePart.Set(edges=e1,name='bottom')e1 = platePart.edges.findAt(((length/2.0, +height/2.0, 0.0),))
platePart.Set(edges=e1,name='top')platePart.Set(faces=crackPart.faces[:],name='crack')#----------------------------------------------------------------# === 定义材料和截面属性 ===
plateMat1 = plateModel.Material(name='elas')plateMat1.Elastic(table=((YM,MU),))
plateMat1.MaxpsDamageInitiation(table=((MAXPS,),),tolerance=DTOL)
plateMat1.maxpsDamageInitiation.DamageEvolution(mixedModeBehavior=POWER_LAW, power=ETA, table=((GI,GI,GI),),type=ENERGY)
plateMat1.maxpsDamageInitiation.DamageStabilizationCohesive(cohesiveCoeff=0.001)
plateModel.HomogeneousSolidSection(material='elas',name='solid',thickness=width)#----------------------------------------------------------------# === 赋给材料截面属性和方向 ===
platePart.MaterialOrientation(fieldName='', localCsys=None, orientationType=GLOBAL,region=platePart.sets['ALL'],stackDirection=STACK_3)platePart.SectionAssignment(region=platePart.sets['ALL'],sectionName='solid')#----------------------------------------------------------------# ===网格控制和划分网格===# 单元类型
elemType1 = mesh.ElemType(elemCode=CPE4R, elemLibrary=STANDARD, secondOrderAccuracy=OFF, hourglassControl=DEFAULT, distortionControl=DEFAULT)
elemType2 = mesh.ElemType(elemCode=CPE3, elemLibrary=STANDARD, secondOrderAccuracy=OFF, distortionControl=DEFAULT)
p1 = mdb.models['mixed_mode_2d'].parts['plate']
f = p1.faces
faces = f.getSequenceFromMask(mask=('[#1 ]', ), )
pickedRegions =(faces, )
p1.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2))# 单元划分技术
pickedRegions = f.getSequenceFromMask(mask=('[#1 ]', ), )
p1.setMeshControls(regions=pickedRegions, elemShape=QUAD, technique=STRUCTURED)# 网格种子
ex = 30
ey = 60
e1 = platePart.edges.findAt(( (length/2.0, -height/2.0, 0.0), ))
platePart.seedEdgeByNumber(edges=e1, number=ex)e1 = platePart.edges.findAt(( (length, 0.0, 0.0), ))
platePart.seedEdgeByNumber(edges=e1, number=ey)platePart.generateMesh()
# === 部件部分结束 ===#----------------------------------------------------------------# === 装配 ===
plateModel.rootAssembly.DatumCsysByDefault(CARTESIAN)
plateModel.rootAssembly.Instance(dependent=ON, name='plate_ 1', part=platePart)
plateModel.rootAssembly.Instance(dependent=ON, name='crack_ 1', part=crackPart)# 创建参考点,以用于施加位移边界条件
rp_db = plateModel.rootAssembly.ReferencePoint(point=(length, -height/2.0, 0.0))
plateModel.rootAssembly.features.changeKey(fromName='RP-1', toName='db')#----------------------------------------------------------------# ===创建装配体下的集台(set) ===
v1 = (plateModel. rootAssembly .referencePoints[rp_db.id], )
plateModel.rootAssembly.Set(name='bdisp', referencePoints=v1)# ===装配结束===#----------------------------------------------------------------# === 创建的束方程,以用于施加边界条件 ===
mdb.models['mixed_mode_2d'].Equation(name='ce_bot', terms=((1.0, 'plate_ 1.bottom', 1), (-1.0, 'bdisp', 1)))
#plateModel.Equation(name='ce_bot', terms=((1.0, 'plate_1.bottom',1),(-1.0,'bdisp',1)))#----------------------------------------------------------------# === 创建分析步和输出设置 ===
plateModel.StaticStep(initialInc=0.005,maxInc=0.01, maxNumInc=10000,minInc=1e-09,name='Static', nlgeom=ON, previous='Initial')plateModel.steps['Static']. control. setValues(allowPropagation=OFF,discontinuous=ON,resetDefaultValues=OFF,timeIncrementation=(8.0, 10.0, 9.0,16.0, 10.0, 4.0, 12.0, 20.0, 6.0, 3.0,50.0))mdb.models['mixed_mode_2d'].fieldOutputRequests['F-Output-1'].setValues(variables=('S', 'LE', 'U', 'RF', 'PHILSM', 'STATUSXFEM')) mdb.models['mixed_mode_2d'].HistoryOutputRequest(createStepName='Static',name='H-0utput-2', rebar=EXCLUDE, region=mdb.models[modelName].rootAssembly.sets['bdisp'],sectionPoints=DEFAULT, variables=('U1', 'RF1'))#----------------------------------------------------------------# === 施加边界条件 ===
plateModel. DisplacementBC( amplitude=UNSET, createStepName='Static', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None,name='rp', region=plateModel.rootAssembly.sets['bdisp'], u1=0.0027,u2=UNSET, ur3=UNSET)plateModel. DisplacementBC ( amplitude=UNSET, createStepName='Static', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None,name='bot', region=plateModel.rootAssembly.instances['plate_ 1'].sets['bottom'],u1=UNSET,u2=-0.00162,ur3=UNSET)plateModel. DisplacementBC( amplitude=UNSET, createStepName='Static', distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None,name='top',region=plateModel.rootAssembly.instances['plate_ 1'].sets['top'],u1=-0.0027,u2=0.00162, ur3=UNSET)#----------------------------------------------------------------# === 定义扩充和初始裂纹 ===
plateModel.ContactProperty('contact')
a = mdb.models['mixed_mode_2d'].rootAssembly
crackDomain = a.instances['plate_ 1'].sets['ALL']
a = mdb.models['mixed_mode_2d'].rootAssembly
e1 = a.instances['crack_ 1'].edges
edges1 = e1.getSequenceFromMask(mask=('[#1 ]', ), )
crackLocation = regionToolset.Region(edges=edges1)
a = mdb.models['mixed_mode_2d'].rootAssembly
a.engineeringFeatures.XFEMCrack(name='enrl', crackDomain=crackDomain, interactionProperty='contact', crackLocation=crackLocation)
#----------------------------------------------------------------# ===创建Job并提交===
mdb.Job(model=modelName, name='mixed_mode_xfem_cpe4',description='Crack propagation in a plate under mixed-mode loading (XFEM)')
mdb.jobs['mixed_mode_xfem_cpe4'].submit()
#----------------------------------------------------------------
Python abaqus实现二维裂纹扩展(XFEM)相关推荐
- 如何用python制作动态二维码,提升表白成功率?
来源:凹凸数据 本文约1000字,建议阅读5分钟. 本文教你用python制作动态二维码,助你表白成功! 关注数据派THU(DatapiTHU)后台回复"20200520"获取完整 ...
- 深入浅出python机器学习_如何用python画(绘制)二维函数(二维图)?
参考文档 python 如何绘制二维函数? from matplotlib import pyplot as plt import numpy as np low=lambda x:10000 if ...
- Python+OpenCV:二维直方图(2D Histograms)
Python+OpenCV:二维直方图(2D Histograms) ################################################################# ...
- 用Python玩转二维码
二维码(Quick Response Code)几乎已经渗透到我们日常生活的每一个角落. 二维码是 1994 年发明的一种矩阵条形码. 实际上,二维码通常包含指向网站或应用程序的定位器.标识符或跟踪器 ...
- Python生成动态二维码,运用神库:qrcode
一.介绍 1.1 二维码 二维码又称二维条码,常见的二维码为 QR Code,QR 全称 Quick Response.是一个近几年来移动设备上超流行的一种编码方式,在现在的生活中二维码随处可见.我们 ...
- python myqr制作二维码生成器_用Python生成动态二维码,只要5行代码,拥有你的个性二维码!...
原标题:用Python生成动态二维码,只要5行代码,拥有你的个性二维码! 前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. P ...
- python随机生成二维列表_对python产生随机的二维数组实例详解
对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...
- python:实现9×9二维数组数独算法(附完整源码)
python:实现9×9二维数组数独算法 from __future__ import annotationsMatrix = list[list[int]]# assigning initial v ...
- Python qrcode制作二维码
Python制作二维码 Python传言是万能语言,那么,今天就用Python做个二维码 准备 先下载qrcode pip install qrcode 下不了的可以参照我写的pip错误解决方法 里面 ...
最新文章
- React-native 官方 demo
- 【转】编程思想之消息机制
- python语言remove_慎用python的pop和remove方法
- IDA __OFSUB__ 测试
- vim编辑器常用命令总结
- ARM栈帧与编译选项
- mysql表级锁和行级锁_MySQL表级锁和行级锁
- 谷歌免费GPU,在线Jupyter notebook深度学习环境
- 应用随机过程概率模型导论(9th 英文版) Sheldon M.Ross 共享
- winform 企业ERP管理系统源码 c# C/S
- FPGA学习积累之AM调制解调(解调部分没搞太明白)
- 系统时间无法同步 rpc服务器不可用,win7系统时间同步出错RPC服务器不可用的解决手段...
- 特拉华大学计算机科学怎么样,2020年特拉华大学排名TFE Times美国最佳计算机科学硕士专业排名第84...
- PythonOperator、BashOperator以及Xcom使用
- mysqllinux操作,万字解析!
- 轻松快捷的安装Testlink,终于可以轻松搞定!
- 商用在线客服软件测试报告
- Drools入门案例(3/6)
- 每日蓝桥-基础练习 字母图形
- 看动画,拿 Offer:大厂算法面试真题全解析