Mercurial > repos > public > sbplib
annotate +sbp/dissipationOperator.m @ 1031:2ef20d00b386 feature/advectionRV
For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 17 Jan 2019 10:25:06 +0100 |
parents | cda996e64925 |
children |
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 |