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