Home > matpower7.1 > lib > e2i_data.m

e2i_data

PURPOSE ^

E2I_DATA Converts data from external to internal indexing.

SYNOPSIS ^

function newval = e2i_data(mpc, val, ordering, dim)

DESCRIPTION ^

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.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

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-2016, Power Systems Engineering Research Center (PSERC)
0046 %   by Ray Zimmerman, PSERC Cornell
0047 %
0048 %   This file is part of MATPOWER.
0049 %   Covered by the 3-clause BSD License (see LICENSE file for details).
0050 %   See https://matpower.org for more info.
0051 
0052 if ~isfield(mpc, 'order')
0053     error('e2i_data: mpc does not have the ''order'' field required to convert from external to internal numbering.');
0054 end
0055 o = mpc.order;
0056 if o.state ~= 'i'
0057     error('e2i_data: mpc does not have internal ordering data available, call ext2int first');
0058 end
0059 if nargin < 4
0060     dim = 1;
0061 end
0062 if ischar(ordering)         %% single set
0063     if strcmp(ordering, 'gen')
0064         idx = o.(ordering).status.on(o.(ordering).i2e);
0065     else
0066         idx = o.(ordering).status.on;
0067     end
0068     newval = get_reorder(val, idx, dim);
0069 else                        %% multiple sets
0070     b = 0;  %% base
0071     for k = 1:length(ordering)
0072         n = size(o.ext.(ordering{k}), 1);
0073         v = get_reorder(val, b+(1:n), dim);
0074         new_v{k} = e2i_data(mpc, v, ordering{k}, dim);
0075         b = b + n;
0076     end
0077     n = size(val, dim);
0078     if n > b                %% the rest
0079         v = get_reorder(val, b+1:n, dim);
0080         new_v{length(new_v)+1} = v;
0081     end
0082     newval = cat(dim, new_v{:});
0083 end

Generated on Fri 09-Oct-2020 11:21:31 by m2html © 2005