Mercurial > repos > public > sbplib
annotate +parametrization/Ti.m @ 1081:9c74d96fc9e2 feature/d1_staggered
Bugfix in interface SATs, Staggered1DAcousticsVariable
| author | Martin Almquist <malmquist@stanford.edu> |
|---|---|
| date | Tue, 05 Mar 2019 11:18:44 -0800 |
| parents | edb1d60b0b77 |
| children |
| rev | line source |
|---|---|
| 0 | 1 classdef Ti |
| 2 properties | |
| 3 gs % {4}Curve | |
| 4 S % FunctionHandle(u,v) | |
| 5 end | |
| 6 | |
| 7 methods | |
| 8 % TODO function to label boundary names. | |
| 9 % function to find largest and smallest delta h in the grid. Maybe shouldnt live here | |
| 10 function obj = Ti(C1,C2,C3,C4) | |
| 11 obj.gs = {C1,C2,C3,C4}; | |
| 12 | |
| 13 g1 = C1.g; | |
| 14 g2 = C2.g; | |
| 15 g3 = C3.g; | |
| 16 g4 = C4.g; | |
| 17 | |
| 18 A = g1(0); | |
| 19 B = g2(0); | |
| 20 C = g3(0); | |
| 21 D = g4(0); | |
| 22 | |
| 23 function o = S_fun(u,v) | |
|
633
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
24 if isrow(u) && isrow(v) |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
25 flipped = false; |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
26 else |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
27 flipped = true; |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
28 u = u'; |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
29 v = v'; |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
30 end |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
31 |
| 0 | 32 x1 = g1(u); |
| 33 x2 = g2(v); | |
| 34 x3 = g3(1-u); | |
| 35 x4 = g4(1-v); | |
|
633
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
36 |
| 0 | 37 o1 = (1-v).*x1(1,:) + u.*x2(1,:) + v.*x3(1,:) + (1-u).*x4(1,:) ... |
|
632
d98d9c79573f
Switch to elementwise multiplication where it was not used
Jonatan Werpers <jonatan@werpers.com>
parents:
544
diff
changeset
|
38 -((1-u).*(1-v).*A(1,:) + u.*(1-v).*B(1,:) + u.*v.*C(1,:) + (1-u).*v.*D(1,:)); |
| 0 | 39 o2 = (1-v).*x1(2,:) + u.*x2(2,:) + v.*x3(2,:) + (1-u).*x4(2,:) ... |
|
632
d98d9c79573f
Switch to elementwise multiplication where it was not used
Jonatan Werpers <jonatan@werpers.com>
parents:
544
diff
changeset
|
40 -((1-u).*(1-v).*A(2,:) + u.*(1-v).*B(2,:) + u.*v.*C(2,:) + (1-u).*v.*D(2,:)); |
| 0 | 41 |
|
633
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
42 if ~flipped |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
43 o = [o1;o2]; |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
44 else |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
45 o = [o1'; o2']; |
|
6f4eb3da8978
Flip input and outputs if they are columnvectors.
Jonatan Werpers <jonatan@werpers.com>
parents:
632
diff
changeset
|
46 end |
| 0 | 47 end |
| 48 | |
| 49 obj.S = @S_fun; | |
| 50 end | |
| 51 | |
|
272
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
52 % Does this funciton make sense? |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
53 % Should it always be eval? |
| 0 | 54 function [X,Y] = map(obj,u,v) |
| 55 default_arg('v',u); | |
| 56 | |
| 57 if isscalar(u) | |
| 58 u = linspace(0,1,u); | |
| 59 end | |
| 60 | |
| 61 if isscalar(v) | |
| 62 v = linspace(0,1,v); | |
| 63 end | |
| 64 | |
| 65 S = obj.S; | |
| 66 | |
| 67 nu = length(u); | |
| 68 nv = length(v); | |
| 69 | |
| 70 X = zeros(nv,nu); | |
| 71 Y = zeros(nv,nu); | |
| 72 | |
| 73 u = rowVector(u); | |
| 74 v = rowVector(v); | |
| 75 | |
| 76 for i = 1:nv | |
| 77 p = S(u,v(i)); | |
| 78 X(i,:) = p(1,:); | |
| 79 Y(i,:) = p(2,:); | |
| 80 end | |
| 81 end | |
| 82 | |
|
272
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
83 % Evaluate S for each pair of u and v, |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
84 % Return same shape as u |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
85 function [x, y] = eval(obj, u, v) |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
86 x = zeros(size(u)); |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
87 y = zeros(size(u)); |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
88 |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
89 for i = 1:numel(u) |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
90 p = obj.S(u(i), v(i)); |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
91 x(i) = p(1,:); |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
92 y(i) = p(2,:); |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
93 end |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
94 end |
|
9fe423849525
Added evalfunction to Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
248
diff
changeset
|
95 |
| 0 | 96 function h = plot(obj,nu,nv) |
| 97 S = obj.S; | |
| 98 | |
| 99 default_arg('nv',nu) | |
| 100 | |
| 101 u = linspace(0,1,nu); | |
| 102 v = linspace(0,1,nv); | |
| 103 | |
| 104 m = 100; | |
| 105 | |
| 106 X = zeros(nu+nv,m); | |
| 107 Y = zeros(nu+nv,m); | |
| 108 | |
| 109 | |
| 110 t = linspace(0,1,m); | |
| 111 for i = 1:nu | |
| 112 p = S(u(i),t); | |
| 113 X(i,:) = p(1,:); | |
| 114 Y(i,:) = p(2,:); | |
| 115 end | |
| 116 | |
| 117 for i = 1:nv | |
| 118 p = S(t,v(i)); | |
| 119 X(i+nu,:) = p(1,:); | |
| 120 Y(i+nu,:) = p(2,:); | |
| 121 end | |
| 122 | |
| 123 h = line(X',Y'); | |
| 124 end | |
| 125 | |
| 126 | |
| 127 function h = show(obj,nu,nv) | |
| 128 default_arg('nv',nu) | |
| 129 S = obj.S; | |
| 130 | |
| 131 if(nu>2 || nv>2) | |
|
773
edb1d60b0b77
Return line handles from show methods in Def and Ti
Jonatan Werpers <jonatan@werpers.com>
parents:
633
diff
changeset
|
132 h.grid = obj.plot(nu,nv); |
|
edb1d60b0b77
Return line handles from show methods in Def and Ti
Jonatan Werpers <jonatan@werpers.com>
parents:
633
diff
changeset
|
133 set(h.grid,'Color',[0 0.4470 0.7410]); |
| 0 | 134 end |
| 135 | |
|
773
edb1d60b0b77
Return line handles from show methods in Def and Ti
Jonatan Werpers <jonatan@werpers.com>
parents:
633
diff
changeset
|
136 h.border = obj.plot(2,2); |
|
edb1d60b0b77
Return line handles from show methods in Def and Ti
Jonatan Werpers <jonatan@werpers.com>
parents:
633
diff
changeset
|
137 set(h.border,'Color',[0.8500 0.3250 0.0980]); |
|
edb1d60b0b77
Return line handles from show methods in Def and Ti
Jonatan Werpers <jonatan@werpers.com>
parents:
633
diff
changeset
|
138 set(h.border,'LineWidth',2); |
| 0 | 139 end |
| 140 | |
| 141 | |
| 142 % TRANSFORMATIONS | |
| 143 function ti = translate(obj,a) | |
| 144 gs = obj.gs; | |
| 145 | |
| 146 for i = 1:length(gs) | |
| 147 new_gs{i} = gs{i}.translate(a); | |
| 148 end | |
| 149 | |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
150 ti = parametrization.Ti(new_gs{:}); |
| 0 | 151 end |
| 152 | |
| 153 % Mirrors the Ti so that the resulting Ti is still left handed. | |
| 154 % (Corrected by reversing curves and switching e and w) | |
| 155 function ti = mirror(obj, a, b) | |
| 156 gs = obj.gs; | |
| 157 | |
| 158 new_gs = cell(1,4); | |
| 159 | |
| 160 new_gs{1} = gs{1}.mirror(a,b).reverse(); | |
| 161 new_gs{3} = gs{3}.mirror(a,b).reverse(); | |
| 162 new_gs{2} = gs{4}.mirror(a,b).reverse(); | |
| 163 new_gs{4} = gs{2}.mirror(a,b).reverse(); | |
| 164 | |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
165 ti = parametrization.Ti(new_gs{:}); |
| 0 | 166 end |
| 167 | |
| 168 function ti = rotate(obj,a,rad) | |
| 169 gs = obj.gs; | |
| 170 | |
| 171 for i = 1:length(gs) | |
| 172 new_gs{i} = gs{i}.rotate(a,rad); | |
| 173 end | |
| 174 | |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
175 ti = parametrization.Ti(new_gs{:}); |
| 0 | 176 end |
| 177 | |
| 178 function ti = rotate_edges(obj,n); | |
| 179 new_gs = cell(1,4); | |
| 180 for i = 0:3 | |
| 181 new_i = mod(i - n,4); | |
| 182 new_gs{new_i+1} = obj.gs{i+1}; | |
| 183 end | |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
184 ti = parametrization.Ti(new_gs{:}); |
| 0 | 185 end |
| 186 end | |
| 187 | |
| 188 methods(Static) | |
| 189 function obj = points(p1, p2, p3, p4) | |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
190 g1 = parametrization.Curve.line(p1,p2); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
191 g2 = parametrization.Curve.line(p2,p3); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
192 g3 = parametrization.Curve.line(p3,p4); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
193 g4 = parametrization.Curve.line(p4,p1); |
| 0 | 194 |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
195 obj = parametrization.Ti(g1,g2,g3,g4); |
| 0 | 196 end |
| 197 | |
|
544
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
198 function obj = rectangle(a, b) |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
199 p1 = a; |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
200 p2 = [b(1), a(2)]; |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
201 p3 = b; |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
202 p4 = [a(1), b(2)]; |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
203 |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
204 obj = parametrization.Ti.points(p1,p2,p3,p4); |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
205 end |
|
433ccb5d2f0f
Add Ti parametrization of rectangle
Jonatan Werpers <jonatan@werpers.com>
parents:
332
diff
changeset
|
206 |
|
332
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
207 % Like the constructor but allows inputing line curves as 2-cell arrays: |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
208 % example: parametrization.Ti.linesAndCurves(g1, g2, {a, b} g4) |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
209 function obj = linesAndCurves(C1, C2, C3, C4) |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
210 C = {C1, C2, C3, C4}; |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
211 c = cell(1,4); |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
212 |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
213 for i = 1:4 |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
214 if ~iscell(C{i}) |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
215 c{i} = C{i}; |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
216 else |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
217 c{i} = parametrization.Curve.line(C{i}{:}); |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
218 end |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
219 end |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
220 |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
221 obj = parametrization.Ti(c{:}); |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
222 end |
|
875386d0b2ff
Fixed a bug in draw and added a helper function to parametrization.Ti.
Jonatan Werpers <jonatan@werpers.com>
parents:
272
diff
changeset
|
223 |
| 0 | 224 function label(varargin) |
| 225 if nargin == 2 && ischar(varargin{2}) | |
| 226 label_impl(varargin{:}); | |
| 227 else | |
| 228 for i = 1:length(varargin) | |
| 229 label_impl(varargin{i},inputname(i)); | |
| 230 end | |
| 231 end | |
| 232 | |
| 233 | |
| 234 function label_impl(ti,str) | |
| 235 S = ti.S; | |
| 236 | |
| 237 pc = S(0.5,0.5); | |
| 238 | |
| 239 margin = 0.1; | |
| 240 pw = S( margin, 0.5); | |
| 241 pe = S(1-margin, 0.5); | |
| 242 ps = S( 0.5, margin); | |
| 243 pn = S( 0.5, 1-margin); | |
| 244 | |
| 245 | |
| 246 ti.show(2,2); | |
|
248
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
247 parametrization.place_label(pc,str); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
248 parametrization.place_label(pw,'w'); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
249 parametrization.place_label(pe,'e'); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
250 parametrization.place_label(ps,'s'); |
|
81e0ead29431
Fixed package names in +parametrization
Jonatan Werpers <jonatan@werpers.com>
parents:
151
diff
changeset
|
251 parametrization.place_label(pn,'n'); |
| 0 | 252 end |
| 253 end | |
| 254 end | |
| 255 end |
