Mercurial > repos > public > sbplib
annotate +scheme/Euler1d.m @ 61:183d9349b4c1
Refactored euler1d to have real methods.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sat, 14 Nov 2015 19:26:30 -0800 |
parents | e707cd9e6d0a |
children | 00344139cd7d |
rev | line source |
---|---|
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
1 classdef Euler1d < scheme.Scheme |
0 | 2 properties |
3 m % Number of points in each direction, possibly a vector | |
4 N % Number of points total | |
5 h % Grid spacing | |
6 u % Grid values | |
7 x % Values of x and y for each | |
8 order % Order accuracy for the approximation | |
9 | |
10 D % non-stabalized scheme operator | |
11 M % Derivative norm | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
12 gamma |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
13 |
0 | 14 H % Discrete norm |
15 Hi | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
16 e_l, e_r, e_L, e_R; |
0 | 17 |
18 end | |
19 | |
20 methods | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
21 function obj = Euler1d(m,xlim,order,gama,opsGen,do_upwind) |
0 | 22 default_arg('opsGen',@sbp.Ordinary); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
23 default_arg('gama', 1.4); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
24 default_arg('do_upwind', false); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
25 gamma = gama; |
0 | 26 |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
27 [x, h] = util.get_grid(xlim{:},m); |
0 | 28 |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
29 if do_upwind |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
30 ops = sbp.Upwind(m,h,order); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
31 Dp = ops.derivatives.Dp; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
32 Dm = ops.derivatives.Dm; |
0 | 33 |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
34 D1 = (Dp + Dm)/2; |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
35 Ddisp = (Dp - Dm)/2; |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
36 else |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
37 ops = opsGen(m,h,order); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
38 D1 = sparse(ops.derivatives.D1); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
39 end |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
40 |
0 | 41 H = sparse(ops.norms.H); |
42 Hi = sparse(ops.norms.HI); | |
43 e_l = sparse(ops.boundary.e_1); | |
44 e_r = sparse(ops.boundary.e_m); | |
45 | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
46 I_x = speye(m); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
47 I_3 = speye(3); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
48 |
0 | 49 D1 = kr(D1, I_3); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
50 if do_upwind |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
51 Ddisp = kr(Ddisp,I_3); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
52 end |
0 | 53 |
54 % Norms | |
55 obj.H = kr(H,I_3); | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
56 obj.Hi = kr(Hi,I_3); |
0 | 57 |
58 % Boundary operators | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
59 obj.e_l = e_l; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
60 obj.e_r = e_r; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
61 obj.e_L = kr(e_l,I_3); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
62 obj.e_R = kr(e_r,I_3); |
0 | 63 |
64 obj.m = m; | |
65 obj.h = h; | |
66 obj.order = order; | |
67 | |
68 % Man har Q_t+F_x=0 i 1D Euler, där | |
69 % q=[rho, rho*u, e]^T | |
70 % F=[rho*u, rho*u^2+p, (e+p)*u] ^T | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
71 % p=(gamma-1)*(e-rho*u^2/2); |
0 | 72 |
61
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
73 |
0 | 74 %Solving on form q_t + F_x = 0 |
75 | |
76 function o = Fx(q) | |
50
75ebf5d3cfe5
Performance improvement for Euler1d
Jonatan Werpers <jonatan@werpers.com>
parents:
49
diff
changeset
|
77 Q = reshape(q,3,m); |
61
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
78 o = reshape(obj.F(Q),3*m,1); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
79 o = D1*o; |
0 | 80 end |
81 | |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
82 function o = Fx_disp(q) |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
83 Q = reshape(q,3,m); |
61
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
84 f = reshape(obj.F(Q),3*m,1); |
0 | 85 |
61
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
86 c = obj.c(Q); |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
87 lambda_max = c+abs(Q(2,:)./Q(1,:)); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
88 % lambda_max = max(lambda_max); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
89 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
90 lamb_Q(1,:) = lambda_max.*Q(1,:); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
91 lamb_Q(2,:) = lambda_max.*Q(2,:); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
92 lamb_Q(3,:) = lambda_max.*Q(3,:); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
93 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
94 lamb_q = reshape(lamb_Q,3*m, 1); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
95 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
96 o = -D1*f + Ddisp*lamb_q; |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
97 end |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
98 |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
99 if do_upwind |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
100 obj.D = @Fx_disp; |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
101 else |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
102 obj.D = @(q)-Fx(q); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
103 end |
0 | 104 |
105 obj.u = x; | |
106 obj.x = kr(x,ones(3,1)); | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
107 obj.gamma = gamma; |
0 | 108 end |
109 | |
61
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
110 % Flux function |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
111 function o = F(obj, Q) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
112 % Flux: f = [q2; q2.^2/q1 + p(q); (q3+p(q))*q2/q1]; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
113 p = obj.p(Q); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
114 o = [Q(2,:); Q(2,:).^2./Q(1,:) + p; (Q(3,:)+p).*Q(2,:)./Q(1,:)]; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
115 end |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
116 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
117 % Equation of state |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
118 function o = p(obj, Q) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
119 % Pressure p = (gamma-1)*(q3-q2.^2/q1/2) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
120 o = (obj.gamma-1)*( Q(3,:)-1/2*Q(2,:).^2./Q(1,:) ); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
121 end |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
122 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
123 % Speed of sound |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
124 function o = c(obj, Q) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
125 % Speed of light c = sqrt(obj.gamma*p/rho); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
126 o = sqrt(obj.gamma*obj.p(Q)./Q(1,:)); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
127 end |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
128 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
129 % Eigen value matrix |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
130 function o = Lambda(q) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
131 u = q(2)/q(1); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
132 c = obj.c(q); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
133 L = [u, u+c, u-c]; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
134 o = diag(L); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
135 end |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
136 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
137 % Diagonalization transformation |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
138 function o = T(obj, q) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
139 % T is the transformation such that A = T*Lambda*inv(T) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
140 % where Lambda=diag(u, u+c, u-c) |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
141 rho = q(1); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
142 u = q(2)/q(1); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
143 e = q(3); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
144 gamma = obj.gamma; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
145 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
146 c = sqrt(gamma*obj.p(q)/rho); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
147 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
148 sqrt2gamm = sqrt(2*(gamma-1)); |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
149 |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
150 o = [ |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
151 sqrt2gamm*rho , rho , rho ; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
152 sqrt2gamm*rho*u , rho*(u+c) , rho*(u-c) ; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
153 sqrt2gamm*rho*u^2/2, e+(gamma-1)*(e-rho*u^2/2)+rho*u*c , e+(gamma-1)*(e-rho*u^2/2)-rho*u*c ; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
154 ]; |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
155 % Devide columns by stuff to get rid of extra comp? |
183d9349b4c1
Refactored euler1d to have real methods.
Jonatan Werpers <jonatan@werpers.com>
parents:
60
diff
changeset
|
156 end |
0 | 157 |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
158 % Enforces the boundary conditions |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
159 % w+ = R*w- + g(t) |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
160 function closure = boundary_condition(obj,boundary, type, varargin) |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
161 [e_s,e_S,s] = obj.get_boundary_ops(boundary); |
0 | 162 |
163 % Boundary condition on form | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
164 % w_in = R*w_out + g, where g is data |
0 | 165 |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
166 switch type |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
167 case 'wall' |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
168 closure = obj.boundary_condition_wall(boundary); |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
169 case 'inflow' |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
170 closure = obj.boundary_condition_inflow(boundary,varargin{:}); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
171 case 'outflow' |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
172 closure = obj.boundary_condition_outflow(boundary,varargin{:}); |
57
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
173 case 'char' |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
174 closure = obj.boundary_condition_char(boundary,varargin{:}); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
175 otherwise |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
176 error('Unsupported bc type: %s', type); |
0 | 177 end |
178 | |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
179 end |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
180 |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
181 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
182 % Sets the boundary condition Lq = g, where |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
183 % L = L(rho, u, e), g = g(t) |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
184 % p_in are the indecies of the ingoing characteristics. |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
185 function closure = boundary_condition_L(obj, boundary, L_fun, g_fun, p_in) |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
186 [e_s,e_S,s] = obj.get_boundary_ops(boundary); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
187 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
188 p_ot = 1:3; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
189 p_ot(p_in) = []; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
190 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
191 p = [p_in, p_ot]; % Permutation to sort |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
192 pt(p) = 1:length(p); % Inverse permutation |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
193 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
194 function o = closure_fun(q,t) |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
195 % Extract solution at the boundary |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
196 q_s = e_S'*q; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
197 rho = q_s(1); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
198 u = q_s(2)/rho; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
199 e = q_s(3); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
200 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
201 c = obj.c(q_s); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
202 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
203 % Calculate transformation matrix |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
204 T = obj.T(q_s); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
205 Tin = T(:,p_in); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
206 Tot = T(:,p_ot); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
207 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
208 % Convert bc from ordinary form to characteristic form. |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
209 % Lq = g => w_in = Rw_ot + g_tilde |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
210 L = L_fun(rho,u,e); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
211 g = g_fun(t); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
212 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
213 Lambda = obj.Lambda(q_s); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
214 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
215 R =-inv(L*Tin)*(L*Tot); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
216 g_tilde = inv(L*Tin)*g; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
217 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
218 % Setup the penalty parameter |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
219 tau1 = -2*Lambda(p_in,p_in); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
220 tau2 = zeros(length(p_ot),length(p_in)); % Penalty only on ingoing char. |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
221 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
222 tauHat = [tau1; tau2]; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
223 tau = -s*e_S*sparse(T*tauHat(pt,:)); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
224 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
225 % Calculate the numerical caracteristics and apply the penalty |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
226 w_s = inv(T)*q_s; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
227 % w_s = T\q_s; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
228 % w_s = Tinv * q_s; % Med analytisk matris |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
229 w_in = w_s(p_in); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
230 w_ot = w_s(p_ot); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
231 |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
232 o = obj.Hi * tau * (w_in - R*w_ot - g_tilde); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
233 end |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
234 closure = @closure_fun; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
235 end |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
236 |
57
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
237 function closure = boundary_condition_char(obj,boundary,w_data) |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
238 [e_s,e_S,s] = obj.get_boundary_ops(boundary); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
239 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
240 function o = closure_fun(q,t) |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
241 q_s = e_S'*q; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
242 rho = q_s(1); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
243 u = q_s(2)/rho; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
244 e = q_s(3); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
245 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
246 c = obj.c(q_s); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
247 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
248 Lambda = [u, u+c, u-c]; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
249 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
250 p_in = find(s*Lambda < 0); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
251 p_ot = find(s*Lambda >= 0); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
252 p = [p_in p_ot]; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
253 pt(p) = 1:length(p); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
254 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
255 T = obj.T(q_s); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
256 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
257 tau1 = -2*diag(Lambda(p_in)); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
258 tau2 = zeros(length(p_ot),length(p_in)); % Penalty only on ingoing char. |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
259 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
260 tauHat = [tau1; tau2]; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
261 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
262 tau = -s*e_S*sparse(T*tauHat(pt,:)); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
263 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
264 w_s = inv(T)*q_s; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
265 w_in = w_s(p_in); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
266 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
267 w_s_data = w_data(t); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
268 w_in_data = w_s_data(p_in); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
269 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
270 o = obj.Hi * tau * (w_in - w_in_data); |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
271 end |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
272 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
273 closure = @closure_fun; |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
274 |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
275 end |
9a647dcccbdd
Added pausing option to noname.animate. Added characteristic bc to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
54
diff
changeset
|
276 |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
277 function closure = boundary_condition_inflow(obj, boundary, p_data, v_data) |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
278 [~,~,s] = obj.get_boundary_ops(boundary); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
279 |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
280 switch s |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
281 case -1 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
282 p_in = [1 2]; |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
283 case 1 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
284 p_in = [1 3]; |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
285 end |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
286 |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
287 a = obj.gamma - 1; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
288 L = @(~,u,~)[ |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
289 0 1 0; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
290 0 -1/2*u*a a; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
291 ]; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
292 g = @(t)[ |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
293 v_data(t); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
294 p_data(t); |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
295 ]; |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
296 |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
297 closure = boundary_condition_L(obj, boundary, L, g, p_in); |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
298 end |
0 | 299 |
300 | |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
301 function closure = boundary_condition_outflow(obj, boundary, p_data) |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
302 [~,~,s] = obj.get_boundary_ops(boundary); |
0 | 303 |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
304 switch s |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
305 case -1 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
306 p_in = 2; |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
307 case 1 |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
308 p_in = 3; |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
309 end |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
310 |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
311 a = obj.gamma -1; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
312 L = @(~,u,~)a*[0 -1/2*u 1]; |
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
313 g = @(t)[p_data(t)]; |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
314 |
59
e431c1260f52
Euler1d: Changed penalties to be calcualted numerically.
Jonatan Werpers <jonatan@werpers.com>
parents:
58
diff
changeset
|
315 |
60
e707cd9e6d0a
Euler1d: Created a general bc routine.
Jonatan Werpers <jonatan@werpers.com>
parents:
59
diff
changeset
|
316 closure = boundary_condition_L(obj, boundary, L, g, p_in); |
0 | 317 |
318 end | |
319 | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
320 % Set wall boundary condition v = 0. |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
321 function closure = boundary_condition_wall(obj,boundary) |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
322 [e_s,e_S,s] = obj.get_boundary_ops(boundary); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
323 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
324 % v = 0 corresponds to |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
325 % L = [0 1 0]; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
326 % g = 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
327 % |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
328 % Tp = |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
329 % R = -(u-c)/(u+c) |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
330 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
331 % tau = alpha * (u+c) |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
332 % (alpha+1)(u+c) + 1/4* alpha^2|u-c| <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
333 % 4*(alpha+1)(u+c) + alpha^2|u-c| <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
334 % 4 * (alpha+1)(u+c) + alpha^2|u| + alpha^2*c <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
335 % |u|*(sgn(u)*4 + sgn(u)*4*alpha + alpha^2) + c*(4 + 4alpha + alpha^2) <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
336 % |u|*(alpha^2 + 4*sgn(u)*alpha + 4*sgn(u)) + c*(alpha+2)^2 <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
337 % |u|*[(alpha + 2*sgn(u))^2 - 4*(sgn(u)-1)] + c*(alpha+2)^2 <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
338 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
339 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
340 % om vi låtsas att u = 0: |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
341 % (alpha+1)c + 1/4 * alpha^2*c <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
342 % alpha^2 + 4*alpha +4 <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
343 % (alpha + 2)^2 <= 0 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
344 % alpha = -2 gives tau = -2*c; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
345 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
346 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
347 % Vill vi sätta penalty på karateristikan som är nära noll också eller vill |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
348 % vi låta den vara fri? |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
349 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
350 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
351 switch s |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
352 case -1 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
353 p_in = 2; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
354 p_zero = 1; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
355 p_ot = 3; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
356 case 1 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
357 p_in = 3; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
358 p_zero = 1; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
359 p_ot = 2; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
360 otherwise |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
361 error(); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
362 end |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
363 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
364 p = [p_in, p_zero, p_ot]; % Permutation to sort |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
365 pt(p) = 1:length(p); % Inverse permutation |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
366 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
367 function o = closure_fun(q) |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
368 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
369 q_s = e_S'*q; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
370 rho = q_s(1); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
371 u = q_s(2)/rho; |
50
75ebf5d3cfe5
Performance improvement for Euler1d
Jonatan Werpers <jonatan@werpers.com>
parents:
49
diff
changeset
|
372 c = obj.c(q_s); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
373 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
374 T = obj.T(q_s); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
375 R = -(u-c)/(u+c); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
376 % l = [u, u+c, u-c]; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
377 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
378 % p_in = find(s*l <= 0); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
379 % p_ot = find(s*l > 0); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
380 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
381 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
382 tau1 = -2*c; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
383 tau2 = [0; 0]; % Penalty only on ingoing char. |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
384 |
54
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
385 % Lambda_in = diag(abs(l(p_in))); |
2194cd385419
Euler1d: Fixed russian dissipation. Cleaned up. Added non-working BC.
Jonatan Werpers <jonatan@werpers.com>
parents:
50
diff
changeset
|
386 % Lambda_ot = diag(abs(l(p_ot))); |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
387 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
388 tauHat = [tau1; tau2]; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
389 tau = -s*e_S*sparse(T*tauHat(pt)); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
390 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
391 w_s = inv(T)*q_s; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
392 % w_s = T\q_s; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
393 % w_s = Tinv * q_s; % Med analytisk matris |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
394 w_in = w_s(p_in); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
395 w_ot = w_s(p_ot); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
396 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
397 o = obj.Hi * tau * (w_in - R*w_ot); |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
398 end |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
399 |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
400 closure = @closure_fun; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
401 end |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
402 |
0 | 403 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
404 error('NOT DONE') |
0 | 405 % u denotes the solution in the own domain |
406 % v denotes the solution in the neighbour domain | |
407 [e_u,d1_u,d2_u,d3_u,s_u,gamm_u,delt_u, halfnorm_inv] = obj.get_boundary_ops(boundary); | |
408 [e_v,d1_v,d2_v,d3_v,s_v,gamm_v,delt_v] = neighbour_scheme.get_boundary_ops(neighbour_boundary); | |
409 | |
410 tuning = 2; | |
411 | |
412 alpha_u = obj.alpha; | |
413 alpha_v = neighbour_scheme.alpha; | |
414 | |
415 tau1 = ((alpha_u/2)/delt_u + (alpha_v/2)/delt_v)/2*tuning; | |
416 % tau1 = (alpha_u/2 + alpha_v/2)/(2*delt_u)*tuning; | |
417 tau4 = s_u*alpha_u/2; | |
418 | |
419 sig2 = ((alpha_u/2)/gamm_u + (alpha_v/2)/gamm_v)/2*tuning; | |
420 sig3 = -s_u*alpha_u/2; | |
421 | |
422 phi2 = s_u*1/2; | |
423 | |
424 psi1 = -s_u*1/2; | |
425 | |
426 tau = tau1*e_u + tau4*d3_u; | |
427 sig = sig2*d1_u + sig3*d2_u ; | |
428 phi = phi2*d1_u ; | |
429 psi = psi1*e_u ; | |
430 | |
431 closure = halfnorm_inv*(tau*e_u' + sig*d1_u' + phi*alpha_u*d2_u' + psi*alpha_u*d3_u'); | |
432 penalty = -halfnorm_inv*(tau*e_v' + sig*d1_v' + phi*alpha_v*d2_v' + psi*alpha_v*d3_v'); | |
433 end | |
434 | |
435 % Ruturns the boundary ops and sign for the boundary specified by the string boundary. | |
436 % The right boundary is considered the positive boundary | |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
437 function [e,E,s] = get_boundary_ops(obj,boundary) |
0 | 438 switch boundary |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
439 case 'l' |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
440 e = obj.e_l; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
441 E = obj.e_L; |
0 | 442 s = -1; |
49
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
443 case 'r' |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
444 e = obj.e_r; |
8f0c2dc747dd
Made lots of updates to Euler1d.
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
445 E = obj.e_R; |
0 | 446 s = 1; |
447 otherwise | |
448 error('No such boundary: boundary = %s',boundary); | |
449 end | |
450 end | |
451 | |
452 function N = size(obj) | |
453 N = prod(obj.m); | |
454 end | |
455 | |
456 end | |
457 end |