Source code for trusspy.materials.material_definition
# -*- coding: utf-8 -*-
"""
title: TrussPy - Truss Solver for Python
author: Andreas Dutzler
year: 2023
"""
import numpy as np
[docs]def umat_el(e, de, mat_prop, state_v):
E = mat_prop[0]
s = E * e
dsde = E
dsdt = 0
return s, dsde, dsdt, state_v
[docs]def umat_elplast_iso(e, de, mat_prop, state_v):
E = mat_prop[0]
K = mat_prop[1]
Sy = mat_prop[2]
eps_pl_0 = state_v[1]
# total strain at time t=t_n+1
eps_1 = e
# yield stress at time t=t_n
if state_v[0] == 0:
stress_yield_0 = Sy
else:
stress_yield_0 = state_v[0]
# algorithm: isotropic hardening
# trial state
stress_trial = E * (eps_1 - eps_pl_0)
eps_pl_trial = eps_pl_0
f_trial = abs(stress_trial) - stress_yield_0
if f_trial <= 0:
# elastic strain increment
stress_1 = stress_trial
eps_pl_1 = eps_pl_trial
dsde = E
delta_gamma = 0.0
else:
# plastic strain increment
delta_gamma = f_trial / (E + K)
stress_1 = (1 - (delta_gamma * E) / abs(stress_trial)) * stress_trial
eps_pl_1 = eps_pl_0 + delta_gamma * np.sign(stress_trial)
dsde = E * K / (E + K)
# output (update) stress
s = stress_1
# output (update) state variables
stress_yield_1 = stress_yield_0 + K * delta_gamma
state_v[0] = stress_yield_1
state_v[1] = eps_pl_1
dsdt = 0.0
return s, dsde, dsdt, state_v