Note
Go to the end to download the full example code.
6061T6 aluminum anisotropy calibration initial point estimation
In this example, we use MatFit and engineering judgement to estimate the initial point for our calibration in 6061T6 aluminum calibration with anisotropic yield. See that example for more detail on material model choice and experimental data review for the material.
First import all needed tools. We will be using tools from NumPy, MatPlotLib, MatFit and MatCal for this example.
import numpy as np
import matplotlib.pyplot as plt
from matcal import *
from matfit.models import Voce
from matfit.fitting import MatFit
# sphinx_gallery_thumbnail_number = 2
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.rc('font', size=12)
First, we use the
FileData()
function to read in the relevant engineering
stress-strain curves.
MatFit will use these to estimate the Voce
hardening parameters for the data.
MatFit’s algorithms need the 0.2% offset yield stress,
the ultimate stress, the strain at the
ultimate stress and the failure strain.
We estimated these values by manipulating the
the raw engineering stress-strain data,
and saving the quantities in CSV files.
See the 6061T6 aluminum data analysis
example to see how we extracted these data
from the engineering stress strain curves.
all_RD_metrics_CA = FileData("aluminum_6061_data/uniaxial_tension/"
"RD_aluminum_AL_6061_tension_stress_metrics_CA.csv")
all_LT_metrics_CA = FileData("aluminum_6061_data/uniaxial_tension/"
"LT_aluminum_AL_6061_tension_stress_metrics_CA.csv")
all_ST_metrics_CA = FileData("aluminum_6061_data/uniaxial_tension/"
"ST_aluminum_AL_6061_tension_stress_metrics_CA.csv")
all_RD_metrics_NM = FileData("aluminum_6061_data/uniaxial_tension/"
"RD_aluminum_AL_6061_tension_stress_metrics_NM.csv")
all_LT_metrics_NM = FileData("aluminum_6061_data/uniaxial_tension/"
"LT_aluminum_AL_6061_tension_stress_metrics_NM.csv")
all_ST_metrics_NM = FileData("aluminum_6061_data/uniaxial_tension/"
"ST_aluminum_AL_6061_tension_stress_metrics_NM.csv")
With the necessary data loaded, we create a function to estimate the Voce hardening material parameters from tension test metrics using MatFit. This function takes in a single set of material data metrics and returns a single MatFit solution for the Voce hardening parameters.
def get_voce_params(metrics):
material_specification = dict(
ultimate_strength=metrics["ultimate_stress"],
strain_at_ultimate=metrics["strain_at_ultimate_stress"],
elongation=metrics['max_strain'],
yield_stress=metrics['yield'],
youngs_modulus=10e3,
poissons_ratio=0.33,
density=0.00026)
voce_parameters = dict(
hardening_modulus=dict(value=1.0, lower=0, upper=3000.0, calibrate=True),
exponential_coefficient=dict(value=15.0, lower=0.0, upper=100, calibrate=True),
)
voce_model = Voce(material_specification, voce_parameters, name='Voce')
MF = MatFit(voce_model)
MF.fit(solver_settings=dict(method='trf'))
solution = MF.get_solution()
return solution
With the preceding function available,
we create an additional function to
loop over a set of uniaxial tension
data metrics, pass them to the
get_voce_params function and then
extract the desired
material parameters from the
MatFit result. The yield stress and
hardening parameters are stored in lists
for later processing.
def get_voce_params_for_metric_list(metric_list):
Ys =[]
As = []
bs = []
for metrics in metric_list:
solution = get_voce_params(metrics)
As.append(solution['hardening_modulus'])
bs.append(solution['exponential_coefficient'])
Ys.append(metrics["yield"])
return Ys,As,bs
Next, we apply the get_voce_params_for_metric_list`
function to our
engineering stress-strain metrics.
rd_Ys_CA, rd_As_CA, rd_bs_CA = get_voce_params_for_metric_list(all_RD_metrics_CA)
lt_Ys_CA, lt_As_CA, lt_bs_CA = get_voce_params_for_metric_list(all_LT_metrics_CA)
st_Ys_CA, st_As_CA, st_bs_CA= get_voce_params_for_metric_list(all_ST_metrics_CA)
rd_Ys_NM, rd_As_NM, rd_bs_NM = get_voce_params_for_metric_list(all_RD_metrics_NM)
lt_Ys_NM, lt_As_NM, lt_bs_NM = get_voce_params_for_metric_list(all_LT_metrics_NM)
st_Ys_NM, st_As_NM, st_bs_NM= get_voce_params_for_metric_list(all_ST_metrics_NM)
{'ultimate_strength': 46.997175720811796, 'strain_at_ultimate': 0.0713338851928711, 'elongation': 0.170369371771812, 'yield_stress': 43.44917464752488, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 49.37526211032505, 'strain_at_ultimate': 0.0509887523949146, 'elongation': 0.119823843240738, 'yield_stress': 44.69145740757883, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 48.47946611450155, 'strain_at_ultimate': 0.0716086402535439, 'elongation': 0.143201798200607, 'yield_stress': 44.277026386514294, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 48.311719748683636, 'strain_at_ultimate': 0.072429932653904, 'elongation': 0.145530253648758, 'yield_stress': 44.65115305436215, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.209098275307326, 'strain_at_ultimate': 0.0767135322093964, 'elongation': 0.14600881934166, 'yield_stress': 41.667669646230564, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.457740527483054, 'strain_at_ultimate': 0.0778109282255173, 'elongation': 0.13965018093586, 'yield_stress': 42.094934180681186, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 47.10621111503172, 'strain_at_ultimate': 0.0779984444379807, 'elongation': 0.154496312141418, 'yield_stress': 43.17463297866633, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.02081245695077, 'strain_at_ultimate': 0.0735461786389351, 'elongation': 0.139684230089188, 'yield_stress': 41.14705652800012, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.04307336533125, 'strain_at_ultimate': 0.0626527070999146, 'elongation': 0.098018042743206, 'yield_stress': 38.57162620496351, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.05411, 'strain_at_ultimate': 0.059342, 'elongation': 0.097423, 'yield_stress': 40.72327542770096, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.08194235624182, 'strain_at_ultimate': 0.0592133030295372, 'elongation': 0.0951949283480644, 'yield_stress': 40.11398050283649, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 45.732855723714685, 'strain_at_ultimate': 0.0788637, 'elongation': 0.1800631, 'yield_stress': 43.29670440956851, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 47.5461132818496, 'strain_at_ultimate': 0.07917619999999999, 'elongation': 0.17515360000000002, 'yield_stress': 45.10037509883454, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 47.35925113477097, 'strain_at_ultimate': 0.080015, 'elongation': 0.1752029, 'yield_stress': 44.90779578107282, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 45.561298897734126, 'strain_at_ultimate': 0.0772436, 'elongation': 0.1799808, 'yield_stress': 43.17879524090457, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 47.27071056304659, 'strain_at_ultimate': 0.0783045, 'elongation': 0.1740269, 'yield_stress': 44.928991280197735, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.786939155952254, 'strain_at_ultimate': 0.0782798, 'elongation': 0.1444795, 'yield_stress': 42.384375967646754, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.79595031765312, 'strain_at_ultimate': 0.07589499999999999, 'elongation': 0.1370536, 'yield_stress': 42.14673323590163, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.5886603845764, 'strain_at_ultimate': 0.07613349999999999, 'elongation': 0.1393562, 'yield_stress': 42.063054046956296, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 47.258010896619695, 'strain_at_ultimate': 0.0757305, 'elongation': 0.1370043, 'yield_stress': 42.76614014183927, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 48.28088290793643, 'strain_at_ultimate': 0.0764131, 'elongation': 0.15922440000000002, 'yield_stress': 44.45411886592688, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.36303210040858, 'strain_at_ultimate': 0.0610268, 'elongation': 0.0973338, 'yield_stress': 40.291642259085485, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.59898124008523, 'strain_at_ultimate': 0.057507199999999994, 'elongation': 0.0963798, 'yield_stress': 40.35990936470094, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.65389985638726, 'strain_at_ultimate': 0.060911700000000006, 'elongation': 0.0977367, 'yield_stress': 40.57202667422305, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.657252268402175, 'strain_at_ultimate': 0.060813, 'elongation': 0.09644559999999999, 'yield_stress': 40.63132814121626, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
{'ultimate_strength': 46.505611198274174, 'strain_at_ultimate': 0.0607308, 'elongation': 0.0954588, 'yield_stress': 40.596128444782586, 'youngs_modulus': 10000.0, 'poissons_ratio': 0.33, 'density': 0.00026, 'hardening_modulus': {'value': 1.0, 'lower': 0, 'upper': 3000.0, 'calibrate': True}, 'exponential_coefficient': {'value': 15.0, 'lower': 0.0, 'upper': 100, 'calibrate': True}}
Missing parameter: hardening_model
Using parameters default value: hardening_model | voce
Missing parameter: yield_strength_offset
Using parameters default value: yield_strength_offset | 0.002
Although it may be interesting to compare the results from the different test labs (CA vs NM), we assume the test lab has no affect on the tension data results and combine the data using list summation.
rd_Ys = rd_Ys_CA+rd_Ys_NM
lt_Ys = lt_Ys_CA+lt_Ys_NM
st_Ys = st_Ys_CA+st_Ys_NM
rd_As = rd_As_CA+rd_As_NM
lt_As = lt_As_CA+lt_As_NM
st_As = st_As_CA+st_As_NM
rd_bs = rd_Ys_CA+rd_bs_NM
lt_bs = lt_Ys_CA+lt_bs_NM
st_bs = st_Ys_CA+st_bs_NM
We can now estimate some
of the Hill yield parameters.
If we assume the yield stress
from the LT tests (aligned with the R11 direction)
is the reference stress for the Hill
ratios, we can set
and can estimate
and
from
the yield stress values in the RD and ST directions, respectively.
See 6061T6 aluminum data analysis for more information
on the chosen material coordinate system.
R22s = []
R33s = []
for lt_Y in lt_Ys:
for rd_Y in rd_Ys:
R22s.append(rd_Y/lt_Y)
for st_Y in st_Ys:
R33s.append(st_Y/lt_Y)
By looping over each yield stress for each direction, we get
many estimates for the Hill and
ratios.
Since we need
one value for our
calibration initial point,
we average the values to arrive at our initial point
estimate.
print("Y estimate:", np.average(lt_Ys))
print("R11 estimate:", 1.0)
print("R22 estimate:", np.average(R22s))
print("R33 estimate:", np.average(R33s))
print("A estimate:", np.average(rd_As+lt_As+st_As))
print("b estimate:", np.average(rd_bs+lt_bs+st_bs))
Y estimate: 42.433190621316555
R11 estimate: 1.0
R22 estimate: 1.0438848210311358
R33 estimate: 0.9485579441697009
A estimate: 10.118895350282498
b estimate: 32.37772357486822
We can also plot histograms of the estimated parameters to see if there are any apparent trends or modes in the data.
figsize=[4,3]
plt.figure("Ys", figsize, constrained_layout=True)
plt.hist(lt_Ys, density=True, alpha=0.8)
plt.xlabel("Y (MPa)")
plt.ylabel("PDF")
plt.figure("R22,R33", figsize, constrained_layout=True)
plt.hist(R22s, density=True, alpha=0.8, label="$R_{22}$")
plt.hist(R33s, density=True, alpha=0.8, label="$R_{33}$")
plt.xlabel("Hill normal ratio values")
plt.ylabel("PDF")
plt.legend()
plt.figure("As", figsize, constrained_layout=True)
plt.hist(rd_As+lt_As+st_As, density=True, alpha=0.8)
plt.xlabel("A (MPa)")
plt.ylabel("PDF")
plt.figure("bs", figsize, constrained_layout=True)
plt.hist(rd_bs+lt_bs+st_bs, density=True, alpha=0.8)
plt.xlabel("b")
plt.ylabel("PDF")
Text(18.926410511363642, 0.5, 'PDF')
The most apparent feature of the data
is the bimodal distribution for the Voce
exponent . This is likely due to anisotropy
in the hardening and failure of this material. For the
sake of this example, we are ignoring this feature in
the data. However,
depending on the application,
the material model and calibration may need to account
for this behavior.
The only three remaining parameters are the
Hill shear ratios ,
and
. Estimating these ratios
cannot be done analytically because
the shear yield strength cannot be analytically determined
from the top hat shear tests used to characterize the material’s
shear behavior.
However, we can make a rough guess for the ratios in
a similar fashion to what was done for the normal
Hill ratios.
We will look at the load for each specimen when the load-displacement
slope begins to deviate from linear. By inspecting
the data, the deviation from linear appears to occur around a displacement of
0.005 inches. We extract the loads at this displacement
for each specimen and categorize them by their loading direction.
We then assume that the
ratio
(aligned with the RTS/TRS directions) will have a value of 1.0 since
it has the highest load at this displacement.
Now we can estimate what the
and
Hill shear ratio values
will be relative to
by dividing the
extracted loads for the STR/TSR and RST/SRT directions
by the RTS/TRS load.
The load at 0.005” displacement extracted in the previous example
is saved to a file.
Once again, we import that data using
FileData().
all_top_hat_12_metrics = FileData("aluminum_6061_data/top_hat_shear/"
"RTS_TRS_aluminum_AL_6061_top_hat_metrics.csv")
all_top_hat_23_metrics = FileData("aluminum_6061_data/top_hat_shear/"
"RST_SRT_aluminum_AL_6061_top_hat_metrics.csv")
all_top_hat_31_metrics = FileData("aluminum_6061_data/top_hat_shear/"
"STR_TSR_aluminum_AL_6061_top_hat_metrics.csv")
With the load data imported, we estimate and
similarly to how
R22 and R33 were estimated.
R23s = []
R31s = []
for load_R12 in all_top_hat_12_metrics["load_at_0.005_in"]:
for load_23 in all_top_hat_23_metrics["load_at_0.005_in"]:
R23s.append(load_23/load_R12)
for load_31 in all_top_hat_31_metrics["load_at_0.005_in"]:
R31s.append(load_31/load_R12)
We then plot the histograms and output an average to obtain a single initial point.
plt.figure("R23,R31", figsize, constrained_layout=True)
plt.hist(R23s, density=True, alpha=0.8, label="$R_{23}$")
plt.hist(R31s, density=True, alpha=0.8, label="$R_{31}$")
plt.ylabel("Hill shear ratio values")
plt.ylabel("PDF")
plt.legend()
plt.show()
print("R23 estimate:", np.average(R23s))
print("R31 estimate:", np.average(R31s))

R23 estimate: 0.9651369931253784
R31 estimate: 0.9429150450881516
We now have a complete initial point for our calibration using the finite element models that MatCal provides for a uniaxial tension test and shear top hat test. We will perform this calibration in the next example. See 6061T6 aluminum calibration with anisotropic yield
Total running time of the script: (0 minutes 1.770 seconds)



