/[lmdze]/trunk/Sources/phylmd/Interface_surf/calcul_fluxs.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/Interface_surf/calcul_fluxs.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 206 by guez, Tue Aug 30 12:52:46 2016 UTC revision 207 by guez, Thu Sep 1 10:30:53 2016 UTC
# Line 9  contains Line 9  contains
9         peqAcoef, petBcoef, peqBcoef, tsurf_new, evap, fluxlat, flux_t, &         peqAcoef, petBcoef, peqBcoef, tsurf_new, evap, fluxlat, flux_t, &
10         dflux_s, dflux_l)         dflux_s, dflux_l)
11    
12      ! Cette routine calcule les fluxs en h et q à l'interface et une      ! Cette routine calcule les flux en h et q à l'interface et une
13      ! température de surface.      ! température de surface.
14    
15      ! L. Fairhead April 2000      ! L. Fairhead April 2000
16    
17      USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep      USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats
18      use nr_util, only: assert_eq      use nr_util, only: assert_eq
19      USE suphec_m, ONLY: rcpd, rd, retv, rlstt, rlvtt, rtt      USE suphec_m, ONLY: rcpd, rd, retv, rlstt, rlvtt, rtt
20      USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2      USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2
# Line 49  contains Line 49  contains
49      real, intent(OUT):: evap(:) ! (knon)      real, intent(OUT):: evap(:) ! (knon)
50    
51      real, intent(OUT):: fluxlat(:), flux_t(:) ! (knon)      real, intent(OUT):: fluxlat(:), flux_t(:) ! (knon)
52      ! flux de chaleur latente et sensible      ! flux de chaleurs latente et sensible
53    
54      real, intent(OUT):: dflux_s(:), dflux_l(:) ! (knon)      real, intent(OUT):: dflux_s(:), dflux_l(:) ! (knon)
55      ! dérivées des flux de chaleurs sensible et latente par rapport à      ! dérivées des flux de chaleurs sensible et latente par rapport à
# Line 59  contains Line 59  contains
59      integer i      integer i
60      integer knon ! nombre de points a traiter      integer knon ! nombre de points a traiter
61      real, dimension(size(ps)):: mh, oh, mq, nq, oq, dq_s_dt, coef ! (knon)      real, dimension(size(ps)):: mh, oh, mq, nq, oq, dq_s_dt, coef ! (knon)
62      real qsat(size(ps)) ! mass fraction      real qsat(size(ps)) ! (knon) mass fraction
63      real sl(size(ps)) ! chaleur latente d'évaporation ou de sublimation      real sl(size(ps)) ! (knon) chaleur latente d'évaporation ou de sublimation
64      logical delta      logical delta
65      real zcor      real zcor
66      real, parameter:: t_grnd = 271.35, t_coup = 273.15      real, parameter:: t_grnd = 271.35
67    
68      !---------------------------------------------------------------------      !---------------------------------------------------------------------
69    
# Line 76  contains Line 76  contains
76    
77      ! Traitement de l'humidité du sol      ! Traitement de l'humidité du sol
78    
79      IF (thermcep) THEN      DO i = 1, knon
80         DO i = 1, knon         delta = rtt >= tsurf(i)
81            delta = rtt >= tsurf(i)         qsat(i) = MIN(0.5, r2es * FOEEW(tsurf(i), delta) / ps(i))
82            qsat(i) = MIN(0.5, r2es * FOEEW(tsurf(i), delta) / ps(i))         zcor = 1. / (1. - retv * qsat(i))
83            zcor = 1. / (1. - retv * qsat(i))         qsat(i) = qsat(i) * zcor
84            qsat(i) = qsat(i) * zcor         dq_s_dt(i) = RCPD * FOEDE(tsurf(i), delta, merge(R5IES * RLSTT, &
85            dq_s_dt(i) = RCPD * FOEDE(tsurf(i), delta, merge(R5IES * RLSTT, &              R5LES * RLVTT, delta) / RCPD / (1. + RVTMP2 * q1lay(i)), &
86                 R5LES * RLVTT, delta) / RCPD / (1. + RVTMP2 * q1lay(i)), &              qsat(i), zcor) / RLVTT
87                 qsat(i), zcor) / RLVTT      ENDDO
        ENDDO  
     ELSE  
        DO i = 1, knon  
           IF (tsurf(i) < t_coup) THEN  
              qsat(i) = qsats(tsurf(i)) / ps(i)  
              dq_s_dt(i) = RCPD * dqsats(tsurf(i), qsat(i)) / RLVTT  
           ELSE  
              qsat(i) = qsatl(tsurf(i)) / ps(i)  
              dq_s_dt(i) = RCPD * dqsatl(tsurf(i), qsat(i)) / RLVTT  
           ENDIF  
        ENDDO  
     ENDIF  
88    
89      coef = coef1lay * (1. + SQRT(u1lay**2 + v1lay**2)) * p1lay / (RD * t1lay)      coef = coef1lay * (1. + SQRT(u1lay**2 + v1lay**2)) * p1lay / (RD * t1lay)
90      sl = merge(RLSTT, RLVTT, tsurf < RTT)      sl = merge(RLSTT, RLVTT, tsurf < RTT)

Legend:
Removed from v.206  
changed lines
  Added in v.207

  ViewVC Help
Powered by ViewVC 1.1.21