/[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 48 by guez, Fri Jul 1 15:00:48 2011 UTC revision 49 by guez, Wed Aug 24 11:43:14 2011 UTC
# Line 10  contains Line 10  contains
10      ! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28 (SVN revision 678)      ! From phylmd/physiq.F, version 1.22 2006/02/20 09:38:28 (SVN revision 678)
11      ! Author: Z.X. Li (LMD/CNRS) 1993      ! Author: Z.X. Li (LMD/CNRS) 1993
12    
13      ! Objet : moniteur général de la physique du modèle      ! This is the main procedure for the "physics" part of the program.
14    
15      use abort_gcm_m, only: abort_gcm      use abort_gcm_m, only: abort_gcm
16      USE calendar, only: ymds2ju      USE calendar, only: ymds2ju
# Line 27  contains Line 27  contains
27      use dimens_m, only: jjm, iim, llm, nqmx      use dimens_m, only: jjm, iim, llm, nqmx
28      use dimphy, only: klon, nbtr      use dimphy, only: klon, nbtr
29      use dimsoil, only: nsoilmx      use dimsoil, only: nsoilmx
30        use fcttre, only: thermcep, foeew, qsats, qsatl
31      use hgardfou_m, only: hgardfou      use hgardfou_m, only: hgardfou
32      USE histcom, only: histsync      USE histcom, only: histsync
33      USE histwrite_m, only: histwrite      USE histwrite_m, only: histwrite
# Line 45  contains Line 46  contains
46      use qcheck_m, only: qcheck      use qcheck_m, only: qcheck
47      use radepsi      use radepsi
48      use radopt      use radopt
49        use SUPHEC_M, only: rcpd, rtt, rlvtt, rg, ra, rsigma, retv, romega
50      use temps, only: itau_phy, day_ref, annee_ref      use temps, only: itau_phy, day_ref, annee_ref
51      use yoethf_m      use yoethf_m
     use SUPHEC_M, only: rcpd, rtt, rlvtt, rg, ra, rsigma, retv, romega  
   
     ! Declaration des constantes et des fonctions thermodynamiques :  
     use fcttre, only: thermcep, foeew, qsats, qsatl  
52    
53      ! Variables argument:      ! Variables argument:
54    
# Line 84  contains Line 82  contains
82      REAL omega(klon, llm) ! input vitesse verticale en Pa/s      REAL omega(klon, llm) ! input vitesse verticale en Pa/s
83      REAL, intent(out):: d_u(klon, llm) ! tendance physique de "u" (m/s/s)      REAL, intent(out):: d_u(klon, llm) ! tendance physique de "u" (m/s/s)
84      REAL, intent(out):: d_v(klon, llm) ! tendance physique de "v" (m/s/s)      REAL, intent(out):: d_v(klon, llm) ! tendance physique de "v" (m/s/s)
85      REAL d_t(klon, llm) ! output tendance physique de "t" (K/s)      REAL, intent(out):: d_t(klon, llm) ! tendance physique de "t" (K/s)
86      REAL d_qx(klon, llm, nqmx) ! output tendance physique de "qx" (kg/kg/s)      REAL d_qx(klon, llm, nqmx) ! output tendance physique de "qx" (kg/kg/s)
87      REAL d_ps(klon) ! output tendance physique de la pression au sol      REAL d_ps(klon) ! output tendance physique de la pression au sol
88    
# Line 103  contains Line 101  contains
101    
102      LOGICAL check ! Verifier la conservation du modele en eau      LOGICAL check ! Verifier la conservation du modele en eau
103      PARAMETER (check=.FALSE.)      PARAMETER (check=.FALSE.)
104      LOGICAL ok_stratus ! Ajouter artificiellement les stratus  
105      PARAMETER (ok_stratus=.FALSE.)      LOGICAL, PARAMETER:: ok_stratus=.FALSE.
106        ! Ajouter artificiellement les stratus
107    
108      ! Parametres lies au coupleur OASIS:      ! Parametres lies au coupleur OASIS:
109      INTEGER, SAVE :: npas, nexca      INTEGER, SAVE :: npas, nexca
# Line 117  contains Line 116  contains
116      logical ok_ocean      logical ok_ocean
117      SAVE ok_ocean      SAVE ok_ocean
118    
119      !IM "slab" ocean      ! "slab" ocean
120      REAL tslab(klon) !Temperature du slab-ocean      REAL, save:: tslab(klon) ! temperature of ocean slab
121      SAVE tslab      REAL, save:: seaice(klon) ! glace de mer (kg/m2)
122      REAL seaice(klon) !glace de mer (kg/m2)      REAL fluxo(klon) ! flux turbulents ocean-glace de mer
123      SAVE seaice      REAL fluxg(klon) ! flux turbulents ocean-atmosphere
     REAL fluxo(klon) !flux turbulents ocean-glace de mer  
     REAL fluxg(klon) !flux turbulents ocean-atmosphere  
124    
125      ! Modele thermique du sol, a activer pour le cycle diurne:      ! Modele thermique du sol, a activer pour le cycle diurne:
126      logical, save:: ok_veget      logical, save:: ok_veget
# Line 147  contains Line 144  contains
144      INTEGER iliq ! indice de traceurs pour eau liquide      INTEGER iliq ! indice de traceurs pour eau liquide
145      PARAMETER (iliq=2)      PARAMETER (iliq=2)
146    
147      REAL t_ancien(klon, llm), q_ancien(klon, llm)      REAL, save:: t_ancien(klon, llm), q_ancien(klon, llm)
148      SAVE t_ancien, q_ancien      LOGICAL, save:: ancien_ok
     LOGICAL ancien_ok  
     SAVE ancien_ok  
149    
150      REAL d_t_dyn(klon, llm) ! tendance dynamique pour "t" (K/s)      REAL d_t_dyn(klon, llm) ! tendance dynamique pour "t" (K/s)
151      REAL d_q_dyn(klon, llm) ! tendance dynamique pour "q" (kg/kg/s)      REAL d_q_dyn(klon, llm) ! tendance dynamique pour "q" (kg/kg/s)
# Line 262  contains Line 257  contains
257    
258      INTEGER, SAVE:: itap ! number of calls to "physiq"      INTEGER, SAVE:: itap ! number of calls to "physiq"
259    
260      REAL ftsol(klon, nbsrf)      REAL, save:: ftsol(klon, nbsrf) ! skin temperature of surface fraction
     SAVE ftsol ! temperature du sol  
261    
262      REAL ftsoil(klon, nsoilmx, nbsrf)      REAL, save:: ftsoil(klon, nsoilmx, nbsrf)
263      SAVE ftsoil ! temperature dans le sol      ! soil temperature of surface fraction
264    
265      REAL fevap(klon, nbsrf)      REAL fevap(klon, nbsrf)
266      SAVE fevap ! evaporation      SAVE fevap ! evaporation
# Line 276  contains Line 270  contains
270      REAL fqsurf(klon, nbsrf)      REAL fqsurf(klon, nbsrf)
271      SAVE fqsurf ! humidite de l'air au contact de la surface      SAVE fqsurf ! humidite de l'air au contact de la surface
272    
273      REAL qsol(klon)      REAL, save:: qsol(klon) ! hauteur d'eau dans le sol
     SAVE qsol ! hauteur d'eau dans le sol  
274    
275      REAL fsnow(klon, nbsrf)      REAL fsnow(klon, nbsrf)
276      SAVE fsnow ! epaisseur neigeuse      SAVE fsnow ! epaisseur neigeuse
# Line 444  contains Line 437  contains
437      SAVE itaprad      SAVE itaprad
438    
439      REAL conv_q(klon, llm) ! convergence de l'humidite (kg/kg/s)      REAL conv_q(klon, llm) ! convergence de l'humidite (kg/kg/s)
440      REAL conv_t(klon, llm) ! convergence de la temperature(K/s)      REAL conv_t(klon, llm) ! convergence of temperature (K/s)
441    
442      REAL cldl(klon), cldm(klon), cldh(klon) !nuages bas, moyen et haut      REAL cldl(klon), cldm(klon), cldh(klon) !nuages bas, moyen et haut
443      REAL cldt(klon), cldq(klon) !nuage total, eau liquide integree      REAL cldt(klon), cldq(klon) !nuage total, eau liquide integree
# Line 469  contains Line 462  contains
462    
463      !IM cf. AM Variables locales pour la CLA (hbtm2)      !IM cf. AM Variables locales pour la CLA (hbtm2)
464    
465      REAL pblh(klon, nbsrf) ! Hauteur de couche limite      REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite
466      REAL plcl(klon, nbsrf) ! Niveau de condensation de la CLA      REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA
467      REAL capCL(klon, nbsrf) ! CAPE de couche limite      REAL, SAVE:: capCL(klon, nbsrf) ! CAPE de couche limite
468      REAL oliqCL(klon, nbsrf) ! eau_liqu integree de couche limite      REAL, SAVE:: oliqCL(klon, nbsrf) ! eau_liqu integree de couche limite
469      REAL cteiCL(klon, nbsrf) ! cloud top instab. crit. couche limite      REAL, SAVE:: cteiCL(klon, nbsrf) ! cloud top instab. crit. couche limite
470      REAL pblt(klon, nbsrf) ! T a la Hauteur de couche limite      REAL, SAVE:: pblt(klon, nbsrf) ! T a la Hauteur de couche limite
471      REAL therm(klon, nbsrf)      REAL, SAVE:: therm(klon, nbsrf)
472      REAL trmb1(klon, nbsrf) ! deep_cape      REAL, SAVE:: trmb1(klon, nbsrf) ! deep_cape
473      REAL trmb2(klon, nbsrf) ! inhibition      REAL, SAVE:: trmb2(klon, nbsrf) ! inhibition
474      REAL trmb3(klon, nbsrf) ! Point Omega      REAL, SAVE:: trmb3(klon, nbsrf) ! Point Omega
475      ! Grdeurs de sorties      ! Grdeurs de sorties
476      REAL s_pblh(klon), s_lcl(klon), s_capCL(klon)      REAL s_pblh(klon), s_lcl(klon), s_capCL(klon)
477      REAL s_oliqCL(klon), s_cteiCL(klon), s_pblt(klon)      REAL s_oliqCL(klon), s_cteiCL(klon), s_pblt(klon)
# Line 558  contains Line 551  contains
551    
552      logical ptconv(klon, llm)      logical ptconv(klon, llm)
553    
554      ! Variables locales pour effectuer les appels en serie      ! Variables locales pour effectuer les appels en série
555    
556      REAL t_seri(klon, llm), q_seri(klon, llm)      REAL t_seri(klon, llm), q_seri(klon, llm)
557      REAL ql_seri(klon, llm), qs_seri(klon, llm)      REAL ql_seri(klon, llm), qs_seri(klon, llm)
# Line 610  contains Line 603  contains
603      REAL ZRCPD      REAL ZRCPD
604      !-jld ec_conser      !-jld ec_conser
605      !IM: t2m, q2m, u10m, v10m      !IM: t2m, q2m, u10m, v10m
606      REAL t2m(klon, nbsrf), q2m(klon, nbsrf) !temperature, humidite a 2m      REAL t2m(klon, nbsrf), q2m(klon, nbsrf) ! temperature and humidity at 2 m
607      REAL u10m(klon, nbsrf), v10m(klon, nbsrf) !vents a 10m      REAL u10m(klon, nbsrf), v10m(klon, nbsrf) !vents a 10m
608      REAL zt2m(klon), zq2m(klon) !temp., hum. 2m moyenne s/ 1 maille      REAL zt2m(klon), zq2m(klon) !temp., hum. 2m moyenne s/ 1 maille
609      REAL zu10m(klon), zv10m(klon) !vents a 10m moyennes s/1 maille      REAL zu10m(klon), zv10m(klon) !vents a 10m moyennes s/1 maille
610      !jq Aerosol effects (Johannes Quaas, 27/11/2003)      !jq Aerosol effects (Johannes Quaas, 27/11/2003)
611      REAL sulfate(klon, llm) ! SO4 aerosol concentration [ug/m3]      REAL sulfate(klon, llm) ! SO4 aerosol concentration [ug/m3]
612    
613      REAL sulfate_pi(klon, llm)      REAL, save:: sulfate_pi(klon, llm)
614      ! (SO4 aerosol concentration [ug/m3] (pre-industrial value))      ! (SO4 aerosol concentration, in ug/m3, pre-industrial value)
     SAVE sulfate_pi  
615    
616      REAL cldtaupi(klon, llm)      REAL cldtaupi(klon, llm)
617      ! (Cloud optical thickness for pre-industrial (pi) aerosols)      ! (Cloud optical thickness for pre-industrial (pi) aerosols)
# Line 632  contains Line 624  contains
624      REAL cg_ae(klon, llm, 2)      REAL cg_ae(klon, llm, 2)
625    
626      REAL topswad(klon), solswad(klon) ! Aerosol direct effect.      REAL topswad(klon), solswad(klon) ! Aerosol direct effect.
627      ! ok_ade=T -ADE=topswad-topsw      ! ok_ade=True -ADE=topswad-topsw
628    
629      REAL topswai(klon), solswai(klon) ! Aerosol indirect effect.      REAL topswai(klon), solswai(klon) ! Aerosol indirect effect.
630      ! ok_aie=T ->      ! ok_aie=True ->
631      ! ok_ade=T -AIE=topswai-topswad      ! ok_ade=True -AIE=topswai-topswad
632      ! ok_ade=F -AIE=topswai-topsw      ! ok_ade=F -AIE=topswai-topsw
633    
634      REAL aerindex(klon) ! POLDER aerosol index      REAL aerindex(klon) ! POLDER aerosol index
# Line 665  contains Line 657  contains
657      SAVE d_v_con      SAVE d_v_con
658      SAVE rnebcon0      SAVE rnebcon0
659      SAVE clwcon0      SAVE clwcon0
     SAVE pblh  
     SAVE plcl  
     SAVE capCL  
     SAVE oliqCL  
     SAVE cteiCL  
     SAVE pblt  
     SAVE therm  
     SAVE trmb1  
     SAVE trmb2  
     SAVE trmb3  
660    
661      real zmasse(klon, llm)      real zmasse(klon, llm)
662      ! (column-density of mass of air in a cell, in kg m-2)      ! (column-density of mass of air in a cell, in kg m-2)
# Line 750  contains Line 732  contains
732         itap = 0         itap = 0
733         itaprad = 0         itaprad = 0
734         CALL phyetat0("startphy.nc", pctsrf, ftsol, ftsoil, ocean, tslab, &         CALL phyetat0("startphy.nc", pctsrf, ftsol, ftsoil, ocean, tslab, &
735              seaice, fqsurf, qsol, fsnow, &              seaice, fqsurf, qsol, fsnow, falbe, falblw, fevap, rain_fall, &
736              falbe, falblw, fevap, rain_fall, snow_fall, solsw, sollwdown, &              snow_fall, solsw, sollwdown, dlw, radsol, frugs, agesno, zmea, &
737              dlw, radsol, frugs, agesno, &              zstd, zsig, zgam, zthe, zpic, zval, t_ancien, q_ancien, &
738              zmea, zstd, zsig, zgam, zthe, zpic, zval, &              ancien_ok, rnebcon, ratqs, clwcon, run_off_lic_0)
             t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon, &  
             run_off_lic_0)  
739    
740         ! ATTENTION : il faudra a terme relire q2 dans l'etat initial         ! ATTENTION : il faudra a terme relire q2 dans l'etat initial
741         q2=1.e-8         q2=1.e-8
742    
743         radpas = NINT( 86400. / dtphys / nbapp_rad)         radpas = NINT(86400. / dtphys / nbapp_rad)
744    
745         ! on remet le calendrier a zero         ! on remet le calendrier a zero
746         IF (raz_date) itau_phy = 0         IF (raz_date) itau_phy = 0
# Line 836  contains Line 816  contains
816      DO i = 1, klon      DO i = 1, klon
817         d_ps(i) = 0.0         d_ps(i) = 0.0
818      ENDDO      ENDDO
     DO k = 1, llm  
        DO i = 1, klon  
           d_t(i, k) = 0.0  
           d_u(i, k) = 0.0  
           d_v(i, k) = 0.0  
        ENDDO  
     ENDDO  
819      DO iq = 1, nqmx      DO iq = 1, nqmx
820         DO k = 1, llm         DO k = 1, llm
821            DO i = 1, klon            DO i = 1, klon
# Line 892  contains Line 865  contains
865         ! Donc la somme de ces 2 variations devrait etre nulle.         ! Donc la somme de ces 2 variations devrait etre nulle.
866         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
867              zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol+d_h_vcol_phy, &              zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol+d_h_vcol_phy, &
868              d_qt, 0., fs_bound, fq_bound )              d_qt, 0., fs_bound, fq_bound)
869      END IF      END IF
870    
871      ! Diagnostiquer la tendance dynamique      ! Diagnostiquer la tendance dynamique
   
