Mercurial > repos > public > sbplib
diff +scheme/Elastic2dCurvilinearAnisotropic.m @ 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 | df8c71b80c33 |
children |
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;