E2I_DATA Converts data from external to internal indexing. VAL = E2I_DATA(MPC, VAL, ORDERING) VAL = E2I_DATA(MPC, VAL, ORDERING, DIM) When given a case struct that has already been converted to internal indexing, this function can be used to convert other data structures as well by passing in 2 or 3 extra parameters in addition to the case struct. If the value passed in the 2nd argument is a column vector or cell array, it will be converted according to the ORDERING specified by the 3rd argument (described below). If VAL is an n-dimensional matrix or cell array, then the optional 4th argument (DIM, default = 1) can be used to specify which dimension to reorder. The return value in this case is the value passed in, converted to internal indexing. The 3rd argument, ORDERING, is used to indicate whether the data corresponds to bus-, gen- or branch-ordered data. It can be one of the following three strings: 'bus', 'gen' or 'branch'. For data structures with multiple blocks of data, ordered by bus, gen or branch, they can be converted with a single call by specifying ORDERING as a cell array of strings. Any extra elements, rows, columns, etc. beyond those indicated in ORDERING, are not disturbed. Examples: A_int = e2i_data(mpc, A_ext, {'bus','bus','gen','gen'}, 2); Converts an A matrix for user-supplied OPF constraints from external to internal ordering, where the columns of the A matrix correspond to bus voltage angles, then voltage magnitudes, then generator real power injections and finally generator reactive power injections. gencost_int = e2i_data(mpc, gencost_ext, {'gen','gen'}, 1); Converts a GENCOST matrix that has both real and reactive power costs (in rows 1--ng and ng+1--2*ng, respectively). See also I2E_DATA, E2I_FIELD, EXT2INT.
0001 function newval = e2i_data(mpc, val, ordering, dim) 0002 %E2I_DATA Converts data from external to internal indexing. 0003 % 0004 % VAL = E2I_DATA(MPC, VAL, ORDERING) 0005 % VAL = E2I_DATA(MPC, VAL, ORDERING, DIM) 0006 % 0007 % When given a case struct that has already been converted to 0008 % internal indexing, this function can be used to convert other data 0009 % structures as well by passing in 2 or 3 extra parameters in 0010 % addition to the case struct. If the value passed in the 2nd 0011 % argument is a column vector or cell array, it will be converted 0012 % according to the ORDERING specified by the 3rd argument (described 0013 % below). If VAL is an n-dimensional matrix or cell array, then the 0014 % optional 4th argument (DIM, default = 1) can be used to specify 0015 % which dimension to reorder. The return value in this case is the 0016 % value passed in, converted to internal indexing. 0017 % 0018 % The 3rd argument, ORDERING, is used to indicate whether the data 0019 % corresponds to bus-, gen- or branch-ordered data. It can be one 0020 % of the following three strings: 'bus', 'gen' or 'branch'. For 0021 % data structures with multiple blocks of data, ordered by bus, 0022 % gen or branch, they can be converted with a single call by 0023 % specifying ORDERING as a cell array of strings. 0024 % 0025 % Any extra elements, rows, columns, etc. beyond those indicated 0026 % in ORDERING, are not disturbed. 0027 % 0028 % Examples: 0029 % A_int = e2i_data(mpc, A_ext, {'bus','bus','gen','gen'}, 2); 0030 % 0031 % Converts an A matrix for user-supplied OPF constraints from 0032 % external to internal ordering, where the columns of the A 0033 % matrix correspond to bus voltage angles, then voltage 0034 % magnitudes, then generator real power injections and finally 0035 % generator reactive power injections. 0036 % 0037 % gencost_int = e2i_data(mpc, gencost_ext, {'gen','gen'}, 1); 0038 % 0039 % Converts a GENCOST matrix that has both real and reactive power 0040 % costs (in rows 1--ng and ng+1--2*ng, respectively). 0041 % 0042 % See also I2E_DATA, E2I_FIELD, EXT2INT. 0043 0044 % MATPOWER 0045 % Copyright (c) 2009-2015 by Power System Engineering Research Center (PSERC) 0046 % by Ray Zimmerman, PSERC Cornell 0047 % 0048 % $Id: e2i_data.m 2644 2015-03-11 19:34:22Z ray $ 0049 % 0050 % This file is part of MATPOWER. 0051 % Covered by the 3-clause BSD License (see LICENSE file for details). 0052 % See http://www.pserc.cornell.edu/matpower/ for more info. 0053 0054 if ~isfield(mpc, 'order') 0055 error('e2i_data: mpc does not have the ''order'' field required to convert from external to internal numbering.'); 0056 end 0057 o = mpc.order; 0058 if o.state ~= 'i' 0059 error('e2i_data: mpc does not have internal ordering data available, call ext2int first'); 0060 end 0061 if nargin < 4 0062 dim = 1; 0063 end 0064 if ischar(ordering) %% single set 0065 if strcmp(ordering, 'gen') 0066 idx = o.(ordering).status.on(o.(ordering).e2i); 0067 else 0068 idx = o.(ordering).status.on; 0069 end 0070 newval = get_reorder(val, idx, dim); 0071 else %% multiple sets 0072 b = 0; %% base 0073 for k = 1:length(ordering) 0074 n = size(o.ext.(ordering{k}), 1); 0075 v = get_reorder(val, b+(1:n), dim); 0076 new_v{k} = e2i_data(mpc, v, ordering{k}, dim); 0077 b = b + n; 0078 end 0079 n = size(val, dim); 0080 if n > b %% the rest 0081 v = get_reorder(val, b+1:n, dim); 0082 new_v{length(new_v)+1} = v; 0083 end 0084 newval = cat(dim, new_v{:}); 0085 end