Ignore:
Timestamp:
Mar 17, 2022, 2:36:31 PM (3 years ago)
Author:
abierjon
Message:

Mars GCM:
Implementation of the IRabs-to-VISext dust scenario conversion, depending on the GCM effective radius :

  • new flag 'reff_driven_IRtoVIS_scenario', false by default, must be set to true to use this dynamic conversion (otherwise, the coefficient takes the constant value of 2.6, eqv to reff=1.5um, as before) A specific line is added in deftank/callphys.def.GCM6
  • this flag requires the 'dustiropacity' to be set to 'tes' to match the IR scenario's wavelength. 'mcs'-like dso diagnostics can only be produced by the use of the post-processing tool util/aeroptical.F90
  • the variable IRtoVIScoef is computed in aeropacity via the GCM CDOD ratio : tau_pref_gcm_VIS/tau_pref_gcm_IR (only at the first call to callradite during each physical timestep)
  • change read_dust_scenario into module read_dust_scenario_mod

AB

Location:
trunk/LMDZ.MARS/libf/phymars
Files:
10 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/aeropacity_mod.F

    r2634 r2643  
    1010
    1111      SUBROUTINE aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls,
    12      &    pq,pt,tauscaling,dust_rad_adjust,tau_pref_scenario,
    13      &    tau_pref_gcm,tau,taucloudtes,aerosol,dsodust,reffrad,
    14      &    QREFvis3d,QREFir3d,omegaREFir3d,
    15      &    totstormfract,clearatm,dsords,dsotop,
    16      &    nohmons,
    17      &    clearsky,totcloudfrac)
     12     &   pq,pt,tauscaling,dust_rad_adjust,IRtoVIScoef,tau_pref_scenario,
     13     &   tau_pref_gcm,tau,taucloudtes,aerosol,dsodust,reffrad,
     14     &   QREFvis3d,QREFir3d,omegaREFir3d,
     15     &   totstormfract,clearatm,dsords,dsotop,
     16     &   nohmons,
     17     &   clearsky,totcloudfrac)
    1818                                                         
    1919      use ioipsl_getin_p_mod, only: getin_p
     
    3535     &            iaer_stormdust_doubleq,
    3636     &            iaer_topdust_doubleq
    37       use dust_param_mod, only: odpref, freedust
     37      use dust_param_mod, only: odpref, freedust,
     38     &                          reff_driven_IRtoVIS_scenario
    3839      use dust_scaling_mod, only: compute_dustscaling
    3940      use density_co2_ice_mod, only: density_co2_ice
    4041      use surfdat_h,only: alpha_hmons,contains_mons
     42      use read_dust_scenario_mod, only: read_dust_scenario
    4143     
    4244       IMPLICIT NONE
     
    8991                          !   (for direct comparison with TES)
    9092      REAL, INTENT(OUT) :: aerosol(ngrid,nlayer,naerkind) ! optical
    91                            ! depth of each aerosl in each layer
     93                           ! depth of each aerosol in each layer
    9294      REAL, INTENT(OUT) ::  dsodust(ngrid,nlayer) ! density scaled opacity
    9395                            ! of (background) dust
     
    110112      REAL,INTENT(OUT) :: tauscaling(ngrid) ! Scaling factor for qdust and Ndust
    111113      REAL,INTENT(INOUT) :: dust_rad_adjust(ngrid) ! Radiative adjustment
    112                           ! factor for dust
     114                          ! factor for dust                                 
     115      REAL,INTENT(INOUT) :: IRtoVIScoef(ngrid) ! conversion coefficient to apply on
     116                                               ! scenario absorption IR (9.3um) CDOD
     117                                               ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    113118      REAL,INTENT(IN) :: totcloudfrac(ngrid) ! total water ice cloud fraction
    114119      LOGICAL,INTENT(IN) :: clearsky ! true to compute RT without water ice clouds
     
    134139                               !   reference wavelength
    135140      REAL topdust0(ngrid)
     141     
     142      REAL aerosol_IRabs(ngrid,nlayer)
     143      REAL taudust_IRabs(ngrid)
     144      REAL taudust_VISext(ngrid)
    136145
    137146!      -- CO2 clouds
     
    295304          tau_pref_scenario(ig) = tau_pref_scenario(1)
    296305        end do
     306!!!!!!!!!!!!!!!!!!!!!!!!!!!
     307! NB: here, IRtoVIScoef=2.6
     308! ( useful to be here only if iddist=0 (Pollack90 vertical distribution) )     
    297309      ELSE IF ((iaervar.ge.6).and.(iaervar.le.8)) THEN
    298310      ! clim, cold or warm synthetic scenarios
    299311        call read_dust_scenario(ngrid,nlayer,zday,pplev,
    300      &                          tau_pref_scenario)
     312     &                          IRtoVIScoef,tau_pref_scenario)
    301313      ELSE IF ((iaervar.ge.24).and.(iaervar.le.35))
    302314     &     THEN  ! << MY... dust scenarios >>
    303315        call read_dust_scenario(ngrid,nlayer,zday,pplev,
    304      &                          tau_pref_scenario)
     316     &                          IRtoVIScoef,tau_pref_scenario)
    305317      ELSE IF ((iaervar.eq.4).or.
    306318     &         ((iaervar.ge.124).and.(iaervar.le.126))) THEN
    307319       ! "old" TES assimation dust scenario (values at 700Pa in files!)
    308320        call read_dust_scenario(ngrid,nlayer,zday,pplev,
    309      &                          tau_pref_scenario)
     321     &                          IRtoVIScoef,tau_pref_scenario)
     322!!!!!!!!!!!!!!!!!!!!!!!!!!!     
    310323      ELSE
    311324        call abort_physic("aeropacity","wrong value for iaervar",1)
     
    385398c        (transport of mass and number mixing ratio)
    386399c==================================================================
    387 
     400          ! Some initialisations for the IRtoVIScoef
     401          aerosol_IRabs(:,:)=0.
     402          taudust_IRabs(:)=0.
     403          taudust_VISext(:)=0.
     404     
    388405          DO l=1,nlayer
    389406            IF (l.LE.cstdustlevel) THEN
     
    405422     &          ( rho_dust * reffrad(ig,cstdustlevel,iaer) )  ) *
    406423     &          pq(ig,cstdustlevel,igcm_dust_mass)
     424               
     425                if (reff_driven_IRtoVIS_scenario) then
     426                 if ((clearatm).and.(nohmons)) then ! the IRtoVIScoef is computed only during the first call to the RT
     427                 ! OPTICAL DEPTH in IR absorption to compute the IRtoVIScoef
     428                  aerosol_IRabs(ig,l) =
     429     &            (  0.75 * QREFir3d(ig,cstdustlevel,iaer) /
     430     &            ( rho_dust * reffrad(ig,cstdustlevel,iaer) )  ) *
     431     &            ( 1. - omegaREFir3d(ig,cstdustlevel,iaer) ) *
     432     &            pq(ig,cstdustlevel,igcm_dust_mass) *
     433     &            ( pplev(ig,l) - pplev(ig,l+1) ) / g
     434                 endif
     435                endif
    407436              ENDDO
    408437            ELSE
     
    422451     &          ( rho_dust * reffrad(ig,l,iaer) )  ) *
    423452     &          pq(ig,l,igcm_dust_mass)
     453               
     454                if (reff_driven_IRtoVIS_scenario) then
     455                 if ((clearatm).and.(nohmons)) then ! the IRtoVIScoef is computed only during the first call to the RT
     456                 ! OPTICAL DEPTH in IR absorption to compute the IRtoVIScoef
     457                  aerosol_IRabs(ig,l) =
     458     &            (  0.75 * QREFir3d(ig,l,iaer) /
     459     &            ( rho_dust * reffrad(ig,l,iaer) )  ) *
     460     &            ( 1. - omegaREFir3d(ig,l,iaer) ) *
     461     &            pq(ig,l,igcm_dust_mass) *
     462     &            ( pplev(ig,l) - pplev(ig,l+1) ) / g
     463                 endif
     464                endif
    424465              ENDDO
    425466            ENDIF
    426           ENDDO
     467            if (reff_driven_IRtoVIS_scenario) then
     468             if ((clearatm).and.(nohmons)) then ! the IRtoVIScoef is computed only during the first call to the RT
     469              taudust_VISext(:) = taudust_VISext(:) + aerosol(:,l,iaer)
     470              taudust_IRabs(:) = taudust_IRabs(:) + aerosol_IRabs(:,l)
     471             endif
     472            endif
     473          ENDDO
     474         
     475          if (reff_driven_IRtoVIS_scenario) then
     476           if ((clearatm).and.(nohmons)) then ! the IRtoVIScoef is computed only during the first call to the RT
     477            IRtoVIScoef(:) = taudust_VISext(:) / taudust_IRabs(:)
     478           endif
     479          endif
    427480
    428481c==================================================================
     
    647700! 3. Specific treatments for the dust aerosols
    648701
     702! here IRtoVIScoef has been updated, we can call again read_dust_scenario
     703      if (reff_driven_IRtoVIS_scenario) then
     704        IF ((iaervar.ge.6).and.(iaervar.le.8)) THEN
     705        ! clim, cold or warm synthetic scenarios
     706          call read_dust_scenario(ngrid,nlayer,zday,pplev,
     707     &                            IRtoVIScoef,tau_pref_scenario)
     708        ELSE IF ((iaervar.ge.24).and.(iaervar.le.35))
     709     &       THEN  ! << MY... dust scenarios >>
     710          call read_dust_scenario(ngrid,nlayer,zday,pplev,
     711     &                            IRtoVIScoef,tau_pref_scenario)
     712        ELSE IF ((iaervar.eq.4).or.
     713     &           ((iaervar.ge.124).and.(iaervar.le.126))) THEN
     714         ! "old" TES assimation dust scenario (values at 700Pa in files!)
     715          call read_dust_scenario(ngrid,nlayer,zday,pplev,
     716     &                            IRtoVIScoef,tau_pref_scenario)
     717        ENDIF
     718      endif
     719     
    649720#ifdef DUSTSTORM
    650721c -----------------------------------------------------------------
     
    790861!      coefficients and adjust aerosol() dust opacities accordingly
    791862      call compute_dustscaling(ngrid,nlayer,naerkind,naerdust,zday,pplev
    792      &                         ,tau_pref_scenario,tauscaling,
    793      &                          dust_rad_adjust,aerosol)
     863     &                         ,tau_pref_scenario,IRtoVIScoef,
     864     &                          tauscaling,dust_rad_adjust,aerosol)
    794865
    795866! 3.2. Recompute tau_pref_gcm, the reference dust opacity, based on dust tracer
  • trunk/LMDZ.MARS/libf/phymars/callradite_mod.F

    r2634 r2643  
    99     $     dtlw,dtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw,
    1010     $     fluxtop_sw,tau_pref_scenario,tau_pref_gcm,
    11      &     tau,aerosol,dsodust,tauscaling,dust_rad_adjust,
     11     &     tau,aerosol,dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef,
    1212     $     taucloudtes,rdust,rice,nuice,riceco2,nuiceco2,co2ice,
    1313     $     rstormdust,rtopdust,totstormfract,clearatm,dsords,dsotop,
     
    179179      REAL,INTENT(INOUT) :: dust_rad_adjust(ngrid) ! Radiative adjustment
    180180                          ! factor for dust
     181      REAL,INTENT(INOUT) :: IRtoVIScoef(ngrid) ! conversion coefficient to apply on
     182                                               ! scenario absorption IR (9.3um) CDOD
     183                                               ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    181184      REAL,INTENT(IN) :: albedo(ngrid,2),emis(ngrid)
    182185      REAL,INTENT(IN) :: ls,zday
     
    443446c     Computing aerosol optical depth in each layer:
    444447      CALL aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls,
    445      &    pq,pt,tauscaling,dust_rad_adjust,tau_pref_scenario,
    446      &    tau_pref_gcm,tau,taucloudtes,aerosol,dsodust,reffrad,
     448     &    pq,pt,tauscaling,dust_rad_adjust,IRtoVIScoef,
     449     &    tau_pref_scenario,tau_pref_gcm,tau,taucloudtes,
     450     &    aerosol,dsodust,reffrad,
    447451     &    QREFvis3d,QREFir3d,omegaREFir3d,
    448452     &    totstormfract,clearatm,dsords,dsotop,
  • trunk/LMDZ.MARS/libf/phymars/compute_dtau_mod.F90

    r2616 r2643  
    1515        SUBROUTINE compute_dtau(ngrid,nlayer,                           &
    1616                                 zday,pplev,tau_pref_gcm,               &
    17                                  ptimestep,dustliftday,local_time)
     17                                 ptimestep,local_time,IRtoVIScoef,      &
     18                                 dustliftday)
    1819
    1920        USE geometry_mod, only: longitude_deg
     
    2324        USE dimradmars_mod, only: tauvis
    2425        USE dust_param_mod, only: odpref, t_scenario_sol
     26        USE read_dust_scenario_mod, only: read_dust_scenario
    2527       
    2628        IMPLICIT NONE
     
    3638        REAL, INTENT(in) :: ptimestep
    3739        REAL, INTENT(in) :: local_time(ngrid)
     40        REAL, INTENT(in) :: IRtoVIScoef(ngrid) ! conversion coefficient to apply on
     41                                               ! scenario absorption IR (9.3um) CDOD
     42                                               ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    3843        REAL, INTENT(out) :: dustliftday(ngrid) ! Dust injection rate (s-1)
    3944       
     
    7176          zday_scenario=zday_scenario+1      ! opacity of the dust scenario is read the day after
    7277          call read_dust_scenario(ngrid,nlayer,zday_scenario,pplev,     &
     78                                         IRtoVIScoef,                   &
    7379                                         tau_pref_target)
    7480        endif
  • trunk/LMDZ.MARS/libf/phymars/conf_phys.F

    r2639 r2643  
    4949      use dust_param_mod, only: dustbin, doubleq, submicron, active,
    5050     &                          lifting, freedust, callddevil,
    51      &                          dustscaling_mode
     51     &                          dustscaling_mode,
     52     &                          reff_driven_IRtoVIS_scenario
    5253      use aeropacity_mod, only: iddist, topdustref
    5354      USE mod_phys_lmdz_transfert_para, ONLY: bcast
     
    516517         ! OR AT LEAST NO TO FAR, TO AVOID FALLACIOUS INTERPOLATIONS.
    517518         !
    518          dustiropacity="tes" !default value - is expected to shift to mcs one day
     519         dustiropacity="tes" !default value
    519520         call getin_p("dustiropacity",dustiropacity)
    520521         write(*,*)" dustiropacity = ",trim(dustiropacity)
     
    530531     &          "invalid dustiropacity option value",1)
    531532         end select
     533! Dust scenario IR to VIS conversion
     534         write(*,*)"Use an IR to VIS conversion coefficient"
     535         write(*,*)"for the dust scenario, that is dependent"
     536         write(*,*)"on the GCM dust effective radius,"
     537         write(*,*)"instead of a fixed 2.6 coefficient ?"
     538         reff_driven_IRtoVIS_scenario=.false. !default value
     539         call getin_p("reff_driven_IRtoVIS_scenario",
     540     &                 reff_driven_IRtoVIS_scenario)
     541         write(*,*)" reff_driven_IRtoVIS_scenario = ",
     542     &               reff_driven_IRtoVIS_scenario
     543! Test of incompatibility:
     544! if reff_driven_IRtoVIS_scenario=.true.,
     545! dustrefir must be 9.3E-6 = scenarios' wavelength
     546         if (reff_driven_IRtoVIS_scenario .and.
     547     &      (dustrefir.ne.9.3E-6)) then
     548           print*,'if reff_driven_IRtoVIS_scenario is used, then '//
     549     &           'the GCM IR reference wavelength should be the one '//
     550     &           'of the scenarios (dustiropacity=tes)'
     551           call abort_physic(modname,
     552     &        "reff_driven_IRtoVIS_scenario requires tes wavelength",1)
     553         endif
    532554
    533555! callddevil
     
    539561! Test of incompatibility:
    540562! if dustdevil is used, then dustbin should be > 0
    541 
    542563         if (callddevil.and.(dustbin.lt.1)) then
    543564           print*,'if dustdevil is used, then dustbin should > 0'
     
    545566     &          "callddevil requires dustbin > 0",1)
    546567         endif
     568         
    547569! sedimentation
    548570         write(*,*) "Gravitationnal sedimentation ?"
  • trunk/LMDZ.MARS/libf/phymars/dust_param_mod.F90

    r2578 r2643  
    88  LOGICAL,SAVE :: freedust ! if true: no rescaling (via tauscaling) of the dust mass and number
    99  LOGICAL,SAVE :: callddevil ! flag to activate dust devil (dust lifing/injection) parametrization
     10  LOGICAL,SAVE :: reff_driven_IRtoVIS_scenario ! use GCM dust size to convert IR scenarios to VIS
    1011
    1112!$OMP THREADPRIVATE(active, doubleq,submicron,lifting,freedust,     &
     
    2829                    ! tau_pref_scenario is deemed exact
    2930
    30 !$OMP THREADPRIVATE(tauscaling, dustscaling_mode,dust_rad_adjust)
     31!$OMP THREADPRIVATE(tauscaling,dustscaling_mode,dust_rad_adjust)
    3132
    3233contains
  • trunk/LMDZ.MARS/libf/phymars/dust_rad_adjust_mod.F90

    r2634 r2643  
    1313
    1414  subroutine compute_dust_rad_adjust(ngrid,nlayer,zday,pplev, &
    15                                      taudust,dust_rad_adjust)
     15                                     taudust,IRtoVIScoef,     &
     16                                     dust_rad_adjust)
    1617 
    1718  use geometry_mod, only: longitude_deg
    1819  use time_phylmdz_mod, only: dtphys, daysec
    1920  use dust_param_mod, only: odpref, t_scenario_sol
     21  use read_dust_scenario_mod, only: read_dust_scenario
    2022 
    2123  implicit none
     
    2628  real,intent(in) :: pplev(ngrid,nlayer+1) ! pressure (Pa) at layer boundaries
    2729  real,intent(in) :: taudust(ngrid) ! visible dust columns opacity in the GCM
     30  real,intent(in) :: IRtoVIScoef(ngrid) ! conversion coefficient to apply on
     31                                        ! scenario absorption IR (9.3um) CDOD
     32                                        ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    2833  real,intent(out) :: dust_rad_adjust(ngrid) ! radiative adjustment coefficient
    2934                      ! for dust
     
    7479!                                       tau_pref_scenario)
    7580  call read_dust_scenario(ngrid,nlayer,zday_scenario_next,pplev, &
     81                                       IRtoVIScoef,              &
    7682                                       tau_pref_scenario_next)
    7783
  • trunk/LMDZ.MARS/libf/phymars/dust_scaling_mod.F90

    r2634 r2643  
    77  subroutine compute_dustscaling(ngrid,nlayer,naerkind,naerdust, &
    88                                 zday,pplev, &
    9                                  tau_pref_scenario,tauscaling, &
     9                                 tau_pref_scenario,IRtoVIScoef, &
     10                                 tauscaling, &
    1011                                 dust_rad_adjust,aerosol)
    1112   
     
    2425    real,intent(in) :: tau_pref_scenario(ngrid) ! prescribed visible dust
    2526                       ! opacity column at odpref reference pressure
     27    real,intent(in) :: IRtoVIScoef(ngrid) ! conversion coefficient to apply on
     28                                          ! scenario absorption IR (9.3um) CDOD
     29                                          ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    2630    real,intent(out) :: tauscaling(ngrid) ! dust scaling factor
    2731    real,intent(inout) :: dust_rad_adjust(ngrid) ! Radiative adjustment
     
    7478      if (zday/=zday_prev_call) then
    7579        call compute_dust_rad_adjust(ngrid,nlayer,zday,pplev, &
    76                                      taudust,dust_rad_adjust)
    77        endif ! of if (zday/=zday_prev_call)
     80                                     taudust,IRtoVIScoef,     &
     81                                     dust_rad_adjust)
     82      endif ! of if (zday/=zday_prev_call)
    7883                                     
    7984      ! update zday_prev_call
  • trunk/LMDZ.MARS/libf/phymars/physiq_mod.F

    r2628 r2643  
    6565     &                          tauscaling, odpref, dustbin,
    6666     &                          dustscaling_mode, dust_rad_adjust,
    67      &                          freedust
     67     &                          freedust, reff_driven_IRtoVIS_scenario
    6868      use turb_mod, only: q2, wstar, ustar, sensibFlux,
    6969     &                    zmax_th, hfmax_th, turb_resolved
     
    301301      REAL tau_pref_scenario(ngrid) ! prescribed dust column visible opacity
    302302                                    ! at odpref
     303      REAL IRtoVIScoef(ngrid) ! conversion coefficient to apply on
     304                              ! scenario absorption IR (9.3um) CDOD
     305                              ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    303306      REAL tau_pref_gcm(ngrid) ! dust column visible opacity at odpref in the GCM
    304307c     rocket dust storm
     
    761764      dsotop(:,:)=0.
    762765      dwatercap(:)=0
     766     
     767      ! Dust scenario conversion coefficient from IRabs to VISext
     768      IRtoVIScoef(1:ngrid)=2.6 ! initialized with former value from Montabone et al 2015
     769                               ! recomputed in aeropacity if reff_driven_IRtoVIS_scenario=.true.
    763770
    764771#ifdef DUSTSTORM
     
    967974     &     zdtlw,zdtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw,
    968975     &     fluxtop_sw,tau_pref_scenario,tau_pref_gcm,
    969      &     tau,aerosol,dsodust,tauscaling,dust_rad_adjust,
     976     &     tau,aerosol,dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef,
    970977     &     taucloudtes,rdust,rice,nuice,riceco2,nuiceco2,co2ice,
    971978     &     rstormdust,rtopdust,totstormfract,clearatm,dsords,dsotop,
     
    983990     &              dist_sol,igout,zdtlwclf,zdtswclf,fluxsurf_lwclf,
    984991     &              fluxsurf_swclf,fluxtop_lwclf,fluxtop_swclf,
    985      &              tau_pref_scenario,tau_pref_gcm,
    986      &              tau,aerosol,dsodust,tauscaling,dust_rad_adjust,
     992     &              tau_pref_scenario,tau_pref_gcm,tau,aerosol,
     993     &              dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef,
    987994     &              taucloudtesclf,rdust,
    988995     &              rice,nuice,riceco2, nuiceco2,co2ice,rstormdust,
     
    11791186     &                      tsurf,igout,totstormfract,
    11801187     &                      tauscaling,dust_rad_adjust,
     1188     &                      IRtoVIScoef,
    11811189c               input sub-grid scale cloud
    11821190     &                      clearsky,totcloudfrac,
     
    12401248     &                zzlay,zdtsw,zdtlw,
    12411249     &                icount,zday,zls,tsurf,igout,aerosol,
    1242      &                tauscaling,dust_rad_adjust,
     1250     &                tauscaling,dust_rad_adjust,IRtoVIScoef,
    12431251     &                totstormfract,clearatm,
    12441252     &                clearsky,totcloudfrac,
     
    12721280             CALL compute_dtau(ngrid,nlayer,
    12731281     &                          zday,pplev,tau_pref_gcm,
    1274      &                          ptimestep,dustliftday,local_time)
     1282     &                          ptimestep,local_time,IRtoVIScoef,
     1283     &                          dustliftday)
    12751284           endif ! end of if (dustinjection.gt.0)
    12761285
     
    32473256     &                 'Visible dust optical depth at 610Pa in the GCM',
    32483257     &                 'NU',2,tau_pref_gcm)
     3258     
     3259      if (reff_driven_IRtoVIS_scenario) then
     3260             call WRITEDIAGFI(ngrid,'IRtoVIScoef',
     3261     &  'conversion coeff for dust tau from abs9.3um to ext0.67um',
     3262     &                        '/',2,IRtoVIScoef)
     3263      endif
    32493264
    32503265      if (tracer.and.(dustbin.ne.0)) then
  • trunk/LMDZ.MARS/libf/phymars/read_dust_scenario_mod.F90

    r2641 r2643  
    1 subroutine read_dust_scenario(ngrid,nlayer,zday,pplev,tau_pref_scenario)
     1module read_dust_scenario_mod
     2
     3implicit none
     4
     5contains
     6
     7subroutine read_dust_scenario(ngrid,nlayer,zday,pplev,IRtoVIScoef,tau_pref_scenario)
    28
    39! Reading of the dust scenario file
     
    1622real, intent(in) :: zday ! date in martian days
    1723real, dimension(ngrid,nlayer+1), intent(in) :: pplev
     24real, dimension(ngrid), intent(in) :: IRtoVIScoef ! conversion coefficient to apply on
     25                                       ! scenario absorption IR (9.3um) CDOD
     26                                       ! = tau_pref_gcm_VIS / tau_pref_gcm_IR
    1827real, dimension(ngrid), intent(out) :: tau_pref_scenario ! visible dust column
    1928                                       ! opacity at odpref from scenario
     
    4049integer, save :: timelen,lonlen,latlen
    4150character(len=33),save :: filename
     51logical,save :: IRscenario ! =true if the scenarios are IR absorption opacity (variable 'cdod')
     52                           ! and not VIS extinction (variable 'dustop')
    4253
    4354!$OMP THREADPRIVATE(firstcall,radeg,pi, &
    44 !$OMP                lat,lon,time,tautes,  &
    45 !$OMP            timelen,lonlen,latlen,filename)
     55!$OMP               lat,lon,time,tautes,  &
     56!$OMP               timelen,lonlen,latlen,  &
     57!$OMP               filename,IRscenario)
    4658
    4759realday=mod(zday,669.)
     
    126138   ierr=nf90_inq_varid(nid,"dustop",nvarid)
    127139   if (ierr.eq.nf90_noerr) then
     140     IRscenario = .false.
    128141     ierr=nf90_get_var(nid,nvarid,tautes)
    129142     IF (ierr .NE. nf90_noerr) THEN
     
    134147   else
    135148     ! did not find "dustop" , look for "cdod"
     149     IRscenario = .true.
    136150     ierr=nf90_inq_varid(nid,"cdod",nvarid)
    137151     ierr=nf90_get_var(nid,nvarid,tautes)
     
    141155        call abort_physic("read_dust_scenario","cdod not found",1)
    142156     ENDIF
    143      ! and multiply by 2*1.3=2.6 to convert from IR absorption
    144      ! to visible extinction opacity
    145      tautes(:,:,:)=2.6*tautes(:,:,:)
    146157   endif
    147158
     
    194205   call bcast(lat)
    195206   call bcast(lon)
     207   call bcast(IRscenario)
    196208
    197209endif ! of if (firstcall)
     210
    198211
    199212do ig=1,ngrid
     
    354367   tau= dlat*(dlon*(tau1(2)+tau1(3)-tau1(1)-tau1(4))+tau1(1)-tau1(3)) +dlon*(tau1(4)-tau1(3))+tau1(3)
    355368
    356    tau_pref_scenario(ig)=tau
     369   if (IRscenario) then
     370     ! if the scenarios are in infrared, multiply by IRtoVIScoef(ig)
     371     ! to convert from IR absorption to visible extinction opacity
     372     tau_pref_scenario(ig)=tau * IRtoVIScoef(ig)
     373   else
     374     tau_pref_scenario(ig)=tau
     375   endif
     376   
    357377!
    358378enddo ! of ig=1,ngrid
     
    373393endif
    374394
    375 end
     395end subroutine read_dust_scenario
     396
     397end module read_dust_scenario_mod
  • trunk/LMDZ.MARS/libf/phymars/rocketduststorm_mod.F90

    r2634 r2643  
    2727                                 tsurf,igout,totstormfract,            &
    2828                                 tauscaling,dust_rad_adjust,           &
     29                                 IRtoVIScoef,                          &
    2930!             input sub-grid scale cloud
    3031                                 clearsky,totcloudfrac,                &
     
    7980      REAL, INTENT(IN) :: totstormfract(ngrid)
    8081      REAL, INTENT(INOUT) :: tauscaling(ngrid)
    81       REAL,INTENT(INOUT) :: dust_rad_adjust(ngrid)
     82      REAL,INTENT(INOUT) :: dust_rad_adjust(ngrid)                             
     83      REAL,INTENT(INOUT) :: IRtoVIScoef(ngrid) ! NB: not modified by this call to callradite,
     84                                               ! the OUT is just here because callradite needs it
    8285     
    8386!     subgrid scale water ice clouds
     
    254257                 zdtlw1,zdtsw1,fluxsurf_lw1,fluxsurf_sw1,fluxtop_lw1,     &
    255258                 fluxtop_sw1,tau_pref_scenario,tau_pref_gcm, &
    256                  tau,aerosol,dsodust,tauscaling,dust_rad_adjust,      &
     259                 tau,aerosol,dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef, &
    257260                 taucloudtes,rdust,rice,nuice,riceco2,nuiceco2,co2ice,rstormdust,rtopdust, &
    258261                 totstormfract,clearatm,dsords,dsotop,nohmons,&
  • trunk/LMDZ.MARS/libf/phymars/topmons_mod.F90

    r2634 r2643  
    2222                                 icount,zday,zls,tsurf,igout,aerosol,  &
    2323                                 tauscaling,dust_rad_adjust,           &
     24                                 IRtoVIScoef,                          &
    2425!             input sub-grid scale rocket dust storm
    2526                                 totstormfract,clearatm,               &
     
    7576      REAL, INTENT(INOUT) :: tauscaling(ngrid)
    7677      REAL,INTENT(INOUT) :: dust_rad_adjust(ngrid)
     78      REAL,INTENT(INOUT) :: IRtoVIScoef(ngrid) ! NB: not modified by this call to callradite,
     79                                               ! the OUT is just here because callradite needs it
     80                                               
    7781!     input sub-grid scale rocket dust storm
    7882      LOGICAL, INTENT(IN) :: clearatm
     
    284288                 zdtlw1,zdtsw1,fluxsurf_lw1,fluxsurf_sw1,fluxtop_lw1,  &
    285289                 fluxtop_sw1,tau_pref_scenario,tau_pref_gcm, &
    286                  tau,aerosol,dsodust,tauscaling,dust_rad_adjust,    &
     290                 tau,aerosol,dsodust,tauscaling,dust_rad_adjust,IRtoVIScoef, &
    287291                 taucloudtes,rdust,rice,nuice,riceco2,nuiceco2,co2ice,rstormdust,rtopdust, &
    288292                 totstormfract,clearatm,dsords,dsotop,nohmons,&
Note: See TracChangeset for help on using the changeset viewer.