Changeset 1655 for LMDZ5/trunk
- Timestamp:
- Oct 1, 2012, 1:35:15 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/sw_aeroAR4.F90
r1653 r1655 56 56 ! -------------- 57 57 ! 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 62 61 ! ------------------------------------------------------------------ 63 62 ! … … 83 82 84 83 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 86 85 REAL(KIND=8) PCG(KDLON,2,KFLEV) ! ASYMETRY FACTOR 87 86 REAL(KIND=8) POMEGA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO … … 141 140 REAL(KIND=8) pizaero(kdlon,kflev,9,2) ! (see aeropt.F) 142 141 REAL(KIND=8) cgaero(kdlon,kflev,9,2) ! -"- 143 REAL(KIND=8) PTAUA(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (pre sent-dayvalue)142 REAL(KIND=8) PTAUA(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (pre-industrial value) 144 143 REAL(KIND=8) POMEGAA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO 145 144 REAL(KIND=8) PTOPSWADAERO(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR) 146 145 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) 149 148 REAL(KIND=8) PTOPSWAIAERO(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL IND) 150 149 REAL(KIND=8) PSOLSWAIAERO(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL IND) 151 REAL(KIND=8) PTOPSWAERO(KDLON,9) 152 REAL(KIND=8) PTOPSW0AERO(KDLON,9) 153 REAL(KIND=8) PSOLSWAERO(KDLON,9) 154 REAL(KIND=8) PSOLSW0AERO(KDLON,9) 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 155 154 REAL(KIND=8) PTOPSWCFAERO(KDLON,3) ! SW TOA AS cloudRF nat & ant 156 155 REAL(KIND=8) PSOLSWCFAERO(KDLON,3) ! SW SRF AS cloudRF nat & ant … … 180 179 181 180 ! 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 187 187 !$OMP THREADPRIVATE(AEROSOLFEEDBACK_ACTIVE) 188 188 189 189 CHARACTER (LEN=20) :: modname='sw_aeroAR4' 190 190 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 191 201 192 202 IF(.NOT.initialized) THEN … … 199 209 ALLOCATE(ZFSUPAI_AERO(KDLON,KFLEV+1)) 200 210 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)) 213 215 ZFSUPAD_AERO(:,:)=0. 214 216 ZFSDNAD_AERO(:,:)=0. … … 224 226 225 227 IF (appel1er) THEN 226 WRITE(lunout,*) 'SW calling frequency : ', swpas228 WRITE(lunout,*) 'SW calling frequency : ', swpas 227 229 WRITE(lunout,*) " In general, it should be 1" 228 230 appel1er = .FALSE. … … 239 241 ENDDO 240 242 241 ! clear sky with no aerosols at all is computed IF ACTIVEFEEDBACK_ACTIVE is false or for extended diag242 IF ( swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE) THEN243 ! 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 243 245 244 246 ! clear-sky: zero aerosol effect … … 266 268 ENDDO 267 269 ENDDO 268 ENDIF ! swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE269 270 ! cloudy sky with no aerosols at all is either computed IF no indirect effect is asked for, or for extended diag271 IF ( swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE) THEN270 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 272 274 ! cloudy-sky: zero aerosol effect 273 275 flag_aer=0.0 … … 295 297 ENDDO 296 298 ENDDO 297 ENDIF ! swaero_diag .or. .not. AEROSOLFEEDBACK_ACTIVE 299 ENDIF 300 298 301 299 302 IF (ok_ade) THEN 300 303 301 ! clear sky direct effect of total aerosol304 ! clear sky (Anne Cozic 03/07/2007) direct effect of total aerosol 302 305 ! CAS AER (2) 303 306 flag_aer=1.0 … … 326 329 ENDDO 327 330 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) 328 361 IF ( swaero_diag ) THEN 329 362 ! clear sky direct effect natural aerosol 330 ! CAS AER (3)331 363 flag_aer=1.0 332 364 CALL SWU_LMDAR4(PSCT,ZCLDSW0,PPMB,PPSOL,& … … 353 385 ENDDO 354 386 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 395 390 IF ( swaero_diag ) THEN 396 391 ! cloudy-sky direct effect natural aerosol … … 419 414 ENDDO 420 415 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 431 423 flag_aer=1.0 432 424 CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,& … … 446 438 PWV, PQS,& 447 439 ZFDOWN, ZFUP) 448 449 440 DO JK = 1 , KFLEV+1 450 441 DO JL = 1, KDLON … … 453 444 ENDDO 454 445 ENDDO 455 456 ENDIF ! ok_ade .and. ok_aie457 458 IF (ok_aie) THEN459 ! cloudy-sky with total aerosols for indirect effect460 ! and natural aerosols for direct effect461 ! PTAUA462 ! CAS AER (3)463 flag_aer=1.0464 CALL SWU_LMDAR4(PSCT,PCLDSW,PPMB,PPSOL,&465 PRMU0,PFRAC,PTAVE,PWV,&466 ZAKI,ZCLD,ZCLEAR,ZDSIG,ZFACT,ZRMU,ZSEC,ZUD)467 INU = 1468 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 = 2474 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+1482 DO JL = 1, KDLON483 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 ENDDO486 ENDDO487 488 446 ENDIF ! ok_aie 489 447 … … 492 450 itapsw = itapsw + 1 493 451 494 IF ( AEROSOLFEEDBACK_ACTIVE ) THEN452 IF ( AEROSOLFEEDBACK_ACTIVE .eq. 0) THEN 495 453 IF ( ok_ade .and. ok_aie ) THEN 496 454 ZFSUP(:,:) = ZFSUP_AERO(:,:,4) … … 499 457 ZFSDN0(:,:) = ZFSDN0_AERO(:,:,2) 500 458 ENDIF 501 502 459 IF ( ok_ade .and. (.not. ok_aie) ) THEN 503 460 ZFSUP(:,:) = ZFSUP_AERO(:,:,2) … … 508 465 509 466 IF ( (.not. ok_ade) .and. ok_aie ) THEN 510 ZFSUP(:,:) = ZFSUP_AERO(:,:,5)511 ZFS DN(:,:) = ZFSDN_AERO(:,:,5)512 ZFS UP0(:,:) = ZFSUP0_AERO(:,:,3)513 ZFS DN0(:,:) = ZFSDN0_AERO(:,:,3)514 ENDIF515 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 516 473 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 ENDIF522 523 ! MS the following allows to compute the forcing diagostics without524 ! letting the aerosol forcing act on the meteorology525 ! SEE logic above526 ELSE527 474 ZFSUP(:,:) = ZFSUP_AERO(:,:,1) 528 475 ZFSDN(:,:) = ZFSDN_AERO(:,:,1) … … 531 478 ENDIF 532 479 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 534 491 DO k = 1, KFLEV 535 492 kpl1 = k+1 … … 554 511 PTOPSW(i) = ZFSDN(i,KFLEV+1) - ZFSUP(i,KFLEV+1) 555 512 513 556 514 ! net anthropogenic forcing direct and 1st indirect effect diagnostics 557 515 ! requires a natural aerosol field read and used 558 516 ! Difference of net fluxes from double call to radiation 559 517 518 560 519 IF (ok_ade) THEN 561 520 562 521 ! indices 1: natural; 2 anthropogenic 563 564 522 ! TOA/SRF all sky natural forcing 565 523 PSOLSWAERO(i,1) = (ZFSDN_AERO(i,1,3) - ZFSUP_AERO(i,1,3))-(ZFSDN_AERO(i,1,1) - ZFSUP_AERO(i,1,1)) 566 524 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)) 567 525 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 568 530 ! TOA/SRF clear sky natural forcing 569 531 PSOLSW0AERO(i,1) = (ZFSDN0_AERO(i,1,3) - ZFSUP0_AERO(i,1,3))-(ZFSDN0_AERO(i,1,1) - ZFSUP0_AERO(i,1,1)) 570 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)) 571 533 572 IF (ok_aie) THEN573 574 ! TOA/SRF all sky anthropogenic forcing575 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 ELSE579 580 ! TOA/SRF all sky anthropogenic forcing581 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 ENDIF585 586 534 ! TOA/SRF clear sky anthropogenic forcing 587 535 PSOLSW0AERO(i,2) = (ZFSDN0_AERO(i,1,2) - ZFSUP0_AERO(i,1,2))-(ZFSDN0_AERO(i,1,3) - ZFSUP0_AERO(i,1,3)) 588 536 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)) 589 553 590 554 ! direct anthropogenic forcing , as in old LMDzT, however differences of net fluxes … … 594 558 PTOPSWAD0AERO(i) = PTOPSW0AERO(i,2) 595 559 596 ! OB: these diagnostics may not always work but who need them597 ! Cloud forcing indices 1: natural; 2 anthropogenic; 3: zero aerosol direct effect598 ! Instantaneously computed cloudy sky direct aerosol effect, cloud forcing due to aerosols above clouds599 ! natural600 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 clouds604 ! anthropogenic605 PSOLSWCFAERO(i,2) = PSOLSWAERO(i,2) - PSOLSW0AERO(i,2)606 PTOPSWCFAERO(i,2) = PTOPSWAERO(i,2) - PTOPSW0AERO(i,2)607 608 ! Cloudforcing without aerosol609 ! zero610 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 613 560 ENDIF 614 561 562 615 563 IF (ok_aie) THEN 616 IF (ok_ade) THEN617 564 PSOLSWAIAERO(i) = (ZFSDN_AERO(i,1,4) - ZFSUP_AERO(i,1,4))-(ZFSDN_AERO(i,1,2) - ZFSUP_AERO(i,1,2)) 618 565 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 ELSE620 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 ENDIF623 566 ENDIF 624 567 625 ENDDO 626 568 ENDDO 627 569 END SUBROUTINE SW_AEROAR4
Note: See TracChangeset
for help on using the changeset viewer.