雙線性彈塑性模型(四)

本節(jié)內(nèi)容為在牛頓-拉夫遜方法中集成基于隨動(dòng)硬化模型的當(dāng)前應(yīng)力計(jì)算。

對于非線性的問題,一般將其線性化為

一次迭代得到的是位移增量,如圖所示

雙線性彈塑性模型(四)的圖1

接下來要將位移增量轉(zhuǎn)化為應(yīng)變增量,以一維桿結(jié)構(gòu)為例,其應(yīng)變增量

其中 為桿初始長度。

[算例]

一根各向同性桿,一端固定,另一端施加軸向力做拉伸試驗(yàn).荷載逐漸增加到 ,然后逐漸卸載至0。, 。

import math

def Sgn(x):
    if x > 0 :
        return 1
    elif x < 0 :
        return -1
    else :
        return 0

def KinematicHard1D(MP,deps, stressN,alphaN, epsN):

    E  = MP[0]
    H  = MP[1]
    Y0 = MP[2]
    
    stress_tr = stressN + E*deps
    eta_tr = stress_tr - alphaN
    f_tr = math.fabs(eta_tr ) - Y0
    if f_tr < 0:
        stress = stress_tr
        alpha = alphaN
        ep = epsN
        flag = 0     # 處于彈性狀態(tài)
    else:
        dep = f_tr / ( E + H )
        stress = stress_tr - Sgn(eta_tr) * E * dep
        alpha = alphaN + Sgn(eta_tr) * H * dep
        ep = epsN + dep
        flag = 1    # 處于塑性狀態(tài)

    return stress, alpha, ep, flag

#########  以上為harden模塊


import matplotlib.pyplot as plt
import numpy as np

import numpy as np
import harden

E = 70000; H = 10000; sYield = 250
Et = E*H / (E+H)
mp = [E, H, sYield]

nS = 0
nep = 0
nA = 0

A = 100
L = 1000

tol = 1.0E-1
u = 0
Res = 0
nincr = 0
max_iter = 20
epnew = 0

Load = [0,50001000015000,20000,25000,30000,25000,20000,
        15000,10000,5000,0 ]

N = len(Load)
flag = 0

X = np.zeros( (N) )
Y = np.zeros( (N) )

for i in range(N):
    nincr += 1
    print('第{}增量步:' .format(nincr) )

    P = Load[i]

    Res = P - nS * A
    du = 0
    
    niter = 0
    conv = 2e12
    print('迭代步            位移                   不平衡力                    收斂參數(shù)')
    
    while ( conv > tol and niter < max_iter ):
        niter += 1

        Eep = E
        if flag == 1:
            Eep = Et

        K = Eep*A/L
        delta_u = Res / K
        du = du + delta_u
        delta_eps = delta_u / L

        Snew, Anew, epnew, flag = harden.KinematicHard1D(mp,delta_eps,nS,nA,nep)

        Res = P - Snew*A
        conv = Res**2 / (1 + P**2)
        nS = Snew
        nep = epnew
        nA  = Anew
        print(format(niter, '>3d'), format(u, '>20.12f'), format(nS, '>26.14f'), format(conv, '>28.16e'))

    u = u + du
    
    X[i] = u
    Y[i] = nS

print(X)
print(Y)

fig, axs = plt.subplots(11,  figsize=(8,6) )
axs.plot(X, Y, label="M1", linewidth = 3, color = "deeppink",marker='o', markersize=12
axs.set_xlabel('$Displacement(mm)$', fontsize = 18)
axs.set_ylabel('$Stress(MPa)$', fontsize = 18)

fig.savefig('./f358.png', dpi = 300#保存圖片 
plt.show()


得到的迭代路徑

雙線性彈塑性模型(四)的圖2


★★★★  往期相關(guān) ★★★★

雙線性彈塑性模型(三)

雙線性彈塑性模型(二)

雙線性彈塑性模型(一)

掃碼_搜索聯(lián)合傳播樣式-白色版.png
登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

2
1
4