Mercurial > repos > public > sbplib
comparison +rv/+diffops/constructDiffOps.m @ 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 | 881afc40a3d2 |
children |
comparison
equal
deleted
inserted
replaced
1197:433c89bf19e0 | 1224:5271c4670733 |
---|---|
92 lim = g.lim(); | 92 lim = g.lim(); |
93 m_c = (m-1)/2 + 1; | 93 m_c = (m-1)/2 + 1; |
94 switch g.D() | 94 switch g.D() |
95 case 1 | 95 case 1 |
96 interpOps = sbp.InterpOpsOP(m_c, m, schemeOrder, schemeOrder); | 96 interpOps = sbp.InterpOpsOP(m_c, m, schemeOrder, schemeOrder); |
97 I = interpOps.Iu2v.good; | 97 IC2F = interpOps.Iu2v.good; |
98 IF2C = interpOps.Iv2u.good; | |
98 g_c = grid.equidistant(m_c, lim{1}); | 99 g_c = grid.equidistant(m_c, lim{1}); |
99 D_c = rv.diffops.constructFluxDiffOps(scheme, g_c, schemeOrder, schemeParams, opSet, BCs); | 100 D_c = rv.diffops.constructFluxDiffOps(scheme, g_c, schemeOrder, schemeParams, opSet, BCs); |
100 D_c = @(v) I*D_c(v(1:2:end)); | 101 D_c = @(v) IC2F*D_c(IF2C*v); |
101 case 2 | 102 case 2 |
102 interpOps_x = sbp.InterpOpsOP(m_c(1), m(1), schemeOrder, schemeOrder); | 103 interpOps_x = sbp.InterpOpsOP(m_c(1), m(1), schemeOrder, schemeOrder); |
103 I_x = interpOps_x.Iu2v.good; | 104 I_xC2F = interpOps_x.Iu2v.good; |
105 I_xF2C = interpOps_x.Iv2u.good; | |
104 interpOps_y = sbp.InterpOpsOP(m_c(2), m(2), schemeOrder, schemeOrder); | 106 interpOps_y = sbp.InterpOpsOP(m_c(2), m(2), schemeOrder, schemeOrder); |
105 I_y = interpOps_y.Iu2v.good; | 107 I_yC2F = interpOps_y.Iu2v.good; |
106 I = kron(I_x,I_y); | 108 I_yF2C = interpOps_y.Iv2u.good; |
109 IC2F = kron(I_xC2F,I_yC2F); | |
110 IF2C = kron(I_xF2C,I_yF2C); | |
107 g_c = grid.equidistant(m_c, lim{1}, lim{2}); | 111 g_c = grid.equidistant(m_c, lim{1}, lim{2}); |
108 ind = grid.funcToMatrix(g, 1:g.N()); | 112 ind = grid.funcToMatrix(g, 1:g.N()); |
109 ind_c = reshape(ind(1:2:end,1:2:end)',g_c.N(),1); | 113 ind_c = reshape(ind(1:2:end,1:2:end)',g_c.N(),1); |
110 D_c = rv.diffops.constructFluxDiffOps(scheme, g_c, schemeOrder, schemeParams, opSet, BCs); | 114 D_c = rv.diffops.constructFluxDiffOps(scheme, g_c, schemeOrder, schemeParams, opSet, BCs); |
111 D_c = @(v) I*D_c(v(ind_c)); | 115 D_c = @(v) IC2F*D_c(IF2C*v); |
112 end | 116 end |
113 end | 117 end |
114 | 118 |
115 function D_c = coarserGridDiffOpWithClosures(scheme, g, schemeOrder, schemeParams, opSet, BCs) | 119 function D_c = coarserGridDiffOpWithClosures(scheme, g, schemeOrder, schemeParams, opSet, BCs) |
116 m = g.m(); | 120 m = g.m(); |