Mercurial > repos > public > sbplib
comparison +scheme/Burgers2d.m @ 1221:0c906f7ab8bf rv_diffOp_test
Attempt to reduce unnessecary operations when using the RV diffOps. Does not seem to improve efficiency at this stage.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Tue, 05 Mar 2019 10:56:29 +0100 |
parents | 1fe48cbd379a |
children |
comparison
equal
deleted
inserted
replaced
1152:010bb2677230 | 1221:0c906f7ab8bf |
---|---|
53 switch pde_form | 53 switch pde_form |
54 case 'skew-symmetric' | 54 case 'skew-symmetric' |
55 switch length(fluxSplitting) | 55 switch length(fluxSplitting) |
56 case 1 | 56 case 1 |
57 DissOp = DissOpx + DissOpy; | 57 DissOp = DissOpx + DissOpy; |
58 obj.D = @(v) -(1/3*D1*v.*v + (1/3*spdiag(v)*D1 + fluxSplitting{1}(v)*DissOp)*v); | 58 obj.D = @(v) -(1/3*D1*(v.*v) + (1/3*spdiag(v)*D1 + fluxSplitting{1}(v)*DissOp)*v); |
59 case 2 | 59 case 2 |
60 obj.D = @(v) -(1/3*D1*v.*v + (1/3*spdiag(v)*D1 + fluxSplitting{1}(v)*DissOpx + fluxSplitting{2}(v)*DissOpy)*v); | 60 obj.D = @(v) -(1/3*D1*(v.*v) + (1/3*spdiag(v)*D1 + fluxSplitting{1}(v)*DissOpx + fluxSplitting{2}(v)*DissOpy)*v); |
61 end | 61 end |
62 case 'conservative' | 62 case 'conservative' |
63 switch length(fluxSplitting) | 63 switch length(fluxSplitting) |
64 case 1 | 64 case 1 |
65 DissOp = DissOpx + DissOpy; | 65 DissOp = DissOpx + DissOpy; |
66 obj.D = @(v) -(1/2*D1*v.*v + fluxSplitting{1}(v)*DissOp*v); | 66 obj.D = @(v) -(1/2*D1*spdiag(v) + fluxSplitting{1}(v)*DissOp); |
67 case 2 | 67 case 2 |
68 obj.D = @(v) -(1/2*D1*v.*v + (fluxSplitting{1}(v)*DissOpx + fluxSplitting{2}(v)*DissOpy)*v); | 68 obj.D = @(v) -(1/2*D1*spdiag(v) + (fluxSplitting{1}(v)*DissOpx + fluxSplitting{2}(v)*DissOpy)); |
69 end | 69 end |
70 | 70 |
71 end | 71 end |
72 else | 72 else |
73 Dx = kron(ops_x.D1,Iy); | 73 Dx = kron(ops_x.D1,Iy); |
74 Dy = kron(Ix,ops_y.D1); | 74 Dy = kron(Ix,ops_y.D1); |
75 D1 = Dx + Dy; | 75 D1 = Dx + Dy; |
76 switch pde_form | 76 switch pde_form |
77 case 'skew-symmetric' | 77 case 'skew-symmetric' |
78 obj.D = @(v) -(1/3*D1*v.*v + 1/3*spdiag(v)*D1*v); | 78 obj.D = @(v) -(1/3*D1*(v.*v) + 1/3*spdiag(v)*D1*v); |
79 case 'conservative' | 79 case 'conservative' |
80 obj.D = @(v) -1/2*D1*v.*v; | 80 obj.D = @(v) -1/2*D1*(v.*v); |
81 end | 81 end |
82 end | 82 end |
83 | 83 |
84 % Boundary operators | 84 % Boundary operators |
85 obj.e_w = kr(ops_x.e_l, Iy); | 85 obj.e_w = kr(ops_x.e_l, Iy); |
101 % Stable dirchlet-like boundary conditions (u+-abs(u))*u/3 | 101 % Stable dirchlet-like boundary conditions (u+-abs(u))*u/3 |
102 % with +- at left/right boundaries in each coordinate direction | 102 % with +- at left/right boundaries in each coordinate direction |
103 case {'D', 'd', 'dirichlet', 'Dirichlet'} | 103 case {'D', 'd', 'dirichlet', 'Dirichlet'} |
104 | 104 |
105 magnitude = 2/3; | 105 magnitude = 2/3; |
106 tau = @(v) s*magnitude*obj.Hi*e*H_b*spdiag((v(index)-s*abs(v(index)))/2); | 106 Tau = s*magnitude*obj.Hi*e*H_b; |
107 closure = @(v) tau(v)*v(index); | 107 tau = @(v) Tau*spdiag((v(index)-s*abs(v(index)))/2); |
108 closure = @(v) tau(v)*e'; | |
108 penalty = @(v) -tau(v); | 109 penalty = @(v) -tau(v); |
109 | 110 |
110 | 111 |
111 % tau = s*e*H_b; | 112 % tau = s*e*H_b; |
112 % closure = @(v) (obj.Hi*tau)*(((v(index)-s*abs(v(index)))/3).*v(index)); | 113 % closure = @(v) (obj.Hi*tau)*(((v(index)-s*abs(v(index)))/3).*v(index)); |