changeset 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 99c2ef883dc6
children 4a85cff53107
files +scheme/Elastic2dVariable.m
diffstat 1 files changed, 34 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
diff -r 99c2ef883dc6 -r db3411264b96 +scheme/Elastic2dVariable.m
--- 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