Ignore:
Timestamp:
Sep 24, 2016, 7:14:59 PM (8 years ago)
Author:
oboucher
Message:

Quicker way to compute aerosol optical properties.
Does not converge with previous version but results are close.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/rrtm/aeropt_6bands_rrtm.F90

    r2311 r2634  
    3636  !
    3737  ! Output arguments:
    38   ! 1= total aerosols
    39   ! 2= natural aerosols
     38  ! 2= total aerosols
     39  ! 1= natural aerosols
    4040  !
    4141  REAL, DIMENSION(klon,klev,2,nbands_sw_rrtm), INTENT(out) :: tau_allaer ! epaisseur optique aerosol
     
    6666  REAL :: Fact_RH(nbre_RH)
    6767  REAL :: fac
    68   REAL :: zdp1(klon,klev)
     68  REAL :: zdh(klon,klev)
    6969  INTEGER, ALLOCATABLE, DIMENSION(:)   :: aerosol_name
    7070  INTEGER :: nb_aer
    7171
    72   REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
    73   REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp_pi
    7472  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  tau_ae
    7573  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  tau_ae_pi
    7674  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  piz_ae
    7775  REAL, DIMENSION(klon,klev,naero_tot,nbands_sw_rrtm) ::  cg_ae
    78 
    79 
    8076  !
    8177  ! Proprietes optiques
     
    8985
    9086  INTEGER :: id
    91   LOGICAL :: used_aer(naero_tot)
    9287  REAL :: tmp_var, tmp_var_pi
    9388
     
    277272  spsol = 0
    278273  spinsol = 0
     274
    279275  IF (NSW.NE.nbands_sw_rrtm) THEN
    280276     print *,'Erreur NSW doit etre egal a 6 pour cette routine'
     
    282278  ENDIF
    283279
    284   DO k=1, klev
    285     DO i=1, klon
    286 !CDIR UNROLL=naero_tot
    287       mass_temp(i,k,:) = m_allaer(i,k,:) / zrho(i,k) / 1.e+9  !--kg/kg
    288 !CDIR UNROLL=naero_tot
    289       mass_temp_pi(i,k,:) = m_allaer_pi(i,k,:) / zrho(i,k) / 1.e+9
    290       zdp1(i,k)=pdel(i,k)/(RG*delt)      ! air mass auxiliary  variable --> zdp1 [kg/(m^2 *s)]
    291     ENDDO
    292   ENDDO
     280  zdh(:,:)=pdel(:,:)/(RG*zrho(:,:))      ! m
    293281
    294282  IF (flag_aerosol .EQ. 1) THEN
     
    339327  !      compute optical_thickness_at_gridpoint_per_species
    340328
    341 !!CDIR ON_ADB(RH_tab)
    342 !CDIR ON_ADB(fact_RH)
    343 !CDIR SHORTLOOP
    344329  DO n=1,nbre_RH-1
    345330    fact_RH(n)=1./(RH_tab(n+1)-RH_tab(n))
    346331  ENDDO
    347332   
    348   DO k=1, KLEV
    349 !CDIR ON_ADB(fact_RH)
    350     DO i=1, KLON
     333  DO k=1, klev
     334    DO i=1, klon
    351335      rh(i,k)=MIN(RHcl(i,k)*100.,RH_MAX)
    352336      RH_num(i,k) = INT(rh(i,k)/10. + 1.)
     
    357341  ENDDO
    358342
    359   used_aer(:)=.FALSE.
     343  tau_ae(:,:,:,:)=0.
     344  tau_ae_pi(:,:,:,:)=0.
     345  piz_ae(:,:,:,:)=0.
     346  cg_ae(:,:,:,:)=0.
    360347   
    361348  DO m=1,nb_aer   ! tau is only computed for each mass
     
    398385
    399386    id=aerosol_name(m)
    400     used_aer(id)=.TRUE.
    401387
    402388    IF (soluble) THEN
    403389
    404        DO k=1, KLEV
    405          DO i=1, KLON
    406            tmp_var=mass_temp(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
    407            tmp_var_pi=mass_temp_pi(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
     390       DO k=1, klev
     391         DO i=1, klon
     392           tmp_var=m_allaer(i,k,spsol)/1.e6*zdh(i,k)*fac
     393           tmp_var_pi=m_allaer_pi(i,k,spsol)/1.e6*zdh(i,k)*fac
    408394
    409395           DO inu=1,NSW
     
    432418     ELSE    ! For all aerosol insoluble components
    433419
    434        DO k=1, KLEV
    435          DO i=1, KLON
    436            tmp_var=mass_temp(i,k,naero_soluble+ spinsol)*1000.*zdp1(i,k)*delt*fac
    437            tmp_var_pi=mass_temp_pi(i,k,naero_soluble+spinsol)*1000.*zdp1(i,k)*delt*fac
     420       DO k=1, klev
     421         DO i=1, klon
     422           tmp_var=m_allaer(i,k,naero_soluble+spinsol)/1.e6*zdh(i,k)*fac
     423           tmp_var_pi=m_allaer_pi(i,k,naero_soluble+spinsol)/1.e6*zdh(i,k)*fac
    438424
    439425           DO inu=1,NSW
     
    454440  ENDDO  ! nb_aer 
    455441
    456   DO m=1,naero_tot
    457     IF (.NOT. used_aer(m)) THEN
    458       tau_ae(:,:,m,:)=0.
    459       tau_ae_pi(:,:,m,:)=0.
    460       piz_ae(:,:,m,:)=0.
    461       cg_ae(:,:,m,:)=0.
    462     ENDIF
    463   ENDDO
    464 
    465442  DO inu=1, NSW
    466      DO k=1, KLEV
    467        DO i=1, KLON
     443     DO k=1, klev
     444       DO i=1, klon
    468445!--anthropogenic aerosol
    469446         tau_allaer(i,k,2,inu)=tau_ae(i,k,id_ASSO4M_phy,inu)+tau_ae(i,k,id_CSSO4M_phy,inu)+ &
     
    536513    ENDDO
    537514   
    538 !--???????
    539   inu=1
    540   DO i=1, KLON
    541      absvisaer(i)=SUM((1-piz_allaer(i,:,:,inu))*tau_allaer(i,:,:,inu))
    542   END DO       
     515!--waveband 2 and all aerosol
     516  inu=2
     517  DO i=1, klon
     518     absvisaer(i)=SUM((1-piz_allaer(i,:,2,inu))*tau_allaer(i,:,2,inu))
     519  ENDDO
    543520
    544521  DEALLOCATE(aerosol_name)
Note: See TracChangeset for help on using the changeset viewer.