source: codes/icosagcm/devel/src/kernels_unst/compute_temperature.k90 @ 977

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

devel : added variable Cp to compute_temperature

File size: 3.1 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- compute_temperature ----------------------------------
3   SELECT CASE(caldyn_thermo)
4   CASE(thermo_theta)
5      IF(physics_thermo==thermo_fake_moist) THEN
6         !$OMP DO SCHEDULE(STATIC)
7         DO ij = 1, primal_num
8            !DIR$ SIMD
9            DO l = 1, llm
10               p_ik = pmid(l,ij)
11               theta_ik = temp(l,ij)
12               qv = q(l,ij,1) ! water vapor mixing ratio = mv/md
13               temp_ik = theta_ik*((p_ik/preff)**kappa)
14               temp_ik = temp_ik/(1+0.608*qv)
15               temp(l,ij) = temp_ik
16            END DO
17         END DO
18         !$OMP END DO
19      ELSE
20         !$OMP DO SCHEDULE(STATIC)
21         DO ij = 1, primal_num
22            !DIR$ SIMD
23            DO l = 1, llm
24               p_ik = pmid(l,ij)
25               theta_ik = temp(l,ij)
26               qv = q(l,ij,1) ! water vapor mixing ratio = mv/md
27               temp_ik = theta_ik*((p_ik/preff)**kappa)
28               temp(l,ij) = temp_ik
29            END DO
30         END DO
31         !$OMP END DO
32      END IF
33   CASE(thermo_entropy)
34      IF(physics_thermo==thermo_fake_moist) THEN
35         !$OMP DO SCHEDULE(STATIC)
36         DO ij = 1, primal_num
37            !DIR$ SIMD
38            DO l = 1, llm
39               p_ik = pmid(l,ij)
40               theta_ik = temp(l,ij)
41               qv = q(l,ij,1) ! water vapor mixing ratio = mv/md
42               temp_ik = Treff*exp((theta_ik + Rd*log(p_ik/preff))/cpp)
43               temp_ik = temp_ik/(1+0.608*qv)
44               temp(l,ij) = temp_ik
45            END DO
46         END DO
47         !$OMP END DO
48      ELSE
49         !$OMP DO SCHEDULE(STATIC)
50         DO ij = 1, primal_num
51            !DIR$ SIMD
52            DO l = 1, llm
53               p_ik = pmid(l,ij)
54               theta_ik = temp(l,ij)
55               qv = q(l,ij,1) ! water vapor mixing ratio = mv/md
56               temp_ik = Treff*exp((theta_ik + Rd*log(p_ik/preff))/cpp)
57               temp(l,ij) = temp_ik
58            END DO
59         END DO
60         !$OMP END DO
61      END IF
62   CASE(thermo_variable_Cp)
63      !$OMP DO SCHEDULE(STATIC)
64      DO ij = 1, primal_num
65         !DIR$ SIMD
66         DO l = 1, llm
67            p_ik = pmid(l,ij)
68            theta_ik = temp(l,ij)
69            qv = q(l,ij,1) ! water vapor mixing ratio = mv/md
70            Cp_ik = nu*( theta_ik + Rd*log(p_ik/preff) )
71            temp_ik = Treff* (Cp_ik/cpp)**(1./nu)
72            temp(l,ij) = temp_ik
73         END DO
74      END DO
75      !$OMP END DO
76   CASE(thermo_moist)
77      !$OMP DO SCHEDULE(STATIC)
78      DO ij = 1, primal_num
79         !DIR$ SIMD
80         DO l = 1, llm
81            p_ik = pmid(l,ij)
82            theta_ik = temp(l,ij)
83            qv = q(l,ij,1) ! water vapor mixing ratio = mv/md
84            Rmix = Rd+qv*Rv
85            chi = ( theta_ik + Rmix*log(p_ik/preff) ) / (cpp + qv*cppv) ! log(T/Treff)
86            temp_ik = Treff*exp(chi)
87            temp(l,ij) = temp_ik
88         END DO
89      END DO
90      !$OMP END DO
91   END SELECT
92   !---------------------------- compute_temperature ----------------------------------
93   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.