1 | !-------------------------------------------------------------------------- |
---|
2 | !---------------------------- coriolis ---------------------------------- |
---|
3 | ! |
---|
4 | DO iq=1,nqdyn |
---|
5 | DO l = ll_begin, ll_end |
---|
6 | !DIR$ SIMD |
---|
7 | DO ij=ij_begin_ext, ij_end_ext |
---|
8 | Ftheta(ij+u_right,l) = .5*(theta(ij,l,iq)+theta(ij+t_right,l,iq))*hflux(ij+u_right,l) |
---|
9 | Ftheta(ij+u_lup,l) = .5*(theta(ij,l,iq)+theta(ij+t_lup,l,iq))*hflux(ij+u_lup,l) |
---|
10 | Ftheta(ij+u_ldown,l) = .5*(theta(ij,l,iq)+theta(ij+t_ldown,l,iq))*hflux(ij+u_ldown,l) |
---|
11 | END DO |
---|
12 | END DO |
---|
13 | DO l = ll_begin, ll_end |
---|
14 | !DIR$ SIMD |
---|
15 | DO ij=ij_begin, ij_end |
---|
16 | divF=0. |
---|
17 | divF = divF + Ftheta(ij+u_rup,l)*ne_rup |
---|
18 | divF = divF + Ftheta(ij+u_lup,l)*ne_lup |
---|
19 | divF = divF + Ftheta(ij+u_left,l)*ne_left |
---|
20 | divF = divF + Ftheta(ij+u_ldown,l)*ne_ldown |
---|
21 | divF = divF + Ftheta(ij+u_rdown,l)*ne_rdown |
---|
22 | divF = divF + Ftheta(ij+u_right,l)*ne_right |
---|
23 | dtheta_rhodz(ij,l,iq) = -divF / Ai(ij) |
---|
24 | END DO |
---|
25 | END DO |
---|
26 | END DO ! iq |
---|
27 | ! |
---|
28 | DO l = ll_begin, ll_end |
---|
29 | !DIR$ SIMD |
---|
30 | DO ij=ij_begin, ij_end |
---|
31 | divF=0. |
---|
32 | divF = divF + hflux(ij+u_rup,l)*ne_rup |
---|
33 | divF = divF + hflux(ij+u_lup,l)*ne_lup |
---|
34 | divF = divF + hflux(ij+u_left,l)*ne_left |
---|
35 | divF = divF + hflux(ij+u_ldown,l)*ne_ldown |
---|
36 | divF = divF + hflux(ij+u_rdown,l)*ne_rdown |
---|
37 | divF = divF + hflux(ij+u_right,l)*ne_right |
---|
38 | convm(ij,l) = -divF / Ai(ij) |
---|
39 | END DO |
---|
40 | END DO |
---|
41 | ! |
---|
42 | SELECT CASE(caldyn_conserv) |
---|
43 | CASE(conserv_energy) ! energy-conserving TRiSK |
---|
44 | DO l = ll_begin, ll_end |
---|
45 | !DIR$ SIMD |
---|
46 | DO ij=ij_begin, ij_end |
---|
47 | du_trisk=0. |
---|
48 | du_trisk = du_trisk + wee(ij+u_right,1,1)*hflux(ij+u_rup,l)*(qu(ij+u_right,l)+qu(ij+u_rup,l)) |
---|
49 | du_trisk = du_trisk + wee(ij+u_right,2,1)*hflux(ij+u_lup,l)*(qu(ij+u_right,l)+qu(ij+u_lup,l)) |
---|
50 | du_trisk = du_trisk + wee(ij+u_right,3,1)*hflux(ij+u_left,l)*(qu(ij+u_right,l)+qu(ij+u_left,l)) |
---|
51 | du_trisk = du_trisk + wee(ij+u_right,4,1)*hflux(ij+u_ldown,l)*(qu(ij+u_right,l)+qu(ij+u_ldown,l)) |
---|
52 | du_trisk = du_trisk + wee(ij+u_right,5,1)*hflux(ij+u_rdown,l)*(qu(ij+u_right,l)+qu(ij+u_rdown,l)) |
---|
53 | du_trisk = du_trisk + wee(ij+u_right,1,2)*hflux(ij+t_right+u_ldown,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_ldown,l)) |
---|
54 | du_trisk = du_trisk + wee(ij+u_right,2,2)*hflux(ij+t_right+u_rdown,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_rdown,l)) |
---|
55 | du_trisk = du_trisk + wee(ij+u_right,3,2)*hflux(ij+t_right+u_right,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_right,l)) |
---|
56 | du_trisk = du_trisk + wee(ij+u_right,4,2)*hflux(ij+t_right+u_rup,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_rup,l)) |
---|
57 | du_trisk = du_trisk + wee(ij+u_right,5,2)*hflux(ij+t_right+u_lup,l)*(qu(ij+u_right,l)+qu(ij+t_right+u_lup,l)) |
---|
58 | du(ij+u_right,l) = du(ij+u_right,l) + .5*du_trisk |
---|
59 | du_trisk=0. |
---|
60 | du_trisk = du_trisk + wee(ij+u_lup,1,1)*hflux(ij+u_left,l)*(qu(ij+u_lup,l)+qu(ij+u_left,l)) |
---|
61 | du_trisk = du_trisk + wee(ij+u_lup,2,1)*hflux(ij+u_ldown,l)*(qu(ij+u_lup,l)+qu(ij+u_ldown,l)) |
---|
62 | du_trisk = du_trisk + wee(ij+u_lup,3,1)*hflux(ij+u_rdown,l)*(qu(ij+u_lup,l)+qu(ij+u_rdown,l)) |
---|
63 | du_trisk = du_trisk + wee(ij+u_lup,4,1)*hflux(ij+u_right,l)*(qu(ij+u_lup,l)+qu(ij+u_right,l)) |
---|
64 | du_trisk = du_trisk + wee(ij+u_lup,5,1)*hflux(ij+u_rup,l)*(qu(ij+u_lup,l)+qu(ij+u_rup,l)) |
---|
65 | du_trisk = du_trisk + wee(ij+u_lup,1,2)*hflux(ij+t_lup+u_right,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_right,l)) |
---|
66 | du_trisk = du_trisk + wee(ij+u_lup,2,2)*hflux(ij+t_lup+u_rup,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_rup,l)) |
---|
67 | du_trisk = du_trisk + wee(ij+u_lup,3,2)*hflux(ij+t_lup+u_lup,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_lup,l)) |
---|
68 | du_trisk = du_trisk + wee(ij+u_lup,4,2)*hflux(ij+t_lup+u_left,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_left,l)) |
---|
69 | du_trisk = du_trisk + wee(ij+u_lup,5,2)*hflux(ij+t_lup+u_ldown,l)*(qu(ij+u_lup,l)+qu(ij+t_lup+u_ldown,l)) |
---|
70 | du(ij+u_lup,l) = du(ij+u_lup,l) + .5*du_trisk |
---|
71 | du_trisk=0. |
---|
72 | du_trisk = du_trisk + wee(ij+u_ldown,1,1)*hflux(ij+u_rdown,l)*(qu(ij+u_ldown,l)+qu(ij+u_rdown,l)) |
---|
73 | du_trisk = du_trisk + wee(ij+u_ldown,2,1)*hflux(ij+u_right,l)*(qu(ij+u_ldown,l)+qu(ij+u_right,l)) |
---|
74 | du_trisk = du_trisk + wee(ij+u_ldown,3,1)*hflux(ij+u_rup,l)*(qu(ij+u_ldown,l)+qu(ij+u_rup,l)) |
---|
75 | du_trisk = du_trisk + wee(ij+u_ldown,4,1)*hflux(ij+u_lup,l)*(qu(ij+u_ldown,l)+qu(ij+u_lup,l)) |
---|
76 | du_trisk = du_trisk + wee(ij+u_ldown,5,1)*hflux(ij+u_left,l)*(qu(ij+u_ldown,l)+qu(ij+u_left,l)) |
---|
77 | du_trisk = du_trisk + wee(ij+u_ldown,1,2)*hflux(ij+t_ldown+u_lup,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_lup,l)) |
---|
78 | du_trisk = du_trisk + wee(ij+u_ldown,2,2)*hflux(ij+t_ldown+u_left,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_left,l)) |
---|
79 | du_trisk = du_trisk + wee(ij+u_ldown,3,2)*hflux(ij+t_ldown+u_ldown,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_ldown,l)) |
---|
80 | du_trisk = du_trisk + wee(ij+u_ldown,4,2)*hflux(ij+t_ldown+u_rdown,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_rdown,l)) |
---|
81 | du_trisk = du_trisk + wee(ij+u_ldown,5,2)*hflux(ij+t_ldown+u_right,l)*(qu(ij+u_ldown,l)+qu(ij+t_ldown+u_right,l)) |
---|
82 | du(ij+u_ldown,l) = du(ij+u_ldown,l) + .5*du_trisk |
---|
83 | END DO |
---|
84 | END DO |
---|
85 | CASE(conserv_enstrophy) ! enstrophy-conserving TRiSK |
---|
86 | DO l = ll_begin, ll_end |
---|
87 | !DIR$ SIMD |
---|
88 | DO ij=ij_begin, ij_end |
---|
89 | du_trisk=0. |
---|
90 | du_trisk = du_trisk + wee(ij+u_right,1,1)*hflux(ij+u_rup,l) |
---|
91 | du_trisk = du_trisk + wee(ij+u_right,2,1)*hflux(ij+u_lup,l) |
---|
92 | du_trisk = du_trisk + wee(ij+u_right,3,1)*hflux(ij+u_left,l) |
---|
93 | du_trisk = du_trisk + wee(ij+u_right,4,1)*hflux(ij+u_ldown,l) |
---|
94 | du_trisk = du_trisk + wee(ij+u_right,5,1)*hflux(ij+u_rdown,l) |
---|
95 | du_trisk = du_trisk + wee(ij+u_right,1,2)*hflux(ij+t_right+u_ldown,l) |
---|
96 | du_trisk = du_trisk + wee(ij+u_right,2,2)*hflux(ij+t_right+u_rdown,l) |
---|
97 | du_trisk = du_trisk + wee(ij+u_right,3,2)*hflux(ij+t_right+u_right,l) |
---|
98 | du_trisk = du_trisk + wee(ij+u_right,4,2)*hflux(ij+t_right+u_rup,l) |
---|
99 | du_trisk = du_trisk + wee(ij+u_right,5,2)*hflux(ij+t_right+u_lup,l) |
---|
100 | du(ij+u_right,l) = du(ij+u_right,l) + du_trisk*qu(ij+u_right,l) |
---|
101 | du_trisk=0. |
---|
102 | du_trisk = du_trisk + wee(ij+u_lup,1,1)*hflux(ij+u_left,l) |
---|
103 | du_trisk = du_trisk + wee(ij+u_lup,2,1)*hflux(ij+u_ldown,l) |
---|
104 | du_trisk = du_trisk + wee(ij+u_lup,3,1)*hflux(ij+u_rdown,l) |
---|
105 | du_trisk = du_trisk + wee(ij+u_lup,4,1)*hflux(ij+u_right,l) |
---|
106 | du_trisk = du_trisk + wee(ij+u_lup,5,1)*hflux(ij+u_rup,l) |
---|
107 | du_trisk = du_trisk + wee(ij+u_lup,1,2)*hflux(ij+t_lup+u_right,l) |
---|
108 | du_trisk = du_trisk + wee(ij+u_lup,2,2)*hflux(ij+t_lup+u_rup,l) |
---|
109 | du_trisk = du_trisk + wee(ij+u_lup,3,2)*hflux(ij+t_lup+u_lup,l) |
---|
110 | du_trisk = du_trisk + wee(ij+u_lup,4,2)*hflux(ij+t_lup+u_left,l) |
---|
111 | du_trisk = du_trisk + wee(ij+u_lup,5,2)*hflux(ij+t_lup+u_ldown,l) |
---|
112 | du(ij+u_lup,l) = du(ij+u_lup,l) + du_trisk*qu(ij+u_lup,l) |
---|
113 | du_trisk=0. |
---|
114 | du_trisk = du_trisk + wee(ij+u_ldown,1,1)*hflux(ij+u_rdown,l) |
---|
115 | du_trisk = du_trisk + wee(ij+u_ldown,2,1)*hflux(ij+u_right,l) |
---|
116 | du_trisk = du_trisk + wee(ij+u_ldown,3,1)*hflux(ij+u_rup,l) |
---|
117 | du_trisk = du_trisk + wee(ij+u_ldown,4,1)*hflux(ij+u_lup,l) |
---|
118 | du_trisk = du_trisk + wee(ij+u_ldown,5,1)*hflux(ij+u_left,l) |
---|
119 | du_trisk = du_trisk + wee(ij+u_ldown,1,2)*hflux(ij+t_ldown+u_lup,l) |
---|
120 | du_trisk = du_trisk + wee(ij+u_ldown,2,2)*hflux(ij+t_ldown+u_left,l) |
---|
121 | du_trisk = du_trisk + wee(ij+u_ldown,3,2)*hflux(ij+t_ldown+u_ldown,l) |
---|
122 | du_trisk = du_trisk + wee(ij+u_ldown,4,2)*hflux(ij+t_ldown+u_rdown,l) |
---|
123 | du_trisk = du_trisk + wee(ij+u_ldown,5,2)*hflux(ij+t_ldown+u_right,l) |
---|
124 | du(ij+u_ldown,l) = du(ij+u_ldown,l) + du_trisk*qu(ij+u_ldown,l) |
---|
125 | END DO |
---|
126 | END DO |
---|
127 | END SELECT |
---|
128 | !---------------------------- coriolis ---------------------------------- |
---|
129 | !-------------------------------------------------------------------------- |
---|