


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