872      IF (ancien_ok) THEN      IF (ancien_ok) THEN
873         DO k = 1, llm         DO k = 1, llm
874            DO i = 1, klon            DO i = 1, klon
875               d_t_dyn(i, k) = (t_seri(i, k)-t_ancien(i, k))/dtphys               d_t_dyn(i, k) = (t_seri(i, k) - t_ancien(i, k)) / dtphys
876               d_q_dyn(i, k) = (q_seri(i, k)-q_ancien(i, k))/dtphys               d_q_dyn(i, k) = (q_seri(i, k) - q_ancien(i, k)) / dtphys
877            ENDDO            ENDDO
878         ENDDO         ENDDO
879      ELSE      ELSE
# Line 915  contains Line 887  contains
887      ENDIF      ENDIF
888    
889      ! Ajouter le geopotentiel du sol:      ! Ajouter le geopotentiel du sol:
   
890      DO k = 1, llm      DO k = 1, llm
891         DO i = 1, klon         DO i = 1, klon
892            zphi(i, k) = pphi(i, k) + pphis(i)            zphi(i, k) = pphi(i, k) + pphis(i)
893         ENDDO         ENDDO
894      ENDDO      ENDDO
895    
896      ! Verifier les temperatures      ! Check temperatures:
   
897      CALL hgardfou(t_seri, ftsol)      CALL hgardfou(t_seri, ftsol)
898    
899      ! Incrementer le compteur de la physique      ! Incrementer le compteur de la physique
   
