Changeset 2823 for trunk/LMDZ.MARS


Ignore:
Timestamp:
Nov 18, 2022, 10:43:43 AM (2 years ago)
Author:
emillour
Message:

Mars GCM:
Remove the "tracer" (logical) flag as we now always run with at least
one tracer.
EM

Location:
trunk/LMDZ.MARS
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/README

    r2819 r2823  
    37833783 - Now allow seasonal frost to change albedo in 1d
    37843784 - Can now output albedo in 1d with diagfi.def
     3785
     3786== 18/11/2022 == EM
     3787Remove the "tracer" (logical) flag as we now always run with at least
     3788one tracer.
  • trunk/LMDZ.MARS/libf/aeronomars/thermosphere.F

    r2615 r2823  
    1010      implicit none
    1111
    12 #include "callkeys.h"
     12      include "callkeys.h"
    1313
    1414      integer,intent(in) :: ngrid ! number of atmospheric columns
     
    4343
    4444      if (firstcall) then
    45         if (.not. tracer) then
    46           do l=1,nlayer
    47             do ig=1,ngrid
    48               rnew(ig,l)=r
    49               cpnew(ig,l)=cpp
    50             enddo
    51           enddo
    52         endif
     45        rnew(1:ngrid,1:nlayer)=r
     46        cpnew(1:ngrid,1:nlayer)=cpp
    5347        firstcall= .false.
    5448      endif
  • trunk/LMDZ.MARS/libf/phymars/callkeys.h

    r2628 r2823  
    1010     &   ,callnirco2,callnlte,callthermos,callconduct,calleuv           &
    1111     &   ,callmolvis,callmoldiff,thermochem,thermoswater,callemis       &
    12      &   ,callg2d,linear,rayleigh,tracer                                &
     12     &   ,callg2d,linear,rayleigh                                       &
    1313     &   ,scavenging,sedimentation                                      &
    1414     &   ,activice,water,tifeedback,microphys,supersat,caps,photochem   &
     
    6969
    7070      logical rayleigh
    71       logical tracer
    7271      logical scavenging
    7372      logical rdstorm ! rocket dust storm parametrization
  • trunk/LMDZ.MARS/libf/phymars/calltherm_interface.F90

    r1226 r2823  
    3636! -----------------------------------------------------------------------
    3737
    38       SUBROUTINE calltherm_interface (ngrid,nlayer,nq, &
    39      & tracer,igcm_co2, &
     38      SUBROUTINE calltherm_interface (ngrid,nlayer,nq, igcm_co2, &
    4039     & zzlev,zzlay, &
    4140     & ptimestep,pu,pv,pt,pq,pdu,pdv,pdt,pdq,q2, &
     
    7170      REAL, INTENT(IN) :: zzlay(ngrid,nlayer) ! altitude at the middle of the layers
    7271      REAL, INTENT(IN) :: zzlev(ngrid,nlayer+1) ! altitude at layer boundaries
    73       LOGICAL, INTENT(IN) :: tracer ! =.true. if tracers are present and to be transported
    7472      INTEGER, INTENT(IN) :: igcm_co2 ! index of the CO2 tracer in mixing ratio array
    7573                                      ! --> 0 if no tracer is CO2 (or no tracer at all)
     
    168166      fraca(:,:)=0.
    169167      zfraca(:,:)=0.
    170       if (tracer) then
    171          pdq_th(:,:,:)=0.
    172       end if
     168      pdq_th(:,:,:)=0.
    173169      d_t_ajs(:,:)=0.
    174170      d_u_ajs(:,:)=0.
     
    195191
    196192       if(qtransport_thermals) then
    197           if(tracer) then ! tracer is a logical that is true if tracer must be transported in the GCM physics
    198                 pq_therm(:,:,:)=pq(:,:,:)+pdq(:,:,:)*ptimestep ! tracer concentration
    199           endif
     193         pq_therm(:,:,:)=pq(:,:,:)+pdq(:,:,:)*ptimestep ! tracer concentration
    200194       endif
    201195
     
    228222! CALL to main thermal routine
    229223             CALL thermcell_main_mars(ngrid,nlayer,nq &
    230      &      ,tracer,igcm_co2 &
     224     &      ,igcm_co2 &
    231225     &      ,zdt  &
    232226     &      ,pplay,pplev,pphi,zzlev,zzlay  &
     
    366360           ! if tracers are transported in thermals, update output variables, else these are 0.
    367361           if(qtransport_thermals) then
    368               if(tracer) then
    369362               do iq=1,nq
    370363                if (iq .ne. igcm_co2) then
     
    378371                endif
    379372               enddo
    380               endif
    381373           endif
    382374
  • trunk/LMDZ.MARS/libf/phymars/co2condens_mod.F

    r2739 r2823  
    190190         ico2=0
    191191
    192          if (tracer) then
    193 c          Prepare Special treatment if one of the tracer is CO2 gas
    194            do iq=1,nq
     192c        Prepare Special treatment if one of the tracer is CO2 gas
     193         do iq=1,nq
    195194             if (noms(iq).eq."co2") then
    196195                ico2=iq
     
    204203                B=1/m_noco2
    205204             endif
    206            enddo
    207          end if
     205         enddo
    208206      ENDIF ! of IF (firstcall)
    209207      zcpi=1./cpp
  • trunk/LMDZ.MARS/libf/phymars/conf_phys.F

    r2661 r2823  
    106106         write(*,*) "startphy_file", startphy_file
    107107         
    108          write(*,*) "Run with or without tracer transport ?"
    109          tracer=.false. ! default value
    110          call getin_p("tracer",tracer)
    111          write(*,*) " tracer = ",tracer
    112 
    113108         write(*,*) "Diurnal cycle ?"
    114109         write(*,*) "(if diurnal=False, diurnal averaged solar heating)"
     
    672667         endif
    673668
    674          if (water.and..not.tracer) then
    675            print*,'if water is used, tracer should be used too'
    676            call abort_physic(modname,
    677      &          "water requires tracer",1)
    678          endif
    679 
    680669         if (hdo.and..not.water) then
    681670           print*,'if hdo is used, water should be used too'
  • trunk/LMDZ.MARS/libf/phymars/convadj.F

    r2586 r2823  
    9696
    9797        ico2=0
    98         if (tracer) then
    9998!     Prepare Special treatment if one of the tracers is CO2 gas
    10099           do iq=1,nq
     
    111110             end if
    112111           enddo
    113         endif
    114112        firstcall=.false.
    115113      ENDIF ! of IF (firstcall)
     
    123121      ENDDO
    124122
    125       if(tracer) then     
    126         DO iq =1, nq
    127          DO l=1,nlay
    128            DO ig=1,ngrid
    129               zq(ig,l,iq)=pq(ig,l,iq)+pdqfi(ig,l,iq)*ptimestep
    130            ENDDO
    131          ENDDO
    132         ENDDO
    133       end if
     123      zq(1:ngrid,1:nlay,1:nq)=pq(1:ngrid,1:nlay,1:nq)+
     124     &                        pdqfi(1:ngrid,1:nlay,1:nq)*ptimestep
    134125
    135126      zh2(:,:)=zh(:,:)
     
    393384      ENDDO
    394385
    395       if(tracer) then
    396         do iq=1, nq
    397           do  l=1,nlay
    398             do ig=1, ngrid
    399               pdqadj(ig,l,iq)=(zq2(ig,l,iq)-zq(ig,l,iq))/ptimestep
    400             end do
    401           end do
    402         end do
    403       end if
    404 
    405 
    406 !     output
    407 !      if (ngrid.eq.1) then
    408 !         ig=1
    409 !         iq =1
    410 !         write(*,*)'**convadj: l, pq(ig,l,iq),zq(ig,l,iq),zq2(ig,l,iq)' 
    411 !         do l=nlay,1,-1
    412 !           write(*,*) l, pq(ig,l,iq),zq(ig,l,iq),zq2(ig,l,iq)
    413 !         end do
    414 !      end if
    415 
    416 
    417       return
     386      pdqadj(1:ngrid,1:nlay,1:nq)=(zq2(1:ngrid,1:nlay,1:nq)
     387     &                             -zq(1:ngrid,1:nlay,1:nq))/ptimestep
     388
    418389      end
    419390     
  • trunk/LMDZ.MARS/libf/phymars/dyn1d/testphys1d.F

    r2790 r2823  
    221221      endif
    222222
    223 ! check if we are going to run with or without tracers
    224       write(*,*) "Run with or without tracer transport ?"
    225       tracer=.false. ! default value
    226       call getin("tracer",tracer)
    227       write(*,*) " tracer = ",tracer
    228 
    229 ! while we're at it, check if there is a 'traceur.def' file
     223
     224! check if there is a 'traceur.def' file
    230225! and process it.
    231       if (tracer) then
    232226      ! load tracer names from file 'traceur.def'
    233227        open(90,file='traceur.def',status='old',form='formatted',
     
    246240            write(*,*) "testphys1d: error reading number of tracers"
    247241            write(*,*) "   (first line of traceur.def) "
     242            stop
     243          endif
     244          if (nq<1) then
     245            write(*,*) "testphys1d: error number of tracers"
     246            write(*,*) "is nq=",nq," but must be >=1!"
    248247            stop
    249248          endif
     
    318317        write(*,*) "testphys1d: initializing tracers"
    319318        call read_profile(nq, nlayer, qsurf, q)
    320       else
    321       ! we still need to set (dummy) tracer number and names for physdem1
    322         nq=1
    323         nqtot=nq ! set value of nqtot (in infotrac module) as nq
    324         ! allocate arrays:
    325         allocate(tname(nq))
    326         allocate(q(nlayer,nq))
    327         allocate(qsurf(nq))
    328         allocate(dq(nlayer,nq))
    329         allocate(dqdyn(nlayer,nq))
    330         allocate(mqtot(nq))
    331         do iq=1,nq
    332           write(str7,'(a1,i2.2)')'t',iq
    333           tname(iq)=str7
    334         enddo
    335       ! and just to be clean, also initialize tracers to zero for physdem1
    336         q(:,:)=0
    337         qsurf(:)=0     
    338       endif ! of if (tracer)
    339      
    340       !write(*,*) "testphys1d q", q(1,:)
    341       !write(*,*) "testphys1d qsurf", qsurf
    342319
    343320c  Date and local time at beginning of run
  • trunk/LMDZ.MARS/libf/phymars/initracer.F

    r2659 r2823  
    5151c-----------------------------------------------------------------------
    5252
    53 
     53! Sanity check: check that we are running with at least 1 tracer:
     54      if (nq<1) then
     55        write(*,*) "initracer error, nq=",nq," must be >=1!"
     56        call abort_physic("initracer","nq<1",1)
     57      endif
    5458c------------------------------------------------------------
    5559c         NAME and molar mass of the tracer
  • trunk/LMDZ.MARS/libf/phymars/physiq_mod.F

    r2819 r2823  
    640640c        initialize tracers
    641641c        ~~~~~~~~~~~~~~~~~~
    642          IF (tracer) THEN
    643             CALL initracer(ngrid,nq,qsurf)
    644          ENDIF  ! end tracer
     642         CALL initracer(ngrid,nq,qsurf)
    645643
    646644c        Initialize albedo and orbital calculation
     
    698696
    699697
    700         IF (tracer.AND.water.AND.(ngrid.NE.1)) THEN
     698        IF (water.AND.(ngrid.NE.1)) THEN
    701699          write(*,*)"physiq: water_param Surface water frost albedo:",
    702700     .                  albedo_h2o_frost
     
    13891387          ENDDO
    13901388
    1391           if (tracer) then
    13921389           DO iq=1, nq
    13931390            DO l=1,nlayer
     
    14021399              ENDDO
    14031400           ENDDO
    1404           end if ! of if (tracer)
     1401
    14051402         ELSE
    14061403           write (*,*) '******************************************'
     
    14491446      if(calltherm .and. .not.turb_resolved) then
    14501447
    1451         call calltherm_interface(ngrid,nlayer,nq,
    1452      $ tracer,igcm_co2,
     1448        call calltherm_interface(ngrid,nlayer,nq,igcm_co2,
    14531449     $ zzlev,zzlay,
    14541450     $ ptimestep,pu,pv,pt,pq,pdu,pdv,pdt,pdq,q2,
     
    14701466        ENDDO
    14711467
    1472         if (tracer) then
    14731468        DO iq=1,nq
    14741469         DO l=1,nlayer
     
    14781473         ENDDO
    14791474        ENDDO
    1480         endif
    14811475
    14821476        lmax_th_out(:)=real(lmax_th(:))
     
    15211515         ENDDO
    15221516
    1523          if(tracer) then
    15241517           DO iq=1, nq
    15251518            DO l=1,nlayer
     
    15291522            ENDDO
    15301523           ENDDO
    1531          end if
    15321524      ENDIF ! of IF(calladj)
    15331525
     
    15611553c:   -----------------------------------------
    15621554
    1563       if (tracer) then
    15641555
    15651556c   9a. Water and ice
     
    19951986#endif
    19961987
    1997       endif !  of if (tracer)
    19981988
    19991989#ifndef MESOSCALE
     
    20662056         ENDDO
    20672057
    2068         IF (tracer) THEN
    20692058           DO iq=1, nq
    20702059            DO l=1,nlayer
     
    20742063            ENDDO
    20752064           ENDDO
    2076          ENDIF ! of IF (tracer)
    20772065
    20782066#ifndef MESOSCALE
     
    21032091c  Updating tracer budget on surface
    21042092c-----------------------------------------------------------------------         
    2105       IF (tracer) THEN
    21062093        DO iq=1, nq
    21072094          DO ig=1,ngrid
     
    21112098          ENDDO  ! (ig)
    21122099        ENDDO    ! (iq)
    2113       ENDIF
    21142100c-----------------------------------------------------------------------
    21152101c   12. Surface  and sub-surface soil temperature
     
    21292115
    21302116
    2131       IF (tracer.AND.water) THEN
     2117      IF (water) THEN
    21322118!#ifndef MESOSCALE
    21332119!         if (caps.and.(obliquit.lt.27.)) then => now done in co2condens
     
    21602146           endif
    21612147         enddo  ! of do ig=1,ngrid
    2162       ENDIF  ! of IF (tracer.AND.water.AND.(ngrid.NE.1))
     2148      ENDIF  ! of IF (water)
    21632149
    21642150c
     
    24722458         enddo
    24732459
    2474          if (tracer) then
    24752460           ! Density-scaled opacities
    24762461              do ig=1,ngrid
     
    26452630            end do
    26462631          end if
    2647         endif                   ! of if (tracer)
     2632
    26482633#ifndef MESOSCALE
    26492634c        -----------------------------------------------------------------
     
    27172702          endif
    27182703
    2719            if (tracer) then
    27202704             if (water) then
    27212705               vmr=zq(1:ngrid,1:nlayer,igcm_h2o_vap)
     
    29112895           end if ! of if (photochem)
    29122896
    2913            end if ! of if (tracer)
    29142897
    29152898           IF(lastcall.and.callstats) THEN
     
    30733056c        ----------------------------------------------------------
    30743057
    3075       if (tracer.and.(igcm_co2.ne.0)) then
     3058      if (igcm_co2.ne.0) then
    30763059        call WRITEDIAGFI(ngrid,"co2","co2 mass mixing ratio",
    30773060     &                   "kg.kg-1",3,zq(:,:,igcm_co2))
     
    30913074         call WRITEDIAGFI(ngrid,"icetotco2","total mass atm of co2 ice",
    30923075     &                    "kg.m-2", 2, icetotco2)
    3093          call WRITEDIAGFI(ngrid,"vaptotco2","total mass atm of co2
    3094      &                    vapor","kg.m-2", 2, vaptotco2)
     3076         call WRITEDIAGFI(ngrid,"vaptotco2","total mass atm of co2 "//
     3077     &                    "vapor","kg.m-2", 2, vaptotco2)
    30953078         call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2,
    30963079     &                  emis)
     
    31173100
    31183101        end if ! of if (co2clouds)
    3119       end if ! of if (tracer.and.(igcm_co2.ne.0))
     3102      end if ! of if (igcm_co2.ne.0)
    31203103
    31213104      ! Output He tracer, if there is one
    3122       if (tracer.and.(igcm_he.ne.0)) then
     3105      if (igcm_he.ne.0) then
    31233106        call WRITEDIAGFI(ngrid,"he","helium mass mixing ratio",
    31243107     &                   "kg/kg",3,zq(1,1,igcm_he))
     
    31323115c        Outputs of the water cycle
    31333116c        ----------------------------------------------------------
    3134       if (tracer) then
    31353117        if (water) then
    31363118#ifdef MESOINI
     
    32943276c    &                      'kg/kg',3,zdqc(1,1,iq))
    32953277        end if  !(water.and..not.photochem)
    3296       end if !tracer
    32973278
    32983279c        ----------------------------------------------------------
     
    33143295      endif
    33153296
    3316       if (tracer.and.(dustbin.ne.0)) then
     3297      if (dustbin.ne.0) then
    33173298
    33183299        call WRITEDIAGFI(ngrid,'tau','taudust','SI',2,tau(1,1))
     
    35033484#endif
    35043485
    3505          end if  ! (tracer.and.(dustbin.ne.0))
     3486         end if  ! (dustbin.ne.0)
    35063487
    35073488c        ----------------------------------------------------------
     
    35823563!     &                   'tendance v thermiques','m/s',
    35833564!     &                   3,pdv_th*ptimestep)
    3584 !        if (tracer) then
    35853565!          if (nq .eq. 2) then
    35863566!            call WRITEDIAGFI(ngrid,'deltaq_th',
     
    35883568!     &                       3,ptimestep*pdq_th(:,:,2))
    35893569!          end if
    3590 !        end if
    35913570
    35923571        call WRITEDIAGFI(ngrid,'zmax_th',
     
    37023681c     &        'K JA2',1,pt)
    37033682
    3704          if(tracer) then
    37053683c           CALL writeg1d(ngrid,1,tau,'tau','SI')
    37063684            do iq=1,nq
     
    37723750     &                       'J.s-1/2.m-2.K-1',1,inertiesoil)
    37733751           endif
    3774          end if
    37753752         
    37763753cccccccccccccccccc scavenging & water outputs 1D TN ccccccccccccccc
     
    40614038!      endif
    40624039      !CREATE IF CO2CYCLE
    4063 !      if (tracer.and.(igcm_co2.ne.0)) then
     4040!      if (igcm_co2.ne.0) then
    40644041!         CALL send_xios_field("co2",zq(:,:,igcm_co2))
    40654042!      endif
  • trunk/LMDZ.MARS/libf/phymars/thermcell_main_mars.F90

    r2616 r2823  
    3131! -----------------------------------------------------------------------
    3232
    33       SUBROUTINE thermcell_main_mars(ngrid,nlayer,nq &
    34      &                  ,tracer,igcm_co2 &
     33      SUBROUTINE thermcell_main_mars(ngrid,nlayer,nq,igcm_co2 &
    3534     &                  ,ptimestep  &
    3635     &                  ,pplay,pplev,pphi,zlev,zlay  &
     
    6160      INTEGER, INTENT(IN) :: nlayer ! number of vertical grid points
    6261      INTEGER, INTENT(IN) :: nq ! number of tracer species
    63       LOGICAL, INTENT(IN) :: tracer ! =.true. if tracers are present and to be transported
    6462      INTEGER, INTENT(IN) :: igcm_co2 ! index of the CO2 tracer in mixing ratio array
    6563                                      ! --> 0 if no tracer is CO2 (or no tracer at all)
  • trunk/LMDZ.MARS/libf/phymars/vdif_kc.F

    r2616 r2823  
    44      use tracer_mod, only: noms
    55      IMPLICIT NONE
    6 c.......................................................................
    7 #include "callkeys.h"
     6
    87c.......................................................................
    98c
     
    232231      if(firstcall) then
    233232        ico2=0
    234         if (tracer) then
    235233!     Prepare Special treatment if one of the tracers is CO2 gas
    236234           do iq=1,nq
     
    247245             end if
    248246           enddo
    249         endif
    250247
    251248      firstcall=.false.
  • trunk/LMDZ.MARS/libf/phymars/vdifc_mod.F

    r2616 r2823  
    211211         ico2=0
    212212
    213          if (tracer) then
    214213c          Prepare Special treatment if one of the tracer is CO2 gas
    215214           do iq=1,nq
     
    226225             endif
    227226           enddo
    228          end if
    229227
    230228        firstcall=.false.
     
    351349         ENDDO
    352350      ENDDO
    353       if(tracer) then
    354         DO iq =1, nq
    355          DO ilev=1,nlay
    356            DO ig=1,ngrid
    357               zq(ig,ilev,iq)=pq(ig,ilev,iq)+pdqfi(ig,ilev,iq)*ptimestep
    358            ENDDO
    359          ENDDO
    360         ENDDO
    361       end if
     351      zq(1:ngrid,1:nlay,1:nq)=pq(1:ngrid,1:nlay,1:nq)+
     352     &                        pdqfi(1:ngrid,1:nlay,1:nq)*ptimestep
    362353
    363354c-----------------------------------------------------------------------
     
    705696c   TRACERS
    706697c   -------
    707 
    708       if(tracer) then
    709698
    710699c     Using the wind modified by friction for lifting and  sublimation
     
    10561045
    10571046        enddo ! of do iq=1,nq
    1058       end if ! of if(tracer)
    10591047
    10601048c --------- end of tracers  ----------------------------
     
    10871075      ENDDO
    10881076
    1089       if (tracer) then
    1090         DO iq = 1, nq
    1091           DO ilev = 1, nlay
    1092             DO ig=1,ngrid
    1093               pdqdif(ig,ilev,iq)=(zq(ig,ilev,iq)-
    1094      $      (pq(ig,ilev,iq) + pdqfi(ig,ilev,iq)*ptimestep))/ptimestep
    1095             ENDDO
    1096           ENDDO
    1097         ENDDO
    1098       end if
     1077      pdqdif(1:ngrid,1:nlay,1:nq)=(zq(1:ngrid,1:nlay,1:nq)-
     1078     &                             (pq(1:ngrid,1:nlay,1:nq)
     1079     &                              +pdqfi(1:ngrid,1:nlay,1:nq)
     1080     &                                    *ptimestep))/ptimestep
    10991081
    11001082c    ** diagnostique final
  • trunk/LMDZ.MARS/libf/phymars/yamada4.F

    r2616 r2823  
    1414      use turb_mod, only: l0
    1515      IMPLICIT NONE
    16 !.......................................................................
    17 ! MARS
    18       include "callkeys.h"
     16
    1917!.......................................................................
    2018!
     
    147145      if(firstcall) then
    148146        ico2=0
    149         if (tracer) then
    150147!     Prepare Special treatment if one of the tracers is CO2 gas
    151148           do iq=1,nq
     
    162159             end if
    163160           enddo
    164         endif
    165161        firstcall=.false.
    166162      endif !of if firstcall
Note: See TracChangeset for help on using the changeset viewer.