comparison +scheme/Elastic2dVariableAnisotropic.m @ 1303:49e3870335ef feature/poroelastic

Make the hollow scheme generation more efficient by introducing the D2VariableHollow opSet
author Martin Almquist <malmquist@stanford.edu>
date Sat, 11 Jul 2020 06:54:15 -0700
parents a0d615bde7f8
children a38e80fdbf60
comparison
equal deleted inserted replaced
1302:a0d615bde7f8 1303:49e3870335ef
105 end 105 end
106 end 106 end
107 107
108 % 1D operators 108 % 1D operators
109 ops = cell(dim,1); 109 ops = cell(dim,1);
110 opsHollow = cell(dim,1);
110 h = zeros(dim,1); 111 h = zeros(dim,1);
111 for i = 1:dim 112 for i = 1:dim
112 ops{i} = opSet{i}(m(i), lim{i}, order); 113 ops{i} = opSet{i}(m(i), lim{i}, order);
113 h(i) = ops{i}.h; 114 h(i) = ops{i}.h;
115 if hollow
116 opsHollow{i} = sbp.D2VariableCompatibleHollow(m(i), lim{i}, order);
117 end
114 end 118 end
115 119
116 % Borrowing constants 120 % Borrowing constants
117 for i = 1:dim 121 for i = 1:dim
118 obj.h11{i} = h(i)*ops{i}.borrowing.H11; 122 obj.h11{i} = h(i)*ops{i}.borrowing.H11;
119 end 123 end
120 124
121 I = cell(dim,1); 125 I = cell(dim,1);
122 D1 = cell(dim,1); 126 D1 = cell(dim,1);
123 D2 = cell(dim,1); 127 D2 = cell(dim,1);
128 D2Hollow = cell(dim,1);
124 H = cell(dim,1); 129 H = cell(dim,1);
125 Hi = cell(dim,1); 130 Hi = cell(dim,1);
126 e_0 = cell(dim,1); 131 e_0 = cell(dim,1);
127 e_m = cell(dim,1); 132 e_m = cell(dim,1);
128 d1_0 = cell(dim,1); 133 d1_0 = cell(dim,1);
129 d1_m = cell(dim,1); 134 d1_m = cell(dim,1);
130 135
131 for i = 1:dim 136 for i = 1:dim
132 I{i} = speye(m(i)); 137 I{i} = speye(m(i));
133 D1{i} = ops{i}.D1; 138 D1{i} = ops{i}.D1;
139 if hollow
140 D2Hollow{i} = opsHollow{i}.D2;
141 end
134 D2{i} = ops{i}.D2; 142 D2{i} = ops{i}.D2;
135 H{i} = ops{i}.H; 143 H{i} = ops{i}.H;
136 Hi{i} = ops{i}.HI; 144 Hi{i} = ops{i}.HI;
137 e_0{i} = ops{i}.e_l; 145 e_0{i} = ops{i}.e_l;
138 e_m{i} = ops{i}.e_r; 146 e_m{i} = ops{i}.e_r;
229 for r = 1:m(2) 237 for r = 1:m(2)
230 p = ind(:,r); 238 p = ind(:,r);
231 for j = 1:dim 239 for j = 1:dim
232 for l = 1:dim 240 for l = 1:dim
233 coeff = C{k,j,k,l}; 241 coeff = C{k,j,k,l};
234 D_kk = D2{1}(coeff(p));
235 if hollow && r > nBP && r < m(2) - nBP + 1 242 if hollow && r > nBP && r < m(2) - nBP + 1
236 D_kk = mask*D_kk; 243 D_kk = D2Hollow{1}(coeff(p));
244 else
245 D_kk = D2{1}(coeff(p));
237 end 246 end
238 D2_temp{j,k,l}(p,p) = D_kk; 247 D2_temp{j,k,l}(p,p) = D_kk;
239 end 248 end
240 end 249 end
241 end 250 end
251 for r = 1:m(1) 260 for r = 1:m(1)
252 p = ind(r,:); 261 p = ind(r,:);
253 for j = 1:dim 262 for j = 1:dim
254 for l = 1:dim 263 for l = 1:dim
255 coeff = C{k,j,k,l}; 264 coeff = C{k,j,k,l};
256 D_kk = D2{2}(coeff(p));
257 if hollow && r > nBP && r < m(1) - nBP + 1 265 if hollow && r > nBP && r < m(1) - nBP + 1
258 D_kk = mask*D_kk; 266 D_kk = D2Hollow{2}(coeff(p));
267 else
268 D_kk = D2{2}(coeff(p));
259 end 269 end
260 D2_temp{j,k,l}(p,p) = D_kk; 270 D2_temp{j,k,l}(p,p) = D_kk;
261 end 271 end
262 end 272 end
263 end 273 end
290 end 300 end
291 clear D2_temp; 301 clear D2_temp;
292 if hollow 302 if hollow
293 mask = maskX + maskY; 303 mask = maskX + maskY;
294 mask = mask>0; 304 mask = mask>0;
295
296 % D = maskX*maskY*D;
297 D = mask*D; 305 D = mask*D;
298 end 306 end
299 D = obj.RHOi_kron*D; 307 D = obj.RHOi_kron*D;
300 obj.D = D; 308 obj.D = D;
301 clear D; 309 clear D;