900      itap = itap + 1      itap = itap + 1
901      julien = MOD(NINT(rdayvrai), 360)      julien = MOD(NINT(rdayvrai), 360)
902      if (julien == 0) julien = 360      if (julien == 0) julien = 360
# Line 935  contains Line 904  contains
904      forall (k = 1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg      forall (k = 1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
905    
906      ! Mettre en action les conditions aux limites (albedo, sst, etc.).      ! Mettre en action les conditions aux limites (albedo, sst, etc.).
     ! Prescrire l'ozone et calculer l'albedo sur l'ocean.  
907    
908        ! Prescrire l'ozone et calculer l'albedo sur l'ocean.
909      if (nqmx >= 5) then      if (nqmx >= 5) then
910         wo = qx(:, :, 5) * zmasse / dobson_u / 1e3         wo = qx(:, :, 5) * zmasse / dobson_u / 1e3
911      else IF (MOD(itap - 1, lmt_pas) == 0) THEN      else IF (MOD(itap - 1, lmt_pas) == 0) THEN
# Line 966  contains Line 935  contains
935              d_ql, d_qs, d_ec)              d_ql, d_qs, d_ec)
936         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
937              zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec, &              zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec, &
938              fs_bound, fq_bound )              fs_bound, fq_bound)
939    
940      END IF      END IF
941    
# Line 1042  contains Line 1011  contains
1011         DO k = 1, llm         DO k = 1, llm
1012            DO i = 1, klon            DO i = 1, klon
1013               zxfluxt(i, k) = zxfluxt(i, k) + &               zxfluxt(i, k) = zxfluxt(i, k) + &
1014                    fluxt(i, k, nsrf) * pctsrf( i, nsrf)                    fluxt(i, k, nsrf) * pctsrf(i, nsrf)
1015               zxfluxq(i, k) = zxfluxq(i, k) + &               zxfluxq(i, k) = zxfluxq(i, k) + &
1016                    fluxq(i, k, nsrf) * pctsrf( i, nsrf)                    fluxq(i, k, nsrf) * pctsrf(i, nsrf)
1017               zxfluxu(i, k) = zxfluxu(i, k) + &               zxfluxu(i, k) = zxfluxu(i, k) + &
1018                    fluxu(i, k, nsrf) * pctsrf( i, nsrf)                    fluxu(i, k, nsrf) * pctsrf(i, nsrf)
1019               zxfluxv(i, k) = zxfluxv(i, k) + &               zxfluxv(i, k) = zxfluxv(i, k) + &
1020                    fluxv(i, k, nsrf) * pctsrf( i, nsrf)                    fluxv(i, k, nsrf) * pctsrf(i, nsrf)
1021            END DO            END DO
1022         END DO         END DO
1023      END DO      END DO
# Line 1074  contains Line 1043  contains
1043              d_ql, d_qs, d_ec)              d_ql, d_qs, d_ec)
1044         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
1045              sens, evap, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec, &              sens, evap, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec, &
1046              fs_bound, fq_bound )              fs_bound, fq_bound)
1047      END IF      END IF
1048    
1049      ! Incrementer la temperature du sol      ! Update surface temperature:
1050    
1051      DO i = 1, klon      DO i = 1, klon
1052         zxtsol(i) = 0.0         zxtsol(i) = 0.0
# Line 1101  contains Line 1070  contains
1070         s_trmb2(i) = 0.0         s_trmb2(i) = 0.0
1071         s_trmb3(i) = 0.0         s_trmb3(i) = 0.0
1072    
1073         IF ( abs( pctsrf(i, is_ter) + pctsrf(i, is_lic) + &         IF (abs(pctsrf(i, is_ter) + pctsrf(i, is_lic) + &
1074              pctsrf(i, is_oce) + pctsrf(i, is_sic) - 1.) .GT. EPSFRA) &              pctsrf(i, is_oce) + pctsrf(i, is_sic) - 1.) .GT. EPSFRA) &
1075              THEN              THEN
1076            WRITE(*, *) 'physiq : pb sous surface au point ', i, &            WRITE(*, *) 'physiq : pb sous surface au point ', i, &
# Line 1293  contains Line 1262  contains
1262              d_ql, d_qs, d_ec)              d_ql, d_qs, d_ec)
1263         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
1264              zero_v, zero_v, rain_con, snow_con, ztsol, d_h_vcol, d_qt, d_ec, &              zero_v, zero_v, rain_con, snow_con, ztsol, d_h_vcol, d_qt, d_ec, &
1265              fs_bound, fq_bound )              fs_bound, fq_bound)
1266      END IF      END IF
1267    
1268      IF (check) THEN      IF (check) THEN
# Line 1442  contains Line 1411  contains
1411              d_ql, d_qs, d_ec)              d_ql, d_qs, d_ec)
1412         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &         call diagphy(airephy, ztit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &
1413              zero_v, zero_v, rain_lsc, snow_lsc, ztsol, d_h_vcol, d_qt, d_ec, &              zero_v, zero_v, rain_lsc, snow_lsc, ztsol, d_h_vcol, d_qt, d_ec, &
1414              fs_bound, fq_bound )              fs_bound, fq_bound)
1415      END IF      END IF
1416    
1417      ! PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT      ! PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
# Line 1477  contains Line 1446  contains
1446               ENDIF               ENDIF
1447            ENDDO            ENDDO
1448         ENDDO         ENDDO
   
