Ignore:
Timestamp:
Mar 30, 2017, 4:16:38 PM (7 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes r2785:2838 into testing branch

Location:
LMDZ5/branches/testing
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

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

    r2787 r2839  
    1212  USE DIMPHY
    1313  USE aero_mod
    14   USE phys_local_var_mod, ONLY: od550aer,od865aer,ec550aer,od550lt1aer
     14  USE phys_local_var_mod, ONLY: od443aer,od550aer,od865aer,ec550aer,od550lt1aer
    1515  USE YOMCST, ONLY: RD,RG
    1616
     
    327327        soluble=.TRUE.
    328328        spsol=4
    329         fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for AOD
     329        !fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for AOD
     330        fac=0.0      !--6 March 2017 - OB as Didier H said CSSO4 should not be used
    330331    ELSEIF (aerosol_name(m).EQ.id_SSSSM_phy) THEN
    331332        soluble=.TRUE.
     
    366367    DO la=1,las
    367368
    368     !--only 550, 670 and 865 nm are used
    369     IF (la.NE.la550.AND.la.NE.la670.AND.la.NE.la865) CYCLE
     369    !--only 443, 550, 670 and 865 nm are used
     370    !--to save time 670 and AI are not computed for CMIP6
     371    !IF (la.NE.la443.AND.la.NE.la550.AND.la.NE.la670.AND.la.NE.la865) CYCLE
     372    IF (la.NE.la443.AND.la.NE.la550.AND.la.NE.la865) CYCLE
    370373
    371374      IF (soluble) THEN            ! For soluble aerosol
     
    433436
    434437!--AOD calculations for diagnostics
     438  od443aer(:)=SUM(tausum(:,la443,:),dim=2)
    435439  od550aer(:)=SUM(tausum(:,la550,:),dim=2)
    436   od670aer(:)=SUM(tausum(:,la670,:),dim=2)
     440  !od670aer(:)=SUM(tausum(:,la670,:),dim=2)
    437441  od865aer(:)=SUM(tausum(:,la865,:),dim=2)
    438442
     
    441445
    442446!--aerosol index
    443   ai(:)=-LOG(MAX(od670aer(:),1.e-8)/MAX(od865aer(:),1.e-8))/LOG(670./865.)
     447  ai(:)=0.0
     448  !ai(:)=-LOG(MAX(od670aer(:),1.e-8)/MAX(od865aer(:),1.e-8))/LOG(670./865.)
    444449
    445450  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

    r2787 r2839  
    566566        soluble=.TRUE.
    567567        spsol=3
    568         fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for AOD
     568        !fac=1.375    ! (NH4)2-SO4/SO4 132/96 mass conversion factor for AOD
     569        fac=0.0      !--6 March 2017 - OB as Didier H said CSSO4 should not be used
    569570     ELSEIF  (aerosol_name(m).EQ.id_ASSO4M_phy) THEN
    570571        soluble=.TRUE.
  • LMDZ5/branches/testing/libf/phylmd/rrtm/read_rsun_rrtm.F90

    r2787 r2839  
    1010  USE netcdf, ONLY: nf90_get_var, nf90_noerr, nf90_nowrite
    1111
    12   USE phys_cal_mod, ONLY : day_cur, year_len
     12  USE phys_cal_mod, ONLY : days_elapsed, year_len
    1313
    1414  USE mod_phys_lmdz_mpi_data, ONLY: is_mpi_root
     
    2323
    2424  ! Input arguments
    25   LOGICAL, INTENT(IN)          :: debut
     25  LOGICAL, INTENT(IN) :: debut
    2626
    2727! Local variables
    28   INTEGER               :: ncid, dimid, varid, ncerr, nbday
     28  INTEGER :: ncid, dimid, varid, ncerr, nbday
    2929  REAL, POINTER :: wlen(:), time(:)
    30   REAL, ALLOCATABLE, SAVE, DIMENSION(:,:)   :: SSI_FRAC
     30  REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: SSI_FRAC
    3131!$OMP THREADPRIVATE(SSI_FRAC)
    3232  REAL, ALLOCATABLE, SAVE, DIMENSION(:) :: TSI(:)
     
    9090    ENDIF
    9191
    92 !--only read at beginning of month
    93     IF (debut.OR.day_cur.NE.day_pre) THEN
     92!--only read at beginning of day
     93!--day in year is provided as days_elapsed since the beginning of the year +1
     94    IF (debut.OR.days_elapsed+1.NE.day_pre) THEN
    9495
    95 !--keep memory of previous month
    96       day_pre=day_cur
     96!--keep memory of previous day
     97      day_pre=days_elapsed+1
    9798
    9899!--copy
    99       RSUN(1:NSW)=SSI_FRAC(:,day_cur)
    100       solaire=TSI(day_cur)
     100      RSUN(1:NSW)=SSI_FRAC(:,days_elapsed+1)
     101      solaire=TSI(days_elapsed+1)
    101102
    102       print *,'READ_RSUN_RRTM day=', day_cur,' solaire=', solaire, ' RSUN=', RSUN(1:NSW)
     103      print *,'READ_RSUN_RRTM day=', days_elapsed+1,' solaire=', solaire, ' RSUN=', RSUN(1:NSW)
    103104
    104105    ENDIF !--fin allocation
  • LMDZ5/branches/testing/libf/phylmd/rrtm/readaerosol_optic_rrtm.F90

    r2787 r2839  
    1717  USE phys_local_var_mod, only: sconcso4,sconcno3,sconcoa,sconcbc,sconcss,sconcdust, &
    1818       concso4,concno3,concoa,concbc,concss,concdust,loadso4,loadoa,loadbc,loadss,loaddust, &
    19        load_tmp1,load_tmp2,load_tmp3,load_tmp4,load_tmp5,load_tmp6,load_tmp7
     19       loadno3, load_tmp1,load_tmp2,load_tmp3
    2020
    2121  USE infotrac_phy
     
    195195     IF ( flag_aerosol .EQ. 3 .OR. flag_aerosol .EQ. 6 ) THEN
    196196
    197         CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp3)
    198         CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp4)
    199         loadoa(:)=load_tmp3(:)+load_tmp4(:)
     197        CALL readaerosol_interp(id_ASPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi, load_tmp1)
     198        CALL readaerosol_interp(id_AIPOMM_phy, itap, pdtphys, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi, load_tmp2)
     199        loadoa(:)=load_tmp1(:)+load_tmp2(:)
    200200     ELSE
    201201        pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
     
    208208
    209209        CALL readaerosol_interp(id_SSSSM_phy ,itap, pdtphys,rjourvrai, &
    210         debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp5)
     210        debut, pplay, paprs, t_seri, sssupco, sssupco_pi, load_tmp1)
    211211        CALL readaerosol_interp(id_CSSSM_phy ,itap, pdtphys,rjourvrai, &
    212         debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp6)
    213         CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys, rjourvrai, &
    214         debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp7)
    215         loadss(:)=load_tmp5(:)+load_tmp6(:)+load_tmp7(:)
     212        debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi, load_tmp2)
     213        CALL readaerosol_interp(id_ASSSM_phy ,itap, pdtphys,rjourvrai, &
     214        debut, pplay, paprs, t_seri, ssacu, ssacu_pi, load_tmp3)
     215        loadss(:)=load_tmp1(:)+load_tmp2(:)+load_tmp3(:)
    216216     ELSE
    217217        sscoarse(:,:) = 0. ; sscoarse_pi(:,:) = 0.
     
    231231     ENDIF
    232232     !
     233     ! Read and interpolate cidustm
     234     IF (flag_aerosol .EQ. 6) THEN
     235
     236        CALL readaerosol_interp(id_ASNO3M_phy, itap, pdtphys, rjourvrai, &
     237        debut, pplay, paprs, t_seri, nitracc, nitracc_pi, load_tmp1)
     238        CALL readaerosol_interp(id_CSNO3M_phy, itap, pdtphys, rjourvrai, &
     239        debut, pplay, paprs, t_seri, nitrcoarse, nitrcoarse_pi, load_tmp2)
     240        CALL readaerosol_interp(id_CINO3M_phy, itap, pdtphys, rjourvrai, &
     241        debut, pplay, paprs, t_seri, nitrinscoarse, nitrinscoarse_pi, load_tmp3)
     242        loadss(:)=load_tmp1(:)+load_tmp2(:)+load_tmp3(:)
     243
     244     ELSE
     245        nitracc(:,:)         =   0.0 ; nitracc_pi(:,:)      =   0.0
     246        nitrcoarse(:,:)      =   0.0 ; nitrcoarse_pi(:,:)   =   0.0
     247        nitrinscoarse(:,:)   =   0.0 ; nitrinscoarse_pi(:,:)=   0.0
     248        loadno3(:)=0.0
     249     ENDIF
     250     !
     251     ! CSSO4M is set to 0 as not reliable
    233252     sulfcoarse(:,:)      =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA)
    234253     sulfcoarse_pi(:,:)   =   0.0 ! CSSO4M (=SO4) + CSMSAM (=MSA) pre-ind
    235      !
    236      !--placeholder for offline nitrate   
    237      !
    238      nitracc(:,:)         =   0.0
    239      nitracc_pi(:,:)      =   0.0
    240      nitrcoarse(:,:)      =   0.0
    241      nitrcoarse_pi(:,:)   =   0.0
    242      nitrinscoarse(:,:)   =   0.0
    243      nitrinscoarse_pi(:,:)=   0.0
    244254
    245255  ENDIF !--not aerosol_couple
  • LMDZ5/branches/testing/libf/phylmd/rrtm/suphec.F90

    r2408 r2839  
    129129
    130130IF (LHOOK) CALL DR_HOOK('SUPHEC',0,ZHOOK_HANDLE)
    131 !CALL GSTATS(1811,0) ! MPL 28.11.08
    132 !RVTMP2=RCPV/RCPD-1.0_JPRB   !use cp,moist
    133 RVTMP2=0.0_JPRB              !neglect cp,moist
    134 RHOH2O=RATM/100._JPRB
    135 R2ES=611.21_JPRB*RD/RV
    136 R3LES=17.502_JPRB
    137 R3IES=22.587_JPRB
    138 R4LES=32.19_JPRB
    139 R4IES=-0.7_JPRB
    140 R5LES=R3LES*(RTT-R4LES)
    141 R5IES=R3IES*(RTT-R4IES)
    142 R5ALVCP=R5LES*RLVTT/RCPD
    143 R5ALSCP=R5IES*RLSTT/RCPD
    144 RALVDCP=RLVTT/RCPD
    145 RALSDCP=RLSTT/RCPD
    146 RALFDCP=RLMLT/RCPD
    147 RTWAT=RTT
    148 RTBER=RTT-5._JPRB
    149 RTBERCU=RTT-5.0_JPRB
    150 RTICE=RTT-23._JPRB
    151 RTICECU=RTT-23._JPRB
    152 
    153 RTWAT_RTICE_R=1.0_JPRB/(RTWAT-RTICE)
    154 RTWAT_RTICECU_R=1.0_JPRB/(RTWAT-RTICECU)
    155 IF(NPHYINT == 0) THEN
    156   ISMAX=NSMAX
    157 ELSE
    158   ISMAX=PHYS_GRID%NSMAX
    159 ENDIF
    160 
    161 RKOOP1=2.583_JPRB
    162 RKOOP2=0.48116E-2_JPRB
     131!
     132  IF (OK_BAD_ECMWF_THERMO) THEN
     133!
     134     ! Modify constants defined in suphel.F90 and set RVTMP2 to 0.
     135     ! CALL GSTATS(1811,0) ! MPL 28.11.08
     136     ! RVTMP2=RCPV/RCPD-1.0_JPRB   !use cp,moist
     137     RVTMP2=0.0_JPRB              !neglect cp,moist
     138     RHOH2O=RATM/100._JPRB
     139     R2ES=611.21_JPRB*RD/RV
     140     R3LES=17.502_JPRB
     141     R3IES=22.587_JPRB
     142     R4LES=32.19_JPRB
     143     R4IES=-0.7_JPRB
     144     R5LES=R3LES*(RTT-R4LES)
     145     R5IES=R3IES*(RTT-R4IES)
     146     R5ALVCP=R5LES*RLVTT/RCPD
     147     R5ALSCP=R5IES*RLSTT/RCPD
     148     RALVDCP=RLVTT/RCPD
     149     RALSDCP=RLSTT/RCPD
     150     RALFDCP=RLMLT/RCPD
     151     RTWAT=RTT
     152     RTBER=RTT-5._JPRB
     153     RTBERCU=RTT-5.0_JPRB
     154     RTICE=RTT-23._JPRB
     155     RTICECU=RTT-23._JPRB
     156     
     157     RTWAT_RTICE_R=1.0_JPRB/(RTWAT-RTICE)
     158     RTWAT_RTICECU_R=1.0_JPRB/(RTWAT-RTICECU)
     159     IF(NPHYINT == 0) THEN
     160       ISMAX=NSMAX
     161     ELSE
     162       ISMAX=PHYS_GRID%NSMAX
     163     ENDIF
     164     
     165     RKOOP1=2.583_JPRB
     166     RKOOP2=0.48116E-2_JPRB
     167     
     168  ELSE
     169     ! Keep constants defined in suphel.F90
     170     RTICE=RTT-23._JPRB
     171!
     172  ENDIF  ! (OK_BAD_ECMWF_THERMO)
    163173
    164174!     ------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.