Home > matpower4.1 > fdpf.m

fdpf

PURPOSE ^

FDPF Solves the power flow using a fast decoupled method.

SYNOPSIS ^

function [V, converged, i] = fdpf(Ybus, Sbus, V0, Bp, Bpp, ref, pv, pq, mpopt)

DESCRIPTION ^

FDPF  Solves the power flow using a fast decoupled method.
   [V, CONVERGED, I] = FDPF(YBUS, SBUS, V0, BP, BPP, REF, PV, PQ, MPOPT)
   solves for bus voltages given the full system admittance matrix (for
   all buses), the complex bus power injection vector (for all buses),
   the initial vector of complex bus voltages, the FDPF matrices B prime
   and B double prime, and column vectors with the lists of bus indices
   for the swing bus, PV buses, and PQ buses, respectively. The bus voltage
   vector contains the set point for generator (including ref bus)
   buses, and the reference angle of the swing bus, as well as an initial
   guess for remaining magnitudes and angles. MPOPT is a MATPOWER options
   vector which can be used to set the termination tolerance, maximum
   number of iterations, and output options (see MPOPTION for details).
   Uses default options if this parameter is not given. Returns the
   final complex voltages, a flag which indicates whether it converged
   or not, and the number of iterations performed.

   See also RUNPF.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [V, converged, i] = fdpf(Ybus, Sbus, V0, Bp, Bpp, ref, pv, pq, mpopt)
