Changeset 2150 for LMDZ5/trunk/libf


Ignore:
Timestamp:
Nov 18, 2014, 7:06:37 PM (10 years ago)
Author:
fhourdin
Message:

Correction d'un bug de RRTM par l'équipe RRTM suite à nos problèmes

d'oscillations numériques et grâce à l'inntervention de Jean-Louis.

Bug fixing in RRTM , solving the problem of numerical oscillations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/rrtm/rrtm_rtrn1a_140gp.F90

    r1990 r2150  
    105105REAL(KIND=JPRB) :: ZHOOK_HANDLE
    106106
     107
     108
     109REAL(KIND=JPRB)                  :: CLFNET(0:JPLAY) ! Argument NOT used
     110REAL(KIND=JPRB)                  :: CLHTR(0:JPLAY) ! Argument NOT used
     111REAL(KIND=JPRB)                  :: FNET(0:JPLAY) ! Argument NOT used
     112REAL(KIND=JPRB)                  :: HTR(0:JPLAY) ! Argument NOT used
     113
     114
     115
    107116!--------------------------------------------------------------------------
    108117! Input
     
    239248  Z_FACCMB2D(I_LEV) = 0.0_JPRB
    240249ENDDO 
     250
    241251Z_RAT1 = 0.0_JPRB
    242252Z_RAT2 = 0.0_JPRB
     253
    243254!_end_jjm 991209
    244255
     
    280291      Z_FACCLR2(I_LEV+1) = 0.0_JPRB
    281292!-- DS_000515     
    282 !      FACCMB1(LEV+1) = _ZERO_
    283 !      FACCMB2(LEV+1) = _ZERO_
     293!SB debug >>
     294     Z_FACCMB1(I_LEV+1) =0.0_JPRB
     295     Z_FACCMB2(I_LEV+1) =0.0_JPRB
     296!SB debug <<
    284297!mji      ISTCLD(LEV+1) = _ZERO_
    285298    ELSEIF (Z_CLDFRAC(I_LEV+1)  >=  Z_CLDFRAC(I_LEV)) THEN
     
    294307          Z_FACCLR2(I_LEV+1) = (Z_CLDFRAC(I_LEV+1)-Z_CLDFRAC(I_LEV))/&
    295308           & (1.0_JPRB-Z_CLDFRAC(I_LEV)) 
    296         ENDIF   
     309        ENDIF 
     310!SB debug >>
     311      Z_FACCLR2(I_LEV) = 0.0_JPRB
     312      Z_FACCLD2(I_LEV) = 0.0_JPRB
     313!SB debug <<
    297314      ELSE
    298315        Z_FMAX = MAX(Z_CLDFRAC(I_LEV),Z_CLDFRAC(I_LEV-1))
     
    315332        Z_RAT1 = 1.0_JPRB
    316333        Z_RAT2 = 0.0_JPRB
     334!SB debug >>
     335!      ENDIF
     336      ELSE
     337        Z_RAT1 = 0.0_JPRB
     338        Z_RAT2 = 0.0_JPRB
    317339      ENDIF
     340!SB debug <<
    318341    ELSE
    319342      Z_FACCLR1(I_LEV+1) = 0.0_JPRB
     
    323346        Z_FACCLD1(I_LEV+1) = 0.0_JPRB
    324347        Z_FACCLD2(I_LEV+1) = (Z_CLDFRAC(I_LEV)-Z_CLDFRAC(I_LEV+1))/Z_CLDFRAC(I_LEV)
     348!SB debug >>
     349        Z_FACCLR2(I_LEV) = 0.0_JPRB
     350        Z_FACCLD2(I_LEV) = 0.0_JPRB
     351!SB debug <<
    325352      ELSE
    326353        Z_FMIN = MIN(Z_CLDFRAC(I_LEV),Z_CLDFRAC(I_LEV-1))
     
    337364        Z_RAT1 = 0.0_JPRB
    338365        Z_RAT2 = 1.0_JPRB
     366!SB debug >>
     367!      ENDIF
     368      ELSE
     369        Z_RAT1 = 0.0_JPRB
     370        Z_RAT2 = 0.0_JPRB
    339371      ENDIF
     372!SB debug <<
    340373    ENDIF
    341374!fcc
    342     IF (I_LEV == 1) THEN
    343       Z_FACCMB1(I_LEV+1) = 0.
    344       Z_FACCMB2(I_LEV+1) = Z_FACCLD1(I_LEV+1) * Z_FACCLR2(I_LEV)
    345     ELSE
    346       Z_FACCMB1(I_LEV+1) = Z_FACCLR1(I_LEV+1) * Z_FACCLD2(I_LEV) *Z_CLDFRAC(I_LEV-1)
    347       Z_FACCMB2(I_LEV+1) = Z_FACCLD1(I_LEV+1) * Z_FACCLR2(I_LEV) *&
    348        & (1.0_JPRB - Z_CLDFRAC(I_LEV-1))   
    349     ENDIF
     375
     376!SB debug >>
     377!    IF (I_LEV == 1) THEN
     378!      Z_FACCMB1(I_LEV+1) = 0.
     379!      Z_FACCMB2(I_LEV+1) = Z_FACCLD1(I_LEV+1) * Z_FACCLR2(I_LEV)
     380!    ELSE
     381!      Z_FACCMB1(I_LEV+1) = Z_FACCLR1(I_LEV+1) * Z_FACCLD2(I_LEV) *Z_CLDFRAC(I_LEV-1)
     382!      Z_FACCMB2(I_LEV+1) = Z_FACCLD1(I_LEV+1) * Z_FACCLR2(I_LEV) *&
     383!       & (1.0_JPRB - Z_CLDFRAC(I_LEV-1))   
     384!    ENDIF
     385     if(istcld(i_lev).ne.1) then
     386        z_faccmb1(i_lev+1) = max(0.,min(z_cldfrac(i_lev+1)-z_cldfrac(i_lev), &
     387               z_cldfrac(i_lev-1)-z_cldfrac(i_lev)))
     388        z_faccmb2(i_lev+1) = max(0.,min(z_cldfrac(i_lev)-z_cldfrac(i_lev+1), &
     389               z_cldfrac(i_lev)-z_cldfrac(i_lev-1)))
     390     endif
     391!SB debug <<
    350392!end fcc
    351393  ELSE
     
    386428           & (1.0_JPRB-Z_CLDFRAC(I_LEV)) 
    387429        ENDIF
     430!SB debug >>
     431       z_facclr2d(i_lev)=0.0_JPRB       
     432       z_faccld2d(i_lev)=0.0_JPRB
     433!SB debug <<
    388434      ELSE
    389435        Z_FMAX = MAX(Z_CLDFRAC(I_LEV),Z_CLDFRAC(I_LEV+1))
     
    406452        Z_RAT1 = 1.0_JPRB
    407453        Z_RAT2 = 0.0_JPRB
    408       ENDIF
     454!SB debug >>
     455!      ENDIF
     456      else
     457        Z_RAT1 = 0.0_JPRB
     458        Z_RAT2 = 0.0_JPRB
     459      endif       
     460!SB debug <<
    409461    ELSE
    410462      Z_FACCLR1D(I_LEV-1) = 0.0_JPRB
     
    414466        Z_FACCLD1D(I_LEV-1) = 0.0_JPRB
    415467        Z_FACCLD2D(I_LEV-1) = (Z_CLDFRAC(I_LEV)-Z_CLDFRAC(I_LEV-1))/Z_CLDFRAC(I_LEV)
     468!SB debug >>
     469        z_facclr2d(i_lev)=0.0_JPRB
     470        z_faccld2d(i_lev)=0.0_JPRB
     471!SB debug <<
    416472      ELSE
    417473        Z_FMIN = MIN(Z_CLDFRAC(I_LEV),Z_CLDFRAC(I_LEV+1))
     
    428484        Z_RAT1 = 0.0_JPRB
    429485        Z_RAT2 = 1.0_JPRB
     486!SB debug >>
     487!      ENDIF
     488      ELSE
     489        Z_RAT1 = 0.0_JPRB
     490        Z_RAT2 = 0.0_JPRB
    430491      ENDIF
     492!SB debug <<
    431493    ENDIF
    432     Z_FACCMB1D(I_LEV-1) = Z_FACCLR1D(I_LEV-1) * Z_FACCLD2D(I_LEV) *Z_CLDFRAC(I_LEV+1)
    433     Z_FACCMB2D(I_LEV-1) = Z_FACCLD1D(I_LEV-1) * Z_FACCLR2D(I_LEV) *&
    434      & (1.0_JPRB - Z_CLDFRAC(I_LEV+1)) 
     494!SB debug >>
     495!    Z_FACCMB1D(I_LEV-1) = Z_FACCLR1D(I_LEV-1) * Z_FACCLD2D(I_LEV) *Z_CLDFRAC(I_LEV+1)
     496!    Z_FACCMB2D(I_LEV-1) = Z_FACCLD1D(I_LEV-1) * Z_FACCLR2D(I_LEV) *&
     497!     & (1.0_JPRB - Z_CLDFRAC(I_LEV+1)) 
     498    if (istcldd(i_lev).ne.1) then
     499       z_faccmb1d(i_lev-1) = max(0.,min(z_cldfrac(i_lev+1)-z_cldfrac(i_lev), &
     500                            z_cldfrac(i_lev-1)-z_cldfrac(i_lev)))
     501       z_faccmb2d(i_lev-1) = max(0.,min(z_cldfrac(i_lev)-z_cldfrac(i_lev+1), &
     502                    z_cldfrac(i_lev)-z_cldfrac(i_lev-1)))
     503    endif
     504!SB debug <<
    435505  ELSE
    436506    ISTCLDD(I_LEV-1) = 1
     
    805875!      TOTDFLUX(0) = TOTDFLUX(0) * FLUXFAC
    806876
    807 !      CLFNET(0) = TOTUFLUC(0) - TOTDFLUC(0)
    808 !      FNET(0)   = TOTUFLUX(0) - TOTDFLUX(0)
     877!      CLFNET(0) = (P_TOTUFLUC(0) - P_TOTDFLUC(0))
     878!      FNET(0)   = (P_TOTUFLUX(0) - P_TOTDFLUX(0))
    809879!      DO LEV = 1, KLEV
    810880!        TOTUFLUC(LEV) = TOTUFLUC(LEV) * FLUXFAC
    811881!        TOTDFLUC(LEV) = TOTDFLUC(LEV) * FLUXFAC
    812 !        CLFNET(LEV) = TOTUFLUC(LEV) - TOTDFLUC(LEV)
     882!         CLFNET(LEV) =(P_TOTUFLUC(LEV) - P_TOTDFLUC(LEV))
    813883
    814884!        TOTUFLUX(LEV) = TOTUFLUX(LEV) * FLUXFAC
    815885!        TOTDFLUX(LEV) = TOTDFLUX(LEV) * FLUXFAC
    816 !        FNET(LEV) = TOTUFLUX(LEV) - TOTDFLUX(LEV)
     886!        FNET(LEV) = (P_TOTUFLUX(LEV) - P_TOTDFLUX(LEV))
    817887!        L = LEV - 1
    818888
     
    824894!      HTR(KLEV)   = 0.0
    825895
     896
     897
    826898IF (LHOOK) CALL DR_HOOK('RRTM_RTRN1A_140GP',1,ZHOOK_HANDLE)
    827899END SUBROUTINE RRTM_RTRN1A_140GP
Note: See TracChangeset for help on using the changeset viewer.