comparison +scheme/Elastic2dVariableAnisotropic.m @ 1304:a38e80fdbf60 feature/poroelastic

Improve performance for the hollow case
author Martin Almquist <malmquist@stanford.edu>
date Sat, 11 Jul 2020 07:25:06 -0700
parents 49e3870335ef
children 8d9fc7981796
comparison
equal deleted inserted replaced
1303:49e3870335ef 1304:a38e80fdbf60
229 k = 1; 229 k = 1;
230 if hollow 230 if hollow
231 mask = sparse(m(1), m(1)); 231 mask = sparse(m(1), m(1));
232 mask(1:nBP, 1:nBP) = speye(nBP, nBP); 232 mask(1:nBP, 1:nBP) = speye(nBP, nBP);
233 mask(end-nBP+1:end, end-nBP+1:end) = speye(nBP, nBP); 233 mask(end-nBP+1:end, end-nBP+1:end) = speye(nBP, nBP);
234 maskX = kron(mask, speye(m(2), m(2))); 234 maskXSmall = kron(mask, speye(m(2), m(2)));
235 maskX = E{1}*maskX*E{1}' + E{2}*maskX*E{2}'; 235 maskX = E{1}*maskXSmall*E{1}' + E{2}*maskXSmall*E{2}';
236 end 236 end
237 for r = 1:m(2) 237 for r = 1:m(2)
238 p = ind(:,r); 238 p = ind(:,r);
239 for j = 1:dim 239 for j = 1:dim
240 for l = 1:dim 240 for l = 1:dim
252 k = 2; 252 k = 2;
253 if hollow 253 if hollow
254 mask = sparse(m(2), m(2)); 254 mask = sparse(m(2), m(2));
255 mask(1:nBP, 1:nBP) = speye(nBP, nBP); 255 mask(1:nBP, 1:nBP) = speye(nBP, nBP);
256 mask(end-nBP+1:end, end-nBP+1:end) = speye(nBP, nBP); 256 mask(end-nBP+1:end, end-nBP+1:end) = speye(nBP, nBP);
257 maskY = kron(speye(m(1), m(1)), mask); 257 maskYSmall = kron(speye(m(1), m(1)), mask);
258 maskY = E{1}*maskY*E{1}' + E{2}*maskY*E{2}'; 258
259 maskY = E{1}*maskYSmall*E{1}' + E{2}*maskYSmall*E{2}';
260 mask = maskX + maskY;
261 mask = mask>0;
262
263 maskSmall = maskXSmall + maskYSmall;
264 maskSmall = maskSmall>0;
259 end 265 end
260 for r = 1:m(1) 266 for r = 1:m(1)
261 p = ind(r,:); 267 p = ind(r,:);
262 for j = 1:dim 268 for j = 1:dim
263 for l = 1:dim 269 for l = 1:dim
290 for l = 1:dim 296 for l = 1:dim
291 if i == k 297 if i == k
292 D = D + E{j}*D2_temp{j,k,l}*E{l}'; 298 D = D + E{j}*D2_temp{j,k,l}*E{l}';
293 D2_temp{j,k,l} = []; 299 D2_temp{j,k,l} = [];
294 else 300 else
295 D = D + E{j}*D1{i}*C_mat{i,j,k,l}*D1{k}*E{l}'; 301 if hollow
302 D = D + E{j}*(maskSmall*D1{i})*C_mat{i,j,k,l}*D1{k}*E{l}';
303 else
304 D = D + E{j}*(D1{i})*C_mat{i,j,k,l}*D1{k}*E{l}';
305 end
296 end 306 end
297 end 307 end
298 end 308 end
299 end 309 end
300 end 310 end