Mercurial > repos > public > sbplib
comparison +scheme/Euler1d.m @ 50:75ebf5d3cfe5
Performance improvement for Euler1d
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 05 Nov 2015 17:10:57 -0800 |
parents | 8f0c2dc747dd |
children | 2194cd385419 |
comparison
equal
deleted
inserted
replaced
49:8f0c2dc747dd | 50:75ebf5d3cfe5 |
---|---|
12 M % Derivative norm | 12 M % Derivative norm |
13 gamma | 13 gamma |
14 | 14 |
15 T | 15 T |
16 p | 16 p |
17 c | |
17 | 18 |
18 | 19 |
19 H % Discrete norm | 20 H % Discrete norm |
20 Hi | 21 Hi |
21 e_l, e_r, e_L, e_R; | 22 e_l, e_r, e_L, e_R; |
77 % q=[rho, rho*u, e]^T | 78 % q=[rho, rho*u, e]^T |
78 % F=[rho*u, rho*u^2+p, (e+p)*u] ^T | 79 % F=[rho*u, rho*u^2+p, (e+p)*u] ^T |
79 % p=(gamma-1)*(e-rho*u^2/2); | 80 % p=(gamma-1)*(e-rho*u^2/2); |
80 | 81 |
81 %Solving on form q_t + F_x = 0 | 82 %Solving on form q_t + F_x = 0 |
82 function o = F(q) | 83 function o = F(Q) |
83 o = [q(2); q(2).^2/q(1) + p(q); (q(3)+p(q))*q(2)/q(1)]; | 84 % Flux: f = [q2; q2.^2/q1 + p(q); (q3+p(q))*q2/q1]; |
85 o = [Q(2,:); Q(2,:).^2/Q(1,:) + p(Q); (Q(3,:)+p(Q)).*Q(2,:)./Q(1,:)]; | |
84 end | 86 end |
85 | 87 |
86 % Equation of state | 88 % Equation of state |
87 function o = p(q) | 89 function o = p(Q) |
88 o = (gamma-1)*(q(3)-q(2).^2/q(1)/2); | 90 % Pressure p = (gamma-1)*(q3-q2.^2/q1/2) |
89 end | 91 o = (gamma-1)*(Q(3,:)-Q(2,:).^2/Q(1,:)/2); |
92 end | |
93 | |
94 function o = c(Q) | |
95 % Speed of light c = sqrt(obj.gamma*p/rho); | |
96 o = sqrt(gamma*p(Q)./Q(1,:)); | |
97 end | |
98 | |
90 | 99 |
91 % R = | 100 % R = |
92 % [sqrt(2*(gamma-1))*rho , rho , rho ; | 101 % [sqrt(2*(gamma-1))*rho , rho , rho ; |
93 % sqrt(2*(gamma-1))*rho*u , rho*(u+c) , rho*(u-c) ; | 102 % sqrt(2*(gamma-1))*rho*u , rho*(u+c) , rho*(u-c) ; |
94 % sqrt(2*(gamma-1))*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]); | 103 % sqrt(2*(gamma-1))*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]); |
108 ]; | 117 ]; |
109 % Devide columns by stuff to get rid of extra comp? | 118 % Devide columns by stuff to get rid of extra comp? |
110 end | 119 end |
111 | 120 |
112 function o = Fx(q) | 121 function o = Fx(q) |
113 o = zeros(size(q)); | 122 Q = reshape(q,3,m); |
114 for i = 1:3:3*m | 123 o = reshape(F(Q),3*m,1); |
115 o(i:i+2) = F(q(i:i+2)); | |
116 end | |
117 o = D1*o; | 124 o = D1*o; |
118 end | 125 end |
119 | 126 |
120 | 127 |
121 % A=R*Lambda*inv(R), där Lambda=diag(u, u+c, u-c) (c är ljudhastigheten) | 128 % A=R*Lambda*inv(R), där Lambda=diag(u, u+c, u-c) (c är ljudhastigheten) |
131 obj.Fx = @Fx; | 138 obj.Fx = @Fx; |
132 obj.T = @T; | 139 obj.T = @T; |
133 obj.u = x; | 140 obj.u = x; |
134 obj.x = kr(x,ones(3,1)); | 141 obj.x = kr(x,ones(3,1)); |
135 obj.p = @p; | 142 obj.p = @p; |
143 obj.c = @c; | |
136 obj.gamma = gamma; | 144 obj.gamma = gamma; |
137 end | 145 end |
138 | 146 |
139 | 147 |
140 % Enforces the boundary conditions | 148 % Enforces the boundary conditions |
252 | 260 |
253 p = [p_in, p_zero, p_ot]; % Permutation to sort | 261 p = [p_in, p_zero, p_ot]; % Permutation to sort |
254 pt(p) = 1:length(p); % Inverse permutation | 262 pt(p) = 1:length(p); % Inverse permutation |
255 | 263 |
256 function o = closure_fun(q) | 264 function o = closure_fun(q) |
257 p = obj.p(q); | |
258 | 265 |
259 q_s = e_S'*q; | 266 q_s = e_S'*q; |
260 rho = q_s(1); | 267 rho = q_s(1); |
261 u = q_s(2)/rho; | 268 u = q_s(2)/rho; |
262 c = sqrt(obj.gamma*p/rho); | 269 c = obj.c(q_s); |
263 | 270 |
264 T = obj.T(q_s); | 271 T = obj.T(q_s); |
265 R = -(u-c)/(u+c); | 272 R = -(u-c)/(u+c); |
266 % l = [u, u+c, u-c]; | 273 % l = [u, u+c, u-c]; |
267 | 274 |