Mercurial > repos > public > sbplib
annotate +scheme/Burgers1d.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 | 2b9bdb22baec |
children | 8537fdd6830a |
rev | line source |
---|---|
1034
2676ad79f994
Rename Burgers1D to Burgers1d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
853
diff
changeset
|
1 classdef Burgers1d < scheme.Scheme |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
2 properties |
832
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
3 grid % Physical grid |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
4 order % Order accuracy for the approximation |
832
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
5 |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
6 params |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
7 |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
8 D % Non-stabalized scheme operator |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
9 H % Discrete norm |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
10 Hi % Norm inverse |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
11 e_l |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
12 e_r |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
13 d_l |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
14 d_r |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
15 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
16 |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
17 methods |
1034
2676ad79f994
Rename Burgers1D to Burgers1d
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
853
diff
changeset
|
18 function obj = Burgers1d(grid, pde_form, operator_type, order, dissipation, params) |
832
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
19 assert(grid.D == 1); |
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
20 assert(grid.size() == length(params.eps)); |
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
21 m = grid.size(); |
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
22 lim = grid.lim{1}; % Ugly, and only applicable for cartesian grids. |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
23 switch operator_type |
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
24 case 'narrow' |
833
9f4c45a2d271
Support narrow stencil operators of order 6
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
832
diff
changeset
|
25 ops = sbp.D4Variable(m, lim, order); |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
26 D1 = ops.D1; |
834
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
27 D2 = ops.D2; |
844
9e4e0576ca0f
Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
834
diff
changeset
|
28 if (strcmp(dissipation,'on')) |
9e4e0576ca0f
Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
834
diff
changeset
|
29 DissipationOp = -1*sbp.dissipationOperator(m, order, ops.HI); |
9e4e0576ca0f
Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
834
diff
changeset
|
30 end |
834
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
31 d_l = ops.d1_l'; |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
32 d_r = ops.d1_r'; |
852
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
33 case 'upwind-' |
834
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
34 ops = sbp.D1Upwind(m, lim, order); |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
35 D1 = (ops.Dp + ops.Dm)/2; |
845
1e057b0f2fed
Add RK6 with residual viscosity update and reduce computational effort of spatial scheme
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
844
diff
changeset
|
36 D2 = @(eps) ops.Dp*spdiag(eps)*ops.Dm; |
852
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
37 if (strcmp(dissipation,'on')) |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
38 DissipationOp = (ops.Dp-ops.Dm)/2; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
39 end |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
40 d_l = ops.e_l'*ops.Dm; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
41 d_r = ops.e_r'*ops.Dm; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
42 case 'upwind+' |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
43 ops = sbp.D1Upwind(m, lim, order); |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
44 D1 = (ops.Dp + ops.Dm)/2; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
45 D2 = @(eps) ops.Dm*spdiag(eps)*ops.Dp; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
46 if (strcmp(dissipation,'on')) |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
47 DissipationOp = (ops.Dp-ops.Dm)/2; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
48 end |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
49 d_l = ops.e_l'*ops.Dp; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
50 d_r = ops.e_r'*ops.Dp; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
51 case 'upwind+-' |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
52 ops = sbp.D1Upwind(m, lim, order); |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
53 D1 = (ops.Dp + ops.Dm)/2; |
fbb8be3177c8
Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
851
diff
changeset
|
54 D2 = @(eps) (ops.Dp*spdiag(eps)*ops.Dm + ops.Dm*spdiag(eps)*ops.Dp)/2; |
844
9e4e0576ca0f
Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
834
diff
changeset
|
55 if (strcmp(dissipation,'on')) |
9e4e0576ca0f
Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
834
diff
changeset
|
56 DissipationOp = (ops.Dp-ops.Dm)/2; |
9e4e0576ca0f
Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
834
diff
changeset
|
57 end |
851
ab2e5a24ddde
- Fix bug when constructing closure for narrow stencils
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
848
diff
changeset
|
58 d_l = ops.e_l'*D1; |
ab2e5a24ddde
- Fix bug when constructing closure for narrow stencils
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
848
diff
changeset
|
59 d_r = ops.e_r'*D1; |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
60 otherwise |
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
61 error('Other operator types not yet supported', operator_type); |
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
62 end |
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
63 |
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
64 switch pde_form |
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
65 case 'skew-symmetric' |
834
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
66 if (strcmp(dissipation,'on')) |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
67 D = @(v, viscosity) - 1/3*D1*v.^2 + (-1/3*v.*D1 + D2(params.eps + viscosity) + max(abs(v))*DissipationOp)*v; |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
68 else |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
69 D = @(v, viscosity) - 1/3*D1*v.^2 + (-1/3*v.*D1 + D2(params.eps + viscosity))*v; |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
70 end |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
71 case 'conservative' |
834
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
72 if (strcmp(dissipation,'on')) |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
73 D = @(v, viscosity) -1/2*D1*v.^2 + (D2(params.eps + viscosity) + max(abs(v))*DissipationOp)*v; |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
74 else |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
75 D = @(v, viscosity) -1/2*D1*v.^2 + D2(params.eps + viscosity)*v; |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
76 end |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
77 otherwise |
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
78 error('Not supported', pde_form); |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
79 end |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
80 |
832
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
81 obj.grid = grid; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
82 obj.order = order; |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
83 obj.params = params; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
84 |
815
fae41958af4f
Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
814
diff
changeset
|
85 obj.D = D; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
86 obj.H = ops.H; |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
87 obj.Hi = ops.HI; |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
88 obj.e_l = ops.e_l; |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
89 obj.e_r = ops.e_r; |
834
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
90 obj.d_l = d_l; |
f1f0bf087e1c
Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
833
diff
changeset
|
91 obj.d_r = d_r; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
92 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
93 |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
94 % Closure functions return the operators applied to the own doamin to close the boundary |
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
95 % Penalty functions return the operators to force the solution. In the case of an interface it returns the operator applied to the other domain. |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
96 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'. |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
97 % type is a string specifying the type of boundary condition if there are several. |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
98 % data is a function returning the data that should be applied at the boundary. |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
99 function [closure, penalty] = boundary_condition(obj,boundary,type,data) |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
100 default_arg('type','robin'); |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
101 default_arg('data',0); |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
102 [e, d, i_b, s] = obj.get_boundary_ops(boundary); |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
103 switch type |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
104 % Stable robin-like boundary conditions ((u+-abs(u))*u/3 - eps*u_x)) with +- at left/right boundary |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
105 case {'R','robin'} |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
106 p = s*obj.Hi*e; |
851
ab2e5a24ddde
- Fix bug when constructing closure for narrow stencils
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
848
diff
changeset
|
107 closure = @(v, viscosity) p*(((v(i_b)-s*abs(v(i_b)))/3)*(v(i_b)) - ((obj.params.eps(i_b) + viscosity(i_b))*d*v)); |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
108 switch class(data) |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
109 case 'double' |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
110 penalty = s*p*data; |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
111 case 'function_handle' |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
112 penalty = @(t) s*p*data(t); |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
113 otherwise |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
114 error('Wierd data argument!') |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
115 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
116 otherwise |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
117 error('No such boundary condition: type = %s',type); |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
118 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
119 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
120 |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
121 % Ruturns the boundary ops, boundary index and sign for the boundary specified by the string boundary. |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
122 % The right boundary is considered the positive boundary |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
123 function [e, d, i_b, s] = get_boundary_ops(obj,boundary) |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
124 switch boundary |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
125 case 'l' |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
126 e = obj.e_l; |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
127 d = obj.d_l; |
848
c8ea9bbdc62c
Increase efficiency of computing closures
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
845
diff
changeset
|
128 i_b = 1; |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
129 s = -1; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
130 case 'r' |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
131 e = obj.e_r; |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
132 d = obj.d_r; |
848
c8ea9bbdc62c
Increase efficiency of computing closures
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
845
diff
changeset
|
133 i_b = length(e); |
853
cda996e64925
Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
852
diff
changeset
|
134 s = 1; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
135 otherwise |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
136 error('No such boundary: boundary = %s',boundary); |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
137 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
138 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
139 |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
140 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
141 error('An interface function does not exist yet'); |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
142 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
143 |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
144 function N = size(obj) |
832
5573913a0949
Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
831
diff
changeset
|
145 N = obj.grid.m; |
814
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
146 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
147 end |
3a5e635a93fd
Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff
changeset
|
148 end |