Ignore:
Timestamp:
Oct 25, 2018, 5:23:18 PM (6 years ago)
Author:
Laurent Fairhead
Message:

Modifications needed for VolMIP diagnostics for IPSLCM6.1.8
NL/LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/radlwsw_m.F90

    r3117 r3408  
    1616   t,q,wo,&
    1717   cldfra, cldemi, cldtaupd,&
    18    ok_ade, ok_aie, flag_aerosol,&
     18   ok_ade, ok_aie, ok_volcan, flag_aerosol,&
    1919   flag_aerosol_strat,&
    2020   tau_aero, piz_aero, cg_aero,&
     
    2525   ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, &
    2626   heat,heat0,cool,cool0,albpla,&
     27   heat_volc, cool_volc,&
    2728   topsw,toplw,solsw,sollw,&
    2829   sollwdown,&
     
    100101  ! ok_ade---input-L- apply the Aerosol Direct Effect or not?
    101102  ! ok_aie---input-L- apply the Aerosol Indirect Effect or not?
     103  ! ok_volcan-input-L- activate volcanic diags (SW heat & LW cool rate, SW & LW flux)
    102104  ! flag_aerosol-input-I- aerosol flag from 0 to 6
    103105  ! flag_aerosol_strat-input-I- use stratospheric aerosols flag (0, 1, 2)
     
    119121  ! solswai---output-R- ray. solaire net absorbe a la surface (aerosol ind)
    120122  ! topswai---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol ind)
     123  !
     124  ! heat_volc-----output-R- echauffement atmospherique  du au forcage volcanique (visible) (K/s)
     125  ! cool_volc-----output-R- refroidissement dans l'IR du au forcage volcanique (K/s)
    121126  !
    122127  ! ATTENTION: swai and swad have to be interpreted in the following manner:
     
    192197
    193198  LOGICAL, INTENT(in)  :: ok_ade, ok_aie                                 ! switches whether to use aerosol direct (indirect) effects or not
     199  LOGICAL, INTENT(in)  :: ok_volcan                                      ! produce volcanic diags (SW/LW heat flux and rate)
    194200  LOGICAL              :: lldebug
    195201  INTEGER, INTENT(in)  :: flag_aerosol                                   ! takes value 0 (no aerosol) or 1 to 6 (aerosols)
     
    226232  REAL,    INTENT(out) :: heat(KLON,KLEV), cool(KLON,KLEV)
    227233  REAL,    INTENT(out) :: heat0(KLON,KLEV), cool0(KLON,KLEV)
     234  REAL,    INTENT(out) :: heat_volc(KLON,KLEV), cool_volc(KLON,KLEV) !NL
    228235  REAL,    INTENT(out) :: topsw(KLON), toplw(KLON)
    229236  REAL,    INTENT(out) :: solsw(KLON), sollw(KLON), albpla(KLON)
     
    292299  REAL(KIND=8) zheat(kdlon,kflev), zcool(kdlon,kflev)
    293300  REAL(KIND=8) zheat0(kdlon,kflev), zcool0(kdlon,kflev)
     301  REAL(KIND=8) zheat_volc(kdlon,kflev), zcool_volc(kdlon,kflev) !NL
    294302  REAL(KIND=8) ztopsw(kdlon), ztoplw(kdlon)
    295303  REAL(KIND=8) zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon)
     
    306314  REAL(KIND=8) ztopswad0aero(kdlon), zsolswad0aero(kdlon)   ! Aerosol direct forcing at TOAand surface
    307315  REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon)     ! dito, indirect
     316!--NL
     317  REAL(KIND=8) zswadaero(kdlon,kflev+1)                       ! SW Aerosol direct forcing
     318  REAL(KIND=8) zlwadaero(kdlon,kflev+1)                       ! LW Aerosol direct forcing
    308319!-LW by CK
    309320  REAL(KIND=8) ztoplwadaero(kdlon), zsollwadaero(kdlon)     ! LW Aerosol direct forcing at TOAand surface
     
    413424      heat(i,k)=0.
    414425      cool(i,k)=0.
     426      heat_volc(i,k)=0. !NL
     427      cool_volc(i,k)=0. !NL
    415428      heat0(i,k)=0.
    416429      cool0(i,k)=0.
     
    544557!--- Mise a zero des tableaux output du rayonnement LW-AR4 ----------             
    545558      DO k = 1, kflev+1
     559         DO i = 1, kdlon
     560!     print *,'RADLWSW: boucle mise a zero i k',i,k
     561            ZFLUP(i,k)=0.
     562            ZFLDN(i,k)=0.
     563            ZFLUP0(i,k)=0.
     564            ZFLDN0(i,k)=0.
     565            ZLWFT0_i(i,k)=0.
     566            ZFLUCUP_i(i,k)=0.
     567            ZFLUCDWN_i(i,k)=0.
     568         ENDDO
     569      ENDDO
     570      DO k = 1, kflev
     571         DO i = 1, kdlon
     572            zcool(i,k)=0.
     573            zcool_volc(i,k)=0. !NL
     574            zcool0(i,k)=0.
     575         ENDDO
     576      ENDDO
    546577      DO i = 1, kdlon
    547 !     print *,'RADLWSW: boucle mise a zero i k',i,k
    548       ZFLUP(i,k)=0.
    549       ZFLDN(i,k)=0.
    550       ZFLUP0(i,k)=0.
    551       ZFLDN0(i,k)=0.
    552       ZLWFT0_i(i,k)=0.
    553       ZFLUCUP_i(i,k)=0.
    554       ZFLUCDWN_i(i,k)=0.
    555       ENDDO
    556       ENDDO
    557       DO k = 1, kflev
    558       DO i = 1, kdlon
    559       zcool(i,k)=0.
    560       zcool0(i,k)=0.
    561       ENDDO
    562       ENDDO
    563       DO i = 1, kdlon
    564       ztoplw(i)=0.
    565       zsollw(i)=0.
    566       ztoplw0(i)=0.
    567       zsollw0(i)=0.
    568       zsollwdown(i)=0.
     578         ztoplw(i)=0.
     579         zsollw(i)=0.
     580         ztoplw0(i)=0.
     581         zsollw0(i)=0.
     582         zsollwdown(i)=0.
    569583      ENDDO
    570584       ! Old radiation scheme, used for AR4 runs
     
    582596!----- Mise a zero des tableaux output du rayonnement SW-AR4
    583597      DO k = 1, kflev+1
    584       DO i = 1, kdlon
    585       ZFSUP(i,k)=0.
    586       ZFSDN(i,k)=0.
    587       ZFSUP0(i,k)=0.
    588       ZFSDN0(i,k)=0.
    589       ZFSUPC0(i,k)=0.
    590       ZFSDNC0(i,k)=0.
    591       ZFLUPC0(i,k)=0.
    592       ZFLDNC0(i,k)=0.
    593       ZSWFT0_i(i,k)=0.
    594       ZFCUP_i(i,k)=0.
    595       ZFCDWN_i(i,k)=0.
    596       ZFCCUP_i(i,k)=0.
    597       ZFCCDWN_i(i,k)=0.
    598       ZFLCCUP_i(i,k)=0.
    599       ZFLCCDWN_i(i,k)=0.
    600       ENDDO
     598         DO i = 1, kdlon
     599            ZFSUP(i,k)=0.
     600            ZFSDN(i,k)=0.
     601            ZFSUP0(i,k)=0.
     602            ZFSDN0(i,k)=0.
     603            ZFSUPC0(i,k)=0.
     604            ZFSDNC0(i,k)=0.
     605            ZFLUPC0(i,k)=0.
     606            ZFLDNC0(i,k)=0.
     607            ZSWFT0_i(i,k)=0.
     608            ZFCUP_i(i,k)=0.
     609            ZFCDWN_i(i,k)=0.
     610            ZFCCUP_i(i,k)=0.
     611            ZFCCDWN_i(i,k)=0.
     612            ZFLCCUP_i(i,k)=0.
     613            ZFLCCDWN_i(i,k)=0.
     614            zswadaero(i,k)=0. !--NL
     615         ENDDO
    601616      ENDDO
    602617      DO k = 1, kflev
    603       DO i = 1, kdlon
    604       zheat(i,k)=0.
    605       zheat0(i,k)=0.
    606       ENDDO
     618         DO i = 1, kdlon
     619            zheat(i,k)=0.
     620            zheat_volc(i,k)=0.
     621            zheat0(i,k)=0.
     622         ENDDO
    607623      ENDDO
    608624      DO i = 1, kdlon
     
    852868         ZTOPSWAIAERO,ZSOLSWAIAERO, &
    853869         ZTOPSWCF_AERO,ZSOLSWCF_AERO, &
     870         ZSWADAERO, & !--NL
    854871         ZTOPLWADAERO,ZSOLLWADAERO,&  ! rajoute par C. Kleinscmitt pour LW diagnostics
    855872         ZTOPLWAD0AERO,ZSOLLWAD0AERO,&
    856873         ZTOPLWAIAERO,ZSOLLWAIAERO, &
    857          ok_ade, ok_aie, flag_aerosol,flag_aerosol_strat) ! flags aerosols
     874         ZLWADAERO, & !--NL
     875         ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat) ! flags aerosols
    858876           
    859877!        print *,'RADLWSW: apres RECMWF'
     
    934952         ZFLDNC0(i,k+1)= ZFLCCDWN_i(i,k+1)
    935953         ZFLUPC0(i,k+1)= ZFLCCUP_i(i,k+1)
     954         IF(ok_volcan) THEN
     955            ZSWADAERO(i,k+1)=ZSWADAERO(i,k+1)*fract(i) !--NL
     956         ENDIF
     957         
    936958!   Nouveau calcul car visiblement ZSWFT et ZSWFC sont nuls dans RRTM cy32
    937959!   en sortie de radlsw.F90 - MPL 7.01.09
     
    10141036           zcool(i,k)=(ZLWFT(i,k)-ZLWFT(i,k+1))*RDAY*RG/RCPD/PDP(i,k)
    10151037           zcool0(i,k)=(ZLWFT0_i(i,k)-ZLWFT0_i(i,k+1))*RDAY*RG/RCPD/PDP(i,k)
     1038           IF(ok_volcan) THEN
     1039              zheat_volc(i,k)=(ZSWADAERO(i,k+1)-ZSWADAERO(i,k))*RDAY*RG/RCPD/PDP(i,k) !NL
     1040              zcool_volc(i,k)=(ZLWADAERO(i,k)-ZLWADAERO(i,k+1))*RDAY*RG/RCPD/PDP(i,k) !NL
     1041           ENDIF
    10161042!          print *,'heat cool heat0 cool0 ',zheat(i,k),zcool(i,k),zheat0(i,k),zcool0(i,k)
    10171043!          ZFLUCUP_i(i,k)=ZFLUC_i(i,1,k)
     
    11231149        heat0(iof+i,k) = zheat0(i,k)/zznormcp
    11241150        cool0(iof+i,k) = zcool0(i,k)/zznormcp
     1151        IF(ok_volcan) THEN !NL
     1152           heat_volc(iof+i,k) = zheat_volc(i,k)/zznormcp
     1153           cool_volc(iof+i,k) = zcool_volc(i,k)/zznormcp
     1154        ENDIF
    11251155      ENDDO
    11261156    ENDDO
Note: See TracChangeset for help on using the changeset viewer.