source: codes/icosagcm/devel/src/kernels_hex/compute_temperature.k90 @ 969

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

devel : added variable Cp to compute_temperature

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