JC模型python代碼繪制曲線
瀏覽:2430
import numpy as np
import matplotlib.pyplot as plt
def jc_model(epsilon, epsilon_dot, T, A, B, n, C, m, T_room, T_melt):
"""
計(jì)算考慮溫度效應(yīng)的 Johnson - Cook 模型的流動(dòng)應(yīng)力
:param epsilon: 有效塑性應(yīng)變
:param epsilon_dot: 有效塑性應(yīng)變率
:param T: 當(dāng)前溫度
:param A: 初始屈服應(yīng)力
:param B: 硬化常數(shù)
:param n: 硬化指數(shù)
:param C: 應(yīng)變率常數(shù)
:param m: 熱軟化指數(shù)
:param T_room: 室溫
:param T_melt: 熔化溫度
:return: 流動(dòng)應(yīng)力
"""
epsilon_dot_star = epsilon_dot / 1.0
T_star = (T - T_room) / (T_melt - T_room)
sigma = (A + B * (epsilon ** n)) * (1 + C * np.log(epsilon_dot_star)) * (1 - T_star ** m)
return sigma
# 材料參數(shù)
A = 200 # 初始屈服應(yīng)力 (MPa)
B = 500 # 硬化常數(shù) (MPa)
n = 0.2 # 硬化指數(shù)
C = 0.01 # 應(yīng)變率常數(shù)
m = 1.0 # 熱軟化指數(shù)
T_room = 298 # 室溫 (K)
T_melt = 1800 # 熔化溫度 (K)
# 應(yīng)變范圍
epsilon = np.linspace(0, 1, 100)
# 不同的應(yīng)變率
epsilon_dots = [1, 100]
# 不同的溫度
temperatures = [300, 600, 900]
# 設(shè)置圖片清晰度
plt.rcParams['figure.dpi'] = 300
# 繪制不同應(yīng)變率和溫度組合下的曲線
for epsilon_dot in epsilon_dots:
fig, ax = plt.subplots()
for T in temperatures:
stress = jc_model(epsilon, epsilon_dot, T, A, B, n, C, m, T_room, T_melt)
ax.plot(epsilon, stress, label=f'$T = {T} K$')
# 設(shè)置圖形標(biāo)簽和標(biāo)題
ax.set_xlabel('有效塑性應(yīng)變 $\epsilon$')
ax.set_ylabel('流動(dòng)應(yīng)力 $\sigma$ (MPa)')
ax.set_title(f'Johnson - Cook 模型,$\dot{{\epsilon}} = {epsilon_dot} s^{{-1}}$')
ax.legend()
ax.grid(True)
# 顯示圖形
plt.show()
不考慮溫度效應(yīng)的jc曲線代碼:
import numpy as np
import matplotlib.pyplot as plt
def jc_model(epsilon, epsilon_dot, A, B, n, C):
"""
計(jì)算不考慮溫度效應(yīng)的 Johnson - Cook 模型的流動(dòng)應(yīng)力
:param epsilon: 有效塑性應(yīng)變
:param epsilon_dot: 有效塑性應(yīng)變率
:param A: 初始屈服應(yīng)力
:param B: 硬化常數(shù)
:param n: 硬化指數(shù)
:param C: 應(yīng)變率常數(shù)
:return: 流動(dòng)應(yīng)力
"""
epsilon_dot_star = epsilon_dot / 1.0
sigma = (A + B * (epsilon ** n)) * (1 + C * np.log(epsilon_dot_star))
return sigma
# 材料參數(shù)
A = 200 # 初始屈服應(yīng)力 (MPa)
B = 500 # 硬化常數(shù) (MPa)
n = 0.2 # 硬化指數(shù)
C = 0.01 # 應(yīng)變率常數(shù)
# 應(yīng)變范圍
epsilon = np.linspace(0, 1, 100)
# 修改后的不同應(yīng)變率
epsilon_dots = [0.001, 0.1, 0, 1, 10, 100, 1000]
# 設(shè)置圖片清晰度
plt.rcParams['figure.dpi'] = 300
# 繪制不同應(yīng)變率下的曲線
fig, ax = plt.subplots()
for epsilon_dot in epsilon_dots:
if epsilon_dot == 0:
# 應(yīng)變率為 0 時(shí),對(duì)數(shù)無意義,此處可單獨(dú)處理
stress = A + B * (epsilon ** n)
else:
stress = jc_model(epsilon, epsilon_dot, A, B, n, C)
ax.plot(epsilon, stress, label=f'$\dot{{\epsilon}} = {epsilon_dot} s^{{-1}}$')
# 設(shè)置圖形標(biāo)簽和標(biāo)題
ax.set_xlabel('有效塑性應(yīng)變 $\epsilon$')
ax.set_ylabel('流動(dòng)應(yīng)力 $\sigma$ (MPa)')
ax.set_title('不考慮溫度效應(yīng)的 Johnson - Cook 模型')
ax.legend()
ax.grid(True)
# 顯示圖形
plt.show()
技術(shù)鄰APP
工程師必備
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP
1




















