-
Notifications
You must be signed in to change notification settings - Fork 1
/
curve_func_2.py
116 lines (89 loc) · 3.12 KB
/
curve_func_2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# stoichiometric matrix
def stoyk():
from numpy import array
#reaction kinetics parameters
n = 10.
return array([[-n, -1., 0., 0., 0., 0., 0.],
[1., 0., -1., 1., 0., 0., 0.],
[1., 0., -1., 1., 0., 0., 0.],
[0., 0., 0., -1., -1., 0., 0.],
[0., 0., 0., -1., 0., 1., 0.],
[0., 0., 0., 0., 0., -2., 1.]])
# Function accepting parameters to give the modelled curves
def model_curves(p, time):
from numpy import linspace, array, append, squeeze, zeros
from scipy.integrate import odeint
from model_parameters import unpack_parameters
#unpack parameter values from parameter structure
para = unpack_parameters(p)
k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, UA, mu_0, E, q, prim_stab_0, LDH_0 = para
# temperature curve parameters
R = 8.314
# initial concentrations
HCl_0 = 0.
poly_act_0 = 5.
# initial temperatures
T_0 = 125.
Tm_0 = 200.
from rxn_rates import r1, r2, r3, r4, r5, r6
from visc_torque_eq import mu, torque
from temp_der import dTdt, dTmdt
# differential equations
def dXdt(A, time):
HCl, LDH, poly_act, radical, prim_stab, deg_poly, x_link, T, Tm = A
r = array([r1(k3, HCl, LDH),
r2(k4, HCl, poly_act),
r3(k5, poly_act),
r4(k6, radical, prim_stab),
r5(k7, radical),
r6(k8, deg_poly)])
return append(squeeze(stoyk().T.dot(r)),
[dTdt(T, mu_0, E, UA, k9, deg_poly, k10, x_link, q, k11),
dTmdt(T, Tm, k2)]
)
A_0 = array([HCl_0, LDH_0, poly_act_0, 0., prim_stab_0, 0., 0., T_0, Tm_0])
soln = odeint(dXdt, A_0, time)
HCl = soln[:, 0]
LDH = soln[:, 1]
poly_act = soln[:, 2]
radical = soln[:, 3]
prim_stab = soln[:, 4]
deg_poly = soln[:, 5]
x_link = soln[:, 6]
T = soln[:, 7]
Tm = soln[:, 8]
mu_V = zeros(len(time))
torque_V = zeros(len(time))
for i in range(0,len(time)):
mu_V[i] = mu(mu_0, E, R, T[i], k9, deg_poly[i], k10, x_link[i], q)
torque_V[i] = torque(k1, mu_V[i])
return HCl, LDH, poly_act, radical, prim_stab, deg_poly, x_link, T, Tm, mu_V, torque_V
# Function only returning torque curve
def torque_curve(p, time):
curves = model_curves(p, time)
return curves[10]
def temp_curve(p, time):
curves = model_curves(p, time)
return curves[8]
def fcn2min_torque(p, time, data):
model = torque_curve(p, time)
return model - data
def fcn2min_temp(p, time, data):
model = temp_curve(p, time)
return model - data
def fcn2min(p, time, data):
model = joined_curves(torque_curve(p, time), temp_curve(p, time))
return model - data
def joined_curves(torque, temp):
from numpy import append
t_list = list(torque)
T_list = list(temp)
t_norm = num_range_equal(t_list, 4.3, 2.824)
T_norm = num_range_equal(T_list, 204.57, 9.347)
return append(t_norm, T_norm)
def num_range_equal(list, m, s):
nre_list = []
for i in list:
nre_val = (i - m)/s
nre_list.append(nre_val)
return nre_list