1449      ELSE IF (iflag_cldcon == 3) THEN      ELSE IF (iflag_cldcon == 3) THEN
1450         ! On prend pour les nuages convectifs le max du calcul de la         ! On prend pour les nuages convectifs le max du calcul de la
1451         ! convection et du calcul du pas de temps précédent diminué d'un facteur         ! convection et du calcul du pas de temps précédent diminué d'un facteur
# Line 1497  contains Line 1465  contains
1465         ! On prend la somme des fractions nuageuses et des contenus en eau         ! On prend la somme des fractions nuageuses et des contenus en eau
1466         cldfra=min(max(cldfra, rnebcon), 1.)         cldfra=min(max(cldfra, rnebcon), 1.)
1467         cldliq=cldliq+rnebcon*clwcon         cldliq=cldliq+rnebcon*clwcon
   
1468      ENDIF      ENDIF
1469    
1470      ! 2. NUAGES STARTIFORMES      ! 2. NUAGES STARTIFORMES
# Line 1629  contains Line 1596  contains
1596              d_ql, d_qs, d_ec)              d_ql, d_qs, d_ec)
1597         call diagphy(airephy, ztit, ip_ebil, topsw, toplw, solsw, sollw, &         call diagphy(airephy, ztit, ip_ebil, topsw, toplw, solsw, sollw, &
1598              zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec, &              zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec, &
1599              fs_bound, fq_bound )              fs_bound, fq_bound)
1600      END IF      END IF
1601    
1602      ! Calculer l'hydrologie de la surface      ! Calculer l'hydrologie de la surface
   
