1 | !-------------------------------------------------------------------------- |
---|
2 | !---------------------------- caldyn_fast ---------------------------------- |
---|
3 | ! |
---|
4 | SELECT CASE(caldyn_thermo) |
---|
5 | CASE(thermo_boussinesq) |
---|
6 | !$OMP DO SCHEDULE(STATIC) |
---|
7 | DO ij = 1, primal_num |
---|
8 | DO l = 1, llm |
---|
9 | berni(l,ij) = pk(l,ij) |
---|
10 | ! from now on pk contains the vertically-averaged geopotential |
---|
11 | pk(l,ij) = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
12 | END DO |
---|
13 | END DO |
---|
14 | !$OMP END DO |
---|
15 | CASE(thermo_theta) |
---|
16 | !$OMP DO SCHEDULE(STATIC) |
---|
17 | DO ij = 1, primal_num |
---|
18 | DO l = 1, llm |
---|
19 | berni(l,ij) = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
20 | END DO |
---|
21 | END DO |
---|
22 | !$OMP END DO |
---|
23 | CASE(thermo_entropy) |
---|
24 | !$OMP DO SCHEDULE(STATIC) |
---|
25 | DO ij = 1, primal_num |
---|
26 | DO l = 1, llm |
---|
27 | berni(l,ij) = .5*(geopot(l,ij)+geopot(l+1,ij)) |
---|
28 | berni(l,ij) = berni(l,ij) + pk(l,ij)*(cpp-theta(l,ij,1)) ! Gibbs = Cp.T-Ts = T(Cp-s) |
---|
29 | END DO |
---|
30 | END DO |
---|
31 | !$OMP END DO |
---|
32 | CASE DEFAULT |
---|
33 | PRINT *, 'Unsupported value of caldyn_thermo : ',caldyn_thermo ! FIXME |
---|
34 | STOP |
---|
35 | END SELECT |
---|
36 | ! |
---|
37 | !$OMP DO SCHEDULE(STATIC) |
---|
38 | DO edge = 1, edge_num |
---|
39 | ij_left = left(edge) |
---|
40 | ij_right = right(edge) |
---|
41 | DO l = 1, llm |
---|
42 | due = .5*(theta(l,ij_left,1)+theta(l,ij_right,1))*(pk(l,ij_right)-pk(l,ij_left)) + berni(l,ij_right)-berni(l,ij_left) |
---|
43 | du(l,edge) = du(l,edge) - 1.*due |
---|
44 | u(l,edge) = u(l,edge) + tau*du(l,edge) |
---|
45 | END DO |
---|
46 | END DO |
---|
47 | !$OMP END DO |
---|
48 | ! |
---|
49 | !---------------------------- caldyn_fast ---------------------------------- |
---|
50 | !-------------------------------------------------------------------------- |
---|