changeset 1338:da61892884a4 feature/D2_boundary_opt

Add support for using periodic grids.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 13 May 2022 13:29:05 +0200
parents bf2554f1825d
children bcdb14b05d03
files +scheme/Elastic2dCurvilinearAnisotropic.m +scheme/Elastic2dVariableAnisotropic.m
diffstat 2 files changed, 21 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/+scheme/Elastic2dCurvilinearAnisotropic.m	Fri May 13 13:28:10 2022 +0200
+++ b/+scheme/Elastic2dCurvilinearAnisotropic.m	Fri May 13 13:29:05 2022 +0200
@@ -152,11 +152,26 @@
             coords = g.points();
             x = coords(:,1);
             y = coords(:,2);
+            
+            % When computing the metric derivatives, we can't use periodic operators
+            if isequal(opSet{1},@sbp.D2VariablePeriodic)
+                ops_metric = sbp.D2Standard(m_u, {0, 1-1/m_u}, order);
+                Du_metric = kr(ops_metric.D1,I_v);
+            else
+                Du_metric = Du;
+            end
+            
+            if isequal(opSet{2},@sbp.D2VariablePeriodic)
+                ops_metric = sbp.D2Standard(m_v, {0, 1-1/m_v}, order);
+                Dv_metric = kr(I_u,ops_metric.D1);
+            else
+                Dv_metric = Dv;
+            end
 
-            x_u = Du*x;
-            x_v = Dv*x;
-            y_u = Du*y;
-            y_v = Dv*y;
+            x_u = Du_metric*x;
+            x_v = Dv_metric*x;
+            y_u = Du_metric*y;
+            y_v = Dv_metric*y;
 
             J = x_u.*y_v - x_v.*y_u;
 
@@ -168,6 +183,7 @@
             obj.K = K;
 
             % Physical derivatives
+            % TODO: Fix for periodic operators
             obj.Dx = spdiag( y_v./J)*Du + spdiag(-y_u./J)*Dv;
             obj.Dy = spdiag(-x_v./J)*Du + spdiag( x_u./J)*Dv;
 
--- a/+scheme/Elastic2dVariableAnisotropic.m	Fri May 13 13:28:10 2022 +0200
+++ b/+scheme/Elastic2dVariableAnisotropic.m	Fri May 13 13:29:05 2022 +0200
@@ -98,6 +98,7 @@
             m_tot = g.N();
             lim = g.lim;
             if isempty(lim)
+                % TODO: Work for periodic grids (last gp not included)!
                 x = g.x;
                 lim = cell(length(x),1);
                 for i = 1:length(x)