Changeset 833 for trunk/LMDZ.MARS/libf


Ignore:
Timestamp:
Nov 8, 2012, 7:03:03 PM (12 years ago)
Author:
jbmadeleine
Message:

Mars GCM:

Implemented the thermal inertia feedback:

  • Added a flag in callphys.def called tifeedback, set to false by default;
  • Changed physiq.F to call soil.F with a new thermal inertia if tifeedback = true;
  • Added a routine called soil_tifeedback.F that computes the new thermal inertia of the subsurface when ice is deposited;

    Modified files: soil.F, physiq.F, inifis.F, callkeys.h
    Added files: soil_tifeedback.F

Location:
trunk/LMDZ.MARS/libf/phymars
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/callkeys.h

    r705 r833  
    1212     &   ,callg2d,linear,rayleigh,tracer,active,doubleq,submicron       &
    1313     &   ,lifting,callddevil,scavenging,sedimentation,activice,water    &
    14      &   ,microphys,caps,photochem,calltherm,outptherm,callrichsl       &
    15      &   ,callslope,tituscap
     14     &   ,tifeedback,microphys,caps,photochem,calltherm,outptherm       &
     15     &   ,callrichsl,callslope,tituscap
    1616     
    1717      COMMON/callkeys_i/iradia,iaervar,iddist,ilwd,ilwb,ilwn,ncouche    &
     
    5454      integer dustbin
    5555      logical active,doubleq,submicron,lifting,callddevil,scavenging
    56       logical sedimentation,activice,water,microphys,caps
     56      logical sedimentation
     57      logical water,activice,tifeedback,microphys,caps
    5758      logical photochem
    5859      integer nltemodel
  • trunk/LMDZ.MARS/libf/phymars/inifis.F

    r740 r833  
    429429         write(*,*) " water = ",water
    430430
     431! thermal inertia feedback
     432         write(*,*) "Activate the thermal inertia feedback ?"
     433         tifeedback=.false. ! default value
     434         call getin("tifeedback",tifeedback)
     435         write(*,*) " tifeedback = ",tifeedback
     436
    431437! Test of incompatibility:
     438
     439         if (tifeedback.and..not.water) then
     440           print*,'if tifeedback is used,'
     441           print*,'water should be used too'
     442           stop
     443         endif
     444
     445         if (tifeedback.and..not.callsoil) then
     446           print*,'if tifeedback is used,'
     447           print*,'callsoil should be used too'
     448           stop
     449         endif
    432450
    433451         if (activice.and..not.water) then
  • trunk/LMDZ.MARS/libf/phymars/physiq.F

    r790 r833  
    202202      REAL surfdust(ngridmx,nlayermx) ! dust surface area (m2/m3, if photochemistry)
    203203      REAL surfice(ngridmx,nlayermx)  !  ice surface area (m2/m3, if photochemistry)
     204      REAL inertiesoil(ngridmx,nsoilmx)! Time varying subsurface
     205                                       ! thermal inertia (J.s-1/2.m-2.K-1)
     206                                       ! (used only when tifeedback=.true.)
    204207
    205208c     Variables used by the slope model
     
    422425c        ~~~~~~~~~~~~~~~
    423426         IF (callsoil) THEN
    424             CALL soil(ngrid,nsoilmx,firstcall,inertiedat,
    425      s          ptimestep,tsurf,tsoil,capcal,fluxgrd)
     427c           Thermal inertia feedback:
     428            IF (tifeedback) THEN
     429                CALL soil_tifeedback(ngrid,nsoilmx,qsurf,inertiesoil)
     430                CALL soil(ngrid,nsoilmx,firstcall,inertiesoil,
     431     s             ptimestep,tsurf,tsoil,capcal,fluxgrd)
     432            ELSE
     433                CALL soil(ngrid,nsoilmx,firstcall,inertiedat,
     434     s             ptimestep,tsurf,tsoil,capcal,fluxgrd)
     435            ENDIF ! of IF (tifeedback)
    426436         ELSE
    427437            PRINT*,
     
    610620c          Radiative transfer
    611621c          ------------------
     622
     623c-------------------------------------------
     624c     MODIF_JBM made on 12W29D5,05:29:23 PM
     625c-------------------------------------------
     626c     WRITE(*,*) "MODIF_JBM DEBUGGING 12W29D5,05:29:23 PM"
     627c     WRITE(*,*) "BEFORE CALLRADITE"
     628c     WRITE(*,*) ">>> rice = ",rice(11,1)
     629c-------------------------------------------
     630
    612631           CALL callradite(icount,ngrid,nlayer,nq,zday,zls,pq,albedo,
    613632     $     emis,mu0,pplev,pplay,pt,tsurf,fract,dist_sol,igout,
     
    615634     $     tauref,tau,aerosol,tauscaling,taucloudtes,rdust,rice,
    616635     $     nuice,co2ice)
     636
     637c-------------------------------------------
     638c     MODIF_JBM made on 12W29D5,05:29:23 PM
     639c-------------------------------------------
     640c     WRITE(*,*) "MODIF_JBM DEBUGGING 12W29D5,05:29:23 PM"
     641c     WRITE(*,*) "AFTER CALLRADITE"
     642c     WRITE(*,*) ">>> rice = ",rice(11,1)
     643c-------------------------------------------
     644
    617645
    618646c          Outputs for basic check (middle of domain)
     
    10091037     &                nq,tau,tauscaling,rdust,rice,nuice,
    10101038     &                rsedcloud,rhocloud)
     1039
     1040c-------------------------------------------
     1041c     MODIF_JBM made on 12W29D5,05:29:23 PM
     1042c-------------------------------------------
     1043c     WRITE(*,*) "MODIF_JBM DEBUGGING 12W29D5,05:29:23 PM"
     1044c     WRITE(*,*) "AFTER WATERCLOUD"
     1045c     WRITE(*,*) ">>> rice = ",rice(11,1)
     1046c-------------------------------------------
    10111047     
    10121048c Temperature variation due to latent heat release
     
    11201156     &                pq, pdq, zdqsed, zdqssed,nq,
    11211157     &                tau,tauscaling)
    1122      
     1158
     1159c-------------------------------------------
     1160c     MODIF_JBM made on 12W29D5,05:29:23 PM
     1161c-------------------------------------------
     1162c     WRITE(*,*) "MODIF_JBM DEBUGGING 12W29D5,05:29:23 PM"
     1163c     WRITE(*,*) "AFTER CALLSEDIM"
     1164c     WRITE(*,*) ">>> rice = ",rice(11,1)
     1165c-------------------------------------------
    11231166     
    11241167           DO iq=1, nq
     
    12921335c   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    12931336      IF (callsoil) THEN
     1337c       Thermal inertia feedback
     1338        IF (tifeedback) THEN
     1339         CALL soil_tifeedback(ngrid,nsoilmx,qsurf,inertiesoil)
     1340         CALL soil(ngrid,nsoilmx,.false.,inertiesoil,
     1341     s          ptimestep,tsurf,tsoil,capcal,fluxgrd)
     1342        ELSE
    12941343         CALL soil(ngrid,nsoilmx,.false.,inertiedat,
    1295      &          ptimestep,tsurf,tsoil,capcal,fluxgrd)
     1344     s          ptimestep,tsurf,tsoil,capcal,fluxgrd)
     1345        ENDIF
    12961346      ENDIF
    12971347     
     
    13691419      ENDDO
    13701420c ******* TEST ******************************************************
    1371       ztim1 = 999
    1372       DO l=1,nlayer
    1373         DO ig=1,ngrid
    1374            if (pt(ig,l).lt.ztim1) then
    1375                ztim1 = pt(ig,l)
    1376                igmin = ig
    1377                lmin = l
    1378            end if
    1379         ENDDO
    1380       ENDDO
    1381       if(min(pt(igmin,lmin),zt(igmin,lmin)).lt.70.) then
    1382         write(*,*) 'PHYSIQ: stability WARNING :'
    1383         write(*,*) 'pt, zt Tmin = ', pt(igmin,lmin), zt(igmin,lmin),
    1384      &              'ig l =', igmin, lmin
    1385       end if
     1421c MODIF_JBM COMMENTED
     1422c      ztim1 = 999
     1423c      DO l=1,nlayer
     1424c        DO ig=1,ngrid
     1425c           if (pt(ig,l).lt.ztim1) then
     1426c               ztim1 = pt(ig,l)
     1427c               igmin = ig
     1428c               lmin = l
     1429c           end if
     1430c        ENDDO
     1431c      ENDDO
     1432c      if(min(pt(igmin,lmin),zt(igmin,lmin)).lt.70.) then
     1433c        write(*,*) 'PHYSIQ: stability WARNING :'
     1434c        write(*,*) 'pt, zt Tmin = ', pt(igmin,lmin), zt(igmin,lmin),
     1435c     &              'ig l =', igmin, lmin
     1436c      end if
    13861437c *******************************************************************
    13871438
     
    15321583     &                        zq(ig,l,igcm_h2o_ice) *
    15331584     &                        (pplev(ig,l) - pplev(ig,l+1)) / g
    1534 cccc Column integrated effective ice radius
    1535 cccc is weighted by total ice mass (LESS GOOD than total ice surface area)
    1536 c                 rave(ig) = rave(ig) +
    1537 c     &                      zq(ig,l,igcm_h2o_ice) *
    1538 c     &                      (pplev(ig,l) - pplev(ig,l+1)) / g *
    1539 c     &                      rice(ig,l) * (1.+nuice_ref)
    15401585c                Computing abs optical depth at 825 cm-1 in each
    15411586c                  layer to simulate NEW TES retrieval
     
    15781623     &                  /max(pi*rave(ig),1.e-30) ! surface weight
    15791624               if (icetot(ig)*1e3.lt.0.01) rave(ig)=0.
     1625               enddo
     1626             else ! of if (scavenging)
     1627               rave(:)=0
     1628               do ig=1,ngrid
     1629                 do l=1,nlayermx
     1630                 rave(ig) = rave(ig) +
     1631     &                      zq(ig,l,igcm_h2o_ice) *
     1632     &                      (pplev(ig,l) - pplev(ig,l+1)) / g *
     1633     &                      rice(ig,l) * (1.+nuice_ref)
     1634                 enddo
     1635                 rave(ig) = max(rave(ig) /
     1636     &             max(icetot(ig),1.e-30),1.e-30) ! mass weight
    15801637               enddo
    15811638             endif ! of if (scavenging)
     
    18441901c        WRITEDIAGFI can ALSO be called from any other subroutines
    18451902c        for any variables !!
    1846 c        call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2,
    1847 c    &                  emis)
    1848 c         call WRITEDIAGFI(ngrid,"pplay","Pressure","Pa",3,zplay)
    1849 c         call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",3,zplev)
     1903         call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2,
     1904     &                  emis)
     1905         call WRITEDIAGFI(ngrid,"pplay","Pressure","Pa",3,zplay)
     1906         call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",3,zplev)
    18501907         call WRITEDIAGFI(ngrid,"tsurf","Surface temperature","K",2,
    18511908     &                  tsurf)
     
    18741931c        call WRITEDIAGFI(ngrid,"ssurf","Surface stress","N.m-2",2,
    18751932c    &                  zstress)
    1876 c        call WRITEDIAGFI(ngridmx,'sw_htrt','sw heat. rate',
    1877 c    &                   'w.m-2',3,zdtsw)
    1878 c        call WRITEDIAGFI(ngridmx,'lw_htrt','lw heat. rate',
    1879 c    &                   'w.m-2',3,zdtlw)
     1933         call WRITEDIAGFI(ngridmx,'sw_htrt','sw heat. rate',
     1934     &                   'w.m-2',3,zdtsw)
     1935         call WRITEDIAGFI(ngridmx,'lw_htrt','lw heat. rate',
     1936     &                   'w.m-2',3,zdtlw)
    18801937            if (.not.activice) then
    18811938               CALL WRITEDIAGFI(ngridmx,'tauTESap',
     
    19782035     &                       'surface h2o_ice',
    19792036     &                       'kg.m-2',2,qsurf(1,igcm_h2o_ice))
    1980 c           CALL WRITEDIAGFI(ngridmx,'albedo',
    1981 c    &                         'albedo',
    1982 c    &                         '',2,albedo(1:ngridmx,1))
     2037            CALL WRITEDIAGFI(ngridmx,'albedo',
     2038     &                         'albedo',
     2039     &                         '',2,albedo(1:ngridmx,1))
     2040              if (tifeedback) then
     2041                 call WRITEDIAGSOIL(ngridmx,"soiltemp",
     2042     &                              "Soil temperature","K",
     2043     &                              3,tsoil)
     2044                 call WRITEDIAGSOIL(ngridmx,'soilti',
     2045     &                       'Soil Thermal Inertia',
     2046     &                       'J.s-1/2.m-2.K-1',3,inertiesoil)
     2047              endif
    19832048           endif !(water)
    19842049
     
    22312296     &                        'm',1,rdust)
    22322297           endif
     2298           if (water.AND.tifeedback) then
     2299             call WRITEDIAGFI(ngridmx,"soiltemp",
     2300     &                              "Soil temperature","K",
     2301     &                              1,tsoil)
     2302             call WRITEDIAGFI(ngridmx,'soilti',
     2303     &                       'Soil Thermal Inertia',
     2304     &                       'J.s-1/2.m-2.K-1',1,inertiesoil)
     2305           endif
    22332306         end if
    22342307         
  • trunk/LMDZ.MARS/libf/phymars/soil.F

    r285 r833  
    5151
    5252! 0. Initialisations and preprocessing step
    53       if (firstcall) then
     53      if (firstcall.or.tifeedback) then
    5454      ! note: firstcall is set to .true. or .false. by the caller
    5555      !       and not changed by soil.F
     
    127127      enddo ! of do ig=1,ngrid
    128128           
    129       else ! of if (firstcall)
     129      endif ! of if (firstcall.or.tifeedback)
    130130
    131131!  1. Compute soil temperatures
     132      IF (.not.firstcall) THEN
    132133! First layer:
    133134      do ig=1,ngrid
     
    144145      enddo
    145146     
    146       endif! of if (firstcall)
     147      ENDIF! of if (.not.firstcall)
    147148
    148149!  2. Compute beta coefficients (preprocessing for next time step)
Note: See TracChangeset for help on using the changeset viewer.