四点弯曲试验是测量材料弯曲性能的一种试验方法。将条状试样平放于弯曲试验夹具中,形成简支梁形式,支撑试样的两个下支撑点间的距离视试样长度可调,试样上方有两个对称的加载点。
如何在 Abaqus 中执行 Python 文件?
如下文章中的代码合成一份 py 文件,并将其命名为 Modele2D_CP.py
,放入C:/temp/TP_provir/
文件夹下。在 Abaqus 最下方的命令行中输入下列的命令即可:
execfile('C:/temp/TP_provir/Modele2D_CP.py', __main__.__dict__)
如下文章中的代码为一个在 Abaqus 中的 Python 文件的基本组成结构。当使用 GUI 操作 Abaqus 之后,会在Abaqus的安装过程中生成的C:/temp
文件夹(File –> Set Work Directory )中的.rec
文件自动生成相关的 Python 代码,下方的 Python 代码均能在其中找到(ctrl+F)。
在 Abaqus 中使用 Python 执行相关的模拟能够更快捷地修改重复的参数修改操作,甚至是循环执行某些步骤。
导入库文件
from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *
Mdb() # reinitialise la base de donnees / le modele
参数设置
比如材料和试件的外观参数:
ndiv=3
L1, B1, h1 = 100., 40., 10. #材料的长宽高
ecinf, ecsup = 80., 60. #下支撑和上支撑的距离
esize1 = h1/ndiv #网格的大小
dens1, young1, poisson1 = 7.85e-09, 210000.0, 0.3 #定义材料:密度、杨氏模量、泊松比
nmodes, uimp1 = 10, -10.
jobname1= 'tp_provir_coque' + str(ndiv) #给生成的job取个名字
绘制试件的外观
下列为 GUI 的操作步骤(下同):
-
Create Part
- 2D Planer –> Deformable –> Shell
- Create lines 划线或者使用其他工具画草图 –> add constraint 添加约束 –> add dimension 画尺寸
下列的代码将会画出一个二维的平面模型:
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=L1)
s.setPrimaryObject(option=STANDALONE)
s.Line(point1=(0.0, 0.0), point2=(ecinf/2., 0.0))
s.Line(point1=(ecinf/2., 0.0), point2=(L1/2., 0.0))
s.Line(point1=(L1/2., 0.0), point2=(L1/2., h1))
s.Line(point1=(L1/2., h1), point2=(ecsup/2., h1))
s.Line(point1=(ecsup/2., h1), point2=(0.0, h1))
s.Line(point1=(0.0, h1), point2=(0.0, 0.0))
p = mdb.models['Model-1'].Part(name='Sample', dimensionality=TWO_D_PLANAR, type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Sample'];
p.BaseShell(sketch=s);
s.unsetPrimaryObject()
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
创建材料
- 在 Module 选择 Property 模块
- Create Material 创建材料
- General > Density : masse volumique 设置密度
- Mechanical > Elasticity > Elastic 设置杨氏模量、泊松比
mdb.models['Model-1'].Material(name='steel')
mdb.models['Model-1'].materials['steel'].Density(table=((dens1, ), ))
mdb.models['Model-1'].materials['steel'].Elastic(table=((young1, poisson1), ))
Create section
- 在 Module 选择 Property 模块
- Create Section 创建截面
- Solid –> Homogeneous –> 设置材料和厚度(比如厚度为 B1 = 40mm)
mdb.models['Model-1'].HomogeneousSolidSection(material='steel', name='sec2D', thickness=B1)
Assign section
- Assign Section
p = mdb.models['Model-1'].parts['Sample'];
p.SectionAssignment(offset=0.0, sectionName='sec2D', thicknessAssignment=FROM_SECTION,
offsetField='', offsetType=MIDDLE_SURFACE, region=(p.faces.getByBoundingBox(),) )
Create assembly
- Module Assembly –> Create assembly
p = mdb.models['Model-1'].parts['Sample'];
mdb.models['Model-1'].rootAssembly.DatumCsysByDefault(CARTESIAN)
mdb.models['Model-1'].rootAssembly.Instance(dependent=ON, name='Sample1',part=p)
Create step
- Module Step –> Create step
- General –> Static, general
- Linear perturbation –> Frequency –> Lanczos –> Number of eigenvalues requested: Value 10
mdb.models['Model-1'].FrequencyStep(name='modal1', numEigen=nmodes, previous='Initial')
mdb.models['Model-1'].StaticStep(name='loading1', previous='modal1')
Create loads
创建负载:
- 打开 Module Load
- create load 创建负载
- 由于测试模型为对称结构,所以模型只要做一半就可以了,在这里需要加上Y轴方向上的边界条件。 Create boundary condition 创建边界条件 –> initial –> Symmetry / Antisymmetry / Encastre
- create boundary condition 创建边界条件 –> initial –> Displacement / Rotation (下方支撑)–> 选择上一节中 initial 的那个 step –> 在 U2 方向(y轴)增加支撑。
- create boundary condition 创建边界条件 –> initial –> Displacement / Rotation –> 选择上一节中 static 的那个 step –> 在 U2 方向(y轴)有向下的挤压。
a=mdb.models['Model-1'].rootAssembly.instances['Sample1']
mdb.models['Model-1'].DisplacementBC(amplitude=UNSET, createStepName='Initial',
distributionType=UNIFORM, fieldName='', localCsys=None, name='cinf',
region=(a.vertices.getByBoundingBox(xMin=0.99*ecinf/2., xMax=1.01*ecinf/2.),), u1=UNSET, u2=SET, ur3=UNSET)
mdb.models['Model-1'].XsymmBC(createStepName='Initial', localCsys=None, name='symX',
region=(a.edges.getByBoundingBox(xMax=0.01*ecinf/2.),))
mdb.models['Model-1'].DisplacementBC(amplitude=UNSET, createStepName='loading1',
distributionType=UNIFORM, fieldName='', fixed=OFF, localCsys=None, name='uimp1',
region=(a.vertices.getByBoundingBox(xMin=0.99*ecsup/2., xMax=1.01*ecsup/2.),),
u1=UNSET, u2=uimp1, ur3=UNSET)
Create mesh
创建网格:
- 打开 Module mesh
- Seed Part –> 输入网格大小 –> 应用
- Assign Element Type –> Standard –> Plane Stress
- Mesh Part
p=mdb.models['Model-1'].parts['Sample']
p.seedPart(deviationFactor=0.1, minSizeFactor=0.1, size=esize1)
p.setElementType(regions=(p.faces.getByBoundingBox(),), elemTypes=(
ElemType(elemCode=CPS4, elemLibrary=STANDARD),
ElemType(elemCode=CPS3,elemLibrary=STANDARD, secondOrderAccuracy=OFF, distortionControl=DEFAULT)) )
p.generateMesh()
Create job
创建工作:
- 打开 Module job
- Create job –> 在左边栏下方的 job上右击 –> Submit 提交
mdb.models['Model-1'].rootAssembly.regenerate()
mdb.Job(atTime=None, contactPrint=OFF, description='', echoPrint=OFF,
explicitPrecision=SINGLE, getMemoryFromAnalysis=True, historyPrint=OFF,
memory=90, memoryUnits=PERCENTAGE, model='Model-1', modelPrint=OFF, name=
'Job-1', nodalOutputPrecision=FULL, queue=None, resultsFormat=ODB, scratch=
'', type=ANALYSIS, userSubroutine='', waitHours=0, waitMinutes=0)
mdb.jobs['Job-1'].submit(consistencyChecking=OFF)
Visualisation
查看结果:
- 打开 Module Visualisation
- Plot deformed shape
- Plot Contours on deformed shape
其中:
- U – displacement 位移。U1、U2、U3 和 UR1、UR2、UR3 分别代表 xyz 移动和转动的自由度。(123 相当于 xyz)
- S – stress 应力。S33 代表的是壳单元法线方向应力,S11 S22 代表壳单元面内的应力。
- RF – 支反力
Abaqus 里的单位
Abaqus 中没有固定的单位制,所以需要为各个量选用相应匹配的单位,最后计算出的结果的单位与所采用的单位制相对应。Abaqus 中常用的单位制如下表: