Changeset 1667 for LMDZ5/trunk
- Timestamp:
- Oct 11, 2012, 12:42:12 PM (12 years ago)
- Location:
- LMDZ5/trunk/libf/phylmd
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/conf_phys.F90
r1638 r1667 287 287 !Config Help = Used in physiq.F 288 288 ! 289 ! - flag_aerosol=0 => no aerosol 289 290 ! - flag_aerosol=1 => so4 only (defaut) 290 291 ! - flag_aerosol=2 => bc only … … 1766 1767 ! il n'est utilisable que lors du couplage avec le SO4 seul 1767 1768 IF (ok_ade .OR. ok_aie) THEN 1769 IF ( flag_aerosol .EQ. 0 ) THEN 1770 CALL abort_gcm('conf_phys','flag_aerosol=0 not compatible avec ok_ade ou ok_aie=.TRUE.',1) 1771 END IF 1768 1772 IF ( .NOT. new_aod .AND. flag_aerosol .NE. 1) THEN 1769 1773 CALL abort_gcm('conf_phys','new_aod=.FALSE. not compatible avec flag_aerosol=1',1) -
LMDZ5/trunk/libf/phylmd/physiq.F
r1641 r1667 1247 1247 LOGICAL, SAVE :: mskocean_beta 1248 1248 c$OMP THREADPRIVATE(mskocean_beta) 1249 REAL, dimension(klon, klev) :: beta ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF 1250 REAL, dimension(klon, klev) :: cldtaurad ! epaisseur optique pour radlwsw,COSP 1251 REAL, dimension(klon, klev) :: cldemirad ! emissivite pour radlwsw,COSP 1249 REAL, dimension(klon, klev) :: beta ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF 1250 REAL, dimension(klon, klev) :: cldtaurad ! epaisseur optique pour radlwsw,COSP 1251 REAL, dimension(klon, klev) :: cldtaupirad ! epaisseur optique pour radlwsw,COSP cas pre-industrial 1252 REAL, dimension(klon, klev) :: cldemirad ! emissivite pour radlwsw,COSP 1252 1253 INTEGER :: nbtr_tmp ! Number of tracer inside concvl 1253 1254 REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac … … 3099 3100 cjq - introduce the aerosol direct and first indirect radiative forcings 3100 3101 cjq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr) 3101 IF ( ok_ade.OR.ok_aie) THEN3102 IF (flag_aerosol .gt. 0) THEN 3102 3103 IF (.NOT. aerosol_couple) 3103 3104 & CALL readaerosol_optic( … … 3384 3385 cIM betaCRF 3385 3386 c 3386 cldtaurad = cldtau 3387 cldemirad = cldemi 3387 cldtaurad = cldtau 3388 cldtaupirad = cldtaupi 3389 cldemirad = cldemi 3388 3390 c 3389 3391 if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. … … 3402 3404 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3403 3405 endif 3404 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3405 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3406 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3407 cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k) 3408 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3406 3409 ENDDO 3407 3410 ENDDO … … 3424 3427 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3425 3428 endif 3426 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3427 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3429 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3430 cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k) 3431 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3428 3432 endif 3429 3433 c … … 3474 3478 s topsw_aero, topsw0_aero, 3475 3479 s solsw_aero, solsw0_aero, 3476 e cldtaupi ,3480 e cldtaupirad, 3477 3481 s topswai_aero, solswai_aero) 3478 3482 … … 3497 3501 e t_seri,q_seri,wo, 3498 3502 e cldfra, cldemirad, cldtaurad, 3499 e ok_ade, ok_aie, 3503 e ok_ade, ok_aie, flag_aerosol, 3500 3504 e tau_aero, piz_aero, cg_aero, 3501 e cldtaupi ,new_aod,3505 e cldtaupirad,new_aod, 3502 3506 e zqsat, flwc, fiwc, 3503 3507 s heat,heat0,cool,cool0,radsol,albpla, … … 3538 3542 e t_seri,q_seri,wo, 3539 3543 e cldfra, cldemi, cldtau, 3540 e ok_ade, ok_aie, 3544 e ok_ade, ok_aie, flag_aerosol, 3541 3545 e tau_aero, piz_aero, cg_aero, 3542 3546 e cldtaupi,new_aod, -
LMDZ5/trunk/libf/phylmd/radlwsw.F90
r1565 r1667 10 10 t,q,wo,& 11 11 cldfra, cldemi, cldtaupd,& 12 ok_ade, ok_aie, &12 ok_ade, ok_aie, flag_aerosol,& 13 13 tau_aero, piz_aero, cg_aero,& 14 14 cldtaupi, new_aod, & … … 56 56 ! ok_ade---input-L- apply the Aerosol Direct Effect or not? 57 57 ! ok_aie---input-L- apply the Aerosol Indirect Effect or not? 58 ! flag_aerosol-input-I- aerosol flag from 0 to 6 58 59 ! tau_ae, piz_ae, cg_ae-input-R- aerosol optical properties (calculated in aeropt.F) 59 60 ! cldtaupi-input-R- epaisseur optique des nuages dans le visible … … 119 120 120 121 LOGICAL, INTENT(in) :: ok_ade, ok_aie ! switches whether to use aerosol direct (indirect) effects or not 122 INTEGER, INTENT(in) :: flag_aerosol ! takes value 0 (no aerosol) or 1 to 6 (aerosols) 121 123 REAL, INTENT(in) :: cldfra(KLON,KLEV), cldemi(KLON,KLEV), cldtaupd(KLON,KLEV) 122 124 REAL, INTENT(in) :: tau_aero(KLON,KLEV,9,2) ! aerosol optical properties (see aeropt.F) … … 354 356 zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,& 355 357 ZFSUP,ZFSDN,ZFSUP0,ZFSDN0,& 356 tau _aero(:,:,5,:), piz_aero(:,:,5,:), cg_aero(:,:,5,:),&358 tauaero(:,:,5,:), pizaero(:,:,5,:), cgaero(:,:,5,:),& 357 359 PTAUA, POMEGAA,& 358 360 ztopswadaero,zsolswadaero,& 359 361 ztopswaiaero,zsolswaiaero,& 360 ok_ade, ok_aie )362 ok_ade, ok_aie, flag_aerosol) 361 363 362 364 ELSE ! new_aod=T … … 377 379 zsolsw_aero,zsolsw0_aero,& 378 380 ztopswcf_aero,zsolswcf_aero, & 379 ok_ade, ok_aie) 380 381 ok_ade, ok_aie, flag_aerosol) 381 382 ENDIF 382 383 -
LMDZ5/trunk/libf/phylmd/sw_aeroAR4.F90
r1655 r1667 18 18 PSOLSWAERO,PSOLSW0AERO,& 19 19 PTOPSWCFAERO,PSOLSWCFAERO,& 20 ok_ade, ok_aie )20 ok_ade, ok_aie, flag_aerosol ) 21 21 22 22 USE dimphy … … 56 56 ! -------------- 57 57 ! ORIGINAL : 89-07-14 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 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, ok_aie, flag_aerosol 61 62 ! ------------------------------------------------------------------ 62 63 ! … … 82 83 83 84 REAL(KIND=8) PCLDSW(KDLON,KFLEV) ! CLOUD FRACTION 84 REAL(KIND=8) PTAU(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS 85 REAL(KIND=8) PTAU(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (pre-industrial value) 85 86 REAL(KIND=8) PCG(KDLON,2,KFLEV) ! ASYMETRY FACTOR 86 87 REAL(KIND=8) POMEGA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO … … 132 133 !$OMP THREADPRIVATE(initialized) 133 134 134 !jq- Introduced for aerosol forcings135 !jq-local flag introduced for aerosol forcings 135 136 REAL(KIND=8), SAVE :: flag_aer 136 137 !$OMP THREADPRIVATE(flag_aer) 137 138 138 139 LOGICAL ok_ade, ok_aie ! use aerosol forcings or not? 140 INTEGER flag_aerosol ! global flag for aerosol 0 (no aerosol) or 1-5 (aerosols) 139 141 REAL(KIND=8) tauaero(kdlon,kflev,9,2) ! aerosol optical properties 140 142 REAL(KIND=8) pizaero(kdlon,kflev,9,2) ! (see aeropt.F) 141 143 REAL(KIND=8) cgaero(kdlon,kflev,9,2) ! -"- 142 REAL(KIND=8) PTAUA(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (pre -industrialvalue)144 REAL(KIND=8) PTAUA(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (present-day value) 143 145 REAL(KIND=8) POMEGAA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO 144 146 REAL(KIND=8) PTOPSWADAERO(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR) 145 147 REAL(KIND=8) PSOLSWADAERO(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR) 146 REAL(KIND=8) PTOPSWAD0AERO(KDLON) 147 REAL(KIND=8) PSOLSWAD0AERO(KDLON) 148 REAL(KIND=8) PTOPSWAD0AERO(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR) 149 REAL(KIND=8) PSOLSWAD0AERO(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR) 148 150 REAL(KIND=8) PTOPSWAIAERO(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL IND) 149 151 REAL(KIND=8) PSOLSWAIAERO(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL IND) 150 REAL(KIND=8) PTOPSWAERO(KDLON,9) 151 REAL(KIND=8) PTOPSW0AERO(KDLON,9) 152 REAL(KIND=8) PSOLSWAERO(KDLON,9) 153 REAL(KIND=8) PSOLSW0AERO(KDLON,9) 152 REAL(KIND=8) PTOPSWAERO(KDLON,9) ! SW TOA AS DRF nat & ant 153 REAL(KIND=8) PTOPSW0AERO(KDLON,9) ! SW SRF AS DRF nat & ant 154 REAL(KIND=8) PSOLSWAERO(KDLON,9) ! SW TOA CS DRF nat & ant 155 REAL(KIND=8) PSOLSW0AERO(KDLON,9) ! SW SRF CS DRF nat & ant 154 156 REAL(KIND=8) PTOPSWCFAERO(KDLON,3) ! SW TOA AS cloudRF nat & ant 155 157 REAL(KIND=8) PSOLSWCFAERO(KDLON,3) ! SW SRF AS cloudRF nat & ant … … 179 181 180 182 ! Key to define the aerosol effect acting on climate 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 183 ! OB: AEROSOLFEEDBACK_ACTIVE is now a LOGICAL 184 ! TRUE: fluxes use natural and/or anthropogenic aerosols according to ok_ade and ok_aie, DEFAULT 185 ! FALSE: fluxes use no aerosols (case 1) 186 187 LOGICAL,SAVE :: AEROSOLFEEDBACK_ACTIVE = .TRUE. 187 188 !$OMP THREADPRIVATE(AEROSOLFEEDBACK_ACTIVE) 188 189 189 190 CHARACTER (LEN=20) :: modname='sw_aeroAR4' 190 191 CHARACTER (LEN=80) :: abort_message 191 192 IF ((.not. ok_ade) .and. (AEROSOLFEEDBACK_ACTIVE .ge. 2)) THEN193 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 ENDIF196 AEROSOLFEEDBACK_ACTIVE=MIN(MAX(AEROSOLFEEDBACK_ACTIVE,0),3)197 IF (AEROSOLFEEDBACK_ACTIVE .gt. 3) THEN198 abort_message ='Error: AEROSOLFEEDBACK_ACTIVE options go only until 3'199 CALL abort_gcm (modname,abort_message,1)200 ENDIF201 192 202 193 IF(.NOT.initialized) THEN … … 209 200 ALLOCATE(ZFSUPAI_AERO(KDLON,KFLEV+1)) 210 201 ALLOCATE(ZFSDNAI_AERO(KDLON,KFLEV+1)) 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)) 202 !-OB decrease size of these arrays to what is needed 203 ! | direct effect 204 !ind effect | no aerosol natural total 205 !natural (PTAU) | 1 3 2 --ZFSUP/ZFSDN 206 !total (PTAUA) | 5 4 --ZFSUP/ZFSDN 207 !no cloud | 1 3 2 --ZFSUP0/ZFSDN0 208 ! so we need which case when ? 209 ! ok_ade and ok_aie = 4-5, 4-2 and 2 210 ! ok_ade and not ok_aie = 2-3 and 2 211 ! not ok_ade and ok_aie = 5-3 and 5 212 ! not ok_ade and not ok_aie = 3 213 ! therefore the cases have the folliwng switches 214 ! 3 = not ok_ade or not ok_aie 215 ! 4 = ok_ade and ok_aie 216 ! 2 = ok_ade 217 ! 5 = ok_aie 218 ALLOCATE(ZFSUP_AERO (KDLON,KFLEV+1,5)) 219 ALLOCATE(ZFSDN_AERO (KDLON,KFLEV+1,5)) 220 ALLOCATE(ZFSUP0_AERO(KDLON,KFLEV+1,3)) 221 ALLOCATE(ZFSDN0_AERO(KDLON,KFLEV+1,3)) 222 ! end OB modif 215 223 ZFSUPAD_AERO(:,:)=0. 216 224 ZFSDNAD_AERO(:,:)=0. … … 226 234 227 235 IF (appel1er) THEN 228 WRITE(lunout,*) 236 WRITE(lunout,*)'SW calling frequency : ', swpas 229 237 WRITE(lunout,*) " In general, it should be 1" 230 238 appel1er = .FALSE. … … 241 249 ENDDO 242 250 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) THEN251 ! clear sky with no aerosols at all is computed IF ACTIVEFEEDBACK_ACTIVE is false or for extended diag 252 IF ( swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE .OR. flag_aerosol .EQ. 0 ) THEN 245 253 246 254 ! clear-sky: zero aerosol effect … … 268 276 ENDDO 269 277 ENDDO 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) THEN278 ENDIF ! swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE 279 280 ! cloudy sky with no aerosols at all is either computed IF no indirect effect is asked for, or for extended diag 281 IF ( swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE .OR. flag_aerosol .EQ. 0 ) THEN 274 282 ! cloudy-sky: zero aerosol effect 275 283 flag_aer=0.0 … … 297 305 ENDDO 298 306 ENDDO 299 ENDIF 300 307 ENDIF ! swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE 308 309 IF (flag_aerosol .GT. 0 ) THEN 310 311 IF (ok_ade.and.swaero_diag .or. .not. ok_ade) THEN 312 313 ! clear sky direct effect natural aerosol 314 ! CAS AER (3) 315 flag_aer=1.0 316 CALL SWU_LMDAR4(PSCT,ZCLDSW0,PPMB,PPSOL,& 317 PRMU0,PFRAC,PTAVE,PWV,& 318 ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD) 319 INU = 1 320 CALL SW1S_LMDAR4(INU, PAER, flag_aer,& 321 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),& 322 PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,& 323 ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,& 324 ZFD, ZFU) 325 INU = 2 326 CALL SW2S_LMDAR4(INU, PAER, flag_aer,& 327 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),& 328 ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,& 329 ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,& 330 PWV, PQS,& 331 ZFDOWN, ZFUP) 332 333 DO JK = 1 , KFLEV+1 334 DO JL = 1, KDLON 335 ZFSUP0_AERO(JL,JK,3) = (ZFUP(JL,JK) + ZFU(JL,JK)) * ZFACT(JL) 336 ZFSDN0_AERO(JL,JK,3) = (ZFDOWN(JL,JK) + ZFD(JL,JK)) * ZFACT(JL) 337 ENDDO 338 ENDDO 339 ENDIF !--end not swaero_diag or not ok_ade 301 340 302 341 IF (ok_ade) THEN 303 342 304 ! clear sky (Anne Cozic 03/07/2007)direct effect of total aerosol343 ! clear sky direct effect of total aerosol 305 344 ! CAS AER (2) 306 345 flag_aer=1.0 … … 329 368 ENDDO 330 369 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 370 ! cloudy-sky with natural aerosols for indirect effect 371 ! but total aerosols for direct effect 372 ! PTAU 373 ! CAS AER (2) 334 374 flag_aer=1.0 335 375 CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,& … … 356 396 ENDDO 357 397 ENDDO 358 ENDIF 359 360 ! natural aeroosl clear sky is computed for extended diag) 361 IF ( swaero_diag ) THEN 362 ! clear sky direct effect natural aerosol 363 flag_aer=1.0 364 CALL SWU_LMDAR4(PSCT,ZCLDSW0,PPMB,PPSOL,& 365 PRMU0,PFRAC,PTAVE,PWV,& 366 ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD) 367 INU = 1 368 CALL SW1S_LMDAR4(INU, PAER, flag_aer,& 369 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),& 370 PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,& 371 ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,& 372 ZFD, ZFU) 373 INU = 2 374 CALL SW2S_LMDAR4(INU, PAER, flag_aer,& 375 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),& 376 ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,& 377 ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD,& 378 PWV, PQS,& 379 ZFDOWN, ZFUP) 380 381 DO JK = 1 , KFLEV+1 382 DO JL = 1, KDLON 383 ZFSUP0_AERO(JL,JK,3) = (ZFUP(JL,JK) + ZFU(JL,JK)) * ZFACT(JL) 384 ZFSDN0_AERO(JL,JK,3) = (ZFDOWN(JL,JK) + ZFD(JL,JK)) * ZFACT(JL) 385 ENDDO 386 ENDDO 387 ENDIF 388 389 ! cloud sky natural is for extended diagnostics 390 IF ( swaero_diag ) THEN 398 399 ENDIF !-end ok_ade 400 401 IF ( .not. ok_ade .or. .not. ok_aie ) THEN 402 403 ! cloudy-sky with natural aerosols for indirect effect 404 ! and natural aerosols for direct effect 405 ! PTAU 406 ! CAS AER (3) 391 407 ! cloudy-sky direct effect natural aerosol 392 408 flag_aer=1.0 … … 414 430 ENDDO 415 431 ENDDO 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 432 433 ENDIF !--true/false or false/true 434 435 IF (ok_ade .and. ok_aie) THEN 436 437 ! cloudy-sky with total aerosols for indirect effect 438 ! and total aerosols for direct effect 439 ! PTAUA 440 ! CAS AER (2) 423 441 flag_aer=1.0 424 442 CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,& … … 438 456 PWV, PQS,& 439 457 ZFDOWN, ZFUP) 458 440 459 DO JK = 1 , KFLEV+1 441 460 DO JL = 1, KDLON … … 444 463 ENDDO 445 464 ENDDO 465 466 ENDIF ! ok_ade .and. ok_aie 467 468 IF (ok_aie) THEN 469 ! cloudy-sky with total aerosols for indirect effect 470 ! and natural aerosols for direct effect 471 ! PTAUA 472 ! CAS AER (3) 473 flag_aer=1.0 474 CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,& 475 PRMU0,PFRAC,PTAVE,PWV,& 476 ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD) 477 INU = 1 478 CALL SW1S_LMDAR4(INU, PAER, flag_aer,& 479 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),& 480 PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,& 481 ZDSIG, POMEGAA, ZOZ, ZRMU, ZSEC, PTAUA, ZUD,& 482 ZFD, ZFU) 483 INU = 2 484 CALL SW2S_LMDAR4(INU, PAER, flag_aer,& 485 tauaero(:,:,3,:), pizaero(:,:,3,:), cgaero(:,:,3,:),& 486 ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, PCLDSW,& 487 ZDSIG, POMEGAA, ZOZ, ZRMU, ZSEC, PTAUA, ZUD,& 488 PWV, PQS,& 489 ZFDOWN, ZFUP) 490 491 DO JK = 1 , KFLEV+1 492 DO JL = 1, KDLON 493 ZFSUP_AERO(JL,JK,5) = (ZFUP(JL,JK) + ZFU(JL,JK)) * ZFACT(JL) 494 ZFSDN_AERO(JL,JK,5) = (ZFDOWN(JL,JK) + ZFD(JL,JK)) * ZFACT(JL) 495 ENDDO 496 ENDDO 497 446 498 ENDIF ! ok_aie 447 499 500 ENDIF !--if flag_aerosol GT 0 501 448 502 itapsw = 0 449 503 ENDIF 450 504 itapsw = itapsw + 1 451 505 452 IF ( AEROSOLFEEDBACK_ACTIVE . eq. 0) THEN506 IF ( AEROSOLFEEDBACK_ACTIVE .AND. flag_aerosol .GT. 0 ) THEN 453 507 IF ( ok_ade .and. ok_aie ) THEN 454 508 ZFSUP(:,:) = ZFSUP_AERO(:,:,4) … … 457 511 ZFSDN0(:,:) = ZFSDN0_AERO(:,:,2) 458 512 ENDIF 513 459 514 IF ( ok_ade .and. (.not. ok_aie) ) THEN 460 515 ZFSUP(:,:) = ZFSUP_AERO(:,:,2) … … 465 520 466 521 IF ( (.not. ok_ade) .and. ok_aie ) THEN 467 print*,'Warning: indirect effect in cloudy regions includes direct aerosol effect'468 ZFS UP(:,:) = ZFSUP_AERO(:,:,4)469 ZFS DN(:,:) = ZFSDN_AERO(:,:,4)470 ZFS UP0(:,:) = ZFSUP0_AERO(:,:,1)471 ZFSDN0(:,:) = ZFSDN0_AERO(:,:,1)472 ENDIF 522 ZFSUP(:,:) = ZFSUP_AERO(:,:,5) 523 ZFSDN(:,:) = ZFSDN_AERO(:,:,5) 524 ZFSUP0(:,:) = ZFSUP0_AERO(:,:,3) 525 ZFSDN0(:,:) = ZFSDN0_AERO(:,:,3) 526 ENDIF 527 473 528 IF ((.not. ok_ade) .and. (.not. ok_aie)) THEN 529 ZFSUP(:,:) = ZFSUP_AERO(:,:,3) 530 ZFSDN(:,:) = ZFSDN_AERO(:,:,3) 531 ZFSUP0(:,:) = ZFSUP0_AERO(:,:,3) 532 ZFSDN0(:,:) = ZFSDN0_AERO(:,:,3) 533 ENDIF 534 535 ! MS the following allows to compute the forcing diagostics without 536 ! letting the aerosol forcing act on the meteorology 537 ! SEE logic above 538 ELSE 474 539 ZFSUP(:,:) = ZFSUP_AERO(:,:,1) 475 540 ZFSDN(:,:) = ZFSDN_AERO(:,:,1) … … 478 543 ENDIF 479 544 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 545 ! Now computes heating rates 491 546 DO k = 1, KFLEV 492 547 kpl1 = k+1 … … 511 566 PTOPSW(i) = ZFSDN(i,KFLEV+1) - ZFSUP(i,KFLEV+1) 512 567 513 514 568 ! net anthropogenic forcing direct and 1st indirect effect diagnostics 515 569 ! requires a natural aerosol field read and used 516 570 ! Difference of net fluxes from double call to radiation 517 571 518 519 572 IF (ok_ade) THEN 520 573 521 574 ! indices 1: natural; 2 anthropogenic 575 522 576 ! TOA/SRF all sky natural forcing 523 577 PSOLSWAERO(i,1) = (ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3))-(ZFSDN_AERO(i,1,1) - ZFSUP_AERO(i,1,1)) 524 578 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)) 525 579 580 ! TOA/SRF clear sky natural forcing 581 PSOLSW0AERO(i,1) = (ZFSDN0_AERO(i,1,3) - ZFSUP0_AERO(i,1,3))-(ZFSDN0_AERO(i,1,1) - ZFSUP0_AERO(i,1,1)) 582 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)) 583 584 IF (ok_aie) THEN 585 586 ! TOA/SRF all sky anthropogenic forcing 587 PSOLSWAERO(i,2) = (ZFSDN_AERO(i,1,4) - ZFSUP_AERO(i,1,4))-(ZFSDN_AERO(i,1,5) - ZFSUP_AERO(i,1,5)) 588 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)) 589 590 ELSE 591 526 592 ! TOA/SRF all sky anthropogenic forcing 527 593 PSOLSWAERO(i,2) = (ZFSDN_AERO(i,1,2) - ZFSUP_AERO(i,1,2))-(ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3)) 528 594 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 595 530 ! TOA/SRF clear sky natural forcing 531 PSOLSW0AERO(i,1) = (ZFSDN0_AERO(i,1,3) - ZFSUP0_AERO(i,1,3))-(ZFSDN0_AERO(i,1,1) - ZFSUP0_AERO(i,1,1)) 532 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)) 596 ENDIF 533 597 534 598 ! TOA/SRF clear sky anthropogenic forcing … … 536 600 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 601 602 ! direct anthropogenic forcing , as in old LMDzT, however differences of net fluxes 603 PSOLSWADAERO(i) = PSOLSWAERO(i,2) 604 PTOPSWADAERO(i) = PTOPSWAERO(i,2) 605 PSOLSWAD0AERO(i) = PSOLSW0AERO(i,2) 606 PTOPSWAD0AERO(i) = PTOPSW0AERO(i,2) 607 608 ! OB: these diagnostics may not always work but who need them 538 609 ! Cloud forcing indices 1: natural; 2 anthropogenic; 3: zero aerosol direct effect 539 610 ! Instantaneously computed cloudy sky direct aerosol effect, cloud forcing due to aerosols above clouds … … 552 623 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)) 553 624 554 ! direct anthropogenic forcing , as in old LMDzT, however differences of net fluxes555 PSOLSWADAERO(i) = PSOLSWAERO(i,2)556 PTOPSWADAERO(i) = PTOPSWAERO(i,2)557 PSOLSWAD0AERO(i) = PSOLSW0AERO(i,2)558 PTOPSWAD0AERO(i) = PTOPSW0AERO(i,2)559 560 625 ENDIF 561 626 562 563 627 IF (ok_aie) THEN 628 IF (ok_ade) THEN 564 629 PSOLSWAIAERO(i) = (ZFSDN_AERO(i,1,4) - ZFSUP_AERO(i,1,4))-(ZFSDN_AERO(i,1,2) - ZFSUP_AERO(i,1,2)) 565 630 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)) 631 ELSE 632 PSOLSWAIAERO(i) = (ZFSDN_AERO(i,1,5) - ZFSUP_AERO(i,1,5))-(ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3)) 633 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)) 634 ENDIF 566 635 ENDIF 567 636 568 ENDDO 637 ENDDO 638 569 639 END SUBROUTINE SW_AEROAR4
Note: See TracChangeset
for help on using the changeset viewer.