abaqus 空間ランダム フィールド削減

ここ数日の手探りの末、ついに乱数場の強度低下が実現しました.コードを直接アップロードしてください.当分の間、説明は詳しく説明しません.基本的な説明はコードにあります.主なアイデアは次のとおりです. 1. 単位の数を取得します 2. 単位に従って、
数量
は材料の数を定義します
3. 単位の数に従ってセクションの数を設定します
4. 最後に、同じ数の要素セットを設定して
効果を生成します:
ここに画像の説明を挿入
もちろん、材料パラメータの内部摩擦角減少式が間違っているため、ここに正しい減少式を添付します。

np.round(np.arctan((np.tan(chi1_phi*(np.pi/180))/zhejian[i]))*(180/np.pi),10)

また、ここでのランダム式は、空間ランダム理論を考慮していません. ここでは、みんなにそれを示すだけです. これ以上は言いません. 一生懸命頑張ります. 1. 数に従ってランダムフィールドを生成する必要があります
.構築した数値シミュレーションモデルの単位.
ここでは、各行のデータはタプルとして保存され、各行のデータが最初に取得され、各行の最初の値が取得されます。

'''获取单元序号'''
def Unitnumber(Partitions,filename):
    with open(filename,mode='r') as txtfile:
        data=[]
        line=txtfile.readlines()
        for i,rows in enumerate(line):
            if i in range(0,len(line)):
                data.append(rows.strip('\n'))
        for i in range(len(data)):
            a=data[i].split(',')
            for j in range(len(a)):
                b=a[j].split(',')
                Partitions.append(int(b[0]))
    return Partitions

2. ランダム場の生成
乱数長の生成式は正規分布のランダムサンプリングとし、サンプル数はグリッド数、np.random.normal() の 3 つのパラメータは平均、標準偏差を表します。 、およびそれぞれサンプリング数

randon_c=np.random.normal(6,0.2,len(elementlist))
randon_phi=np.random.normal(20,0.2,len(elementlist))

3. inp ファイルの規則に従って、生成されたランダム パラメータをユニットに割り当てて、
モデルと対応する部分を読み取る必要があります。

mymodel = mdb.models['Model-1']#获取模型
mypart = mdb.models['Model-1'].parts['Part-1']#获取part

mypart.elements は部品の下のユニットを参照し、各ユニットはシリアル番号に対応します

for ele_index in mypart.elements:
    ele = ele_index.label#单元序号

序数で材料名を定義し、要素の材料名を割り当てます

Matname='Material-'+str(ele)#材料名
mySoil= mymodel.Material(name=Matname)

モデルにかさ密度と弾性を割り当てる

mySoil.Density(table=((2.0,),))
        mySoil.Elastic(table=((1000000.0, 0.35),))

各要素に内部摩擦角の値を割り当てます

mySoil.MohrCoulombPlasticity(
            dependencies=1, table=((randon_phi[m]/0.5, 0.0, 0.5), (randon_phi[m]/0.75, 0.0, 0.75), (
                randon_phi[m]/1, 0.0, 1.0), (randon_phi[m]/1.25, 0.0, 1.25), (randon_phi[m]/1.5, 0.0, 1.5), (
                                       randon_phi[m]/1.75, 0.0, 1.75), (randon_phi[m]/2.0, 0.0, 2.0)))

各セルに結合値を割り当てます

 mySoil.mohrCoulombPlasticity.MohrCoulombHardening(
            dependencies=1, table=((randon_c[m]/0.5, 0.0, 0.5), (randon_c[m]/0.75, 0.0, 0.75), (randon_c[m]/1, 0.0, 1.0),
                                   (randon_c[m]/1.25, 0.0, 1.25), (randon_c[m]/1.5, 0.0, 1.5), (randon_c[m]/1.75, 0.0, 1.75), (randon_c[m]/2,0.0, 2.0)))

材料割り当てエリア

mySection=mymodel.HomogeneousSolidSection(name=sectionname,  material=Matname, thickness=None)#创建section
        # elements=mypart.elements[0]

セットポイントセット

setname='myset'+str(ele)
        region=mypart.Set(elements=mypart.elements[ele-1:ele], name=setname)
sectionname='Section-'+str(ele)

最後に、組み立て

 mypart.SectionAssignment(region=region, sectionName=sectionname)
#  -*-coding:utf8 -*-
import numpy as np
mymodel = mdb.models['Model-1']#获取模型
mypart = mdb.models['Model-1'].parts['Part-1']#获取part
soil=[]
'''获取单元序号'''
def Unitnumber(Partitions,filename):
    with open(filename,mode='r') as txtfile:
        data=[]
        line=txtfile.readlines()
        for i,rows in enumerate(line):
            if i in range(0,len(line)):
                data.append(rows.strip('\n'))
        for i in range(len(data)):
            a=data[i].split(',')
            for j in range(len(a)):
                b=a[j].split(',')
                Partitions.append(int(b[0]))
    return Partitions
filename='E:\\abaqus\elementlist.txt'
elementlist=Unitnumber(soil,filename)
'''生成随机场'''
randon_c=np.random.normal(6,0.2,len(elementlist))
randon_phi=np.random.normal(20,0.2,len(elementlist))
m=0
for ele_index in mypart.elements:
    ele = ele_index.label
    if ele in elementlist:
        Matname='Material-'+str(ele)#材料名
        mySoil= mymodel.Material(name=Matname)
        mySoil.Density(table=((2.0,),))
        mySoil.Elastic(table=((1000000.0, 0.35),))
        mySoil.MohrCoulombPlasticity(
            dependencies=1, table=((randon_phi[m]/0.5, 0.0, 0.5), (randon_phi[m]/0.75, 0.0, 0.75), (
                randon_phi[m]/1, 0.0, 1.0), (randon_phi[m]/1.25, 0.0, 1.25), (randon_phi[m]/1.5, 0.0, 1.5), (
                                       randon_phi[m]/1.75, 0.0, 1.75), (randon_phi[m]/2.0, 0.0, 2.0)))
        mySoil.mohrCoulombPlasticity.MohrCoulombHardening(
            dependencies=1, table=((randon_c[m]/0.5, 0.0, 0.5), (randon_c[m]/0.75, 0.0, 0.75), (randon_c[m]/1, 0.0, 1.0),
                                   (randon_c[m]/1.25, 0.0, 1.25), (randon_c[m]/1.5, 0.0, 1.5), (randon_c[m]/1.75, 0.0, 1.75), (randon_c[m]/2,0.0, 2.0)))
        mySoil.mohrCoulombPlasticity.TensionCutOff(temperatureDependency=OFF, dependencies=0, table=( (0.0, 0.0),))
        # mySoil.UserMaterial(mechanicalConstants=a)
        m=m+1
        sectionname='Section-'+str(ele)
        mySection=mymodel.HomogeneousSolidSection(name=sectionname,  material=Matname, thickness=None)#创建section
        # elements=mypart.elements[0]
        setname='myset'+str(ele)
        region=mypart.Set(elements=mypart.elements[ele-1:ele], name=setname)
        mypart.SectionAssignment(region=region, sectionName=sectionname)

Supongo que te gusta

Origin blog.csdn.net/self_Name_/article/details/127483136
Recomendado
Clasificación