Mercurial > repos > public > sbplib
annotate +sbp/dissipationOperator.m @ 1025:ac80bedc8df7 feature/advectionRV
Clean up of Utux2d
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 07 Jan 2019 16:26:05 +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 |