/[lmdze]/trunk/libf/phylmd/physiq.f90
ViewVC logotype

Diff of /trunk/libf/phylmd/physiq.f90

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

revision 12 by guez, Mon Jul 21 16:05:07 2008 UTC revision 13 by guez, Fri Jul 25 19:59:34 2008 UTC
# Line 10  module physiq_m Line 10  module physiq_m
10  contains  contains
11    
12    SUBROUTINE physiq(nq, firstcal, lafin, rdayvrai, gmtime, pdtphys, paprs, &    SUBROUTINE physiq(nq, firstcal, lafin, rdayvrai, gmtime, pdtphys, paprs, &
13         pplay, pphi, pphis, presnivs, clesphy0, u, v, t, qx, omega, d_u, d_v, &         pplay, pphi, pphis, presnivs, u, v, t, qx, omega, d_u, d_v, &
14         d_t, d_qx, d_ps, dudyn, PVteta)         d_t, d_qx, d_ps, dudyn, PVteta)
15    
16      ! From phylmd/physiq.F, v 1.22 2006/02/20 09:38:28      ! From phylmd/physiq.F, v 1.22 2006/02/20 09:38:28
# Line 319  contains Line 319  contains
319    
320      INTEGER        longcles      INTEGER        longcles
321      PARAMETER    ( longcles = 20 )      PARAMETER    ( longcles = 20 )
     REAL, intent(in):: clesphy0( longcles      )  
322    
323      ! Variables propres a la physique      ! Variables propres a la physique
324    
# Line 357  contains Line 356  contains
356      REAL falblw(klon, nbsrf)      REAL falblw(klon, nbsrf)
357      SAVE falblw                 ! albedo par type de surface      SAVE falblw                 ! albedo par type de surface
358    
359      !  Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):      ! Paramètres de l'orographie à l'échelle sous-maille (OESM) :
360        REAL, save:: zmea(klon) ! orographie moyenne
361      REAL zmea(klon)      REAL, save:: zstd(klon) ! deviation standard de l'OESM
362      SAVE zmea                   ! orographie moyenne      REAL, save:: zsig(klon) ! pente de l'OESM
363        REAL, save:: zgam(klon) ! anisotropie de l'OESM
364      REAL zstd(klon)      REAL, save:: zthe(klon) ! orientation de l'OESM
365      SAVE zstd                   ! deviation standard de l'OESM      REAL, save:: zpic(klon) ! Maximum de l'OESM
366        REAL, save:: zval(klon) ! Minimum de l'OESM
367      REAL zsig(klon)      REAL, save:: rugoro(klon) ! longueur de rugosite de l'OESM
     SAVE zsig                   ! pente de l'OESM  
   
     REAL zgam(klon)  
     save zgam                   ! anisotropie de l'OESM  
   
     REAL zthe(klon)  
     SAVE zthe                   ! orientation de l'OESM  
   
     REAL zpic(klon)  
     SAVE zpic                   ! Maximum de l'OESM  
   
     REAL zval(klon)  
     SAVE zval                   ! Minimum de l'OESM  
   
     REAL rugoro(klon)  
     SAVE rugoro                 ! longueur de rugosite de l'OESM  
