/[lmdze]/trunk/Sources/phylmd/clmain.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/clmain.f

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

revision 208 by guez, Wed Dec 7 16:44:53 2016 UTC revision 221 by guez, Thu Apr 20 14:44:47 2017 UTC
# Line 4  module clmain_m Line 4  module clmain_m
4    
5  contains  contains
6    
7    SUBROUTINE clmain(dtime, pctsrf, t, q, u, v, jour, rmu0, ftsol, cdmmax, &    SUBROUTINE clmain(dtime, pctsrf, t, q, u, v, julien, mu0, ftsol, cdmmax, &
8         cdhmax, ksta, ksta_ter, ok_kzmin, ftsoil, qsol, paprs, pplay, snow, &         cdhmax, ksta, ksta_ter, ok_kzmin, ftsoil, qsol, paprs, pplay, fsnow, &
9         qsurf, evap, falbe, fluxlat, rain_fall, snow_f, solsw, sollw, fder, &         qsurf, evap, falbe, fluxlat, rain_fall, snow_f, solsw, sollw, fder, &
10         rlat, rugos, agesno, rugoro, d_t, d_q, d_u, d_v, d_ts, flux_t, flux_q, &         rugos, agesno, rugoro, d_t, d_q, d_u, d_v, d_ts, flux_t, flux_q, &
11         flux_u, flux_v, cdragh, cdragm, q2, dflux_t, dflux_q, ycoefh, zu1, &         flux_u, flux_v, cdragh, cdragm, q2, dflux_t, dflux_q, ycoefh, zu1, &
12         zv1, t2m, q2m, u10m, v10m, pblh, capcl, oliqcl, cteicl, pblt, therm, &         zv1, t2m, q2m, u10m, v10m, pblh, capcl, oliqcl, cteicl, pblt, therm, &
13         trmb1, trmb2, trmb3, plcl, fqcalving, ffonte, run_off_lic_0)         trmb1, trmb2, trmb3, plcl, fqcalving, ffonte, run_off_lic_0)
# Line 52  contains Line 52  contains
52      REAL, INTENT(IN):: t(klon, klev) ! temperature (K)      REAL, INTENT(IN):: t(klon, klev) ! temperature (K)
53      REAL, INTENT(IN):: q(klon, klev) ! vapeur d'eau (kg/kg)      REAL, INTENT(IN):: q(klon, klev) ! vapeur d'eau (kg/kg)
54      REAL, INTENT(IN):: u(klon, klev), v(klon, klev) ! vitesse      REAL, INTENT(IN):: u(klon, klev), v(klon, klev) ! vitesse
55      INTEGER, INTENT(IN):: jour ! jour de l'annee en cours      INTEGER, INTENT(IN):: julien ! jour de l'annee en cours
56      REAL, intent(in):: rmu0(klon) ! cosinus de l'angle solaire zenithal          REAL, intent(in):: mu0(klon) ! cosinus de l'angle solaire zenithal    
57      REAL, INTENT(IN):: ftsol(klon, nbsrf) ! temp\'erature du sol (en K)      REAL, INTENT(IN):: ftsol(klon, nbsrf) ! temp\'erature du sol (en K)
58      REAL, INTENT(IN):: cdmmax, cdhmax ! seuils cdrm, cdrh      REAL, INTENT(IN):: cdmmax, cdhmax ! seuils cdrm, cdrh
59      REAL, INTENT(IN):: ksta, ksta_ter      REAL, INTENT(IN):: ksta, ksta_ter
# Line 67  contains Line 67  contains
67    
68      REAL, INTENT(IN):: paprs(klon, klev+1) ! pression a intercouche (Pa)      REAL, INTENT(IN):: paprs(klon, klev+1) ! pression a intercouche (Pa)
69      REAL, INTENT(IN):: pplay(klon, klev) ! pression au milieu de couche (Pa)      REAL, INTENT(IN):: pplay(klon, klev) ! pression au milieu de couche (Pa)
70      REAL, INTENT(inout):: snow(klon, nbsrf)      REAL, INTENT(inout):: fsnow(:, :) ! (klon, nbsrf) \'epaisseur neigeuse
71      REAL qsurf(klon, nbsrf)      REAL qsurf(klon, nbsrf)
72      REAL evap(klon, nbsrf)      REAL evap(klon, nbsrf)
73      REAL, intent(inout):: falbe(klon, nbsrf)      REAL, intent(inout):: falbe(klon, nbsrf)
74        REAL, intent(out):: fluxlat(:, :) ! (klon, nbsrf)
     REAL fluxlat(klon, nbsrf)  
