source: codes/icosagcm/devel/src/kernels_unst/caldyn_fast.k90 @ 935

Last change on this file since 935 was 935, checked in by dubos, 5 years ago

devel : interfaces for caldyn_fast and caldyn_slow_hydro

File size: 2.3 KB
Line 
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         !DIR$ SIMD
9         DO l = 1, llm
10            berni(l,ij) = pk(l,ij)
11            ! from now on pk contains the vertically-averaged geopotential
12            pk(l,ij) = .5*(geopot(l,ij)+geopot(l+1,ij))
13         END DO
14      END DO
15      !$OMP END DO
16   CASE(thermo_theta)
17      !$OMP DO SCHEDULE(STATIC)
18      DO ij = 1, primal_num
19         !DIR$ SIMD
20         DO l = 1, llm
21            Phi_ik = .5*(geopot(l,ij)+geopot(l+1,ij))
22            berni(l,ij) = Phi_ik
23         END DO
24      END DO
25      !$OMP END DO
26   CASE(thermo_entropy)
27      !$OMP DO SCHEDULE(STATIC)
28      DO ij = 1, primal_num
29         !DIR$ SIMD
30         DO l = 1, llm
31            Phi_ik = .5*(geopot(l,ij)+geopot(l+1,ij))
32            berni(l,ij) = Phi_ik + pk(l,ij)*(cpp-theta(l,ij,1)) ! Gibbs = Cp.T-Ts = T(Cp-s)
33         END DO
34      END DO
35      !$OMP END DO
36   CASE(thermo_variable_Cp)
37      !$OMP DO SCHEDULE(STATIC)
38      DO ij = 1, primal_num
39         !DIR$ SIMD
40         DO l = 1, llm
41            Phi_ik = .5*(geopot(l,ij)+geopot(l+1,ij))
42            ! thermodynamics with variable Cp
43            ! Cp(T) = Cp0 * (T/T0)^nu
44            ! => h = Cp(T).T/(nu+1)
45            cp_ik = cpp*(pk(ij,l)/Treff)**nu
46            berni(l,ij) = Phi_ik + pk(l,ij)*(cp_ik/(nu+1.)-theta(l,ij,1)) ! Gibbs = h-Ts = T(Cp/(nu+1)-s)
47         END DO
48      END DO
49      !$OMP END DO
50   CASE DEFAULT
51      PRINT *, 'Unsupported value of caldyn_thermo : ',caldyn_thermo ! FIXME
52      STOP
53   END SELECT
54   !
55   !$OMP DO SCHEDULE(STATIC)
56   DO edge = 1, edge_num
57      ij_left = left(edge)
58      ij_right = right(edge)
59      !DIR$ SIMD
60      DO l = 1, llm
61         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)
62         du(l,edge) = du(l,edge) - 1.*due
63         u(l,edge) = u(l,edge) + tau*du(l,edge)
64      END DO
65   END DO
66   !$OMP END DO
67   !
68   !---------------------------- caldyn_fast ----------------------------------
69   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.