Ignore:
Timestamp:
05/03/19 13:25:21 (5 years ago)
Author:
dubos
Message:

devel : Cp(T) thermodynamics (TBC)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/kernels_hex/compute_geopot.k90

    r724 r836  
    8282         END DO 
    8383      END DO 
     84   CASE(thermo_variable_Cp) 
     85      ! thermodynamics with variable Cp 
     86      ! Cp.dT = dh = Tds + vdp 
     87      ! pv = RT 
     88      ! => ds = (dh+v.dp)/T = Cp.dT/T - R dp/p 
     89      ! Cp(T) = Cp0 * (T/T0)^nu 
     90      ! => s(p,T) = Cp(T)/nu - R log(p/preff) 
     91      ! h = Cp(T).T/(nu+1) 
     92      !DIR$ SIMD 
     93      DO ij=ij_omp_begin_ext,ij_omp_end_ext 
     94         pk(ij,llm) = ptop + .5*g* rhodz(ij,llm) 
     95      END DO 
     96      DO l = llm-1,1,-1 
     97         !DIR$ SIMD 
     98         DO ij=ij_omp_begin_ext,ij_omp_end_ext 
     99            pk(ij,l) = pk(ij,l+1) + (.5*g)*( rhodz(ij,l) + rhodz(ij,l+1) ) 
     100         END DO 
     101      END DO 
     102      IF(caldyn_eta == eta_lag) THEN 
     103         !DIR$ SIMD 
     104         DO ij=ij_omp_begin_ext,ij_omp_end_ext 
     105            ps(ij) = pk(ij,1) + .5*g* rhodz(ij,1) 
     106         END DO 
     107      END IF 
     108      DO l = 1,llm 
     109         !DIR$ SIMD 
     110         DO ij=ij_omp_begin_ext,ij_omp_end_ext 
     111            p_ik = pk(ij,l) 
     112            Cp_ik = nu*( theta(ij,l,1) + Rd*log(p_ik/preff) ) 
     113            temp_ik = Treff* (Cp_ik/cpp)**(1./nu) 
     114            gv = (g*Rd)*temp_ik/p_ik ! specific volume v = Rd*T/p 
     115            pk(ij,l) = temp_ik 
     116            geopot(ij,l+1) = geopot(ij,l) + gv*rhodz(ij,l) 
     117         END DO 
     118      END DO 
    84119   CASE(thermo_moist) 
    85120      !DIR$ SIMD 
Note: See TracChangeset for help on using the changeset viewer.