pydae 0.57.1__py3-none-any.whl → 0.57.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,151 +8,98 @@ Created on Thu August 10 23:52:55 2022
8
8
  import numpy as np
9
9
  import sympy as sym
10
10
 
11
+ from pydae.bmapu.lines.line_dtr import add_line_dtr
12
+
11
13
 
12
14
  def add_lines(self):
15
+ sys = self.system
13
16
 
14
- self.g_line_monitors = []
15
- self.y_line_monitors = []
16
-
17
17
  for line in self.lines:
18
18
 
19
- it = self.it
19
+ if not 'dtr' in line: line.update({'dtr':False})
20
20
 
21
- bus_j = line['bus_j']
22
- bus_k = line['bus_k']
21
+ if line['dtr']:
22
+ add_line_dtr(self, line)
23
+ else:
24
+ add_line(self, line)
23
25
 
24
- idx_j = self.buses_list.index(bus_j)
25
- idx_k = self.buses_list.index(bus_k)
26
26
 
27
- self.A[it,idx_j] = 1
28
- self.A[it,idx_k] =-1
29
- self.A[it+1,idx_j] = 1
30
- self.A[it+2,idx_k] = 1
31
-
32
- line_name = f"{bus_j}_{bus_k}"
33
- g_jk = sym.Symbol(f"g_{line_name}", real=True)
34
- b_jk = sym.Symbol(f"b_{line_name}", real=True)
35
- bs_jk = sym.Symbol(f"bs_{line_name}", real=True)
36
- self.G_primitive[it,it] = g_jk
37
- self.B_primitive[it,it] = b_jk
38
- self.B_primitive[it+1,it+1] = bs_jk/2
39
- self.B_primitive[it+2,it+2] = bs_jk/2
40
-
41
- if not 'thermal' in line:
42
- line.update({'thermal':False})
43
-
44
- if 'X_pu' in line:
45
- if 'S_mva' in line: S_line = 1e6*line['S_mva']
46
- R = line['R_pu']*self.sys['S_base']/S_line # in pu of the system base
47
- X = line['X_pu']*self.sys['S_base']/S_line # in pu of the system base
48
- G = R/(R**2+X**2)
49
- B = -X/(R**2+X**2)
50
- self.params_grid.update({f"g_{line_name}":G})
51
- self.params_grid.update({f'b_{line_name}':B})
52
-
53
- if 'X' in line:
54
- bus_idx = self.buses_list.index(line['bus_j'])
55
- U_base = self.buses[bus_idx]['U_kV']*1000
56
- Z_base = U_base**2/self.sys['S_base']
57
- R = line['R']/Z_base # in pu of the system base
58
- X = line['X']/Z_base # in pu of the system base
59
- G = R/(R**2+X**2)
60
- B = -X/(R**2+X**2)
61
- self.params_grid.update({f"g_{line_name}":G})
62
- self.params_grid.update({f'b_{line_name}':B})
63
-
64
- if 'X_km' in line:
65
- bus_idx = self.buses_list.index(line['bus_j'])
66
- U_base = self.buses[bus_idx]['U_kV']*1000
67
- Z_base = U_base**2/self.sys['S_base']
68
- if line['thermal']:
69
- R = sym.Symbol(f"R_{line_name}", real=True)
70
- R_N = line['R_km']*line['km']/Z_base # in pu of the system base
71
- self.u_grid.update({str(R):R_N})
72
- else:
73
- R = line['R_km']*line['km']/Z_base # in pu of the system base
74
-
75
- X = line['X_km']*line['km']/Z_base # in pu of the system base
76
- G = R/(R**2+X**2)
77
- B = -X/(R**2+X**2)
78
- self.params_grid.update({f"g_{line_name}":G})
79
- self.params_grid.update({f'b_{line_name}':B})
80
-
81
- self.params_grid.update({f'bs_{line_name}':0.0})
82
- if 'Bs_pu' in line:
83
- if 'S_mva' in line: S_line = 1e6*line['S_mva']
84
- Bs = line['Bs_pu']*S_line/self.sys['S_base'] # in pu of the system base
85
- bs = Bs
86
- self.params_grid[f'bs_{line_name}'] = bs
87
-
88
- if 'Bs_km' in line:
89
- bus_idx = self.buses_list.index(line['bus_j'])
90
- U_base = self.buses[bus_idx]['U_kV']*1000
91
- Z_base = U_base**2/self.sys['S_base']
92
- Y_base = 1.0/Z_base
93
- Bs = line['Bs_km']*line['km']/Y_base # in pu of the system base
94
- bs = Bs
95
- self.params_grid[f'bs_{line_name}'] = bs
96
-
97
- it += 3
98
-
99
- if 'monitor' in line:
100
- if line['monitor']:
101
-
102
- bus_j = line['bus_j']
103
- bus_k = line['bus_k']
104
-
105
- line_name = f"{bus_j}_{bus_k}"
27
+ def add_line(self, line):
106
28
 
