Abaqus Voronoi晶体模型插件[二维梯度模块教程]

1. 二维梯度晶体模块界面

图片

                                                       图1.1 二维梯度模块界面

2. 输入参数说明

    (1) 长方体尺寸参数[Box Size],矩形大小;

    (2) 分布方式[Distribution Method],可选项①Ramp, ②Pow2, ③UDF;

    (3) 尺寸限制[Size Limit],最小/最大尺寸限制或文件路径;

    (4) 实体晶界厚度参数[Gap,默认0: 为不生成实体晶界];

    (5) 是否为每一个晶粒创建单独的Set[Cell Set];

3. 常用UDF分布代码

3.1 自带Ramp分布

    插件自带的Ramp选项表示从上至下晶粒尺寸线性变化,具体实现代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    yMin, yMax = 0.0, 50.0
    sizeLimit = [2.0, 6.0]
    
    k = (sizeLimit[1] - sizeLimit[0]) / (yMax - yMin)
    size = k * (y - yMin) + sizeLimit[0]
    return max(size, 1E-5)
    
if __name__ == "__main__":
    print(getSize(0.0, 25.0, 0.0))

    使用上面代码生成的模型:

图片

                                                  图1.2 二维Ramp分布梯度模型

3.2 自带Pow2分布

    插件自带的Pow2选项表示从上至下晶粒尺寸平方变化,具体实现代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    yMin, yMax = 0.0, 50.0
    sizeLimit = [2.0, 6.0]
    
    k = (sizeLimit[1] - sizeLimit[0]) / (yMax - yMin)**2
    size = k * (y - yMin) ** 2 + sizeLimit[0]
    return max(size, 1E-5)

if __name__ == "__main__":
    print(getSize(0.0, 25.0, 0.0))

    使用上面代码生成的模型:

图片

                                                 图1.2 二维Pow2分布梯度模型

3.3 中间渐变分布

    中间渐变分布是指晶粒尺寸从模型的中间向两端线性变化,具体实现代码如下:​​

#coding:utf-8
import math

def getSize(x, y, z):
    yMin, yMax = 0.0, 50.0
    sizeLimit = [1.0, 4.0]
    
    yMid = (0.5*(yMax - yMin) + yMin)    
    k = 2.0*(sizeLimit[0] - sizeLimit[1]) / (yMax - yMin)
    
    size = k * abs(y - yMid) + sizeLimit[1]
    
    return max(size, 1E-5)
    
if __name__ == "__main__":
    print(getSize(0.0, 25.0, 0.0))

    使用上面代码生成的模型:

图片

                                                    图1.3 二维中间渐变分布梯度模型

3.4 辐射渐变分布1

     辐射渐变分布是指晶粒尺寸沿中心点向四周渐变,具体实现代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    # center point
    xc = 25.0
    yc = 25.0
    zc = 0.0
    
    initSize = 0.25    # the grain size of center point
    incrRatio = 0.15   # the rate of increase in size per unit length
    
    # linear growth: initSize + incrRatio * sqrt((x - xc)^2 + (y - yc)^2 + (z - zc)^2)
    dist = math.sqrt((x - xc)**2 + (y - yc)**2 + (z - zc)**2)
    incrSize = incrRatio * dist
    
    size = initSize + incrSize
    
    return max(size, 1E-5)

if __name__ == "__main__":
    print(getSize(0.0, 0.0, 0.0))

    使用上面代码生成的模型:

图片

                                                       图1.4 二维辐射分布梯度模型

3.5 辐射渐变分布2

    将3.4节代码中的中心点位置调整到Box的一个角点上,可得到另一种辐射分布,调整后的代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    # center point
    xc = 0.0
    yc = 0.0
    zc = 0.0
    
    initSize = 0.25    # the grain size of center point
    incrRatio = 0.1    # the rate of increase in size per unit length
    
    # linear growth: initSize + incrRatio * sqrt((x - xc)^2 + (y - yc)^2 + (z - zc)^2)
    dist = math.sqrt((x - xc)**2 + (y - yc)**2 + (z - zc)**2)
    incrSize = incrRatio * dist
    
    size = initSize + incrSize
    
    return max(size, 1E-5)

if __name__ == "__main__":
    print(getSize(0.0, 0.0, 0.0))

    使用上面代码生成的模型:

图片

                                                       图1.5 二维辐射分布梯度模型

3.6 辐射渐变分布3

    将3.4节代码中的中心点位置调整到Box的底边的中点上,可得到另一种辐射分布,调整后的代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    # center point
    xc = 25.0
    yc = 0.0
    zc = 0.0
    
    initSize = 0.25    # the grain size of center point
    incrRatio = 0.1    # the rate of increase in size per unit length
    
    # linear growth: initSize + incrRatio * sqrt((x - xc)^2 + (y - yc)^2 + (z - zc)^2)
    dist = math.sqrt((x - xc)**2 + (y - yc)**2 + (z - zc)**2)
    incrSize = incrRatio * dist
    
    size = initSize + incrSize
    
    return max(size, 1E-5)

if __name__ == "__main__":
    print(getSize(0.0, 0.0, 0.0))

    使用上面代码生成的模型:

图片

                                                         图1.6 二维辐射分布梯度模型

3.7 辐射叠加分布

    将3.4节代码中的中心点位置调整到Box的4个角点和中心点上,晶粒尺寸取5个辐射分布场的最小值,可得到辐射叠加分布,调整后的代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    # center point
    points = [[0.0, 0.0, 0.0], 
              [50.0, 0.0, 0.0], 
              [0.0, 50.0, 0.0], 
              [50.0, 50.0, 0.0], 
              [25.0, 25.0, 0.0]]
    
    initSize = 0.25    # the grain size of center point
    incrRatio = 0.15   # the rate of increase in size per unit length
    
    allSize = []
    
    for p in points:
        # linear growth: initSize + incrRatio * sqrt((x - xc)^2 + (y - yc)^2 + (z - zc)^2)
        dist = math.sqrt((x - p[0])**2 + (y - p[1])**2 + (z - p[2])**2)
        incrSize = incrRatio * dist
        allSize.append(initSize + incrSize)
    
    size = min(allSize)
    
    return max(size, 1E-5)

if __name__ == "__main__":
    print(getSize(0.0, 0.0, 0.0))

    使用上面代码生成的模型:

图片

                                                 图1.7 二维辐射叠加分布梯度模型

3.8 分层分布

    可以使用梯度模块来创建分层模型(建议使用插件自带的分层模块,生成速度和精度都高于梯度模块),示例创建双层模型,分为上下两层,具体代码如下:

#coding:utf-8
import math

def getSize(x, y, z):
    yMid = 25.0
    sizeLimit = [2.0, 4.0]
    
    if y > yMid:
        size = sizeLimit[1]
    else:
        size = sizeLimit[0]
    
    return max(size, 1E-5)

if __name__ == "__main__":
    print(getSize(0.0, 25.0, 0.0))

    使用上面代码生成的模型:

图片

                                                     图1.8 二维分层分布梯度模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值