Changeset 2618 for LMDZ5/trunk
- Timestamp:
- Sep 1, 2016, 10:47:39 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/physiq_mod.F90
r2614 r2618 3382 3382 #endif 3383 3383 END IF !type_trac = inca 3384 ! 3385 ! Calculer les parametres optiques des nuages et quelques 3386 ! parametres pour diagnostiques: 3387 ! 3388 3389 IF (aerosol_couple.AND.config_inca=='aero') THEN 3390 mass_solu_aero(:,:) = ccm(:,:,1) 3391 mass_solu_aero_pi(:,:) = ccm(:,:,2) 3392 END IF 3393 3394 if (ok_newmicro) then 3395 IF (iflag_rrtm.NE.0) THEN 3384 3385 3386 ! 3387 ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol. 3388 ! 3389 IF (MOD(itaprad,radpas).EQ.0) THEN 3390 3391 ! 3392 !jq - introduce the aerosol direct and first indirect radiative forcings 3393 !jq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr) 3394 IF (flag_aerosol .gt. 0) THEN 3395 IF (iflag_rrtm .EQ. 0) THEN !--old radiation 3396 IF (.NOT. aerosol_couple) THEN 3397 ! 3398 CALL readaerosol_optic( & 3399 debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, & 3400 pdtphys, pplay, paprs, t_seri, rhcl, presnivs, & 3401 mass_solu_aero, mass_solu_aero_pi, & 3402 tau_aero, piz_aero, cg_aero, & 3403 tausum_aero, tau3d_aero) 3404 ENDIF 3405 ELSE ! RRTM radiation 3406 IF (aerosol_couple .AND. config_inca == 'aero' ) THEN 3407 abort_message='config_inca=aero et rrtm=1 impossible' 3408 call abort_physic(modname,abort_message,1) 3409 ELSE 3410 ! 3396 3411 #ifdef CPP_RRTM 3397 IF (ok_cdnc.AND.NRADLP.NE.3) THEN 3412 IF (NSW.EQ.6) THEN 3413 !--new aerosol properties 3414 ! 3415 CALL readaerosol_optic_rrtm( debut, aerosol_couple, & 3416 new_aod, flag_aerosol, itap, jD_cur-jD_ref, & 3417 pdtphys, pplay, paprs, t_seri, rhcl, presnivs, & 3418 tr_seri, mass_solu_aero, mass_solu_aero_pi, & 3419 tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, & 3420 tausum_aero, tau3d_aero) 3421 3422 ELSE IF (NSW.EQ.2) THEN 3423 !--for now we use the old aerosol properties 3424 ! 3425 CALL readaerosol_optic( & 3426 debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, & 3427 pdtphys, pplay, paprs, t_seri, rhcl, presnivs, & 3428 mass_solu_aero, mass_solu_aero_pi, & 3429 tau_aero, piz_aero, cg_aero, & 3430 tausum_aero, tau3d_aero) 3431 ! 3432 !--natural aerosols 3433 tau_aero_sw_rrtm(:,:,1,:)=tau_aero(:,:,3,:) 3434 piz_aero_sw_rrtm(:,:,1,:)=piz_aero(:,:,3,:) 3435 cg_aero_sw_rrtm (:,:,1,:)=cg_aero (:,:,3,:) 3436 !--all aerosols 3437 tau_aero_sw_rrtm(:,:,2,:)=tau_aero(:,:,2,:) 3438 piz_aero_sw_rrtm(:,:,2,:)=piz_aero(:,:,2,:) 3439 cg_aero_sw_rrtm (:,:,2,:)=cg_aero (:,:,2,:) 3440 ELSE 3441 abort_message='Only NSW=2 or 6 are possible with ' & 3442 // 'aerosols and iflag_rrtm=1' 3443 call abort_physic(modname,abort_message,1) 3444 ENDIF 3445 3446 !--call LW optical properties for tropospheric aerosols 3447 !--only works for INCA aerosol (aerosol_couple = TRUE) 3448 CALL aeropt_lw_rrtm(aerosol_couple,paprs,tr_seri) 3449 ! 3450 #else 3451 abort_message='You should compile with -rrtm if running ' & 3452 // 'with iflag_rrtm=1' 3453 call abort_physic(modname,abort_message,1) 3454 #endif 3455 ! 3456 ENDIF 3457 ENDIF 3458 ELSE 3459 tausum_aero(:,:,:) = 0. 3460 IF (iflag_rrtm .EQ. 0) THEN !--old radiation 3461 tau_aero(:,:,:,:) = 1.e-15 3462 piz_aero(:,:,:,:) = 1. 3463 cg_aero(:,:,:,:) = 0. 3464 ELSE 3465 tau_aero_sw_rrtm(:,:,:,:) = 1.e-15 3466 tau_aero_lw_rrtm(:,:,:,:) = 1.e-15 3467 piz_aero_sw_rrtm(:,:,:,:) = 1.0 3468 cg_aero_sw_rrtm(:,:,:,:) = 0.0 3469 ENDIF 3470 ENDIF 3471 ! 3472 !--STRAT AEROSOL 3473 !--updates tausum_aero,tau_aero,piz_aero,cg_aero 3474 IF (flag_aerosol_strat.GT.0) THEN 3475 IF (prt_level .GE.10) THEN 3476 PRINT *,'appel a readaerosolstrat', mth_cur 3477 ENDIF 3478 IF (iflag_rrtm.EQ.0) THEN 3479 IF (flag_aerosol_strat.EQ.1) THEN 3480 CALL readaerosolstrato(debut) 3481 ELSE 3482 abort_message='flag_aerosol_strat must equal 1 for rrtm=0' 3483 CALL abort_physic(modname,abort_message,1) 3484 ENDIF 3485 ELSE 3486 #ifdef CPP_RRTM 3487 IF (flag_aerosol_strat.EQ.1) THEN 3488 CALL readaerosolstrato1_rrtm(debut) 3489 ELSEIF (flag_aerosol_strat.EQ.2) THEN 3490 CALL stratosphere_mask(t_seri, pplay, latitude_deg) 3491 CALL readaerosolstrato2_rrtm(debut) 3492 ELSE 3493 abort_message='flag_aerosol_strat must equal 1 or 2 for rrtm=1' 3494 CALL abort_physic(modname,abort_message,1) 3495 ENDIF 3496 #else 3497 abort_message='You should compile with -rrtm if running ' & 3498 // 'with iflag_rrtm=1' 3499 CALL abort_physic(modname,abort_message,1) 3500 #endif 3501 ENDIF 3502 ENDIF 3503 !--fin STRAT AEROSOL 3504 ! 3505 3506 ! Calculer les parametres optiques des nuages et quelques 3507 ! parametres pour diagnostiques: 3508 ! 3509 IF (aerosol_couple.AND.config_inca=='aero') THEN 3510 mass_solu_aero(:,:) = ccm(:,:,1) 3511 mass_solu_aero_pi(:,:) = ccm(:,:,2) 3512 END IF 3513 3514 IF (ok_newmicro) then 3515 IF (iflag_rrtm.NE.0) THEN 3516 #ifdef CPP_RRTM 3517 IF (ok_cdnc.AND.NRADLP.NE.3) THEN 3398 3518 abort_message='RRTM choix incoherent NRADLP doit etre egal a 3 ' & 3399 3519 // 'pour ok_cdnc' 3400 callabort_physic(modname,abort_message,1)3401 endif3520 CALL abort_physic(modname,abort_message,1) 3521 ENDIF 3402 3522 #else 3403 3523 3404 abort_message='You should compile with -rrtm if running with ' & 3405 // 'iflag_rrtm=1' 3406 call abort_physic(modname,abort_message,1) 3524 abort_message='You should compile with -rrtm if running with '//'iflag_rrtm=1' 3525 CALL abort_physic(modname,abort_message,1) 3407 3526 #endif 3527 ENDIF 3528 CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, & 3529 paprs, pplay, t_seri, cldliq, cldfra, & 3530 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & 3531 flwp, fiwp, flwc, fiwc, & 3532 mass_solu_aero, mass_solu_aero_pi, & 3533 cldtaupi, re, fl, ref_liq, ref_ice, & 3534 ref_liq_pi, ref_ice_pi) 3535 ELSE 3536 CALL nuage (paprs, pplay, & 3537 t_seri, cldliq, cldfra, cldtau, cldemi, & 3538 cldh, cldl, cldm, cldt, cldq, & 3539 ok_aie, & 3540 mass_solu_aero, mass_solu_aero_pi, & 3541 bl95_b0, bl95_b1, & 3542 cldtaupi, re, fl) 3408 3543 ENDIF 3409 CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, & 3410 paprs, pplay, t_seri, cldliq, cldfra, & 3411 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, & 3412 flwp, fiwp, flwc, fiwc, & 3413 mass_solu_aero, mass_solu_aero_pi, & 3414 cldtaupi, re, fl, ref_liq, ref_ice, & 3415 ref_liq_pi, ref_ice_pi) 3416 else 3417 CALL nuage (paprs, pplay, & 3418 t_seri, cldliq, cldfra, cldtau, cldemi, & 3419 cldh, cldl, cldm, cldt, cldq, & 3420 ok_aie, & 3421 mass_solu_aero, mass_solu_aero_pi, & 3422 bl95_b0, bl95_b1, & 3423 cldtaupi, re, fl) 3424 endif 3425 ! 3426 !IM betaCRF 3427 ! 3428 cldtaurad = cldtau 3429 cldtaupirad = cldtaupi 3430 cldemirad = cldemi 3431 cldfrarad = cldfra 3432 3433 ! 3434 if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. & 3435 lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN 3436 ! 3437 ! global 3438 ! 3439 DO k=1, klev 3440 DO i=1, klon 3441 if (pplay(i,k).GE.pfree) THEN 3442 beta(i,k) = beta_pbl 3443 else 3444 beta(i,k) = beta_free 3445 endif 3446 if (mskocean_beta) THEN 3447 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3448 endif 3449 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3450 cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k) 3451 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3452 cldfrarad(i,k) = cldfra(i,k) * beta(i,k) 3453 ENDDO 3454 ENDDO 3455 ! 3456 else 3457 ! 3458 ! regional 3459 ! 3460 DO k=1, klev 3461 DO i=1,klon 3462 ! 3463 if (longitude_deg(i).ge.lon1_beta.AND. & 3464 longitude_deg(i).le.lon2_beta.AND. & 3465 latitude_deg(i).le.lat1_beta.AND. & 3466 latitude_deg(i).ge.lat2_beta) THEN 3467 if (pplay(i,k).GE.pfree) THEN 3544 ! 3545 !IM betaCRF 3546 ! 3547 cldtaurad = cldtau 3548 cldtaupirad = cldtaupi 3549 cldemirad = cldemi 3550 cldfrarad = cldfra 3551 3552 ! 3553 IF (lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. & 3554 lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN 3555 ! 3556 ! global 3557 ! 3558 DO k=1, klev 3559 DO i=1, klon 3560 IF (pplay(i,k).GE.pfree) THEN 3468 3561 beta(i,k) = beta_pbl 3469 else3562 ELSE 3470 3563 beta(i,k) = beta_free 3471 endif3472 if(mskocean_beta) THEN3564 ENDIF 3565 IF (mskocean_beta) THEN 3473 3566 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3474 endif3567 ENDIF 3475 3568 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3476 3569 cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k) 3477 3570 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3478 3571 cldfrarad(i,k) = cldfra(i,k) * beta(i,k) 3479 endif 3572 ENDDO 3573 ENDDO 3574 ! 3575 ELSE 3576 ! 3577 ! regional 3578 ! 3579 DO k=1, klev 3580 DO i=1,klon 3581 ! 3582 IF (longitude_deg(i).ge.lon1_beta.AND. & 3583 longitude_deg(i).le.lon2_beta.AND. & 3584 latitude_deg(i).le.lat1_beta.AND. & 3585 latitude_deg(i).ge.lat2_beta) THEN 3586 IF (pplay(i,k).GE.pfree) THEN 3587 beta(i,k) = beta_pbl 3588 ELSE 3589 beta(i,k) = beta_free 3590 ENDIF 3591 IF (mskocean_beta) THEN 3592 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3593 ENDIF 3594 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3595 cldtaupirad(i,k) = cldtaupi(i,k) * beta(i,k) 3596 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3597 cldfrarad(i,k) = cldfra(i,k) * beta(i,k) 3598 ENDIF 3480 3599 ! 3600 ENDDO 3481 3601 ENDDO 3482 ENDDO 3483 ! 3484 endif 3485 ! 3486 ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol. 3487 ! 3488 IF (MOD(itaprad,radpas).EQ.0) THEN 3489 3490 !albedo SB >>> 3491 if(ok_chlorophyll)then 3602 ! 3603 ENDIF 3604 3605 !lecture de la chlorophylle pour le nouvel albedo de Sunghye Baek 3606 IF (ok_chlorophyll) THEN 3492 3607 print*,"-- reading chlorophyll" 3493 call readchlorophyll(debut) 3494 endif 3495 !do i=1,klon 3496 !if(chl_con(i)>1.) print*,i,chl_con(i),pctsrf(i,is_ter) 3497 !enddo 3498 !albedo SB <<< 3608 CALL readchlorophyll(debut) 3609 ENDIF 3499 3610 3500 3611 ! … … 3659 3770 cldtaupirad, & 3660 3771 topswai_aero, solswai_aero) 3661 3662 3772 #endif 3663 3773 ELSE … … 3674 3784 print *,' ->radlwsw, number 1 ' 3675 3785 ENDIF 3676 3677 3786 ! 3678 3787 CALL radlwsw & … … 3814 3923 ! 3815 3924 radsol=solsw*swradcorr+sollw 3925 3816 3926 if (ok_4xCO2atm) then 3817 3927 radsolp=solswp*swradcorr+sollwp
Note: See TracChangeset
for help on using the changeset viewer.