annotate +scheme/Burgers1D.m @ 852:fbb8be3177c8 feature/burgers1d

Fix bug in SAT terms for upwind operators - Set the appropriate boundary derivatives in respect to choice of upwind discretization of D2 - Distinguish between upwind discretizations e.g upwind+ vs upwind-
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 27 Sep 2018 09:30:21 +0200
parents ab2e5a24ddde
children cda996e64925
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1 classdef Burgers1D < scheme.Scheme
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
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
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 default_arg('pde_form','skew-symmetric');
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
24 default_arg('operator_type','narrow');
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
25 default_arg('dissipation','on');
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
26
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
27 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
28 case 'narrow'
833
9f4c45a2d271 Support narrow stencil operators of order 6
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 832
diff changeset
29 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
30 D1 = ops.D1;
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
31 D2 = ops.D2;
844
9e4e0576ca0f Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 834
diff changeset
32 if (strcmp(dissipation,'on'))
9e4e0576ca0f Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 834
diff changeset
33 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
34 end
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
35 d_l = ops.d1_l';
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
36 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
37 case 'upwind-'
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
38 ops = sbp.D1Upwind(m, lim, order);
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
39 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
40 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
41 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
42 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
43 end
fbb8be3177c8 Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 851
diff changeset
44 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
45 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
46 case 'upwind+'
fbb8be3177c8 Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 851
diff changeset
47 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
48 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
49 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
50 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
51 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
52 end
fbb8be3177c8 Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 851
diff changeset
53 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
54 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
55 case 'upwind+-'
fbb8be3177c8 Fix bug in SAT terms for upwind operators
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 851
diff changeset
56 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
57 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
58 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
59 if (strcmp(dissipation,'on'))
9e4e0576ca0f Only compute dissipation operator when requested
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 834
diff changeset
60 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
61 end
851
ab2e5a24ddde - Fix bug when constructing closure for narrow stencils
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 848
diff changeset
62 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
63 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
64 otherwise
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
65 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
66 end
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
67
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
68 %% TODO: Figure out how to evaluate viscosity as viscosity(v,t) here instead of parametrizing D on the viscosity.
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
69 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
70 case 'skew-symmetric'
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
71 if (strcmp(dissipation,'on'))
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
72 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
73 else
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
74 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
75 end
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
76 case 'conservative'
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
77 if (strcmp(dissipation,'on'))
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
78 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
79 else
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
80 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
81 end
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
82 end
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
83
832
5573913a0949 Merged with default, and updated +scheme/Burgers1D accordingly
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 831
diff changeset
84 obj.grid = grid;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
85 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
86 obj.params = params;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
87
815
fae41958af4f Add support for artificial viscosity to the 1d burgers scheme.
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents: 814
diff changeset
88 obj.D = D;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
89 obj.H = ops.H;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
90 obj.Hi = ops.HI;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
91 obj.e_l = ops.e_l;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
92 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
93 obj.d_l = d_l;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 833
diff changeset
94 obj.d_r = d_r;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
95 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
96
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
97 % Closure functions return the opertors applied to the own doamin to close the boundary
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
98 % Penalty functions return the opertors to force the solution. In the case of an interface it returns the operator applied to the other domain.
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
99 % 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
100 % 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
101 % 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
102 % neighbour_scheme is an instance of Scheme that should be interfaced to.
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
103 % neighbour_boundary is a string specifying which boundary to interface to.
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
104 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
105 default_arg('type','robin');
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
106 default_arg('data',0);
848
c8ea9bbdc62c Increase efficiency of computing closures
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 845
diff changeset
107 [e, s, d, i_b] = obj.get_boundary_ops(boundary);
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
108 switch type
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
109 % 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
110 case {'R','robin'}
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
111 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
112 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
113 switch class(data)
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
114 case 'double'
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
115 penalty = s*p*data;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
116 case 'function_handle'
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
117 penalty = @(t) s*p*data(t);
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
118 otherwise
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
119 error('Wierd data argument!')
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
120 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
121 % Unknown, boundary condition
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
122 otherwise
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
123 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
124 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
125 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
126
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
127 % Ruturns the boundary ops and sign for the boundary specified by the string boundary.
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
128 % The right boundary is considered the positive boundary
848
c8ea9bbdc62c Increase efficiency of computing closures
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 845
diff changeset
129 function [e, s, d, i_b] = get_boundary_ops(obj,boundary)
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
130 switch boundary
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
131 case 'l'
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
132 e = obj.e_l;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
133 s = -1;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
134 d = obj.d_l;
848
c8ea9bbdc62c Increase efficiency of computing closures
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 845
diff changeset
135 i_b = 1;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
136 case 'r'
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
137 e = obj.e_r;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
138 s = 1;
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
139 d = obj.d_r;
848
c8ea9bbdc62c Increase efficiency of computing closures
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 845
diff changeset
140 i_b = length(e);
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
141 otherwise
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
142 error('No such boundary: boundary = %s',boundary);
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
143 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
144 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
145
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
146 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
147 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
148 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
149
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
150 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
151 N = obj.grid.m;
814
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
152 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
153 end
3a5e635a93fd Add scheme for 1D Burgers equation
Vidar Stiernstrom <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
154 end