Changeset 3197 for trunk/LMDZ.PLUTO


Ignore:
Timestamp:
Feb 1, 2024, 11:17:06 AM (10 months ago)
Author:
afalco
Message:

Pluto PCM:
Fixed some flags for aerosols
AF

Location:
trunk/LMDZ.PLUTO
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.PLUTO/deftank/callphys.def

    r3195 r3197  
    8787sedimentation = .true.
    8888
    89 naerkind = 0
     89naerkind = 1
    9090hazeprop = optprop_tholins_fractal100nm.dat
    9191
  • trunk/LMDZ.PLUTO/deftank/traceur.def

    r3195 r3197  
    1 0
     11
     2n2
  • trunk/LMDZ.PLUTO/libf/phypluto/callcorrk.F90

    r3195 r3197  
    486486      end do
    487487
    488       ! Get 3D aerosol optical properties.
    489       call aeroptproperties(ngrid,nlayer,reffrad,nueffrad,         &
    490            QVISsQREF3d,omegaVIS3d,gVIS3d,                          &
    491            QIRsQREF3d,omegaIR3d,gIR3d,                             &
    492            QREFvis3d,QREFir3d)
    493 
    494       ! Get aerosol optical depths.
    495       call aeropacity(ngrid,nlayer,nq,pplay,pplev, pt,pq,aerosol,      &
    496            reffrad,nueffrad,QREFvis3d,QREFir3d,                             &
    497            tau_col,cloudfrac,totcloudfrac,clearsky)
     488      if (aerohaze) then
     489      !    if (haze_radproffix) then
     490      !       call haze_reffrad_fix(ngrid,nlayer,zzlay,&
     491      !           reffrad,nueffrad)
     492      !     endif
     493
     494         ! Get 3D aerosol optical properties.
     495         call aeroptproperties(ngrid,nlayer,reffrad,nueffrad,         &
     496            QVISsQREF3d,omegaVIS3d,gVIS3d,                          &
     497            QIRsQREF3d,omegaIR3d,gIR3d,                             &
     498            QREFvis3d,QREFir3d)
     499
     500         ! Get aerosol optical depths.
     501         call aeropacity(ngrid,nlayer,nq,pplay,pplev, pt,pq,aerosol,      &
     502            reffrad,nueffrad,QREFvis3d,QREFir3d,                             &
     503            tau_col,cloudfrac,totcloudfrac,clearsky)
     504      endif
    498505
    499506!-----------------------------------------------------------------------
     
    513520
    514521
     522         if (aerohaze) then
    515523            do iaer=1,naerkind
    516524               ! Shortwave.
     
    620628            end do ! naerkind
    621629
     630         endif ! aerohaze
    622631!-----------------------------------------------------------------------
    623632!     Aerosol optical depths
    624633!-----------------------------------------------------------------------
    625 
     634        IF (aerohaze) THEN
    626635         do iaer=1,naerkind     ! a bug was here
    627636            do k=0,nlayer-1
     
    642651
    643652         end do ! naerkind
     653        ELSE
     654         tauaero(:,:)=0
     655        ENDIF ! aerohaze
    644656
    645657         ! Albedo and Emissivity.
  • trunk/LMDZ.PLUTO/libf/phypluto/inifis_mod.F90

    r3195 r3197  
    3434!   -------
    3535!
    36 !   Initialisation for the physical parametrisations of the LMD 
     36!   Initialisation for the physical parametrisations of the LMD
    3737!   Generic Model.
    3838!
     
    7878  INTEGER ig
    7979  CHARACTER(len=20) :: rname="inifis" ! routine name, for messages
    80  
     80
    8181  EXTERNAL iniorbit,orbite
    8282  EXTERNAL SSUM
    8383  REAL SSUM
    84  
     84
    8585  ! Initialize flags lunout, prt_level, debug (in print_control_mod)
    8686  CALL init_print_control
     
    110110  ! do we read a startphy.nc file? (default: .true.)
    111111  call getin_p("startphy_file",startphy_file)
    112  
     112
    113113! --------------------------------------------------------------
    114114!  Reading the "callphys.def" file controlling some key options
    115115! --------------------------------------------------------------
    116      
     116
    117117  IF (is_master) THEN
    118118    ! check if 'callphys.def' file is around
     
    139139     if (is_master) write(*,*) "Haze optical properties datafile"
    140140     hazeprop="../../../datadir"  ! default path
    141      call getin_p("hazeprop",hazeprop) 
     141     call getin_p("hazeprop",hazeprop)
    142142     if (is_master) write(*,*) trim(rname)//" hazeprop = ",trim(hazeprop)
    143143
     
    175175     call getin_p("season",season)
    176176     if (is_master) write(*,*) trim(rname)//": season = ",season
    177      
     177
    178178     if (is_master) write(*,*) trim(rname)//&
    179179       ": No seasonal cycle: initial day to lock the run during restart"
     
    235235     call getin_p("tplanckmin",tplanckmin)
    236236     if (is_master) write(*,*) trim(rname)//": tplanckmin = ",tplanckmin
    237  
     237
    238238     if (is_master) write(*,*) trim(rname)//&
    239239       ": Maximum atmospheric temperature for Planck function integration ?"
     
    241241     call getin_p("tplanckmax",tplanckmax)
    242242     if (is_master) write(*,*) trim(rname)//": tplanckmax = ",tplanckmax
    243  
     243
    244244     if (is_master) write(*,*) trim(rname)//&
    245245       ": Temperature step for Planck function integration ?"
     
    247247     call getin_p("dtplanck",dtplanck)
    248248     if (is_master) write(*,*) trim(rname)//": dtplanck = ",dtplanck
    249  
     249
    250250     if (is_master) write(*,*) trim(rname)//&
    251251       ": call gaseous absorption in the visible bands?"//&
     
    254254     call getin_p("callgasvis",callgasvis)
    255255     if (is_master) write(*,*) trim(rname)//": callgasvis = ",callgasvis
    256        
     256
    257257     if (is_master) write(*,*) trim(rname)//&
    258258       ": call continuum opacities in radiative transfer ?"//&
     
    290290     call getin_p("callsoil",callsoil)
    291291     if (is_master) write(*,*) trim(rname)//": callsoil = ",callsoil
    292          
     292
    293293     if (is_master) write(*,*)trim(rname)//&
    294294       ": Rad transfer is computed every iradia", &
     
    297297     call getin_p("iradia",iradia)
    298298     if (is_master) write(*,*)trim(rname)//": iradia = ",iradia
    299        
     299
    300300     if (is_master) write(*,*)trim(rname)//": Rayleigh scattering ?"
    301301     rayleigh=.false.
     
    347347     call getin_p("nsoilmx",nsoilmx)
    348348     if (is_master) write(*,*)trim(rname)//": nsoilmx=",nsoilmx
    349      
     349
    350350     if (is_master) write(*,*)trim(rname)//&
    351351       ": Thickness of topmost soil layer (m)?"
     
    353353     call getin_p("lay1_soil",lay1_soil)
    354354     if (is_master) write(*,*)trim(rname)//": lay1_soil = ",lay1_soil
    355      
     355
    356356     if (is_master) write(*,*)trim(rname)//&
    357357       ": Coefficient for soil layer thickness distribution?"
     
    380380      call getin_p("global1d",global1d)
    381381      write(*,*) "global1d = ",global1d
    382      
     382
    383383      ! Test of incompatibility : if global1d is true, there should not be any diurnal cycle.
    384384      if (global1d.and.diurnal) then
     
    464464     if(kastprof)then
    465465        radfixed=.true.
    466      endif 
     466     endif
    467467
    468468      if (is_master) write(*,*)trim(rname)//&
     
    472472     if (is_master) write(*,*)trim(rname)//": naerkind = ",naerkind
    473473
    474      
     474
    475475!***************************************************************
    476476         !! TRACERS options
     
    478478     if (is_master)write(*,*)trim(rname)//&
    479479      "call N2 condensation ?"
    480      N2cond=.true. ! default value
    481      call getin_p("N2cond",N2cond)
    482      if (is_master)write(*,*)trim(rname)//&
    483       " N2cond = ",N2cond
     480     n2cond=.true. ! default value
     481     call getin_p("n2cond",n2cond)
     482     if (is_master)write(*,*)trim(rname)//&
     483      " n2cond = ",n2cond
    484484
    485485     if (is_master)write(*,*)trim(rname)//&
     
    655655     if (is_master)write(*,*)trim(rname)//&
    656656     "nb_monomer = ",nb_monomer
    657      
     657
    658658     if (is_master)write(*,*)trim(rname)//&
    659659     "fixed radius profile from txt file ?"
     
    750750     if (is_master)write(*,*)trim(rname)//&
    751751      " thres_ch4ice = ",thres_ch4ice
    752      fdch4_latn=-1. 
    753      fdch4_lats=0. 
    754      fdch4_lone=0. 
    755      fdch4_lonw=-1. 
    756      fdch4_depalb=0.5 
    757      fdch4_finalb=0.95 
    758      fdch4_maxalb=0.99 
    759      fdch4_ampl=200. 
    760      fdch4_maxice=100. 
     752     fdch4_latn=-1.
     753     fdch4_lats=0.
     754     fdch4_lone=0.
     755     fdch4_lonw=-1.
     756     fdch4_depalb=0.5
     757     fdch4_finalb=0.95
     758     fdch4_maxalb=0.99
     759     fdch4_ampl=200.
     760     fdch4_maxice=100.
    761761     call getin_p("  fdch4_latn",fdch4_latn)
    762762     call getin_p("  fdch4_lats",fdch4_lats)
     
    903903     if (is_master)write(*,*)trim(rname)//&
    904904      " tholateq = ",tholateq
    905      tholatn=-1. 
    906      tholats=0. 
    907      tholone=0. 
    908      tholonw=-1. 
     905     tholatn=-1.
     906     tholats=0.
     907     tholone=0.
     908     tholonw=-1.
    909909     alb_tho_spe=0.1 ! default value
    910910     emis_tho_spe=1. ! default value
     
    10391039     if (is_master) write(*,*)trim(rname)//&
    10401040       ": optprop_back2lay_ir = ",trim(optprop_back2lay_ir)
    1041      
     1041
    10421042     if (is_master) write(*,*)trim(rname)//&
    10431043       ": TWOLAY AEROSOL: pres_bottom_tropo? in pa"
     
    11321132
    11331133     ! This is necessary, we just set the number of aerosol layers
    1134      IF(.NOT.ALLOCATED(aeronlay_tauref))      ALLOCATE(aeronlay_tauref(nlayaero))     
    1135      IF(.NOT.ALLOCATED(aeronlay_lamref))      ALLOCATE(aeronlay_lamref(nlayaero))     
    1136      IF(.NOT.ALLOCATED(aeronlay_choice))      ALLOCATE(aeronlay_choice(nlayaero))     
    1137      IF(.NOT.ALLOCATED(aeronlay_pbot))        ALLOCATE(aeronlay_pbot(nlayaero))     
    1138      IF(.NOT.ALLOCATED(aeronlay_ptop))        ALLOCATE(aeronlay_ptop(nlayaero))     
    1139      IF(.NOT.ALLOCATED(aeronlay_sclhght))     ALLOCATE(aeronlay_sclhght(nlayaero))     
    1140      IF(.NOT.ALLOCATED(aeronlay_size))        ALLOCATE(aeronlay_size(nlayaero))     
    1141      IF(.NOT.ALLOCATED(aeronlay_nueff))       ALLOCATE(aeronlay_nueff(nlayaero))     
    1142      IF(.NOT.ALLOCATED(optprop_aeronlay_ir))  ALLOCATE(optprop_aeronlay_ir(nlayaero))     
    1143      IF(.NOT.ALLOCATED(optprop_aeronlay_vis)) ALLOCATE(optprop_aeronlay_vis(nlayaero))     
     1134     IF(.NOT.ALLOCATED(aeronlay_tauref))      ALLOCATE(aeronlay_tauref(nlayaero))
     1135     IF(.NOT.ALLOCATED(aeronlay_lamref))      ALLOCATE(aeronlay_lamref(nlayaero))
     1136     IF(.NOT.ALLOCATED(aeronlay_choice))      ALLOCATE(aeronlay_choice(nlayaero))
     1137     IF(.NOT.ALLOCATED(aeronlay_pbot))        ALLOCATE(aeronlay_pbot(nlayaero))
     1138     IF(.NOT.ALLOCATED(aeronlay_ptop))        ALLOCATE(aeronlay_ptop(nlayaero))
     1139     IF(.NOT.ALLOCATED(aeronlay_sclhght))     ALLOCATE(aeronlay_sclhght(nlayaero))
     1140     IF(.NOT.ALLOCATED(aeronlay_size))        ALLOCATE(aeronlay_size(nlayaero))
     1141     IF(.NOT.ALLOCATED(aeronlay_nueff))       ALLOCATE(aeronlay_nueff(nlayaero))
     1142     IF(.NOT.ALLOCATED(optprop_aeronlay_ir))  ALLOCATE(optprop_aeronlay_ir(nlayaero))
     1143     IF(.NOT.ALLOCATED(optprop_aeronlay_vis)) ALLOCATE(optprop_aeronlay_vis(nlayaero))
    11441144
    11451145     if (is_master) write(*,*)trim(rname)//&
     
    11611161       ": Generic n-layer aerosols: Vertical profile choice : "
    11621162       write(*,*)trim(rname)//&
    1163        "             (1) Tau btwn ptop and pbot follows atm. scale height" 
     1163       "             (1) Tau btwn ptop and pbot follows atm. scale height"
    11641164       write(*,*)trim(rname)//&
    11651165       "         or  (2) Tau above pbot follows its own scale height"
     
    12141214     if (is_master) write(*,*)trim(rname)//&
    12151215       ": optprop_aeronlay_ir = ",optprop_aeronlay_ir
    1216      
     1216
    12171217
    12181218!=================================
     
    12501250
    12511251     if (is_master) write(*,*)trim(rname)//": Generic Condensation of tracers ?"
    1252      generic_condensation=.false. !default value 
     1252     generic_condensation=.false. !default value
    12531253     call getin_p("generic_condensation",generic_condensation)
    12541254     if (is_master) write(*,*)trim(rname)//": generic_condensation = ",generic_condensation
    1255      
     1255
    12561256! Test of incompatibility:
    12571257     if (is_master) write(*,*)trim(rname)//": Spectral Dependant albedo ?"
     
    12691269     call getin_p("albedosnow",albedosnow)
    12701270     if (is_master) write(*,*)trim(rname)//": albedosnow = ",albedosnow
    1271              
     1271
    12721272     if (is_master) write(*,*)trim(rname)//": N2 ice albedo ?"
    12731273     albedon2ice=0.5       ! default value
     
    13311331       if (is_master) write(*,*)'New Cp from callfis is ',cpp,'J kg^-1 K^-1'
    13321332       if (is_master) write(*,*)'New Mg from callfis is ',mugaz,'amu'
    1333  
     1333
    13341334     endif ! of if (cpp_mugaz_mode == 1)
    13351335     call su_gases
     
    13821382  ! initialize variables and allocate arrays in radcommon_h
    13831383  call ini_radcommon_h(naerkind)
    1384    
     1384
    13851385  ! allocate "comsoil_h" arrays
    13861386  call ini_comsoil_h(ngrid)
    1387    
     1387
    13881388  END SUBROUTINE inifis
    13891389
  • trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90

    r3196 r3197  
    1919      use radinc_h, only : L_NSPECTI,L_NSPECTV,naerkind, corrkdir, banddir
    2020      use generic_cloud_common_h, only : epsi_generic, Psat_generic
    21       use thermcell_mod, only: init_thermcell_mod
    2221      use gases_h, only: gnom, gfrac
    2322      use radcommon_h, only: sigma, glat, grav, BWNV, WNOI, DWNI, DWNV, WNOV
  • trunk/LMDZ.PLUTO/libf/phypluto/turbdiff_mod.F90

    r3184 r3197  
    11module turbdiff_mod
    2      
     2
    33implicit none
    4      
     4
    55contains
    6      
     6
    77      subroutine turbdiff(ngrid,nlay,nq,          &
    8           ptimestep,pcapcal,                    &   
     8          ptimestep,pcapcal,                    &
    99          pplay,pplev,pzlay,pzlev,pz0,                 &
    1010          pu,pv,pt,ppopsk,pq,ptsrf,pemis,pqsurf,       &
     
    2424
    2525!==================================================================
    26 !     
     26!
    2727!     Purpose
    2828!     -------
    2929!     Turbulent diffusion (mixing) for pot. T, U, V and tracers
    30 !     
     30!
    3131!     Implicit scheme
    3232!     We start by adding to variables x the physical tendencies
     
    3434!
    3535!     x(t+1) =  x(t) + dt * (dx/dt)phys(t)  +  dt * (dx/dt)difv(t+1)
    36 !     
     36!
    3737!     Authors
    38 !     ------- 
     38!     -------
    3939!     F. Hourdin, F. Forget, R. Fournier (199X)
    4040!     R. Wordsworth, B. Charnay (2010)
     
    4343!               by accounting for dissipation of turbulent kinetic energy.
    4444!         - Accounting for lost mean flow kinetic energy should come soon.
    45 !     
     45!
    4646!==================================================================
    4747
     
    7575!     Tracers
    7676!     --------
    77       integer,intent(in) :: nq 
     77      integer,intent(in) :: nq
    7878      real,intent(in) :: pqsurf(ngrid,nq)
    79       real,intent(in) :: pq(ngrid,nlay,nq), pdqfi(ngrid,nlay,nq) 
    80       real,intent(out) :: pdqdif(ngrid,nlay,nq) 
    81       real,intent(out) :: pdqsdif(ngrid,nq) 
    82      
     79      real,intent(in) :: pq(ngrid,nlay,nq), pdqfi(ngrid,nlay,nq)
     80      real,intent(out) :: pdqdif(ngrid,nlay,nq)
     81      real,intent(out) :: pdqsdif(ngrid,nq)
     82
    8383!     local
    8484!     -----
     
    110110      LOGICAL,SAVE :: firstcall=.true.
    111111!$OMP THREADPRIVATE(firstcall)
    112      
     112
    113113!     Tracers
    114114!     -------
     
    130130      real cd0, roughratio
    131131
    132       real dqsdif_total(ngrid) 
    133       real zq0(ngrid) 
     132      real dqsdif_total(ngrid)
     133      real zq0(ngrid)
    134134
    135135
     
    199199!
    200200!     Source of turbulent kinetic energy at the surface
    201 !     ------------------------------------------------- 
     201!     -------------------------------------------------
    202202!     Formula is Cd_0 = (karman / log[1+z1/z0])^2
    203203
     
    210210       if(nosurf)then
    211211         zcdv_true(ig)=0.D+0 !JL12 disable atm/surface momentum flux
    212          zcdh_true(ig)=0.D+0 !JL12 disable sensible heat flux 
     212         zcdh_true(ig)=0.D+0 !JL12 disable sensible heat flux
    213213       endif
    214214      ENDDO
     
    221221
    222222!     Turbulent diffusion coefficients in the boundary layer
    223 !     ------------------------------------------------------ 
    224 
    225       call vdif_kc(ngrid,nlay,ptimestep,g,pzlev,pzlay,pu,pv,zh,zcdv_true,pq2,zkv,zkh) !JL12 why not call vdif_kc with updated winds and temperature 
    226      
     223!     ------------------------------------------------------
     224
     225      call vdif_kc(ngrid,nlay,ptimestep,g,pzlev,pzlay,pu,pv,zh,zcdv_true,pq2,zkv,zkh) !JL12 why not call vdif_kc with updated winds and temperature
     226
    227227!     Adding eddy mixing to mimic 3D general circulation in 1D
    228228!     R. Wordsworth & F. Forget (2010)
     
    246246!            do ig=1,ngrid
    247247!               zkh(ig,ilev) = max(kzz_eddy(ilev),zkh(ig,ilev))
    248 !               zkv(ig,ilev) = max(kzz_eddy(ilev),zkv(ig,ilev)) 
     248!               zkv(ig,ilev) = max(kzz_eddy(ilev),zkv(ig,ilev))
    249249!            end do
    250250
    251251            do ig=1,ngrid
    252252               zkh(ig,ilev) = max(kmixmin,zkh(ig,ilev))
    253                zkv(ig,ilev) = max(kmixmin,zkv(ig,ilev)) 
     253               zkv(ig,ilev) = max(kmixmin,zkv(ig,ilev))
    254254            end do
    255255         end do
     
    263263!JL12 calculate the flux coefficients (tables multiplied elements by elements)
    264264      zfluxv(1:ngrid,1:nlay)=zkv(1:ngrid,1:nlay)*zb0(1:ngrid,1:nlay)
    265      
     265
    266266!-----------------------------------------------------------------------
    267267!     4. Implicit inversion of u
     
    312312
    313313      DO ig=1,ngrid
    314          z1(ig)=1./(zmass(ig,nlay)+zfluxv(ig,nlay)) 
     314         z1(ig)=1./(zmass(ig,nlay)+zfluxv(ig,nlay))
    315315         zcv(ig,nlay)=zmass(ig,nlay)*zv(ig,nlay)*z1(ig)
    316316         zdv(ig,nlay)=zfluxv(ig,nlay)*z1(ig)
     
    412412         DO ig=1,ngrid
    413413            z1(ig)=pcapcal(ig)*ptsrf(ig)+cpp*zfluxt(ig,1)*zct(ig,1)*zovExner(ig,1) &
    414                 + pfluxsrf(ig)*ptimestep + zdplanck(ig)*ptsrf(ig) 
    415             z2(ig) = pcapcal(ig)+zdplanck(ig)+cpp*zfluxt(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1)) 
     414                + pfluxsrf(ig)*ptimestep + zdplanck(ig)*ptsrf(ig)
     415            z2(ig) = pcapcal(ig)+zdplanck(ig)+cpp*zfluxt(ig,1)*(1.-zovExner(ig,1)*zdt(ig,1))
    416416            ztsrf(ig) = z1(ig) / z2(ig)
    417417            pdtsrf(ig) = (ztsrf(ig) - ptsrf(ig))/ptimestep
    418418            zt(ig,1)   = zct(ig,1) + zdt(ig,1)*ztsrf(ig)
    419419         ENDDO
    420 ! JL12 note that the black body radiative flux emitted by the surface has been updated by the implicit scheme 
     420! JL12 note that the black body radiative flux emitted by the surface has been updated by the implicit scheme
    421421
    422422
     
    448448!     Implicit inversion of q
    449449!     -----------------------
    450          do iq=1,nq 
     450         do iq=1,nq
    451451
    452452            if (iq.ne.ivap) then
     
    456456                  zcq(ig,nlay)=zmass(ig,nlay)*zq(ig,nlay,iq)*z1(ig)
    457457                  zdq(ig,nlay)=zfluxq(ig,nlay)*z1(ig)
    458                ENDDO 
    459            
     458               ENDDO
     459
    460460               DO ilay=nlay-1,2,-1
    461461                  DO ig=1,ngrid
     
    466466               ENDDO
    467467
     468               do ig=1,ngrid
     469                  z1(ig)=1./(zmass(ig,1)+zfluxq(ig,2)*(1.-zdq(ig,2)))
     470                  zcq(ig,1)=(zmass(ig,1)*zq(ig,1,iq)+zfluxq(ig,2)*zcq(ig,2)+(-pdqsdif(ig,iq))*ptimestep)*z1(ig)
     471                       ! tracer flux from surface
     472                       ! currently pdqsdif always zero here,
     473                       ! so last line is superfluous
     474               enddo
     475
    468476!     Starting upward calculations for simple tracer mixing (e.g., dust)
    469477               do ig=1,ngrid
     
    483491!     and assuming an infinite source of water on the ground
    484492!     ------------------------------------------------------------------
    485        
     493
    486494      endif                     ! tracer
    487495
     
    498506         enddo
    499507      enddo
    500      
     508
    501509      DO ig=1,ngrid ! computing sensible heat flux (atm => surface)
    502510         sensibFlux(ig)=cpp*zfluxt(ig,1)/ptimestep*(zt(ig,1)*zovExner(ig,1)-ztsrf(ig))
     
    511519            enddo
    512520         enddo
    513       endif 
     521      endif
    514522   end subroutine turbdiff
    515      
     523
    516524end module turbdiff_mod
Note: See TracChangeset for help on using the changeset viewer.