Mercurial > repos > public > sbplib
diff +scheme/Elastic2dVariable.m @ 965:db3411264b96 feature/poroelastic
Remove use of tensor library in B assembly
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Sat, 22 Dec 2018 16:41:17 +0100 |
parents | c75ddd568fcc |
children | 4a85cff53107 |
line wrap: on
line diff
--- a/+scheme/Elastic2dVariable.m Wed Dec 19 07:09:24 2018 +0100 +++ b/+scheme/Elastic2dVariable.m Sat Dec 22 16:41:17 2018 +0100 @@ -309,17 +309,44 @@ obj.grid = g; obj.dim = dim; - % Used for adjoint optimization - obj.B = cell(1,dim); + % B, used for adjoint optimization + B = cell(dim, 1); for i = 1:dim - obj.B{i} = zeros(m(i),m(i),m(i)); - for k = 1:m(i) - c = sparse(m(i),1); - c(k) = 1; - [~, obj.B{i}(:,:,k)] = ops{i}.D2(c); + B{i} = cell(m_tot, 1); + end + + for i = 1:dim + for j = 1:m_tot + B{i}{j} = sparse(m_tot, m_tot); end end + ind = grid.funcToMatrix(g, 1:m_tot); + + % Direction 1 + for k = 1:m(1) + c = sparse(m(1),1); + c(k) = 1; + [~, B_1D] = ops{1}.D2(c); + for l = 1:m(2) + p = ind(:,l); + B{1}{(k-1)*m(2) + l}(p, p) = B_1D; + end + end + + % Direction 2 + for k = 1:m(2) + c = sparse(m(2),1); + c(k) = 1; + [~, B_1D] = ops{2}.D2(c); + for l = 1:m(1) + p = ind(l,:); + B{2}{(l-1)*m(2) + k}(p, p) = B_1D; + end + end + + obj.B = B; + end