75    
76      REAL, intent(in):: rain_fall(klon)      REAL, intent(in):: rain_fall(klon)
77      ! liquid water mass flux (kg/m2/s), positive down      ! liquid water mass flux (kg/m2/s), positive down
# Line 82  contains Line 81  contains
81    
82      REAL, INTENT(IN):: solsw(klon, nbsrf), sollw(klon, nbsrf)      REAL, INTENT(IN):: solsw(klon, nbsrf), sollw(klon, nbsrf)
83      REAL, intent(in):: fder(klon)      REAL, intent(in):: fder(klon)
     REAL, INTENT(IN):: rlat(klon) ! latitude en degr\'es  
   
84      REAL, intent(inout):: rugos(klon, nbsrf) ! longueur de rugosit\'e (en m)      REAL, intent(inout):: rugos(klon, nbsrf) ! longueur de rugosit\'e (en m)
   
85      real agesno(klon, nbsrf)      real agesno(klon, nbsrf)
86      REAL, INTENT(IN):: rugoro(klon)      REAL, INTENT(IN):: rugoro(klon)
87    
# Line 96  contains Line 92  contains
92      REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)      REAL, intent(out):: d_u(klon, klev), d_v(klon, klev)
93      ! changement pour "u" et "v"      ! changement pour "u" et "v"
94    
95      REAL, intent(out):: d_ts(klon, nbsrf) ! le changement pour ftsol      REAL, intent(out):: d_ts(:, :) ! (klon, nbsrf) variation of ftsol
96    
97      REAL, intent(out):: flux_t(klon, nbsrf)      REAL, intent(out):: flux_t(klon, nbsrf)
98      ! flux de chaleur sensible (Cp T) (W/m2) (orientation positive vers      ! flux de chaleur sensible (Cp T) (W/m2) (orientation positive vers
# Line 119  contains Line 115  contains
115      REAL, intent(out):: ycoefh(klon, klev)      REAL, intent(out):: ycoefh(klon, klev)
116      REAL, intent(out):: zu1(klon)      REAL, intent(out):: zu1(klon)
117      REAL zv1(klon)      REAL zv1(klon)
118      REAL t2m(klon, nbsrf), q2m(klon, nbsrf)      REAL, INTENT(inout):: t2m(klon, nbsrf), q2m(klon, nbsrf)
119      REAL u10m(klon, nbsrf), v10m(klon, nbsrf)      REAL u10m(klon, nbsrf), v10m(klon, nbsrf)
120    
121      ! Ionela Musat cf. Anne Mathieu : planetary boundary layer, hbtm      ! Ionela Musat cf. Anne Mathieu : planetary boundary layer, hbtm
# Line 129  contains Line 125  contains
125      REAL capcl(klon, nbsrf)      REAL capcl(klon, nbsrf)
126      REAL oliqcl(klon, nbsrf)      REAL oliqcl(klon, nbsrf)
127      REAL cteicl(klon, nbsrf)      REAL cteicl(klon, nbsrf)
128      REAL pblt(klon, nbsrf)      REAL, INTENT(inout):: pblt(klon, nbsrf) ! T au nveau HCL
     ! pblT------- T au nveau HCL  
129      REAL therm(klon, nbsrf)      REAL therm(klon, nbsrf)
130      REAL trmb1(klon, nbsrf)      REAL trmb1(klon, nbsrf)
131      ! trmb1-------deep_cape      ! trmb1-------deep_cape
# Line 159  contains Line 154  contains
154      REAL ytsoil(klon, nsoilmx)      REAL ytsoil(klon, nsoilmx)
155      REAL yts(klon), yrugos(klon), ypct(klon), yz0_new(klon)      REAL yts(klon), yrugos(klon), ypct(klon), yz0_new(klon)
156      REAL yalb(klon)      REAL yalb(klon)
157    
158      REAL yu1(klon), yv1(klon)      REAL yu1(klon), yv1(klon)
159      ! on rajoute en output yu1 et yv1 qui sont les vents dans      ! On ajoute en output yu1 et yv1 qui sont les vents dans
160      ! la premiere couche      ! la premi\`ere couche.
161      REAL ysnow(klon), yqsurf(klon), yagesno(klon)      
162        REAL snow(klon), yqsurf(klon), yagesno(klon)
163    
164      real yqsol(klon)      real yqsol(klon)
165      ! column-density of water in soil, in kg m-2      ! column-density of water in soil, in kg m-2
# Line 175  contains Line 172  contains
172    
173      REAL yfder(klon)      REAL yfder(klon)
174      REAL yrugm(klon), yrads(klon), yrugoro(klon)      REAL yrugm(klon), yrads(klon), yrugoro(klon)
   
175      REAL yfluxlat(klon)      REAL yfluxlat(klon)
   
176      REAL y_d_ts(klon)      REAL y_d_ts(klon)
177      REAL y_d_t(klon, klev), y_d_q(klon, klev)      REAL y_d_t(klon, klev), y_d_q(klon, klev)
178      REAL y_d_u(klon, klev), y_d_v(klon, klev)      REAL y_d_u(klon, klev), y_d_v(klon, klev)
# Line 259  contains Line 254  contains
254      zu1 = 0.      zu1 = 0.
255      zv1 = 0.      zv1 = 0.
256      ypct = 0.      ypct = 0.
     yts = 0.  
     ysnow = 0.  
257      yqsurf = 0.      yqsurf = 0.
258      yrain_f = 0.      yrain_f = 0.
259      ysnow_f = 0.      ysnow_f = 0.
# Line 280  contains Line 273  contains
273      y_dflux_q = 0.      y_dflux_q = 0.
274      yrugoro = 0.      yrugoro = 0.
275      d_ts = 0.      d_ts = 0.
     yfluxlat = 0.  
276      flux_t = 0.      flux_t = 0.
277      flux_q = 0.      flux_q = 0.
278      flux_u = 0.      flux_u = 0.
279      flux_v = 0.      flux_v = 0.
280        fluxlat = 0.
281      d_t = 0.      d_t = 0.
282      d_q = 0.      d_q = 0.
283      d_u = 0.      d_u = 0.
# Line 302  contains Line 295  contains
295    
296      ! Tester si c'est le moment de lire le fichier:      ! Tester si c'est le moment de lire le fichier:
297      if (mod(itap - 1, lmt_pas) == 0) then      if (mod(itap - 1, lmt_pas) == 0) then
298         CALL interfoce_lim(jour, pctsrf_new_oce, pctsrf_new_sic)         CALL interfoce_lim(julien, pctsrf_new_oce, pctsrf_new_sic)
299      endif      endif
300    
301      ! Boucler sur toutes les sous-fractions du sol:      ! Boucler sur toutes les sous-fractions du sol:
# Line 325  contains Line 318  contains
318               i = ni(j)               i = ni(j)
319               ypct(j) = pctsrf(i, nsrf)               ypct(j) = pctsrf(i, nsrf)
320               yts(j) = ftsol(i, nsrf)               yts(j) = ftsol(i, nsrf)
321               ysnow(j) = snow(i, nsrf)               snow(j) = fsnow(i, nsrf)
322               yqsurf(j) = qsurf(i, nsrf)               yqsurf(j) = qsurf(i, nsrf)
323               yalb(j) = falbe(i, nsrf)               yalb(j) = falbe(i, nsrf)
324               yrain_f(j) = rain_fall(i)               yrain_f(j) = rain_fall(i)
# Line 364  contains Line 357  contains
357            END DO            END DO
358    
359            ! calculer Cdrag et les coefficients d'echange            ! calculer Cdrag et les coefficients d'echange
360            CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts, yrugos, yu, &            CALL coefkz(nsrf, ypaprs, ypplay, ksta, ksta_ter, yts(:knon), &
361                 yv, yt, yq, yqsurf, coefm(:knon, :), coefh(:knon, :))                 yrugos, yu, yv, yt, yq, yqsurf(:knon), coefm(:knon, :), &
362                   coefh(:knon, :))
363            IF (iflag_pbl == 1) THEN            IF (iflag_pbl == 1) THEN
364               CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0, ycoefh0)               CALL coefkz2(nsrf, knon, ypaprs, ypplay, yt, ycoefm0, ycoefh0)
365               coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :))               coefm(:knon, :) = max(coefm(:knon, :), ycoefm0(:knon, :))
# Line 440  contains Line 434  contains
434                 ypplay, ydelp, y_d_v, y_flux_v(:knon))                 ypplay, ydelp, y_d_v, y_flux_v(:knon))
435    
436            ! calculer la diffusion de "q" et de "h"            ! calculer la diffusion de "q" et de "h"
437            CALL clqh(dtime, jour, firstcal, rlat, nsrf, ni(:knon), &            CALL clqh(dtime, julien, firstcal, nsrf, ni(:knon), &
438                 ytsoil(:knon, :), yqsol, rmu0, yrugos, yrugoro, yu1, yv1, &                 ytsoil(:knon, :), yqsol, mu0, yrugos, yrugoro, yu1, yv1, &
439                 coefh(:knon, :), yt, yq, yts(:knon), ypaprs, ypplay, ydelp, &                 coefh(:knon, :), yt, yq, yts(:knon), ypaprs, ypplay, ydelp, &
440                 yrads, yalb(:knon), ysnow, yqsurf, yrain_f, ysnow_f, yfder, &                 yrads, yalb(:knon), snow(:knon), yqsurf, yrain_f, ysnow_f, &
441                 yfluxlat, pctsrf_new_sic, yagesno(:knon), y_d_t, y_d_q, &                 yfder, yfluxlat(:knon), pctsrf_new_sic, yagesno(:knon), y_d_t, &
442                 y_d_ts(:knon), yz0_new, y_flux_t(:knon), y_flux_q(:knon), &                 y_d_q, y_d_ts(:knon), yz0_new, y_flux_t(:knon), &
443                 y_dflux_t, y_dflux_q, y_fqcalving, y_ffonte, y_run_off_lic_0)                 y_flux_q(:knon), y_dflux_t, y_dflux_q, y_fqcalving, y_ffonte, &
444                   y_run_off_lic_0)
445    
446            ! calculer la longueur de rugosite sur ocean            ! calculer la longueur de rugosite sur ocean
447            yrugm = 0.            yrugm = 0.
# Line 476  contains Line 471  contains
471               END DO               END DO
472            END DO            END DO
473    
474            DO j = 1, knon            flux_t(ni(:knon), nsrf) = y_flux_t(:knon)
475               i = ni(j)            flux_q(ni(:knon), nsrf) = y_flux_q(:knon)
476               flux_t(i, nsrf) = y_flux_t(j)            flux_u(ni(:knon), nsrf) = y_flux_u(:knon)
477               flux_q(i, nsrf) = y_flux_q(j)            flux_v(ni(:knon), nsrf) = y_flux_v(:knon)
              flux_u(i, nsrf) = y_flux_u(j)  
              flux_v(i, nsrf) = y_flux_v(j)  
           END DO  
478    
479            evap(:, nsrf) = -flux_q(:, nsrf)            evap(:, nsrf) = -flux_q(:, nsrf)
480    
481            falbe(:, nsrf) = 0.            falbe(:, nsrf) = 0.
482            snow(:, nsrf) = 0.            fsnow(:, nsrf) = 0.
483            qsurf(:, nsrf) = 0.            qsurf(:, nsrf) = 0.
484            rugos(:, nsrf) = 0.            rugos(:, nsrf) = 0.
           fluxlat(:, nsrf) = 0.  
485            DO j = 1, knon            DO j = 1, knon
486               i = ni(j)               i = ni(j)
487               d_ts(i, nsrf) = y_d_ts(j)               d_ts(i, nsrf) = y_d_ts(j)
488               falbe(i, nsrf) = yalb(j)               falbe(i, nsrf) = yalb(j)
489               snow(i, nsrf) = ysnow(j)               fsnow(i, nsrf) = snow(j)
490               qsurf(i, nsrf) = yqsurf(j)               qsurf(i, nsrf) = yqsurf(j)
491               rugos(i, nsrf) = yz0_new(j)               rugos(i, nsrf) = yz0_new(j)
492               fluxlat(i, nsrf) = yfluxlat(j)               fluxlat(i, nsrf) = yfluxlat(j)
# Line 595  contains Line 586  contains
586                  q2(i, k, nsrf) = yq2(j, k)                  q2(i, k, nsrf) = yq2(j, k)
587               END DO               END DO
588            END DO            END DO
589           else
590              fsnow(:, nsrf) = 0.
591         end IF if_knon         end IF if_knon
592      END DO loop_surface      END DO loop_surface
593    

Legend:
Removed from v.208  
changed lines
  Added in v.221

  ViewVC Help
Powered by ViewVC 1.1.21