Commit 04ad946d by wzc-a

完成Y形接线三相潮流,并测试通过了导线模型

parent d0f44ec6
......@@ -31,4 +31,8 @@ CN,Terminal
671,30
675,31
692,32
611,33
\ No newline at end of file
611,33
680,34
632,35
633,36
684,37
\ No newline at end of file
......@@ -27,4 +27,26 @@ Index,ID,Point ID,Dev ID,Terminal ID,Desc
26,26,1000026,21,32,C
27,27,1000027,21,32,C
28,28,1000028,22,33,C
29,29,1000029,22,33,C
\ No newline at end of file
29,29,1000029,22,33,C
30,30,1000030,23,34,A
31,31,1000031,23,34,A
32,32,1000032,23,34,B
33,33,1000033,23,34,B
34,34,1000034,23,34,C
35,35,1000035,23,34,C
36,36,1000036,24,35,A
37,37,1000037,24,35,A
38,38,1000038,24,35,B
39,39,1000039,24,35,B
40,40,1000040,24,35,C
41,41,1000041,24,35,C
42,42,1000042,25,36,A
43,43,1000043,25,36,A
44,44,1000044,25,36,B
45,45,1000045,25,36,B
46,46,1000046,25,36,C
47,47,1000047,25,36,C
48,48,1000048,26,37,A
49,49,1000049,26,37,A
50,50,1000050,26,37,C
51,51,1000051,26,37,C
\ No newline at end of file
......@@ -13,11 +13,15 @@ Index,ID,Device Define Id,Name,Description,Terminal,Container,Name,ID,Property I
12,12,3,switch,开关,20;21,,ieee,12,2,false,,,,
13,13,2,line9,,22;23,,ieee,13,3,605,4,300,,
14,14,2,line10,,24;25,,ieee,14,3,606,4,500,,
15,15,4,Load,负荷,26,,ieee,15,,,,,,
16,16,4,Load,,27,,ieee,16,,,,,,
17,17,4,Load,,28,,ieee,17,,,,,,
18,18,4,Load,,29,,ieee,18,,,,,,
19,19,4,Load,,30,,ieee,19,,,,,,
20,20,4,Load,,31,,ieee,20,,,,,,
21,21,4,Load,,32,,ieee,21,,,,,,
22,22,4,Load,,33,,ieee,22,,,,,,
15,15,4,Load1,634,26,,ieee,15,,,,,,
16,16,4,Load2,645,27,,ieee,16,,,,,,
17,17,4,Load3,646,28,,ieee,17,,,,,,
18,18,4,Load4,652,29,,ieee,18,,,,,,
19,19,4,Load5,671,30,,ieee,19,,,,,,
20,20,4,Load6,675,31,,ieee,20,,,,,,
21,21,4,Load7,692,32,,ieee,21,,,,,,
22,22,4,Load8,611,33,,ieee,22,,,,,,
23,23,4,Load9,680,34,,ieee,,,,,,,
24,24,4,LinkNode10,632,35,,ieee,,,,,,,
25,25,4,LinkNode11,633,36,,ieee,,,,,,,
26,26,4,LinkNode12,684,37,,ieee,,,,,,,
\ No newline at end of file
......@@ -27,4 +27,26 @@ Index,Point ID,Value
26,1000026,170
27,1000027,151
28,1000028,170
29,1000029,80
\ No newline at end of file
29,1000029,80
30,1000030,0
31,1000031,0
32,1000032,0
33,1000033,0
34,1000034,0
35,1000035,0
36,1000036,0
37,1000037,0
38,1000038,0
39,1000039,0
40,1000040,0
41,1000041,0
42,1000042,0
43,1000043,0
44,1000044,0
45,1000045,0
46,1000046,0
47,1000047,0
48,1000048,0
49,1000049,0
50,1000050,0
51,1000051,0
\ No newline at end of file
......@@ -27,4 +27,26 @@ Index,ID,Name,Alias,Is Discrete,Is Computing,Expression,Trans Expr,Inv Trans Exp
26,1000026,C相有功692,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
27,1000027,C相无功692,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
28,1000028,C相有功611,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
29,1000029,C相无功611,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
\ No newline at end of file
29,1000029,C相无功611,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
30,1000030,A相有功680,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
31,1000031,A相无功680,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
32,1000032,B相有功680,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsB
33,1000033,B相无功680,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsB
34,1000034,C相有功680,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
35,1000035,C相无功680,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
36,1000036,A相有功632,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
37,1000037,A相无功632,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
38,1000038,B相有功632,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsB
39,1000039,B相无功632,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsB
40,1000040,C相有功632,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
41,1000041,C相无功632,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
42,1000042,A相有功633,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
43,1000043,A相无功633,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
44,1000044,B相有功633,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsB
45,1000045,B相无功633,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsB
46,1000046,C相有功633,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
47,1000047,C相无功633,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
48,1000048,A相有功684,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsA
49,1000049,A相无功684,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsA
50,1000050,C相有功684,,FALSE,FALSE,,,,,,kW,999999,-999999,,,TRUE,FALSE,0.0,,PhW_phsC
51,1000051,C相无功684,,FALSE,FALSE,,,,,,kVAr,999999,-999999,,,TRUE,FALSE,0.0,,PhVAr_phsC
\ No newline at end of file
use std::collections::HashMap;
use ndarray::{Array, Array2, Ix2};
use ndarray::{Array, array, Array2, Ix2};
use num_complex::{Complex64, ComplexFloat};
use eig_domain::DataUnit;
use mems::model::dev::MeasPhase;
pub fn get_pf_nlp_constraints(
tns: &[u64],
// cn, tn
dyn_topo: Vec<Vec<u64>>,
// terminal, cn, tn, dev
......@@ -18,44 +19,109 @@ pub fn get_pf_nlp_constraints(
input_values: Vec<f64>
) -> Option<Vec<String>> {
let mut constraint = Vec::with_capacity(dyn_topo.len());
// 每个tn的节点注入功率表达式
for tn1 in tns {
let mut power_exp = HashMap::new();
let connect_tn_devs = get_connect_tn_devs(*tn1, &dev_topo);
if connect_tn_devs.len() == 0 {
continue;
}
for tn_dev in connect_tn_devs {
let tn2 = tn_dev[0];
let dev = tn_dev[1];
let matrix = dev_matrix.get(&dev).unwrap();
let r = matrix[0].clone();
let x = matrix[1].clone();
let r_x = array![
[Complex64::new(r[[0, 0]], x[[0, 0]]), Complex64::new(r[[0, 1]], x[[0, 1]]), Complex64::new(r[[0, 2]], x[[0, 2]])],
[Complex64::new(r[[1, 0]], x[[1, 0]]), Complex64::new(r[[1, 1]], x[[1, 1]]), Complex64::new(r[[1, 2]], x[[1, 2]])],
[Complex64::new(r[[2, 0]], x[[2, 0]]), Complex64::new(r[[2, 1]], x[[2, 1]]), Complex64::new(r[[2, 2]], x[[2, 2]])]
];
let (exps, mode) = get_pq_of_acline(r_x, *tn1, tn2).unwrap();
extend_exp_pq_of_acline(&mut power_exp, exps, mode);
}
get_node_pq_load_constraints(&mut constraint, power_exp, *tn1);
}
for i in 0..input_tns.len() {
let tn = input_tns[i];
let v = input_values[i];
match input_types[i] {
DataUnit::kW => {
DataUnit::W => {
let mut active_exp = String::new();
constraint.push(active_exp);
match input_phases[i] {
MeasPhase::Total => {}
MeasPhase::A => {}
MeasPhase::B => {}
MeasPhase::C => {}
MeasPhase::A0 => {}
MeasPhase::B0 => {}
MeasPhase::C0 => {}
MeasPhase::CT => {}
MeasPhase::PT => {}
MeasPhase::Unknown => return None,
MeasPhase::A => active_exp = format!("P_{tn}_A-{v:.4}:[0/0]"),
MeasPhase::B => active_exp = format!("P_{tn}_B-{v:.4}:[0/0]"),
MeasPhase::C => active_exp = format!("P_{tn}_C-{v:.4}:[0/0]"),
_ => continue,
}
constraint.push(active_exp);
}
DataUnit::kVar => {
DataUnit::Var => {
let mut reactive_exp = String::new();
match input_phases[i] {
MeasPhase::A => reactive_exp = format!("Q_{tn}_A-{v:.4}:[0/0]"),
MeasPhase::B => reactive_exp = format!("Q_{tn}_B-{v:.4}:[0/0]"),
MeasPhase::C => reactive_exp = format!("Q_{tn}_C-{v:.4}:[0/0]"),
_ => continue,
}
constraint.push(reactive_exp);
}
DataUnit::kV => {}
DataUnit::V => {
match input_phases[i] {
MeasPhase::Total => {
let v_p = v / 3.0f64.sqrt();
constraint.push(format!("V_{tn}_A-{v_p:.4}:[0/0]"));
constraint.push(format!("D_{tn}_A-0:[0/0]"));
constraint.push(format!("V_{tn}_B-{v_p:.4}:[0/0]"));
constraint.push(format!("D_{tn}_B--2/3*pi:[0/0]"));
constraint.push(format!("V_{tn}_C-{v_p:.4}:[0/0]"));
constraint.push(format!("D_{tn}_C-2/3*pi:[0/0]"));
},
MeasPhase::A => constraint.push(format!("V_{tn}_A-{v:.4}:[0/0]")),
MeasPhase::B => constraint.push(format!("V_{tn}_B-{v:.4}:[0/0]")),
MeasPhase::C => constraint.push(format!("V_{tn}_C-{v:.4}:[0/0]")),
_ => continue,
}
}
_ => {}
}
}
Some(constraint)
}
// 找到连接tn的设备
pub fn get_connect_tn_devs(tn: u64, dev_topo: &Vec<Vec<u64>>) -> Vec<Vec<u64>> {
let mut connect_devs = Vec::new();
for topo in dev_topo {
if topo[2] == tn {
connect_devs.push(topo[3]);
}
}
// tn, dev
let mut connect_tn_devs = Vec::new();
for topo in dev_topo {
if connect_devs.contains(&topo[3]) {
if topo[2] != tn {
connect_tn_devs.push(vec![topo[2], topo[3]]);
}
}
}
connect_tn_devs
}
pub fn get_pf_nlp_variables(tns: &[u64]) -> String {
let mut variable = String::new();
// 生成变量名
for tn in tns {
variable.push_str(&format!("V_{tn}_A:[0/2],D_{tn}_A:[-3.2/3.2],V_{tn}_B:[0/2],D_{tn}_B:[-3.2/3.2],V_{tn}_C:[0/2],D_{tn}_C:[-3.2/3.2]"));
variable.push_str(&format!("V_{tn}_A:[0/20000],D_{tn}_A:[-3.2/3.2],\
V_{tn}_B:[0/20000],D_{tn}_B:[-3.2/3.2],V_{tn}_C:[0/20000],D_{tn}_C:[-3.2/3.2],\
P_{tn}_A:[-200000/200000],P_{tn}_B:[-200000/200000],P_{tn}_C:[-200000/200000],\
Q_{tn}_A:[-200000/200000],Q_{tn}_B:[-200000/200000],Q_{tn}_C:[-200000/200000],"));
}
variable
}
// 没有办法处理Delta连接的情况,因为Delta load只能先由相电压计算相电流,再推导线电流。即不能用节点三相功率平衡方程。
fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(Vec<String>, u32)> {
let mut mode:u32 = 0; //判断相位的模式
if r_x[[0, 0]] != Complex64::new(0.0, 0.0) {
......@@ -80,11 +146,11 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
// = -V1a*(V1a*b+V2a*(g*sin(t1a-t2a)-b*cos(t1a-t2a)))
//P_A
result.push(
format!("V_{tn1}_A*(V_{tn1}_A*{g:.4}-V_{tn2}_A*({g:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b:.4}*sin(D_{tn1}_A-D_{tn2}_A)))",)
format!("V_{tn1}_A*(V_{tn1}_A*{g:.4}-V_{tn2}_A*({g:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b:.4}*sin(D_{tn1}_A-D_{tn2}_A)))")
);
//Q_A
result.push(
format!("-V_{tn1}_A*(V_{tn1}_A*{b:.4}+V_{tn2}_A*({g:.4}*sin(D_{tn1}_A-D_{tn2}_A)-{b:.4}*cos(D_{tn1}_A-D_{tn2}_A)))",),
format!("-V_{tn1}_A*(V_{tn1}_A*{b:.4}+V_{tn2}_A*({g:.4}*sin(D_{tn1}_A-D_{tn2}_A)-{b:.4}*cos(D_{tn1}_A-D_{tn2}_A)))"),
)
}
2 => {
......@@ -93,11 +159,11 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
let b = gb.im();
//P_B
result.push(
format!("V_{tn1}_B*(V_{tn1}_B*{g:.4}-V_{tn2}_B*({g:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b:.4}*sin(D_{tn1}_B-D_{tn2}_B)))",),
format!("V_{tn1}_B*(V_{tn1}_B*{g:.4}-V_{tn2}_B*({g:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b:.4}*sin(D_{tn1}_B-D_{tn2}_B)))"),
);
//Q_B
result.push(
format!("-V_{tn1}_B*(V_{tn1}_B*{b:.4}+V_{tn2}_B*({g:.4}*sin(D_{tn1}_B-D_{tn2}_B)-{b:.4}*cos(D_{tn1}_B-D_{tn2}_B)))",),
format!("-V_{tn1}_B*(V_{tn1}_B*{b:.4}+V_{tn2}_B*({g:.4}*sin(D_{tn1}_B-D_{tn2}_B)-{b:.4}*cos(D_{tn1}_B-D_{tn2}_B)))"),
)
}
4 => {
......@@ -106,11 +172,11 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
let b = gb.im();
//P_C
result.push(
format!("V_{tn1}_C*(V_{tn1}_C*{g:.4}-V_{tn2}_C*({g:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b:.4}*sin(D_{tn1}_C-D_{tn2}_C)))",),
format!("V_{tn1}_C*(V_{tn1}_C*{g:.4}-V_{tn2}_C*({g:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b:.4}*sin(D_{tn1}_C-D_{tn2}_C)))"),
);
//Q_C
result.push(
format!("-V_{tn1}_C*(V_{tn1}_C*{b:.4}+V_{tn2}_C*({g:.4}*sin(D_{tn1}_C-D_{tn2}_C)-{b:.4}*cos(D_{tn1}_C-D_{tn2}_C)))",),
format!("-V_{tn1}_C*(V_{tn1}_C*{b:.4}+V_{tn2}_C*({g:.4}*sin(D_{tn1}_C-D_{tn2}_C)-{b:.4}*cos(D_{tn1}_C-D_{tn2}_C)))"),
)
}
// AB
......@@ -128,32 +194,32 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!(
"V_{tn1}_A*V_{tn1}_A*{g_aa:.4}\
-V_{tn1}_A*V_{tn2}_A*({g_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))\
+V_{tn1}_A*(V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)))\
-V_{tn1}_A*(V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))",),
+V_{tn1}_A*V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B))\
-V_{tn1}_A*V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))"),
);
//Q_A
result.push(
format!(
"-V_{tn1}_A*V_{tn1}_A*{b_aa:.4}\
+V_{tn1}_A*V_{tn2}_A*({b_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)-{g_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))\
+V_{tn1}_A*(V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)))\
+V_{tn1}_A*(V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))",),
+V_{tn1}_A*V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B))\
+V_{tn1}_A*V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))"),
);
//P_B
result.push(
format!(
"V_{tn1}_B*V_{tn1}_B*{g_bb:.4}\
-V_{tn1}_B*V_{tn2}_B*({g_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))\
+V_{tn1}_B*(V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)))\
-V_{tn1}_B*(V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))",),
+V_{tn1}_B*V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A))\
-V_{tn1}_B*V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))"),
);
//Q_B
result.push(
format!(
"-V_{tn1}_B*V_{tn1}_B*{b_bb:.4}\
+V_{tn1}_B*V_{tn2}_B*({b_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)-{g_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))\
+V_{tn1}_B*(V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)))\
+V_{tn1}_B*(V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))",),
+V_{tn1}_B*V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A))\
+V_{tn1}_B*V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))"),
);
}
// AC
......@@ -171,32 +237,32 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!(
"V_{tn1}_A*V_{tn1}_A*{g_aa:.4}\
-V_{tn1}_A*V_{tn2}_A*({g_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))\
+V_{tn1}_A*(V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)))\
-V_{tn1}_A*(V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))",),
+V_{tn1}_A*V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C))\
-V_{tn1}_A*V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"),
);
//Q_A
result.push(
format!(
"-V_{tn1}_A*V_{tn1}_A*{b_aa:.4}\
+V_{tn1}_A*V_{tn2}_A*({b_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)-{g_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))\
+V_{tn1}_A*(V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)))\
+V_{tn1}_A*(V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))",),
+V_{tn1}_A*V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C))\
+V_{tn1}_A*V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"),
);
//P_C
result.push(
format!(
"V_{tn1}_C*V_{tn1}_C*{g_cc:.4}\
-V_{tn1}_C*V_{tn2}_C*({g_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))\
+V_{tn1}_C*(V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)))\
-V_{tn1}_C*(V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))",),
+V_{tn1}_C*V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A))\
-V_{tn1}_C*V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))"),
);
//Q_C
result.push(
format!(
"-V_{tn1}_C*V_{tn1}_C*{b_cc:.4}\
+V_{tn1}_C*V_{tn2}_C*({b_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)-{g_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))\
+V_{tn1}_C*(V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)))\
+V_{tn1}_C*(V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))",),
+V_{tn1}_C*V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A))\
+V_{tn1}_C*V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))"),
);
}
// BC
......@@ -214,32 +280,32 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!(
"V_{tn1}_B*V_{tn1}_B*{g_bb:.4}\
-V_{tn1}_B*V_{tn2}_B*({g_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))\
+V_{tn1}_B*(V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)))\
-V_{tn1}_B*(V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))",),
+V_{tn1}_B*V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C))\
-V_{tn1}_B*V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"),
);
//Q_B
result.push(
format!(
"-V_{tn1}_B*V_{tn1}_B*{b_bb:.4}\
+V_{tn1}_B*V_{tn2}_B*({b_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)-{g_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))\
+V_{tn1}_B*(V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)))\
+V_{tn1}_B*(V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))",),
+V_{tn1}_B*V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C))\
+V_{tn1}_B*V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"),
);
//P_C
result.push(
format!(
"V_{tn1}_C*V_{tn1}_C*{g_cc:.4}\
-V_{tn1}_C*V_{tn2}_C*({g_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))\
+V_{tn1}_C*(V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)))\
-V_{tn1}_C*(V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))",),
+V_{tn1}_C*V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B))\
-V_{tn1}_C*V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"),
);
//Q_C
result.push(
format!(
"-V_{tn1}_C*V_{tn1}_C*{b_cc:.4}\
+V_{tn1}_C*V_{tn2}_C*({b_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)-{g_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))\
+V_{tn1}_C*(V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)))\
+V_{tn1}_C*(V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))",),
+V_{tn1}_C*V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B))\
+V_{tn1}_C*V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"),
);
}
// ABC
......@@ -263,67 +329,110 @@ fn get_pq_of_acline(r_x: Array<Complex64, Ix2>, tn1: u64, tn2: u64) -> Option<(V
format!(
"V_{tn1}_A*V_{tn1}_A*{g_aa:.4}\
-V_{tn1}_A*V_{tn2}_A*({g_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)+{b_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))\
+V_{tn1}_A*(V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B))\
-V_{tn1}_A*(V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))\
+V_{tn1}_A*(V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)))\
-V_{tn1}_A*(V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))",),
+V_{tn1}_A*V_{tn1}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B))\
-V_{tn1}_A*V_{tn2}_B*({g_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)+{b_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))\
+V_{tn1}_A*V_{tn1}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C))\
-V_{tn1}_A*V_{tn2}_C*({g_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)+{b_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"),
);
//Q_A
result.push(
format!(
"-V_{tn1}_A*V_{tn1}_A*{b_aa:.4}\
+V_{tn1}_A*V_{tn2}_A*({b_aa:.4}*cos(D_{tn1}_A-D_{tn2}_A)-{g_aa:.4}*sin(D_{tn1}_A-D_{tn2}_A))\
+V_{tn1}_A*(V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B))\
+V_{tn1}_A*(V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))\
+V_{tn1}_A*(V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C))\
+V_{tn1}_A*(V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))",),
+V_{tn1}_A*V_{tn1}_B*({g_ab:.4}*sin(D_{tn1}_A-D_{tn1}_B)-{b_ab:.4}*cos(D_{tn1}_A-D_{tn1}_B))\
+V_{tn1}_A*V_{tn2}_B*({b_ab:.4}*cos(D_{tn1}_A-D_{tn2}_B)-{g_ab:.4}*sin(D_{tn1}_A-D_{tn2}_B))\
+V_{tn1}_A*V_{tn1}_C*({g_ac:.4}*sin(D_{tn1}_A-D_{tn1}_C)-{b_ac:.4}*cos(D_{tn1}_A-D_{tn1}_C))\
+V_{tn1}_A*V_{tn2}_C*({b_ac:.4}*cos(D_{tn1}_A-D_{tn2}_C)-{g_ac:.4}*sin(D_{tn1}_A-D_{tn2}_C))"),
);
//P_B
result.push(
format!(
"V_{tn1}_B*V_{tn1}_B*{g_bb:.4}\
-V_{tn1}_B*V_{tn2}_B*({g_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)+{b_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))\
+V_{tn1}_B*(V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A))\
-V_{tn1}_B*(V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))\
+V_{tn1}_B*(V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)))\
-V_{tn1}_B*(V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))",),
+V_{tn1}_B*V_{tn1}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A))\
-V_{tn1}_B*V_{tn2}_A*({g_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)+{b_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))\
+V_{tn1}_B*V_{tn1}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C))\
-V_{tn1}_B*V_{tn2}_C*({g_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)+{b_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"),
);
//Q_B
result.push(
format!(
"-V_{tn1}_B*V_{tn1}_B*{b_bb:.4}\
+V_{tn1}_B*V_{tn2}_B*({b_bb:.4}*cos(D_{tn1}_B-D_{tn2}_B)-{g_bb:.4}*sin(D_{tn1}_B-D_{tn2}_B))\
+V_{tn1}_B*(V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A))\
+V_{tn1}_B*(V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))\
+V_{tn1}_B*(V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C))\
+V_{tn1}_B*(V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))",),
+V_{tn1}_B*V_{tn1}_A*({g_ba:.4}*sin(D_{tn1}_B-D_{tn1}_A)-{b_ba:.4}*cos(D_{tn1}_B-D_{tn1}_A))\
+V_{tn1}_B*V_{tn2}_A*({b_ba:.4}*cos(D_{tn1}_B-D_{tn2}_A)-{g_ba:.4}*sin(D_{tn1}_B-D_{tn2}_A))\
+V_{tn1}_B*V_{tn1}_C*({g_bc:.4}*sin(D_{tn1}_B-D_{tn1}_C)-{b_bc:.4}*cos(D_{tn1}_B-D_{tn1}_C))\
+V_{tn1}_B*V_{tn2}_C*({b_bc:.4}*cos(D_{tn1}_B-D_{tn2}_C)-{g_bc:.4}*sin(D_{tn1}_B-D_{tn2}_C))"),
);
//P_C
result.push(
format!(
"V_{tn1}_C*V_{tn1}_C*{g_cc:.4}\
-V_{tn1}_C*V_{tn2}_C*({g_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)+{b_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))\
+V_{tn1}_C*(V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A))\
-V_{tn1}_C*(V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))\
+V_{tn1}_C*(V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)))\
-V_{tn1}_C*(V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))",),
+V_{tn1}_C*V_{tn1}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A))\
-V_{tn1}_C*V_{tn2}_A*({g_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)+{b_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))\
+V_{tn1}_C*V_{tn1}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B))\
-V_{tn1}_C*V_{tn2}_B*({g_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)+{b_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"),
);
//Q_C
result.push(
format!(
"-V_{tn1}_C*V_{tn1}_C*{b_cc:.4}\
+V_{tn1}_C*V_{tn2}_C*({b_cc:.4}*cos(D_{tn1}_C-D_{tn2}_C)-{g_cc:.4}*sin(D_{tn1}_C-D_{tn2}_C))\
+V_{tn1}_C*(V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A))\
+V_{tn1}_C*(V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))\
+V_{tn1}_C*(V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B))\
+V_{tn1}_C*(V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))",),
+V_{tn1}_C*V_{tn1}_A*({g_ca:.4}*sin(D_{tn1}_C-D_{tn1}_A)-{b_ca:.4}*cos(D_{tn1}_C-D_{tn1}_A))\
+V_{tn1}_C*V_{tn2}_A*({b_ca:.4}*cos(D_{tn1}_C-D_{tn2}_A)-{g_ca:.4}*sin(D_{tn1}_C-D_{tn2}_A))\
+V_{tn1}_C*V_{tn1}_B*({g_cb:.4}*sin(D_{tn1}_C-D_{tn1}_B)-{b_cb:.4}*cos(D_{tn1}_C-D_{tn1}_B))\
+V_{tn1}_C*V_{tn2}_B*({b_cb:.4}*cos(D_{tn1}_C-D_{tn2}_B)-{g_cb:.4}*sin(D_{tn1}_C-D_{tn2}_B))"),
);
}
_ => { return None; }
};
let re = result.clone();
Some((result, mode))
}
pub fn extend_exp_pq_of_acline(power_exp: &mut HashMap<&str, String>, exps: Vec<String>, mode: u32) {
let key = match mode {
1 => vec!["P_A", "Q_A"],
2 => vec!["P_B", "Q_B"],
4 => vec!["P_C", "Q_C"],
3 => vec!["P_A", "Q_A", "P_B", "Q_B"],
5 => vec!["P_A", "Q_A", "P_C", "Q_C"],
6 => vec!["P_B", "Q_B", "P_C", "Q_C"],
7 => vec!["P_A", "Q_A", "P_B", "Q_B", "P_C", "Q_C"],
_ => return,
};
for i in 0..key.len() {
let k = key[i];
if let Some(exp) = power_exp.get(k) {
power_exp.insert(k, format!("{}+{}", exp, exps[i]));
} else {
power_exp.insert(k, format!("{}", exps[i]));
};
}
}
pub fn get_node_pq_load_constraints(constraint: &mut Vec<String>, power_exp: HashMap<&str, String>, tn: u64) {
if let Some(exp) = power_exp.get("P_A") {
constraint.push(format!("P_{tn}_A+{}:[0/0]", exp));
}
if let Some(exp) = power_exp.get("Q_A") {
constraint.push(format!("Q_{tn}_A+{}:[0/0]", exp));
}
if let Some(exp) = power_exp.get("P_B") {
constraint.push(format!("P_{tn}_B+{}:[0/0]", exp));
}
if let Some(exp) = power_exp.get("Q_B") {
constraint.push(format!("Q_{tn}_B+{}:[0/0]", exp));
}
if let Some(exp) = power_exp.get("P_C") {
constraint.push(format!("P_{tn}_C+{}:[0/0]", exp));
}
if let Some(exp) = power_exp.get("Q_C") {
constraint.push(format!("Q_{tn}_C+{}:[0/0]", exp));
}
}
// test
#[cfg(test)]
mod test {
......@@ -359,4 +468,35 @@ mod test {
let (p, q) = get_pq_of_acline(arr,1,2).unwrap();
assert_eq!(p[0], "V_1_C*(V_1_C*0.2875-V_2_C*(0.2875*cos(D_1_C-D_2_C)+-0.8715*sin(D_1_C-D_2_C)))");
}
}
\ No newline at end of file
// |source1|.@1@.|line2|.@2@.|load4|
// 1 2 3 4
#[test]
fn test_get_pf_nlp_constraints() {
let tns = vec![1, 2];
let dyn_topo = vec![vec![1, 1], vec![2, 2]];
let dev_topo = vec![vec![1, 1, 1, 1], vec![2, 1, 1, 2], vec![3, 2, 2, 2], vec![4, 2, 2, 4]];
let mut dev_matrix = HashMap::new();
dev_matrix.insert(2, vec![array![[0.3465, 0.1560, 0.1580], [0.1560, 0.3375, 0.1535], [0.1580, 0.1535, 0.3414]],
array![[1.0179, 0.5017, 0.4236], [0.5017, 1.0478, 0.3849], [0.4236, 0.3849, 1.0348]]]);
// dev_matrix.insert(2, vec![array![[1.3425, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.3414]],
// array![[0.5124, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 1.0348]]]);
// dev_matrix.insert(2, vec![array![[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.3414]],
// array![[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 1.0348]]]);
let input_tns = vec![1, 2, 2, 2, 2, 2, 2];
let input_phases = vec![MeasPhase::Total, MeasPhase::A, MeasPhase::A, MeasPhase::B, MeasPhase::B, MeasPhase::C, MeasPhase::C];
let input_types = vec![DataUnit::V, DataUnit::W, DataUnit::Var, DataUnit::W, DataUnit::Var, DataUnit::W, DataUnit::Var];
let input_values = vec![200.0, 1000.0, 100.0, 1100.0, 200.0, 900.0, 400.0];
let constraints = get_pf_nlp_constraints(
&tns, dyn_topo, dev_topo, dev_matrix, input_tns, input_phases, input_types, input_values
);
assert!(constraints.is_some());
let constraints = constraints.unwrap();
assert_eq!(constraints.len(), 24);
for c in constraints {
println!("{}", c);
}
println!("{}", get_pf_nlp_variables(&tns));
}
}
......@@ -71,6 +71,7 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
}
}
}
// todo: add other types: transformer\regulator
}
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论