LOAD2DISP Converts fixed loads to dispatchable. MPC = LOAD2DISP(MPC0); MPC = LOAD2DISP(MPC0, FNAME); MPC = LOAD2DISP(MPC0, FNAME, IDX); MPC = LOAD2DISP(MPC0, FNAME, IDX, VOLL); Takes a MATPOWER case file or struct and converts fixed loads to dispatchable loads and returns the resulting case struct. Inputs are as follows: MPC0 - File name or struct with initial MATPOWER case. FNAME (optional) - Name to use to save resulting MATPOWER case. If empty, the case will not be saved to a file. IDX (optional) - Vector of bus indexes of loads to be converted. If empty or not supplied, it will convert all loads with positive real power demand. VOLL (optional) - Scalar or vector specifying the value of lost load to use as the value for the dispatchable loads. If it is a scalar it is used for all loads, if a vector, the dimension must match that of IDX. Default is $5000 per MWh.
0001 function mpc1 = load2disp(mpc0, fname, idx, voll) 0002 %LOAD2DISP Converts fixed loads to dispatchable. 0003 % MPC = LOAD2DISP(MPC0); 0004 % MPC = LOAD2DISP(MPC0, FNAME); 0005 % MPC = LOAD2DISP(MPC0, FNAME, IDX); 0006 % MPC = LOAD2DISP(MPC0, FNAME, IDX, VOLL); 0007 % 0008 % Takes a MATPOWER case file or struct and converts fixed loads to 0009 % dispatchable loads and returns the resulting case struct. Inputs 0010 % are as follows: 0011 % 0012 % MPC0 - File name or struct with initial MATPOWER case. 0013 % 0014 % FNAME (optional) - Name to use to save resulting MATPOWER case. If empty, 0015 % the case will not be saved to a file. 0016 % 0017 % IDX (optional) - Vector of bus indexes of loads to be converted. If empty 0018 % or not supplied, it will convert all loads with positive real 0019 % power demand. 0020 % 0021 % VOLL (optional) - Scalar or vector specifying the value of lost 0022 % load to use as the value for the dispatchable loads. If it is 0023 % a scalar it is used for all loads, if a vector, the dimension 0024 % must match that of IDX. Default is $5000 per MWh. 0025 0026 % MATPOWER 0027 % $Id: load2disp.m,v 1.1 2010/06/25 19:17:07 ray Exp $ 0028 % by Alberto Lamadrid, PSERC Cornell 0029 % modified by Ray Zimmerman, PSERC Cornell 0030 % Copyright (c) 2010 by Power System Engineering Research Center (PSERC) 0031 % 0032 % This file is part of MATPOWER. 0033 % See http://www.pserc.cornell.edu/matpower/ for more info. 0034 % 0035 % MATPOWER is free software: you can redistribute it and/or modify 0036 % it under the terms of the GNU General Public License as published 0037 % by the Free Software Foundation, either version 3 of the License, 0038 % or (at your option) any later version. 0039 % 0040 % MATPOWER is distributed in the hope that it will be useful, 0041 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0042 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0043 % GNU General Public License for more details. 0044 % 0045 % You should have received a copy of the GNU General Public License 0046 % along with MATPOWER. If not, see <http://www.gnu.org/licenses/>. 0047 % 0048 % Additional permission under GNU GPL version 3 section 7 0049 % 0050 % If you modify MATPOWER, or any covered work, to interface with 0051 % other modules (such as MATLAB code and MEX-files) available in a 0052 % MATLAB(R) or comparable environment containing parts covered 0053 % under other licensing terms, the licensors of MATPOWER grant 0054 % you additional permission to convey the resulting work. 0055 0056 %% define constants 0057 [PQ, PV, REF, NONE, BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, ... 0058 VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus; 0059 [GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ... 0060 MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, PC1, PC2, QC1MIN, QC1MAX, ... 0061 QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen; 0062 [PW_LINEAR, POLYNOMIAL, MODEL, STARTUP, SHUTDOWN, NCOST, COST] = idx_cost; 0063 0064 mpc = loadcase(mpc0); 0065 0066 %% which loads will be converted? 0067 if nargin < 3 || isempty(idx) 0068 idx = find(mpc.bus(:, PD) > 0); %% by default, all with PD > 0 0069 end 0070 0071 %% set some defaults 0072 voll0 = 5000; %% default value of lost load 0073 mBase = 100; %% generator MVA base 0074 nld = length(idx); 0075 v1 = ones(nld, 1); %% vector of ones 0076 v0 = zeros(nld, 1); %% vector of zeros 0077 0078 %% gen table 0079 gen = [ 0080 mpc.bus(idx, BUS_I), ... %% GEN_BUS 0081 -mpc.bus(idx, PD), ... %% PG 0082 -mpc.bus(idx, QD), ... %% QG 0083 max(0, -mpc.bus(idx, QD)), ... %% QMAX 0084 min(0, -mpc.bus(idx, QD)), ... %% QMIN 0085 mpc.bus(idx, VM), ... %% VG 0086 mBase * v1, ... %% MBASE 0087 v1, ... %% GEN_STATUS 0088 max(0, -mpc.bus(idx, PD)), ... %% PMAX 0089 min(0, -mpc.bus(idx, PD)), ... %% PMIN 0090 zeros(nld, 11), ... %% capability curve & ramp rates 0091 ]; 0092 mpc.gen = [mpc.gen; gen]; %% add dispatchable loads 0093 0094 %% bus table 0095 mpc.bus(idx, [PD, QD]) = 0; %% zero out fixed loads 0096 0097 %% gencost table 0098 nc = size(mpc.gencost, 2); 0099 if nargin < 4 0100 voll = voll0 * v1; 0101 elseif length(voll) == 1 0102 voll = voll * v1; 0103 end 0104 gencost = [ %% use a linear, polynomial cost format 0105 POLYNOMIAL*v1, ... %% MODEL 0106 zeros(nld, 2), ... %% STARTUP, SHUTDOWN 0107 2 * v1, ... %% NCOST 0108 voll, ... %% COST, linear term 0109 zeros(nld, nc-5) ... %% constant term and zero-padding 0110 ]; 0111 mpc.gencost = [mpc.gencost; gencost]; 0112 0113 %% save case, if filename is given 0114 if nargin > 1 && ~isempty(fname) 0115 savecase(fname, mpc, '2'); 0116 end 0117 if nargout > 0 0118 mpc1 = mpc; 0119 end