annotate +scheme/Burgers1d.m @ 1038:8537fdd6830a feature/burgers1d

Use opSets in Burgers1d. Note. Also changed from viscid formulation to inviscid formulation. Might be changed back later.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 18 Jan 2019 09:04:38 +0100
parents 2b9bdb22baec
children 0a5503a08a36
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
3 m % Number of points in each direction, possibly a vector
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
4 h % Grid spacing
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
5 grid % Grid
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
6 order % Order accuracy for the approximation
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
7
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
8 H % Discrete norm
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
9 D
832
5573913a0949 Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 831
diff changeset
10
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
11 D1
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
12 Hi
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
13 e_l
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
14 e_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
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
18 function obj = Burgers1d(g, order, pde_form, fluxSplitting, opSet)
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
19 default_arg('opSet',@sbp.D2Standard);
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
20 default_arg('fluxSplitting',@(v)max(abs(v)));
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
21 assertType(g, 'grid.Cartesian');
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
22
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
23 m = g.size();
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
24 xl = g.getBoundary('l');
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
25 xr = g.getBoundary('r');
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
26 xlim = {xl, xr};
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
27
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
28 ops = opSet(m, xlim, order);
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
29
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
30 if (isequal(opSet, @sbp.D1Upwind))
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
31 obj.D1 = (ops.Dp + ops.Dm)/2;
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
32 DissOp = (ops.Dm - ops.Dp)/2;
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
33 else
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
34 obj.D1 = ops.D1;
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
35 end
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
36
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
37 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
38 case 'skew-symmetric'
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
39 if (isequal(opSet, @sbp.D1Upwind))
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
40 D = @(v) -(1/3*obj.D1*v.*v + (1/3*spdiag(v)*obj.D1 + fluxSplitting(v)*DissOp)*v);
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
41 else
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
42 D = @(v) -(1/3*obj.D1*v.*v + 1/3*spdiag(v)*obj.D1*v);
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
43 end
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
44 case 'conservative'
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
45 if (isequal(opSet, @sbp.D1Upwind))
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
46 D = @(v) -(1/2*obj.D1*v.*v + fluxSplitting(v)*DissOp*v);
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
47 else
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
48 D = @(v) -(1/2*obj.D1*v.*v);
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
49 end
853
cda996e64925 Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 852
diff changeset
50 otherwise
cda996e64925 Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 852
diff changeset
51 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
52 end
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
53
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
54 obj.grid = g;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
55
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
56 obj.D = D;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
57 obj.H = ops.H;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
58 obj.Hi = ops.HI;
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
59
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
60 obj.e_l = ops.e_l;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
61 obj.e_r = ops.e_r;
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
62
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
63 obj.m = m;
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
64 obj.h = ops.h;
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
65 obj.order = order;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
66 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
67
853
cda996e64925 Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 852
diff changeset
68 % 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
69 % 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
70 % 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
71 % type is a string specifying the type of boundary condition if there are several.
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
72 function [closure, penalty] = boundary_condition(obj, boundary, type)
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
73 default_arg('type','robin');
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
74 [e, index, s] = obj.get_boundary_ops(boundary);
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
75 switch type
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
76 % Stable dirhclet-like boundary conditions ((u+-abs(u))*u/3)) with +- at left/right boundary
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
77 case {'D', 'd', 'dirichlet', 'Dirichlet'}
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
78 tau = s*e;
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
79 closure = @(v) obj.Hi*tau*(((v(index)-s*abs(v(index)))/3)*v(index));
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
80 penalty = -obj.Hi*tau;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
81 otherwise
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
82 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
83 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
84 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
85
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
86 % Returns 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
87 % The right boundary is considered the positive boundary
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
88 function [e, index, s] = get_boundary_ops(obj,boundary)
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
89 switch boundary
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
90 case {'l','L','left','Left'}
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
91 e = obj.e_l;
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
92 index = 1;
853
cda996e64925 Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 852
diff changeset
93 s = -1;
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
94 case {'r','R','right','Right'}
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
95 e = obj.e_r;
1038
8537fdd6830a Use opSets in Burgers1d.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1035
diff changeset
96 index = length(e);
853
cda996e64925 Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 852
diff changeset
97 s = 1;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
98 otherwise
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
99 error('No such boundary: boundary = %s',boundary);
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
100 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
101 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
102
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
103 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
104 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
105 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
106
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
107 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
108 N = obj.grid.m;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
109 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
110 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
111 end