1
0
forked from IPKM/nmreval

tnm function with numpy arrays

This commit is contained in:
Dominik Demuth 2023-05-14 20:05:10 +02:00
parent 11ed3c16eb
commit 996b0b2ae2

View File

@ -29,11 +29,11 @@ def tau_k(tau_0, deltaE, temp_k, xx, T_f_km1):
dataName = sys.argv[1]
try:
data = np.loadtxt(dataName, skiprows=0).T
print("Loading")
# print("Loading")
temp = data[0]
heat_capacity = data[1]
except IndexError:
print("File not found")
# print("File not found")
exit()
@ -89,27 +89,25 @@ T_f_ns = []
R = 8.314
def tnmfunc(temperature, tau_g, xx, beta, deltaE):
steps = len(temperature)
tau = np.zeros(steps)
temp_fictive = np.zeros(steps)
def tnmfunc(temperature, tau_g, x, beta, deltaE):
step = len(temperature)
# Initialize first values
temp_fictive[0] = temperature[0]
tau[0] = relax(temp_fictive[0], temp_fictive[0], tau_g, T_g, deltaE, xx)
Tf = np.empty(step)
Tf[0] = temperature[0]
deltaT = np.zeros(steps)
deltaT[1:] = np.diff(temperature)
delta_t = deltaT * 60 / rate
dttau = np.zeros(steps)
delT = np.diff(temperature)
delt = np.abs(delT) * 60 / rate
for i in range(1, steps):
tau[i] = relax(temperature[i], temp_fictive[i-1], tau_g, T_g, deltaE, xx)
dttau[:i] += delta_t[i-1] / tau[i]
temp_fictive[i] = np.sum(deltaT[:i] * (1-np.exp(-(dttau[:i])**beta))) + temp_fictive[0]
print(i, temperature[i], temp_fictive[i-i], dttau, tau[i], delta_t[i-1], deltaT[i-1])
tau = np.empty(step)
dttau = np.zeros(step)
temp_0 = temperature[0]
return temp_fictive
for i in range(0, step-1):
tau[i] = relax(temperature[i+1], Tf[i], tau_g, T_g, deltaE, x)
dttau[:i] += delt[i] / tau[i]
Tf[i+1] = np.sum(delT[:i] * (1-np.exp(-dttau[:i]**beta))) + temp_0
return Tf
def relax(t, tf, tau_g, t_glass, ea, x):
@ -153,7 +151,101 @@ def tnmfunc2(xdata, tau_0, xx, beta, deltaE):
delt[i] = abs(delT[i]) / (rate/60)
t[i] = t[i-1] + delt[i]
tau[i] = tau_0 * np.exp((delhR*xx / T[i]) + ((1 - xx)*delhR / Tf[i-1])-delhR/T_g)
print(tau[i], T[i], Tf[i-1])
# print(tau[i], T[i], Tf[i-1], dttau)
for j in np.arange(2, i).reshape(-1):
dttau[j] = dttau[j] + (delt[i] / tau[i])
Tfinit = Tfinit + (delT[j] * (1 - np.exp(- (dttau[j] ** beta))))
Tf[i] = Tfinit
T_f_ns.append(Tfinit)
Tfinit = Tf[1]
return T_f_ns
def tnmfunc3(xdata, tau_0, xx, beta, deltaE):
delhR = deltaE/8.314
step = len(xdata)
dttau = []
T = []
Tf = []
t = []
delT = []
delt = []
tau = []
for _ in range(step):
T.append(np.nan)
Tf.append(np.nan)
t.append(np.nan)
delT.append(np.nan)
delt.append(np.nan)
tau.append(np.nan)
dttau.append(0)
T[0] = xdata[0]
Tf[0] = T[0]
t[0] = 0
delT[0] = 0
delt[0] = 0
tau[0] = tau_0 * np.exp(xx * delhR/T[0] + (1-xx)*delhR/Tf[0] - delhR/T_g)
dttau[0] = delt[0]/tau[0]
Tfinit = T[0]
for i in range(1, step):
T[i] = xdata[i]
delT[i] = xdata[i] - xdata[i-1]
delt[i] = abs(delT[i]) * 60 / rate
t[i] = t[i-1] + delt[i]
tau[i] = tau_0 * np.exp(xx * delhR/T[i] + (1-xx)*delhR/Tf[i-1] - delhR/T_g)
for j in range(1, i):
dttau[j] += delt[i]/tau[i]
Tfinit += delT[j] * (1-np.exp(-dttau[j]**beta))
Tf[i] = Tfinit
Tfinit = T[0]
return Tf
def tnmfunc2(xdata, tau_0, xx, beta, deltaE):
delhR = deltaE/8.314
T = []
Tf = []
t = []
delt = []
tau = []
dttau = []
delT = []
step = len(xdata)
for k in range(0, step):
dttau.append(0)
T.append(240)
Tf.append(240)
t.append(0)
delt.append(0)
tau.append(0)
dttau.append(0)
delT.append(0)
T[1] = xdata[1]
Tf[1] = T[1]
t[1] = 0
delt[1] = 0
tau[1] = tau_0 * np.exp((xx*delhR / T[1]) + ((1 - xx)*delhR / Tf[1])-delhR/T_g)
dttau[1] = delt[1] / tau[1]
delT[1] = 0
Tfinit = T[1]
T_f_ns = [xdata[0]]
for i in range(1, step):
T[i] = xdata[i]
delT[i] = xdata[i] - xdata[i-1]
delt[i] = abs(delT[i]) / (rate/60)
t[i] = t[i-1] + delt[i]
tau[i] = tau_0 * np.exp((delhR*xx / T[i]) + ((1 - xx)*delhR / Tf[i-1])-delhR/T_g)
# print(tau[i], T[i], Tf[i-1], dttau)
for j in np.arange(2, i).reshape(-1):
dttau[j] = dttau[j] + (delt[i] / tau[i])
Tfinit = Tfinit + (delT[j] * (1 - np.exp(- (dttau[j] ** beta))))
@ -188,10 +280,31 @@ def fitTNMH(x, tau_0, xx, beta, deltaE):
# Use only every 20th data point to reduce fitting time
temperaturesInterpol = np.linspace(temperatures[0], temperatures[-1], 20)
temperaturesInterpol = np.linspace(150, 200, 5)
temperaturesInterpol = np.linspace(150, 200, 51)
temperaturesInterpol = np.append(temperaturesInterpol[::-1], temperaturesInterpol[1:])
start = time.time()
tnmfunc2(temperaturesInterpol, *p0)
print('Flo', time.time()-start)
start = time.time()
tnmfunc3(temperaturesInterpol, *p0)
print('list', time.time()-start)
start = time.time()
tnmfunc(temperaturesInterpol, *p0)
print('Array', time.time()-start)
dTfdTInterpol = np.interp(temperaturesInterpol, temperatures, dTfdT)
plt.plot(tnmfunc2(temperaturesInterpol, *p0))
plt.plot(tnmfunc(temperaturesInterpol, *p0))
plt.plot(tnmfunc2(temperaturesInterpol, *p0), label='Flo')
plt.plot(tnmfunc3(temperaturesInterpol, *p0), label='List')
plt.plot(tnmfunc(temperaturesInterpol, *p0), label='array')
plt.legend()
plt.show()
plt.plot(np.diff(tnmfunc2(temperaturesInterpol, *p0)), label='Flo')
plt.plot(np.diff(tnmfunc3(temperaturesInterpol, *p0)), label='List')
plt.plot(np.diff(tnmfunc(temperaturesInterpol, *p0)), label='array')
plt.legend()
plt.show()
# print(fitTNMH(temperaturesInterpol, *p0))