JC模型python代码绘制曲线

浏览:229
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):
"""
计算考虑温度效应的 Johnson - Cook 模型的流动应力
:param epsilon: 有效塑性应变
:param epsilon_dot: 有效塑性应变率
:param T: 当前温度
:param A: 初始屈服应力
:param B: 硬化常数
:param n: 硬化指数
:param C: 应变率常数
:param m: 热软化指数
:param T_room: 室温
:param T_melt: 熔化温度
:return: 流动应力
"""
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
# 材料参数
A = 200 # 初始屈服应力 (MPa)
B = 500 # 硬化常数 (MPa)
n = 0.2 # 硬化指数
C = 0.01 # 应变率常数
m = 1.0 # 热软化指数
T_room = 298 # 室温 (K)
T_melt = 1800 # 熔化温度 (K)
# 应变范围
epsilon = np.linspace(0, 1, 100)
# 不同的应变率
epsilon_dots = [1, 100]
# 不同的温度
temperatures = [300, 600, 900]
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300
# 绘制不同应变率和温度组合下的曲线
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$')
# 设置图形标签和标题
ax.set_xlabel('有效塑性应变 $\epsilon$')
ax.set_ylabel('流动应力 $\sigma$ (MPa)')
ax.set_title(f'Johnson - Cook 模型,$\dot{{\epsilon}} = {epsilon_dot} s^{{-1}}$')
ax.legend()
ax.grid(True)
# 显示图形
plt.show()


不考虑温度效应的jc曲线代码:
import numpy as np
import matplotlib.pyplot as plt
def jc_model(epsilon, epsilon_dot, A, B, n, C):
"""
计算不考虑温度效应的 Johnson - Cook 模型的流动应力
:param epsilon: 有效塑性应变
:param epsilon_dot: 有效塑性应变率
:param A: 初始屈服应力
:param B: 硬化常数
:param n: 硬化指数
:param C: 应变率常数
:return: 流动应力
"""
epsilon_dot_star = epsilon_dot / 1.0
sigma = (A + B * (epsilon ** n)) * (1 + C * np.log(epsilon_dot_star))
return sigma
# 材料参数
A = 200 # 初始屈服应力 (MPa)
B = 500 # 硬化常数 (MPa)
n = 0.2 # 硬化指数
C = 0.01 # 应变率常数
# 应变范围
epsilon = np.linspace(0, 1, 100)
# 修改后的不同应变率
epsilon_dots = [0.001, 0.1, 0, 1, 10, 100, 1000]
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300
# 绘制不同应变率下的曲线
fig, ax = plt.subplots()
for epsilon_dot in epsilon_dots:
if epsilon_dot == 0:
# 应变率为 0 时,对数无意义,此处可单独处理
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}}$')
# 设置图形标签和标题
ax.set_xlabel('有效塑性应变 $\epsilon$')
ax.set_ylabel('流动应力 $\sigma$ (MPa)')
ax.set_title('不考虑温度效应的 Johnson - Cook 模型')
ax.legend()
ax.grid(True)
# 显示图形
plt.show()


技术邻APP
工程师必备
工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP

1