0002 %FDPF  Solves the power flow using a fast decoupled method.
0003 %   [V, CONVERGED, I] = FDPF(YBUS, SBUS, V0, BP, BPP, REF, PV, PQ, MPOPT)
0004 %   solves for bus voltages given the full system admittance matrix (for
0005 %   all buses), the complex bus power injection vector (for all buses),
0006 %   the initial vector of complex bus voltages, the FDPF matrices B prime
0007 %   and B double prime, and column vectors with the lists of bus indices
0008 %   for the swing bus, PV buses, and PQ buses, respectively. The bus voltage
0009 %   vector contains the set point for generator (including ref bus)
0010 %   buses, and the reference angle of the swing bus, as well as an initial
0011 %   guess for remaining magnitudes and angles. MPOPT is a MATPOWER options
0012 %   vector which can be used to set the termination tolerance, maximum
0013 %   number of iterations, and output options (see MPOPTION for details).
0014 %   Uses default options if this parameter is not given. Returns the
0015 %   final complex voltages, a flag which indicates whether it converged
0016 %   or not, and the number of iterations performed.
0017 %
0018 %   See also RUNPF.
0019 
0020 %   MATPOWER
0021 %   $Id: fdpf.m,v 1.14 2011/12/14 17:05:18 cvs Exp $
0022 %   by Ray Zimmerman, PSERC Cornell
0023 %   Copyright (c) 1996-2011 by Power System Engineering Research Center (PSERC)
0024 %
0025 %   This file is part of MATPOWER.
0026 %   See http://www.pserc.cornell.edu/matpower/ for more info.
0027 %
0028 %   MATPOWER is free software: you can redistribute it and/or modify
0029 %   it under the terms of the GNU General Public License as published
0030 %   by the Free Software Foundation, either version 3 of the License,
0031 %   or (at your option) any later version.
0032 %
0033 %   MATPOWER is distributed in the hope that it will be useful,
0034 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
0035 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0036 %   GNU General Public License for more details.
0037 %
0038 %   You should have received a copy of the GNU General Public License
0039 %   along with MATPOWER. If not, see <http://www.gnu.org/licenses/>.
0040 %
0041 %   Additional permission under GNU GPL version 3 section 7
0042 %
0043 %   If you modify MATPOWER, or any covered work, to interface with
0044 %   other modules (such as MATLAB code and MEX-files) available in a
0045 %   MATLAB(R) or comparable environment containing parts covered
0046 %   under other licensing terms, the licensors of MATPOWER grant
0047 %   you additional permission to convey the resulting work.
0048 
0049 %% default arguments
0050 if nargin < 7
0051     mpopt = mpoption;
0052 end
0053 
0054 %% options
0055 tol     = mpopt(2);
0056 max_it  = mpopt(4);
0057 verbose = mpopt(31);
0058 
0059 %% initialize
0060 converged = 0;
0061 i = 0;
0062 V = V0;
0063 Va = angle(V);
0064 Vm = abs(V);
0065 
0066 %% set up indexing for updating V
0067 npv = length(pv);
0068 npq = length(pq);
0069 
0070 %% evaluate initial mismatch
0071 mis = (V .* conj(Ybus * V) - Sbus) ./ Vm;
0072 P = real(mis([pv; pq]));
0073 Q = imag(mis(pq));
0074 
0075 %% check tolerance
0076 normP = norm(P, inf);
0077 normQ = norm(Q, inf);
0078 if verbose > 1
0079     fprintf('\niteration     max mismatch (p.u.)  ');
0080     fprintf('\ntype   #        P            Q     ');
0081     fprintf('\n---- ----  -----------  -----------');
0082     fprintf('\n  -  %3d   %10.3e   %10.3e', i, normP, normQ);
0083 end
0084 if normP < tol && normQ < tol
0085     converged = 1;
0086     if verbose > 1
0087         fprintf('\nConverged!\n');
0088     end
0089 end
0090 
0091 %% reduce B matrices
0092 Bp = Bp([pv; pq], [pv; pq]);
0093 Bpp = Bpp(pq, pq);
0094 
0095 %% factor B matrices
0096 [Lp, Up, Pp] = lu(Bp);
0097 [Lpp, Upp, Ppp] = lu(Bpp);
0098 
0099 %% do P and Q iterations
0100 while (~converged && i < max_it)
0101     %% update iteration counter
0102     i = i + 1;
0103 
0104     %%-----  do P iteration, update Va  -----
0105     dVa = -( Up \  (Lp \ (Pp * P)));
0106 
0107     %% update voltage
0108     Va([pv; pq]) = Va([pv; pq]) + dVa;
0109     V = Vm .* exp(1j * Va);
0110 
0111     %% evalute mismatch
0112     mis = (V .* conj(Ybus * V) - Sbus) ./ Vm;
0113     P = real(mis([pv; pq]));
0114     Q = imag(mis(pq));
0115     
0116     %% check tolerance
0117     normP = norm(P, inf);
0118     normQ = norm(Q, inf);
0119     if verbose > 1
0120         fprintf('\n  P  %3d   %10.3e   %10.3e', i, normP, normQ);
0121     end
0122     if normP < tol && normQ < tol
0123         converged = 1;
0124         if verbose
0125             fprintf('\nFast-decoupled power flow converged in %d P-iterations and %d Q-iterations.\n', i, i-1);
0126         end
0127         break;
0128     end
0129 
0130     %%-----  do Q iteration, update Vm  -----
0131     dVm = -( Upp \ (Lpp \ (Ppp * Q)) );
0132 
0133     %% update voltage
0134     Vm(pq) = Vm(pq) + dVm;
0135     V = Vm .* exp(1j * Va);
0136 
0137     %% evalute mismatch
0138     mis = (V .* conj(Ybus * V) - Sbus) ./ Vm;
0139     P = real(mis([pv; pq]));
0140     Q = imag(mis(pq));
0141     
0142     %% check tolerance
0143     normP = norm(P, inf);
0144     normQ = norm(Q, inf);
0145     if verbose > 1
0146         fprintf('\n  Q  %3d   %10.3e   %10.3e', i, normP, normQ);
0147     end
0148     if normP < tol && normQ < tol
0149         converged = 1;
0150         if verbose
0151             fprintf('\nFast-decoupled power flow converged in %d P-iterations and %d Q-iterations.\n', i, i);
0152         end
0153         break;
0154     end
0155 end
0156 
0157 if verbose
0158     if ~converged
0159         fprintf('\nFast-decoupled power flow did not converge in %d iterations.\n', i);
0160     end
0161 end

Generated on Mon 26-Jan-2015 15:00:13 by m2html © 2005