/[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 203 by guez, Wed Jun 8 15:10:12 2016 UTC revision 204 by guez, Wed Jun 8 15:27:32 2016 UTC
# Line 32  contains Line 32  contains
32      use conflx_m, only: conflx      use conflx_m, only: conflx
33      USE ctherm, ONLY: iflag_thermals, nsplit_thermals      USE ctherm, ONLY: iflag_thermals, nsplit_thermals
34      use diagcld2_m, only: diagcld2      use diagcld2_m, only: diagcld2
     use diagetpq_m, only: diagetpq  
     use diagphy_m, only: diagphy  
35      USE dimens_m, ONLY: llm, nqmx      USE dimens_m, ONLY: llm, nqmx
36      USE dimphy, ONLY: klon      USE dimphy, ONLY: klon
37      USE dimsoil, ONLY: nsoilmx      USE dimsoil, ONLY: nsoilmx
# Line 402  contains Line 400  contains
400    
401      ! Variables li\'ees au bilan d'\'energie et d'enthalpie :      ! Variables li\'ees au bilan d'\'energie et d'enthalpie :
402      REAL ztsol(klon)      REAL ztsol(klon)
     REAL d_h_vcol, d_qt, d_ec  
     REAL, SAVE:: d_h_vcol_phy  
     REAL zero_v(klon)  
     CHARACTER(LEN = 20) tit  
     INTEGER:: ip_ebil = 0 ! print level for energy conservation diagnostics  
     INTEGER:: if_ebil = 0 ! verbosity for diagnostics of energy conservation  
403    
404      REAL d_t_ec(klon, llm)      REAL d_t_ec(klon, llm)
405      ! tendance due \`a la conversion Ec en énergie thermique      ! tendance due \`a la conversion Ec en énergie thermique
# Line 466  contains Line 458  contains
458    
459      integer, save:: ncid_startphy      integer, save:: ncid_startphy
460    
461      namelist /physiq_nml/ fact_cldcon, facttemps, ok_newmicro, &      namelist /physiq_nml/ fact_cldcon, facttemps, ok_newmicro, iflag_cldcon, &
462           iflag_cldcon, ratqsbas, ratqshaut, if_ebil, ok_ade, ok_aie, bl95_b0, &           ratqsbas, ratqshaut, ok_ade, ok_aie, bl95_b0, bl95_b1, &
463           bl95_b1, iflag_thermals, nsplit_thermals           iflag_thermals, nsplit_thermals
464    
465      !----------------------------------------------------------------      !----------------------------------------------------------------
466    
# Line 517  contains Line 509  contains
509         read(unit=*, nml=physiq_nml)         read(unit=*, nml=physiq_nml)
510         write(unit_nml, nml=physiq_nml)         write(unit_nml, nml=physiq_nml)
511    
        IF (if_ebil >= 1) d_h_vcol_phy = 0.  
512         call conf_phys         call conf_phys
513    
514         ! Initialiser les compteurs:         ! Initialiser les compteurs:
# Line 559  contains Line 550  contains
550         CALL phyredem0         CALL phyredem0
551      ENDIF test_firstcal      ENDIF test_firstcal
552    
     IF (if_ebil >= 1) zero_v = 0.  
   
553      ! We will modify variables *_seri and we will not touch variables      ! We will modify variables *_seri and we will not touch variables
554      ! u, v, t, qx:      ! u, v, t, qx:
555      t_seri = t      t_seri = t
# Line 572  contains Line 561  contains
561    
562      ztsol = sum(ftsol * pctsrf, dim = 2)      ztsol = sum(ftsol * pctsrf, dim = 2)
563    
     IF (if_ebil >= 1) THEN  
        tit = 'after dynamics'  
        CALL diagetpq(airephy, tit, ip_ebil, 1, 1, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        ! Comme les tendances de la physique sont ajout\'es dans la  
        ! dynamique, la variation d'enthalpie par la dynamique devrait  
        ! \^etre \'egale \`a la variation de la physique au pas de temps  
        ! pr\'ec\'edent. Donc la somme de ces 2 variations devrait \^etre  
        ! nulle.  
        call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &  
             zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol + d_h_vcol_phy, &  
             d_qt, 0.)  
     END IF  
   
564      ! Diagnostic de la tendance dynamique :      ! Diagnostic de la tendance dynamique :
565      IF (ancien_ok) THEN      IF (ancien_ok) THEN
566         DO k = 1, llm         DO k = 1, llm
# Line 634  contains Line 609  contains
609      ENDDO      ENDDO
610      ql_seri = 0.      ql_seri = 0.
611    
     IF (if_ebil >= 2) THEN  
        tit = 'after reevap'  
        CALL diagetpq(airephy, tit, ip_ebil, 2, 1, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &  
             zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec)  
     END IF  
   
612      frugs = MAX(frugs, 0.000015)      frugs = MAX(frugs, 0.000015)
613      zxrugs = sum(frugs * pctsrf, dim = 2)      zxrugs = sum(frugs * pctsrf, dim = 2)
614    
# Line 711  contains Line 678  contains
678         ENDDO         ENDDO
679      ENDDO      ENDDO
680    
     IF (if_ebil >= 2) THEN  
        tit = 'after clmain'  
        CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &  
             sens, evap, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec)  
     END IF  
   
681      ! Update surface temperature:      ! Update surface temperature:
682    
683      DO i = 1, klon      DO i = 1, klon
# Line 859  contains Line 818  contains
818         ENDDO         ENDDO
819      ENDDO      ENDDO
820    
     IF (if_ebil >= 2) THEN  
        tit = 'after convect'  
        CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &  
             zero_v, zero_v, rain_con, snow_con, ztsol, d_h_vcol, d_qt, d_ec)  
     END IF  
   
821      IF (check) THEN      IF (check) THEN
822         za = qcheck(paprs, q_seri, ql_seri)         za = qcheck(paprs, q_seri, ql_seri)
823         print *, "aprescon = ", za         print *, "aprescon = ", za
# Line 912  contains Line 863  contains
863              q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm)              q_seri, d_u_ajs, d_v_ajs, d_t_ajs, d_q_ajs, fm_therm, entr_therm)
864      endif      endif
865    
     IF (if_ebil >= 2) THEN  
        tit = 'after dry_adjust'  
        CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
     END IF  
   
866      ! Caclul des ratqs      ! Caclul des ratqs
867    
868      ! ratqs convectifs \`a l'ancienne en fonction de (q(z = 0) - q) / q      ! ratqs convectifs \`a l'ancienne en fonction de (q(z = 0) - q) / q
# Line 986  contains Line 931  contains
931         print *, "Precip = ", zx_t         print *, "Precip = ", zx_t
932      ENDIF      ENDIF
933    
     IF (if_ebil >= 2) THEN  
        tit = 'after fisrt'  
        CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        call diagphy(airephy, tit, ip_ebil, zero_v, zero_v, zero_v, zero_v, &  
             zero_v, zero_v, rain_lsc, snow_lsc, ztsol, d_h_vcol, d_qt, d_ec)  
     END IF  
   
934      ! PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT      ! PRESCRIPTION DES NUAGES POUR LE RAYONNEMENT
935    
936      ! 1. NUAGES CONVECTIFS      ! 1. NUAGES CONVECTIFS
# Line 1067  contains Line 1004  contains
1004         snow_fall(i) = snow_con(i) + snow_lsc(i)         snow_fall(i) = snow_con(i) + snow_lsc(i)
1005      ENDDO      ENDDO
1006    
     IF (if_ebil >= 2) CALL diagetpq(airephy, "after diagcld", ip_ebil, 2, 2, &  
          dtphys, t_seri, q_seri, ql_seri, u_seri, v_seri, paprs, d_h_vcol, &  
          d_qt, d_ec)  
   
1007      ! Humidit\'e relative pour diagnostic :      ! Humidit\'e relative pour diagnostic :
1008      DO k = 1, llm      DO k = 1, llm
1009         DO i = 1, klon         DO i = 1, klon
# Line 1132  contains Line 1065  contains
1065         ENDDO         ENDDO
1066      ENDDO      ENDDO
1067    
     IF (if_ebil >= 2) THEN  
        tit = 'after rad'  
        CALL diagetpq(airephy, tit, ip_ebil, 2, 2, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        call diagphy(airephy, tit, ip_ebil, topsw, toplw, solsw, sollw, &  
             zero_v, zero_v, zero_v, zero_v, ztsol, d_h_vcol, d_qt, d_ec)  
     END IF  
   
1068      ! Calculer l'hydrologie de la surface      ! Calculer l'hydrologie de la surface
1069      DO i = 1, klon      DO i = 1, klon
1070         zxqsurf(i) = 0.         zxqsurf(i) = 0.
# Line 1228  contains Line 1153  contains
1153      CALL aaam_bud(rg, romega, rlat, rlon, pphis, zustrdr, zustrli, zustrph, &      CALL aaam_bud(rg, romega, rlat, rlon, pphis, zustrdr, zustrli, zustrph, &
1154           zvstrdr, zvstrli, zvstrph, paprs, u, v, aam, torsfc)           zvstrdr, zvstrli, zvstrph, paprs, u, v, aam, torsfc)
1155    
     IF (if_ebil >= 2) CALL diagetpq(airephy, 'after orography', ip_ebil, 2, &  
          2, dtphys, t_seri, q_seri, ql_seri, u_seri, v_seri, paprs, d_h_vcol, &  
          d_qt, d_ec)  
   
1156      ! Calcul des tendances traceurs      ! Calcul des tendances traceurs
1157      call phytrac(julien, time, firstcal, lafin, dtphys, t, paprs, play, mfu, &      call phytrac(julien, time, firstcal, lafin, dtphys, t, paprs, play, mfu, &
1158           mfd, pde_u, pen_d, ycoefh, fm_therm, entr_therm, yu1, yv1, ftsol, &           mfd, pde_u, pen_d, ycoefh, fm_therm, entr_therm, yu1, yv1, ftsol, &
# Line 1263  contains Line 1184  contains
1184         END DO         END DO
1185      END DO      END DO
1186    
     IF (if_ebil >= 1) THEN  
        tit = 'after physic'  
        CALL diagetpq(airephy, tit, ip_ebil, 1, 1, dtphys, t_seri, q_seri, &  
             ql_seri, u_seri, v_seri, paprs, d_h_vcol, d_qt, d_ec)  
        ! Comme les tendances de la physique sont ajoute dans la dynamique,  
        ! on devrait avoir que la variation d'entalpie par la dynamique  
        ! est egale a la variation de la physique au pas de temps precedent.  
        ! Donc la somme de ces 2 variations devrait etre nulle.  
        call diagphy(airephy, tit, ip_ebil, topsw, toplw, solsw, sollw, sens, &  
             evap, rain_fall, snow_fall, ztsol, d_h_vcol, d_qt, d_ec)  
        d_h_vcol_phy = d_h_vcol  
     END IF  
   
1187      ! SORTIES      ! SORTIES
1188    
1189      ! prw = eau precipitable      ! prw = eau precipitable

Legend:
Removed from v.203  
changed lines
  Added in v.204

  ViewVC Help
Powered by ViewVC 1.1.21