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