368    
369      REAL zulow(klon), zvlow(klon)      REAL zulow(klon), zvlow(klon)
370    
# Line 794  contains Line 777  contains
777      ok_sync=.TRUE.      ok_sync=.TRUE.
778      IF (nq  <  2) THEN      IF (nq  <  2) THEN
779         abort_message = 'eaux vapeur et liquide sont indispensables'         abort_message = 'eaux vapeur et liquide sont indispensables'
780         CALL abort_gcm (modname, abort_message, 1)         CALL abort_gcm(modname, abort_message, 1)
781      ENDIF      ENDIF
782    
783      test_firstcal: IF (firstcal) THEN      test_firstcal: IF (firstcal) THEN
784         !  initialiser         !  initialiser
785         u10m(:, :)=0.         u10m=0.
786         v10m(:, :)=0.         v10m=0.
787         t2m(:, :)=0.         t2m=0.
788         q2m(:, :)=0.         q2m=0.
789         ffonte(:, :)=0.         ffonte=0.
790         fqcalving(:, :)=0.         fqcalving=0.
791         piz_ae(:, :, :)=0.         piz_ae(:, :, :)=0.
792         tau_ae(:, :, :)=0.         tau_ae(:, :, :)=0.
793         cg_ae(:, :, :)=0.         cg_ae(:, :, :)=0.
# Line 817  contains Line 800  contains
800         solswai(:)=0.         solswai(:)=0.
801         solswad(:)=0.         solswad(:)=0.
802    
803         d_u_con(:, :) = 0.0         d_u_con = 0.0
804         d_v_con(:, :) = 0.0         d_v_con = 0.0
805         rnebcon0(:, :) = 0.0         rnebcon0 = 0.0
806         clwcon0(:, :) = 0.0         clwcon0 = 0.0
807         rnebcon(:, :) = 0.0         rnebcon = 0.0
808         clwcon(:, :) = 0.0         clwcon = 0.0
809    
810         pblh(:, :)   =0.        ! Hauteur de couche limite         pblh   =0.        ! Hauteur de couche limite
811         plcl(:, :)   =0.        ! Niveau de condensation de la CLA         plcl   =0.        ! Niveau de condensation de la CLA
812         capCL(:, :)  =0.        ! CAPE de couche limite         capCL  =0.        ! CAPE de couche limite
813         oliqCL(:, :) =0.        ! eau_liqu integree de couche limite         oliqCL =0.        ! eau_liqu integree de couche limite
814         cteiCL(:, :) =0.        ! cloud top instab. crit. couche limite         cteiCL =0.        ! cloud top instab. crit. couche limite
815         pblt(:, :)   =0.        ! T a la Hauteur de couche limite         pblt   =0.        ! T a la Hauteur de couche limite
816         therm(:, :)  =0.         therm  =0.
817         trmb1(:, :)  =0.        ! deep_cape         trmb1  =0.        ! deep_cape
818         trmb2(:, :)  =0.        ! inhibition         trmb2  =0.        ! inhibition
819         trmb3(:, :)  =0.        ! Point Omega         trmb3  =0.        ! Point Omega
820    
821         IF (if_ebil >= 1) d_h_vcol_phy=0.         IF (if_ebil >= 1) d_h_vcol_phy=0.
822    
# Line 854  contains Line 837  contains
837         CALL phyetat0("startphy.nc", pctsrf, ftsol, ftsoil, ocean, tslab, &         CALL phyetat0("startphy.nc", pctsrf, ftsol, ftsoil, ocean, tslab, &
838              seaice, fqsurf, qsol, fsnow, &              seaice, fqsurf, qsol, fsnow, &
839              falbe, falblw, fevap, rain_fall, snow_fall, solsw, sollwdown, &              falbe, falblw, fevap, rain_fall, snow_fall, solsw, sollwdown, &
840              dlw, radsol, frugs, agesno, clesphy0, &              dlw, radsol, frugs, agesno, &
841              zmea, zstd, zsig, zgam, zthe, zpic, zval, rugoro, &              zmea, zstd, zsig, zgam, zthe, zpic, zval, &
842              t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon,  &              t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon,  &
843              run_off_lic_0)              run_off_lic_0)
844    
# Line 904  contains Line 887  contains
887         ENDIF         ENDIF
888    
889         IF (ok_orodr) THEN         IF (ok_orodr) THEN
890            DO i=1, klon            rugoro = MAX(1e-5, zstd * zsig / 2)
              rugoro(i) = MAX(1.0e-05, zstd(i)*zsig(i)/2.0)  
           ENDDO  
891            CALL SUGWD(klon, llm, paprs, pplay)            CALL SUGWD(klon, llm, paprs, pplay)
892           else
893              rugoro = 0.
894         ENDIF         ENDIF
895    
896         lmt_pas = NINT(86400. / pdtphys)  ! tous les jours         lmt_pas = NINT(86400. / pdtphys)  ! tous les jours
# Line 956  contains Line 939  contains
939            ENDDO            ENDDO
940         ENDDO         ENDDO
941      ENDDO      ENDDO
942      da(:, :)=0.      da=0.
943      mp(:, :)=0.      mp=0.
944      phi(:, :, :)=0.      phi(:, :, :)=0.
945    
946      ! Ne pas affecter les valeurs entrees de u, v, h, et q      ! Ne pas affecter les valeurs entrees de u, v, h, et q
# Line 1332  contains Line 1315  contains
1315         ! (driver commun aux versions 3 et 4)         ! (driver commun aux versions 3 et 4)
1316    
1317         IF (ok_cvl) THEN ! new driver for convectL         IF (ok_cvl) THEN ! new driver for convectL
   
