0001 function [v0, vl, vu, vt] = getv(om, name, idx)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 if nargout > 3
0029 have_vt = 1;
0030 else
0031 have_vt = 0;
0032 end
0033 if nargin < 2
0034 v0 = []; vl = []; vu = []; vt = char([]);
0035 s1 = struct('type', {'.', '{}'}, 'subs', {'', 1});
0036 for k = 1:om.var.NS
0037 name = om.var.order(k).name;
0038 idx = om.var.order(k).idx;
0039 if isempty(idx)
0040 v0 = [ v0; om.var.data.v0.(name) ];
0041 vl = [ vl; om.var.data.vl.(name) ];
0042 vu = [ vu; om.var.data.vu.(name) ];
0043 if have_vt
0044 N = om.var.idx.N.(name);
0045 vt0 = om.var.data.vt.(name);
0046 if isscalar(vt0) && N > 1
0047 vt = [ vt char(vt0 * ones(1, N)) ];
0048 else
0049 vt = [ vt vt0 ];
0050 end
0051 end
0052 else
0053
0054
0055
0056 s1(1).subs = name;
0057 s1(2).subs = idx;
0058 v0 = [ v0; subsref(om.var.data.v0, s1) ];
0059 vl = [ vl; subsref(om.var.data.vl, s1) ];
0060 vu = [ vu; subsref(om.var.data.vu, s1) ];
0061 if have_vt
0062
0063
0064
0065 s2 = s1;
0066 s2(2).type = '()';
0067 N = subsref(om.var.idx.N, s2);
0068 vt0 = subsref(om.var.data.vt, s1);
0069 if isscalar(vt0) && N > 1
0070 vt = [ vt char(vt0 * ones(1, N)) ];
0071 else
0072 if ~isempty(vt0)
0073 vt = [ vt vt0 ];
0074 end
0075 end
0076 end
0077 end
0078 end
0079 else
0080 if isfield(om.var.idx.N, name)
0081 if nargin < 3
0082 v0 = om.var.data.v0.(name);
0083 vl = om.var.data.vl.(name);
0084 vu = om.var.data.vu.(name);
0085 if have_vt
0086 N = om.var.idx.N.(name);
0087 vt0 = om.var.data.vt.(name);
0088 if isscalar(vt0) && N > 1
0089 vt = char(vt0 * ones(1, N));
0090 else
0091 vt = vt0;
0092 end
0093 end
0094 else
0095
0096
0097
0098 s1 = struct('type', {'.', '{}'}, 'subs', {name, idx});
0099 v0 = subsref(om.var.data.v0, s1);
0100 vl = subsref(om.var.data.vl, s1);
0101 vu = subsref(om.var.data.vu, s1);
0102 if have_vt
0103
0104
0105
0106 s2 = s1;
0107 s2(2).type = '()';
0108 N = subsref(om.var.idx.N, s2);
0109 vt0 = subsref(om.var.data.vt, s1);
0110 if isscalar(vt0) && N > 1
0111 vt = char(vt0 * ones(1, N));
0112 else
0113 vt = vt0;
0114 end
0115 end
0116 end
0117 else
0118 v0 = [];
0119 vl = [];
0120 vu = [];
0121 if have_vt
0122 vt = [];
0123 end
0124 end
0125 end