Mercurial > repos > public > sbplib
changeset 1224:5271c4670733 feature/rv
Use fine-to-coarse interpolation operators in coarse grid flux discretization
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Wed, 06 Nov 2019 14:51:33 +0100 |
parents | 433c89bf19e0 |
children | 68ee061639a1 |
files | +rv/+diffops/constructDiffOps.m |
diffstat | 1 files changed, 10 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
diff -r 433c89bf19e0 -r 5271c4670733 +rv/+diffops/constructDiffOps.m --- a/+rv/+diffops/constructDiffOps.m Wed Aug 07 15:23:42 2019 +0200 +++ b/+rv/+diffops/constructDiffOps.m Wed Nov 06 14:51:33 2019 +0100 @@ -94,21 +94,25 @@ switch g.D() case 1 interpOps = sbp.InterpOpsOP(m_c, m, schemeOrder, schemeOrder); - I = interpOps.Iu2v.good; + IC2F = interpOps.Iu2v.good; + IF2C = interpOps.Iv2u.good; g_c = grid.equidistant(m_c, lim{1}); D_c = rv.diffops.constructFluxDiffOps(scheme, g_c, schemeOrder, schemeParams, opSet, BCs); - D_c = @(v) I*D_c(v(1:2:end)); + D_c = @(v) IC2F*D_c(IF2C*v); case 2 interpOps_x = sbp.InterpOpsOP(m_c(1), m(1), schemeOrder, schemeOrder); - I_x = interpOps_x.Iu2v.good; + I_xC2F = interpOps_x.Iu2v.good; + I_xF2C = interpOps_x.Iv2u.good; interpOps_y = sbp.InterpOpsOP(m_c(2), m(2), schemeOrder, schemeOrder); - I_y = interpOps_y.Iu2v.good; - I = kron(I_x,I_y); + I_yC2F = interpOps_y.Iu2v.good; + I_yF2C = interpOps_y.Iv2u.good; + IC2F = kron(I_xC2F,I_yC2F); + IF2C = kron(I_xF2C,I_yF2C); g_c = grid.equidistant(m_c, lim{1}, lim{2}); ind = grid.funcToMatrix(g, 1:g.N()); ind_c = reshape(ind(1:2:end,1:2:end)',g_c.N(),1); D_c = rv.diffops.constructFluxDiffOps(scheme, g_c, schemeOrder, schemeParams, opSet, BCs); - D_c = @(v) I*D_c(v(ind_c)); + D_c = @(v) IC2F*D_c(IF2C*v); end end