107
- idx_j = self.buses_list.index(bus_j)
108
- idx_k = self.buses_list.index(bus_k)
109
-
110
- V_j = sym.Symbol(f"V_{bus_j}", real=True)
111
- V_k = sym.Symbol(f"V_{bus_k}", real=True)
112
- theta_j = sym.Symbol(f"theta_{bus_j}", real=True)
113
- theta_k = sym.Symbol(f"theta_{bus_k}", real=True)
114
-
115
- b_ij_p = 0.0
116
- if f'bs_{line_name}' in self.params_grid:
117
- b_ij_p = self.params_grid[f'bs_{line_name}']
118
-
119
- G_jk = g_jk
120
- B_jk = b_jk
121
- theta_jk = theta_j - theta_k
122
- P_line_to = V_j*V_k*(G_jk*sym.cos(theta_jk) + B_jk*sym.sin(theta_jk)) - V_j**2*(G_jk)
123
- Q_line_to = V_j*V_k*(G_jk*sym.sin(theta_jk) - B_jk*sym.cos(theta_jk)) + V_j**2*(B_jk) + V_j**2*(bs_jk/2)
124
- P_line_from = V_j*V_k*(G_jk*sym.cos(-theta_jk) + B_jk*sym.sin(-theta_jk)) - V_k**2*(G_jk)
125
- Q_line_from = V_j*V_k*(G_jk*sym.sin(-theta_jk) - B_jk*sym.cos(-theta_jk)) + V_k**2*(B_jk) + V_k**2*(bs_jk/2)
29
+ sys = self.system
126
30
 
31
+ bus_j = line['bus_j']
32
+ bus_k = line['bus_k']
127
33
 
128
- # h_grid.update({f"p_line_{bus_j}_{bus_k}":P_line_to})
129
- # h_grid.update({f"q_line_{bus_j}_{bus_k}":Q_line_to})
130
- # h_grid.update({f"p_line_{bus_k}_{bus_j}":P_line_from})
131
- # h_grid.update({f"q_line_{bus_k}_{bus_j}":Q_line_from})
132
- p_line_to_pu,q_line_to_pu = sym.symbols(f"p_line_pu_{bus_j}_{bus_k},q_line_pu_{bus_j}_{bus_k}", real=True)
133
- p_line_from_pu,q_line_from_pu = sym.symbols(f"p_line_pu_{bus_k}_{bus_j},q_line_pu_{bus_k}_{bus_j}", real=True)
34
+ idx_j = self.buses_list.index(bus_j)
35
+ idx_k = self.buses_list.index(bus_k)
134
36
 
135
- self.g_line_monitors += [p_line_to_pu - P_line_to]
136
- self.g_line_monitors += [q_line_to_pu - Q_line_to]
137
- self.g_line_monitors += [p_line_from_pu - P_line_from]
138
- self.g_line_monitors += [q_line_from_pu - Q_line_from]
37
+ self.A[self.it,idx_j] = 1
38
+ self.A[self.it,idx_k] =-1
39
+ self.A[self.it+1,idx_j] = 1
40
+ self.A[self.it+2,idx_k] = 1
41
+
42
+ line_name = f"{bus_j}_{bus_k}"
43
+ g_jk = sym.Symbol(f"g_{line_name}", real=True)
44
+ b_jk = sym.Symbol(f"b_{line_name}", real=True)
45
+ bs_jk = sym.Symbol(f"bs_{line_name}", real=True)
46
+ self.G_primitive[self.it,self.it] = g_jk
47
+ self.B_primitive[self.it,self.it] = b_jk
48
+ self.B_primitive[self.it+1,self.it+1] = bs_jk/2
49
+ self.B_primitive[self.it+2,self.it+2] = bs_jk/2
139
50
 
140
- self.y_line_monitors += [p_line_to_pu,q_line_to_pu,p_line_from_pu,q_line_from_pu]
141
-
142
- U_base = self.buses[idx_j]['U_kV']*1000
143
- I_base = self.S_base/(np.sqrt(3)*U_base)
51
+ if not 'thermal' in line:
52
+ line.update({'thermal':False})
144
53
 
