四点弯曲试验是测量材料弯曲性能的一种试验方法。将条状试样平放于弯曲试验夹具中,形成简支梁形式,支撑试样的两个下支撑点间的距离视试样长度可调,试样上方有两个对称的加载点。

如何在 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 中常用的单位制如下表:

类似文章

发表回复

您的电子邮箱地址不会被公开。