Changeset 5149 for LMDZ6/trunk/libf


Ignore:
Timestamp:
Jul 31, 2024, 2:38:51 PM (4 months ago)
Author:
Sebastien Nguyen
Message:

finished rewriting reevap.F90 with large arrays qx and d_qx_eva

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmdiso/reevap.F90

    r4982 r5149  
    2222    REAL, DIMENSION(klon,klev,nqtot), INTENT(in) ::     qx
    2323    REAL, DIMENSION(klon,klev), INTENT(out) :: d_t_eva
    24     REAL, DIMENSION(klon,klev,nqtot), INTENT(out) ::        d_qx_eva
     24    REAL, DIMENSION(klon,klev,nqtot), INTENT(out) ::    d_qx_eva
    2525
    2626    REAL za,zb,zdelta,zlvdcp,zlsdcp
     
    3535    !IM 100106 BEG : pouvoir sortir les ctes de la physique
    3636    !
    37 do ixt=1,1+ntiso
     37    DO ixt = 1, 1+ntiso
    3838    ! Re-evaporer l'eau liquide nuageuse
    3939    !
     
    4343!print *,'rrevap ; fl_cor_ebil:',fl_cor_ebil,' iflag_ice_thermo:',iflag_ice_thermo,' RVTMP2',RVTMP2
    4444    DO k = 1, klev  ! re-evaporation de l'eau liquide nuageuse
    45        DO i = 1, klon
     45      DO i = 1, klon
    4646
    47         if (ixt.eq.1) then
    48          if (fl_cor_ebil .GT. 0) then
    49           !zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
    50           !zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
    51           zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(qx(i,k,ivapcur)+qx(i,k,iliqcur)+qx(i,k,isolcur)))
    52           zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(qx(i,k,ivapcur)+qx(i,k,iliqcur)+qx(i,k,isolcur)))
    53          else
    54            zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*qx(i,k,ivapcur))
    55            !jyg<
    56            !  Attention : Arnaud a propose des formules completement differentes
    57            !                  A verifier !!!
    58            zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*qx(i,k,ivapcur))
    59          end if
    60          IF (iflag_ice_thermo .EQ. 0) THEN
    61              zlsdcp=zlvdcp
     47        IF (ixt == 1) THEN ! water
     48          IF (fl_cor_ebil > 0) THEN
     49            !zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
     50            !zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(q_seri(i,k)+ql_seri(i,k)+qs_seri(i,k)))
     51            zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*(qx(i,k,ivapcur)+qx(i,k,iliqcur)+qx(i,k,isolcur)))
     52            zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*(qx(i,k,ivapcur)+qx(i,k,iliqcur)+qx(i,k,isolcur)))
     53          ELSE
     54            zlvdcp=RLVTT/RCPD/(1.0+RVTMP2*qx(i,k,ivapcur))
     55            !jyg<
     56            !  Attention : Arnaud a propose des formules completement differentes
     57            !                  A verifier !!!
     58            zlsdcp=RLSTT/RCPD/(1.0+RVTMP2*qx(i,k,ivapcur))
    6259         ENDIF
     60          IF (iflag_ice_thermo == 0) THEN
     61            zlsdcp=zlvdcp
     62          ENDIF
    6363          !>jyg
     64        ENDIF
     65        IF (iflag_ice_thermo == 0) THEN   
     66           !pas necessaire a priori
     67
     68            zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k)))
     69            zdelta = 0.
     70            zb = MAX(0.0,qx(i,k,iliqcur))
     71            IF (ixt == 1) THEN
     72              za = - MAX(0.0,qx(i,k,iliqcur)) &
     73                   * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
     74              d_t_eva(i,k) = za
     75            ENDIF
     76            d_qx_eva(i,k,ivapcur)  = zb
     77            d_qx_eva(i,k,iliqcur) = -qx(i,k,iliqcur)
     78            d_qx_eva(i,k,isolcur) = 0.
     79
     80        ELSE
     81             
    6482             !CR: on r\'e-\'evapore eau liquide et glace
    6583
     
    6886             !        za = - MAX(0.0,ql_seri(i,k)) &
    6987             !             * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta)
    70              za = - MAX(0.0,qx(i,k,iliqcur))*zlvdcp &
    71                   - MAX(0.0,qx(i,k,iliqcur))*zlsdcp
    72              d_t_eva(i,k) = za
    73 
    74           endif !if (ixt.eq.1) then
    75 
     88            IF (ixt == 1) THEN
     89              za = - MAX(0.0,qx(i,k,iliqcur))*zlvdcp &
     90                   - MAX(0.0,qx(i,k,iliqcur))*zlsdcp
     91              d_t_eva(i,k) = za
     92            ENDIF
    7693            !zb = MAX(0.0,ql_seri(i,k)+qs_seri(i,k))
    7794            !d_q_eva(i,k) = zb
     
    83100            d_qx_eva(i,k,iliqcur) = -qx(i,k,iliqcur)
    84101            d_qx_eva(i,k,isolcur) = -qx(i,k,isolcur)
     102        ENDIF
    85103
    86104
    87        ENDDO
     105      ENDDO
    88106    ENDDO
    89107
    90     enddo ! do ixt=1,1+niso*(nzone +1)
    91    
     108    ENDDO ! DO ixt = 1, 1+niso*(nzone +1)
    92109
    93110RETURN
Note: See TracChangeset for help on using the changeset viewer.