145
- self.h_grid.update({f'p_line_{bus_j}_{bus_k}':p_line_to_pu*self.S_base})
146
- self.h_grid.update({f'q_line_{bus_j}_{bus_k}':q_line_to_pu*self.S_base})
147
- self.h_grid.update({f'p_line_{bus_k}_{bus_j}':p_line_from_pu*self.S_base})
148
- self.h_grid.update({f'q_line_{bus_k}_{bus_j}':q_line_from_pu*self.S_base})
54
+ if 'X_pu' in line:
55
+ if 'S_mva' in line: S_line = 1e6*line['S_mva']
56
+ R = line['R_pu']*sys['S_base']/S_line # in pu of the system base
57
+ X = line['X_pu']*sys['S_base']/S_line # in pu of the system base
58
+ G = R/(R**2+X**2)
59
+ B = -X/(R**2+X**2)
60
+ self.dae['params_dict'].update({f"g_{line_name}":G})
61
+ self.dae['params_dict'].update({f'b_{line_name}':B})
149
62
 
150
- I_j_k_pu = ( p_line_to_pu**2 + q_line_to_pu**2)**0.5/V_j
151
- I_k_j_pu = (p_line_from_pu**2 + q_line_from_pu**2)**0.5/V_k
63
+ if 'X' in line:
64
+ bus_idx = buses_list.index(line['bus_j'])
65
+ U_base = self.buses[bus_idx]['U_kV']*1000
66
+ Z_base = U_base**2/sys['S_base']
67
+ R = line['R']/Z_base # in pu of the system base
68
+ X = line['X']/Z_base # in pu of the system base
69
+ G = R/(R**2+X**2)
70
+ B = -X/(R**2+X**2)
71
+ self.dae['params_dict'].update({f"g_{line_name}":G})
72
+ self.dae['params_dict'].update({f'b_{line_name}':B})
152
73
 
153
- self.h_grid.update({f'I_line_{bus_j}_{bus_k}':I_j_k_pu*I_base})
154
- self.h_grid.update({f'I_line_{bus_k}_{bus_j}':I_k_j_pu*I_base})
74
+ if 'X_km' in line:
75
+ bus_idx = self.buses_list.index(line['bus_j'])
76
+ U_base = self.buses[bus_idx]['U_kV']*1000
77
+ Z_base = U_base**2/sys['S_base']
78
+ R = line['R_km']*line['km']/Z_base # in pu of the system base
79
+
80
+ X = line['X_km']*line['km']/Z_base # in pu of the system base
81
+ G = R/(R**2+X**2)
82
+ B = -X/(R**2+X**2)
83
+ self.dae['params_dict'].update({f"g_{line_name}":G})
84
+ self.dae['params_dict'].update({f'b_{line_name}':B})
85
+
86
+ self.dae['params_dict'].update({f'bs_{line_name}':0.0})
87
+ if 'Bs_pu' in line:
88
+ if 'S_mva' in line: S_line = 1e6*line['S_mva']
89
+ Bs = line['Bs_pu']*S_line/sys['S_base'] # in pu of the system base
90
+ bs = Bs
91
+ self.dae['params_dict'][f'bs_{line_name}'] = bs
155
92
 
93
+ if 'Bs_km' in line:
94
+ bus_idx = self.buses_list.index(line['bus_j'])
95
+ U_base = self.buses[bus_idx]['U_kV']*1000
96
+ Z_base = U_base**2/sys['S_base']
97
+ Y_base = 1.0/Z_base
98
+ Bs = line['Bs_km']*line['km']/Y_base # in pu of the system base
99
+ bs = Bs
100
+ self.dae['params_dict'][f'bs_{line_name}'] = bs
101
+
102
+ self.it += 3
156
103
 
157
104
 
158
105
  def change_line(model,bus_j,bus_k, *args,**kwagrs):
@@ -230,6 +177,8 @@ def test_line_pu_build():
230
177
  grid.uz_jacs = False
231
178
  grid.verbose = True
232
179
  grid.construct(f'temp')
180
+
181
+
233
182
  build_numba(grid.sys_dict)
234
183
 
235
184
  def test_line_pu_ini():
@@ -267,6 +216,10 @@ def test_line_km_build():
267
216
  grid.uz_jacs = False
268
217
  grid.verbose = True
269
218
  grid.construct(f'temp')
219
+
220
+ print(grid.sys_dict)
221
+
222
+
270
223
  build_numba(grid.sys_dict)
271
224
 
272
225
  def test_line_km_ini():
@@ -274,7 +227,7 @@ def test_line_km_ini():
274
227
  import temp
275
228
 
276
229
  model = temp.model()
