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;