Mercurial > repos > public > sbplib
diff +scheme/Elastic2dCurvilinear.m @ 740:f4e2a6a2df08 feature/poroelastic
Make computation of metric derivatives work for periodic.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Mon, 07 May 2018 15:55:35 -0700 |
parents | 8efc04e97da4 |
children | 08f3ffe63f48 |
line wrap: on
line diff
--- a/+scheme/Elastic2dCurvilinear.m Mon May 07 14:35:54 2018 -0700 +++ b/+scheme/Elastic2dCurvilinear.m Mon May 07 15:55:35 2018 -0700 @@ -138,10 +138,18 @@ x = coords(:,1); y = coords(:,2); - x_xi = obj.D1{1}*x; - x_eta = obj.D1{2}*x; - y_xi = obj.D1{1}*y; - y_eta = obj.D1{2}*y; + % Use non-periodic difference operators for metric even if opSet is periodic. + xmax = max(ops{1}.x); + ymax = max(ops{2}.x); + opSetMetric{1} = sbp.D2Variable(m(1), {0, xmax}, order); + opSetMetric{2} = sbp.D2Variable(m(2), {0, ymax}, order); + D1Metric{1} = kron(opSetMetric{1}.D1, I{2}); + D1Metric{2} = kron(I{1}, opSetMetric{2}.D1); + + x_xi = D1Metric{1}*x; + x_eta = D1Metric{2}*x; + y_xi = D1Metric{1}*y; + y_eta = D1Metric{2}*y; J = x_xi.*y_eta - x_eta.*y_xi; @@ -156,7 +164,6 @@ beta{1} = sqrt(x_eta.^2 + y_eta.^2); beta{2} = sqrt(x_xi.^2 + y_xi.^2); - J = spdiag(J); Ji = inv(J); for i = 1:dim