277
- model.ini({'P_2':5000e6,'Q_2':0, "K_xif":0.01},'xy_0.json')
230
+ model.ini({'P_2':5000e6,'Q_2':0, "K_p_agc":0.0,"K_i_agc":0.0, "K_xif":0.01},'xy_0.json')
278
231
  print(f"V_1 = {model.get_value('V_1'):2.2f}, V_2 = {model.get_value('V_2'):2.2f}")
279
232
 
280
233
  print("report_y:")
pydae/bmapu/lines/temp.py CHANGED
@@ -92,7 +92,7 @@ class model:
92
92
  self.solvern = 5
93
93
  self.imax = 100
94
94
  self.N_x = 2
95
- self.N_y = 10
95
+ self.N_y = 12
96
96
  self.N_z = 9
97
97
  self.N_store = 100000
98
98
  self.params_list = ['S_base', 'g_1_2', 'b_1_2', 'bs_1_2', 'U_1_n', 'U_2_n', 'K_p_agc', 'K_i_agc', 'K_xif']
@@ -101,11 +101,11 @@ class model:
101
101
  self.inputs_ini_values_list = [0.0, 0.0, 5000000000.0, 0.0, 1.0, 0.0]
102
102
  self.inputs_run_list = ['P_1', 'Q_1', 'P_2', 'Q_2', 'v_ref_1', 'theta_ref_1']
103
103
  self.inputs_run_values_list = [0.0, 0.0, 5000000000.0, 0.0, 1.0, 0.0]
104
- self.outputs_list = ['p_line_1_2', 'q_line_1_2', 'p_line_2_1', 'q_line_2_1', 'I_line_1_2', 'I_line_2_1', 'V_1', 'V_2', 'V_dummy_1']
104
+ self.outputs_list = ['V_1', 'V_2', 'p_line_1_2', 'q_line_1_2', 'p_line_2_1', 'q_line_2_1', 'I_line_1_2', 'I_line_2_1', 'V_dummy_1']
105
105
  self.x_list = ['V_dummy_1', 'xi_freq']
106
- self.y_run_list = ['V_1', 'theta_1', 'V_2', 'theta_2', 'omega_coi', 'p_line_pu_1_2', 'q_line_pu_1_2', 'p_line_pu_2_1', 'q_line_pu_2_1', 'p_agc']
106
+ self.y_run_list = ['V_1', 'theta_1', 'V_2', 'theta_2', 'p_line_pu_1_2', 'q_line_pu_1_2', 'p_line_pu_2_1', 'q_line_pu_2_1', 'I_1_2', 'I_2_1', 'omega_coi', 'p_agc']
107
107
  self.xy_list = self.x_list + self.y_run_list
108
- self.y_ini_list = ['V_1', 'theta_1', 'V_2', 'theta_2', 'omega_coi', 'p_line_pu_1_2', 'q_line_pu_1_2', 'p_line_pu_2_1', 'q_line_pu_2_1', 'p_agc']
108
+ self.y_ini_list = ['V_1', 'theta_1', 'V_2', 'theta_2', 'p_line_pu_1_2', 'q_line_pu_1_2', 'p_line_pu_2_1', 'q_line_pu_2_1', 'I_1_2', 'I_2_1', 'omega_coi', 'p_agc']
109
109
  self.xy_ini_list = self.x_list + self.y_ini_list
110
110
  self.t = 0.0
111
111
  self.it = 0
@@ -264,6 +264,10 @@ class model:
264
264
  # jac_run_ss_eval_xy(self.jac_run,self.x,self.y_run,self.u_run,self.p)
265
265
  # jac_run_ss_eval_up(self.jac_run,self.x,self.y_run,self.u_run,self.p)
266
266
 
267
+
268
+ def jac_ini_eval(self):
269
+ de_jac_ini_eval(self.jac_ini,self.x,self.y_ini,self.u_ini,self.p,self.Dt)
270
+
267
271
  def jac_run_eval(self):
268
272
  de_jac_run_eval(self.jac_run,self.x,self.y_run,self.u_run,self.p,self.Dt)
269
273
 
@@ -1800,24 +1804,24 @@ def c_h_eval(z,x,y,u,p,Dt):
1800
1804
 
1801
1805
  def sp_jac_ini_vectors():
1802
1806
 