1318            CALL concvl (iflag_con, &            CALL concvl (iflag_con, &
1319                 pdtphys, paprs, pplay, t_seri, q_seri, &                 pdtphys, paprs, pplay, t_seri, q_seri, &
1320                 u_seri, v_seri, tr_seri, ntra, &                 u_seri, v_seri, tr_seri, ntra, &
# Line 1346  contains Line 1328  contains
1328                 da, phi, mp)                 da, phi, mp)
1329    
1330            clwcon0=qcondc            clwcon0=qcondc
1331            pmfu(:, :)=upwd(:, :)+dnwd(:, :)            pmfu=upwd+dnwd
   
1332         ELSE ! ok_cvl         ELSE ! ok_cvl
1333            ! MAF conema3 ne contient pas les traceurs            ! MAF conema3 ne contient pas les traceurs
1334            CALL conema3 (pdtphys, &            CALL conema3 (pdtphys, &
# Line 1361  contains Line 1342  contains
1342                 pbase &                 pbase &
1343                 , bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr &                 , bbase, dtvpdt1, dtvpdq1, dplcldt, dplcldr &
1344                 , clwcon0)                 , clwcon0)
   
1345         ENDIF ! ok_cvl         ENDIF ! ok_cvl
1346    
1347         IF (.NOT. ok_gust) THEN         IF (.NOT. ok_gust) THEN
# Line 1393  contains Line 1373  contains
1373         ENDDO         ENDDO
1374    
1375         !   calcul des proprietes des nuages convectifs         !   calcul des proprietes des nuages convectifs
1376         clwcon0(:, :)=fact_cldcon*clwcon0(:, :)         clwcon0=fact_cldcon*clwcon0
1377         call clouds_gno &         call clouds_gno &
1378              (klon, llm, q_seri, zqsat, clwcon0, ptconv, ratqsc, rnebcon0)              (klon, llm, q_seri, zqsat, clwcon0, ptconv, ratqsc, rnebcon0)
1379      ELSE      ELSE
# Line 1462  contains Line 1442  contains
1442    
1443      ! Convection seche (thermiques ou ajustement)      ! Convection seche (thermiques ou ajustement)
1444    
1445      d_t_ajs(:, :)=0.      d_t_ajs=0.
1446      d_u_ajs(:, :)=0.      d_u_ajs=0.
1447      d_v_ajs(:, :)=0.      d_v_ajs=0.
1448      d_q_ajs(:, :)=0.      d_q_ajs=0.
1449      fm_therm(:, :)=0.      fm_therm=0.
1450      entr_therm(:, :)=0.      entr_therm=0.
1451    
1452      IF(prt_level>9)print *, &      IF(prt_level>9)print *, &
1453           'AVANT LA CONVECTION SECHE, iflag_thermals=' &           'AVANT LA CONVECTION SECHE, iflag_thermals=' &
# Line 1479  contains Line 1459  contains
1459         !  Ajustement sec         !  Ajustement sec
1460         IF(prt_level>9)print *,'ajsec'         IF(prt_level>9)print *,'ajsec'
1461         CALL ajsec(paprs, pplay, t_seri, q_seri, d_t_ajs, d_q_ajs)         CALL ajsec(paprs, pplay, t_seri, q_seri, d_t_ajs, d_q_ajs)
1462         t_seri(:, :) = t_seri(:, :) + d_t_ajs(:, :)         t_seri = t_seri + d_t_ajs
1463         q_seri(:, :) = q_seri(:, :) + d_q_ajs(:, :)         q_seri = q_seri + d_q_ajs
1464      else      else
1465         !  Thermiques         !  Thermiques
1466         IF(prt_level>9)print *,'JUSTE AVANT, iflag_thermals=' &         IF(prt_level>9)print *,'JUSTE AVANT, iflag_thermals=' &
# Line 1531  contains Line 1511  contains
1511         !   1e4 (en gros 3 heures), en dur pour le moment, est le temps de         !   1e4 (en gros 3 heures), en dur pour le moment, est le temps de
1512         !   relaxation des ratqs         !   relaxation des ratqs
1513         facteur=exp(-pdtphys*facttemps)         facteur=exp(-pdtphys*facttemps)
1514         ratqs(:, :)=max(ratqs(:, :)*facteur, ratqss(:, :))         ratqs=max(ratqs*facteur, ratqss)
1515         ratqs(:, :)=max(ratqs(:, :), ratqsc(:, :))         ratqs=max(ratqs, ratqsc)
1516      else      else
1517         !   on ne prend que le ratqs stable pour fisrtilp         !   on ne prend que le ratqs stable pour fisrtilp
1518         ratqs(:, :)=ratqss(:, :)         ratqs=ratqss
1519      endif      endif
1520    
1521      ! Appeler le processus de condensation a grande echelle      ! Appeler le processus de condensation a grande echelle
# Line 1635  contains Line 1615  contains
1615         enddo         enddo
1616    
1617         !   On prend la somme des fractions nuageuses et des contenus en eau         !   On prend la somme des fractions nuageuses et des contenus en eau
1618         cldfra(:, :)=min(max(cldfra(:, :), rnebcon(:, :)), 1.)         cldfra=min(max(cldfra, rnebcon), 1.)
1619         cldliq(:, :)=cldliq(:, :)+rnebcon(:, :)*clwcon(:, :)         cldliq=cldliq+rnebcon*clwcon
1620    
1621      ENDIF      ENDIF
1622    
# Line 1802  contains Line 1782  contains
1782         bils(i) = radsol(i) - sens(i) + zxfluxlat(i)         bils(i) = radsol(i) - sens(i) + zxfluxlat(i)
1783      ENDDO      ENDDO
1784    
1785      !moddeblott(jan95)      !mod deb lott(jan95)
1786      ! Appeler le programme de parametrisation de l'orographie      ! Appeler le programme de parametrisation de l'orographie
1787      ! a l'echelle sous-maille:      ! a l'echelle sous-maille:
1788    
1789      IF (ok_orodr) THEN      IF (ok_orodr) THEN
   
