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/aeropt_2bands.F90

    r2593 r2634  
    1212  USE phys_local_var_mod, only: absvisaer
    1313  USE pres2lev_mod
    14 
    1514
    1615  !    Yves Balkanski le 12 avril 2006
     
    128127  REAL :: zrho
    129128  REAL :: fac
    130   REAL :: zdp1(klon,klev)
    131   REAL, PARAMETER ::  gravit = 9.80616    ! m2/s
     129  REAL :: zdh(klon,klev)
    132130  INTEGER, ALLOCATABLE, DIMENSION(:)   :: aerosol_name
    133131  INTEGER :: nb_aer
    134   REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
    135 !RAF
    136   REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp_pi
    137132
    138133  !
     
    587582  END IF ! firstcall
    588583
    589 
    590584  DO k=1, klev
    591585    DO i=1, klon
    592       zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3
    593       mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9
    594       mass_temp_pi(i,k,:) = m_allaer_pi(i,k,:) / zrho / 1.e+9
    595       zdp1(i,k)=pdel(i,k)/(gravit*delt)      ! air mass auxiliary  variable --> zdp1 [kg/(m^2 *s)]
     586      zrho=pplay(i,k)/t_seri(i,k)/RD    ! kg/m3
     587      zdh(i,k)=pdel(i,k)/(RG*zrho)      ! m
    596588    ENDDO
    597589  ENDDO
     
    645637  !      compute optical_thickness_at_gridpoint_per_species
    646638
    647 
    648 
    649639!CDIR ON_ADB(fact_RH)
    650640!CDIR SHORTLOOP
     
    660650      IF (rh(i,k).GT.85.) RH_num(i,k)=10
    661651      IF (rh(i,k).GT.90.) RH_num(i,k)=11
    662      
    663652      DELTA(i,k)=(rh(i,k)-RH_tab(RH_num(i,k)))*fact_RH(RH_num(i,k))
    664653    ENDDO
     
    718707    used_aer(id)=.TRUE.
    719708
    720      
    721709    IF (soluble) THEN
    722710
     
    739727!CDIR ON_ADB(C1_ASSSM_b2)
    740728!CDIR ON_ADB(C2_ASSSM_b2)
     729
    741730              DO i=1, KLON
     731
    742732                H=rh(i,k)/100
    743                 tmp_var=mass_temp(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
    744                 tmp_var_pi=mass_temp_pi(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
     733                tmp_var=m_allaer(i,k,spsol)/1.e6*zdh(i,k)*fac
     734                tmp_var_pi=m_allaer_pi(i,k,spsol)/1.e6*zdh(i,k)*fac
    745735
    746736                ! band 1
     
    784774!CDIR ON_ADB(C1_CSSSM_b2)
    785775!CDIR ON_ADB(C2_CSSSM_b2)
     776
    786777              DO i=1, KLON
     778
    787779                H=rh(i,k)/100
    788                 tmp_var=mass_temp(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
    789                 tmp_var_pi=mass_temp_pi(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
     780                tmp_var=m_allaer(i,k,spsol)/1.e6*zdh(i,k)*fac
     781                tmp_var_pi=m_allaer_pi(i,k,spsol)/1.e6*zdh(i,k)*fac
    790782                ! band 1
    791783                tau_ae2b_int=A1_CSSSM_b1(k)+A2_CSSSM_b1(k)*H+A3_CSSSM_b1(k)/(H-1.05)
     
    828820!CDIR ON_ADB(C1_SSSSM_b2)
    829821!CDIR ON_ADB(C2_SSSSM_b2)
     822
    830823              DO i=1, KLON
     824
    831825                H=rh(i,k)/100
    832                 tmp_var=mass_temp(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
    833                 tmp_var_pi=mass_temp_pi(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
     826                tmp_var=m_allaer(i,k,spsol)/1.e6*zdh(i,k)*fac
     827                tmp_var_pi=m_allaer_pi(i,k,spsol)/1.e6*zdh(i,k)*fac
    834828
    835829                ! band 1
     
    864858          DO k=1, KLEV
    865859            DO i=1, KLON
    866               tmp_var=mass_temp(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
    867               tmp_var_pi=mass_temp_pi(i,k,spsol)*1000.*zdp1(i,k)*delt*fac
     860              tmp_var=m_allaer(i,k,spsol)/1.e6*zdh(i,k)*fac
     861              tmp_var_pi=m_allaer_pi(i,k,spsol)/1.e6*zdh(i,k)*fac
    868862!CDIR UNROLL=nbands
    869863              DO inu=1,nbands
     
    899893        DO k=1, KLEV
    900894          DO i=1, KLON
    901             tmp_var=mass_temp(i,k,naero_soluble+ spinsol)*1000.*zdp1(i,k)*delt*fac
    902             tmp_var_pi=mass_temp_pi(i,k,naero_soluble+spinsol)*1000.*zdp1(i,k)*delt*fac
     895            tmp_var=m_allaer(i,k,naero_soluble+spinsol)/1.e6*zdh(i,k)*fac
     896            tmp_var_pi=m_allaer_pi(i,k,naero_soluble+spinsol)/1.e6*zdh(i,k)*fac
    903897!CDIR UNROLL=nbands
    904898            DO inu=1,nbands
     
    931925
    932926  DO inu=1, nbands
    933     DO mrfspecies=1,naero_grp
     927
     928    !!DO mrfspecies=1,naero_grp
     929    DO mrfspecies=2,3    !--only deal with total and natural aerosols
     930
    934931      IF (mrfspecies .EQ. 2) THEN             ! = total aerosol AER     
     932
    935933        DO k=1, KLEV
    936934          DO i=1, KLON
     
    10261024                   
    10271025      ELSEIF (mrfspecies .EQ. 4) THEN             ! = BC
     1026
    10281027        DO k=1, KLEV
    10291028          DO i=1, KLON
     
    11281127  ENDDO
    11291128
    1130   inu=1         ! visible wavaband
     1129  inu=1         ! visible waveband
    11311130  mrfspecies=2  ! total aerosol AER     
    11321131  DO i=1, KLON
Note: See TracChangeset for help on using the changeset viewer.