1803
- sp_jac_ini_ia = [0, 1, 6, 2, 3, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 4, 5, 7, 2, 3, 4, 5, 8, 2, 3, 4, 5, 9, 2, 3, 4, 5, 10, 1, 6, 11]
1804
- sp_jac_ini_ja = [0, 1, 3, 4, 5, 9, 13, 14, 19, 24, 29, 34, 37]
1805
- sp_jac_ini_nia = 12
1806
- sp_jac_ini_nja = 12
1807
+ sp_jac_ini_ia = [0, 1, 12, 2, 3, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 4, 5, 7, 2, 3, 4, 5, 8, 2, 3, 4, 5, 9, 2, 6, 7, 10, 4, 8, 9, 11, 12, 1, 12, 13]
1808
+ sp_jac_ini_ja = [0, 1, 3, 4, 5, 9, 13, 18, 23, 28, 33, 37, 41, 42, 45]
1809
+ sp_jac_ini_nia = 14
1810
+ sp_jac_ini_nja = 14
1807
1811
  return sp_jac_ini_ia, sp_jac_ini_ja, sp_jac_ini_nia, sp_jac_ini_nja
1808
1812
 
1809
1813
  def sp_jac_run_vectors():
1810
1814
 
1811
- sp_jac_run_ia = [0, 1, 6, 2, 3, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 4, 5, 7, 2, 3, 4, 5, 8, 2, 3, 4, 5, 9, 2, 3, 4, 5, 10, 1, 6, 11]
1812
- sp_jac_run_ja = [0, 1, 3, 4, 5, 9, 13, 14, 19, 24, 29, 34, 37]
1813
- sp_jac_run_nia = 12
1814
- sp_jac_run_nja = 12
1815
+ sp_jac_run_ia = [0, 1, 12, 2, 3, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 4, 5, 7, 2, 3, 4, 5, 8, 2, 3, 4, 5, 9, 2, 6, 7, 10, 4, 8, 9, 11, 12, 1, 12, 13]
1816
+ sp_jac_run_ja = [0, 1, 3, 4, 5, 9, 13, 18, 23, 28, 33, 37, 41, 42, 45]
1817
+ sp_jac_run_nia = 14
1818
+ sp_jac_run_nja = 14
1815
1819
  return sp_jac_run_ia, sp_jac_run_ja, sp_jac_run_nia, sp_jac_run_nja
1816
1820
 
1817
1821
  def sp_jac_trap_vectors():
1818
1822
 
1819
- sp_jac_trap_ia = [0, 1, 6, 2, 3, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 4, 5, 7, 2, 3, 4, 5, 8, 2, 3, 4, 5, 9, 2, 3, 4, 5, 10, 1, 6, 11]
1820
- sp_jac_trap_ja = [0, 1, 3, 4, 5, 9, 13, 14, 19, 24, 29, 34, 37]
1821
- sp_jac_trap_nia = 12
1822
- sp_jac_trap_nja = 12
1823
+ sp_jac_trap_ia = [0, 1, 12, 2, 3, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 4, 5, 7, 2, 3, 4, 5, 8, 2, 3, 4, 5, 9, 2, 6, 7, 10, 4, 8, 9, 11, 12, 1, 12, 13]
1824
+ sp_jac_trap_ja = [0, 1, 3, 4, 5, 9, 13, 18, 23, 28, 33, 37, 41, 42, 45]
1825
+ sp_jac_trap_nia = 14
1826
+ sp_jac_trap_nja = 14
1823
1827
  return sp_jac_trap_ia, sp_jac_trap_ja, sp_jac_trap_nia, sp_jac_trap_nja
@@ -573,7 +573,7 @@ static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *);
573
573
  void f_ini_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
574
574
 
575
575
  data[0] = -x[0] + u[4];
576
- data[1] = -p[8]*x[1] - y[4] + 1;
576
+ data[1] = -p[8]*x[1] - y[10] + 1;
577
577
 
578
578
  }
579
579
 
@@ -583,78 +583,88 @@ data[0] = y[0] - u[4];
583
583
  data[1] = y[1] - u[5];
584
584
  data[2] = -u[2]/p[0] + y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + pow(y[2], 2)*p[1];
585
585
  data[3] = -u[3]/p[0] + y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + pow(y[2], 2)*(-p[2] - 1.0/2.0*p[3]);
586
- data[4] = 1.0 - y[4];
587
- data[5] = pow(y[0], 2)*p[1] - y[0]*y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3])) + y[5];
588
- data[6] = -pow(y[0], 2)*p[2] - 1.0/2.0*pow(y[0], 2)*p[3] - y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + y[6];
589
- data[7] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3])) + pow(y[2], 2)*p[1] + y[7];
590
- data[8] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3])) - pow(y[2], 2)*p[2] - 1.0/2.0*pow(y[2], 2)*p[3] + y[8];
591
- data[9] = p[7]*x[1] + p[6]*(1 - y[4]) - y[9];
586
+ data[4] = -pow(y[0], 2)*p[1] - y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + y[4];
587
+ data[5] = pow(y[0], 2)*p[2] - y[0]*y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3])) + y[5];
588
+ data[6] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) - pow(y[2], 2)*p[1] + y[6];
589
+ data[7] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + pow(y[2], 2)*p[2] + y[7];
590
+ data[8] = -y[8] + 1.4433756729740647e-6*p[0]*sqrt(pow(y[4], 2) + pow(y[5], 2))/y[0];
591
+ data[9] = -y[9] + 1.4433756729740647e-6*p[0]*sqrt(pow(y[6], 2) + pow(y[7], 2))/y[2];
592
+ data[10] = 1.0 - y[10];
593
+ data[11] = p[7]*x[1] + p[6]*(1 - y[10]) - y[11];
592
594
 
