from operator import itemgetter
import numpy as np
from scipy.optimize import leastsq
In reference [1], Lamport et al tabulated \(f_{cu}\) (MPa) from 2 inch cube tests with measured \(E_g\) (MPa). The following fits a power law model to the data for the estimation of \(E_g\) from \(f_{cu}\).
fc_vs_Eg = [(27.1, 19995.9),
(27.4, 19995.9),
(27.7, 15169.3),
(30.2, 19995.9),
(28.3, 15169.3),
(29.0, 15169.3),
(41.3, 25512.0),
(39.9, 25512.0),
(42.1, 25512.0),
(34.0, 22064.4),
(37.8, 22064.4),
(39.1, 22064.4),
(32.8, 22753.9),
(34.5, 22753.9),
(36.9, 22753.9),
(45.7, 24132.9),
(76.7, 32407.1),
(73.6, 32407.1)]
fc_vs_Eg = sorted(fc_vs_Eg, key=itemgetter(0))
The model is of the form \(E_g = \alpha {f_{cu}^\prime}^\beta\)
def model(constant, exponent, x):
return constant*x**exponent
def residual(vars, x, data):
constant = vars[0]
exponent = vars[1]
return (data - model(constant, exponent, x))
vars = [4550.0, 0.45]
x = [z[0] for z in fc_vs_Eg]
y = [z[1] for z in fc_vs_Eg]
out = leastsq(residual, vars, args=(x, y), full_output=True)
#print out
vars = out[0]
print('constant: {} exponent: {}'.format(vars[0],vars[1]))
fit = model(vars[0], vars[1], x)
s_u = 46.0
E_g = model(vars[0], vars[1], s_u)
s_y = 25.7/38.5*s_u
s_f = 0.2*s_u
s_t = 2.5/38.5*s_u
print('E_g: {0} s_y: {1} s_u: {2} s_f: {3} s_t: {4}'.format(E_g, s_y, s_u, s_f, s_t))
The model seems to perform better with lower strength grouts. That should be expected since the majority of the Lamport data are relatively low strength.
ducorit_d4 = (200.0, 70000.0)
print('Ducorit D4 predicted: {}'.format(model(vars[0], vars[1], ducorit_d4[0])))
ducorit_s5 = (130.0, 55000.0)
print('Ducorit S5 predicted: {}'.format(model(vars[0], vars[1], ducorit_s5[0])))
ducorit_s2 = ( 90.0, 40000.0)
print('Ducorit S2 predicted: {}'.format(model(vars[0], vars[1], ducorit_s2[0])))
ducorit_s1 = (110.0, 35000.0)
print('Ducorit S1 predicted: {}'.format(model(vars[0], vars[1], ducorit_s1[0])))
plt.plot(x,fit,color='b')
plt.plot(x,y,marker='+', color='r', ls='')
plt.ylim([0,40000])
plt.xlabel(r'\(f^\prime_c\)')
plt.ylabel(r'\(E_g\)')
plt.show()