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

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

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

revision 10 by guez, Fri Apr 18 14:45:53 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, 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, 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 60  contains Line 62  contains
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, intent(in):: rdayvrai ! 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):: firstcal ! first call to "calfis"      LOGICAL, intent(in):: firstcal ! first call to "calfis"
67      logical, intent(in):: lafin ! dernier passage      logical, intent(in):: lafin ! dernier passage
68    
# 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      )
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 331  contains Line 331  contains
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 ! number of calls to "physiq"      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 672  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 858  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 879  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)
881    
882         IF (ABS(dtime-pdtphys).GT.0.001) THEN         IF (pdtphys*REAL(radpas).GT.21600..AND.cycle_diurne) THEN
883            WRITE(lunout, *) 'Pas physique n est pas correct', dtime, &            print *,'Nbre d appels au rayonnement insuffisant'
884                 pdtphys            print *,"Au minimum 4 appels par jour si cycle diurne"
           abort_message='Pas physique n est pas correct '  
           call abort_gcm(modname, abort_message, 1)  
        ENDIF  
   
        IF (dtime*REAL(radpas).GT.21600..AND.cycle_diurne) THEN  
           WRITE(lunout, *)'Nbre d appels au rayonnement insuffisant'  
           WRITE(lunout, *)"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 926  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 *, 'Number of time steps of "physics" per day: ', 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
# Line 1013  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 &              , 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,
# Line 1032  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 1089  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 &              , 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 &
# Line 1120  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 1149  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 1206  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 &              , 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 &
# Line 1310  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 1335  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 1358  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 1374  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 1421  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 1436  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 &              , 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 &
# Line 1448  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 1456  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 1470  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
# Line 1493  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 < 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 1518  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 &              , 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
# Line 1564  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 1585  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 1593  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 &              , 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 &
# Line 1687  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 &              , 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
# Line 1791  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 &              , 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 &
# Line 1843  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 1874  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 1900  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
# Line 1919  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 &              , 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
# Line 1929  contains Line 1905  contains
1905      !   Calcul  des tendances traceurs      !   Calcul  des tendances traceurs
1906    
1907      call phytrac(rnpb, itap, lmt_pas, julien,  gmtime, firstcal, 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 1947  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 1972  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 &              , 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,
# Line 2016  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 2028  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 2053  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 2479  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.10  
changed lines
  Added in v.12

  ViewVC Help
Powered by ViewVC 1.1.21