Mercurial > repos > public > sbplib
comparison +grid/Ti3D.m @ 349:cd6a29ab3746 feature/hypsyst
A 3D is added and an attempt to imlement 3D transfinit interpolation has been initialized
author | Ylva Rydin <ylva.rydin@telia.com> |
---|---|
date | Thu, 13 Oct 2016 09:34:30 +0200 |
parents | |
children | 5d5652fe826a |
comparison
equal
deleted
inserted
replaced
301:d9860ebc3148 | 349:cd6a29ab3746 |
---|---|
1 classdef Ti3D | |
2 properties | |
3 gs % {6}Surfaces | |
4 V % FunctionHandle(XI,ETA,ZETA) | |
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 = Ti3D(CW,CE,CS,CN,CB,CT) | |
11 obj.gs = {CE,CW,CS,CN,CB,CT}; | |
12 | |
13 gw = CW.g; | |
14 ge = CE.g; | |
15 gs = CS.g; | |
16 gn = CN.g; | |
17 gb = CB.g; | |
18 gt = CT.g; | |
19 | |
20 function o = V_fun(XI,ETA,ZETA) | |
21 XI=XI'; | |
22 ETA=ETA'; | |
23 ZETA=ZETA'; | |
24 | |
25 one=0*ETA+1; | |
26 zero=0*ETA; | |
27 | |
28 Sw = gw((1-ETA),(1-ZETA)); | |
29 Se = ge(ETA,ZETA); | |
30 Ss = gs(XI,(1-ZETA)); | |
31 Sn = gn((1-XI),ZETA); | |
32 Sb = gb(XI,ETA); | |
33 St = gt((1-XI),(1-ETA)); | |
34 | |
35 Ewt = gw(1-ETA,zero); | |
36 Ewb = gw(1-ETA,one); | |
37 Ews = gw(one,1-ZETA); | |
38 Ewn = gw(zero,1-ZETA); | |
39 Eet = ge(ETA,one); | |
40 Eeb = ge(ETA,zero); | |
41 Ees = ge(0*one,ZETA); | |
42 Een = ge(one,ZETA); | |
43 Enb = gn(1-XI,zero); | |
44 Ent = gn(1-XI,one); | |
45 Est = gs(XI,zero); | |
46 Esb = gs(XI,one); | |
47 | |
48 Cwbs = gw(one,one); | |
49 Cwbn = gw(zero,one); | |
50 Cwts = gw(one,zero); | |
51 Cwtn = gw(zero,zero); | |
52 Cebs = ge(zero,zero); | |
53 Cebn = ge(one,zero); | |
54 Cets = ge(zero,one); | |
55 Cetn = ge(one,one); | |
56 | |
57 | |
58 X1 = (1-XI).*Sw(1,:,:) + XI.*Se(1,:,:); | |
59 X2 = (1-ETA).*Ss(1,:,:) + ETA.*Sn(1,:,:); | |
60 X3 = (1-ZETA).*Sb(1,:,:) + ZETA.*St(1,:,:); | |
61 | |
62 X12 = (1-XI).*(1-ETA).*Ews(1,:,:) + (1-XI).*ETA.*Ewn(1,:,:) + XI.*(1-ETA).*Ees(1,:,:) + XI.*ETA.*Een(1,:,:); | |
63 X13 = (1-XI).*(1-ZETA).*Ewb(1,:,:) + (1-XI).*ZETA.*Ewt(1,:,:) + XI.*(1-ZETA).*Eeb(1,:,:) + XI.*ZETA.*Eet(1,:,:); | |
64 X23 = (1-ETA).*(1-ZETA).*Esb(1,:,:) + (1-ETA).*ZETA.*Est(1,:,:) + ETA.*(1-ZETA).*Enb(1,:,:) + ETA.*ZETA.*Ent(1,:,:); | |
65 | |
66 X123 = (1-XI).*(1-ETA).*(1-ZETA).*Cwbs(1,:,:) + (1-XI).*(1-ETA).*ZETA.*Cwts(1,:,:) + (1-XI).*ETA.*(1-ZETA).*Cwbn(1,:,:) + ... | |
67 (1-XI).*ETA.*ZETA.*Cwtn(1,:,:) + XI.*(1-ETA).*(1-ZETA).*Cebs(1,:,:) + XI.*(1-ETA).*ZETA.*Cets(1,:,:) + ... | |
68 XI.*ETA.*(1-ZETA).*Cebn(1,:,:) + XI.*ETA.*ZETA.*Cetn(1,:,:); | |
69 | |
70 X = X1 + X2 + X3 - X12 - X13 - X23 + X123; | |
71 | |
72 | |
73 Y1 = (1-XI).*Sw(2,:,:) + XI.*Se(2,:,:); | |
74 Y2 = (1-ETA).*Ss(2,:,:) + ETA.*Sn(2,:,:); | |
75 Y3 = (1-ZETA).*Sb(2,:,:) + ZETA.*St(2,:,:); | |
76 | |
77 Y12 = (1-XI).*(1-ETA).*Ews(2,:,:) + (1-XI).*ETA.*Ewn(2,:,:) + XI.*(1-ETA).*Ees(2,:,:) + XI.*ETA.*Een(2,:,:); | |
78 Y13 = (1-XI).*(1-ZETA).*Ewb(2,:,:) + (1-XI).*ZETA.*Ewt(2,:,:) + XI.*(1-ZETA).*Eeb(2,:,:) + XI.*ZETA.*Eet(2,:,:); | |
79 Y23 = (1-ETA).*(1-ZETA).*Esb(2,:,:) + (1-ETA).*ZETA.*Est(2,:,:) + ETA.*(1-ZETA).*Enb(2,:,:) + ETA.*ZETA.*Ent(2,:,:); | |
80 | |
81 Y123 = (1-XI).*(1-ETA).*(1-ZETA).*Cwbs(2,:,:) + (1-XI).*(1-ETA).*ZETA.*Cwts(2,:,:) + (1-XI).*ETA.*(1-ZETA).*Cwbn(2,:,:) + ... | |
82 (1-XI).*ETA.*ZETA.*Cwtn(2,:,:) + XI.*(1-ETA).*(1-ZETA).*Cebs(2,:,:) + XI.*(1-ETA).*ZETA.*Cets(2,:,:) + ... | |
83 XI.*ETA.*(1-ZETA).*Cebn(2,:,:) + XI.*ETA.*ZETA.*Cetn(2,:,:); | |
84 | |
85 Y = Y1 + Y2 + Y3 - Y12 - Y13 - Y23 + Y123; | |
86 | |
87 | |
88 Z1 = (1-XI).*Sw(3,:,:) + XI.*Se(3,:,:); | |
89 Z2 = (1-ETA).*Ss(3,:,:) + ETA.*Sn(3,:,:); | |
90 Z3 = (1-ZETA).*Sb(3,:,:) + ZETA.*St(3,:,:); | |
91 | |
92 Z12 = (1-XI).*(1-ETA).*Ews(3,:,:) + (1-XI).*ETA.*Ewn(3,:,:) + XI.*(1-ETA).*Ees(3,:,:) + XI.*ETA.*Een(3,:,:); | |
93 Z13 = (1-XI).*(1-ZETA).*Ewb(3,:,:) + (1-XI).*ZETA.*Ewt(3,:,:) + XI.*(1-ZETA).*Eeb(3,:,:) + XI.*ZETA.*Eet(3,:,:); | |
94 Z23 = (1-ETA).*(1-ZETA).*Esb(3,:,:) + (1-ETA).*ZETA.*Est(3,:,:) + ETA.*(1-ZETA).*Enb(3,:,:) + ETA.*ZETA.*Ent(3,:,:); | |
95 | |
96 Z123 = (1-XI).*(1-ETA).*(1-ZETA).*Cwbs(3,:,:) + (1-XI).*(1-ETA).*ZETA.*Cwts(3,:,:) + (1-XI).*ETA.*(1-ZETA).*Cwbn(3,:,:) + ... | |
97 (1-XI).*ETA.*ZETA.*Cwtn(3,:,:) + XI.*(1-ETA).*(1-ZETA).*Cebs(3,:,:) + XI.*(1-ETA).*ZETA.*Cets(3,:,:) + ... | |
98 XI.*ETA.*(1-ZETA).*Cebn(3,:,:) + XI.*ETA.*ZETA.*Cetn(3,:,:); | |
99 | |
100 Z = Z1 + Z2 + Z3 - Z12 - Z13 - Z23 + Z123; | |
101 o = [X;Y;Z]; | |
102 end | |
103 | |
104 obj.V = @V_fun; | |
105 end | |
106 | |
107 | |
108 function [X,Y,Z] = map(obj,XI,ETA,ZETA) | |
109 | |
110 V = obj.V; | |
111 | |
112 p = V(XI,ETA,ZETA); | |
113 X = p(1,:)'; | |
114 Y = p(2,:)'; | |
115 Z = p(3,:)'; | |
116 | |
117 end | |
118 | |
119 % function h = plot(obj,nu,nv) | |
120 % S = obj.S; | |
121 % | |
122 % default_arg('nv',nu) | |
123 % | |
124 % u = linspace(0,1,nu); | |
125 % v = linspace(0,1,nv); | |
126 % | |
127 % m = 100; | |
128 % | |
129 % X = zeros(nu+nv,m); | |
130 % Y = zeros(nu+nv,m); | |
131 % | |
132 % | |
133 % t = linspace(0,1,m); | |
134 % for i = 1:nu | |
135 % p = S(u(i),t); | |
136 % X(i,:) = p(1,:); | |
137 % Y(i,:) = p(2,:); | |
138 % end | |
139 % | |
140 % for i = 1:nv | |
141 % p = S(t,v(i)); | |
142 % X(i+nu,:) = p(1,:); | |
143 % Y(i+nu,:) = p(2,:); | |
144 % end | |
145 % | |
146 % h = line(X',Y'); | |
147 % end | |
148 % | |
149 % | |
150 % function h = show(obj,nu,nv) | |
151 % default_arg('nv',nu) | |
152 % S = obj.S; | |
153 % | |
154 % if(nu>2 || nv>2) | |
155 % h_grid = obj.plot(nu,nv); | |
156 % set(h_grid,'Color',[0 0.4470 0.7410]); | |
157 % end | |
158 % | |
159 % h_bord = obj.plot(2,2); | |
160 % set(h_bord,'Color',[0.8500 0.3250 0.0980]); | |
161 % set(h_bord,'LineWidth',2); | |
162 % end | |
163 % | |
164 % | |
165 % % TRANSFORMATIONS | |
166 % function ti = translate(obj,a) | |
167 % gs = obj.gs; | |
168 % | |
169 % for i = 1:length(gs) | |
170 % new_gs{i} = gs{i}.translate(a); | |
171 % end | |
172 % | |
173 % ti = grid.Ti(new_gs{:}); | |
174 % end | |
175 % | |
176 % % Mirrors the Ti so that the resulting Ti is still left handed. | |
177 % % (Corrected by reversing curves and switching e and w) | |
178 % function ti = mirror(obj, a, b) | |
179 % gs = obj.gs; | |
180 % | |
181 % new_gs = cell(1,4); | |
182 % | |
183 % new_gs{1} = gs{1}.mirror(a,b).reverse(); | |
184 % new_gs{3} = gs{3}.mirror(a,b).reverse(); | |
185 % new_gs{2} = gs{4}.mirror(a,b).reverse(); | |
186 % new_gs{4} = gs{2}.mirror(a,b).reverse(); | |
187 % | |
188 % ti = grid.Ti(new_gs{:}); | |
189 % end | |
190 % | |
191 % function ti = rotate(obj,a,rad) | |
192 % gs = obj.gs; | |
193 % | |
194 % for i = 1:length(gs) | |
195 % new_gs{i} = gs{i}.rotate(a,rad); | |
196 % end | |
197 % | |
198 % ti = grid.Ti(new_gs{:}); | |
199 % end | |
200 % | |
201 % function ti = rotate_edges(obj,n); | |
202 % new_gs = cell(1,4); | |
203 % for i = 0:3 | |
204 % new_i = mod(i - n,4); | |
205 % new_gs{new_i+1} = obj.gs{i+1}; | |
206 % end | |
207 % ti = grid.Ti(new_gs{:}); | |
208 % end | |
209 % end | |
210 % | |
211 % methods(Static) | |
212 % function obj = points(p1, p2, p3, p4) | |
213 % g1 = grid.Curve.line(p1,p2); | |
214 % g2 = grid.Curve.line(p2,p3); | |
215 % g3 = grid.Curve.line(p3,p4); | |
216 % g4 = grid.Curve.line(p4,p1); | |
217 % | |
218 % obj = grid.Ti(g1,g2,g3,g4); | |
219 % end | |
220 % | |
221 % function label(varargin) | |
222 % if nargin == 2 && ischar(varargin{2}) | |
223 % label_impl(varargin{:}); | |
224 % else | |
225 % for i = 1:length(varargin) | |
226 % label_impl(varargin{i},inputname(i)); | |
227 % end | |
228 % end | |
229 % | |
230 % | |
231 % function label_impl(ti,str) | |
232 % S = ti.S; | |
233 % | |
234 % pc = S(0.5,0.5); | |
235 % | |
236 % margin = 0.1; | |
237 % pw = S( margin, 0.5); | |
238 % pe = S(1-margin, 0.5); | |
239 % ps = S( 0.5, margin); | |
240 % pn = S( 0.5, 1-margin); | |
241 % | |
242 % | |
243 % ti.show(2,2); | |
244 % grid.place_label(pc,str); | |
245 % grid.place_label(pw,'w'); | |
246 % grid.place_label(pe,'e'); | |
247 % grid.place_label(ps,'s'); | |
248 % grid.place_label(pn,'n'); | |
249 % end | |
250 % end | |
251 end | |
252 end |