/[lmdze]/trunk/phylmd/physiq.f
ViewVC logotype

Diff of /trunk/phylmd/physiq.f

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

revision 209 by guez, Wed Dec 7 17:37:21 2016 UTC revision 217 by guez, Thu Mar 30 14:25:18 2017 UTC
# Line 57  contains Line 57  contains
57      USE phytrac_m, ONLY: phytrac      USE phytrac_m, ONLY: phytrac
58      use radlwsw_m, only: radlwsw      use radlwsw_m, only: radlwsw
59      use yoegwd, only: sugwd      use yoegwd, only: sugwd
60      USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt      USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt, rmo3, md
61      use time_phylmdz, only: itap, increment_itap      use time_phylmdz, only: itap, increment_itap
62      use transp_m, only: transp      use transp_m, only: transp
63      use transp_lay_m, only: transp_lay      use transp_lay_m, only: transp_lay
# Line 151  contains Line 151  contains
151      ! soil temperature of surface fraction      ! soil temperature of surface fraction
152    
153      REAL, save:: fevap(klon, nbsrf) ! evaporation      REAL, save:: fevap(klon, nbsrf) ! evaporation
154      REAL, save:: fluxlat(klon, nbsrf)      REAL fluxlat(klon, nbsrf)
155    
156      REAL, save:: fqsurf(klon, nbsrf)      REAL, save:: fqsurf(klon, nbsrf)
157      ! humidite de l'air au contact de la surface      ! humidite de l'air au contact de la surface
158    
159      REAL, save:: qsol(klon)      REAL, save:: qsol(klon) ! column-density of water in soil, in kg m-2
160      ! column-density of water in soil, in kg m-2      REAL, save:: fsnow(klon, nbsrf) ! \'epaisseur neigeuse
   
     REAL, save:: fsnow(klon, nbsrf) ! epaisseur neigeuse  
