AbqVoronoi插件教程[二維梯度晶體模型]

1. 二維梯度模塊界面

AbqVoronoi插件教程[二維梯度晶體模型]的圖1

圖1.1 二維梯度晶體模型生成界面

2. 輸入?yún)?shù)說明

      長方體尺寸參數(shù)[Box Size],矩形大小;

      分布方式[Distribution Method],可選項①Ramp, ②Pow2, ③UDF;

      尺寸限制[Size Limit],最小/最大尺寸限制或文件路徑;

      實體晶界厚度參數(shù)[Gap,默認(rèn)0: 為不生成實體晶界];

      是否為每一個晶粒創(chuàng)建單獨的Set[Cell Set];

3. 常用UDF分布代碼

3.1 自帶Ramp分布

      插件自帶的Ramp選項表示從上至下晶粒尺寸線性變化,具體實現(xiàn)代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖2

圖1.2 二維Ramp分布梯度晶體模型

3.2 自帶Pow2分布

      插件自帶的Pow2選項表示從上至下晶粒尺寸平方變化,具體實現(xiàn)代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖3

圖1.3 二維Pow2分布梯度晶體模型

3.3 中間漸變分布

      中間漸變分布是指晶粒尺寸從模型的中間向兩端線性變化,具體實現(xiàn)代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖4

圖1.4 二維中間漸變分布梯度晶體模型

3.4 輻射漸變分布1

      輻射漸變分布是指晶粒尺寸沿中心點向四周漸變,具體實現(xiàn)代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖5

圖1.5 二維輻射分布梯度晶體模型

3.5 輻射漸變分布2

      將3.4節(jié)代碼中的中心點位置調(diào)整到Box的一個角點上,可得到另一種輻射分布,調(diào)整后的代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖6

圖1.6 二維輻射分布梯度晶體模型

3.6 輻射漸變分布3

      將3.4節(jié)代碼中的中心點位置調(diào)整到Box的底邊的中點上,可得到另一種輻射分布,調(diào)整后的代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖7

圖1.7 二維輻射分布梯度晶體模型

3.7 輻射疊加分布

      將3.4節(jié)代碼中的中心點位置調(diào)整到Box的4個角點和中心點上,晶粒尺寸取5個輻射分布場的最小值,可得到輻射疊加分布,調(diào)整后的代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖8

圖1.8 二維輻射疊加分布梯度晶體模型

3.8 分層分布

      可以使用梯度模塊來創(chuàng)建分層模型(建議使用插件自帶的分層模塊,生成速度和精度都高于梯度模塊),示例創(chuàng)建雙層模型,分為上下兩層,具體代碼如下:

#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))

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

AbqVoronoi插件教程[二維梯度晶體模型]的圖9

圖1.9 二維分層分布梯度晶體模型

完整插件功能介紹:


登錄后免費查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

2
2