/[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 6 by guez, Tue Mar 4 14:00:42 2008 UTC revision 12 by guez, Mon Jul 21 16:05:07 2008 UTC
# Line 9  module physiq_m Line 9  module physiq_m
9    
10  contains  contains
11    
12    SUBROUTINE physiq (nq, debut, lafin, rjourvrai, 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, clesphy0, 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    
# Line 32  contains Line 32  contains
32      use dimsoil, only: nsoilmx      use dimsoil, only: nsoilmx
33      use temps, only: itau_phy, day_ref, annee_ref, itaufin      use temps, only: itau_phy, day_ref, annee_ref, itaufin
34      use clesphys, only: ecrit_hf, ecrit_hf2mth, &      use clesphys, only: ecrit_hf, ecrit_hf2mth, &
35           ecrit_ins, iflag_con, ok_orolf, ok_orodr, ecrit_mth, ecrit_day, &           ecrit_ins, ecrit_mth, ecrit_day, &
36           nbapp_rad, cycle_diurne, cdmmax, cdhmax, &           cdmmax, cdhmax, &
37           co2_ppm, ecrit_reg, ecrit_tra, ksta, ksta_ter, new_oliq, &           co2_ppm, ecrit_reg, ecrit_tra, ksta, ksta_ter, &
38           ok_kzmin, soil_model           ok_kzmin
39      use iniprint, only: lunout, prt_level      use clesphys2, only: iflag_con, ok_orolf, ok_orodr, nbapp_rad, &
40             cycle_diurne, new_oliq, soil_model
41        use iniprint, only: prt_level
42      use abort_gcm_m, only: abort_gcm      use abort_gcm_m, only: abort_gcm
43      use YOMCST, only: rcpd, rtt, rlvtt, rg, ra, rsigma, retv, romega      use YOMCST, only: rcpd, rtt, rlvtt, rg, ra, rsigma, retv, romega
44      use comgeomphy      use comgeomphy
# Line 58  contains Line 60  contains
60      ! Variables argument:      ! Variables argument:
61    
62      INTEGER nq ! input nombre de traceurs (y compris vapeur d'eau)      INTEGER nq ! input nombre de traceurs (y compris vapeur d'eau)
63      REAL rjourvrai ! input numero du jour de l'experience      REAL, intent(in):: rdayvrai ! input numero du jour de l'experience
64      REAL, intent(in):: gmtime ! heure de la journée en fraction de jour      REAL, intent(in):: gmtime ! heure de la journée en fraction de jour
65      REAL pdtphys ! input pas d'integration pour la physique (seconde)      REAL, intent(in):: pdtphys ! pas d'integration pour la physique (seconde)
66      LOGICAL, intent(in):: debut ! premier passage      LOGICAL, intent(in):: firstcal ! first call to "calfis"
67      logical, intent(in):: lafin ! dernier passage      logical, intent(in):: lafin ! dernier passage
68    
69      REAL, intent(in):: paprs(klon, llm+1)      REAL, intent(in):: paprs(klon, llm+1)
70      ! (pression pour chaque inter-couche, en Pa)      ! (pression pour chaque inter-couche, en Pa)
71            
72      REAL pplay(klon, llm)      REAL, intent(in):: pplay(klon, llm)
73      ! (input pression pour le mileu de chaque couche (en Pa))      ! (input pression pour le mileu de chaque couche (en Pa))
74    
75      REAL pphi(klon, llm)        REAL pphi(klon, llm)  
# Line 82  contains Line 84  contains
84      REAL v(klon, llm)  ! input vitesse Y (de S a N) en m/s      REAL v(klon, llm)  ! input vitesse Y (de S a N) en m/s
85      REAL t(klon, llm)  ! input temperature (K)      REAL t(klon, llm)  ! input temperature (K)
86    
87      REAL qx(klon, llm, nq)      REAL, intent(in):: qx(klon, llm, nq)
88      ! (input humidite specifique (kg/kg) et d'autres traceurs)      ! (humidite specifique (kg/kg) et fractions massiques des autres traceurs)
89    
90      REAL omega(klon, llm)  ! input vitesse verticale en Pa/s      REAL omega(klon, llm)  ! input vitesse verticale en Pa/s
91      REAL d_u(klon, llm)  ! output tendance physique de "u" (m/s/s)      REAL d_u(klon, llm)  ! output tendance physique de "u" (m/s/s)
# Line 112  contains Line 114  contains
114      INTEGER, SAVE :: npas, nexca      INTEGER, SAVE :: npas, nexca
115      logical rnpb      logical rnpb
116      parameter(rnpb=.true.)      parameter(rnpb=.true.)
117      !      ocean = type de modele ocean a utiliser: force, slab, couple  
118      character(len=6) ocean      character(len=6), save:: ocean
119      SAVE ocean      ! (type de modèle océan à utiliser: "force" ou "slab" mais pas "couple")
120    
121      logical ok_ocean      logical ok_ocean
122      SAVE ok_ocean      SAVE ok_ocean
# Line 317  contains Line 319  contains
319    
320      INTEGER        longcles      INTEGER        longcles
321      PARAMETER    ( longcles = 20 )      PARAMETER    ( longcles = 20 )
322      REAL clesphy0( longcles      )      REAL, intent(in):: clesphy0( longcles      )
   
     ! Variables quasi-arguments  
   
     REAL xjour  
     SAVE xjour  
323    
324      ! Variables propres a la physique      ! Variables propres a la physique
325    
     REAL, SAVE:: dtime ! pas temporel de la physique (s)  
   
326      INTEGER, save:: radpas      INTEGER, save:: radpas
327      ! (Radiative transfer computations are made every "radpas" call to      ! (Radiative transfer computations are made every "radpas" call to
328      ! "physiq".)      ! "physiq".)
# Line 335  contains Line 330  contains
330      REAL radsol(klon)      REAL radsol(klon)
331      SAVE radsol               ! bilan radiatif au sol calcule par code radiatif      SAVE radsol               ! bilan radiatif au sol calcule par code radiatif
332    
333      INTEGER, SAVE:: itap ! compteur pour la physique      INTEGER, SAVE:: itap ! number of calls to "physiq"
     REAL co2_ppm_etat0  
     REAL solaire_etat0  
334    
335      REAL ftsol(klon, nbsrf)      REAL ftsol(klon, nbsrf)
336      SAVE ftsol                  ! temperature du sol      SAVE ftsol                  ! temperature du sol
# Line 472  contains Line 465  contains
465    
466      INTEGER julien      INTEGER julien
467    
468      INTEGER, SAVE:: lmt_pas ! fréquence de mise à jour      INTEGER, SAVE:: lmt_pas ! number of time steps of "physics" per day
469      REAL pctsrf(klon, nbsrf)      REAL pctsrf(klon, nbsrf)
470      !IM      !IM
471      REAL pctsrf_new(klon, nbsrf) !pourcentage surfaces issus d'ORCHIDEE      REAL pctsrf_new(klon, nbsrf) !pourcentage surfaces issus d'ORCHIDEE
# Line 500  contains Line 493  contains
493      EXTERNAL transp    ! transport total de l'eau et de l'energie      EXTERNAL transp    ! transport total de l'eau et de l'energie
494    
495      EXTERNAL ini_undefSTD  !initialise a 0 une variable a 1 niveau de pression      EXTERNAL ini_undefSTD  !initialise a 0 une variable a 1 niveau de pression
496      EXTERNAL undefSTD !somme les valeurs definies d'1 var a 1 niveau de pression  
497        EXTERNAL undefSTD
498        ! (somme les valeurs definies d'1 var a 1 niveau de pression)
499    
500      ! Variables locales      ! Variables locales
501    
# Line 675  contains Line 670  contains
670      REAL d_tr(klon, llm, nbtr)      REAL d_tr(klon, llm, nbtr)
671    
672      REAL zx_rh(klon, llm)      REAL zx_rh(klon, llm)
   
     INTEGER        length  
     PARAMETER    ( length = 100 )  
     REAL tabcntr0( length       )  
   
673      INTEGER ndex2d(iim*(jjm + 1)), ndex3d(iim*(jjm + 1)*llm)      INTEGER ndex2d(iim*(jjm + 1)), ndex3d(iim*(jjm + 1)*llm)
674    
675      REAL zustrdr(klon), zvstrdr(klon)      REAL zustrdr(klon), zvstrdr(klon)
# Line 802  contains Line 792  contains
792         END DO         END DO
793      END IF      END IF
794      ok_sync=.TRUE.      ok_sync=.TRUE.
795      IF (nq .LT. 2) THEN      IF (nq  <  2) THEN
796         abort_message = 'eaux vapeur et liquide sont indispensables'         abort_message = 'eaux vapeur et liquide sont indispensables'
797         CALL abort_gcm (modname, abort_message, 1)         CALL abort_gcm (modname, abort_message, 1)
798      ENDIF      ENDIF
799    
800      xjour = rjourvrai      test_firstcal: IF (firstcal) THEN
   
     test_debut: IF (debut) THEN  
801         !  initialiser         !  initialiser
802         u10m(:, :)=0.         u10m(:, :)=0.
803         v10m(:, :)=0.         v10m(:, :)=0.
# Line 863  contains Line 851  contains
851         frugs = 0.         frugs = 0.
852         itap = 0         itap = 0
853         itaprad = 0         itaprad = 0
854         CALL phyetat0("startphy.nc", dtime, co2_ppm_etat0, solaire_etat0, &         CALL phyetat0("startphy.nc", pctsrf, ftsol, ftsoil, ocean, tslab, &
855              pctsrf, ftsol, ftsoil, &              seaice, fqsurf, qsol, fsnow, &
             ocean, tslab, seaice, & !IM "slab" ocean  
             fqsurf, qsol, fsnow, &  
856              falbe, falblw, fevap, rain_fall, snow_fall, solsw, sollwdown, &              falbe, falblw, fevap, rain_fall, snow_fall, solsw, sollwdown, &
857              dlw, radsol, frugs, agesno, clesphy0, &              dlw, radsol, frugs, agesno, clesphy0, &
858              zmea, zstd, zsig, zgam, zthe, zpic, zval, rugoro, tabcntr0, &              zmea, zstd, zsig, zgam, zthe, zpic, zval, rugoro, &
859              t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon,  &              t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon,  &
860              run_off_lic_0)              run_off_lic_0)
861    
862         !   ATTENTION : il faudra a terme relire q2 dans l'etat initial         !   ATTENTION : il faudra a terme relire q2 dans l'etat initial
863         q2(:, :, :)=1.e-8         q2(:, :, :)=1.e-8
864    
865         radpas = NINT( 86400. / dtime / nbapp_rad)         radpas = NINT( 86400. / pdtphys / nbapp_rad)
866    
867         ! on remet le calendrier a zero         ! on remet le calendrier a zero
868    
# Line 884  contains Line 870  contains
870            itau_phy = 0            itau_phy = 0
871         ENDIF         ENDIF
872    
873         PRINT*, 'cycle_diurne =', cycle_diurne         PRINT *, 'cycle_diurne = ', cycle_diurne
874    
875         IF(ocean.NE.'force ') THEN         IF(ocean.NE.'force ') THEN
876            ok_ocean=.TRUE.            ok_ocean=.TRUE.
877         ENDIF         ENDIF
878    
879         CALL printflag( tabcntr0, radpas, ok_ocean, ok_oasis, ok_journe, &         CALL printflag(radpas, ok_ocean, ok_oasis, ok_journe, ok_instan, &
880              ok_instan, ok_region )              ok_region)
   
        IF (ABS(dtime-pdtphys).GT.0.001) THEN  
           WRITE(lunout, *) 'Pas physique n est pas correct', dtime, &  
                pdtphys  
           abort_message='Pas physique n est pas correct '  
           call abort_gcm(modname, abort_message, 1)  
        ENDIF  
881    
882         IF (dtime*REAL(radpas).GT.21600..AND.cycle_diurne) THEN         IF (pdtphys*REAL(radpas).GT.21600..AND.cycle_diurne) THEN
883            WRITE(lunout, *)'Nbre d appels au rayonnement insuffisant'            print *,'Nbre d appels au rayonnement insuffisant'
884            WRITE(lunout, *)"Au minimum 4 appels par jour si cycle diurne"            print *,"Au minimum 4 appels par jour si cycle diurne"
885            abort_message='Nbre d appels au rayonnement insuffisant'            abort_message='Nbre d appels au rayonnement insuffisant'
886            call abort_gcm(modname, abort_message, 1)            call abort_gcm(modname, abort_message, 1)
887         ENDIF         ENDIF
888         WRITE(lunout, *)"Clef pour la convection, iflag_con=", iflag_con         print *,"Clef pour la convection, iflag_con=", iflag_con
889         WRITE(lunout, *)"Clef pour le driver de la convection, ok_cvl=", &         print *,"Clef pour le driver de la convection, ok_cvl=", &
890              ok_cvl              ok_cvl
891    
892         ! Initialisation pour la convection de K.E. (sb):         ! Initialisation pour la convection de K.E. (sb):
893         IF (iflag_con >= 3) THEN         IF (iflag_con >= 3) THEN
894    
895            WRITE(lunout, *)"*** Convection de Kerry Emanuel 4.3  "            print *,"*** Convection de Kerry Emanuel 4.3  "
896    
897            !IM15/11/02 rajout initialisation ibas_con, itop_con cf. SB =>BEG            !IM15/11/02 rajout initialisation ibas_con, itop_con cf. SB =>BEG
898            DO i = 1, klon            DO i = 1, klon
# Line 931  contains Line 910  contains
910            CALL SUGWD(klon, llm, paprs, pplay)            CALL SUGWD(klon, llm, paprs, pplay)
911         ENDIF         ENDIF
912    
913         lmt_pas = NINT(86400. / dtime)  ! tous les jours         lmt_pas = NINT(86400. / pdtphys)  ! tous les jours
914         print *, 'La frequence de lecture surface est de ', lmt_pas         print *, 'Number of time steps of "physics" per day: ', lmt_pas
915    
916         ecrit_ins = NINT(ecrit_ins/dtime)         ecrit_ins = NINT(ecrit_ins/pdtphys)
917         ecrit_hf = NINT(ecrit_hf/dtime)         ecrit_hf = NINT(ecrit_hf/pdtphys)
918         ecrit_day = NINT(ecrit_day/dtime)         ecrit_day = NINT(ecrit_day/pdtphys)
919         ecrit_mth = NINT(ecrit_mth/dtime)         ecrit_mth = NINT(ecrit_mth/pdtphys)
920         ecrit_tra = NINT(86400.*ecrit_tra/dtime)         ecrit_tra = NINT(86400.*ecrit_tra/pdtphys)
921         ecrit_reg = NINT(ecrit_reg/dtime)         ecrit_reg = NINT(ecrit_reg/pdtphys)
922    
923         ! Initialiser le couplage si necessaire         ! Initialiser le couplage si necessaire
924    
925         npas = 0         npas = 0
926         nexca = 0         nexca = 0
        if (ocean == 'couple') then  
           npas = itaufin/ iphysiq  
           nexca = 86400 / int(dtime)  
           write(lunout, *)' Ocean couple'  
           write(lunout, *)' Valeurs des pas de temps'  
           write(lunout, *)' npas = ', npas  
           write(lunout, *)' nexca = ', nexca  
        endif  
927    
928         write(lunout, *)'AVANT HIST IFLAG_CON=', iflag_con         print *,'AVANT HIST IFLAG_CON=', iflag_con
929    
930         !   Initialisation des sorties         !   Initialisation des sorties
931    
932         call ini_histhf(dtime, presnivs, nid_hf, nid_hf3d)         call ini_histhf(pdtphys, presnivs, nid_hf, nid_hf3d)
933         call ini_histday(dtime, presnivs, ok_journe, nid_day)         call ini_histday(pdtphys, presnivs, ok_journe, nid_day)
934         call ini_histins(dtime, presnivs, ok_instan, nid_ins)         call ini_histins(pdtphys, presnivs, ok_instan, nid_ins)
935         CALL ymds2ju(annee_ref, 1, int(day_ref), 0., date0)         CALL ymds2ju(annee_ref, 1, int(day_ref), 0., date0)
936         !XXXPB Positionner date0 pour initialisation de ORCHIDEE         !XXXPB Positionner date0 pour initialisation de ORCHIDEE
937         WRITE(*, *) 'physiq date0 : ', date0         WRITE(*, *) 'physiq date0 : ', date0
938      ENDIF test_debut      ENDIF test_firstcal
939    
940      ! Mettre a zero des variables de sortie (pour securite)      ! Mettre a zero des variables de sortie (pour securite)
941    
# Line 1018  contains Line 989  contains
989    
990      IF (if_ebil >= 1) THEN      IF (if_ebil >= 1) THEN
991         ztit='after dynamic'         ztit='after dynamic'
992         CALL diagetpq(airephy, ztit, ip_ebil, 1, 1, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 1, 1, pdtphys &
993              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
994              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
995         !     Comme les tendances de la physique sont ajoute dans la dynamique,         !     Comme les tendances de la physique sont ajoute dans la dynamique,
996         !     on devrait avoir que la variation d'entalpie par la dynamique         !     on devrait avoir que la variation d'entalpie par la dynamique
# Line 1037  contains Line 1008  contains
1008      IF (ancien_ok) THEN      IF (ancien_ok) THEN
1009         DO k = 1, llm         DO k = 1, llm
1010            DO i = 1, klon            DO i = 1, klon
1011               d_t_dyn(i, k) = (t_seri(i, k)-t_ancien(i, k))/dtime               d_t_dyn(i, k) = (t_seri(i, k)-t_ancien(i, k))/pdtphys
1012               d_q_dyn(i, k) = (q_seri(i, k)-q_ancien(i, k))/dtime               d_q_dyn(i, k) = (q_seri(i, k)-q_ancien(i, k))/pdtphys
1013            ENDDO            ENDDO
1014         ENDDO         ENDDO
1015      ELSE      ELSE
# Line 1065  contains Line 1036  contains
1036    
1037      ! Incrementer le compteur de la physique      ! Incrementer le compteur de la physique
1038    
1039      itap   = itap + 1      itap = itap + 1
1040      julien = MOD(NINT(xjour), 360)      julien = MOD(NINT(rdayvrai), 360)
1041      if (julien == 0) julien = 360      if (julien == 0) julien = 360
1042    
1043      ! Mettre en action les conditions aux limites (albedo, sst, etc.).      ! Mettre en action les conditions aux limites (albedo, sst, etc.).
# Line 1094  contains Line 1065  contains
1065    
1066      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1067         ztit='after reevap'         ztit='after reevap'
1068         CALL diagetpq(airephy, ztit, ip_ebil, 2, 1, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 1, pdtphys &
1069              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1070              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1071         call diagphy(airephy, ztit, ip_ebil &         call diagphy(airephy, ztit, ip_ebil &
1072              , zero_v, zero_v, zero_v, zero_v, zero_v &              , zero_v, zero_v, zero_v, zero_v, zero_v &
# Line 1125  contains Line 1096  contains
1096    
1097      CALL orbite(REAL(julien), zlongi, dist)      CALL orbite(REAL(julien), zlongi, dist)
1098      IF (cycle_diurne) THEN      IF (cycle_diurne) THEN
1099         zdtime = dtime * REAL(radpas)         zdtime = pdtphys * REAL(radpas)
1100         CALL zenang(zlongi, gmtime, zdtime, rmu0, fract)         CALL zenang(zlongi, gmtime, zdtime, rmu0, fract)
1101      ELSE      ELSE
1102         rmu0 = -999.999         rmu0 = -999.999
# Line 1154  contains Line 1125  contains
1125    
1126      fder = dlw      fder = dlw
1127    
1128      CALL clmain(dtime, itap, date0, pctsrf, pctsrf_new, &      CALL clmain(pdtphys, itap, date0, pctsrf, pctsrf_new, &
1129           t_seri, q_seri, u_seri, v_seri, &           t_seri, q_seri, u_seri, v_seri, &
1130           julien, rmu0, co2_ppm,  &           julien, rmu0, co2_ppm,  &
1131           ok_veget, ocean, npas, nexca, ftsol, &           ok_veget, ocean, npas, nexca, ftsol, &
# Line 1164  contains Line 1135  contains
1135           fluxlat, rain_fall, snow_fall, &           fluxlat, rain_fall, snow_fall, &
1136           fsolsw, fsollw, sollwdown, fder, &           fsolsw, fsollw, sollwdown, fder, &
1137           rlon, rlat, cuphy, cvphy, frugs, &           rlon, rlat, cuphy, cvphy, frugs, &
1138           debut, lafin, agesno, rugoro, &           firstcal, lafin, agesno, rugoro, &
1139           d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, &           d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, &
1140           fluxt, fluxq, fluxu, fluxv, cdragh, cdragm, &           fluxt, fluxq, fluxu, fluxv, cdragh, cdragm, &
1141           q2, dsens, devap, &           q2, dsens, devap, &
# Line 1211  contains Line 1182  contains
1182    
1183      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1184         ztit='after clmain'         ztit='after clmain'
1185         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1186              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1187              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1188         call diagphy(airephy, ztit, ip_ebil &         call diagphy(airephy, ztit, ip_ebil &
1189              , zero_v, zero_v, zero_v, zero_v, sens &              , zero_v, zero_v, zero_v, zero_v, sens &
# Line 1282  contains Line 1253  contains
1253    
1254      DO nsrf = 1, nbsrf      DO nsrf = 1, nbsrf
1255         DO i = 1, klon         DO i = 1, klon
1256            IF (pctsrf(i, nsrf) .LT. epsfra) ftsol(i, nsrf) = zxtsol(i)            IF (pctsrf(i, nsrf)  <  epsfra) ftsol(i, nsrf) = zxtsol(i)
1257    
1258            IF (pctsrf(i, nsrf) .LT. epsfra) t2m(i, nsrf) = zt2m(i)            IF (pctsrf(i, nsrf)  <  epsfra) t2m(i, nsrf) = zt2m(i)
1259            IF (pctsrf(i, nsrf) .LT. epsfra) q2m(i, nsrf) = zq2m(i)            IF (pctsrf(i, nsrf)  <  epsfra) q2m(i, nsrf) = zq2m(i)
1260            IF (pctsrf(i, nsrf) .LT. epsfra) u10m(i, nsrf) = zu10m(i)            IF (pctsrf(i, nsrf)  <  epsfra) u10m(i, nsrf) = zu10m(i)
1261            IF (pctsrf(i, nsrf) .LT. epsfra) v10m(i, nsrf) = zv10m(i)            IF (pctsrf(i, nsrf)  <  epsfra) v10m(i, nsrf) = zv10m(i)
1262            IF (pctsrf(i, nsrf) .LT. epsfra) ffonte(i, nsrf) = zxffonte(i)            IF (pctsrf(i, nsrf)  <  epsfra) ffonte(i, nsrf) = zxffonte(i)
1263            IF (pctsrf(i, nsrf) .LT. epsfra)  &            IF (pctsrf(i, nsrf)  <  epsfra)  &
1264                 fqcalving(i, nsrf) = zxfqcalving(i)                 fqcalving(i, nsrf) = zxfqcalving(i)
1265            IF (pctsrf(i, nsrf) .LT. epsfra) pblh(i, nsrf)=s_pblh(i)            IF (pctsrf(i, nsrf)  <  epsfra) pblh(i, nsrf)=s_pblh(i)
1266            IF (pctsrf(i, nsrf) .LT. epsfra) plcl(i, nsrf)=s_lcl(i)            IF (pctsrf(i, nsrf)  <  epsfra) plcl(i, nsrf)=s_lcl(i)
1267            IF (pctsrf(i, nsrf) .LT. epsfra) capCL(i, nsrf)=s_capCL(i)            IF (pctsrf(i, nsrf)  <  epsfra) capCL(i, nsrf)=s_capCL(i)
1268            IF (pctsrf(i, nsrf) .LT. epsfra) oliqCL(i, nsrf)=s_oliqCL(i)            IF (pctsrf(i, nsrf)  <  epsfra) oliqCL(i, nsrf)=s_oliqCL(i)
1269            IF (pctsrf(i, nsrf) .LT. epsfra) cteiCL(i, nsrf)=s_cteiCL(i)            IF (pctsrf(i, nsrf)  <  epsfra) cteiCL(i, nsrf)=s_cteiCL(i)
1270            IF (pctsrf(i, nsrf) .LT. epsfra) pblT(i, nsrf)=s_pblT(i)            IF (pctsrf(i, nsrf)  <  epsfra) pblT(i, nsrf)=s_pblT(i)
1271            IF (pctsrf(i, nsrf) .LT. epsfra) therm(i, nsrf)=s_therm(i)            IF (pctsrf(i, nsrf)  <  epsfra) therm(i, nsrf)=s_therm(i)
1272            IF (pctsrf(i, nsrf) .LT. epsfra) trmb1(i, nsrf)=s_trmb1(i)            IF (pctsrf(i, nsrf)  <  epsfra) trmb1(i, nsrf)=s_trmb1(i)
1273            IF (pctsrf(i, nsrf) .LT. epsfra) trmb2(i, nsrf)=s_trmb2(i)            IF (pctsrf(i, nsrf)  <  epsfra) trmb2(i, nsrf)=s_trmb2(i)
1274            IF (pctsrf(i, nsrf) .LT. epsfra) trmb3(i, nsrf)=s_trmb3(i)            IF (pctsrf(i, nsrf)  <  epsfra) trmb3(i, nsrf)=s_trmb3(i)
1275         ENDDO         ENDDO
1276      ENDDO      ENDDO
1277    
# Line 1315  contains Line 1286  contains
1286      DO k = 1, llm      DO k = 1, llm
1287         DO i = 1, klon         DO i = 1, klon
1288            conv_q(i, k) = d_q_dyn(i, k)  &            conv_q(i, k) = d_q_dyn(i, k)  &
1289                 + d_q_vdf(i, k)/dtime                 + d_q_vdf(i, k)/pdtphys
1290            conv_t(i, k) = d_t_dyn(i, k)  &            conv_t(i, k) = d_t_dyn(i, k)  &
1291                 + d_t_vdf(i, k)/dtime                 + d_t_vdf(i, k)/pdtphys
1292         ENDDO         ENDDO
1293      ENDDO      ENDDO
1294      IF (check) THEN      IF (check) THEN
1295         za = qcheck(klon, llm, paprs, q_seri, ql_seri, airephy)         za = qcheck(klon, llm, paprs, q_seri, ql_seri, airephy)
1296         WRITE(lunout, *) "avantcon=", za         print *, "avantcon=", za
1297      ENDIF      ENDIF
1298      zx_ajustq = .FALSE.      zx_ajustq = .FALSE.
1299      IF (iflag_con == 2) zx_ajustq=.TRUE.      IF (iflag_con == 2) zx_ajustq=.TRUE.
# Line 1340  contains Line 1311  contains
1311      IF (iflag_con == 1) THEN      IF (iflag_con == 1) THEN
1312         stop 'reactiver le call conlmd dans physiq.F'         stop 'reactiver le call conlmd dans physiq.F'
1313      ELSE IF (iflag_con == 2) THEN      ELSE IF (iflag_con == 2) THEN
1314         CALL conflx(dtime, paprs, pplay, t_seri, q_seri, &         CALL conflx(pdtphys, paprs, pplay, t_seri, q_seri, &
1315              conv_t, conv_q, zxfluxq(1, 1), omega, &              conv_t, conv_q, zxfluxq(1, 1), omega, &
1316              d_t_con, d_q_con, rain_con, snow_con, &              d_t_con, d_q_con, rain_con, snow_con, &
1317              pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &              pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, &
# Line 1363  contains Line 1334  contains
1334         IF (ok_cvl) THEN ! new driver for convectL         IF (ok_cvl) THEN ! new driver for convectL
1335    
1336            CALL concvl (iflag_con, &            CALL concvl (iflag_con, &
1337                 dtime, paprs, pplay, t_seri, q_seri, &                 pdtphys, paprs, pplay, t_seri, q_seri, &
1338                 u_seri, v_seri, tr_seri, ntra, &                 u_seri, v_seri, tr_seri, ntra, &
1339                 ema_work1, ema_work2, &                 ema_work1, ema_work2, &
1340                 d_t_con, d_q_con, d_u_con, d_v_con, d_tr, &                 d_t_con, d_q_con, d_u_con, d_v_con, d_tr, &
# Line 1379  contains Line 1350  contains
1350    
1351         ELSE ! ok_cvl         ELSE ! ok_cvl
1352            ! MAF conema3 ne contient pas les traceurs            ! MAF conema3 ne contient pas les traceurs
1353            CALL conema3 (dtime, &            CALL conema3 (pdtphys, &
1354                 paprs, pplay, t_seri, q_seri, &                 paprs, pplay, t_seri, q_seri, &
1355                 u_seri, v_seri, tr_seri, ntra, &                 u_seri, v_seri, tr_seri, ntra, &
1356                 ema_work1, ema_work2, &                 ema_work1, ema_work2, &
# Line 1411  contains Line 1382  contains
1382                  zcor   = 1./(1.-retv*zx_qs)                  zcor   = 1./(1.-retv*zx_qs)
1383                  zx_qs  = zx_qs*zcor                  zx_qs  = zx_qs*zcor
1384               ELSE               ELSE
1385                  IF (zx_t.LT.t_coup) THEN                  IF (zx_t < t_coup) THEN
1386                     zx_qs = qsats(zx_t)/pplay(i, k)                     zx_qs = qsats(zx_t)/pplay(i, k)
1387                  ELSE                  ELSE
1388                     zx_qs = qsatl(zx_t)/pplay(i, k)                     zx_qs = qsatl(zx_t)/pplay(i, k)
# Line 1426  contains Line 1397  contains
1397         call clouds_gno &         call clouds_gno &
1398              (klon, llm, q_seri, zqsat, clwcon0, ptconv, ratqsc, rnebcon0)              (klon, llm, q_seri, zqsat, clwcon0, ptconv, ratqsc, rnebcon0)
1399      ELSE      ELSE
1400         WRITE(lunout, *) "iflag_con non-prevu", iflag_con         print *, "iflag_con non-prevu", iflag_con
1401         stop 1         stop 1
1402      ENDIF      ENDIF
1403    
# Line 1441  contains Line 1412  contains
1412    
1413      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1414         ztit='after convect'         ztit='after convect'
1415         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1416              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1417              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1418         call diagphy(airephy, ztit, ip_ebil &         call diagphy(airephy, ztit, ip_ebil &
1419              , zero_v, zero_v, zero_v, zero_v, zero_v &              , zero_v, zero_v, zero_v, zero_v, zero_v &
# Line 1453  contains Line 1424  contains
1424    
1425      IF (check) THEN      IF (check) THEN
1426         za = qcheck(klon, llm, paprs, q_seri, ql_seri, airephy)         za = qcheck(klon, llm, paprs, q_seri, ql_seri, airephy)
1427         WRITE(lunout, *)"aprescon=", za         print *,"aprescon=", za
1428         zx_t = 0.0         zx_t = 0.0
1429         za = 0.0         za = 0.0
1430         DO i = 1, klon         DO i = 1, klon
# Line 1461  contains Line 1432  contains
1432            zx_t = zx_t + (rain_con(i)+ &            zx_t = zx_t + (rain_con(i)+ &
1433                 snow_con(i))*airephy(i)/REAL(klon)                 snow_con(i))*airephy(i)/REAL(klon)
1434         ENDDO         ENDDO
1435         zx_t = zx_t/za*dtime         zx_t = zx_t/za*pdtphys
1436         WRITE(lunout, *)"Precip=", zx_t         print *,"Precip=", zx_t
1437      ENDIF      ENDIF
1438      IF (zx_ajustq) THEN      IF (zx_ajustq) THEN
1439         DO i = 1, klon         DO i = 1, klon
# Line 1475  contains Line 1446  contains
1446            ENDDO            ENDDO
1447         ENDDO         ENDDO
1448         DO i = 1, klon         DO i = 1, klon
1449            z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime) &            z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*pdtphys) &
1450                 /z_apres(i)                 /z_apres(i)
1451         ENDDO         ENDDO
1452         DO k = 1, llm         DO k = 1, llm
1453            DO i = 1, klon            DO i = 1, klon
1454               IF (z_factor(i).GT.(1.0+1.0E-08) .OR. &               IF (z_factor(i).GT.(1.0+1.0E-08) .OR. &
1455                    z_factor(i).LT.(1.0-1.0E-08)) THEN                    z_factor(i) < (1.0-1.0E-08)) THEN
1456                  q_seri(i, k) = q_seri(i, k) * z_factor(i)                  q_seri(i, k) = q_seri(i, k) * z_factor(i)
1457               ENDIF               ENDIF
1458            ENDDO            ENDDO
# Line 1498  contains Line 1469  contains
1469      fm_therm(:, :)=0.      fm_therm(:, :)=0.
1470      entr_therm(:, :)=0.      entr_therm(:, :)=0.
1471    
1472      IF(prt_level>9)WRITE(lunout, *) &      IF(prt_level>9)print *, &
1473           'AVANT LA CONVECTION SECHE, iflag_thermals=' &           'AVANT LA CONVECTION SECHE, iflag_thermals=' &
1474           , iflag_thermals, '   nsplit_thermals=', nsplit_thermals           , iflag_thermals, '   nsplit_thermals=', nsplit_thermals
1475      if(iflag_thermals.lt.0) then      if(iflag_thermals < 0) then
1476         !  Rien         !  Rien
1477         IF(prt_level>9)WRITE(lunout, *)'pas de convection'         IF(prt_level>9)print *,'pas de convection'
1478      else if(iflag_thermals == 0) then      else if(iflag_thermals == 0) then
1479         !  Ajustement sec         !  Ajustement sec
1480         IF(prt_level>9)WRITE(lunout, *)'ajsec'         IF(prt_level>9)print *,'ajsec'
1481         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)
1482         t_seri(:, :) = t_seri(:, :) + d_t_ajs(:, :)         t_seri(:, :) = t_seri(:, :) + d_t_ajs(:, :)
1483         q_seri(:, :) = q_seri(:, :) + d_q_ajs(:, :)         q_seri(:, :) = q_seri(:, :) + d_q_ajs(:, :)
1484      else      else
1485         !  Thermiques         !  Thermiques
1486         IF(prt_level>9)WRITE(lunout, *)'JUSTE AVANT, iflag_thermals=' &         IF(prt_level>9)print *,'JUSTE AVANT, iflag_thermals=' &
1487              , iflag_thermals, '   nsplit_thermals=', nsplit_thermals              , iflag_thermals, '   nsplit_thermals=', nsplit_thermals
1488         call calltherm(pdtphys &         call calltherm(pdtphys &
1489              , pplay, paprs, pphi &              , pplay, paprs, pphi &
# Line 1523  contains Line 1494  contains
1494    
1495      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1496         ztit='after dry_adjust'         ztit='after dry_adjust'
1497         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1498              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1499              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1500      END IF      END IF
1501    
# Line 1569  contains Line 1540  contains
1540    
1541      ! Appeler le processus de condensation a grande echelle      ! Appeler le processus de condensation a grande echelle
1542      ! et le processus de precipitation      ! et le processus de precipitation
1543      CALL fisrtilp(dtime, paprs, pplay, &      CALL fisrtilp(pdtphys, paprs, pplay, &
1544           t_seri, q_seri, ptconv, ratqs, &           t_seri, q_seri, ptconv, ratqs, &
1545           d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, &           d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, &
1546           rain_lsc, snow_lsc, &           rain_lsc, snow_lsc, &
# Line 1590  contains Line 1561  contains
1561      ENDDO      ENDDO
1562      IF (check) THEN      IF (check) THEN
1563         za = qcheck(klon, llm, paprs, q_seri, ql_seri, airephy)         za = qcheck(klon, llm, paprs, q_seri, ql_seri, airephy)
1564         WRITE(lunout, *)"apresilp=", za         print *,"apresilp=", za
1565         zx_t = 0.0         zx_t = 0.0
1566         za = 0.0         za = 0.0
1567         DO i = 1, klon         DO i = 1, klon
# Line 1598  contains Line 1569  contains
1569            zx_t = zx_t + (rain_lsc(i) &            zx_t = zx_t + (rain_lsc(i) &
1570                 + snow_lsc(i))*airephy(i)/REAL(klon)                 + snow_lsc(i))*airephy(i)/REAL(klon)
1571         ENDDO         ENDDO
1572         zx_t = zx_t/za*dtime         zx_t = zx_t/za*pdtphys
1573         WRITE(lunout, *)"Precip=", zx_t         print *,"Precip=", zx_t
1574      ENDIF      ENDIF
1575    
1576      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1577         ztit='after fisrt'         ztit='after fisrt'
1578         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1579              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1580              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1581         call diagphy(airephy, ztit, ip_ebil &         call diagphy(airephy, ztit, ip_ebil &
1582              , zero_v, zero_v, zero_v, zero_v, zero_v &              , zero_v, zero_v, zero_v, zero_v, zero_v &
# Line 1626  contains Line 1597  contains
1597            rain_tiedtke=0.            rain_tiedtke=0.
1598            do k=1, llm            do k=1, llm
1599               do i=1, klon               do i=1, klon
1600                  if (d_q_con(i, k).lt.0.) then                  if (d_q_con(i, k) < 0.) then
1601                     rain_tiedtke(i)=rain_tiedtke(i)-d_q_con(i, k)/pdtphys &                     rain_tiedtke(i)=rain_tiedtke(i)-d_q_con(i, k)/pdtphys &
1602                          *(paprs(i, k)-paprs(i, k+1))/rg                          *(paprs(i, k)-paprs(i, k+1))/rg
1603                  endif                  endif
# Line 1648  contains Line 1619  contains
1619         ENDDO         ENDDO
1620    
1621      ELSE IF (iflag_cldcon == 3) THEN      ELSE IF (iflag_cldcon == 3) THEN
1622         !  On prend pour les nuages convectifs le max du calcul de la         ! On prend pour les nuages convectifs le max du calcul de la
1623         !  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
1624         !  facttemps         ! facttemps
1625         facteur = pdtphys *facttemps         facteur = pdtphys *facttemps
1626         do k=1, llm         do k=1, llm
1627            do i=1, klon            do i=1, klon
# Line 1692  contains Line 1663  contains
1663    
1664      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1665         ztit="after diagcld"         ztit="after diagcld"
1666         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1667              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1668              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1669      END IF      END IF
1670    
# Line 1709  contains Line 1680  contains
1680               zcor   = 1./(1.-retv*zx_qs)               zcor   = 1./(1.-retv*zx_qs)
1681               zx_qs  = zx_qs*zcor               zx_qs  = zx_qs*zcor
1682            ELSE            ELSE
1683               IF (zx_t.LT.t_coup) THEN               IF (zx_t < t_coup) THEN
1684                  zx_qs = qsats(zx_t)/pplay(i, k)                  zx_qs = qsats(zx_t)/pplay(i, k)
1685               ELSE               ELSE
1686                  zx_qs = qsatl(zx_t)/pplay(i, k)                  zx_qs = qsatl(zx_t)/pplay(i, k)
# Line 1723  contains Line 1694  contains
1694      !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)      !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr)
1695      IF (ok_ade.OR.ok_aie) THEN      IF (ok_ade.OR.ok_aie) THEN
1696         ! Get sulfate aerosol distribution         ! Get sulfate aerosol distribution
1697         CALL readsulfate(rjourvrai, debut, sulfate)         CALL readsulfate(rdayvrai, firstcal, sulfate)
1698         CALL readsulfate_preind(rjourvrai, debut, sulfate_pi)         CALL readsulfate_preind(rdayvrai, firstcal, sulfate_pi)
1699    
1700         ! Calculate aerosol optical properties (Olivier Boucher)         ! Calculate aerosol optical properties (Olivier Boucher)
1701         CALL aeropt(pplay, paprs, t_seri, sulfate, rhcl, &         CALL aeropt(pplay, paprs, t_seri, sulfate, rhcl, &
# Line 1796  contains Line 1767  contains
1767      DO k = 1, llm      DO k = 1, llm
1768         DO i = 1, klon         DO i = 1, klon
1769            t_seri(i, k) = t_seri(i, k) &            t_seri(i, k) = t_seri(i, k) &
1770                 + (heat(i, k)-cool(i, k)) * dtime/86400.                 + (heat(i, k)-cool(i, k)) * pdtphys/86400.
1771         ENDDO         ENDDO
1772      ENDDO      ENDDO
1773    
1774      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1775         ztit='after rad'         ztit='after rad'
1776         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1777              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1778              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1779         call diagphy(airephy, ztit, ip_ebil &         call diagphy(airephy, ztit, ip_ebil &
1780              , topsw, toplw, solsw, sollw, zero_v &              , topsw, toplw, solsw, sollw, zero_v &
# Line 1848  contains Line 1819  contains
1819            ENDIF            ENDIF
1820         ENDDO         ENDDO
1821    
1822         CALL drag_noro(klon, llm, dtime, paprs, pplay, &         CALL drag_noro(klon, llm, pdtphys, paprs, pplay, &
1823              zmea, zstd, zsig, zgam, zthe, zpic, zval, &              zmea, zstd, zsig, zgam, zthe, zpic, zval, &
1824              igwd, idx, itest, &              igwd, idx, itest, &
1825              t_seri, u_seri, v_seri, &              t_seri, u_seri, v_seri, &
# Line 1879  contains Line 1850  contains
1850            ENDIF            ENDIF
1851         ENDDO         ENDDO
1852    
1853         CALL lift_noro(klon, llm, dtime, paprs, pplay, &         CALL lift_noro(klon, llm, pdtphys, paprs, pplay, &
1854              rlat, zmea, zstd, zpic, &              rlat, zmea, zstd, zpic, &
1855              itest, &              itest, &
1856              t_seri, u_seri, v_seri, &              t_seri, u_seri, v_seri, &
# Line 1905  contains Line 1876  contains
1876      ENDDO      ENDDO
1877      DO k = 1, llm      DO k = 1, llm
1878         DO i = 1, klon         DO i = 1, klon
1879            zustrph(i)=zustrph(i)+(u_seri(i, k)-u(i, k))/dtime* &            zustrph(i)=zustrph(i)+(u_seri(i, k)-u(i, k))/pdtphys* &
1880                 (paprs(i, k)-paprs(i, k+1))/rg                 (paprs(i, k)-paprs(i, k+1))/rg
1881            zvstrph(i)=zvstrph(i)+(v_seri(i, k)-v(i, k))/dtime* &            zvstrph(i)=zvstrph(i)+(v_seri(i, k)-v(i, k))/pdtphys* &
1882                 (paprs(i, k)-paprs(i, k+1))/rg                 (paprs(i, k)-paprs(i, k+1))/rg
1883         ENDDO         ENDDO
1884      ENDDO      ENDDO
1885    
1886      !IM calcul composantes axiales du moment angulaire et couple des montagnes      !IM calcul composantes axiales du moment angulaire et couple des montagnes
1887    
1888      CALL aaam_bud (27, klon, llm, rjourvrai, gmtime, &      CALL aaam_bud (27, klon, llm, gmtime, &
1889           ra, rg, romega, &           ra, rg, romega, &
1890           rlat, rlon, pphis, &           rlat, rlon, pphis, &
1891           zustrdr, zustrli, zustrph, &           zustrdr, zustrli, zustrph, &
# Line 1924  contains Line 1895  contains
1895    
1896      IF (if_ebil >= 2) THEN      IF (if_ebil >= 2) THEN
1897         ztit='after orography'         ztit='after orography'
1898         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 2, 2, pdtphys &
1899              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1900              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1901      END IF      END IF
1902    
# Line 1933  contains Line 1904  contains
1904    
1905      !   Calcul  des tendances traceurs      !   Calcul  des tendances traceurs
1906    
1907      call phytrac(rnpb, itap,  julien,  gmtime, debut, lafin, nq-2, &      call phytrac(rnpb, itap, lmt_pas, julien,  gmtime, firstcal, lafin, nq-2, &
1908           dtime, u, v, t, paprs, pplay, &           pdtphys, u, v, t, paprs, pplay, pmfu,  pmfd,  pen_u,  pde_u,  pen_d, &
1909           pmfu,  pmfd,  pen_u,  pde_u,  pen_d,  pde_d, &           pde_d, ycoefh, fm_therm, entr_therm, yu1, yv1, ftsol, pctsrf, &
1910           ycoefh, fm_therm, entr_therm, yu1, yv1, ftsol, &           frac_impa,  frac_nucl, presnivs, pphis, pphi, albsol, rhcl, cldfra, &
1911           pctsrf, frac_impa,  frac_nucl, &           rneb,  diafra,  cldliq, itop_con, ibas_con, pmflxr, pmflxs, prfl, &
1912           presnivs, pphis, pphi, albsol, qx(1, 1, 1),  &           psfl, da, phi, mp, upwd, dnwd, tr_seri)
          rhcl, cldfra,  rneb,  diafra,  cldliq,  &  
          itop_con, ibas_con, pmflxr, pmflxs, &  
          prfl, psfl, da, phi, mp, upwd, dnwd, &  
          tr_seri)  
1913    
1914      IF (offline) THEN      IF (offline) THEN
1915    
# Line 1952  contains Line 1919  contains
1919              fm_therm, entr_therm, &              fm_therm, entr_therm, &
1920              ycoefh, yu1, yv1, ftsol, pctsrf, &              ycoefh, yu1, yv1, ftsol, pctsrf, &
1921              frac_impa, frac_nucl, &              frac_impa, frac_nucl, &
1922              pphis, airephy, dtime, itap)              pphis, airephy, pdtphys, itap)
1923    
1924      ENDIF      ENDIF
1925    
# Line 1977  contains Line 1944  contains
1944            d_t_ec(i, k)=0.5/ZRCPD &            d_t_ec(i, k)=0.5/ZRCPD &
1945                 *(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)
1946            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)
1947            d_t_ec(i, k) = d_t_ec(i, k)/dtime            d_t_ec(i, k) = d_t_ec(i, k)/pdtphys
1948         END DO         END DO
1949      END DO      END DO
1950      !-jld ec_conser      !-jld ec_conser
1951      IF (if_ebil >= 1) THEN      IF (if_ebil >= 1) THEN
1952         ztit='after physic'         ztit='after physic'
1953         CALL diagetpq(airephy, ztit, ip_ebil, 1, 1, dtime &         CALL diagetpq(airephy, ztit, ip_ebil, 1, 1, pdtphys &
1954              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs, pplay &              , t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, paprs &
1955              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)              , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec)
1956         !     Comme les tendances de la physique sont ajoute dans la dynamique,         !     Comme les tendances de la physique sont ajoute dans la dynamique,
1957         !     on devrait avoir que la variation d'entalpie par la dynamique         !     on devrait avoir que la variation d'entalpie par la dynamique
# Line 2021  contains Line 1988  contains
1988    
1989      DO k = 1, llm      DO k = 1, llm
1990         DO i = 1, klon         DO i = 1, klon
1991            d_u(i, k) = ( u_seri(i, k) - u(i, k) ) / dtime            d_u(i, k) = ( u_seri(i, k) - u(i, k) ) / pdtphys
1992            d_v(i, k) = ( v_seri(i, k) - v(i, k) ) / dtime            d_v(i, k) = ( v_seri(i, k) - v(i, k) ) / pdtphys
1993            d_t(i, k) = ( t_seri(i, k)-t(i, k) ) / dtime            d_t(i, k) = ( t_seri(i, k)-t(i, k) ) / pdtphys
1994            d_qx(i, k, ivap) = ( q_seri(i, k) - qx(i, k, ivap) ) / dtime            d_qx(i, k, ivap) = ( q_seri(i, k) - qx(i, k, ivap) ) / pdtphys
1995            d_qx(i, k, iliq) = ( ql_seri(i, k) - qx(i, k, iliq) ) / dtime            d_qx(i, k, iliq) = ( ql_seri(i, k) - qx(i, k, iliq) ) / pdtphys
1996         ENDDO         ENDDO
1997      ENDDO      ENDDO
1998    
# Line 2033  contains Line 2000  contains
2000         DO iq = 3, nq         DO iq = 3, nq
2001            DO  k = 1, llm            DO  k = 1, llm
2002               DO  i = 1, klon               DO  i = 1, klon
2003                  d_qx(i, k, iq) = ( tr_seri(i, k, iq-2) - qx(i, k, iq) ) / dtime                  d_qx(i, k, iq) = ( tr_seri(i, k, iq-2) - qx(i, k, iq) ) / pdtphys
2004               ENDDO               ENDDO
2005            ENDDO            ENDDO
2006         ENDDO         ENDDO
# Line 2058  contains Line 2025  contains
2025    
2026      IF (lafin) THEN      IF (lafin) THEN
2027         itau_phy = itau_phy + itap         itau_phy = itau_phy + itap
2028         CALL phyredem ("restartphy.nc", dtime, radpas, &         CALL phyredem ("restartphy.nc", radpas, rlat, rlon, pctsrf, ftsol, &
2029              rlat, rlon, pctsrf, ftsol, ftsoil, &              ftsoil, tslab, seaice, fqsurf, qsol, &
             tslab, seaice,  & !IM "slab" ocean  
             fqsurf, qsol, &  
2030              fsnow, falbe, falblw, fevap, rain_fall, snow_fall, &              fsnow, falbe, falblw, fevap, rain_fall, snow_fall, &
2031              solsw, sollwdown, dlw, &              solsw, sollwdown, dlw, &
2032              radsol, frugs, agesno, &              radsol, frugs, agesno, &
# Line 2227  contains Line 2192  contains
2192    
2193        ENDDO !k=1, nlevSTD        ENDDO !k=1, nlevSTD
2194    
2195        !IM on somme les valeurs definies a chaque pas de temps de la physique ou        !IM on somme les valeurs definies a chaque pas de temps de la
2196        !IM toutes les 6 heures        ! physique ou toutes les 6 heures
2197    
2198        oknondef(1:klon, 1:nlevSTD, 1:nout)=.TRUE.        oknondef(1:klon, 1:nlevSTD, 1:nout)=.TRUE.
2199        CALL undefSTD(nlevSTD, itap, tlevSTD, &        CALL undefSTD(nlevSTD, itap, tlevSTD, &
# Line 2484  contains Line 2449  contains
2449    
2450           ! Champs 2D:           ! Champs 2D:
2451    
2452           zsto = dtime * ecrit_ins           zsto = pdtphys * ecrit_ins
2453           zout = dtime * ecrit_ins           zout = pdtphys * ecrit_ins
2454           itau_w = itau_phy + itap           itau_w = itau_phy + itap
2455    
2456           i = NINT(zout/zsto)           i = NINT(zout/zsto)

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

  ViewVC Help
Powered by ViewVC 1.1.21