Changeset 3237 for trunk/LMDZ.PLUTO/libf


Ignore:
Timestamp:
Feb 27, 2024, 12:04:22 PM (10 months ago)
Author:
afalco
Message:

Pluto PCM:
Import methane and ch4 clouds from pluto.old
AF

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

Legend:

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

    r3195 r3237  
    3737      logical,save :: sedimentation
    3838      logical,save :: generic_condensation
    39 !$OMP THREADPRIVATE(varactive,varfixed,sedimentation,generic_condensation,generic_rain)
     39!$OMP THREADPRIVATE(varactive,varfixed,sedimentation,generic_condensation)
    4040      logical,save :: aeron2, aeroh2o, aeroh2so4, aeroback2lay
    4141!$OMP THREADPRIVATE(aeron2, aeroh2o, aeroh2so4, aeroback2lay)
     
    191191      real,save    :: rad_haze
    192192!$OMP THREADPRIVATE(rad_haze)
     193      logical,save :: UseVdifcPlutold
     194!$OMP THREADPRIVATE(UseVdifcPlutold)
    193195
    194196      logical,save :: global1d
  • trunk/LMDZ.PLUTO/libf/phypluto/inifis_mod.F90

    r3228 r3237  
    183183     if (is_master) write(*,*) trim(rname)//": fast = ",fast
    184184
     185     if (is_master) write(*,*) trim(rname)//"Run with Triton orbit ?"
     186     triton=.false. ! default value
     187     call getin_p("triton",triton)
     188     if (is_master) write(*,*) trim(rname)//" triton = ",triton
     189     convergeps=.false. ! default value
     190     call getin_p("convergeps",convergeps)
     191     if (is_master) write(*,*) trim(rname)//" convergeps = ",convergeps
     192 
     193     if (is_master) write(*,*) trim(rname)//"KBO runs (eris, makemake) ?"
     194     kbo=.false. ! default value
     195     call getin_p("kbo",kbo)
     196     if (is_master) write(*,*) trim(rname)//" kbo = ",kbo
     197 
     198     if (is_master) write(*,*) trim(rname)//"Specific paleo run ?"
     199     paleo=.false. ! default value
     200     call getin_p("paleo",paleo)
     201     if (is_master) write(*,*) trim(rname)//" paleo = ",paleo
     202 
     203     if (is_master) write(*,*) trim(rname)//"paleoclimate step (Earth years) "
     204     paleoyears=10000. ! default value
     205     call getin_p("paleoyears",paleoyears)
     206     if (is_master) write(*,*) trim(rname)//" paleoyears = ",paleoyears
     207 
    185208     if (is_master) write(*,*) trim(rname)//&
    186209       ": No seasonal cycle: initial day to lock the run during restart"
     
    279302     call getin_p("UseTurbDiff",UseTurbDiff)
    280303     if (is_master) write(*,*) trim(rname)//": UseTurbDiff = ",UseTurbDiff
     304
     305     if (is_master) write(*,*) trim(rname)//": use vdifc from old Pluto ?"
     306     UseVdifcPlutold=.true. ! default value
     307     call getin_p("UseVdifcPlutold",UseVdifcPlutold)
     308     if (is_master) write(*,*) trim(rname)//": UseVdifcPlutold = ",UseVdifcPlutold
    281309
    282310     if (is_master) write(*,*) trim(rname)//": call convective adjustment ?"
  • trunk/LMDZ.PLUTO/libf/phypluto/initracer.F90

    r3195 r3237  
    421421      lw_ch4=586700.
    422422      lw_n2=2.5e5
     423      write(*,*) "lw_n2 = ", lw_n2
    423424
    424425      if (haze) then
  • trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90

    r3232 r3237  
    3232      USE comgeomfi_h, only: totarea, totarea_planet
    3333      USE tracer_h, only: noms, mmol, radius, rho_q, qext, &
    34                           igcm_n2,&
     34                          igcm_n2,igcm_ch4_gas,igcm_ch4_ice,igcm_haze,&
     35                          igcm_co_gas,igcm_co_ice,igcm_prec_haze,lw_n2,&
    3536                          alpha_lift, alpha_devil, qextrhor, &
    3637                          nesp, is_chim, is_condensable,constants_epsi_generic
     
    4546      use comcstfi_mod, only: pi, g, rcp, r, rad, mugaz, cpp
    4647      use time_phylmdz_mod, only: daysec
    47       use callkeys_mod, only: fast,albedo_spectral_mode, calladj, calldifv, &
     48      use callkeys_mod, only: albedo_spectral_mode, calladj, calldifv, &
    4849                              callrad, callsoil, nosurf, &
    4950                              aerohaze, corrk, diagdtau,&
     
    5152                              icetstep, intheat, iradia, kastprof, &
    5253                              lwrite, mass_redistrib, meanOLR, &
     54                              fast,fasthaze,haze,metcloud,monoxcloud,&
    5355                              n2cond,nearn2cond, noseason_day, &
     56                              fast, carbox, methane, UseVdifcPlutold, &
     57                              aerohaze, haze_proffix, triton, paleo, &
    5458                              season, sedimentation,generic_condensation, &
    55                               aerohaze, haze_proffix, &
    5659                              specOLR, &
    5760                              startphy_file, testradtimes, &
     
    6467      use callcorrk_mod, only: callcorrk
    6568      use vdifc_mod, only: vdifc
     69      use vdifc_pluto_mod, only: vdifc_pluto
    6670      use turbdiff_mod, only: turbdiff
    6771      use turb_mod, only : q2,sensibFlux,turb_resolved
     
    115119!         II.a Option 1 : Call correlated-k radiative transfer scheme.
    116120!         II.b Option 2 : Call Newtonian cooling scheme.
    117 !         II.c Option 3 : Atmosphere has no radiative effect.
     121!         II.! Option 3 : Atmosphere has no radiative effect.
    118122!
    119123!      III. Vertical diffusion (turbulent mixing) :
     
    250254!$OMP THREADPRIVATE(day_ini,icount)
    251255
     256      REAL,save  :: acond,bcond
     257      REAL, save :: tcond1p4Pa
     258      DATA tcond1p4Pa/38/
     259
     260
    252261! Local variables :
    253262! -----------------
     
    270279      real zzlay(ngrid,nlayer)       ! Altitude at the middle of the atmospheric layers.
    271280      real zzlev(ngrid,nlayer+1)     ! Altitude at the atmospheric layer boundaries.
     281
    272282
    273283! VARIABLES for the thermal plume model (AF24: deleted)
     
    351361      REAL flym_sol(ngrid)      ! Incident Solar flux Lyman alpha ph.m-2.s-1
    352362      REAL flym_ipm(ngrid)      ! Incident IPM (Interplanetary) flux Lyman alpha ph.m-2.s-1
     363      REAL zfluxuv                     ! Lyman alpha flux at 1AU
    353364
    354365
     
    376387      real zflubid(ngrid)
    377388      real zplanck(ngrid),zpopsk(ngrid,nlayer)
     389      REAL zdum1(ngrid,nlayer)
     390      REAL zdum2(ngrid,nlayer)
    378391      real ztim1,ztim2,ztim3, z1,z2
    379392      real ztime_fin
     
    721734      end if
    722735
    723       call orbite(zls,dist_star,declin,right_ascen)
     736
     737!     Get Lyman alpha flux at specific Ls
     738      if (haze) then
     739         call lymalpha(zls,zfluxuv)
     740         print*, 'Haze lyman-alpha zls,zfluxuv=',zls,zfluxuv
     741      end if
     742
     743
     744      IF (triton) then
     745         CALL orbitetriton(zls,zday,dist_star,declin)
     746      ELSE
     747         call orbite(zls,dist_star,declin,right_ascen)
     748      ENDIF
     749
    724750
    725751      if (diurnal) then
     
    768794     ! w = F / (rho*area) and rho = P/(r*T)
    769795     ! But first linearly interpolate mass flux to mid-layers
    770       if (.not.fast) then 
     796      if (.not.fast) then
    771797       do l=1,nlayer-1
    772798         pw(1:ngrid,l)=0.5*(flxw(1:ngrid,l)+flxw(1:ngrid,l+1))
     
    810836      endif
    811837
     838      ! AF24: TODO insert surfprop for pluto & triton around here
     839
    812840      if (callrad) then
    813841         if( mod(icount-1,iradia).eq.0.or.lastcall) then
     
    910938            else
    911939! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    912 ! II.c Atmosphere has no radiative effect
     940! II.! Atmosphere has no radiative effect
    913941! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    914942               fluxtop_dn(1:ngrid)  = fract(1:ngrid)*mu0(1:ngrid)*Fat1AU/dist_star**2
     
    9881016                          taux,tauy)
    9891017
    990          else
     1018         else  if (UseVdifcPlutold) then
     1019            zflubid(1:ngrid)=fluxrad(1:ngrid)+fluxgrd(1:ngrid)
     1020
     1021            ! Calling vdif (Martian version WITH N2 condensation)
     1022            CALL vdifc_pluto(ngrid,nlayer,nq,zpopsk,       &
     1023                    ptimestep,capcal,lwrite,         &
     1024                    pplay,pplev,zzlay,zzlev,z0,      &
     1025                    pu,pv,zh,pq,pt,tsurf,emis,qsurf, &
     1026                    zdum1,zdum2,zdh,pdq,pdt,zflubid, &
     1027                    zdudif,zdvdif,zdhdif,zdtsdif,q2, &
     1028                    zdqdif,zdqsdif,qsat_ch4,qsat_ch4_l1) !,zq1temp_ch4,qsat_ch4)
     1029
     1030            pdv(1:ngrid,1:nlayer)=pdv(1:ngrid,1:nlayer)+zdvdif(1:ngrid,1:nlayer)
     1031            pdu(1:ngrid,1:nlayer)=pdu(1:ngrid,1:nlayer)+zdudif(1:ngrid,1:nlayer)
     1032            pdt(1:ngrid,1:nlayer)=pdt(1:ngrid,1:nlayer)+zdhdif(1:ngrid,1:nlayer)*zpopsk(1:ngrid,1:nlayer)
     1033
     1034            zdtdif(1:ngrid,1:nlayer)=zdhdif(1:ngrid,1:nlayer)*zpopsk(1:ngrid,1:nlayer) ! for diagnostic only
     1035            zdtsurf(1:ngrid)=zdtsurf(1:ngrid)+zdtsdif(1:ngrid)
     1036
     1037            bcond=1./tcond1p4Pa
     1038            acond=r/lw_n2
     1039
     1040            if (tracer) then
     1041               pdq(1:ngrid,1:nlayer,1:nq)=pdq(1:ngrid,1:nlayer,1:nq)+ zdqdif(1:ngrid,1:nlayer,1:nq)
     1042               dqsurf(1:ngrid,1:nq)=dqsurf(1:ngrid,1:nq) + zdqsdif(1:ngrid,1:nq)
     1043            end if ! of if (tracer)
     1044
     1045            !------------------------------------------------------------------
     1046            ! test methane conservation
     1047            !         if(methane)then
     1048            !           call testconserv(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
     1049            !     &          ptimestep,pplev,zdqdif,zdqsdif,'CH4',' vdifc ')
     1050            !         endif  ! methane
     1051            !------------------------------------------------------------------
     1052            ! test CO conservation
     1053            !         if(carbox)then
     1054            !           call testconserv(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
     1055            !     &          ptimestep,pplev,zdqdif,zdqsdif,'CO ',' vdifc ')
     1056            !         endif  ! carbox
     1057            !------------------------------------------------------------------
     1058
     1059         else ! if (UseVdifcPlutold)
    9911060
    9921061            zdh(1:ngrid,1:nlayer)=pdt(1:ngrid,1:nlayer)/zpopsk(1:ngrid,1:nlayer)
     
    11671236      if (tracer) then
    11681237
    1169   ! ---------------------
    1170   !   VI.1. Water and ice !AF24: removed
    1171   ! ---------------------
    1172   ! -------------------------
    1173   !   VI.2. Photochemistry !AF24: removed
    1174   ! -------------------------
     1238
     1239
     1240!   7a. Methane, CO, and ice
     1241!      ---------------------------------------
     1242!      Methane ice condensation in the atmosphere
     1243!      ----------------------------------------
     1244         zdqch4cloud(:,:,:)=0.
     1245         if ((methane).and.(metcloud).and.(.not.fast)) THEN
     1246            call ch4cloud(ngrid,nlayer,naerkind,ptimestep,  &
     1247                      pplev,pplay,pdpsrf,zzlev,zzlay, pt,pdt,  &
     1248                      pq,pdq,zdqch4cloud,zdqsch4cloud,zdtch4cloud,   &
     1249                      nq,rice_ch4)
     1250
     1251            DO l=1,nlayer
     1252               DO ig=1,ngrid
     1253                  pdq(ig,l,igcm_ch4_gas)=pdq(ig,l,igcm_ch4_gas)+  &
     1254                                         zdqch4cloud(ig,l,igcm_ch4_gas)
     1255                  pdq(ig,l,igcm_ch4_ice)=pdq(ig,l,igcm_ch4_ice)+  &
     1256                                         zdqch4cloud(ig,l,igcm_ch4_ice)
     1257               ENDDO
     1258            ENDDO
     1259
     1260            ! Increment methane ice surface tracer tendency
     1261            DO ig=1,ngrid
     1262               dqsurf(ig,igcm_ch4_ice)=dqsurf(ig,igcm_ch4_ice)+   &
     1263                                     zdqsch4cloud(ig,igcm_ch4_ice)
     1264            ENDDO
     1265
     1266            ! update temperature tendancy
     1267            DO ig=1,ngrid
     1268               DO l=1,nlayer
     1269               pdt(ig,l)=pdt(ig,l)+zdtch4cloud(ig,l)
     1270               ENDDO
     1271            ENDDO
     1272         else
     1273         rice_ch4(:,:)=0 ! initialization needed for callsedim
     1274         end if
     1275
     1276!      ---------------------------------------
     1277!      CO ice condensation in the atmosphere
     1278!      ----------------------------------------
     1279         zdqcocloud(:,:,:)=0.
     1280         IF ((carbox).and.(monoxcloud).and.(.not.fast)) THEN
     1281            call cocloud(ngrid,nlayer,naerkind,ptimestep,   &
     1282                      pplev,pplay,pdpsrf,zzlev,zzlay, pt,pdt,  &
     1283                      pq,pdq,zdqcocloud,zdqscocloud,zdtcocloud,   &
     1284                      nq,rice_co,qsurf(1,igcm_n2),dqsurf(1,igcm_n2))
     1285
     1286            DO l=1,nlayer
     1287               DO ig=1,ngrid
     1288                  pdq(ig,l,igcm_co_gas)=pdq(ig,l,igcm_co_gas)+ &
     1289                                         zdqcocloud(ig,l,igcm_co_gas)
     1290                  pdq(ig,l,igcm_co_ice)=pdq(ig,l,igcm_co_ice)+ &
     1291                                         zdqcocloud(ig,l,igcm_co_ice)
     1292               ENDDO
     1293            ENDDO
     1294
     1295            ! Increment CO ice surface tracer tendency
     1296            DO ig=1,ngrid
     1297            dqsurf(ig,igcm_co_ice)=dqsurf(ig,igcm_co_ice)+  &
     1298                                     zdqscocloud(ig,igcm_co_ice)
     1299            ENDDO
     1300
     1301            ! update temperature tendancy
     1302            DO ig=1,ngrid
     1303               DO l=1,nlayer
     1304               pdt(ig,l)=pdt(ig,l)+zdtcocloud(ig,l)
     1305               ENDDO
     1306            ENDDO
     1307         ELSE
     1308         rice_co(:,:)=0 ! initialization needed for callsedim
     1309         END IF  ! of IF (carbox)
     1310
     1311!------------------------------------------------------------------
     1312! test methane conservation
     1313!         if(methane)then
     1314!           call testconserv(ngrid,nlayer,nq,igcm_ch4_gas,igcm_ch4_ice,
     1315!     &         ptimestep,pplev,zdqch4cloud,zdqsch4cloud,'CH4','ch4clou')
     1316!         endif  ! methane
     1317!------------------------------------------------------------------
     1318! test CO conservation
     1319!         if(carbox)then
     1320!           call testconserv(ngrid,nlayer,nq,igcm_co_gas,igcm_co_ice,
     1321!     &          ptimestep,pplev,zdqcocloud,zdqscocloud,'CO ','cocloud')
     1322!         endif  ! carbox
     1323!------------------------------------------------------------------
     1324
     1325!   7b. Haze particle production
     1326!     -------------------
     1327      IF (haze) THEN
     1328
     1329         zdqphot_prec(:,:)=0.
     1330         zdqphot_ch4(:,:)=0.
     1331         ! Forcing to a fixed haze profile if haze_proffix
     1332         if (haze_proffix.and.i_haze.gt.0.) then
     1333         call haze_prof(ngrid,nlayer,zzlay,pplay,pt,  &
     1334                                  reffrad,profmmr)
     1335         zdqhaze(:,:,i_haze)=(profmmr(:,:)-pq(:,:,igcm_haze))  &
     1336                                                  /ptimestep
     1337         else
     1338         call hazecloud(ngrid,nlayer,nq,ptimestep, &
     1339            pplay,pplev,pq,pdq,dist_star,mu0,zfluxuv,zdqhaze,   &
     1340            zdqphot_prec,zdqphot_ch4,zdqconv_prec,declin)
     1341         endif
     1342
     1343         DO iq=1, nq ! should be updated
     1344            DO l=1,nlayer
     1345            DO ig=1,ngrid
     1346                  pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqhaze(ig,l,iq)
     1347            ENDDO
     1348            ENDDO
     1349         ENDDO
     1350
     1351      ENDIF
     1352
     1353      IF (fast.and.fasthaze) THEN
     1354      call prodhaze(ngrid,nlayer,nq,ptimestep,pplev,pq,pdq,dist_star, &
     1355                mu0,declin,zdqprodhaze,zdqsprodhaze,gradflux,fluxbot,   &
     1356                fluxlym_sol_bot,fluxlym_ipm_bot,flym_sol,flym_ipm)
     1357
     1358      DO ig=1,ngrid
     1359         pdq(ig,1,igcm_ch4_gas)=pdq(ig,1,igcm_ch4_gas)+  &
     1360                                       zdqprodhaze(ig,igcm_ch4_gas)
     1361         pdq(ig,1,igcm_prec_haze)=pdq(ig,1,igcm_prec_haze)+ &
     1362                                     zdqprodhaze(ig,igcm_prec_haze)
     1363         pdq(ig,1,igcm_haze)=abs(pdq(ig,1,igcm_haze)+ &
     1364                                     zdqprodhaze(ig,igcm_haze))
     1365         qsurf(ig,igcm_haze)= qsurf(ig,igcm_haze)+ &
     1366                                         zdqsprodhaze(ig)*ptimestep
     1367      ENDDO
     1368
     1369      ENDIF
     1370
     1371
     1372
    11751373  ! -------------------------
    11761374  !   VI.3. Aerosol particles
     
    14761674         enddo
    14771675
    1478          if (aerohaze) then
    1479             ! Generalised for arbitrary aerosols now. By LK
    1480          reffcol(1:ngrid,1:naerkind)=0.0
    1481             ! call n2_reffrad(ngrid,nlayer,nq,zq,reffrad(1,1,iaero_haze))
    1482          if (haze_proffix.and.i_haze.gt.0.) then
    1483                call haze_prof(ngrid,nlayer,zzlay,pplay,pt, &
    1484                                         reffrad,profmmr)
    1485                zdqhaze(:,:,i_haze)=(profmmr(:,:)-pq(:,:,igcm_n2)) & ! AF: TODO: replace by igcm_haze?
    1486                                                         /ptimestep
    1487               else
    1488                !! AF: TODO import from pluto.old?
    1489                ! call hazecloud(ngrid,nlayer,nq,ptimestep,&
    1490                !    pplay,pplev,pq,pdq,dist_sol,mu0,zfluxuv,zdqhaze,&
    1491                !    zdqphot_prec,zdqphot_ch4,zdqconv_prec,declin)
    1492               endif
    1493 
    1494          DO iq=1, nq ! should be updated
    1495             DO l=1,nlayer
    1496               DO ig=1,ngrid
    1497                    pdq(ig,l,iq)=pdq(ig,l,iq)+ zdqhaze(ig,l,iq)
    1498               ENDDO
    1499             ENDDO
    1500          ENDDO
    1501          endif ! end of aerohaze
    15021676      endif ! end of 'tracer'
    15031677
  • trunk/LMDZ.PLUTO/libf/phypluto/tracer_h.F90

    r3195 r3237  
    8787       integer,save :: igcm_eddy5e8
    8888
    89 !$OMP THREADPRIVATE(igcm_co_gas,igcm_n2,igcm_ar,igcm_ch4_gas,igcm_ar_n2,&igcm_ch4_ice,igcm_co_ice,igcm_prec_haze,igcm_haze,igcm_haze10,igcm_haze30,igcm_haze50,igcm_haze100,igcm_eddy1e6,igcm_eddy1e7,igcm_eddy5e7,igcm_eddy1e8,igcm_eddy5e8)
     89!$OMP THREADPRIVATE(igcm_co_gas,igcm_n2,igcm_ar,igcm_ch4_gas,igcm_ar_n2,igcm_ch4_ice,igcm_co_ice,igcm_prec_haze,igcm_haze,igcm_haze10,igcm_haze30,igcm_haze50,igcm_haze100,igcm_eddy1e6,igcm_eddy1e7,igcm_eddy5e7,igcm_eddy1e8,igcm_eddy5e8)
    9090
    9191       end module tracer_h
Note: See TracChangeset for help on using the changeset viewer.