Mercurial > repos > public > sbplib
changeset 1167:66c0fbbc406f feature/rv
Make constructDiffOps return a struct with the operators
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Fri, 28 Jun 2019 12:53:47 +0200 |
parents | 17bb3c46472c |
children | af3c4eb0cbbd |
files | +rv/+diffops/constructDiffOpsBdf.m +rv/+diffops/constructDiffOpsMultiGrid.m |
diffstat | 2 files changed, 26 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/+rv/+diffops/constructDiffOpsBdf.m Thu Jun 27 17:15:11 2019 +0200 +++ b/+rv/+diffops/constructDiffOpsBdf.m Fri Jun 28 12:53:47 2019 +0200 @@ -1,7 +1,10 @@ -function [D_scheme, D_flux, penalties_scheme] = constructDiffOpsBdf(scheme, g, schemeOrder, residualOrder, schemeParams, opSet, BCs) +function diffOpsStruct = constructDiffOpsBdf(scheme, g, schemeOrder, residualOrder, schemeParams, opSet, BCs) %% DiffOps for solution vector - [D_scheme, penalties_scheme, ~] = rv.diffops.constructSchemeDiffOp(scheme, g, schemeOrder, schemeParams, opSet, BCs) + [D_scheme, penalties_scheme, ~] = rv.diffops.constructSchemeDiffOp(scheme, g, schemeOrder, schemeParams, opSet, BCs); %% DiffOps for residual viscosity - [D_flux, ~] = rv.diffops.constructFluxDiffOp(scheme, g, order, schemeParams, opSet, BCs) + [D_flux, ~] = rv.diffops.constructFluxDiffOp(scheme, g, residualOrder, schemeParams, opSet, BCs); D_flux = @(v) -D_flux(v); + diffOpsStruct = struct('D_scheme', D_scheme,... + 'D_flux', D_flux,... + 'penalties_scheme', penalties_scheme); end \ No newline at end of file
--- a/+rv/+diffops/constructDiffOpsMultiGrid.m Thu Jun 27 17:15:11 2019 +0200 +++ b/+rv/+diffops/constructDiffOpsMultiGrid.m Fri Jun 28 12:53:47 2019 +0200 @@ -1,23 +1,29 @@ -function [D_scheme, D_coarse, D_flux, D_t, penalties_scheme, penalties_res] = constructDiffOpsMultiGrid(scheme, g, schemeOrder, residualOrder, schemeParams, opSet, BCs) - % DiffOps for solution vector - [D_scheme, penalties_scheme, ~] = rv.diffops.constructSchemeDiffOp(scheme, g, schemeOrder, schemeParams, opSet, BCs); - [D_coarse, penalties_coarse] = rv.diffops.constructFluxDiffOpWithClosures(scheme, g, schemeOrder, schemeParams, opSet, BCs); +function diffOpsStruct = constructDiffOpsMultiGrid(scheme, g, schemeOrder, residualOrder, schemeParams, opSet, BCs) + % DiffOps for stabilized solution vector + [D_scheme, penalties_scheme] = rv.diffops.constructSchemeDiffOp(scheme, g, schemeOrder, schemeParams, opSet, BCs); + % DiffOp for unstabilized solution vector + D_unstable = rv.diffops.constructFluxDiffOpWithClosures(scheme, g, schemeOrder, schemeParams, opSet, BCs); %% DiffOps for residual viscosity [D_t, penalties_res] = rv.diffops.constructFluxDiffOpWithClosures(scheme, g, residualOrder, schemeParams, opSet, BCs); D_flux = @(v) -D_t(v); - rvOperators = {} + diffOpsStruct = struct('D_scheme', D_scheme,... + 'D_unstable', D_unstable,... + 'D_flux', D_flux,... + 'D_t', D_t,... + 'penalties_scheme', penalties_scheme,... + 'penalties_res', penalties_res); end % TODO: Not clear if this is needed % TODO: Only works for equidistant grids function [D_coarse, penalties_coarse] = constructCoarserGridDiffOp(scheme, g, schemeOrder, schemeParams, opSet, BCs) - m = g.m(); - lim = g.lim(); - m_coarse = (m-1)/2 + 1; - g_coarse = grid.equidistant(m_coarse, lim{1}); - [D_coarse, penalties_coarse] = rv.diffops.constructFluxDiffOpWithClosures(scheme, g_coarse, schemeOrder, schemeParams, opSet, BCs); - x = g.x{1}; - x_coarse = x(1:2:end); - % TODO: Fix interpolation - D_coarse = @(v) interp1(x_coarse,D_coarse(v(1:2:end)),x,'spline'); + m = g.m(); + lim = g.lim(); + m_coarse = (m-1)/2 + 1; + g_coarse = grid.equidistant(m_coarse, lim{1}); + [D_coarse, penalties_coarse] = rv.diffops.constructFluxDiffOpWithClosures(scheme, g_coarse, schemeOrder, schemeParams, opSet, BCs); + x = g.x{1}; + x_coarse = x(1:2:end); + % TODO: Fix interpolation + D_coarse = @(v) interp1(x_coarse,D_coarse(v(1:2:end)),x,'spline'); end \ No newline at end of file