161      REAL, save:: falbe(klon, nbsrf) ! albedo visible par type de surface      REAL, save:: falbe(klon, nbsrf) ! albedo visible par type de surface
162    
163      ! Param\`etres de l'orographie \`a l'\'echelle sous-maille (OESM) :      ! Param\`etres de l'orographie \`a l'\'echelle sous-maille (OESM) :
# Line 206  contains Line 204  contains
204      REAL, save:: pfrac_1nucl(klon, llm)      REAL, save:: pfrac_1nucl(klon, llm)
205      ! Produits des coefs lessi nucl (alpha = 1)      ! Produits des coefs lessi nucl (alpha = 1)
206    
207      REAL frac_impa(klon, llm) ! fractions d'aerosols lessivees (impaction)      REAL frac_impa(klon, llm) ! fraction d'a\'erosols lessiv\'es (impaction)
208      REAL frac_nucl(klon, llm) ! idem (nucleation)      REAL frac_nucl(klon, llm) ! idem (nucleation)
209    
210      REAL, save:: rain_fall(klon)      REAL, save:: rain_fall(klon)
# Line 236  contains Line 234  contains
234    
235      INTEGER julien      INTEGER julien
236      REAL, save:: pctsrf(klon, nbsrf) ! percentage of surface      REAL, save:: pctsrf(klon, nbsrf) ! percentage of surface
237      REAL, save:: albsol(klon) ! albedo du sol total visible      REAL, save:: albsol(klon) ! albedo du sol total, visible, moyen par maille
238      REAL, SAVE:: wo(klon, llm) ! column density of ozone in a cell, in kDU      REAL, SAVE:: wo(klon, llm) ! column density of ozone in a cell, in kDU
239        real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
240    
241      real, save:: clwcon(klon, llm), rnebcon(klon, llm)      real, save:: clwcon(klon, llm), rnebcon(klon, llm)
242      real, save:: clwcon0(klon, llm), rnebcon0(klon, llm)      real, save:: clwcon0(klon, llm), rnebcon0(klon, llm)
# Line 275  contains Line 274  contains
274      REAL cldl(klon), cldm(klon), cldh(klon) ! nuages bas, moyen et haut      REAL cldl(klon), cldm(klon), cldh(klon) ! nuages bas, moyen et haut
275      REAL cldt(klon), cldq(klon) ! nuage total, eau liquide integree      REAL cldt(klon), cldq(klon) ! nuage total, eau liquide integree
276    
277      REAL zxqsurf(klon), zxsnow(klon), zxfluxlat(klon)      REAL zxqsurf(klon), zxfluxlat(klon)
278    
279      REAL dist, mu0(klon), fract(klon)      REAL dist, mu0(klon), fract(klon)
280      real longi      real longi
# Line 386  contains Line 385  contains
385      REAL ztsol(klon)      REAL ztsol(klon)
386    
387      REAL d_t_ec(klon, llm)      REAL d_t_ec(klon, llm)
388      ! tendance due \`a la conversion Ec en énergie thermique      ! tendance due \`a la conversion d'\'energie cin\'etique en
389        ! énergie thermique
     REAL ZRCPD  
390    
391      REAL, save:: t2m(klon, nbsrf), q2m(klon, nbsrf)      REAL, save:: t2m(klon, nbsrf), q2m(klon, nbsrf)
392      ! temperature and humidity at 2 m      ! temperature and humidity at 2 m
# Line 399  contains Line 397  contains
397    
398      ! Aerosol effects:      ! Aerosol effects:
399    
     REAL sulfate(klon, llm) ! SO4 aerosol concentration (micro g / m3)  
   
     REAL, save:: sulfate_pi(klon, llm)  
     ! SO4 aerosol concentration, in \mu g / m3, pre-industrial value  
   
     REAL cldtaupi(klon, llm)  
     ! cloud optical thickness for pre-industrial aerosols  
   
     REAL re(klon, llm) ! Cloud droplet effective radius  
     REAL fl(klon, llm) ! denominator of re  
   
     ! Aerosol optical properties  
     REAL, save:: tau_ae(klon, llm, 2), piz_ae(klon, llm, 2)  
     REAL, save:: cg_ae(klon, llm, 2)  
   
400      REAL, save:: topswad(klon), solswad(klon) ! aerosol direct effect      REAL, save:: topswad(klon), solswad(klon) ! aerosol direct effect
     REAL, save:: topswai(klon), solswai(klon) ! aerosol indirect effect  
   
401      LOGICAL:: ok_ade = .false. ! apply aerosol direct effect      LOGICAL:: ok_ade = .false. ! apply aerosol direct effect
     LOGICAL:: ok_aie = .false. ! apply aerosol indirect effect  
402    
403      REAL:: bl95_b0 = 2., bl95_b1 = 0.2      REAL:: bl95_b0 = 2., bl95_b1 = 0.2
404      ! Parameters in equation (D) of Boucher and Lohmann (1995, Tellus      ! Parameters in equation (D) of Boucher and Lohmann (1995, Tellus
# Line 431  contains Line 411  contains
411      integer, save:: ncid_startphy      integer, save:: ncid_startphy
412    
413      namelist /physiq_nml/ fact_cldcon, facttemps, ok_newmicro, iflag_cldcon, &      namelist /physiq_nml/ fact_cldcon, facttemps, ok_newmicro, iflag_cldcon, &
414           ratqsbas, ratqshaut, ok_ade, ok_aie, bl95_b0, bl95_b1, &           ratqsbas, ratqshaut, ok_ade, bl95_b0, bl95_b1, iflag_thermals, &
415           iflag_thermals, nsplit_thermals           nsplit_thermals
416    
417      !----------------------------------------------------------------      !----------------------------------------------------------------
418    
# Line 447  contains Line 427  contains
427         q2m = 0.         q2m = 0.
428         ffonte = 0.         ffonte = 0.
429         fqcalving = 0.         fqcalving = 0.
        piz_ae = 0.  
        tau_ae = 0.  
        cg_ae = 0.  
430         rain_con = 0.         rain_con = 0.
431         snow_con = 0.         snow_con = 0.
        topswai = 0.  
        topswad = 0.  
        solswai = 0.  
        solswad = 0.  
   
432         d_u_con = 0.         d_u_con = 0.
433         d_v_con = 0.         d_v_con = 0.
434         rnebcon0 = 0.         rnebcon0 = 0.
435         clwcon0 = 0.         clwcon0 = 0.
436         rnebcon = 0.         rnebcon = 0.
437         clwcon = 0.         clwcon = 0.
   
438         pblh =0. ! Hauteur de couche limite         pblh =0. ! Hauteur de couche limite
439         plcl =0. ! Niveau de condensation de la CLA         plcl =0. ! Niveau de condensation de la CLA
440         capCL =0. ! CAPE de couche limite         capCL =0. ! CAPE de couche limite
# Line 515  contains Line 486  contains
486    
487         ! Initialisation des sorties         ! Initialisation des sorties
488    
489         call ini_histins(dtphys)         call ini_histins(dtphys, ok_newmicro)
490         CALL ymds2ju(annee_ref, 1, day_ref, 0., date0)         CALL ymds2ju(annee_ref, 1, day_ref, 0., date0)
491         ! Positionner date0 pour initialisation de ORCHIDEE         ! Positionner date0 pour initialisation de ORCHIDEE
492         print *, 'physiq date0: ', date0         print *, 'physiq date0: ', date0
# Line 567  contains Line 538  contains
538    
539      forall (k = 1: llm) zmasse(:, k) = (paprs(:, k) - paprs(:, k + 1)) / rg      forall (k = 1: llm) zmasse(:, k) = (paprs(:, k) - paprs(:, k + 1)) / rg
540    
     ! Prescrire l'ozone :  
     wo = ozonecm(REAL(julien), paprs)  
   
541      ! \'Evaporation de l'eau liquide nuageuse :      ! \'Evaporation de l'eau liquide nuageuse :
542      DO k = 1, llm      DO k = 1, llm
543         DO i = 1, klon         DO i = 1, klon
# Line 589  contains Line 557  contains
557    
558      CALL orbite(REAL(julien), longi, dist)      CALL orbite(REAL(julien), longi, dist)
559      CALL zenang(longi, time, dtphys * radpas, mu0, fract)      CALL zenang(longi, time, dtphys * radpas, mu0, fract)
   
     ! Calcul de l'abedo moyen par maille  
560      albsol = sum(falbe * pctsrf, dim = 2)      albsol = sum(falbe * pctsrf, dim = 2)
561    
562      ! R\'epartition sous maille des flux longwave et shortwave      ! R\'epartition sous maille des flux longwave et shortwave
# Line 902  contains Line 868  contains
868         ENDDO         ENDDO
869      ENDDO      ENDDO
870    
     ! Introduce the aerosol direct and first indirect radiative forcings:  
     tau_ae = 0.  
     piz_ae = 0.  
     cg_ae = 0.  
   
871      ! Param\`etres optiques des nuages et quelques param\`etres pour      ! Param\`etres optiques des nuages et quelques param\`etres pour
872      ! diagnostics :      ! diagnostics :
873      if (ok_newmicro) then      if (ok_newmicro) then
874         CALL newmicro(paprs, play, t_seri, cldliq, cldfra, cldtau, cldemi, &         CALL newmicro(paprs, play, t_seri, cldliq, cldfra, cldtau, cldemi, &
875              cldh, cldl, cldm, cldt, cldq, flwp, fiwp, flwc, fiwc, ok_aie, &              cldh, cldl, cldm, cldt, cldq, flwp, fiwp, flwc, fiwc)
             sulfate, sulfate_pi, bl95_b0, bl95_b1, cldtaupi, re, fl)  
876      else      else
877         CALL nuage(paprs, play, t_seri, cldliq, cldfra, cldtau, cldemi, cldh, &         CALL nuage(paprs, play, t_seri, cldliq, cldfra, cldtau, cldemi, cldh, &
878              cldl, cldm, cldt, cldq, ok_aie, sulfate, sulfate_pi, bl95_b0, &              cldl, cldm, cldt, cldq)
             bl95_b1, cldtaupi, re, fl)  
879      endif      endif
880    
881      IF (MOD(itap - 1, radpas) == 0) THEN      IF (MOD(itap - 1, radpas) == 0) THEN
882         ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol.         wo = ozonecm(REAL(julien), paprs)
        ! Calcul de l'abedo moyen par maille  
883         albsol = sum(falbe * pctsrf, dim = 2)         albsol = sum(falbe * pctsrf, dim = 2)
   
        ! Rayonnement (compatible Arpege-IFS) :  
884         CALL radlwsw(dist, mu0, fract, paprs, play, ztsol, albsol, t_seri, &         CALL radlwsw(dist, mu0, fract, paprs, play, ztsol, albsol, t_seri, &
885              q_seri, wo, cldfra, cldemi, cldtau, heat, heat0, cool, cool0, &              q_seri, wo, cldfra, cldemi, cldtau, heat, heat0, cool, cool0, &
886              radsol, albpla, topsw, toplw, solsw, sollw, sollwdown, topsw0, &              radsol, albpla, topsw, toplw, solsw, sollw, sollwdown, topsw0, &
887              toplw0, solsw0, sollw0, lwdn0, lwdn, lwup0, lwup, swdn0, swdn, &              toplw0, solsw0, sollw0, lwdn0, lwdn, lwup0, lwup, swdn0, swdn, &
888              swup0, swup, ok_ade, ok_aie, tau_ae, piz_ae, cg_ae, topswad, &              swup0, swup, ok_ade, topswad, solswad)
             solswad, cldtaupi, topswai, solswai)  
889      ENDIF      ENDIF
890    
891      ! Ajouter la tendance des rayonnements (tous les pas)      ! Ajouter la tendance des rayonnements (tous les pas)
# Line 943  contains Line 898  contains
898    
899      ! Calculer l'hydrologie de la surface      ! Calculer l'hydrologie de la surface
900      zxqsurf = sum(fqsurf * pctsrf, dim = 2)      zxqsurf = sum(fqsurf * pctsrf, dim = 2)
     zxsnow = sum(fsnow * pctsrf, dim = 2)  
901    
902      ! Calculer le bilan du sol et la d\'erive de temp\'erature (couplage)      ! Calculer le bilan du sol et la d\'erive de temp\'erature (couplage)
903      DO i = 1, klon      DO i = 1, klon
# Line 1043  contains Line 997  contains
997      ! conversion Ec en énergie thermique      ! conversion Ec en énergie thermique
998      DO k = 1, llm      DO k = 1, llm
999         DO i = 1, klon         DO i = 1, klon
1000            ZRCPD = RCPD * (1. + RVTMP2 * q_seri(i, k))            d_t_ec(i, k) = 0.5 / (RCPD * (1. + RVTMP2 * q_seri(i, k))) &
           d_t_ec(i, k) = 0.5 / ZRCPD &  
1001                 * (u(i, k)**2 + v(i, k)**2 - u_seri(i, k)**2 - v_seri(i, k)**2)                 * (u(i, k)**2 + v(i, k)**2 - u_seri(i, k)**2 - v_seri(i, k)**2)
1002            t_seri(i, k) = t_seri(i, k) + d_t_ec(i, k)            t_seri(i, k) = t_seri(i, k) + d_t_ec(i, k)
1003            d_t_ec(i, k) = d_t_ec(i, k) / dtphys            d_t_ec(i, k) = d_t_ec(i, k) / dtphys
# Line 1129  contains Line 1082  contains
1082      END DO      END DO
1083    
1084      CALL histwrite_phy("albs", albsol)      CALL histwrite_phy("albs", albsol)
1085        CALL histwrite_phy("tro3", wo * dobson_u * 1e3 / zmasse / rmo3 * md)
1086      CALL histwrite_phy("rugs", zxrugs)      CALL histwrite_phy("rugs", zxrugs)
1087      CALL histwrite_phy("s_pblh", s_pblh)      CALL histwrite_phy("s_pblh", s_pblh)
1088      CALL histwrite_phy("s_pblt", s_pblt)      CALL histwrite_phy("s_pblt", s_pblt)
# Line 1154  contains Line 1108  contains
1108      CALL histwrite_phy("dtvdf", d_t_vdf)      CALL histwrite_phy("dtvdf", d_t_vdf)
1109      CALL histwrite_phy("dqvdf", d_q_vdf)      CALL histwrite_phy("dqvdf", d_q_vdf)
1110      CALL histwrite_phy("rhum", zx_rh)      CALL histwrite_phy("rhum", zx_rh)
1111        CALL histwrite_phy("d_t_ec", d_t_ec)
1112        CALL histwrite_phy("dtsw0", heat0 / 86400.)
1113        CALL histwrite_phy("dtlw0", - cool0 / 86400.)
1114        CALL histwrite_phy("msnow", sum(fsnow * pctsrf, dim = 2))
1115    
1116      if (ok_instan) call histsync(nid_ins)      if (ok_instan) call histsync(nid_ins)
1117    

Legend:
Removed from v.209  
changed lines
  Added in v.217

  ViewVC Help
Powered by ViewVC 1.1.21