pydae 0.54.2__py3-none-any.whl → 0.54.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.
pydae/__init__.py CHANGED
@@ -7,5 +7,5 @@ Differential Algebraic Equations in Python
7
7
 
8
8
  """
9
9
 
10
- __version__ = "0.54.2"
10
+ __version__ = "0.54.3"
11
11
 
@@ -10,6 +10,7 @@ import sympy as sym
10
10
 
11
11
  def add_pll(grid,data):
12
12
  """
13
+ Implements a Phase-Lock Loop that can be used from other devices
13
14
 
14
15
  "plls":[{bus:"1","K_p_pll": 180, "K_i_pll": 3200, "T_pll": 0.02}]
15
16
  """
@@ -30,10 +31,10 @@ def add_pll(grid,data):
30
31
 
31
32
  # PLL
32
33
  # dynamic states
33
- theta_pll,xi_pll,omega_pll_f = sym.symbols(f'theta_pll_{name},xi_pll_{name},omega_pll_f_{name}', real=True)
34
+ theta_pll,xi_pll,omega_pll_f, rocof_pll_f = sym.symbols(f'theta_pll_{name},xi_pll_{name},omega_pll_f_{name}, rocof_pll_f_{name}', real=True)
34
35
 
35
36
  # algebraic statate
36
- rocof = sym.symbols(f'rocof_{name}', real=True)
37
+ rocof_pll = sym.symbols(f'rocof_pll_{name}', real=True)
37
38
 
38
39
 
39
40
  # parameters
@@ -50,15 +51,15 @@ def add_pll(grid,data):
50
51
  dtheta_pll = 2*np.pi*50*(omega_pll - omega_coi)*K_theta_pll
51
52
  dxi_pll = v_sd_pll
52
53
  domega_pll_f = 1/T_pll*(omega_pll - omega_pll_f)
53
-
54
- eq_rocof = rocof - domega_pll_f
54
+ drocof_pll_f = 1/T_pll*(rocof_pll - rocof_pll_f)
55
+ eq_rocof = rocof_pll - domega_pll_f
55
56
 
56
57
 
57
- grid.dae['f'] += [dtheta_pll,dxi_pll,domega_pll_f]
58
- grid.dae['x'] += [ theta_pll, xi_pll, omega_pll_f]
58
+ grid.dae['f'] += [dtheta_pll,dxi_pll,domega_pll_f, drocof_pll_f]
59
+ grid.dae['x'] += [ theta_pll, xi_pll, omega_pll_f, rocof_pll_f]
59
60
  grid.dae['g'] += [eq_rocof]
60
- grid.dae['y_ini'] += [rocof]
61
- grid.dae['y_run'] += [rocof]
61
+ grid.dae['y_ini'] += [rocof_pll]
62
+ grid.dae['y_run'] += [rocof_pll]
62
63
  grid.dae['params_dict'].update({f'K_p_pll_{name}':data['K_p_pll']})
63
64
  grid.dae['params_dict'].update({f'K_i_pll_{name}':data['K_i_pll']})
64
65
  grid.dae['params_dict'].update({f'T_pll_{name}':data['T_pll']})
@@ -66,7 +67,7 @@ def add_pll(grid,data):
66
67
 
67
68
  grid.dae['h_dict'].update({f"omega_pll_{name}":omega_pll})
68
69
  grid.dae['h_dict'].update({f"omega_pll_f_{name}":omega_pll_f})
69
- grid.dae['h_dict'].update({f"rocof_{name}":rocof})
70
+ grid.dae['h_dict'].update({f"rocof_pll_{name}":rocof_pll})
70
71
 
71
72
  def test():
72
73
  import numpy as np
@@ -101,7 +101,7 @@ def milano4ord(grid,name,bus_name,data_dict):
101
101
 
102
102
  grid.dae['xy_0_dict'].update({str(omega):1.0})
103
103
  grid.dae['xy_0_dict'].update({str(e1q):1.0})
104
- grid.dae['xy_0_dict'].update({str(i_q):0.5})
104
+ grid.dae['xy_0_dict'].update({str(i_q):1.0})
105
105
 
106
106
 
107
107
  # outputs
@@ -211,7 +211,7 @@
211
211
  "name": "python",
212
212
  "nbconvert_exporter": "python",
213
213
  "pygments_lexer": "ipython3",
214
- "version": "3.11.5"
214
+ "version": "3.11.7"
215
215
  },
216
216
  "orig_nbformat": 4
217
217
  },
pydae/bmapu/vscs/temp.py CHANGED
@@ -92,21 +92,21 @@ class model:
92
92
  self.Dt_min = 0.001000
93
93
  self.solvern = 5
94
94
  self.imax = 100
95
- self.N_x = 4
96
- self.N_y = 21
97
- self.N_z = 20
95
+ self.N_x = 8
96
+ self.N_y = 14
97
+ self.N_z = 10
98
98
  self.N_store = 100000
99
- self.params_list = ['S_base', 'g_WFM_WFH', 'b_WFM_WFH', 'bs_WFM_WFH', 'g_WFD_GRD', 'b_WFD_GRD', 'bs_WFD_GRD', 'U_WFM_n', 'U_WFH_n', 'U_WFD_n', 'U_GRD_n', 'U_GRI_n', 'S_n_WFD_WFH', 'R_s_WFD_WFH', 'X_s_WFD_WFH', 'Losses_p_WFD_WFH', 'Losses_s_WFD_WFH', 'S_n_GRD_GRI', 'R_d_GRD_GRI', 'X_d_GRD_GRI', 'Losses_p_GRD_GRI', 'Losses_s_GRD_GRI', 'S_n_GRI', 'F_n_GRI', 'X_v_GRI', 'R_v_GRI', 'K_delta_GRI', 'K_alpha_GRI', 'K_rocov_GRI', 'K_p_agc', 'K_i_agc', 'K_xif']
100
- self.params_values_list = [1000000000, 0.0, -19.999999999999996, 2e-06, 170.0357142857143, -0.0, 0.0, 33000, 400000, 690000, 690000, 400000, 2000000000, 0.0001, 0, 0.015, 0.01, 2000000000, 0.0001, 0, 0.015, 0.01, 100000000000.0, 50, 0.001, 0, 0.001, 1e-06, 1e-06, 0, 0, 1e-06]
101
- self.inputs_ini_list = ['P_WFM', 'Q_WFM', 'P_WFH', 'Q_WFH', 'P_WFD', 'Q_WFD', 'P_GRD', 'Q_GRD', 'P_GRI', 'Q_GRI', 'V_t_m_WFH', 'theta_t_WFH', 'V_t_m_GRD', 'q_s_ref_GRI', 'alpha_GRI', 'v_ref_GRI', 'omega_ref_GRI', 'delta_ref_GRI', 'phi_GRI', 'rocov_GRI']
102
- self.inputs_ini_values_list = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0.0, 1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0, 0.0]
103
- self.inputs_run_list = ['P_WFM', 'Q_WFM', 'P_WFH', 'Q_WFH', 'P_WFD', 'Q_WFD', 'P_GRD', 'Q_GRD', 'P_GRI', 'Q_GRI', 'V_t_m_WFH', 'theta_t_WFH', 'V_t_m_GRD', 'q_s_ref_GRI', 'alpha_GRI', 'v_ref_GRI', 'omega_ref_GRI', 'delta_ref_GRI', 'phi_GRI', 'rocov_GRI']
104
- self.inputs_run_values_list = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0.0, 1.0, 0.0, 0, 1.0, 1.0, 0.0, 0.0, 0.0]
105
- self.outputs_list = ['V_WFM', 'V_WFH', 'V_WFD', 'V_GRD', 'V_GRI', 'p_line_WFM_WFH', 'q_line_WFM_WFH', 'p_line_WFH_WFM', 'q_line_WFH_WFM', 'p_line_WFD_GRD', 'q_line_WFD_GRD', 'p_line_GRD_WFD', 'q_line_GRD_WFD', 'i_s_m_WFD_WFH', 'V_t_m_WFD_WFH', 'p_dc_WFD_WFH', 'i_d_GRD_GRI', 'V_t_m_GRD_GRI', 'alpha_GRI', 'Dv_GRI']
106
- self.x_list = ['delta_GRI', 'Domega_GRI', 'Dv_GRI', 'xi_freq']
107
- self.y_run_list = ['V_WFM', 'theta_WFM', 'V_WFH', 'theta_WFH', 'V_WFD', 'theta_WFD', 'V_GRD', 'theta_GRD', 'V_GRI', 'theta_GRI', 'i_s_r_WFH', 'i_s_i_WFH', 'i_d_r_GRD', 'i_d_i_GRD', 'omega_GRI', 'i_d_GRI', 'i_q_GRI', 'p_s_GRI', 'q_s_GRI', 'omega_coi', 'p_agc']
99
+ self.params_list = ['S_base', 'g_1_2', 'b_1_2', 'bs_1_2', 'U_1_n', 'U_2_n', 'S_n_1', 'K_pfr_1', 'K_h_1', 'K_qv_1', 'K_p_pll_1', 'K_i_pll_1', 'T_pll_1', 'K_theta_pll_1', 'S_n_2', 'F_n_2', 'X_v_2', 'R_v_2', 'K_delta_2', 'K_alpha_2', 'K_rocov_2', 'K_p_agc', 'K_i_agc', 'K_xif']
100
+ self.params_values_list = [100000000, 0.0, -19.999999999999996, 0.0, 20000, 20000, 1000000, 0.0, 0.0, 0.0, 180, 3200, 0.02, 1.0, 100000000, 50, 0.01, 0, 0.01, 0.01, 1e-06, 0, 0, 1e-06]
101
+ self.inputs_ini_list = ['P_1', 'Q_1', 'P_2', 'Q_2', 'p_in_1', 'Dp_r_1', 'Dq_r_1', 'v_ref_1', 'alpha_2', 'v_ref_2', 'omega_ref_2', 'delta_ref_2', 'phi_2', 'rocov_2']
102
+ self.inputs_ini_values_list = [0, 0, 0, 0, 0.8, 0.0, 0.0, 1.0, 0, 1.0, 1.0, 0.0, 0.0, 0.0]
103
+ self.inputs_run_list = ['P_1', 'Q_1', 'P_2', 'Q_2', 'p_in_1', 'Dp_r_1', 'Dq_r_1', 'v_ref_1', 'alpha_2', 'v_ref_2', 'omega_ref_2', 'delta_ref_2', 'phi_2', 'rocov_2']
104
+ self.inputs_run_values_list = [0, 0, 0, 0, 0.8, 0.0, 0.0, 1.0, 0, 1.0, 1.0, 0.0, 0.0, 0.0]
105
+ self.outputs_list = ['V_1', 'V_2', 'p_in_1', 'Dp_r_1', 'Dq_r_1', 'omega_pll_1', 'omega_pll_f_1', 'rocof_pll_1', 'alpha_2', 'Dv_2']
106
+ self.x_list = ['theta_pll_1', 'xi_pll_1', 'omega_pll_f_1', 'rocof_pll_f_1', 'delta_2', 'Domega_2', 'Dv_2', 'xi_freq']
107
+ self.y_run_list = ['V_1', 'theta_1', 'V_2', 'theta_2', 'p_out_1', 'q_out_1', 'rocof_pll_1', 'omega_2', 'i_d_2', 'i_q_2', 'p_s_2', 'q_s_2', 'omega_coi', 'p_agc']
108
108
  self.xy_list = self.x_list + self.y_run_list
109
- self.y_ini_list = ['V_WFM', 'theta_WFM', 'V_WFH', 'theta_WFH', 'V_WFD', 'theta_WFD', 'V_GRD', 'theta_GRD', 'V_GRI', 'theta_GRI', 'i_s_r_WFH', 'i_s_i_WFH', 'i_d_r_GRD', 'i_d_i_GRD', 'omega_GRI', 'i_d_GRI', 'i_q_GRI', 'p_s_GRI', 'q_s_GRI', 'omega_coi', 'p_agc']
109
+ self.y_ini_list = ['V_1', 'theta_1', 'V_2', 'theta_2', 'p_out_1', 'q_out_1', 'rocof_pll_1', 'omega_2', 'i_d_2', 'i_q_2', 'p_s_2', 'q_s_2', 'omega_coi', 'p_agc']
110
110
  self.xy_ini_list = self.x_list + self.y_ini_list
111
111
  self.t = 0.0
112
112
  self.it = 0
@@ -333,7 +333,7 @@ class model:
333
333
  ## y_ini to y_run
334
334
  self.y_ini = self.xy_ini[self.N_x:]
335
335
  self.y_run = np.copy(self.y_ini)
336
- self.u_run = np.copy(self.u_ini)
336
+ #self.u_run = np.copy(self.u_ini)
337
337
 
338
338
  ## y_ini to u_run
339
339
  for item in self.yini2urun:
@@ -1928,24 +1928,24 @@ def sp_H_jacs_run_eval(H_x,H_y,H_u,x,y,u,p,Dt):
1928
1928
 
1929
1929
  def sp_jac_ini_vectors():
1930
1930
 
1931
- sp_jac_ini_ia = [0, 18, 23, 1, 2, 3, 23, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 14, 15, 4, 5, 6, 7, 14, 15, 6, 7, 8, 9, 10, 11, 14, 15, 8, 9, 10, 11, 8, 9, 10, 11, 16, 17, 8, 9, 10, 11, 16, 17, 10, 11, 16, 17, 21, 22, 6, 7, 14, 15, 6, 7, 14, 15, 10, 11, 16, 10, 11, 17, 1, 18, 0, 12, 13, 19, 20, 0, 2, 12, 13, 19, 20, 0, 12, 13, 19, 20, 21, 0, 12, 13, 19, 20, 22, 18, 23, 3, 23, 24]
1932
- sp_jac_ini_ja = [0, 3, 4, 5, 7, 11, 15, 21, 27, 35, 39, 45, 51, 56, 57, 61, 65, 68, 71, 73, 78, 84, 90, 96, 98, 101]
1933
- sp_jac_ini_nia = 25
1934
- sp_jac_ini_nja = 25
1931
+ sp_jac_ini_ia = [0, 1, 8, 9, 20, 0, 8, 9, 0, 1, 2, 8, 9, 3, 14, 4, 15, 20, 5, 6, 7, 20, 8, 9, 10, 11, 12, 8, 9, 10, 11, 13, 8, 9, 10, 11, 18, 8, 9, 10, 11, 19, 2, 3, 12, 2, 3, 8, 13, 0, 1, 2, 8, 9, 14, 5, 15, 4, 10, 11, 16, 17, 4, 6, 10, 11, 16, 17, 4, 10, 11, 16, 17, 18, 4, 10, 11, 16, 17, 19, 15, 20, 7, 20, 21]
1932
+ sp_jac_ini_ja = [0, 5, 8, 13, 15, 18, 19, 20, 22, 27, 32, 37, 42, 45, 49, 55, 57, 62, 68, 74, 80, 82, 85]
1933
+ sp_jac_ini_nia = 22
1934
+ sp_jac_ini_nja = 22
1935
1935
  return sp_jac_ini_ia, sp_jac_ini_ja, sp_jac_ini_nia, sp_jac_ini_nja
1936
1936
 
1937
1937
  def sp_jac_run_vectors():
1938
1938
 
1939
- sp_jac_run_ia = [0, 18, 23, 1, 2, 3, 23, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 14, 15, 4, 5, 6, 7, 14, 15, 6, 7, 8, 9, 10, 11, 14, 15, 8, 9, 10, 11, 8, 9, 10, 11, 16, 17, 8, 9, 10, 11, 16, 17, 10, 11, 16, 17, 21, 22, 6, 7, 14, 15, 6, 7, 14, 15, 10, 11, 16, 10, 11, 17, 1, 18, 0, 12, 13, 19, 20, 0, 2, 12, 13, 19, 20, 0, 12, 13, 19, 20, 21, 0, 12, 13, 19, 20, 22, 18, 23, 3, 23, 24]
1940
- sp_jac_run_ja = [0, 3, 4, 5, 7, 11, 15, 21, 27, 35, 39, 45, 51, 56, 57, 61, 65, 68, 71, 73, 78, 84, 90, 96, 98, 101]
1941
- sp_jac_run_nia = 25
1942
- sp_jac_run_nja = 25
1939
+ sp_jac_run_ia = [0, 1, 8, 9, 20, 0, 8, 9, 0, 1, 2, 8, 9, 3, 14, 4, 15, 20, 5, 6, 7, 20, 8, 9, 10, 11, 12, 8, 9, 10, 11, 13, 8, 9, 10, 11, 18, 8, 9, 10, 11, 19, 2, 3, 12, 2, 3, 8, 13, 0, 1, 2, 8, 9, 14, 5, 15, 4, 10, 11, 16, 17, 4, 6, 10, 11, 16, 17, 4, 10, 11, 16, 17, 18, 4, 10, 11, 16, 17, 19, 15, 20, 7, 20, 21]
1940
+ sp_jac_run_ja = [0, 5, 8, 13, 15, 18, 19, 20, 22, 27, 32, 37, 42, 45, 49, 55, 57, 62, 68, 74, 80, 82, 85]
1941
+ sp_jac_run_nia = 22
1942
+ sp_jac_run_nja = 22
1943
1943
  return sp_jac_run_ia, sp_jac_run_ja, sp_jac_run_nia, sp_jac_run_nja
1944
1944
 
1945
1945
  def sp_jac_trap_vectors():
1946
1946
 
1947
- sp_jac_trap_ia = [0, 18, 23, 1, 2, 3, 23, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 14, 15, 4, 5, 6, 7, 14, 15, 6, 7, 8, 9, 10, 11, 14, 15, 8, 9, 10, 11, 8, 9, 10, 11, 16, 17, 8, 9, 10, 11, 16, 17, 10, 11, 16, 17, 21, 22, 6, 7, 14, 15, 6, 7, 14, 15, 10, 11, 16, 10, 11, 17, 1, 18, 0, 12, 13, 19, 20, 0, 2, 12, 13, 19, 20, 0, 12, 13, 19, 20, 21, 0, 12, 13, 19, 20, 22, 18, 23, 3, 23, 24]
1948
- sp_jac_trap_ja = [0, 3, 4, 5, 7, 11, 15, 21, 27, 35, 39, 45, 51, 56, 57, 61, 65, 68, 71, 73, 78, 84, 90, 96, 98, 101]
1949
- sp_jac_trap_nia = 25
1950
- sp_jac_trap_nja = 25
1947
+ sp_jac_trap_ia = [0, 1, 8, 9, 20, 0, 1, 8, 9, 0, 1, 2, 8, 9, 3, 14, 4, 15, 20, 5, 6, 7, 20, 8, 9, 10, 11, 12, 8, 9, 10, 11, 13, 8, 9, 10, 11, 18, 8, 9, 10, 11, 19, 2, 3, 12, 2, 3, 8, 13, 0, 1, 2, 8, 9, 14, 5, 15, 4, 10, 11, 16, 17, 4, 6, 10, 11, 16, 17, 4, 10, 11, 16, 17, 18, 4, 10, 11, 16, 17, 19, 15, 20, 7, 20, 21]
1948
+ sp_jac_trap_ja = [0, 5, 9, 14, 16, 19, 20, 21, 23, 28, 33, 38, 43, 46, 50, 56, 58, 63, 69, 75, 81, 83, 86]
1949
+ sp_jac_trap_nia = 22
1950
+ sp_jac_trap_nja = 22
1951
1951
  return sp_jac_trap_ia, sp_jac_trap_ja, sp_jac_trap_nia, sp_jac_trap_nja