Abaqus二次开发:局部坐标系的建立与应用

问题描述

在单向复材中,纤维的力学性能往往是横观各向同性的,于是需要规定材料方向。
通常需要新建局部坐标系用于材料方向的定义,而在实际建立坐标系中,坐标系会储存在对应的Part下:
mdb.models[‘Model-1’].parts[‘Part-1’].datums[],但是并不是从datums[0]开始,其中的数字需要根据具体情况确定,因此调用该坐标系存在读取问题

模型构建

模型建立

  1. 建立方形的基体与圆柱纤维两个Part
  2. 定义材料属性(基体使用各向同性面板,纤维使用工程常数面板),创建截面并赋予到对应Part
  3. 创建实例,合并选项中选择保持

此时创建的实例应该是包含材料属性的,如果在创建Part后直接构建实例,又对单独的Part赋予材料截面的话,实例依然不会包含材料属性。
当然,如果按照创建Part后直接构建实例的操作,赋予截面是对实例所生成的Part赋予即可。

Abaqus二次开发:局部坐标系的建立与应用_第1张图片

  1. 局部坐标系建立与材料方向定义
  2. mesh
  3. EasyPBC
    Abaqus二次开发:局部坐标系的建立与应用_第2张图片

局部坐标系建立与材料方向定义

重点部分单独拿出来说一下。

注意此部分应对实例生成的Part操作,而不是一开始的纤维Part
如果是先赋材料再建实例,材料属性可以继承,但是材料方向好像不能继承
因此建议材料方向应在实例生成的Part中定义

# p为建立实例时生成的对应Part
p = mdb.models['Model-1'].parts['UDcomp']
# 新建坐标系point1为x轴上的点,point2为xy平面的点
p.DatumCsysByThreePoints(name='Datum csys-1', coordSysType=CARTESIAN, origin=(
    0.0, 0.0, 0.0), point1=(0.0, 0.0, 1.0), point2=(0.0, 1.0, 0.0))
c = p.cells
# xy存储了纤维的中心坐标与半径,因此使用findAt获取其位置
for cir in xy:
   cells = c.findAt(((cir[0], cir[1], 0.0),))
   region = regionToolset.Region(cells=cells)
   # 经过多次尝试,发现在UDcomp Part中建立的坐标系序号总是纤维的个数+3
   orientation = mdb.models['Model-1'].parts['UDcomp'].datums[len(xy)+3]
   mdb.models['Model-1'].parts['UDcomp'].MaterialOrientation(region=region,
                                                            orientationType=SYSTEM, axis=AXIS_1,
                                                            localCsys=orientation, fieldName='',
                                                            additionalRotationType=ROTATION_NONE, angle=0.0,
                                                            additionalRotationField='', stackDirection=STACK_3)

根据下图可以看到mdb.models[‘Model-1’].parts[‘UDcomp’].datums[]中只有一个元素,而在36根纤维的情况下其为39。
Abaqus二次开发:局部坐标系的建立与应用_第3张图片
在手动操作实验时发现,如果多次建立/删除模型,该数字也会变动。由于脚本不会反复删除重建模型,因此比较稳定。
如果有个函数可以直接获取mdb.models[‘Model-1’].parts[‘UDcomp’].datums[]储存在哪个位置就更为方便了。希望有行业大佬指明。

横观各向同性的材料属性

有五个独立的弹性常数
文献里给了E1E2G12G23v12,1为纤维方向
E2=E3,G12=G13,v12=v13是比较好理解的
v23=E2/(2*G23)-1

你可能感兴趣的:(Abaqus二次开发,python,开发语言)