Commit d7704ec3 by dongshufeng

refactor: little change

parent 05bbe130
......@@ -13,11 +13,12 @@
#include ../lib/pfsoln.txt
#include ../lib/total_load.txt
/*info("Running power flow on case14...");
info("Running power flow on case14...");
for i in 0..5 {
V = runpf();
runpf();
//V = runpf();
}
info("Run power flow on case14 end");*/
info("Run power flow on case14 end");
V = [
[c(1.06, 0.0)],
......@@ -35,7 +36,6 @@ V = [
[c(1.0138455467690366, -0.27462511105715226)],
[c(0.9952474931854945, -0.28601520251885126)]
];
bus = assign(bus, abs(V), [0], [VM-1, VM] );
bus = assign(bus, angle(V) * 180 / pi, [0], [VA-1, VA] );
......
//TOTAL_LOAD Returns vector of total load in each load zone.
// TOTAL_LOAD Returns vector of total load in each load zone.
// PD = TOTAL_LOAD(MPC)
// PD = TOTAL_LOAD(MPC, LOAD_ZONE)
// PD = TOTAL_LOAD(MPC, LOAD_ZONE, OPT)
......@@ -79,59 +79,58 @@
// #include ../lib/idx_brch.txt
// #include ../lib/make_sdzip.txt
fn total_load(bus, gen, load_zone, opt_type, opt_nominal, mpopt){
//matlab中load_zone、opt为字符串输入,本程序中规定直接用数字来指代相应的选项类型
//load_zone为分区模式,包括、整个系统为一个分区(all,默认值,用0表示)、每个母线单独分区(bus,用1表示)、使用母线区域定义(area,用2表示)
//opt_type为负荷类型,包括固定+可调度负荷(BOTH,默认值,用0表示)、仅计算固定负荷(FIXED,用1表示)、仅计算可调度负荷(DISPATCHABLE,用2表示)
//opt_nominal为实际值(默认值,用0表示),额定值(用1表示)
fn total_load(bus, gen, load_zone, opt_type, opt_nominal, mpopt) {
// matlab中load_zone、opt为字符串输入,本程序中规定直接用数字来指代相应的选项类型
// load_zone为分区模式,包括、整个系统为一个分区(all,默认值,用0表示)、每个母线单独分区(bus,用1表示)、使用母线区域定义(area,用2表示)
// opt_type为负荷类型,包括固定+可调度负荷(BOTH,默认值,用0表示)、仅计算固定负荷(FIXED,用1表示)、仅计算可调度负荷(DISPATCHABLE,用2表示)
// opt_nominal为实际值(默认值,用0表示),额定值(用1表示)
nb = size(bus, 0); // number of buses
// default options
if is_empty(opt_type){
if is_empty(gen){
if is_empty(opt_type) {
if is_empty(gen) {
opt_type = 1;
}else{
opt_type = 0;
}
}
if is_empty(opt_nominal){
if is_empty(opt_nominal) {
opt_nominal = 0;
}
want_fixed = (opt_type == 0 || opt_type == 1); //是否计算固定负荷
want_disp = (opt_type == 0 || opt_type == 2); //是否计算可调度负荷
want_fixed = (opt_type == 0 || opt_type == 1); // 是否计算固定负荷
want_disp = (opt_type == 0 || opt_type == 2); // 是否计算可调度负荷
// initialize load_zone
if is_empty(load_zone){
if is_empty(load_zone) {
LZone = slice(bus, [0], [BUS_AREA-1, BUS_AREA]);
}else{
if load_zone == 0{ // make a single zone of all buses
} else {
if load_zone == 0 { // make a single zone of all buses
LZone = ones(nb, 1);
}else if load_zone == 1{ // each bus is its own zone
} else if load_zone == 1 { // each bus is its own zone
LZone = range(1, nb+1)';
}else if load_zone == 2{ // use areas defined in bus data as zones
} else if load_zone == 2 { // use areas defined in bus data as zones
LZone = slice(bus, [0], [BUS_AREA-1, BUS_AREA]);
}
}
nz = max(LZone); // number of load zones
// fixed load at each bus, & initialize dispatchable
if want_fixed == 1{
if want_fixed == 1 {
Sd = make_sdzip(1, bus);
Vm = slice(bus, [0], [VM-1, VM]);
Sbusd = slice(Sd, [0], [2, 3]) + slice(Sd, [0], [1, 2]) .* Vm + slice(Sd, [0], [0, 1]) .* Vm.^2;
Pdf = real(Sbusd); // real power
Qdf = imag(Sbusd); // reactive power
}else{
} else {
Pdf = zeros(nb, 1); // real power
Qdf = zeros(nb, 1); // reactive power
}
// dispatchable load at each bus
if want_disp ==1{ // need dispatchable
if want_disp == 1 { // need dispatchable
ng = size(gen, 0);
is_ld = (slice(gen, [0], [PMIN-1, PMIN]) < 0) && (slice(gen, [0], [PMAX-1, PMAX]) == 0) && (slice(gen, [0], [GEN_STATUS-1, GEN_STATUS]) > 0);
ld = find(is_ld);
......@@ -144,39 +143,40 @@ fn total_load(bus, gen, load_zone, opt_type, opt_nominal, mpopt){
index_line = get_multi(e2i, slice(gen, [0], [GEN_BUS-1, GEN_BUS]) - 1) - 1;
Cld = full(sparse(index_line', range(0, ng)', is_ld, nb, ng));
if opt_nominal == 1{ // use nominal power
if opt_nominal == 1 { // use nominal power
Pdd = -Cld * slice(gen, [0], [PMIN-1, PMIN]); // real power
Q = zeros(ng, 1);
if ~~is_empty(ld){
println("is empty 5");
if ~~is_empty(ld) {
value_Qld = (select(gen, [ld], [QMIN - 1]) == 0) .* select(gen, [ld], [QMAX - 1]) + (select(gen, [ld], [QMAX - 1]) == 0) .* select(gen, [ld], [QMIN - 1]);
Q = set(Q, ld, value_Qld );
}
Qdd = -Cld * Q; // reactive power
}else{ // use realized actual power dispatch
} else { // use realized actual power dispatch
Pdd = -Cld * slice(gen, [0], [PG-1, PG]); // real power
Qdd = -Cld * slice(gen, [0], [QG-1, QG]); // reactive power
}
}else{
} else {
Pdd = zeros(nb, 1);
Qdd = zeros(nb, 1);
}
// compute load sums
if (nz == nb) && (sum(LZone == range(1,nb+1)')/nz == 1){ //nz == nb且LZone和range(1,nb+1)'元素全相等
BUS_TYPE_NONE = (slice(bus, [0], [BUS_TYPE-1, BUS_TYPE]) == ones(nb,1)* NONE); //判断节点类型是否为NONE
if (nz == nb) && (sum(LZone == range(1,nb+1)')/nz == 1) { // nz == nb且LZone和range(1,nb+1)'元素全相等
BUS_TYPE_NONE = (slice(bus, [0], [BUS_TYPE-1, BUS_TYPE]) == ones(nb,1)* NONE); // 判断节点类型是否为NONE
Pd = (Pdf + Pdd) .* (~~BUS_TYPE_NONE);
Qd = (Qdf + Qdd) .* (~~BUS_TYPE_NONE);
}else{
} else {
BUS_TYPE_NONE = (slice(bus, [0], [BUS_TYPE-1, BUS_TYPE]) == ones(nb,1)* NONE);
Pd = zeros(nz, 1);
Qd = zeros(nz, 1);
for k in 1..(nz+1){
idx = find( LZone == k && BUS_TYPE_NONE == 0);
Pd = set(Pd, [k-1], [sum(get_multi(Pdf, [idx])) + sum(get_multi(Pdd, [idx]))] );
Qd = set(Qd, [k-1], [sum(get_multi(Qdf, [idx])) + sum(get_multi(Qdd, [idx]))] );
for k in 1..(nz+1) {
idx = find( LZone == k && BUS_TYPE_NONE == 0 );
Pd = set(Pd, [k-1], [sum(get_multi(Pdf, [idx])) + sum(get_multi(Pdd, [idx]))]);
Qd = set(Qd, [k-1], [sum(get_multi(Qdf, [idx])) + sum(get_multi(Qdd, [idx]))]);
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论