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

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

devel : Cp(T) thermodynamics (TBC)

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