annotate +scheme/Utux2d.m @ 1037:2d7ba44340d0 feature/burgers1d

Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 18 Jan 2019 09:02:02 +0100
parents 8a9393084b30
children 433c89bf19e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
950
cab047de7f5d Rename *2D schemes to *2d
Jonatan Werpers <jonatan@werpers.com>
parents: 948
diff changeset
1 classdef Utux2d < scheme.Scheme
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
2 properties
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
3 m % Number of points in each direction, possibly a vector
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
4 h % Grid spacing
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
5 grid % Grid
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
6 order % Order accuracy for the approximation
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
7
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
8 a % Wave speed a = [a1, a2];
743
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
9 % Can either be a constant vector or a cell array of function handles.
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
10
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
11 H % Discrete norm
595
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
12 H_x, H_y % Norms in the x and y directions
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
13 Hi, Hx, Hy, Hxi, Hyi % Kroneckered norms
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
14
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
15 % Derivatives
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
16 Dx, Dy
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
17
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
18 % Boundary operators
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
19 e_w, e_e, e_s, e_n
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
20
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
21 D % Total discrete operator
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
22 end
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
23
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
24
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
25 methods
1036
8a9393084b30 Change argument order to the "correct" order, i.e providing diffOp specific parameters before the opSet.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1025
diff changeset
26 function obj = Utux2d(g ,order, a, fluxSplitting, opSet)
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
27
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
28 default_arg('a',1/sqrt(2)*[1, 1]);
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
29 default_arg('opSet',@sbp.D2Standard);
1021
cc61dde120cd Add upwind dissipation to the operator inside Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1019
diff changeset
30 default_arg('fluxSplitting',[]);
743
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
31
948
3dd7f87c9a1b Use assertType(...) instead of assert(isa(...))
Jonatan Werpers <jonatan@werpers.com>
parents: 942
diff changeset
32 assertType(g, 'grid.Cartesian');
743
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
33 if iscell(a)
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
34 a1 = grid.evalOn(g, a{1});
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
35 a2 = grid.evalOn(g, a{2});
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
36 a = {spdiag(a1), spdiag(a2)};
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
37 else
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
38 a = {a(1), a(2)};
f4595f14d696 Change schemes to work for special coefficients.
Martin Almquist <malmquist@stanford.edu>
parents: 666
diff changeset
39 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
40
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
41 m = g.size();
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
42 m_x = m(1);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
43 m_y = m(2);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
44 m_tot = g.N();
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
45
595
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
46 xlim = {g.x{1}(1), g.x{1}(end)};
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
47 ylim = {g.x{2}(1), g.x{2}(end)};
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
48 obj.grid = g;
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
49
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
50 % Operator sets
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
51 ops_x = opSet(m_x, xlim, order);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
52 ops_y = opSet(m_y, ylim, order);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
53 Ix = speye(m_x);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
54 Iy = speye(m_y);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
55
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
56 % Norms
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
57 Hx = ops_x.H;
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
58 Hy = ops_y.H;
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
59 Hxi = ops_x.HI;
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
60 Hyi = ops_y.HI;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
61
595
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
62 obj.H_x = Hx;
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
63 obj.H_y = Hy;
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
64 obj.H = kron(Hx,Hy);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
65 obj.Hi = kron(Hxi,Hyi);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
66 obj.Hx = kron(Hx,Iy);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
67 obj.Hy = kron(Ix,Hy);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
68 obj.Hxi = kron(Hxi,Iy);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
69 obj.Hyi = kron(Ix,Hyi);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
70
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
71 % Derivatives
1019
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
72 if (isequal(opSet,@sbp.D1Upwind))
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
73 Dx = (ops_x.Dp + ops_x.Dm)/2;
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
74 Dy = (ops_y.Dp + ops_y.Dm)/2;
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
75 obj.Dx = kron(Dx,Iy);
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
76 obj.Dy = kron(Ix,Dy);
1019
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
77 DissOpx = (ops_x.Dm - ops_x.Dp)/2;
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
78 DissOpy = (ops_y.Dm - ops_y.Dp)/2;
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
79 DissOpx = kron(DissOpx,Iy);
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
80 DissOpy = kron(Ix,DissOpy);
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
81
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
82 obj.D = -(a{1}*obj.Dx + a{2}*obj.Dy + fluxSplitting{1}*DissOpx + fluxSplitting{2}*DissOpy);
1019
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
83 else
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
84 Dx = ops_x.D1;
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
85 Dy = ops_y.D1;
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
86 obj.Dx = kron(Dx,Iy);
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
87 obj.Dy = kron(Ix,Dy);
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
88
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
89 obj.D = -(a{1}*obj.Dx + a{2}*obj.Dy);
1019
f029b97dbc72 Support upwind opSet in Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 950
diff changeset
90 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
91
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
92 % Boundary operators
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
93 obj.e_w = kr(ops_x.e_l, Iy);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
94 obj.e_e = kr(ops_x.e_r, Iy);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
95 obj.e_s = kr(Ix, ops_y.e_l);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
96 obj.e_n = kr(Ix, ops_y.e_r);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
97
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
98 obj.m = m;
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
99 obj.h = [ops_x.h ops_y.h];
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
100 obj.order = order;
595
2a2f34778ded Make Utux2D work
Martin Almquist <malmquist@stanford.edu>
parents: 591
diff changeset
101 obj.a = a;
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
102 end
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
103 % Closure functions return the opertors applied to the own domain to close the boundary
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
104 % Penalty functions return the opertors to force the solution. In the case of an interface it returns the operator applied to the other doamin.
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
105 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
1022
234c1c02ea39 Add dirichlet bc for north and south boundary and handle cases where the wave speed changes in sign.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1021
diff changeset
106 % type is a string specifying the type of boundary condition if there are several. %TBD Remove type here? Only dirichlet applicable?
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
107 % data is a function returning the data that should be applied at the boundary.
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
108 % neighbour_scheme is an instance of Scheme that should be interfaced to.
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
109 % neighbour_boundary is a string specifying which boundary to interface to.
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
110 function [closure, penalty] = boundary_condition(obj,boundary,type)
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
111 default_arg('type','dirichlet');
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
112 sigma_left = -1; % Scalar penalty parameter for left boundaries (West/South)
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
113 sigma_right = 1; % Scalar penalty parameter for right boundaries (East/North)
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
114 switch boundary
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
115 % Can only specify boundary condition where there is inflow
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
116 % Extract the postivie resp. negative part of a, for the left
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
117 % resp. right boundaries, and set other values of a to zero.
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
118 % Then the closure will effectively only contribute to inflow boundaries
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
119 case {'w','W','west','West'}
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
120 a_inflow = obj.a{1};
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
121 a_inflow(a_inflow < 0) = 0;
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
122 tau = sigma_left*a_inflow*obj.e_w*obj.H_y;
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
123 closure = obj.Hi*tau*obj.e_w';
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
124 case {'e','E','east','East'}
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
125 a_inflow = obj.a{1};
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
126 a_inflow(a_inflow > 0) = 0;
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
127 tau = sigma_right*a_inflow*obj.e_e*obj.H_y;
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
128 closure = obj.Hi*tau*obj.e_e';
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
129 case {'s','S','south','South'}
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
130 a_inflow = obj.a{2};
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
131 a_inflow(a_inflow < 0) = 0;
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
132 tau = sigma_left*a_inflow*obj.e_s*obj.H_x;
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
133 closure = obj.Hi*tau*obj.e_s';
1022
234c1c02ea39 Add dirichlet bc for north and south boundary and handle cases where the wave speed changes in sign.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1021
diff changeset
134 case {'n','N','north','North'}
1025
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
135 a_inflow = obj.a{2};
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
136 a_inflow(a_inflow > 0) = 0;
ac80bedc8df7 Clean up of Utux2d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1022
diff changeset
137 tau = sigma_right*a_inflow*obj.e_n*obj.H_x;
1022
234c1c02ea39 Add dirichlet bc for north and south boundary and handle cases where the wave speed changes in sign.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1021
diff changeset
138 closure = obj.Hi*tau*obj.e_n';
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
139 end
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
140 penalty = -obj.Hi*tau;
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
141 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
142
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
143 % type Struct that specifies the interface coupling.
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
144 % Fields:
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
145 % -- couplingType String, type of interface coupling
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
146 % % Default: 'upwind'. Other: 'centered'
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
147 % -- interpolation: type of interpolation, default 'none'
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
148 % -- interpolationDamping: damping on upstream and downstream sides, when using interpolation.
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
149 % Default {0,0} gives zero damping.
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
150 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary,type)
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
151
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
152 defaultType.couplingType = 'upwind';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
153 defaultType.interpolation = 'none';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
154 defaultType.interpolationDamping = {0,0};
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
155 default_struct('type', defaultType);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
156
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
157 switch type.interpolation
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
158 case {'none', ''}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
159 [closure, penalty] = interfaceStandard(obj,boundary,neighbour_scheme,neighbour_boundary,type);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
160 case {'op','OP'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
161 [closure, penalty] = interfaceNonConforming(obj,boundary,neighbour_scheme,neighbour_boundary,type);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
162 otherwise
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
163 error('Unknown type of interpolation: %s ', type.interpolation);
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
164 end
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
165 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
166
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
167 function [closure, penalty] = interfaceStandard(obj,boundary,neighbour_scheme,neighbour_boundary,type)
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
168 couplingType = type.couplingType;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
169
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
170 % Get neighbour boundary operator
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
171 switch neighbour_boundary
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
172 case {'e','E','east','East'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
173 e_neighbour = neighbour_scheme.e_e;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
174 case {'w','W','west','West'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
175 e_neighbour = neighbour_scheme.e_w;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
176 case {'n','N','north','North'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
177 e_neighbour = neighbour_scheme.e_n;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
178 case {'s','S','south','South'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
179 e_neighbour = neighbour_scheme.e_s;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
180 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
181
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
182 switch couplingType
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
183
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
184 % Upwind coupling (energy dissipation)
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
185 case 'upwind'
605
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
186 sigma_ds = -1; %"Downstream" penalty
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
187 sigma_us = 0; %"Upstream" penalty
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
188
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
189 % Energy-preserving coupling (no energy dissipation)
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
190 case 'centered'
605
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
191 sigma_ds = -1/2; %"Downstream" penalty
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
192 sigma_us = 1/2; %"Upstream" penalty
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
193
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
194 otherwise
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
195 error(['Interface coupling type ' couplingType ' is not available.'])
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
196 end
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
197
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
198 switch boundary
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
199 case {'w','W','west','West'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
200 tau = sigma_ds*obj.a{1}*obj.e_w*obj.H_y;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
201 closure = obj.Hi*tau*obj.e_w';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
202 penalty = -obj.Hi*tau*e_neighbour';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
203 case {'e','E','east','East'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
204 tau = sigma_us*obj.a{1}*obj.e_e*obj.H_y;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
205 closure = obj.Hi*tau*obj.e_e';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
206 penalty = -obj.Hi*tau*e_neighbour';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
207 case {'s','S','south','South'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
208 tau = sigma_ds*obj.a{2}*obj.e_s*obj.H_x;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
209 closure = obj.Hi*tau*obj.e_s';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
210 penalty = -obj.Hi*tau*e_neighbour';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
211 case {'n','N','north','North'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
212 tau = sigma_us*obj.a{2}*obj.e_n*obj.H_x;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
213 closure = obj.Hi*tau*obj.e_n';
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
214 penalty = -obj.Hi*tau*e_neighbour';
605
0f9d20dbb7ce Add centered interface coupling in addition to upwind
Martin Almquist <malmquist@stanford.edu>
parents: 595
diff changeset
215 end
610
b7b3c11fab4d Add interpolation to scheme
Martin Almquist <malmquist@stanford.edu>
parents: 605
diff changeset
216
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
217 end
610
b7b3c11fab4d Add interpolation to scheme
Martin Almquist <malmquist@stanford.edu>
parents: 605
diff changeset
218
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
219 function [closure, penalty] = interfaceNonConforming(obj,boundary,neighbour_scheme,neighbour_boundary,type)
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
220
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
221 % User can request special interpolation operators by specifying type.interpOpSet
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
222 default_field(type, 'interpOpSet', @sbp.InterpOpsOP);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
223
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
224 interpOpSet = type.interpOpSet;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
225 couplingType = type.couplingType;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
226 interpolationDamping = type.interpolationDamping;
610
b7b3c11fab4d Add interpolation to scheme
Martin Almquist <malmquist@stanford.edu>
parents: 605
diff changeset
227
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
228 % Get neighbour boundary operator
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
229 switch neighbour_boundary
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
230 case {'e','E','east','East'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
231 e_neighbour = neighbour_scheme.e_e;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
232 case {'w','W','west','West'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
233 e_neighbour = neighbour_scheme.e_w;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
234 case {'n','N','north','North'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
235 e_neighbour = neighbour_scheme.e_n;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
236 case {'s','S','south','South'}
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
237 e_neighbour = neighbour_scheme.e_s;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
238 end
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
239
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
240 switch couplingType
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
241
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
242 % Upwind coupling (energy dissipation)
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
243 case 'upwind'
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
244 sigma_ds = -1; %"Downstream" penalty
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
245 sigma_us = 0; %"Upstream" penalty
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
246
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
247 % Energy-preserving coupling (no energy dissipation)
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
248 case 'centered'
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
249 sigma_ds = -1/2; %"Downstream" penalty
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
250 sigma_us = 1/2; %"Upstream" penalty
666
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
251
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
252 otherwise
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
253 error(['Interface coupling type ' couplingType ' is not available.'])
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
254 end
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
255
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
256 int_damp_us = interpolationDamping{1};
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
257 int_damp_ds = interpolationDamping{2};
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
258
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
259 % u denotes the solution in the own domain
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
260 % v denotes the solution in the neighbour domain
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
261 % Find the number of grid points along the interface
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
262 switch boundary
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
263 case {'w','e'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
264 m_u = obj.m(2);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
265 case {'s','n'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
266 m_u = obj.m(1);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
267 end
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
268 m_v = size(e_neighbour, 2);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
269
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
270 % Build interpolation operators
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
271 intOps = interpOpSet(m_u, m_v, obj.order, neighbour_scheme.order);
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
272 Iu2v = intOps.Iu2v;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
273 Iv2u = intOps.Iv2u;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
274
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
275 I_local2neighbour_ds = intOps.Iu2v.bad;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
276 I_local2neighbour_us = intOps.Iu2v.good;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
277 I_neighbour2local_ds = intOps.Iv2u.good;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
278 I_neighbour2local_us = intOps.Iv2u.bad;
914
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
279
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
280 I_back_forth_us = I_neighbour2local_us*I_local2neighbour_us;
50cafc4b9e40 Make default_field overwrite if field exists but is empty. Refactor interface method in Utux2d.
Martin Almquist <malmquist@stanford.edu>
parents: 910
diff changeset
281 I_back_forth_ds = I_neighbour2local_ds*I_local2neighbour_ds;
666
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
282
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
283
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
284 switch boundary
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
285 case {'w','W','west','West'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
286 tau = sigma_ds*obj.a{1}*obj.e_w*obj.H_y;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
287 closure = obj.Hi*tau*obj.e_w';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
288 penalty = -obj.Hi*tau*I_neighbour2local_ds*e_neighbour';
666
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
289
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
290 beta = int_damp_ds*obj.a{1}...
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
291 *obj.e_w*obj.H_y;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
292 closure = closure + obj.Hi*beta*I_back_forth_ds*obj.e_w' - obj.Hi*beta*obj.e_w';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
293 case {'e','E','east','East'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
294 tau = sigma_us*obj.a{1}*obj.e_e*obj.H_y;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
295 closure = obj.Hi*tau*obj.e_e';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
296 penalty = -obj.Hi*tau*I_neighbour2local_us*e_neighbour';
666
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
297
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
298 beta = int_damp_us*obj.a{1}...
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
299 *obj.e_e*obj.H_y;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
300 closure = closure + obj.Hi*beta*I_back_forth_us*obj.e_e' - obj.Hi*beta*obj.e_e';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
301 case {'s','S','south','South'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
302 tau = sigma_ds*obj.a{2}*obj.e_s*obj.H_x;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
303 closure = obj.Hi*tau*obj.e_s';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
304 penalty = -obj.Hi*tau*I_neighbour2local_ds*e_neighbour';
666
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
305
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
306 beta = int_damp_ds*obj.a{2}...
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
307 *obj.e_s*obj.H_x;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
308 closure = closure + obj.Hi*beta*I_back_forth_ds*obj.e_s' - obj.Hi*beta*obj.e_s';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
309 case {'n','N','north','North'}
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
310 tau = sigma_us*obj.a{2}*obj.e_n*obj.H_x;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
311 closure = obj.Hi*tau*obj.e_n';
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
312 penalty = -obj.Hi*tau*I_neighbour2local_us*e_neighbour';
666
2d85f17a8aec Add possibility for damping terms at interpolation interface.
Martin Almquist <malmquist@stanford.edu>
parents: 610
diff changeset
313
942
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
314 beta = int_damp_us*obj.a{2}...
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
315 *obj.e_n*obj.H_x;
35701c85e356 Make Utux2D work with new interface type etc.
Martin Almquist <malmquist@stanford.edu>
parents: 914
diff changeset
316 closure = closure + obj.Hi*beta*I_back_forth_us*obj.e_n' - obj.Hi*beta*obj.e_n';
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
317 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
318
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
319
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
320 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 743
diff changeset
321
591
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
322 function N = size(obj)
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
323 N = obj.m;
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
324 end
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
325
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
326 end
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
327
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
328 methods(Static)
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
329 % Calculates the matrices needed for the inteface coupling between boundary bound_u of scheme schm_u
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
330 % and bound_v of scheme schm_v.
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
331 % [uu, uv, vv, vu] = inteface_coupling(A,'r',B,'l')
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
332 function [uu, uv, vv, vu] = interface_coupling(schm_u,bound_u,schm_v,bound_v)
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
333 [uu,uv] = schm_u.interface(bound_u,schm_v,bound_v);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
334 [vv,vu] = schm_v.interface(bound_v,schm_u,bound_u);
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
335 end
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
336 end
39554f2de783 Add Utux2D scheme
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
337 end