593
595
  }
594
596
 
595
597
  void h_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
596
598
 
597
- data[0] = p[0]*y[5];
598
- data[1] = p[0]*y[6];
599
- data[2] = p[0]*y[7];
600
- data[3] = p[0]*y[8];
601
- data[4] = 1.4433756729740647e-6*p[0]*sqrt(pow(y[5], 2) + pow(y[6], 2))/y[0];
602
- data[5] = 1.4433756729740647e-6*p[0]*sqrt(pow(y[7], 2) + pow(y[8], 2))/y[2];
603
- data[6] = y[0];
604
- data[7] = y[2];
599
+ data[0] = y[0];
600
+ data[1] = y[2];
601
+ data[2] = p[0]*y[4];
602
+ data[3] = p[0]*y[5];
603
+ data[4] = p[0]*y[6];
604
+ data[5] = p[0]*y[7];
605
+ data[6] = y[8];
606
+ data[7] = y[9];
605
607
  data[8] = x[0];
606
608
 
607
609
  }
608
610
 
609
611
  void de_jac_ini_up_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
610
612
 
611
- data[13] = -p[8];
612
- data[133] = p[7];
613
- data[138] = -p[6];
613
+ data[15] = -p[8];
614
+ data[183] = p[7];
615
+ data[194] = -p[6];
614
616
 
615
617
  }
616
618
 
617
619
  void de_jac_ini_xy_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
618
620
 
619
- data[50] = y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
620
- data[51] = y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
621
- data[52] = y[0]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + 2*y[2]*p[1];
622
- data[53] = y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
623
- data[62] = y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
624
- data[63] = y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
625
- data[64] = y[0]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + 2*y[2]*(-p[2] - 1.0/2.0*p[3]);
626
- data[65] = y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
627
- data[86] = 2*y[0]*p[1] - y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
628
- data[87] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
629
- data[88] = -y[0]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
630
- data[89] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
631
- data[98] = -2*y[0]*p[2] - y[0]*p[3] - y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
632
- data[99] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
633
- data[100] = -y[0]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
621
+ data[58] = y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
622
+ data[59] = y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
623
+ data[60] = y[0]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + 2*y[2]*p[1];
624
+ data[61] = y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
625
+ data[72] = y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
626
+ data[73] = y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
627
+ data[74] = y[0]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + 2*y[2]*(-p[2] - 1.0/2.0*p[3]);
628
+ data[75] = y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
629
+ data[86] = -2*y[0]*p[1] - y[2]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
630
+ data[87] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
631
+ data[88] = -y[0]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
632
+ data[89] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
633
+ data[100] = 2*y[0]*p[2] - y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
634
634
  data[101] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
635
- data[110] = -y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
636
- data[111] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
637
- data[112] = -y[0]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3])) + 2*y[2]*p[1];
638
- data[113] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
639
- data[122] = -y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
640
- data[123] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
641
- data[124] = -y[0]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3])) - 2*y[2]*p[2] - y[2]*p[3];
642
- data[125] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
635
+ data[102] = -y[0]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
636
+ data[103] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
637
+ data[114] = -y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
638
+ data[115] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
639
+ data[116] = -y[0]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) - 2*y[2]*p[1];
640
+ data[117] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
641
+ data[128] = -y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
642
+ data[129] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
643
+ data[130] = -y[0]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + 2*y[2]*p[2];
644
+ data[131] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
645
+ data[142] = -1.4433756729740647e-6*p[0]*sqrt(pow(y[4], 2) + pow(y[5], 2))/pow(y[0], 2);
646
+ data[146] = 1.4433756729740647e-6*p[0]*y[4]*pow(pow(y[4], 2) + pow(y[5], 2), -0.5)/y[0];
647
+ data[147] = 1.4433756729740647e-6*p[0]*y[5]*pow(pow(y[4], 2) + pow(y[5], 2), -0.5)/y[0];
648
+ data[158] = -1.4433756729740647e-6*p[0]*sqrt(pow(y[6], 2) + pow(y[7], 2))/pow(y[2], 2);
649
+ data[162] = 1.4433756729740647e-6*p[0]*y[6]*pow(pow(y[6], 2) + pow(y[7], 2), -0.5)/y[2];
650
+ data[163] = 1.4433756729740647e-6*p[0]*y[7]*pow(pow(y[6], 2) + pow(y[7], 2), -0.5)/y[2];
643
651
 
