changeset 1253:89dad61cad22 feature/poroelastic

Make Elastic2dVariable faster and more memory efficient
author Martin Almquist <malmquist@stanford.edu>
date Tue, 04 Feb 2020 10:15:42 -0800
parents 8fc2f9a4c882
children 99f92bfc1157
files +scheme/Elastic2dVariableAnisotropic.m
diffstat 1 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
diff -r 8fc2f9a4c882 -r 89dad61cad22 +scheme/Elastic2dVariableAnisotropic.m
--- a/+scheme/Elastic2dVariableAnisotropic.m	Tue Jan 07 12:49:09 2020 -0800
+++ b/+scheme/Elastic2dVariableAnisotropic.m	Tue Feb 04 10:15:42 2020 -0800
@@ -21,7 +21,7 @@
 
         D  % Total operator
         D1 % First derivatives
-        D2 % Second derivatives
+        % D2 % Second derivatives
 
         % Boundary operators in cell format, used for BC
         T_w, T_e, T_s, T_n
@@ -147,7 +147,7 @@
             obj.RHOi_kron = kron(obj.RHOi, I_dim);
 
             obj.D1 = cell(dim,1);
-            obj.D2 = cell(dim,dim,dim);
+            D2_temp = cell(dim,dim,dim);
 
             % D1
             obj.D1{1} = kron(D1{1},I{2});
@@ -193,10 +193,18 @@
 
 
             % D2
+            switch order
+            case 2
+                width = 3;
+            case 4
+                width = 5;
+            case 6
+                width = 7;
+            end
             for j = 1:dim
                 for k = 1:dim
                     for l = 1:dim
-                        obj.D2{j,k,l} = sparse(m_tot,m_tot);
+                        D2_temp{j,k,l} = spalloc(m_tot, m_tot, width*m_tot);
                     end
                 end
             end
@@ -209,7 +217,7 @@
                     for l = 1:dim
                         coeff = C{k,j,k,l};
                         D_kk = D2{1}(coeff(p));
-                        obj.D2{j,k,l}(p,p) = D_kk;
+                        D2_temp{j,k,l}(p,p) = D_kk;
                     end
                 end
             end
@@ -221,7 +229,7 @@
                     for l = 1:dim
                         coeff = C{k,j,k,l};
                         D_kk = D2{2}(coeff(p));
-                        obj.D2{j,k,l}(p,p) = D_kk;
+                        D2_temp{j,k,l}(p,p) = D_kk;
                     end
                 end
             end
@@ -236,7 +244,7 @@
             obj.H_1D = {H{1}, H{2}};
 
             % Differentiation matrix D (without SAT)
-            D2 = obj.D2;
+            D2_temp;
             D1 = obj.D1;
             D = sparse(dim*m_tot,dim*m_tot);
             for i = 1:dim
@@ -244,7 +252,8 @@
                     for k = 1:dim
                         for l = 1:dim
                             if i == k
-                                D = D + E{j}*D2{j,k,l}*E{l}';
+                                D = D + E{j}*D2_temp{j,k,l}*E{l}';
+                                D2_temp{j,k,l} = [];
                             else
                                 D = D + E{j}*D1{i}*C_mat{i,j,k,l}*D1{k}*E{l}';
                             end
@@ -252,8 +261,10 @@
                     end
                 end
             end
+            clear D2_temp;
             D = obj.RHOi_kron*D;
             obj.D = D;
+            clear D;
             %=========================================%'
 
             % Numerical traction operators for BC.