Ignore:
Timestamp:
Jun 11, 2014, 3:46:46 PM (10 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes r1997:2055 into testing branch

Location:
LMDZ5/branches/testing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/phylmd/add_phys_tend.F90

    r1910 r2056  
    22! $Id$
    33!
    4 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,text)
     4SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,paprs,text)
    55!======================================================================
    66! Ajoute les tendances des variables physiques aux variables
     
    1818use phys_state_var_mod
    1919IMPLICIT none
    20 #include "iniprint.h"
     20  include "iniprint.h"
     21  include "YOMCST.h"
     22  include "clesphys.h"
    2123
    2224! Arguments :
     
    2426REAL zdu(klon,klev),zdv(klon,klev)
    2527REAL zdt(klon,klev),zdq(klon,klev),zdql(klon,klev)
     28REAL paprs(klon,klev+1)
    2629CHARACTER*(*) text
    2730
     
    2932!--------
    3033REAL zt,zq
     34REAL zq_int, zqp_int, zq_new
     35
     36REAL zqp(klev)
    3137
    3238INTEGER i, k,j
     
    3541INTEGER kadrs(klon*klev)
    3642INTEGER kqadrs(klon*klev)
     43
     44LOGICAL done(klon)
    3745
    3846integer debug_level
     
    107115!=====================================================================================
    108116IF (jqbad .GT. 0) THEN
     117      done(:) = .false.                         !jyg
    109118      DO j = 1, jqbad
    110          i=jqadrs(j)
    111          if(prt_level.ge.debug_level) THEN
    112           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
    113           print*,'l    T     dT       Q     dQ    '
    114          endif
    115          DO k = 1, klev
    116            zq=q_seri(i,k)+zdq(i,k)
    117            if (zq.lt.1.e-15) then
    118               if (q_seri(i,k).lt.1.e-15) then
    119                if(prt_level.ge.debug_level) THEN
    120                 print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
    121                endif
    122                q_seri(i,k)=1.e-15
    123                zdq(i,k)=(1.e-15-q_seri(i,k))
     119        i=jqadrs(j)
     120          if(prt_level.ge.debug_level) THEN
     121           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
     122           print*,'l    T     dT       Q     dQ    '
     123           DO k = 1, klev
     124              write(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
     125           ENDDO
     126          endif
     127          IF (ok_conserv_q) THEN
     128!jyg<20140228 Corrections pour conservation de l'eau
     129            IF (.NOT.done(i)) THEN                  !jyg
     130              DO k = 1, klev
     131                zqp(k) = max(q_seri(i,k),1.e-15)
     132              ENDDO
     133              zq_int  = 0.
     134              zqp_int = 0.
     135              DO k = 1, klev
     136                zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
     137                zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
     138              ENDDO
     139              if(prt_level.ge.debug_level) THEN
     140               print*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
     141                                    i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
    124142              endif
    125            endif
    126 !           zq=q_seri(i,k)+zdq(i,k)
    127 !           if (zq.lt.1.e-15) then
    128 !              zdq(i,k)=(1.e-15-q_seri(i,k))
    129 !           endif
    130          ENDDO
    131       ENDDO
     143              DO k = 1, klev
     144                zq_new = zqp(k)*zq_int/zqp_int
     145                zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
     146                q_seri(i,k) = zq_new
     147              ENDDO
     148              done(i) = .true.
     149            ENDIF !(.NOT.done(i))
     150          ELSE
     151!jyg>
     152            DO k = 1, klev
     153              zq=q_seri(i,k)+zdq(i,k)
     154              if (zq.lt.1.e-15) then
     155                 if (q_seri(i,k).lt.1.e-15) then
     156                  if(prt_level.ge.debug_level) THEN
     157                   print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
     158                  endif
     159                  q_seri(i,k)=1.e-15
     160                  zdq(i,k)=(1.e-15-q_seri(i,k))
     161                 endif
     162              endif
     163!              zq=q_seri(i,k)+zdq(i,k)
     164!              if (zq.lt.1.e-15) then
     165!                 zdq(i,k)=(1.e-15-q_seri(i,k))
     166!              endif
     167            ENDDO
     168!jyg<20140228
     169          ENDIF   !  (ok_conserv_q)
     170!jyg>
     171      ENDDO ! j = 1, jqbad
    132172ENDIF
    133173!
Note: See TracChangeset for help on using the changeset viewer.