Mercurial > repos > public > sbplib
diff +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 |
line wrap: on
line diff
--- a/+scheme/Elastic2dVariableAnisotropic.m Fri Jul 10 20:24:23 2020 -0700 +++ b/+scheme/Elastic2dVariableAnisotropic.m Sat Jul 11 06:54:15 2020 -0700 @@ -107,10 +107,14 @@ % 1D operators ops = cell(dim,1); + opsHollow = cell(dim,1); h = zeros(dim,1); for i = 1:dim ops{i} = opSet{i}(m(i), lim{i}, order); h(i) = ops{i}.h; + if hollow + opsHollow{i} = sbp.D2VariableCompatibleHollow(m(i), lim{i}, order); + end end % Borrowing constants @@ -121,6 +125,7 @@ I = cell(dim,1); D1 = cell(dim,1); D2 = cell(dim,1); + D2Hollow = cell(dim,1); H = cell(dim,1); Hi = cell(dim,1); e_0 = cell(dim,1); @@ -131,6 +136,9 @@ for i = 1:dim I{i} = speye(m(i)); D1{i} = ops{i}.D1; + if hollow + D2Hollow{i} = opsHollow{i}.D2; + end D2{i} = ops{i}.D2; H{i} = ops{i}.H; Hi{i} = ops{i}.HI; @@ -231,9 +239,10 @@ for j = 1:dim for l = 1:dim coeff = C{k,j,k,l}; - D_kk = D2{1}(coeff(p)); if hollow && r > nBP && r < m(2) - nBP + 1 - D_kk = mask*D_kk; + D_kk = D2Hollow{1}(coeff(p)); + else + D_kk = D2{1}(coeff(p)); end D2_temp{j,k,l}(p,p) = D_kk; end @@ -253,9 +262,10 @@ for j = 1:dim for l = 1:dim coeff = C{k,j,k,l}; - D_kk = D2{2}(coeff(p)); if hollow && r > nBP && r < m(1) - nBP + 1 - D_kk = mask*D_kk; + D_kk = D2Hollow{2}(coeff(p)); + else + D_kk = D2{2}(coeff(p)); end D2_temp{j,k,l}(p,p) = D_kk; end @@ -292,8 +302,6 @@ if hollow mask = maskX + maskY; mask = mask>0; - - % D = maskX*maskY*D; D = mask*D; end D = obj.RHOi_kron*D;