0001 function printpf(baseMVA, bus, gen, branch, f, success, et, fd, mpopt)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 [PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ...
0042 VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
0043 [GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
0044 MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ...
0045 QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;
0046 [F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, RATE_B, RATE_C, ...
0047 TAP, SHIFT, BR_STATUS, PF, QF, PT, QT, MU_SF, MU_ST, ...
0048 ANGMIN, ANGMAX, MU_ANGMIN, MU_ANGMAX] = idx_brch;
0049
0050
0051 if isstruct(baseMVA)
0052 have_results_struct = 1;
0053 results = baseMVA;
0054 if nargin < 3 || isempty(gen)
0055 mpopt = mpoption;
0056 else
0057 mpopt = gen;
0058 end
0059 if mpopt.out.all == 0
0060 return;
0061 end
0062 if nargin < 2 || isempty(bus)
0063 fd = 1;
0064 else
0065 fd = bus;
0066 end
0067 [baseMVA, bus, gen, branch, success, et] = ...
0068 deal(results.baseMVA, results.bus, results.gen, results.branch, ...
0069 results.success, results.et);
0070 if isfield(results, 'f') && ~isempty(results.f)
0071 f = results.f;
0072 else
0073 f = [];
0074 end
0075 else
0076 have_results_struct = 0;
0077 if nargin < 9
0078 mpopt = mpoption;
0079 if nargin < 8
0080 fd = 1;
0081 end
0082 end
0083 if mpopt.out.all == 0
0084 return;
0085 end
0086 end
0087 isOPF = ~isempty(f);
0088
0089
0090 isDC = strcmp(upper(mpopt.model), 'DC');
0091
0092 SUPPRESS = mpopt.out.suppress_detail;
0093 if SUPPRESS == -1
0094 if size(bus, 1) > 500
0095 SUPPRESS = 1;
0096 else
0097 SUPPRESS = 0;
0098 end
0099 end
0100 OUT_ALL = mpopt.out.all;
0101 OUT_FORCE = mpopt.out.force;
0102 OUT_ANY = OUT_ALL == 1;
0103 OUT_SYS_SUM = OUT_ALL == 1 || (OUT_ALL == -1 && mpopt.out.sys_sum);
0104 OUT_AREA_SUM = OUT_ALL == 1 || (OUT_ALL == -1 && ~SUPPRESS && mpopt.out.area_sum);
0105 OUT_BUS = OUT_ALL == 1 || (OUT_ALL == -1 && ~SUPPRESS && mpopt.out.bus);
0106 OUT_BRANCH = OUT_ALL == 1 || (OUT_ALL == -1 && ~SUPPRESS && mpopt.out.branch);
0107 OUT_GEN = OUT_ALL == 1 || (OUT_ALL == -1 && ~SUPPRESS && mpopt.out.gen);
0108 OUT_ANY = OUT_ANY || (OUT_ALL == -1 && ...
0109 (OUT_SYS_SUM || OUT_AREA_SUM || OUT_BUS || ...
0110 OUT_BRANCH || OUT_GEN));
0111 if OUT_ALL == -1
0112 OUT_ALL_LIM = ~SUPPRESS * mpopt.out.lim.all;
0113 elseif OUT_ALL == 1
0114 OUT_ALL_LIM = 2;
0115 else
0116 OUT_ALL_LIM = 0;
0117 end
0118 OUT_ANY = OUT_ANY || OUT_ALL_LIM >= 1;
0119 if OUT_ALL_LIM == -1
0120 OUT_V_LIM = ~SUPPRESS * mpopt.out.lim.v;
0121 OUT_LINE_LIM = ~SUPPRESS * mpopt.out.lim.line;
0122 OUT_PG_LIM = ~SUPPRESS * mpopt.out.lim.pg;
0123 OUT_QG_LIM = ~SUPPRESS * mpopt.out.lim.qg;
0124 else
0125 OUT_V_LIM = OUT_ALL_LIM;
0126 OUT_LINE_LIM = OUT_ALL_LIM;
0127 OUT_PG_LIM = OUT_ALL_LIM;
0128 OUT_QG_LIM = OUT_ALL_LIM;
0129 end
0130 OUT_ANY = OUT_ANY || (OUT_ALL_LIM == -1 && (OUT_V_LIM || OUT_LINE_LIM || OUT_PG_LIM || OUT_QG_LIM));
0131
0132
0133 if OUT_ANY
0134 ptol = 1e-4;
0135 if isOPF && ~isDC && strcmp(upper(mpopt.opf.ac.solver), 'SDPOPF')
0136 isSDP = 1;
0137 ptol = 0.1;
0138 if have_results_struct && isfield(results, 'mineigratio') && ~isempty(results.mineigratio)
0139 mineigratio = results.mineigratio;
0140 else
0141 mineigratio = [];
0142 end
0143 if have_results_struct && isfield(results, 'zero_eval') && ~isempty(results.zero_eval)
0144 zero_eval = results.zero_eval;
0145 else
0146 zero_eval = [];
0147 end
0148 else
0149 isSDP = 0;
0150 end
0151
0152
0153 i2e = bus(:, BUS_I);
0154 e2i = sparse(max(i2e), 1);
0155 e2i(i2e) = (1:size(bus, 1))';
0156
0157
0158 nb = size(bus, 1);
0159 nl = size(branch, 1);
0160 ng = size(gen, 1);
0161
0162
0163 if isDC
0164 bus(:, [QD, BS]) = zeros(nb, 2);
0165 gen(:, [QG, QMAX, QMIN]) = zeros(ng, 3);
0166 branch(:, [BR_R, BR_B]) = zeros(nl, 2);
0167 end
0168
0169
0170 ties = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) ~= bus(e2i(branch(:, T_BUS)), BUS_AREA));
0171
0172 xfmr = find(branch(:, TAP));
0173 nzld = find((bus(:, PD) | bus(:, QD)) & bus(:, BUS_TYPE) ~= NONE);
0174 sorted_areas = sort(bus(:, BUS_AREA));
0175 s_areas = sorted_areas([1; find(diff(sorted_areas))+1]);
0176 nzsh = find((bus(:, GS) | bus(:, BS)) & bus(:, BUS_TYPE) ~= NONE);
0177 allg = find( ~isload(gen) );
0178 alld = find( isload(gen) );
0179 ong = find( gen(:, GEN_STATUS) > 0 & ~isload(gen) );
0180 onld = find( gen(:, GEN_STATUS) > 0 & isload(gen) );
0181 V = bus(:, VM) .* exp(1j * pi/180 * bus(:, VA));
0182 opt = struct('type', 'FIXED');
0183 [Pdf, Qdf] = total_load(bus, gen, 'bus', struct('type', 'FIXED'), mpopt);
0184 [Pdd, Qdd] = total_load(bus, gen, 'bus', struct('type', 'DISPATCHABLE'), mpopt);
0185 if isDC
0186 loss = zeros(nl, 1);
0187 fchg = loss;
0188 tchg = loss;
0189 else
0190 [loss, fchg, tchg] = get_losses(baseMVA, bus, branch);
0191 end
0192
0193
0194 if success
0195 if isSDP
0196 fprintf(fd, '\nSolution satisfies rank and consistency conditions, %.2f seconds.\nmineigratio = %0.5g, zero_eval = %0.5g', et, mineigratio, zero_eval);
0197 else
0198 fprintf(fd, '\nConverged in %.2f seconds', et);
0199 end
0200 else
0201 if isSDP
0202 fprintf(fd, '\n>>>>> Solution does NOT satisfy rank and/or consistency conditions (%.2f seconds). <<<<<\nmineigratio = %0.5g, zero_eval = %0.5g\n', et, mineigratio, zero_eval);
0203 else
0204 fprintf(fd, '\n>>>>> Did NOT converge (%.2f seconds) <<<<<\n', et);
0205 end
0206 end
0207
0208
0209 if isOPF && (success || OUT_FORCE)
0210 fprintf(fd, '\nObjective Function Value = %.2f $/hr', f);
0211 end
0212 end
0213 if OUT_SYS_SUM && (success || OUT_FORCE)
0214 fprintf(fd, '\n================================================================================');
0215 fprintf(fd, '\n| System Summary |');
0216 fprintf(fd, '\n================================================================================');
0217 fprintf(fd, '\n\nHow many? How much? P (MW) Q (MVAr)');
0218 fprintf(fd, '\n--------------------- ------------------- ------------- -----------------');
0219 fprintf(fd, '\nBuses %6d Total Gen Capacity %7.1f %7.1f to %.1f', nb, sum(gen(allg, PMAX)), sum(gen(allg, QMIN)), sum(gen(allg, QMAX)));
0220 fprintf(fd, '\nGenerators %5d On-line Capacity %7.1f %7.1f to %.1f', length(allg), sum(gen(ong, PMAX)), sum(gen(ong, QMIN)), sum(gen(ong, QMAX)));
0221 fprintf(fd, '\nCommitted Gens %5d Generation (actual) %7.1f %7.1f', length(ong), sum(gen(ong, PG)), sum(gen(ong, QG)));
0222 fprintf(fd, '\nLoads %5d Load %7.1f %7.1f', length(nzld)+length(onld), sum(Pdf(nzld))-sum(gen(onld, PG)), sum(Qdf(nzld))-sum(gen(onld, QG)));
0223 fprintf(fd, '\n Fixed %5d Fixed %7.1f %7.1f', length(nzld), sum(Pdf(nzld)), sum(Qdf(nzld)));
0224 fprintf(fd, '\n Dispatchable %5d Dispatchable %7.1f of %-7.1f%7.1f', length(onld), -sum(gen(onld, PG)), -sum(gen(onld, PMIN)), -sum(gen(onld, QG)));
0225 fprintf(fd, '\nShunts %5d Shunt (inj) %7.1f %7.1f', length(nzsh), ...
0226 -sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, GS)), sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, BS)) );
0227 fprintf(fd, '\nBranches %5d Losses (I^2 * Z) %8.2f %8.2f', nl, sum(real(loss)), sum(imag(loss)) );
0228 fprintf(fd, '\nTransformers %5d Branch Charging (inj) - %7.1f', length(xfmr), sum(fchg) + sum(tchg) );
0229 fprintf(fd, '\nInter-ties %5d Total Inter-tie Flow %7.1f %7.1f', length(ties), sum(abs(branch(ties, PF)-branch(ties, PT))) / 2, sum(abs(branch(ties, QF)-branch(ties, QT))) / 2);
0230 fprintf(fd, '\nAreas %5d', length(s_areas));
0231 fprintf(fd, '\n');
0232 fprintf(fd, '\n Minimum Maximum');
0233 fprintf(fd, '\n ------------------------- --------------------------------');
0234 [minv, mini] = min(bus(:, VM));
0235 [maxv, maxi] = max(bus(:, VM));
0236 fprintf(fd, '\nVoltage Magnitude %7.3f p.u. @ bus %-4d %7.3f p.u. @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
0237 [minv, mini] = min(bus(:, VA));
0238 [maxv, maxi] = max(bus(:, VA));
0239 fprintf(fd, '\nVoltage Angle %8.2f deg @ bus %-4d %8.2f deg @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
0240 if ~isDC
0241 [maxv, maxi] = max(real(loss));
0242 fprintf(fd, '\nP Losses (I^2*R) - %8.2f MW @ line %d-%d', maxv, branch(maxi, F_BUS), branch(maxi, T_BUS));
0243 [maxv, maxi] = max(imag(loss));
0244 fprintf(fd, '\nQ Losses (I^2*X) - %8.2f MVAr @ line %d-%d', maxv, branch(maxi, F_BUS), branch(maxi, T_BUS));
0245 end
0246 if isOPF
0247 [minv, mini] = min(bus(:, LAM_P));
0248 [maxv, maxi] = max(bus(:, LAM_P));
0249 fprintf(fd, '\nLambda P %8.2f $/MWh @ bus %-4d %8.2f $/MWh @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
0250 [minv, mini] = min(bus(:, LAM_Q));
0251 [maxv, maxi] = max(bus(:, LAM_Q));
0252 fprintf(fd, '\nLambda Q %8.2f $/MWh @ bus %-4d %8.2f $/MWh @ bus %-4d', minv, bus(mini, BUS_I), maxv, bus(maxi, BUS_I));
0253 end
0254 fprintf(fd, '\n');
0255 end
0256
0257 if OUT_AREA_SUM && (success || OUT_FORCE)
0258 fprintf(fd, '\n================================================================================');
0259 fprintf(fd, '\n| Area Summary |');
0260 fprintf(fd, '\n================================================================================');
0261 fprintf(fd, '\nArea # of # of Gens # of Loads # of # of # of # of');
0262 fprintf(fd, '\n Num Buses Total Online Total Fixed Disp Shunt Brchs Xfmrs Ties');
0263 fprintf(fd, '\n---- ----- ----- ------ ----- ----- ----- ----- ----- ----- -----');
0264 for i=1:length(s_areas)
0265 a = s_areas(i);
0266 ib = find(bus(:, BUS_AREA) == a);
0267 ig = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & ~isload(gen));
0268 igon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & ~isload(gen));
0269 ildon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & isload(gen));
0270 inzld = find(bus(:, BUS_AREA) == a & (Pdf | Qdf) & bus(:, BUS_TYPE) ~= NONE);
0271 inzsh = find(bus(:, BUS_AREA) == a & (bus(:, GS) | bus(:, BS)) & bus(:, BUS_TYPE) ~= NONE);
0272 ibrch = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) == a & bus(e2i(branch(:, T_BUS)), BUS_AREA) == a);
0273 in_tie = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) == a & bus(e2i(branch(:, T_BUS)), BUS_AREA) ~= a);
0274 out_tie = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) ~= a & bus(e2i(branch(:, T_BUS)), BUS_AREA) == a);
0275 if isempty(xfmr)
0276 nxfmr = 0;
0277 else
0278 nxfmr = length(find(bus(e2i(branch(xfmr, F_BUS)), BUS_AREA) == a & bus(e2i(branch(xfmr, T_BUS)), BUS_AREA) == a));
0279 end
0280 fprintf(fd, '\n%3d %6d %5d %5d %5d %5d %5d %5d %5d %5d %5d', ...
0281 a, length(ib), length(ig), length(igon), ...
0282 length(inzld)+length(ildon), length(inzld), length(ildon), ...
0283 length(inzsh), length(ibrch), nxfmr, length(in_tie)+length(out_tie));
0284 end
0285 fprintf(fd, '\n---- ----- ----- ------ ----- ----- ----- ----- ----- ----- -----');
0286 fprintf(fd, '\nTot: %6d %5d %5d %5d %5d %5d %5d %5d %5d %5d', ...
0287 nb, length(allg), length(ong), length(nzld)+length(onld), ...
0288 length(nzld), length(onld), length(nzsh), nl, length(xfmr), length(ties));
0289 fprintf(fd, '\n');
0290 fprintf(fd, '\nArea Total Gen Capacity On-line Gen Capacity Generation');
0291 fprintf(fd, '\n Num MW MVAr MW MVAr MW MVAr');
0292 fprintf(fd, '\n---- ------ ------------------ ------ ------------------ ------ ------');
0293 for i=1:length(s_areas)
0294 a = s_areas(i);
0295 ig = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & ~isload(gen));
0296 igon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & ~isload(gen));
0297 fprintf(fd, '\n%3d %7.1f %7.1f to %-7.1f %7.1f %7.1f to %-7.1f %7.1f %7.1f', ...
0298 a, sum(gen(ig, PMAX)), sum(gen(ig, QMIN)), sum(gen(ig, QMAX)), ...
0299 sum(gen(igon, PMAX)), sum(gen(igon, QMIN)), sum(gen(igon, QMAX)), ...
0300 sum(gen(igon, PG)), sum(gen(igon, QG)) );
0301 end
0302 fprintf(fd, '\n---- ------ ------------------ ------ ------------------ ------ ------');
0303 fprintf(fd, '\nTot: %7.1f %7.1f to %-7.1f %7.1f %7.1f to %-7.1f %7.1f %7.1f', ...
0304 sum(gen(allg, PMAX)), sum(gen(allg, QMIN)), sum(gen(allg, QMAX)), ...
0305 sum(gen(ong, PMAX)), sum(gen(ong, QMIN)), sum(gen(ong, QMAX)), ...
0306 sum(gen(ong, PG)), sum(gen(ong, QG)) );
0307 fprintf(fd, '\n');
0308 fprintf(fd, '\nArea Disp Load Cap Disp Load Fixed Load Total Load');
0309 fprintf(fd, '\n Num MW MVAr MW MVAr MW MVAr MW MVAr');
0310 fprintf(fd, '\n---- ------ ------ ------ ------ ------ ------ ------ ------');
0311 Qlim = (gen(:, QMIN) == 0) .* gen(:, QMAX) + (gen(:, QMAX) == 0) .* gen(:, QMIN);
0312 for i=1:length(s_areas)
0313 a = s_areas(i);
0314 ildon = find(bus(e2i(gen(:, GEN_BUS)), BUS_AREA) == a & gen(:, GEN_STATUS) > 0 & isload(gen));
0315 inzld = find(bus(:, BUS_AREA) == a & (Pdf | Qdf));
0316 fprintf(fd, '\n%3d %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f', ...
0317 a, -sum(gen(ildon, PMIN)), ...
0318 -sum(Qlim(ildon)), ...
0319 -sum(gen(ildon, PG)), -sum(gen(ildon, QG)), ...
0320 sum(Pdf(inzld)), sum(Qdf(inzld)), ...
0321 -sum(gen(ildon, PG)) + sum(Pdf(inzld)), ...
0322 -sum(gen(ildon, QG)) + sum(Qdf(inzld)) );
0323 end
0324 fprintf(fd, '\n---- ------ ------ ------ ------ ------ ------ ------ ------');
0325 fprintf(fd, '\nTot: %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f %7.1f', ...
0326 -sum(gen(onld, PMIN)), ...
0327 -sum(Qlim(onld)), ...
0328 -sum(gen(onld, PG)), -sum(gen(onld, QG)), ...
0329 sum(Pdf(nzld)), sum(Qdf(nzld)), ...
0330 -sum(gen(onld, PG)) + sum(Pdf(nzld)), ...
0331 -sum(gen(onld, QG)) + sum(Qdf(nzld)) );
0332 fprintf(fd, '\n');
0333 fprintf(fd, '\nArea Shunt Inj Branch Series Losses Net Export');
0334 fprintf(fd, '\n Num MW MVAr Charging MW MVAr MW MVAr');
0335 fprintf(fd, '\n---- ------ ------ -------- ------ ------ ------ ------');
0336 for i=1:length(s_areas)
0337 a = s_areas(i);
0338 inzsh = find(bus(:, BUS_AREA) == a & (bus(:, GS) | bus(:, BS)));
0339 ibrch = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) == a & bus(e2i(branch(:, T_BUS)), BUS_AREA) == a & branch(:, BR_STATUS));
0340 in_tie = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) ~= a & bus(e2i(branch(:, T_BUS)), BUS_AREA) == a & branch(:, BR_STATUS));
0341 out_tie = find(bus(e2i(branch(:, F_BUS)), BUS_AREA) == a & bus(e2i(branch(:, T_BUS)), BUS_AREA) ~= a & branch(:, BR_STATUS));
0342 fprintf(fd, '\n%3d %7.1f %7.1f %7.1f %7.2f %7.2f %7.1f %7.1f', ...
0343 a, -sum(bus(inzsh, VM) .^ 2 .* bus(inzsh, GS)), ...
0344 sum(bus(inzsh, VM) .^ 2 .* bus(inzsh, BS)), ...
0345 sum(fchg(ibrch)) + sum(tchg(ibrch)) + sum(fchg(out_tie)) + sum(tchg(in_tie)), ...
0346 sum(real(loss(ibrch))) + sum(real(loss([in_tie; out_tie]))) / 2, ...
0347 sum(imag(loss(ibrch))) + sum(imag(loss([in_tie; out_tie]))) / 2, ...
0348 sum(branch(in_tie, PT))+sum(branch(out_tie, PF)) - sum(real(loss([in_tie; out_tie]))) / 2, ...
0349 sum(branch(in_tie, QT))+sum(branch(out_tie, QF)) - sum(imag(loss([in_tie; out_tie]))) / 2 );
0350 end
0351 fprintf(fd, '\n---- ------ ------ -------- ------ ------ ------ ------');
0352 fprintf(fd, '\nTot: %7.1f %7.1f %7.1f %7.2f %7.2f - -', ...
0353 -sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, GS)), ...
0354 sum(bus(nzsh, VM) .^ 2 .* bus(nzsh, BS)), ...
0355 sum(fchg) + sum(tchg), sum(real(loss)), sum(imag(loss)) );
0356 fprintf(fd, '\n');
0357 end
0358
0359
0360 if OUT_GEN && (success || OUT_FORCE)
0361 if isOPF
0362 genlamP = bus(e2i(gen(:, GEN_BUS)), LAM_P);
0363 genlamQ = bus(e2i(gen(:, GEN_BUS)), LAM_Q);
0364 end
0365 fprintf(fd, '\n================================================================================');
0366 fprintf(fd, '\n| Generator Data |');
0367 fprintf(fd, '\n================================================================================');
0368 fprintf(fd, '\n Gen Bus Status Pg Qg ');
0369 if isOPF, fprintf(fd, ' Lambda ($/MVA-hr)'); end
0370 fprintf(fd, '\n # # (MW) (MVAr) ');
0371 if isOPF, fprintf(fd, ' P Q '); end
0372 fprintf(fd, '\n---- ----- ------ -------- --------');
0373 if isOPF, fprintf(fd, ' -------- --------'); end
0374 for k = 1:length(allg)
0375 i = allg(k);
0376 fprintf(fd, '\n%3d %6d %2d ', i, gen(i, GEN_BUS), gen(i, GEN_STATUS));
0377 if gen(i, GEN_STATUS) > 0 && (gen(i, PG) || gen(i, QG))
0378 fprintf(fd, '%10.2f%10.2f', gen(i, PG), gen(i, QG));
0379 else
0380 fprintf(fd, ' - - ');
0381 end
0382 if isOPF, fprintf(fd, '%10.2f%10.2f', genlamP(i), genlamQ(i)); end
0383 end
0384 fprintf(fd, '\n -------- --------');
0385 fprintf(fd, '\n Total: %9.2f%10.2f', sum(gen(ong, PG)), sum(gen(ong, QG)));
0386 fprintf(fd, '\n');
0387 if ~isempty(alld)
0388 fprintf(fd, '\n================================================================================');
0389 fprintf(fd, '\n| Dispatchable Load Data |');
0390 fprintf(fd, '\n================================================================================');
0391 fprintf(fd, '\n Gen Bus Status Pd Qd ');
0392 if isOPF, fprintf(fd, ' Lambda ($/MVA-hr)'); end
0393 fprintf(fd, '\n # # (MW) (MVAr) ');
0394 if isOPF, fprintf(fd, ' P Q '); end
0395 fprintf(fd, '\n---- ----- ------ -------- --------');
0396 if isOPF, fprintf(fd, ' -------- --------'); end
0397 for k = 1:length(alld)
0398 i = alld(k);
0399 fprintf(fd, '\n%3d %6d %2d ', i, gen(i, GEN_BUS), gen(i, GEN_STATUS));
0400 if gen(i, GEN_STATUS) > 0 && (gen(i, PG) || gen(i, QG))
0401 fprintf(fd, '%10.2f%10.2f', -gen(i, PG), -gen(i, QG));
0402 else
0403 fprintf(fd, ' - - ');
0404 end
0405 if isOPF, fprintf(fd, '%10.2f%10.2f', genlamP(i), genlamQ(i)); end
0406 end
0407 fprintf(fd, '\n -------- --------');
0408 fprintf(fd, '\n Total: %9.2f%10.2f', -sum(gen(onld, PG)), -sum(gen(onld, QG)));
0409 fprintf(fd, '\n');
0410 end
0411 end
0412
0413
0414 if OUT_BUS && (success || OUT_FORCE)
0415 fprintf(fd, '\n================================================================================');
0416 fprintf(fd, '\n| Bus Data |');
0417 fprintf(fd, '\n================================================================================');
0418 fprintf(fd, '\n Bus Voltage Generation Load ');
0419 if isOPF, fprintf(fd, ' Lambda($/MVA-hr)'); end
0420 fprintf(fd, '\n # Mag(pu) Ang(deg) P (MW) Q (MVAr) P (MW) Q (MVAr)');
0421 if isOPF, fprintf(fd, ' P Q '); end
0422 fprintf(fd, '\n----- ------- -------- -------- -------- -------- --------');
0423 if isOPF, fprintf(fd, ' ------- -------'); end
0424 for i = 1:nb
0425 fprintf(fd, '\n%5d%7.3f%9.3f', bus(i, [BUS_I, VM, VA]));
0426 if bus(i, BUS_TYPE) == REF
0427 fprintf(fd, '*');
0428 elseif bus(i, BUS_TYPE) == NONE
0429 fprintf(fd, 'x');
0430 else
0431 fprintf(fd, ' ');
0432 end
0433 g = find(gen(:, GEN_STATUS) > 0 & gen(:, GEN_BUS) == bus(i, BUS_I) & ...
0434 ~isload(gen));
0435 ld = find(gen(:, GEN_STATUS) > 0 & gen(:, GEN_BUS) == bus(i, BUS_I) & ...
0436 isload(gen));
0437 if ~isempty(g)
0438 fprintf(fd, '%9.2f%10.2f', sum(gen(g, PG)), sum(gen(g, QG)));
0439 else
0440 fprintf(fd, ' - - ');
0441 end
0442 if Pdf(i) || Qdf(i) || ~isempty(ld)
0443 if ~isempty(ld)
0444 fprintf(fd, '%10.2f*%9.2f*', Pdf(i) - sum(gen(ld, PG)), ...
0445 Qdf(i) - sum(gen(ld, QG)));
0446 else
0447 fprintf(fd, '%10.2f%10.2f ', [ Pdf(i) Qdf(i) ]);
0448 end
0449 else
0450 fprintf(fd, ' - - ');
0451 end
0452 if isOPF
0453 fprintf(fd, '%9.3f', bus(i, LAM_P));
0454 if abs(bus(i, LAM_Q)) > ptol
0455 fprintf(fd, '%8.3f', bus(i, LAM_Q));
0456 else
0457 fprintf(fd, ' -');
0458 end
0459 end
0460 end
0461 fprintf(fd, '\n -------- -------- -------- --------');
0462 fprintf(fd, '\n Total: %9.2f %9.2f %9.2f %9.2f', ...
0463 sum(gen(ong, PG)), sum(gen(ong, QG)), ...
0464 sum(Pdf(nzld)) - sum(gen(onld, PG)), ...
0465 sum(Qdf(nzld)) - sum(gen(onld, QG)));
0466 fprintf(fd, '\n');
0467 end
0468
0469
0470 if OUT_BRANCH && (success || OUT_FORCE)
0471 fprintf(fd, '\n================================================================================');
0472 fprintf(fd, '\n| Branch Data |');
0473 fprintf(fd, '\n================================================================================');
0474 fprintf(fd, '\nBrnch From To From Bus Injection To Bus Injection Loss (I^2 * Z) ');
0475 fprintf(fd, '\n # Bus Bus P (MW) Q (MVAr) P (MW) Q (MVAr) P (MW) Q (MVAr)');
0476 fprintf(fd, '\n----- ----- ----- -------- -------- -------- -------- -------- --------');
0477 fprintf(fd, '\n%4d%7d%7d%10.2f%10.2f%10.2f%10.2f%10.3f%10.2f', ...
0478 [ (1:nl)', branch(:, [F_BUS, T_BUS]), ...
0479 branch(:, [PF, QF]), branch(:, [PT, QT]), ...
0480 real(loss), imag(loss) ...
0481 ]');
0482 fprintf(fd, '\n -------- --------');
0483 fprintf(fd, '\n Total:%10.3f%10.2f', ...
0484 sum(real(loss)), sum(imag(loss)));
0485 fprintf(fd, '\n');
0486 end
0487
0488
0489 if OUT_ANY && isOPF && (success || OUT_FORCE)
0490 ctol = mpopt.opf.violation;
0491
0492 if ~isDC && (OUT_V_LIM == 2 || (OUT_V_LIM == 1 && ...
0493 (any(bus(:, VM) < bus(:, VMIN) + ctol) || ...
0494 any(bus(:, VM) > bus(:, VMAX) - ctol) || ...
0495 any(bus(:, MU_VMIN) > ptol) || ...
0496 any(bus(:, MU_VMAX) > ptol))))
0497 fprintf(fd, '\n================================================================================');
0498 fprintf(fd, '\n| Voltage Constraints |');
0499 fprintf(fd, '\n================================================================================');
0500 fprintf(fd, '\nBus # Vmin mu Vmin |V| Vmax Vmax mu');
0501 fprintf(fd, '\n----- -------- ----- ----- ----- --------');
0502 for i = 1:nb
0503 if OUT_V_LIM == 2 || (OUT_V_LIM == 1 && ...
0504 (bus(i, VM) < bus(i, VMIN) + ctol || ...
0505 bus(i, VM) > bus(i, VMAX) - ctol || ...
0506 bus(i, MU_VMIN) > ptol || bus(i, MU_VMAX) > ptol))
0507 fprintf(fd, '\n%5d', bus(i, BUS_I));
0508 if bus(i, VM) < bus(i, VMIN) + ctol || bus(i, MU_VMIN) > ptol
0509 fprintf(fd, '%10.3f', bus(i, MU_VMIN));
0510 else
0511 fprintf(fd, ' - ');
0512 end
0513 fprintf(fd, '%8.3f%7.3f%7.3f', bus(i, [VMIN, VM, VMAX]));
0514 if bus(i, VM) > bus(i, VMAX) - ctol || bus(i, MU_VMAX) > ptol
0515 fprintf(fd, '%10.3f', bus(i, MU_VMAX));
0516 else
0517 fprintf(fd, ' - ');
0518 end
0519 end
0520 end
0521 fprintf(fd, '\n');
0522 end
0523
0524
0525 if OUT_PG_LIM == 2 || ...
0526 (OUT_PG_LIM == 1 && (any(gen(ong, PG) < gen(ong, PMIN) + ctol) || ...
0527 any(gen(ong, PG) > gen(ong, PMAX) - ctol) || ...
0528 any(gen(ong, MU_PMIN) > ptol) || ...
0529 any(gen(ong, MU_PMAX) > ptol))) || ...
0530 (~isDC && (OUT_QG_LIM == 2 || ...
0531 (OUT_QG_LIM == 1 && (any(gen(ong, QG) < gen(ong, QMIN) + ctol) || ...
0532 any(gen(ong, QG) > gen(ong, QMAX) - ctol) || ...
0533 any(gen(ong, MU_QMIN) > ptol) || ...
0534 any(gen(ong, MU_QMAX) > ptol)))))
0535 fprintf(fd, '\n================================================================================');
0536 fprintf(fd, '\n| Generation Constraints |');
0537 fprintf(fd, '\n================================================================================');
0538 end
0539 if OUT_PG_LIM == 2 || (OUT_PG_LIM == 1 && ...
0540 (any(gen(ong, PG) < gen(ong, PMIN) + ctol) || ...
0541 any(gen(ong, PG) > gen(ong, PMAX) - ctol) || ...
0542 any(gen(ong, MU_PMIN) > ptol) || ...
0543 any(gen(ong, MU_PMAX) > ptol)))
0544 fprintf(fd, '\n Gen Bus Active Power Limits');
0545 fprintf(fd, '\n # # Pmin mu Pmin Pg Pmax Pmax mu');
0546 fprintf(fd, '\n---- ----- ------- -------- -------- -------- -------');
0547 for k = 1:length(ong)
0548 i = ong(k);
0549 if OUT_PG_LIM == 2 || (OUT_PG_LIM == 1 && ...
0550 (gen(i, PG) < gen(i, PMIN) + ctol || ...
0551 gen(i, PG) > gen(i, PMAX) - ctol || ...
0552 gen(i, MU_PMIN) > ptol || gen(i, MU_PMAX) > ptol))
0553 fprintf(fd, '\n%4d%6d ', i, gen(i, GEN_BUS));
0554 if gen(i, PG) < gen(i, PMIN) + ctol || gen(i, MU_PMIN) > ptol
0555 fprintf(fd, '%10.3f', gen(i, MU_PMIN));
0556 else
0557 fprintf(fd, ' - ');
0558 end
0559 if gen(i, PG)
0560 fprintf(fd, '%10.2f%10.2f%10.2f', gen(i, [PMIN, PG, PMAX]));
0561 else
0562 fprintf(fd, '%10.2f - %10.2f', gen(i, [PMIN, PMAX]));
0563 end
0564 if gen(i, PG) > gen(i, PMAX) - ctol || gen(i, MU_PMAX) > ptol
0565 fprintf(fd, '%10.3f', gen(i, MU_PMAX));
0566 else
0567 fprintf(fd, ' - ');
0568 end
0569 end
0570 end
0571 fprintf(fd, '\n');
0572 end
0573
0574
0575 if ~isDC && (OUT_QG_LIM == 2 || (OUT_QG_LIM == 1 && ...
0576 (any(gen(ong, QG) < gen(ong, QMIN) + ctol) || ...
0577 any(gen(ong, QG) > gen(ong, QMAX) - ctol) || ...
0578 any(gen(ong, MU_QMIN) > ptol) || ...
0579 any(gen(ong, MU_QMAX) > ptol))))
0580 fprintf(fd, '\n Gen Bus Reactive Power Limits');
0581 fprintf(fd, '\n # # Qmin mu Qmin Qg Qmax Qmax mu');
0582 fprintf(fd, '\n---- ----- ------- -------- -------- -------- -------');
0583 for k = 1:length(ong)
0584 i = ong(k);
0585 if OUT_QG_LIM == 2 || (OUT_QG_LIM == 1 && ...
0586 (gen(i, QG) < gen(i, QMIN) + ctol || ...
0587 gen(i, QG) > gen(i, QMAX) - ctol || ...
0588 gen(i, MU_QMIN) > ptol || gen(i, MU_QMAX) > ptol))
0589 fprintf(fd, '\n%4d%6d ', i, gen(i, GEN_BUS));
0590 if gen(i, QG) < gen(i, QMIN) + ctol || gen(i, MU_QMIN) > ptol
0591 fprintf(fd, '%10.3f', gen(i, MU_QMIN));
0592 else
0593 fprintf(fd, ' - ');
0594 end
0595 if gen(i, QG)
0596 fprintf(fd, '%10.2f%10.2f%10.2f', gen(i, [QMIN, QG, QMAX]));
0597 else
0598 fprintf(fd, '%10.2f - %10.2f', gen(i, [QMIN, QMAX]));
0599 end
0600 if gen(i, QG) > gen(i, QMAX) - ctol || gen(i, MU_QMAX) > ptol
0601 fprintf(fd, '%10.3f', gen(i, MU_QMAX));
0602 else
0603 fprintf(fd, ' - ');
0604 end
0605 end
0606 end
0607 fprintf(fd, '\n');
0608 end
0609
0610
0611 if ~isempty(onld) && (OUT_PG_LIM == 2 || ...
0612 (OUT_PG_LIM == 1 && (any(gen(onld, PG) < gen(onld, PMIN) + ctol) || ...
0613 any(gen(onld, PG) > gen(onld, PMAX) - ctol) || ...
0614 any(gen(onld, MU_PMIN) > ptol) || ...
0615 any(gen(onld, MU_PMAX) > ptol))) || ...
0616 (~isDC && (OUT_QG_LIM == 2 || ...
0617 (OUT_QG_LIM == 1 && (any(gen(onld, QG) < gen(onld, QMIN) + ctol) || ...
0618 any(gen(onld, QG) > gen(onld, QMAX) - ctol) || ...
0619 any(gen(onld, MU_QMIN) > ptol) || ...
0620 any(gen(onld, MU_QMAX) > ptol))))))
0621 fprintf(fd, '\n================================================================================');
0622 fprintf(fd, '\n| Dispatchable Load Constraints |');
0623 fprintf(fd, '\n================================================================================');
0624 end
0625 if ~isempty(onld) && (OUT_PG_LIM == 2 || (OUT_PG_LIM == 1 && ...
0626 (any(gen(onld, PG) < gen(onld, PMIN) + ctol) || ...
0627 any(gen(onld, PG) > gen(onld, PMAX) - ctol) || ...
0628 any(gen(onld, MU_PMIN) > ptol) || ...
0629 any(gen(onld, MU_PMAX) > ptol))))
0630 fprintf(fd, '\n Gen Bus Active Power Limits');
0631 fprintf(fd, '\n # # Pmin mu Pmin Pg Pmax Pmax mu');
0632 fprintf(fd, '\n---- ----- ------- -------- -------- -------- -------');
0633 for k = 1:length(onld)
0634 i = onld(k);
0635 if OUT_PG_LIM == 2 || (OUT_PG_LIM == 1 && ...
0636 (gen(i, PG) < gen(i, PMIN) + ctol || ...
0637 gen(i, PG) > gen(i, PMAX) - ctol || ...
0638 gen(i, MU_PMIN) > ptol || gen(i, MU_PMAX) > ptol))
0639 fprintf(fd, '\n%4d%6d ', i, gen(i, GEN_BUS));
0640 if gen(i, PG) < gen(i, PMIN) + ctol || gen(i, MU_PMIN) > ptol
0641 fprintf(fd, '%10.3f', gen(i, MU_PMIN));
0642 else
0643 fprintf(fd, ' - ');
0644 end
0645 if gen(i, PG)
0646 fprintf(fd, '%10.2f%10.2f%10.2f', gen(i, [PMIN, PG, PMAX]));
0647 else
0648 fprintf(fd, '%10.2f - %10.2f', gen(i, [PMIN, PMAX]));
0649 end
0650 if gen(i, PG) > gen(i, PMAX) - ctol || gen(i, MU_PMAX) > ptol
0651 fprintf(fd, '%10.3f', gen(i, MU_PMAX));
0652 else
0653 fprintf(fd, ' - ');
0654 end
0655 end
0656 end
0657 fprintf(fd, '\n');
0658 end
0659
0660
0661 if ~isDC && ~isempty(onld) && (OUT_QG_LIM == 2 || (OUT_QG_LIM == 1 && ...
0662 (any(gen(onld, QG) < gen(onld, QMIN) + ctol) || ...
0663 any(gen(onld, QG) > gen(onld, QMAX) - ctol) || ...
0664 any(gen(onld, MU_QMIN) > ptol) || ...
0665 any(gen(onld, MU_QMAX) > ptol))))
0666 fprintf(fd, '\n Gen Bus Reactive Power Limits');
0667 fprintf(fd, '\n # # Qmin mu Qmin Qg Qmax Qmax mu');
0668 fprintf(fd, '\n---- ----- ------- -------- -------- -------- -------');
0669 for k = 1:length(onld)
0670 i = onld(k);
0671 if OUT_QG_LIM == 2 || (OUT_QG_LIM == 1 && ...
0672 (gen(i, QG) < gen(i, QMIN) + ctol || ...
0673 gen(i, QG) > gen(i, QMAX) - ctol || ...
0674 gen(i, MU_QMIN) > ptol || gen(i, MU_QMAX) > ptol))
0675 fprintf(fd, '\n%4d%6d ', i, gen(i, GEN_BUS));
0676 if gen(i, QG) < gen(i, QMIN) + ctol || gen(i, MU_QMIN) > ptol
0677 fprintf(fd, '%10.3f', gen(i, MU_QMIN));
0678 else
0679 fprintf(fd, ' - ');
0680 end
0681 if gen(i, QG)
0682 fprintf(fd, '%10.2f%10.2f%10.2f', gen(i, [QMIN, QG, QMAX]));
0683 else
0684 fprintf(fd, '%10.2f - %10.2f', gen(i, [QMIN, QMAX]));
0685 end
0686 if gen(i, QG) > gen(i, QMAX) - ctol || gen(i, MU_QMAX) > ptol
0687 fprintf(fd, '%10.3f', gen(i, MU_QMAX));
0688 else
0689 fprintf(fd, ' - ');
0690 end
0691 end
0692 end
0693 fprintf(fd, '\n');
0694 end
0695
0696
0697 lim_type = upper(mpopt.opf.flow_lim(1));
0698 if isDC || lim_type == 'P' || lim_type == '2'
0699 Ff = branch(:, PF);
0700 Ft = branch(:, PT);
0701 unit_str = 'P in MW) ';
0702 str = '\n # Bus Pf mu Pf |Pmax| Pt Pt mu Bus';
0703 elseif lim_type == 'I'
0704 Ff = abs( (branch(:, PF) + 1j * branch(:, QF)) ./ V(e2i(branch(:, F_BUS))) );
0705 Ft = abs( (branch(:, PT) + 1j * branch(:, QT)) ./ V(e2i(branch(:, T_BUS))) );
0706 unit_str = 'I in kA*basekV)';
0707 str = '\n # Bus |If| mu |If| |Imax| |It| |It| mu Bus';
0708 else
0709 Ff = abs(branch(:, PF) + 1j * branch(:, QF));
0710 Ft = abs(branch(:, PT) + 1j * branch(:, QT));
0711 unit_str = 'S in MVA) ';
0712 str = '\n # Bus |Sf| mu |Sf| |Smax| |St| |St| mu Bus';
0713 end
0714 if any(branch(:, RATE_A) ~= 0) && (OUT_LINE_LIM == 2 || (OUT_LINE_LIM == 1 && ...
0715 (any(abs(Ff) > branch(:, RATE_A) - ctol) || ...
0716 any(abs(Ft) > branch(:, RATE_A) - ctol) || ...
0717 any(branch(:, MU_SF) > ptol) || ...
0718 any(branch(:, MU_ST) > ptol))))
0719 fprintf(fd, '\n================================================================================');
0720 fprintf(fd, '\n| Branch Flow Constraints (%s |', unit_str);
0721 fprintf(fd, '\n================================================================================');
0722 fprintf(fd, '\nBrnch From "From" End Limit "To" End To');
0723 fprintf(fd, str);
0724 fprintf(fd, '\n----- ----- ------- -------- -------- -------- ------- -----');
0725 for i = 1:nl
0726 if branch(i, RATE_A) ~= 0 && (OUT_LINE_LIM == 2 || (OUT_LINE_LIM == 1 && ...
0727 (abs(Ff(i)) > branch(i, RATE_A) - ctol || ...
0728 abs(Ft(i)) > branch(i, RATE_A) - ctol || ...
0729 branch(i, MU_SF) > ptol || branch(i, MU_ST) > ptol)))
0730 fprintf(fd, '\n%4d%7d', i, branch(i, F_BUS));
0731 if Ff(i) > branch(i, RATE_A) - ctol || branch(i, MU_SF) > ptol
0732 fprintf(fd, '%10.3f', branch(i, MU_SF));
0733 else
0734 fprintf(fd, ' - ');
0735 end
0736 fprintf(fd, '%9.2f%10.2f%10.2f', ...
0737 [Ff(i), branch(i, RATE_A), Ft(i)]);
0738 if Ft(i) > branch(i, RATE_A) - ctol || branch(i, MU_ST) > ptol
0739 fprintf(fd, '%10.3f', branch(i, MU_ST));
0740 else
0741 fprintf(fd, ' - ');
0742 end
0743 fprintf(fd, '%6d', branch(i, T_BUS));
0744 end
0745 end
0746 fprintf(fd, '\n');
0747 end
0748 end
0749
0750
0751 if have_results_struct && isfield(results, 'userfcn') && (success || OUT_FORCE)
0752 if ~isOPF
0753 mpopt = mpoption(mpopt, 'out.lim.all', 0);
0754 end
0755 run_userfcn(results.userfcn, 'printpf', results, fd, mpopt);
0756 end
0757 if OUT_ANY && ~success
0758 if OUT_FORCE
0759 if isSDP
0760 fprintf(fd, '\n>>>>> Solution does NOT satisfy rank and/or consistency conditions (%.2f seconds). <<<<<\nmineigratio = %0.5g, zero_eval = %0.5g\n', et, mineigratio, zero_eval);
0761 else
0762 fprintf(fd, '\n>>>>> Did NOT converge (%.2f seconds) <<<<<\n', et);
0763 end
0764 end
0765 fprintf('\n');
0766 end