Ignore:
Timestamp:
Feb 16, 2026, 3:47:40 PM (8 weeks ago)
Author:
debatzbr
Message:

Pluto PCM: Improvement of Ice Microphysics + some cleans.
Allows for nucleation on spherical, fractal, or both aerosol types.
Add coagulation of ice particles.
BBT

Location:
trunk/LMDZ.PLUTO/libf/phypluto
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.PLUTO/libf/phypluto/callcorrk.F90

    r3982 r4073  
    12191219
    12201220           ! OLR vs altitude: do it as a .txt file.
    1221          OLRz=.false.
     1221         OLRz=.true.
    12221222         if(OLRz)then
    12231223            print*,'saving IR vertical flux for OLRz...'
  • trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90

    r4040 r4073  
    2323      use aerosol_mod, only: i_haze, haze_prof
    2424      use surfdat_h, only: phisfi, zmea, zstd, zsig, zgam, zthe, &
    25                            dryness, qsurfyear, phisfibed
     25                           dryness
    2626      use comdiurn_h, only: coslat, sinlat, coslon, sinlon
    2727      use comsaison_h, only: mu0, fract, dist_star, declin, right_ascen
     
    2929      use geometry_mod, only: latitude, longitude, cell_area, &
    3030                          cell_area_for_lonlat_outputs
    31       use control_mod, only: iphysiq
    3231      USE comgeomfi_h, only: totarea, totarea_planet
    3332      USE tracer_h, only: noms, mmol, radius, rho_q, qext, &
     
    253252! ----------------------
    254253      integer,save :: day_ini                                      ! Initial date of the run (sol since Ls=0).
    255       real,save    :: time_phys                                    ! Initial time of day of the run
    256254      integer,save :: icount                                       ! Counter of calls to physiq during the run.
    257255!$OMP THREADPRIVATE(day_ini,icount)
    258256
    259       ! Pluto specific
     257      !Pluto specific
    260258      REAL,save  :: acond,bcond
    261259      REAL,save  :: tcond1p4Pa
     
    264262! Local variables :
    265263! -----------------
    266       ! Variables for the paleoclimate mode
    267       REAL qsurfpal(ngrid,nq)        ! qsurf after a paleoclimate step : for physdem1 and restartfi
    268       REAL phisfipal(ngrid)          ! geopotential after a paleoclimate step : for physdem1 and restartfi
     264      !     Tendencies for the paleoclimate mode
     265      REAL qsurfyear(ngrid,nq)  ! kg.m-2 averaged mass of ice lost/gained in the last Pluto year of the run
     266      REAL phisfinew(ngrid)       ! geopotential of the bedrock (= phisfi-qsurf/1000*g)
     267      REAL qsurfpal(ngrid,nq)           ! qsurf after a paleoclimate step : for physdem1 and restartfi
     268      REAL phisfipal(ngrid)               ! geopotential after a paleoclimate step : for physdem1 and restartfi
    269269      REAL oblipal                   ! change of obliquity
    270270      REAL peri_daypal               ! new periday
     
    274274      REAL pdaypal                   ! new pday = day_ini + step
    275275      REAL zdt_tot                   ! time range corresponding to the flux of qsurfyear
    276       REAL massacc(nq)               ! accumulated mass
    277       REAL masslost(nq)              ! accumulated mass
    278       REAL qsurf1(ngrid,nq)          ! saving qsurf to calculate flux over long timescales kg.m-2
    279       REAL flusurf(ngrid,nq)         ! flux cond/sub kg.m-2.s-1
    280       REAL flusurfold(ngrid,nq)      ! old flux cond/sub kg.m-2.s-1
    281       REAL globaveice(nq)            ! globalaverage 2D ice
    282       REAL globavenewice(nq)         ! globalaverage 2D ice
     276      REAL massacc(nq)             ! accumulated mass
     277      REAL masslost(nq)            ! accumulated mass
     278
     279      REAL globave                   ! globalaverage 2D ps
     280      REAL globaveice(nq)          ! globalaverage 2D ice
     281      REAL globavenewice(nq)          ! globalaverage 2D ice
     282      INTEGER lecttsoil     ! lecture of tsoil from proftsoil
     283      REAL qsurf1(ngrid,nq)      ! saving qsurf to calculate flux over long timescales kg.m-2
     284      REAL flusurf(ngrid,nq)     ! flux cond/sub kg.m-2.s-1
     285      REAL flusurfold(ngrid,nq)  ! old flux cond/sub kg.m-2.s-1
     286      REAL zplev(ngrid,nlayer+1),zplay(ngrid,nlayer)
     287      REAL vecnull(ngrid,nq)      ! null vector used to check conservation of tracer
    283288
    284289      REAL,SAVE :: ptime0    ! store the first time
    285290      REAL dstep
    286291      REAL,SAVE :: glastep=20   ! step in pluto day to spread glacier
    287 
    288       ! Other variables
    289       REAL globave                   ! globalaverage 2D ps
    290       INTEGER lecttsoil              ! lecture of tsoil from proftsoil
    291       REAL zplev(ngrid,nlayer+1),zplay(ngrid,nlayer) ! pressure density levels
    292       REAL vecnull(ngrid,nq)         ! null vector used to check conservation of tracer
    293292
    294293!     Aerosol (dust or ice) extinction optical depth  at reference wavelength
     
    342341      real zdqsed(ngrid,nlayer,nq)    ! Callsedim routine.
    343342      real zdqmr(ngrid,nlayer,nq)     ! Mass_redistribution routine.
     343      REAL,allocatable,save :: zdqchim(:,:,:) ! Calchim_asis routine
     344      REAL,allocatable,save :: zdqschim(:,:)  ! Calchim_asis routine
     345!$OMP THREADPRIVATE(zdqchim,zdqschim)
    344346
    345347      !! PLUTO variables
     
    436438      real reff(ngrid,nlayer)                       ! Effective dust radius (used if doubleq=T).
    437439      real vmr(ngrid,nlayer)                        ! volume mixing ratio
     440      real time_phys
    438441
    439442      real ISR,ASR,OLR,GND,DYN,GSR,Ts1,Ts2,Ts3,TsS ! for Diagnostic.
     
    651654         endif
    652655
    653 !        Initialize paleo variables
    654 !        ~~~~~~~~~~~~~~~~~~~~~~~~~~
    655          if (paleo) then
    656            IF (.not. ALLOCATED(qsurfyear)) ALLOCATE(qsurfyear(ngrid,nq))
    657            IF (.not. ALLOCATED(phisfibed)) ALLOCATE(phisfibed(ngrid))
    658            write(*,*) 'Paleo time tpal = ',tpal
    659            qsurfyear(:,:)=0.
    660            DO ig=1,ngrid
    661              phisfibed(ig)=phisfi(ig)-qsurf(ig,igcm_n2)*g/rho_q(igcm_n2) ! topo of bedrock below the ice
    662            ENDDO
    663          endif
    664 
    665656!        Initialize correlated-k.
    666657!        ~~~~~~~~~~~~~~~~~~~~~~~~
     
    794785      enddo
    795786
    796       !Altitude of top interface (nlayer+1), using the thickness of the level below the top one. LT22
     787      !Altitude of top interface (nlayer+1), using the thicknesss of the level below the top one. LT22
    797788
    798789      zzlev(1:ngrid,nlayer+1) = 2*zzlev(1:ngrid,nlayer)-zzlev(1:ngrid,nlayer-1)
     
    19311922           IF (paleo) then
    19321923             call spreadglacier_paleo(ngrid,nq,qsurf, &
    1933                                     phisfibed,dstep,tsurf)
     1924                                    phisfinew,dstep,tsurf)
    19341925           else
    19351926             call spreadglacier_simple(ngrid,nq,qsurf,dstep)
     
    22332224
    22342225            ! update new geopotential depending on the ice reservoir
    2235             phisfipal(:)=phisfibed(:)+qsurfpal(:,igcm_n2)*g/rho_q(igcm_n2)
     2226            phisfipal(:)=phisfinew(:)+qsurfpal(:,igcm_n2)*g/1000.
    22362227            !phisfipal(ig)=phisfi(ig)
    22372228
     
    22632254            ! create restartfi
    22642255            if (ngrid.ne.1) then
    2265                ztime_restart = ptime + ptimestep/(iphysiq*daysec)
    22662256               call physdem0pal("restartfi.nc",longitude,latitude,nsoilmx,ngrid,nlayer,nq, &
    2267                          ptimestep,pdaypal,ztime_restart,cell_area,          &
     2257                         ptimestep,pdaypal,time_phys,cell_area,          &
    22682258                         albedo_bareground,zmea,zstd,zsig,zgam,zthe,     &
    22692259                         oblipal,eccpal,tpalnew,adjustnew,phisfipal,peri_daypal) 
     2260 
     2261                 !call physdem1pal("restartfi.nc",long,lati,nsoilmx,nq, &
     2262               !      ptimestep,pdaypal, &
     2263               !      ztime_restart,tsurf,tsoil,emis,q2,qsurfpal, &
     2264               !      cell_area,albedodat,therm_inertia,zmea,zstd,zsig, &
     2265               !      zgam,zthe,oblipal,eccpal,tpalnew,adjustnew,phisfipal,  &
     2266               !      peri_daypal)
    22702267            endif
     2268         else ! 'paleo'
     2269
    22712270
    22722271         endif ! end of 'paleo'
     
    22872286!              in 'restart'. Between now and the writing of 'restart',
    22882287!              there will have been the itau=itau+1 instruction and
    2289 !              a reset of 'time' (lastcall = .true. when itau+1= itaufin)
     2288!              a reset of 'time' (lastacll = .true. when itau+1= itaufin)
    22902289!              thus we store for time=time+dtvr
    22912290
     
    23062305         endif ! ngrid
    23072306      endif ! is_omp_master
    2308       if (lastcall.and.paleo) then
    2309             call physdem1("restartfi.nc",nsoilmx,ngrid,nlayer,nq, &
    2310                         ptimestep,ztime_restart,tsurf,                &
    2311                         tsoil,therm_inertia,emis,albedo,q2,qsurfpal,n2frac)
    2312             if (is_master) write(*,*)'PHYSIQ: writing restartfi at time =',ztime_restart
    2313       endif
     2307
    23142308
    23152309
     
    24262420      ! Diagnostics of optical thickness (dtau = dtau_gas + dtau_rayaer + dtau_cont).
    24272421      ! Warning this is exp(-dtau), I let you postproc with -log to have tau and k itself
    2428       !! VI
    2429       !call write_output('dtauv_4656nm','Layer optical thickness attenuation in VI band','',int_dtauv(:,nlayer:1:-1,2))  ! 4.656 um (28 VIS Bands)
    2430       !call write_output('dtauv_1181nm','Layer optical thickness attenuation in VI band','',int_dtauv(:,nlayer:1:-1,21)) ! 1.181 um (28 VIS Bands)
    2431       !call write_output('dtauv_700nm','Layer optical thickness attenuation in VI band','',int_dtauv(:,nlayer:1:-1,24))  ! 0.700 um (28 VIS Bands)
    2432       !call write_output('dtauv_185nm','Layer optical thickness attenuation in VI band','',int_dtauv(:,nlayer:1:-1,27))  ! 0.185 um (28 VIS Bands)
    2433       !call write_output('dtauv_118nm','Layer optical thickness attenuation in VI band','',int_dtauv(:,nlayer:1:-1,28))  ! 0.118 um (28 VIS Bands)
    2434       !! IR
    2435       !call write_output('dtaui_81250nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,2)) ! 81.250 um (17 IR Bands)
    2436       !call write_output('dtaui_3859nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,16)) ! 3.859 um (17 IR Bands)
    2437      
    2438       !call write_output('dtaui_25250nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,4)) ! 25.250 um (25 IR Bands)
    2439       !call write_output('dtaui_20800nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,6)) ! 20.800 um (25 IR Bands)
    2440       !call write_output('dtaui_18000nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,8)) ! 18.000 um (25 IR Bands)
    2441       !call write_output('dtaui_15050nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,10)) ! 15.050 um (25 IR Bands)
    2442      
     2422      ! VI diagnostics for ALICE (/!\ for 28+3 VI bands)
     2423      call write_output('dtauv_185nm','Layer optical thickness attenuation in VI band','',int_dtauv(:,nlayer:1:-1,31))  ! 0.185 um
     2424      ! IR diagnostics for JWST (/!\ for 20+6 IR bands)
     2425      call write_output('dtaui_25250nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,3)) ! 25.250 um
     2426      call write_output('dtaui_20800nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,5)) ! 20.800 um
     2427      call write_output('dtaui_18000nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,7)) ! 18.000 um
     2428      call write_output('dtaui_15050nm','Layer optical thickness attenuation in IR band','',int_dtaui(:,nlayer:1:-1,9)) ! 15.050 um
    24432429      !if (callmufi) then
    2444          ! Aerosol optical thickness
    2445          !call write_output('dtauv_aers_4656nm','Layer sph. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,2,1))
    2446          !call write_output('dtauv_aerf_4656nm','Layer fra. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,2,2))
    2447          !call write_output('dtauv_aers_1181nm','Layer sph. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,21,1))
    2448          !call write_output('dtauv_aerf_1181nm','Layer fra. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,21,2))
    2449          !call write_output('dtauv_aers_700nm','Layer sph. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,24,1))
    2450          !call write_output('dtauv_aerf_700nm','Layer fra. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,24,2))
    2451          !call write_output('dtauv_aers_185nm','Layer sph. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,27,1))
    2452          !call write_output('dtauv_aerf_185nm','Layer fra. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,27,2))
    2453          !call write_output('dtauv_aers_118nm','Layer sph. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,28,1))
    2454          !call write_output('dtauv_aerf_118nm','Layer fra. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,28,2))
    2455          !! Aerosols single scattering albedo
    2456          !call write_output('wbarv_aers_4656nm','Layer sph. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,2,1))
    2457          !call write_output('wbarv_aerf_4656nm','Layer fra. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,2,2))
    2458          !call write_output('wbarv_aers_1181nm','Layer sph. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,21,1))
    2459          !call write_output('wbarv_aerf_1181nm','Layer fra. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,21,2))
    2460          !call write_output('wbarv_aers_700nm','Layer sph. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,24,1))
    2461          !call write_output('wbarv_aerf_700nm','Layer fra. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,24,2))
    2462          !call write_output('wbarv_aers_185nm','Layer sph. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,27,1))
    2463          !call write_output('wbarv_aerf_185nm','Layer fra. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,27,2))
    2464          !call write_output('wbarv_aers_118nm','Layer sph. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,28,1))
    2465          !call write_output('wbarv_aerf_118nm','Layer fra. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,28,2))
     2430      !   ! Aerosol optical thickness
     2431      !   call write_output('dtauv_aers_185nm','Layer sph. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,31,1))
     2432      !   call write_output('dtauv_aerf_185nm','Layer fra. aer. optical thickness attenuation in VI band','',int_dtauv_aer(:,nlayer:1:-1,31,2))
     2433      !   ! Aerosols single scattering albedo
     2434      !   call write_output('wbarv_aers_185nm','Layer sph. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,31,1))
     2435      !   call write_output('wbarv_aerf_185nm','Layer fra. aer. single scattering albedo in VI band','',int_wbarv_aer(:,nlayer:1:-1,31,2))
    24662436      !endif ! end callmufi
    24672437
Note: See TracChangeset for help on using the changeset viewer.