Mercurial > repos > public > sbplib
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 |
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 | 2 properties |
3 m % Number of points in each direction, possibly a vector | |
4 h % Grid spacing | |
5 grid % Grid | |
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 | 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 | 10 |
11 H % Discrete norm | |
595 | 12 H_x, H_y % Norms in the x and y directions |
13 Hi, Hx, Hy, Hxi, Hyi % Kroneckered norms | |
591 | 14 |
15 % Derivatives | |
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 | 18 % Boundary operators |
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 | 21 D % Total discrete operator |
22 end | |
23 | |
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 | 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 | 41 m = g.size(); |
42 m_x = m(1); | |
43 m_y = m(2); | |
44 m_tot = g.N(); | |
45 | |
595 | 46 xlim = {g.x{1}(1), g.x{1}(end)}; |
47 ylim = {g.x{2}(1), g.x{2}(end)}; | |
591 | 48 obj.grid = g; |
49 | |
50 % Operator sets | |
51 ops_x = opSet(m_x, xlim, order); | |
52 ops_y = opSet(m_y, ylim, order); | |
53 Ix = speye(m_x); | |
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 | 56 % Norms |
57 Hx = ops_x.H; | |
58 Hy = ops_y.H; | |
59 Hxi = ops_x.HI; | |
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 | 62 obj.H_x = Hx; |
63 obj.H_y = Hy; | |
591 | 64 obj.H = kron(Hx,Hy); |
65 obj.Hi = kron(Hxi,Hyi); | |
66 obj.Hx = kron(Hx,Iy); | |
67 obj.Hy = kron(Ix,Hy); | |
68 obj.Hxi = kron(Hxi,Iy); | |
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 | 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 | 92 % Boundary operators |
93 obj.e_w = kr(ops_x.e_l, Iy); | |
94 obj.e_e = kr(ops_x.e_r, Iy); | |
95 obj.e_s = kr(Ix, ops_y.e_l); | |
96 obj.e_n = kr(Ix, ops_y.e_r); | |
97 | |
98 obj.m = m; | |
99 obj.h = [ops_x.h ops_y.h]; | |
100 obj.order = order; | |
595 | 101 obj.a = a; |
591 | 102 end |
103 % Closure functions return the opertors applied to the own domain to close the boundary | |
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. | |
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 | 107 % data is a function returning the data that should be applied at the boundary. |
108 % neighbour_scheme is an instance of Scheme that should be interfaced to. | |
109 % neighbour_boundary is a string specifying which boundary to interface to. | |
110 function [closure, penalty] = boundary_condition(obj,boundary,type) | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 322 function N = size(obj) |
323 N = obj.m; | |
324 end | |
325 | |
326 end | |
327 | |
328 methods(Static) | |
329 % Calculates the matrices needed for the inteface coupling between boundary bound_u of scheme schm_u | |
330 % and bound_v of scheme schm_v. | |
331 % [uu, uv, vv, vu] = inteface_coupling(A,'r',B,'l') | |
332 function [uu, uv, vv, vu] = interface_coupling(schm_u,bound_u,schm_v,bound_v) | |
333 [uu,uv] = schm_u.interface(bound_u,schm_v,bound_v); | |
334 [vv,vu] = schm_v.interface(bound_v,schm_u,bound_u); | |
335 end | |
336 end | |
337 end |