Ignore:
Timestamp:
Apr 6, 2014, 2:20:38 PM (10 years ago)
Author:
fhourdin
Message:

Modification pour garantir la conservation des espèces traces.

Modification for tracer conservation

Jean-Yves Grandpeix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/add_phys_tend.F90

    r1998 r2007  
    1818use phys_state_var_mod
    1919IMPLICIT none
    20 #include "iniprint.h"
    21 #include "YOMCST.h"
     20  include "iniprint.h"
     21  include "YOMCST.h"
     22  include "clesphys.h"
    2223
    2324! Arguments :
     
    117118      DO j = 1, jqbad
    118119        i=jqadrs(j)
    119         IF (.NOT.done(i)) THEN                  !jyg
    120120          if(prt_level.ge.debug_level) THEN
    121121           print*,'WARNING  : EAU POUR LE POINT i rlon rlat =',i,rlon(i),rlat(i),text
     
    125125           ENDDO
    126126          endif
     127          IF (ok_conserv_q) THEN
    127128!jyg<20140228 Corrections pour conservation de l'eau
    128           DO k = 1, klev
    129             zqp(k) = max(q_seri(i,k),1.e-15)
    130           ENDDO
    131           zq_int  = 0.
    132           zqp_int = 0.
    133           DO k = 1, klev
    134             zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
    135             zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
    136           ENDDO
    137           if(prt_level.ge.debug_level) THEN
    138            print*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
    139                                 i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
    140           endif
    141           DO k = 1, klev
    142             zq_new = zqp(k)*zq_int/zqp_int
    143             zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
    144             q_seri(i,k) = zq_new
    145           ENDDO
    146           done(i) = .true.
    147         ENDIF !(.NOT.done(i))
    148 
    149 !         DO k = 1, klev
    150 !           zq=q_seri(i,k)+zdq(i,k)
    151 !           if (zq.lt.1.e-15) then
    152 !              if (q_seri(i,k).lt.1.e-15) then
    153 !               if(prt_level.ge.debug_level) THEN
    154 !                print*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
    155 !               endif
    156 !               q_seri(i,k)=1.e-15
    157 !               zdq(i,k)=(1.e-15-q_seri(i,k))
     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
     142              endif
     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))
    158166!              endif
    159 !           endif
    160 !!           zq=q_seri(i,k)+zdq(i,k)
    161 !!           if (zq.lt.1.e-15) then
    162 !!              zdq(i,k)=(1.e-15-q_seri(i,k))
    163 !!           endif
    164 !         ENDDO
     167            ENDDO
     168!jyg<20140228
     169          ENDIF   !  (ok_conserv_q)
    165170!jyg>
    166       ENDDO
     171      ENDDO ! j = 1, jqbad
    167172ENDIF
    168173!
Note: See TracChangeset for help on using the changeset viewer.