Mercurial > repos > public > sbplib
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 |