import numpy as np
import matplotlib.pyplot as plt
!pip install uncertainties
from uncertainties import ufloat
Requirement already satisfied: uncertainties in /root/venv/lib/python3.7/site-packages (3.1.5)
Requirement already satisfied: future in /shared-libs/python3.7/py/lib/python3.7/site-packages (from uncertainties) (0.18.2)
WARNING: You are using pip version 20.1.1; however, version 21.0.1 is available.
You should consider upgrading via the '/root/venv/bin/python -m pip install --upgrade pip' command.
epsilonNom= np.linspace(0,10,1001)
sigmaTrue = 30*epsilonNom**0.8
sigmaNom = sigmaTrue/(1+epsilonNom)
sigmaNomNeck = max(sigmaNom)
#sigmaList = sigmaNom.tolist()
#epsilonNeck = sigmaList.index(sigmaNeck)
epsilonNomNeckIndex = sigmaNom.tolist().index(sigmaNomNeck)
epsilonNomNeck = epsilonNom[epsilonNomNeckIndex]
sigmaTrueNeck = sigmaTrue[epsilonNomNeckIndex]
plt.plot(epsilonNom,sigmaNom,epsilonNomNeck, sigmaNomNeck, "o")
#plt.hlines(sigmaNeck,0,10, 'C2')
print("The nominal strain at necking is", epsilonNomNeck)
print("The true stress at necking is", np.round(sigmaTrueNeck,2), "Mpa")
The nominal strain at necking is 4.0
The true stress at necking is 90.94 Mpa
epsilonNomNeg = np.linspace(-0.99,10,1100)
epsilonTrue = np.log(1 + epsilonNomNeg)
# (i)
plt.plot(epsilonNomNeg, epsilonTrue)
plt.xlabel('\u03B5_nom') #epsilon
plt.ylabel('\u03B5_t') #epsilon
# (ii)
epsilonSmallDeviation = np.zeros(100)
counter = 0
deviation = abs((epsilonTrue-epsilonNomNeg)/epsilonNomNeg)*100
for i in range(len(deviation)):
if(deviation[i] <= 5.0):
#print(deviation[i])
epsilonSmallDeviation[counter] = epsilonNomNeg[i]
counter += 1
print("\u03B5_t deviates with more than 5% from \u03B5_nom when:")
print("\u03B5_nom <", np.round(epsilonSmallDeviation[0],4), "and \u03B5_nom >", np.round(epsilonSmallDeviation[counter-1],4), "\n\n\n")
ε_t deviates with more than 5% from ε_nom when:
ε_nom < -0.09 and ε_nom > 0.1
/shared-libs/python3.7/py-core/lib/python3.7/site-packages/ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in true_divide
epsilonTrueApprox = epsilonNomNeg - epsilonNomNeg**2/2
print(epsilonTrueApprox)
plt.plot(epsilonNomNeg, epsilonTrueApprox)
plt.xlabel('\u03B5_nom') #epsilon
plt.ylabel('\u03B5_t_approx') #epsilon
[ -1.48005 -1.4602 -1.44045 ... -39.8202 -39.91005 -40. ]
# (iii)
epsilonSmallDeviation2 = np.zeros(100)
counter2 = 0
deviation2 = abs((epsilonTrueApprox-epsilonTrue)/epsilonTrue)*100
for i in range(len(deviation)):
if(deviation2[i] <= 5.0):
#print(deviation[i])
epsilonSmallDeviation2[counter2] = epsilonNomNeg[i]
counter2 += 1
print("\u03B5_t_approx deviates with more than 5% from \u03B5_t when:")
print("\u03B5_nom <", np.round(epsilonSmallDeviation2[0],4), "and \u03B5_nom >", np.round(epsilonSmallDeviation2[counter2-1],4), "\n\n\n")
ε_t_approx deviates with more than 5% from ε_t when:
ε_nom < -0.36 and ε_nom > 0.4
/shared-libs/python3.7/py-core/lib/python3.7/site-packages/ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in true_divide
# b) (i)
E_c = 1000 #Gpa
E_s = 1 #Gpa
f = 0.5
E = E_c*f + E_s*(1-f)
print("b) (i)\n E(f = 0.5) =", E, "Gpa\n")
# b) (ii)
f = 0.9
E = E_c*f + E_s*(1-f)
print("b) (ii)\n E(f = 0.9) =", E, "Gpa\n")
# c) (i)
E = 73 #Gpa
f = (E - E_s)/(E_c - E_s)
print("c) (i)\n f(E =", E, "Gpa) =", np.round(f,2), "\n")
# c) (ii)
E = 235 #Gpa
f = (E - E_s)/(E_c - E_s)
print("c) (ii)\n f(E =", E, "Gpa) =", np.round(f,2), "\n")
b) (i)
E(f = 0.5) = 500.5 Gpa
b) (ii)
E(f = 0.9) = 900.1 Gpa
c) (i)
f(E = 73 Gpa) = 0.07
c) (ii)
f(E = 235 Gpa) = 0.23
# Solving the system of equations to find TS_inf and A (2eq)
Mn_1 = 73800 # g/mol
TS_1 = 16.7 # Mpa
Mn_2 = 51300 # g/mol
TS_2 = 14.4 # Mpa
A = np.array([[1,-1/Mn_1],[1, -1/Mn_2]])
b = np.array([TS_1, TS_2])
X = np.linalg.solve(A,b)
TS_inf = X[0]
A = X[1]
print("TS_inf =",np.round(TS_inf,2),"\nA=", np.round(A,2), "\n")
# a)
TS = 18.1 #Mpa
Mn = A / (TS_inf - TS)
print("a)\n Mn(TS =", TS, "Mpa) =", np.round(Mn,2), "g/mol\n")
# b)
TS = TS_inf * 0.95
Mn = A / (TS_inf - TS)
print("b)\n TS = 95% TS_inf =", np.round(TS,2), "Mpa\n Mn(TS =", np.round(TS,2), "Mpa) =", np.round(Mn,2), "g/mol\n")
TS_inf = 21.94
A= 387007.2
a)
Mn(TS = 18.1 Mpa) = 100678.25 g/mol
b)
TS = 95% TS_inf = 20.85 Mpa
Mn(TS = 20.85 Mpa) = 352722.57 g/mol
POM = np.loadtxt('polymer_sample.txt')
n = POM[:,0]
DP = POM[:,1]
# a) total weight
n_mono_tot = sum(n*DP)
print("a)\n m_tot =", n_mono_tot, "g\n")
# Vekt for ett mol monomerer [g/mol]
M_c = 12 #g/mol
M_h = 1 #g/mol
M_o = 16 #g/mol
M_pom_mol = M_c + 2*M_h + M_o
mol = 6.022*10**23
# Vekt for ett monomer [g]
M_pom = M_pom_mol/mol
# Total masse
mass_tot = M_pom * n_mono_tot
a)
m_tot = 123402018.0 g
# b)
# Weight fraction
w_i = n*(M_pom*DP)/mass_tot
# Numbers fraction
x_i = n/sum(n)
# Molecular weight for range
M_i = DP*M_pom
plt.figure(1)
plt.plot(M_i, x_i, 'bo')
plt.xlabel('M_i [g]')
plt.ylabel('w_i')
plt.figure(2)
plt.plot(M_i, w_i, 'ro')
plt.xlabel('M_i [g]')
plt.ylabel('x_i')
print("b)\n Se plot\n")
b)
Se plot
# c)
M_w = sum(w_i*M_i)
M_n = sum(x_i*M_i)
DPI = M_w/M_n # Typical range 1.02 to 50+
print("c)\n M_w =", "%.4g" %M_w,"g\n M_n =", "%.4g" %M_n, "g\n DPI =", np.round(DPI,2))
#print(M_w * mol)
#print(M_w/mol)
c)
M_w = 2.451e-19 g
M_n = 1.795e-19 g
DPI = 1.37
# b)
p_a = 840 # density amorphous PP [kg/m^3]
p_c = 950 # density crystalline PP [kg/m^3]
p_s = 880 # density of PP specimen [kg/m^3]
# The degree of crystallinity (DC) is given by:
DC = (p_c*(p_s - p_a))/(p_s*(p_c - p_a))*100
# (i) Assuming no voids we have:
print("b) (i) Assuming no voids we have:\n DC =", np.round(DC,2), "[%]\n")
# (ii) Estimating uncertainty
p_a = ufloat(840, 5) # p_a = 840+/-5 [kg/m^3]
p_c = ufloat(950, 5) # p_a = 950+/-5 [kg/m^3]
p_s = ufloat(880, 5) # p_s = 880+/-5 [kg/m^3]
DC = (p_c*(p_s - p_a))/(p_s*(p_c - p_a))*100
print("b) (ii) With uncertainty we get:\n DC =",DC, "[%]\n")
std_DC = DC.std_dev
COV_DC = DC.std_dev/DC.nominal_value
print(" Standard deviation =", np.round(std_DC,2), "[%]\n COV =",np.round(COV_DC,2), "%")
b) (i) Assuming no voids we have:
DC = 39.26 [%]
b) (ii) With uncertainty we get:
DC = 39+/-6 [%]
Standard deviation = 5.85 [%]
COV = 0.15 %
volumeTeaspoon = 4.93 # mL
COV_teaspoon = 0.05 # 5%
stdTeaspoon = COV_teaspoon*volumeTeaspoon # using uncertainty +/-5%
areaAcre = 4046.86 # m
COV_acre = 0.20 # 10%
stdAcre = COV_acre*areaAcre # using uncertainty +/-10%
volumeTeaspoon = ufloat(volumeTeaspoon, stdTeaspoon) # mL
areaAcre = ufloat(areaAcre, stdAcre) # m
area = areaAcre/2 # m
volume = volumeTeaspoon*10**(-6) # L
thickness = volume/area
print("Thickness =", thickness, "m\n")
COV_thickness = thickness.std_dev/thickness.nominal_value
print("Standard deviation thickness =","%.2g" %thickness.std_dev, "m")
print("COV thickness =",np.round(COV_thickness,4)*100, "%")
Thickness = (2.4+/-0.5)e-09 m
Standard deviation thickness = 5e-10 m
COV thickness = 20.62 %