Changeset 1655


Ignore:
Timestamp:
Oct 1, 2012, 1:35:15 PM (12 years ago)
Author:
idelkadi
Message:

Retour a la version precedente de sw_aeroAR4.F90 en attendant les tests de Olivier Boucher pour avoir la convergence numerique !

File:
1 edited

Legend:

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

    r1653 r1655  
    5656  !     --------------
    5757  !        ORIGINAL : 89-07-14
    58   !        1995-01-01  J.-J. MORCRETTE  Direct/Diffuse Albedo
    59   !        2003-11-27  J. QUAAS Introduce aerosol forcings (based on BOUCHER)
    60   !        2009-04     A. COZIC - C.DEANDREIS Indroduce NAT/BC/POM/DUST/SS aerosol forcing
    61   !        2012-09     O. BOUCHER - reorganise aerosol cases with ok_ade and ok_aie
     58  !        95-01-01   J.-J. MORCRETTE  Direct/Diffuse Albedo
     59  !        03-11-27   J. QUAAS Introduce aerosol forcings (based on BOUCHER)
     60  !        09-04      A. COZIC - C.DEANDREIS Indroduce NAT/BC/POM/DUST/SS aerosol forcing
    6261  !     ------------------------------------------------------------------
    6362  !
     
    8382
    8483  REAL(KIND=8) PCLDSW(KDLON,KFLEV)    ! CLOUD FRACTION
    85   REAL(KIND=8) PTAU(KDLON,2,KFLEV)    ! CLOUD OPTICAL THICKNESS (pre-industrial value)
     84  REAL(KIND=8) PTAU(KDLON,2,KFLEV)    ! CLOUD OPTICAL THICKNESS
    8685  REAL(KIND=8) PCG(KDLON,2,KFLEV)     ! ASYMETRY FACTOR
    8786  REAL(KIND=8) POMEGA(KDLON,2,KFLEV)  ! SINGLE SCATTERING ALBEDO
     
    141140  REAL(KIND=8) pizaero(kdlon,kflev,9,2)  ! (see aeropt.F)
    142141  REAL(KIND=8) cgaero(kdlon,kflev,9,2)   ! -"-
    143   REAL(KIND=8) PTAUA(KDLON,2,KFLEV)    ! CLOUD OPTICAL THICKNESS (present-day value)
     142  REAL(KIND=8) PTAUA(KDLON,2,KFLEV)    ! CLOUD OPTICAL THICKNESS (pre-industrial value)
    144143  REAL(KIND=8) POMEGAA(KDLON,2,KFLEV)  ! SINGLE SCATTERING ALBEDO
    145144  REAL(KIND=8) PTOPSWADAERO(KDLON)     ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR)
    146145  REAL(KIND=8) PSOLSWADAERO(KDLON)     ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR)
    147   REAL(KIND=8) PTOPSWAD0AERO(KDLON)    ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR)
    148   REAL(KIND=8) PSOLSWAD0AERO(KDLON)    ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR)
     146  REAL(KIND=8) PTOPSWAD0AERO(KDLON)     ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR)
     147  REAL(KIND=8) PSOLSWAD0AERO(KDLON)     ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR)
    149148  REAL(KIND=8) PTOPSWAIAERO(KDLON)     ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL IND)
    150149  REAL(KIND=8) PSOLSWAIAERO(KDLON)     ! SHORTWAVE FLUX AT SURFACE(+AEROSOL IND)
    151   REAL(KIND=8) PTOPSWAERO(KDLON,9)    ! SW TOA AS DRF nat & ant
    152   REAL(KIND=8) PTOPSW0AERO(KDLON,9)    ! SW SRF AS DRF nat & ant
    153   REAL(KIND=8) PSOLSWAERO(KDLON,9)    ! SW TOA CS DRF nat & ant
    154   REAL(KIND=8) PSOLSW0AERO(KDLON,9)    ! SW SRF CS DRF nat & ant
     150  REAL(KIND=8) PTOPSWAERO(KDLON,9)      ! SW TOA AS DRF nat & ant
     151  REAL(KIND=8) PTOPSW0AERO(KDLON,9)      ! SW SRF AS DRF nat & ant
     152  REAL(KIND=8) PSOLSWAERO(KDLON,9)      ! SW TOA CS DRF nat & ant
     153  REAL(KIND=8) PSOLSW0AERO(KDLON,9)      ! SW SRF CS DRF nat & ant
    155154  REAL(KIND=8) PTOPSWCFAERO(KDLON,3)   !  SW TOA AS cloudRF nat & ant
    156155  REAL(KIND=8) PSOLSWCFAERO(KDLON,3)   !  SW SRF AS cloudRF nat & ant
     
    180179
    181180! Key to define the aerosol effect acting on climate
    182 ! OB: AEROSOLFEEDBACK_ACTIVE is now a LOGICAL
    183 ! TRUE: fluxes use natural and/or anthropogenic aerosols according to ok_ade and ok_aie, DEFAULT
    184 ! FALSE: fluxes use no aerosols (case 1)
    185 
    186   LOGICAL,SAVE :: AEROSOLFEEDBACK_ACTIVE = .TRUE.
     181! 0: aerosol feedback active according to ok_ade, ok_aie  DEFAULT
     182! 1: no feedback , zero aerosol fluxes are used for climate, diagnostics according to ok_ade_ok_aie
     183! 2: feedback according to total aerosol direct effect used for climate, diagnostics according to ok_ade, ok_aie
     184! 3: feedback according to natural aerosol direct effect used for climate, diagnostics according to ok_ade_ok_aie
     185
     186  INTEGER,SAVE :: AEROSOLFEEDBACK_ACTIVE = 0
    187187!$OMP THREADPRIVATE(AEROSOLFEEDBACK_ACTIVE) 
    188188
    189189      CHARACTER (LEN=20) :: modname='sw_aeroAR4'
    190190      CHARACTER (LEN=80) :: abort_message
     191
     192  IF ((.not. ok_ade) .and. (AEROSOLFEEDBACK_ACTIVE .ge. 2)) THEN
     193     abort_message ='Error: direct effect is not activated but assumed to be active - see sw_aeroAR4.F90'
     194     CALL abort_gcm (modname,abort_message,1)
     195  ENDIF
     196  AEROSOLFEEDBACK_ACTIVE=MIN(MAX(AEROSOLFEEDBACK_ACTIVE,0),3)
     197  IF  (AEROSOLFEEDBACK_ACTIVE .gt. 3) THEN
     198     abort_message ='Error: AEROSOLFEEDBACK_ACTIVE options go only until 3'
     199     CALL abort_gcm (modname,abort_message,1)
     200  ENDIF
    191201
    192202  IF(.NOT.initialized) THEN
     
    199209     ALLOCATE(ZFSUPAI_AERO(KDLON,KFLEV+1))
    200210     ALLOCATE(ZFSDNAI_AERO(KDLON,KFLEV+1))
    201 !-OB decrease size of these arrays to what is needed
    202 !                | direct effect
    203 !ind effect      | no aerosol   natural  total
    204 !natural (PTAU)  |   1            3       2     --ZFSUP/ZFSDN
    205 !total (PTAUA)   |                5       4     --ZFSUP/ZFSDN
    206 !no cloud        |   1            3       2     --ZFSUP0/ZFSDN0
    207 !
    208      ALLOCATE(ZFSUP_AERO (KDLON,KFLEV+1,5))
    209      ALLOCATE(ZFSDN_AERO (KDLON,KFLEV+1,5))
    210      ALLOCATE(ZFSUP0_AERO(KDLON,KFLEV+1,3))
    211      ALLOCATE(ZFSDN0_AERO(KDLON,KFLEV+1,3))
    212 ! end OB modif
     211     ALLOCATE(ZFSUP_AERO (KDLON,KFLEV+1,9))
     212     ALLOCATE(ZFSDN_AERO (KDLON,KFLEV+1,9))
     213     ALLOCATE(ZFSUP0_AERO(KDLON,KFLEV+1,9))
     214     ALLOCATE(ZFSDN0_AERO(KDLON,KFLEV+1,9))
    213215     ZFSUPAD_AERO(:,:)=0.
    214216     ZFSDNAD_AERO(:,:)=0.
     
    224226
    225227  IF (appel1er) THEN
    226      WRITE(lunout,*)'SW calling frequency : ', swpas
     228     WRITE(lunout,*) 'SW calling frequency : ', swpas
    227229     WRITE(lunout,*) "   In general, it should be 1"
    228230     appel1er = .FALSE.
     
    239241     ENDDO
    240242
    241 ! clear sky with no aerosols at all is computed IF ACTIVEFEEDBACK_ACTIVE is false or for extended diag
    242      IF ( swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE ) THEN   
     243! clear sky is either computed IF no direct effect is asked for, or for extended diag)
     244     IF (swaero_diag .or. .not. ok_ade ) THEN   
    243245
    244246     ! clear-sky: zero aerosol effect
     
    266268        ENDDO
    267269     ENDDO
    268      ENDIF ! swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE
    269 
    270 ! cloudy sky with no aerosols at all is either computed IF no indirect effect is asked for, or for extended diag
    271      IF ( swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE ) THEN   
     270     ENDIF
     271
     272! cloudy sky is either computed IF no indirect effect is asked for, or for extended diag)
     273     IF (swaero_diag .or. .not. ok_aie ) THEN   
    272274     ! cloudy-sky: zero aerosol effect
    273275     flag_aer=0.0
     
    295297        ENDDO
    296298     ENDDO
    297      ENDIF ! swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE
     299     ENDIF
     300
    298301
    299302     IF (ok_ade) THEN
    300303
    301         ! clear sky direct effect of total aerosol
     304        ! clear sky (Anne Cozic 03/07/2007) direct effect of total aerosol
    302305        ! CAS AER (2)
    303306        flag_aer=1.0
     
    326329        ENDDO
    327330
     331! cloudy sky is either computed IF no indirect effect is asked for, or for extended diag)
     332        IF (swaero_diag .or. .not. ok_aie) THEN 
     333        ! cloudy-sky aerosol direct effect of total aerosol
     334        flag_aer=1.0
     335        CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,&
     336             PRMU0,PFRAC,PTAVE,PWV,&
     337             ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD)
     338        INU = 1
     339        CALL SW1S_LMDAR4(INU, PAER, flag_aer,&
     340             tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
     341             PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,&
     342             ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,&
     343             ZFD, ZFU)
     344        INU = 2
     345        CALL SW2S_LMDAR4(INU, PAER, flag_aer,&
     346             tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
     347             ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,&
     348             ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,&
     349             PWV, PQS,&
     350             ZFDOWN, ZFUP)
     351
     352        DO JK = 1 , KFLEV+1
     353           DO JL = 1, KDLON
     354              ZFSUP_AERO(JL,JK,2) = (ZFUP(JL,JK)   + ZFU(JL,JK)) * ZFACT(JL)
     355              ZFSDN_AERO(JL,JK,2) = (ZFDOWN(JL,JK) + ZFD(JL,JK)) * ZFACT(JL)
     356           ENDDO
     357        ENDDO
     358        ENDIF
     359
     360! natural aeroosl clear sky is  computed  for extended diag)
    328361        IF ( swaero_diag ) THEN           
    329362        ! clear sky direct effect natural aerosol
    330         ! CAS AER (3)
    331363        flag_aer=1.0
    332364        CALL SWU_LMDAR4(PSCT,ZCLDSW0,PPMB,PPSOL,&
     
    353385           ENDDO
    354386        ENDDO
    355         ENDIF !swaero_diag
    356 
    357         ! cloudy-sky with natural aerosols for indirect effect
    358         ! but total aerosols for direct effect
    359         ! PTAU
    360         ! CAS AER (2)
    361         flag_aer=1.0
    362         CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,&
    363              PRMU0,PFRAC,PTAVE,PWV,&
    364              ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD)
    365         INU = 1
    366         CALL SW1S_LMDAR4(INU, PAER, flag_aer,&
    367              tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
    368              PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,&
    369              ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,&
    370              ZFD, ZFU)
    371         INU = 2
    372         CALL SW2S_LMDAR4(INU, PAER, flag_aer,&
    373              tauaero(:,:,2,:), pizaero(:,:,2,:), cgaero(:,:,2,:),&
    374              ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,&
    375              ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,&
    376              PWV, PQS,&
    377              ZFDOWN, ZFUP)
    378 
    379         DO JK = 1 , KFLEV+1
    380            DO JL = 1, KDLON
    381               ZFSUP_AERO(JL,JK,2) = (ZFUP(JL,JK)   + ZFU(JL,JK)) * ZFACT(JL)
    382               ZFSDN_AERO(JL,JK,2) = (ZFDOWN(JL,JK) + ZFD(JL,JK)) * ZFACT(JL)
    383            ENDDO
    384         ENDDO
    385 !        ENDIF
    386 
    387      ENDIF !-end ok_ade
    388 
    389      IF ( ok_ade .or. (.not.ok_ade .and. ok_aie) ) THEN
    390 
    391         ! cloudy-sky with natural aerosols for indirect effect
    392         ! and natural aerosols for direct effect
    393         ! PTAU
    394         ! CAS AER (3)
     387        ENDIF
     388
     389! cloud sky natural is for extended diagnostics
    395390        IF ( swaero_diag ) THEN
    396391        ! cloudy-sky direct effect natural aerosol
     
    419414           ENDDO
    420415        ENDDO
    421         ENDIF !swaero_diag
    422 
    423      ENDIF  !--true/false or false/true
    424 
    425      IF (ok_ade .and. ok_aie) THEN
    426 
    427         ! cloudy-sky with total aerosols for indirect effect
    428         ! and total aerosols for direct effect
    429         ! PTAUA
    430         ! CAS AER (2)
     416        ENDIF
     417
     418     ENDIF ! ok_ade
     419
     420! cloudy sky needs to be computed in all cases IF ok_aie is activated
     421     IF (ok_aie) THEN
     422        !jq   cloudy-sky + aerosol direct + aerosol indirect of total aerosol
    431423        flag_aer=1.0
    432424        CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,&
     
    446438             PWV, PQS,&
    447439             ZFDOWN, ZFUP)
    448 
    449440        DO JK = 1 , KFLEV+1
    450441           DO JL = 1, KDLON
     
    453444           ENDDO
    454445        ENDDO
    455  
    456       ENDIF ! ok_ade .and. ok_aie
    457 
    458      IF (ok_aie) THEN
    459         ! cloudy-sky with total aerosols for indirect effect
    460         ! and natural aerosols for direct effect
    461         ! PTAUA
    462         ! CAS AER (3)
    463         flag_aer=1.0
    464         CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,&
    465              PRMU0,PFRAC,PTAVE,PWV,&
    466              ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD)
    467         INU = 1
    468         CALL SW1S_LMDAR4(INU, PAER, flag_aer,&
    469              tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
    470              PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,&
    471              ZDSIG, POMEGAA, ZOZ, ZRMU, ZSEC, PTAUA, ZUD,&
    472              ZFD, ZFU)
    473         INU = 2
    474         CALL SW2S_LMDAR4(INU, PAER, flag_aer,&
    475              tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),&
    476              ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,&
    477              ZDSIG, POMEGAA, ZOZ, ZRMU, ZSEC, PTAUA, ZUD,&
    478              PWV, PQS,&
    479              ZFDOWN, ZFUP)
    480  
    481         DO JK = 1 , KFLEV+1
    482            DO JL = 1, KDLON
    483               ZFSUP_AERO(JL,JK,5) = (ZFUP(JL,JK)   + ZFU(JL,JK)) * ZFACT(JL)
    484               ZFSDN_AERO(JL,JK,5) = (ZFDOWN(JL,JK) + ZFD(JL,JK)) * ZFACT(JL)
    485            ENDDO
    486         ENDDO
    487 
    488446     ENDIF ! ok_aie     
    489447
     
    492450  itapsw = itapsw + 1
    493451
    494   IF  ( AEROSOLFEEDBACK_ACTIVE ) THEN
     452  IF  ( AEROSOLFEEDBACK_ACTIVE .eq. 0) THEN
    495453  IF ( ok_ade .and. ok_aie  ) THEN
    496454    ZFSUP(:,:) =    ZFSUP_AERO(:,:,4)
     
    499457    ZFSDN0(:,:) =   ZFSDN0_AERO(:,:,2)
    500458  ENDIF
    501 
    502459  IF ( ok_ade .and. (.not. ok_aie) )  THEN
    503460    ZFSUP(:,:) =    ZFSUP_AERO(:,:,2)
     
    508465
    509466  IF ( (.not. ok_ade) .and. ok_aie  )  THEN
    510     ZFSUP(:,:) =    ZFSUP_AERO(:,:,5)
    511     ZFSDN(:,:) =    ZFSDN_AERO(:,:,5)
    512     ZFSUP0(:,:) =   ZFSUP0_AERO(:,:,3)
    513     ZFSDN0(:,:) =   ZFSDN0_AERO(:,:,3)
    514   ENDIF
    515 
     467    print*,'Warning: indirect effect in cloudy regions includes direct aerosol effect'
     468    ZFSUP(:,:) =    ZFSUP_AERO(:,:,4)
     469    ZFSDN(:,:) =    ZFSDN_AERO(:,:,4)
     470    ZFSUP0(:,:) =   ZFSUP0_AERO(:,:,1)
     471    ZFSDN0(:,:) =   ZFSDN0_AERO(:,:,1)
     472  ENDIF
    516473  IF ((.not. ok_ade) .and. (.not. ok_aie)) THEN
    517     ZFSUP(:,:) =    ZFSUP_AERO(:,:,3)
    518     ZFSDN(:,:) =    ZFSDN_AERO(:,:,3)
    519     ZFSUP0(:,:) =   ZFSUP0_AERO(:,:,3)
    520     ZFSDN0(:,:) =   ZFSDN0_AERO(:,:,3)
    521   ENDIF
    522 
    523 ! MS the following allows to compute the forcing diagostics without
    524 ! letting the aerosol forcing act on the meteorology
    525 ! SEE logic above
    526   ELSE
    527474    ZFSUP(:,:) =    ZFSUP_AERO(:,:,1)
    528475    ZFSDN(:,:) =    ZFSDN_AERO(:,:,1)
     
    531478  ENDIF
    532479
    533 ! Now computes heating rates
     480! MS the following allows to compute the forcing diagostics without
     481! letting the aerosol forcing act on the meteorology
     482! SEE logic above
     483  ELSEIF  ( AEROSOLFEEDBACK_ACTIVE .gt. 0) THEN
     484    ZFSUP(:,:) =    ZFSUP_AERO(:,:,AEROSOLFEEDBACK_ACTIVE)
     485    ZFSDN(:,:) =    ZFSDN_AERO(:,:,AEROSOLFEEDBACK_ACTIVE)
     486    ZFSUP0(:,:) =   ZFSUP0_AERO(:,:,AEROSOLFEEDBACK_ACTIVE)
     487    ZFSDN0(:,:) =   ZFSDN0_AERO(:,:,AEROSOLFEEDBACK_ACTIVE)
     488  ENDIF
     489 
     490
    534491  DO k = 1, KFLEV
    535492     kpl1 = k+1
     
    554511     PTOPSW(i) = ZFSDN(i,KFLEV+1) - ZFSUP(i,KFLEV+1)
    555512
     513
    556514! net anthropogenic forcing direct and 1st indirect effect diagnostics
    557515! requires a natural aerosol field read and used
    558516! Difference of net fluxes from double call to radiation
    559517
     518
    560519IF (ok_ade) THEN
    561520
    562521! indices 1: natural; 2 anthropogenic
    563 
    564522! TOA/SRF all sky natural forcing
    565523     PSOLSWAERO(i,1) = (ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3))-(ZFSDN_AERO(i,1,1) - ZFSUP_AERO(i,1,1))
    566524     PTOPSWAERO(i,1) = (ZFSDN_AERO(i,KFLEV+1,3) - ZFSUP_AERO(i,KFLEV+1,3))- (ZFSDN_AERO(i,KFLEV+1,1) - ZFSUP_AERO(i,KFLEV+1,1))
    567525
     526! TOA/SRF all sky anthropogenic forcing
     527     PSOLSWAERO(i,2) = (ZFSDN_AERO(i,1,2) - ZFSUP_AERO(i,1,2))-(ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3))
     528     PTOPSWAERO(i,2) = (ZFSDN_AERO(i,KFLEV+1,2) - ZFSUP_AERO(i,KFLEV+1,2))- (ZFSDN_AERO(i,KFLEV+1,3) - ZFSUP_AERO(i,KFLEV+1,3))
     529
    568530! TOA/SRF clear sky natural forcing
    569531     PSOLSW0AERO(i,1) = (ZFSDN0_AERO(i,1,3) - ZFSUP0_AERO(i,1,3))-(ZFSDN0_AERO(i,1,1) - ZFSUP0_AERO(i,1,1))
    570532     PTOPSW0AERO(i,1) = (ZFSDN0_AERO(i,KFLEV+1,3) - ZFSUP0_AERO(i,KFLEV+1,3))-(ZFSDN0_AERO(i,KFLEV+1,1) - ZFSUP0_AERO(i,KFLEV+1,1))
    571533
    572    IF (ok_aie) THEN
    573 
    574 ! TOA/SRF all sky anthropogenic forcing
    575      PSOLSWAERO(i,2) = (ZFSDN_AERO(i,1,4) - ZFSUP_AERO(i,1,4))-(ZFSDN_AERO(i,1,5) - ZFSUP_AERO(i,1,5))
    576      PTOPSWAERO(i,2) = (ZFSDN_AERO(i,KFLEV+1,4) - ZFSUP_AERO(i,KFLEV+1,4))- (ZFSDN_AERO(i,KFLEV+1,5) - ZFSUP_AERO(i,KFLEV+1,5))
    577 
    578    ELSE
    579 
    580 ! TOA/SRF all sky anthropogenic forcing
    581      PSOLSWAERO(i,2) = (ZFSDN_AERO(i,1,2) - ZFSUP_AERO(i,1,2))-(ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3))
    582      PTOPSWAERO(i,2) = (ZFSDN_AERO(i,KFLEV+1,2) - ZFSUP_AERO(i,KFLEV+1,2))- (ZFSDN_AERO(i,KFLEV+1,3) - ZFSUP_AERO(i,KFLEV+1,3))
    583 
    584    ENDIF
    585 
    586534! TOA/SRF clear sky anthropogenic forcing
    587535     PSOLSW0AERO(i,2) = (ZFSDN0_AERO(i,1,2) - ZFSUP0_AERO(i,1,2))-(ZFSDN0_AERO(i,1,3) - ZFSUP0_AERO(i,1,3))
    588536     PTOPSW0AERO(i,2) = (ZFSDN0_AERO(i,KFLEV+1,2) - ZFSUP0_AERO(i,KFLEV+1,2))-(ZFSDN0_AERO(i,KFLEV+1,3) - ZFSUP0_AERO(i,KFLEV+1,3))
     537
     538! Cloud forcing indices 1: natural; 2 anthropogenic; 3: zero aerosol direct effect
     539! Instantaneously computed cloudy sky direct aerosol effect, cloud forcing due to aerosols above clouds
     540! natural
     541     PSOLSWCFAERO(i,1) = PSOLSWAERO(i,1) - PSOLSW0AERO(i,1)
     542     PTOPSWCFAERO(i,1) = PTOPSWAERO(i,1) - PTOPSW0AERO(i,1)
     543
     544! Instantaneously computed cloudy SKY DIRECT aerosol effect, cloud forcing due to aerosols above clouds
     545! anthropogenic
     546     PSOLSWCFAERO(i,2) = PSOLSWAERO(i,2) - PSOLSW0AERO(i,2)
     547     PTOPSWCFAERO(i,2) = PTOPSWAERO(i,2) - PTOPSW0AERO(i,2)
     548
     549! Cloudforcing without aerosol
     550! zero
     551     PSOLSWCFAERO(i,3) = (ZFSDN_AERO(i,1,1) - ZFSUP_AERO(i,1,1))-(ZFSDN0_AERO(i,1,1) - ZFSUP0_AERO(i,1,1))
     552     PTOPSWCFAERO(i,3) = (ZFSDN_AERO(i,KFLEV+1,1) - ZFSUP_AERO(i,KFLEV+1,1))- (ZFSDN0_AERO(i,KFLEV+1,1) - ZFSUP0_AERO(i,KFLEV+1,1))
    589553
    590554! direct anthropogenic forcing , as in old LMDzT, however differences of net fluxes
     
    594558     PTOPSWAD0AERO(i) = PTOPSW0AERO(i,2)
    595559
    596 ! OB: these diagnostics may not always work but who need them
    597 ! Cloud forcing indices 1: natural; 2 anthropogenic; 3: zero aerosol direct effect
    598 ! Instantaneously computed cloudy sky direct aerosol effect, cloud forcing due to aerosols above clouds
    599 ! natural
    600      PSOLSWCFAERO(i,1) = PSOLSWAERO(i,1) - PSOLSW0AERO(i,1)
    601      PTOPSWCFAERO(i,1) = PTOPSWAERO(i,1) - PTOPSW0AERO(i,1)
    602 
    603 ! Instantaneously computed cloudy SKY DIRECT aerosol effect, cloud forcing due to aerosols above clouds
    604 ! anthropogenic
    605      PSOLSWCFAERO(i,2) = PSOLSWAERO(i,2) - PSOLSW0AERO(i,2)
    606      PTOPSWCFAERO(i,2) = PTOPSWAERO(i,2) - PTOPSW0AERO(i,2)
    607 
    608 ! Cloudforcing without aerosol
    609 ! zero
    610      PSOLSWCFAERO(i,3) = (ZFSDN_AERO(i,1,1) - ZFSUP_AERO(i,1,1))-(ZFSDN0_AERO(i,1,1) - ZFSUP0_AERO(i,1,1))
    611      PTOPSWCFAERO(i,3) = (ZFSDN_AERO(i,KFLEV+1,1) - ZFSUP_AERO(i,KFLEV+1,1))- (ZFSDN0_AERO(i,KFLEV+1,1) - ZFSUP0_AERO(i,KFLEV+1,1))
    612 
    613560ENDIF
    614561
     562
    615563IF (ok_aie) THEN
    616    IF (ok_ade) THEN
    617564     PSOLSWAIAERO(i) = (ZFSDN_AERO(i,1,4) - ZFSUP_AERO(i,1,4))-(ZFSDN_AERO(i,1,2) - ZFSUP_AERO(i,1,2))
    618565     PTOPSWAIAERO(i) = (ZFSDN_AERO(i,KFLEV+1,4) - ZFSUP_AERO(i,KFLEV+1,4))-(ZFSDN_AERO(i,KFLEV+1,2) - ZFSUP_AERO(i,KFLEV+1,2))
    619    ELSE
    620      PSOLSWAIAERO(i) = (ZFSDN_AERO(i,1,5) - ZFSUP_AERO(i,1,5))-(ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3))
    621      PTOPSWAIAERO(i) = (ZFSDN_AERO(i,KFLEV+1,5) - ZFSUP_AERO(i,KFLEV+1,5))-(ZFSDN_AERO(i,KFLEV+1,3) - ZFSUP_AERO(i,KFLEV+1,3))
    622    ENDIF
    623566ENDIF
    624567
    625 ENDDO
    626 
     568  ENDDO
    627569END SUBROUTINE SW_AEROAR4
Note: See TracChangeset for help on using the changeset viewer.