1603      DO i = 1, klon      DO i = 1, klon
1604         zxqsurf(i) = 0.0         zxqsurf(i) = 0.0
1605         zxsnow(i) = 0.0         zxsnow(i) = 0.0
# Line 1685  contains Line 1651  contains
1651      ENDIF      ENDIF
1652    
1653      IF (ok_orolf) THEN      IF (ok_orolf) THEN
   
1654         ! selection des points pour lesquels le shema est actif:         ! selection des points pour lesquels le shema est actif:
1655         igwd=0         igwd=0
1656         DO i=1, klon         DO i=1, klon
# Line 1709  contains Line 1674  contains
1674               v_seri(i, k) = v_seri(i, k) + d_v_lif(i, k)               v_seri(i, k) = v_seri(i, k) + d_v_lif(i, k)
1675            ENDDO            ENDDO
1676         ENDDO         ENDDO
1677        ENDIF
     ENDIF ! fin de test sur ok_orolf  
1678    
1679      ! STRESS NECESSAIRES: TOUTE LA PHYSIQUE      ! STRESS NECESSAIRES: TOUTE LA PHYSIQUE
1680    
# Line 1785  contains Line 1749  contains
1749         ! Donc la somme de ces 2 variations devrait etre nulle.         ! Donc la somme de ces 2 variations devrait etre nulle.
1750         call diagphy(airephy, ztit, ip_ebil, topsw, toplw, solsw, sollw, sens, &         call diagphy(airephy, ztit, ip_ebil, topsw, toplw, solsw, sollw, sens, &
1751              evap, rain_fall, snow_fall, ztsol, d_h_vcol, d_qt, d_ec, &              evap, rain_fall, snow_fall, ztsol, d_h_vcol, d_qt, d_ec, &
1752              fs_bound, fq_bound )              fs_bound, fq_bound)
1753    
1754         d_h_vcol_phy=d_h_vcol         d_h_vcol_phy=d_h_vcol
1755    
# Line 1805  contains Line 1769  contains
1769    
1770      DO k = 1, llm      DO k = 1, llm
1771         DO i = 1, klon         DO i = 1, klon
1772            d_u(i, k) = ( u_seri(i, k) - u(i, k) ) / dtphys            d_u(i, k) = (u_seri(i, k) - u(i, k)) / dtphys
1773            d_v(i, k) = ( v_seri(i, k) - v(i, k) ) / dtphys            d_v(i, k) = (v_seri(i, k) - v(i, k)) / dtphys
1774            d_t(i, k) = ( t_seri(i, k)-t(i, k) ) / dtphys            d_t(i, k) = (t_seri(i, k) - t(i, k)) / dtphys
1775            d_qx(i, k, ivap) = ( q_seri(i, k) - qx(i, k, ivap) ) / dtphys            d_qx(i, k, ivap) = (q_seri(i, k) - qx(i, k, ivap)) / dtphys
1776            d_qx(i, k, iliq) = ( ql_seri(i, k) - qx(i, k, iliq) ) / dtphys            d_qx(i, k, iliq) = (ql_seri(i, k) - qx(i, k, iliq)) / dtphys
1777         ENDDO         ENDDO
1778      ENDDO      ENDDO
1779    
# Line 1839  contains Line 1803  contains
1803      ! Si c'est la fin, il faut conserver l'etat de redemarrage      ! Si c'est la fin, il faut conserver l'etat de redemarrage
1804      IF (lafin) THEN      IF (lafin) THEN
1805         itau_phy = itau_phy + itap         itau_phy = itau_phy + itap
1806         CALL phyredem("restartphy.nc", rlat, rlon, pctsrf, ftsol, &         CALL phyredem("restartphy.nc", rlat, rlon, pctsrf, ftsol, ftsoil, &
1807              ftsoil, tslab, seaice, fqsurf, qsol, &              tslab, seaice, fqsurf, qsol, fsnow, falbe, falblw, fevap, &
1808              fsnow, falbe, falblw, fevap, rain_fall, snow_fall, &              rain_fall, snow_fall, solsw, sollwdown, dlw, radsol, frugs, &
1809              solsw, sollwdown, dlw, &              agesno, zmea, zstd, zsig, zgam, zthe, zpic, zval, t_ancien, &
1810              radsol, frugs, agesno, &              q_ancien, rnebcon, ratqs, clwcon, run_off_lic_0)
             zmea, zstd, zsig, zgam, zthe, zpic, zval, &  
             t_ancien, q_ancien, rnebcon, ratqs, clwcon, run_off_lic_0)  