644
652
  }
645
653
 
646
654
  void de_jac_ini_num_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
647
655
 
648
656
  data[0] = -1;
649
- data[18] = -1;
650
- data[26] = 1;
651
- data[39] = 1;
652
- data[78] = -1;
653
- data[91] = 1;
654
- data[104] = 1;
655
- data[117] = 1;
656
- data[130] = 1;
657
- data[143] = -1;
657
+ data[26] = -1;
658
+ data[30] = 1;
659
+ data[45] = 1;
660
+ data[90] = 1;
661
+ data[105] = 1;
662
+ data[120] = 1;
663
+ data[135] = 1;
664
+ data[150] = -1;
665
+ data[165] = -1;
666
+ data[180] = -1;
667
+ data[195] = -1;
658
668
 
659
669
  }
660
670
 
@@ -573,7 +573,7 @@ static void (*_cffi_call_python_org)(struct _cffi_externpy_s *, char *);
573
573
  void f_run_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
574
574
 
575
575
  data[0] = -x[0] + u[4];
576
- data[1] = -p[8]*x[1] - y[4] + 1;
576
+ data[1] = -p[8]*x[1] - y[10] + 1;
577
577
 
578
578
  }
579
579
 
@@ -583,78 +583,88 @@ data[0] = y[0] - u[4];
583
583
  data[1] = y[1] - u[5];
584
584
  data[2] = -u[2]/p[0] + y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + pow(y[2], 2)*p[1];
585
585
  data[3] = -u[3]/p[0] + y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + pow(y[2], 2)*(-p[2] - 1.0/2.0*p[3]);
586
- data[4] = 1.0 - y[4];
587
- data[5] = pow(y[0], 2)*p[1] - y[0]*y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3])) + y[5];
588
- data[6] = -pow(y[0], 2)*p[2] - 1.0/2.0*pow(y[0], 2)*p[3] - y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + y[6];
589
- data[7] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3])) + pow(y[2], 2)*p[1] + y[7];
590
- data[8] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3])) - pow(y[2], 2)*p[2] - 1.0/2.0*pow(y[2], 2)*p[3] + y[8];
591
- data[9] = p[7]*x[1] + p[6]*(1 - y[4]) - y[9];
586
+ data[4] = -pow(y[0], 2)*p[1] - y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + y[4];
587
+ data[5] = pow(y[0], 2)*p[2] - y[0]*y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3])) + y[5];
588
+ data[6] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) - pow(y[2], 2)*p[1] + y[6];
589
+ data[7] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + pow(y[2], 2)*p[2] + y[7];
590
+ data[8] = -y[8] + 1.4433756729740647e-6*p[0]*sqrt(pow(y[4], 2) + pow(y[5], 2))/y[0];
591
+ data[9] = -y[9] + 1.4433756729740647e-6*p[0]*sqrt(pow(y[6], 2) + pow(y[7], 2))/y[2];
592
+ data[10] = 1.0 - y[10];
593
+ data[11] = p[7]*x[1] + p[6]*(1 - y[10]) - y[11];
592
594
 
593
595
  }
594
596
 
595
597
  void h_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
596
598
 
597
- data[0] = p[0]*y[5];
598
- data[1] = p[0]*y[6];
599
- data[2] = p[0]*y[7];
600
- data[3] = p[0]*y[8];
601
- data[4] = 1.4433756729740647e-6*p[0]*sqrt(pow(y[5], 2) + pow(y[6], 2))/y[0];
602
- data[5] = 1.4433756729740647e-6*p[0]*sqrt(pow(y[7], 2) + pow(y[8], 2))/y[2];
603
- data[6] = y[0];
604
- data[7] = y[2];
599
+ data[0] = y[0];
600
+ data[1] = y[2];
601
+ data[2] = p[0]*y[4];
602
+ data[3] = p[0]*y[5];
603
+ data[4] = p[0]*y[6];
604
+ data[5] = p[0]*y[7];
605
+ data[6] = y[8];
606
+ data[7] = y[9];
605
607
  data[8] = x[0];
606
608
 
607
609
  }
608
610
 
609
611
  void de_jac_run_up_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
610
612
 