1790         !  selection des points pour lesquels le shema est actif:         !  selection des points pour lesquels le shema est actif:
1791         igwd=0         igwd=0
1792         DO i=1, klon         DO i=1, klon
# Line 1834  contains Line 1813  contains
1813               v_seri(i, k) = v_seri(i, k) + d_v_oro(i, k)               v_seri(i, k) = v_seri(i, k) + d_v_oro(i, k)
1814            ENDDO            ENDDO
1815         ENDDO         ENDDO
1816        ENDIF
     ENDIF ! fin de test sur ok_orodr  
1817    
1818      IF (ok_orolf) THEN      IF (ok_orolf) THEN
1819    
# Line 2000  contains Line 1978  contains
1978         DO iq = 3, nq         DO iq = 3, nq
1979            DO  k = 1, llm            DO  k = 1, llm
1980               DO  i = 1, klon               DO  i = 1, klon
1981                  d_qx(i, k, iq) = ( tr_seri(i, k, iq-2) - qx(i, k, iq) ) / pdtphys                  d_qx(i, k, iq) = (tr_seri(i, k, iq-2) - qx(i, k, iq)) / pdtphys
1982               ENDDO               ENDDO
1983            ENDDO            ENDDO
1984         ENDDO         ENDDO
# Line 2025  contains Line 2003  contains
2003    
2004      IF (lafin) THEN      IF (lafin) THEN
2005         itau_phy = itau_phy + itap         itau_phy = itau_phy + itap
2006         CALL phyredem ("restartphy.nc", radpas, rlat, rlon, pctsrf, ftsol, &         CALL phyredem("restartphy.nc", rlat, rlon, pctsrf, ftsol, &
2007              ftsoil, tslab, seaice, fqsurf, qsol, &              ftsoil, tslab, seaice, fqsurf, qsol, &
2008              fsnow, falbe, falblw, fevap, rain_fall, snow_fall, &              fsnow, falbe, falblw, fevap, rain_fall, snow_fall, &
2009              solsw, sollwdown, dlw, &              solsw, sollwdown, dlw, &
2010              radsol, frugs, agesno, &              radsol, frugs, agesno, &
2011              zmea, zstd, zsig, zgam, zthe, zpic, zval, rugoro, &              zmea, zstd, zsig, zgam, zthe, zpic, zval, &
2012              t_ancien, q_ancien, rnebcon, ratqs, clwcon, run_off_lic_0)              t_ancien, q_ancien, rnebcon, ratqs, clwcon, run_off_lic_0)
2013      ENDIF      ENDIF
2014    

Legend:
Removed from v.12  
changed lines
  Added in v.13

  ViewVC Help
Powered by ViewVC 1.1.21