1811      ENDIF      ENDIF
1812    
1813      firstcal = .FALSE.      firstcal = .FALSE.
# Line 2003  contains Line 1965  contains
1965    
1966           DO nsrf = 1, nbsrf           DO nsrf = 1, nbsrf
1967              !XXX              !XXX
1968              zx_tmp_fi2d(1 : klon) = pctsrf( 1 : klon, nsrf)*100.              zx_tmp_fi2d(1 : klon) = pctsrf(1 : klon, nsrf)*100.
1969              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
1970              CALL histwrite(nid_ins, "pourc_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "pourc_"//clnsurf(nsrf), itau_w, &
1971                   zx_tmp_2d)                   zx_tmp_2d)
1972    
1973              zx_tmp_fi2d(1 : klon) = pctsrf( 1 : klon, nsrf)              zx_tmp_fi2d(1 : klon) = pctsrf(1 : klon, nsrf)
1974              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
1975              CALL histwrite(nid_ins, "fract_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "fract_"//clnsurf(nsrf), itau_w, &
1976                   zx_tmp_2d)                   zx_tmp_2d)
1977    
1978              zx_tmp_fi2d(1 : klon) = fluxt( 1 : klon, 1, nsrf)              zx_tmp_fi2d(1 : klon) = fluxt(1 : klon, 1, nsrf)
1979              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
1980              CALL histwrite(nid_ins, "sens_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "sens_"//clnsurf(nsrf), itau_w, &
1981                   zx_tmp_2d)                   zx_tmp_2d)
1982    
1983              zx_tmp_fi2d(1 : klon) = fluxlat( 1 : klon, nsrf)              zx_tmp_fi2d(1 : klon) = fluxlat(1 : klon, nsrf)
1984              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
1985              CALL histwrite(nid_ins, "lat_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "lat_"//clnsurf(nsrf), itau_w, &
1986                   zx_tmp_2d)                   zx_tmp_2d)
1987    
1988              zx_tmp_fi2d(1 : klon) = ftsol( 1 : klon, nsrf)              zx_tmp_fi2d(1 : klon) = ftsol(1 : klon, nsrf)
1989              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
1990              CALL histwrite(nid_ins, "tsol_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "tsol_"//clnsurf(nsrf), itau_w, &
1991                   zx_tmp_2d)                   zx_tmp_2d)
1992    
1993              zx_tmp_fi2d(1 : klon) = fluxu( 1 : klon, 1, nsrf)              zx_tmp_fi2d(1 : klon) = fluxu(1 : klon, 1, nsrf)
1994              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
1995              CALL histwrite(nid_ins, "taux_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "taux_"//clnsurf(nsrf), itau_w, &
1996                   zx_tmp_2d)                   zx_tmp_2d)
1997    
1998              zx_tmp_fi2d(1 : klon) = fluxv( 1 : klon, 1, nsrf)              zx_tmp_fi2d(1 : klon) = fluxv(1 : klon, 1, nsrf)
1999              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
2000              CALL histwrite(nid_ins, "tauy_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "tauy_"//clnsurf(nsrf), itau_w, &
2001                   zx_tmp_2d)                   zx_tmp_2d)
2002    
2003              zx_tmp_fi2d(1 : klon) = frugs( 1 : klon, nsrf)              zx_tmp_fi2d(1 : klon) = frugs(1 : klon, nsrf)
2004              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
2005              CALL histwrite(nid_ins, "rugs_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "rugs_"//clnsurf(nsrf), itau_w, &
2006                   zx_tmp_2d)                   zx_tmp_2d)
2007    
2008              zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)              zx_tmp_fi2d(1 : klon) = falbe(1 : klon, nsrf)
2009              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)              CALL gr_fi_ecrit(1, klon, iim, (jjm + 1), zx_tmp_fi2d, zx_tmp_2d)
2010              CALL histwrite(nid_ins, "albe_"//clnsurf(nsrf), itau_w, &              CALL histwrite(nid_ins, "albe_"//clnsurf(nsrf), itau_w, &
2011                   zx_tmp_2d)                   zx_tmp_2d)

Legend:
Removed from v.48  
changed lines
  Added in v.49

  ViewVC Help
Powered by ViewVC 1.1.21