Ignore:
Timestamp:
Sep 29, 2016, 11:26:46 PM (9 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes r2593:2640 into testing branch

Location:
LMDZ5/branches/testing
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/phylmd/rrtm/aeropt_5wv_rrtm.F90

    r2594 r2641  
    9494  REAL :: od670aer(klon)  ! epaisseur optique aerosol extinction 670 nm
    9595  REAL :: fac
    96   REAL :: zdp1(klon,klev)
    9796  INTEGER, ALLOCATABLE, DIMENSION(:)  :: aerosol_name
    9897  INTEGER :: nb_aer, itau
    9998  LOGICAL :: ok_itau
    10099 
    101   REAL :: dh(KLON,KLEV)
     100  REAL :: zdh(klon,klev)
    102101 
    103102   ! Soluble components 1- BC soluble; 2- POM soluble; 3- SO4 acc.; 4- SO4 coarse; 5 seasalt super-coarse; 6 seasalt coarse; 7 seasalt acc.
     
    106105  REAL :: alpha_aeri_5wv(las,naero_insoluble)         ! Ext. coeff. ** m2/g
    107106
    108   REAL, DIMENSION(klon,klev,naero_tot) :: mass_temp
    109  
    110107  !
    111108  ! Proprietes optiques
    112109  !
    113110  REAL :: fact_RH(nbre_RH)
    114   LOGICAL :: used_tau(naero_tot)
    115111  INTEGER :: n
    116112
     
    209205  ai(:) = 0.
    210206  tausum(:,:,:) = 0.
     207  tau(:,:,:,:)=0.
    211208
    212209  DO k=1, klev
    213210    DO i=1, klon
    214211      zrho=pplay(i,k)/t_seri(i,k)/RD                  ! kg/m3
    215       dh(i,k)=pdel(i,k)/(RG*zrho)
    216 !CDIR UNROLL=naero_spc
    217       mass_temp(i,k,:) = m_allaer(i,k,:) / zrho / 1.e+9
    218       zdp1(i,k)=pdel(i,k)/(RG*delt)     ! air mass auxiliary  variable --> zdp1 [kg/(m^2 *s)]
     212      zdh(i,k)=pdel(i,k)/(RG*zrho)                    ! m
    219213    ENDDO
    220214  ENDDO
     
    270264  !     
    271265
    272 !CDIR ON_ADB(RH_tab)
    273 !CDIR ON_ADB(fact_RH)
    274 !CDIR NOVECTOR
    275266  DO n=1,nbre_RH-1
    276267    fact_RH(n)=1./(RH_tab(n+1)-RH_tab(n))
    277268  ENDDO
    278269   
    279   DO k=1, KLEV
    280 !CDIR ON_ADB(RH_tab)
    281 !CDIR ON_ADB(fact_RH)
    282     DO i=1, KLON
     270  DO k=1, klev
     271    DO i=1, klon
    283272      rh(i,k)=MIN(RHcl(i,k)*100.,RH_MAX)
    284273      RH_num(i,k) = INT( rh(i,k)/10. + 1.)
     
    289278  ENDDO
    290279
    291 !CDIR SHORTLOOP 
    292   used_tau(:)=.FALSE.
    293    
    294280  DO m=1,nb_aer   ! tau is only computed for each mass   
    295281    fac=1.0
     
    330316    ENDIF
    331317
    332     IF (soluble) then
    333       used_tau(spsol)=.TRUE.
    334     ELSE
    335       used_tau(naero_soluble+spinsol)=.TRUE.
    336     ENDIF
    337 
    338318    aerindex=aerosol_name(m)
    339319
    340320    DO la=1,las
    341321
     322    !--only 550, 670 and 865 nm are used
     323    IF (la.NE.la550.AND.la.NE.la670.AND.la.NE.la865) CYCLE
     324
    342325      IF (soluble) THEN            ! For soluble aerosol
    343326
    344           DO k=1, KLEV
    345             DO i=1, KLON
     327          DO k=1, klev
     328            DO i=1, klon
    346329              tau_ae5wv_int = alpha_aers_5wv(RH_num(i,k),la,spsol)+DELTA(i,k)* &
    347330                             (alpha_aers_5wv(RH_num(i,k)+1,la,spsol) - &
    348331                              alpha_aers_5wv(RH_num(i,k),la,spsol))
    349               tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)*   &
    350                                     tau_ae5wv_int*delt*fac
     332              tau(i,k,la,aerindex) = m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*tau_ae5wv_int*fac
    351333              tausum(i,la,aerindex)=tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    352334            ENDDO
     
    355337      ELSE                         ! For insoluble aerosol
    356338
    357         DO k=1, KLEV
    358           DO i=1, KLON
     339        DO k=1, klev
     340          DO i=1, klon
    359341            tau_ae5wv_int = alpha_aeri_5wv(la,spinsol)
    360             tau(i,k,la,aerindex) = mass_temp(i,k,aerindex)*1000.*zdp1(i,k)* &
    361                                    tau_ae5wv_int*delt*fac
     342            tau(i,k,la,aerindex) = m_allaer(i,k,aerindex)/1.e6*zdh(i,k)*tau_ae5wv_int*fac
    362343            tausum(i,la,aerindex)= tausum(i,la,aerindex)+tau(i,k,la,aerindex)
    363344          ENDDO
     
    369350  ENDDO     ! Boucle sur les masses de traceurs
    370351
    371   DO m=1,naero_tot
    372     IF (.NOT.used_tau(m)) tau(:,:,:,m)=0.
    373   ENDDO 
    374 
    375   DO i=1, klon
    376      od550aer(i)=0.
    377      DO m=1,naero_tot
    378         od550aer(i)=od550aer(i)+tausum(i,la550,m)
    379      END DO
    380   END DO
    381 
    382   DO i=1, klon
    383      od670aer(i)=0.
    384      DO m=1,naero_tot
    385         od670aer(i)=od670aer(i)+tausum(i,la670,m)
    386      END DO
    387   END DO
    388 
    389   DO i=1, klon
    390      od865aer(i)=0.
    391      DO m=1,naero_tot
    392         od865aer(i)=od865aer(i)+tausum(i,la865,m)
    393      END DO
    394   END DO
    395 
    396   DO i=1, klon
    397      DO k=1, KLEV
    398         ec550aer(i,k)=0.
    399         DO m=1,naero_tot
    400            ec550aer(i,k)=ec550aer(i,k)+tau(i,k,la550,m)/dh(i,k)
    401         END DO
    402      END DO
    403   END DO
    404  
    405   DO i=1, klon
    406     ai(i)=-LOG(MAX(od670aer(i),1.e-8)/MAX(od865aer(i),1.e-8))/LOG(670./865.)
    407   ENDDO
     352!--AOD calculations for diagnostics
     353  od550aer(:)=SUM(tausum(:,la550,:),dim=2)
     354  od670aer(:)=SUM(tausum(:,la670,:),dim=2)
     355  od865aer(:)=SUM(tausum(:,la865,:),dim=2)
     356
     357!--extinction coefficient for diagnostic
     358  ec550aer(:,:)=SUM(tau(:,:,la550,:),dim=3)/zdh(:,:)
     359
     360!--aerosol index
     361  ai(:)=-LOG(MAX(od670aer(:),1.e-8)/MAX(od865aer(:),1.e-8))/LOG(670./865.)
    408362
    409363  od550lt1aer(:)=tausum(:,la550,id_ASSO4M_phy)+tausum(:,la550,id_ASBCM_phy) +tausum(:,la550,id_AIBCM_phy)+ &
  • LMDZ5/branches/testing/libf/phylmd/rrtm/aeropt_6bands_rrtm.F90

    r2408 r2641  
    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)
  • LMDZ5/branches/testing/libf/phylmd/rrtm/rrtm_ecrt_140gp.F90

    r2160 r2641  
    3131 & JPINPX 
    3232USE YOERAD   , ONLY : NLW      ,NOVLP
    33 USE YOERDI   , ONLY :    RCH4     ,RN2O    ,RCFC11  ,RCFC12
     33!MPL/IM 20160915 on prend GES de phylmd USE YOERDI   , ONLY :    RCH4     ,RN2O    ,RCFC11  ,RCFC12
    3434USE YOESW    , ONLY : RAER
    3535
     
    113113REAL(KIND=JPRB) :: ZHOOK_HANDLE
    114114
     115!MPL/IM 20160915 on prend GES de phylmd
     116#include "clesphys.h"
    115117! ***
    116118
     
    400402
    401403!     ------------------------------------------------------------------
    402 
     404 
    403405IF (LHOOK) CALL DR_HOOK('RRTM_ECRT_140GP',1,ZHOOK_HANDLE)
    404406END SUBROUTINE RRTM_ECRT_140GP
  • LMDZ5/branches/testing/libf/phylmd/rrtm/srtm_srtm_224gp_mcica.F90

    r1999 r2641  
    1616
    1717USE PARSRTM  , ONLY : JPLAY
    18 USE YOERDI   , ONLY : RCH4   , RN2O   
     18!MPL/IM 20160915 on prend GES de phylmd USE YOERDI   , ONLY : RCH4   , RN2O   
    1919USE YOERAD   , ONLY : NAER
    2020USE YOESRTAER, ONLY : RSRTAUA, RSRPIZA, RSRASYA
     
    133133#include "srtm_setcoef.intfb.h"
    134134#include "srtm_spcvrt_mcica.intfb.h"
    135 
     135!MPL/IM 20160915 on prend GES de phylmd
     136#include "clesphys.h"
    136137
    137138!-----------------------------------------------------------------------
  • LMDZ5/branches/testing/libf/phylmd/rrtm/suecrad.F90

    r2160 r2641  
    245245#include "naerad.h"
    246246#include "namrgri.h"
     247!MPL/IM 20160915 on prend GES de phylmd
    247248#include "clesphys.h"
    248249
     
    449450
    450451! Valeurs LMDZ (physiq.def) MPL 18052010
    451 RCCO2   = 348.E-06_JPRB
    452 RCCH4   = 1.65E-06_JPRB
    453 RCN2O   = 306.E-09_JPRB
    454 RCCFC11 = 280.E-12_JPRB
    455 RCCFC12 = 484.E-12_JPRB
    456 print *,'SUECRAD-1'
    457 
     452!RCCO2   = 348.E-06_JPRB
     453!RCCH4   = 1.65E-06_JPRB
     454!RCN2O   = 306.E-09_JPRB
     455!RCCFC11 = 280.E-12_JPRB
     456!RCCFC12 = 484.E-12_JPRB
     457
     458!MPL/IM 20160915 on prend GES de phylmd
     459RCCO2   = CO2_ppm * 1.0e-06
     460RCCH4   = CH4_ppb * 1.0e-09
     461RCN2O   = N2O_ppb * 1.0e-09
     462RCCFC11 = CFC11_ppt * 1.0e-12
     463RCCFC12 = CFC12_ppt * 1.0e-12
     464!print *,'LMDZSUECRAD-1 RCCO2=',RCCO2
     465!print *,'LMDZSUECRAD-1 RCCH4=',RCCH4
     466!print *,'LMDZSUECRAD-1 RCN2O=',RCN2O
     467!print *,'LMDZSUECRAD-1 RCCFC11=',RCCFC11
     468!print *,'LMDZSUECRAD-1 RCCFC12=',RCCFC12
    458469!     ------------------------------------------------------------------
    459470
  • LMDZ5/branches/testing/libf/phylmd/rrtm/surdi.F90

    r2056 r2641  
    5454USE YOERDI   , ONLY : RRAE     ,&
    5555! & RCARDI   ,RCH4     ,RN2O     ,RO3      ,RCFC11   ,&
    56  & RCFC12, &   
     56! & RCFC12, &   
    5757 & REPCLC   ,REPH2O   ,RSUNDUR  ,&
    5858 & RCCO2    ,RCCH4    ,RCN2O    ,RCCFC11  ,RCCFC12
     
    6161IMPLICIT NONE
    6262
     63!MPL/IM 20160915 on prend GES de phylmd
    6364!#include "clesphys.h"
    6465REAL(KIND=JPRB) :: ZAIRMWG, ZC11MWG, ZC12MWG, ZCH4MWG, ZCO2MWG, ZN2OMWG, ZO3MWG
  • LMDZ5/branches/testing/libf/phylmd/rrtm/swr.F90

    r2056 r2641  
    192192    ZCLOUD(JL) = ZSS1(JL)
    193193  ELSEIF (NOVLP == 2) THEN
    194    stop 'provisoire pour verifier option novlp=1b'
     194!IM150716  stop 'provisoire pour verifier option novlp=1b'
     195   print*,'rrtm provisoire pour verifier option novlp=2 maximum'
    195196!* maximum
    196197    ZCLOUD(JL) = MAX( ZSS1(JL) , ZCLOUD(JL) )
     
    198199!++MODIFCODE
    199200  ELSEIF ((NOVLP == 3).OR.((NOVLP  >=  5).AND.(NOVLP /= 8))) THEN
    200    stop 'provisoire pour verifier option novlp=1c'
     201!IM150716  stop 'provisoire pour verifier option novlp=1c'
     202    print*,'rrtm provisoire pour verifier option novlp=3 random'
    201203!--MODIFCODE
    202204!* random
Note: See TracChangeset for help on using the changeset viewer.