annotate +sbp/InterpOpsMC.m @ 1289:2fd2e2337b77 feature/boundary_optimized_grids

Add utility function for constructing a (possibly multidimensional) grid based on the grid points used by the boundary optimized SBP operators
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 01 Jul 2020 15:15:30 +0200
parents 27ce3f653aa7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
952
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
1 % Interpolation operators by Mattsson and Carpenter (MC), see
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
2 % Mattsson and Carpenter,
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
3 % "Stable and Accurate Interpolatino Operators for High-Order Multiblock Finite DIfference Methods",
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
4 % https://epubs.siam.org/doi/pdf/10.1137/090750068
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
5 %
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
6 % Let ^* denote the adjoint. These operators satsify
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
7 %
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
8 % Iuv2 = Iv2u^*
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
9 %
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
10 % Both Iu2v and Iv2u have p:th order accuracy, if the interior stencil is
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
11 % of order 2p.
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
12 %
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
13 % This approach leads to a reduction of the convergence rate by one order for
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
14 % PDEs with 2nd derivatives in space, as compared to conforming interfaces.
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
15 % To obtain full convergence rate, use the order-preserving (OP) operators in
27ce3f653aa7 Improve comments in InterpOpsXX
Martin Almquist <malmquist@stanford.edu>
parents: 937
diff changeset
16 % InterpOpsOP.m
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
17 classdef InterpOpsMC < sbp.InterpOps
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
18 properties
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
19
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
20 % Structs of interpolation operators, fields .good and .bad
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
21 % Here .good and .bad are the same, but this makes them fit in the
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
22 % OP (order-preserving) framework.
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
23 Iu2v
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
24 Iv2u
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
25 end
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
26
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
27 methods
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
28 % m_u, m_v -- number of grid points along the interface
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
29 % order_u, order_v -- order of accuracy in the different blocks
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
30 function obj = InterpOpsMC(m_u, m_v, order_u, order_v)
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
31
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
32 assert(order_u == order_v,...
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
33 'InterpOpsMC: Different orders of accuracy not available');
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
34
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
35 switch order_u
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
36 case 2
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
37 intOpSet = @sbp.implementations.intOpMC_orders_2to2_ratio2to1;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
38 case 4
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
39 intOpSet = @sbp.implementations.intOpMC_orders_4to4_ratio2to1;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
40 case 6
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
41 intOpSet = @sbp.implementations.intOpMC_orders_6to6_ratio2to1;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
42 case 8
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
43 intOpSet = @sbp.implementations.intOpMC_orders_8to8_ratio2to1;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
44 otherwise
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
45 error('InterpOpsMC: Order of accuracy %d not available.', order_u);
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
46 end
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
47
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
48 Iu2v = struct;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
49 Iv2u = struct;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
50
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
51 if (m_u-1)/(m_v-1) == 2
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
52 % Block u is fine, v is coarse
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
53 m_C = m_v;
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
54 [Iv2u.good, Iu2v.bad] = intOpSet(m_C);
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
55 Iv2u.bad = Iv2u.good;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
56 Iu2v.good = Iu2v.bad;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
57
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
58 elseif (m_v-1)/(m_u-1) == 2
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
59 % Block v is fine, u is coarse
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
60 m_C = m_u;
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
61 [Iu2v.good, Iv2u.bad] = intOpSet(m_C);
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
62 Iu2v.bad = Iu2v.good;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
63 Iv2u.good = Iv2u.bad;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
64 else
937
ed8c98c4d479 Use only number of grid points as arguments in InterpOpsXX, instead of coordinates.
Martin Almquist <malmquist@stanford.edu>
parents: 927
diff changeset
65 error('InterpOpsMC: Interpolation operators for grid ratio %f have not yet been constructed', (m_u-1)/(m_v-1));
927
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
66 end
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
67
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
68 obj.Iu2v = Iu2v;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
69 obj.Iv2u = Iv2u;
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
70
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
71 end
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
72
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
73 function str = string(obj)
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
74 str = [class(obj)];
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
75 end
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
76
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
77 end
4291731570bb Rename AWW OP. Make Interpolation operator classes take grid points as arguments. Remove LaplCurv.interpolationOperators. Introduce default struct in LaplCurv.interface.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
78 end