611
- data[13] = -p[8];
612
- data[133] = p[7];
613
- data[138] = -p[6];
613
+ data[15] = -p[8];
614
+ data[183] = p[7];
615
+ data[194] = -p[6];
614
616
 
615
617
  }
616
618
 
617
619
  void de_jac_run_xy_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
618
620
 
619
- data[50] = y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
620
- data[51] = y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
621
- data[52] = y[0]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + 2*y[2]*p[1];
622
- data[53] = y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
623
- data[62] = y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
624
- data[63] = y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
625
- data[64] = y[0]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + 2*y[2]*(-p[2] - 1.0/2.0*p[3]);
626
- data[65] = y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
627
- data[86] = 2*y[0]*p[1] - y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
628
- data[87] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
629
- data[88] = -y[0]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
630
- data[89] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
631
- data[98] = -2*y[0]*p[2] - y[0]*p[3] - y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
632
- data[99] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
633
- data[100] = -y[0]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
621
+ data[58] = y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
622
+ data[59] = y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
623
+ data[60] = y[0]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) + 2*y[2]*p[1];
624
+ data[61] = y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
625
+ data[72] = y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
626
+ data[73] = y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
627
+ data[74] = y[0]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + 2*y[2]*(-p[2] - 1.0/2.0*p[3]);
628
+ data[75] = y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
629
+ data[86] = -2*y[0]*p[1] - y[2]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
630
+ data[87] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
631
+ data[88] = -y[0]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
632
+ data[89] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
633
+ data[100] = 2*y[0]*p[2] - y[2]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
634
634
  data[101] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
635
- data[110] = -y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
636
- data[111] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
637
- data[112] = -y[0]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3])) + 2*y[2]*p[1];
638
- data[113] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
639
- data[122] = -y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
640
- data[123] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
641
- data[124] = -y[0]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3])) - 2*y[2]*p[2] - y[2]*p[3];
642
- data[125] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
635
+ data[102] = -y[0]*(p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
636
+ data[103] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
637
+ data[114] = -y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
638
+ data[115] = -y[0]*y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
639
+ data[116] = -y[0]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3])) - 2*y[2]*p[1];
640
+ data[117] = -y[0]*y[2]*(-p[2]*cos(y[1] - y[3]) - p[1]*sin(y[1] - y[3]));
641
+ data[128] = -y[2]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3]));
642
+ data[129] = -y[0]*y[2]*(-p[2]*sin(y[1] - y[3]) + p[1]*cos(y[1] - y[3]));
643
+ data[130] = -y[0]*(p[2]*cos(y[1] - y[3]) + p[1]*sin(y[1] - y[3])) + 2*y[2]*p[2];
644
+ data[131] = -y[0]*y[2]*(p[2]*sin(y[1] - y[3]) - p[1]*cos(y[1] - y[3]));
645
+ data[142] = -1.4433756729740647e-6*p[0]*sqrt(pow(y[4], 2) + pow(y[5], 2))/pow(y[0], 2);
646
+ data[146] = 1.4433756729740647e-6*p[0]*y[4]*pow(pow(y[4], 2) + pow(y[5], 2), -0.5)/y[0];
647
+ data[147] = 1.4433756729740647e-6*p[0]*y[5]*pow(pow(y[4], 2) + pow(y[5], 2), -0.5)/y[0];
648
+ data[158] = -1.4433756729740647e-6*p[0]*sqrt(pow(y[6], 2) + pow(y[7], 2))/pow(y[2], 2);
649
+ data[162] = 1.4433756729740647e-6*p[0]*y[6]*pow(pow(y[6], 2) + pow(y[7], 2), -0.5)/y[2];
650
+ data[163] = 1.4433756729740647e-6*p[0]*y[7]*pow(pow(y[6], 2) + pow(y[7], 2), -0.5)/y[2];
643
651
 
644
652
  }
645
653
 
646
654
  void de_jac_run_num_eval(double *data,double *x,double *y,double *u,double *p,double Dt){
647
655
 
648
656
  data[0] = -1;
649
- data[18] = -1;
650
- data[26] = 1;
651
- data[39] = 1;
652
- data[78] = -1;
653
- data[91] = 1;
654
- data[104] = 1;
655
- data[117] = 1;
656
- data[130] = 1;
657
- data[143] = -1;
657
+ data[26] = -1;
658
+ data[30] = 1;
659
+ data[45] = 1;
660
+ data[90] = 1;
661
+ data[105] = 1;
662
+ data[120] = 1;
663
+ data[135] = 1;
664
+ data[150] = -1;
665
+ data[165] = -1;
666
+ data[180] = -1;
667
+ data[195] = -1;
658
668
 
659
669
  }
660
670