Mercurial > repos > public > sbplib
annotate +sbp/InterpOpsMC.m @ 1031:2ef20d00b386 feature/advectionRV
For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 17 Jan 2019 10:25:06 +0100 |
parents | 27ce3f653aa7 |
children |
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 |