annotate +sbp/dissipationOperator.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 cda996e64925
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1 %% Function that constructs artificial dissipation operators using undivided differences
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
2 function D = dissipationOperator(m, order, Hinv, scaling)
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
3 % TBD: Add or remove D_2 and Dp/Dm?
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
4 % d2=[1 2 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
5 % D_2=(diag(ones(m-1,1),-1)-2*diag(ones(m,1),0)+ ...
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
6 % diag(ones(m-1,1),1));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
7 % D_2(1,1:3)=[d2];D_2(m,m-2:m)=[d2];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8 % %Dm
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
9 % DD_m=(diag(ones(m-1,1),+1)-diag(ones(m,1),0));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
10 % DD_m(m,m-1:m)=[-1 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
11 % %Dp
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
12 % DD_p=(-diag(ones(m-1,1),-1)+diag(ones(m,1),0));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
13 % DD_p(1,1:2)=[-1 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
14
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
15 switch order
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
16 case 1
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
17 DD_1=(diag(ones(m-1,1),+1)-diag(ones(m,1),0));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
18 DD_1(m,m-1:m)=[-1 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
19 D = DD_2'*DD_2;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
20 case 2
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
21 dd2=0*[1 -2 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
22 DD_2=(diag(ones(m-1,1),-1)-2*diag(ones(m,1),0)+ ...
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
23 diag(ones(m-1,1),1));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
24 DD_2(1,1:3)=[dd2];DD_2(m,m-2:m)=[dd2];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
25 D = DD_2'*DD_2;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
26 case 3
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
27 d3=0*[-1 3 -3 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
28 DD_3=(-diag(ones(m-2,1),-2)+3*diag(ones(m-1,1),-1)-3*diag(ones(m,1),0)+ ...
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
29 diag(ones(m-1,1),1));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
30 DD_3(1:2,1:4)=[d3;d3];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
31 DD_3(m,m-3:m)=[d3];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
32 D = DD_3'*DD_3;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
33 case 4
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
34 default_arg('scaling', 1/12);
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
35 d4=0*[1 -4 6 -4 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
36 DD_4=(diag(ones(m-2,1),2)-4*diag(ones(m-1,1),1)+6*diag(ones(m,1),0)-4*diag(ones(m-1,1),-1)+diag(ones(m-2,1),-2));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
37 DD_4(1:2,1:5)=[d4;d4];DD_4(m-1:m,m-4:m)=[d4;d4];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
38 D = DD_4'*DD_4;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
39 case 5
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
40 d5=0*[-1 5 -10 10 -5 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
41 DD_5=(-diag(ones(m-3,1),-3)+5*diag(ones(m-2,1),-2)-10*diag(ones(m-1,1),-1)+10*diag(ones(m,1),0)-5*diag(ones(m-1,1),1)+diag(ones(m-2,1),2));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
42 DD_5(1:3,1:6)=[d5;d5;d5];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
43 DD_5(m-1:m,m-5:m)=[d5;d5];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
44 D = DD_5'*DD_5;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
45 case 6
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
46 default_arg('scaling', 1/60);
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
47 d6=0*[1 -6 15 -20 15 -6 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
48 DD_6=(diag(ones(m-3,1),3)-6*diag(ones(m-2,1),2)+15*diag(ones(m-1,1),1)-20*diag(ones(m,1),0)+15*diag(ones(m-1,1),-1)-6*diag(ones(m-2,1),-2)+diag(ones(m-3,1),-3));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
49 DD_6(1:3,1:7)=[d6;d6;d6];DD_6(m-2:m,m-6:m)=[d6;d6;d6];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
50 D = DD_6'*DD_6;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
51 case 7
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
52 d7=0*[-1 7 -21 35 -35 21 -7 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
53 DD_7=(-diag(ones(m-4,1),-4)+7*diag(ones(m-3,1),-3)-21*diag(ones(m-2,1),-2)+35*diag(ones(m-1,1),-1)-35*diag(ones(m,1),0)+21*diag(ones(m-1,1),1)-7*diag(ones(m-2,1),2)+diag(ones(m-3,1),3));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
54 DD_7(1:4,1:8)=[d7;d7;d7;d7];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
55 DD_7(m-2:m,m-7:m)=[d7;d7;d7];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
56 D = DD_7'*DD_7;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
57 case 9
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
58 d9=0*[-1 9 -36 84 -126 126 -84 36 -9 1];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
59 DD_9=(-diag(ones(m-5,1),-5)+9*diag(ones(m-4,1),-4)-36*diag(ones(m-3,1),-3)+84*diag(ones(m-2,1),-2)-126*diag(ones(m-1,1),-1)+126*diag(ones(m,1),0)-84*diag(ones(m-1,1),1)+36*diag(ones(m-2,1),2)-9*diag(ones(m-3,1),3)+diag(ones(m-4,1),4));
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
60 DD_9(1:5,1:10)=[d9;d9;d9;d9;d9];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
61 DD_9(m-3:m,m-9:m)=[d9;d9;d9;d9];
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
62 D = DD_9'*DD_9;
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
63 otherwise
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
64 error('Order not yet supported', order);
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
65 end
853
cda996e64925 Minor renaming and clean up
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 834
diff changeset
66 D = scaling*sparse(Hinv*D);
834
f1f0bf087e1c Add support for artificial viscosity
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
67 end