Ignore:
Timestamp:
Sep 11, 2013, 2:34:44 PM (11 years ago)
Author:
emillour
Message:

Mars GCM: (a first step towards using parallel dynamics)

  • IMPORTANT CHANGE: Implemented dynamic tracers. It is no longer necessary to compile the model with the '-t #' option, number of tracers is simply read from tracer.def file (as before). Adapted makegcm_* scripts (and co.) accordingly. Technical aspects of the switch to dynamic tracers are:
    • advtrac.h (in dyn3d) removed and replaced by module infotrac.F
    • tracer.h (in phymars) removed and replaced by module tracer_mod.F90 (which contains nqmx, the number of tracers, etc. and can be used anywhere in the physics).
  • Included some side cleanups: removed unused files (in dyn3d) anldoppler2.F, anl_mcdstats.F and anl_stats-diag.F, and all the unecessary dimensions.* files in grid/dimension.
  • Checked that changes are clean and that GCM yields identical results (in debug mode) to previous svn version.

EM

Location:
trunk/LMDZ.MARS/libf/dyn3d
Files:
1 added
5 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/dyn3d/calfis.F

    r697 r1036  
    8282      REAL pteta(iip1,jjp1,llm)
    8383      REAL pmasse(iip1,jjp1,llm)
    84       REAL pq(iip1,jjp1,llm,nqmx)
     84      REAL pq(iip1,jjp1,llm,nq)
    8585      REAL pphis(iip1,jjp1)
    8686      REAL pphi(iip1,jjp1,llm)
     
    8989      REAL pducov(iip1,jjp1,llm)
    9090      REAL pdteta(iip1,jjp1,llm)
    91       REAL pdq(iip1,jjp1,llm,nqmx)
     91      REAL pdq(iip1,jjp1,llm,nq)
    9292c
    9393      REAL pw(iip1,jjp1,llm)
     
    100100      REAL pdufi(iip1,jjp1,llm)
    101101      REAL pdhfi(iip1,jjp1,llm)
    102       REAL pdqfi(iip1,jjp1,llm,nqmx)
     102      REAL pdqfi(iip1,jjp1,llm,nq)
    103103      REAL pdpsfi(iip1,jjp1)
    104104      logical tracer
     
    113113c
    114114      REAL zufi(ngridmx,llm), zvfi(ngridmx,llm)
    115       REAL ztfi(ngridmx,llm),zqfi(ngridmx,llm,nqmx)
     115      REAL ztfi(ngridmx,llm),zqfi(ngridmx,llm,nq)
    116116c
    117117      REAL zvervel(ngridmx,llm)
    118118c
    119119      REAL zdufi(ngridmx,llm),zdvfi(ngridmx,llm)
    120       REAL zdtfi(ngridmx,llm),zdqfi(ngridmx,llm,nqmx)
     120      REAL zdtfi(ngridmx,llm),zdqfi(ngridmx,llm,nq)
    121121      REAL zdpsrf(ngridmx)
    122122c
     
    185185         airefi(ngridmx)=airefi(ngridmx)*iim
    186186
    187          CALL inifis(ngridmx,llm,day_ini,daysec,dtphys,
     187         CALL inifis(ngridmx,llm,nq,day_ini,daysec,dtphys,
    188188     .                latfi,lonfi,airefi,rad,g,r,cpp)
    189189      ENDIF
     
    275275c   43.bis Taceurs (en kg/kg)
    276276c   --------------------------
    277       DO iq=1,nqmx
     277      DO iq=1,nq
    278278         DO l=1,llm
    279279            zqfi(1,l,iq) = pq(1,1,l,iq)
     
    466466c   ---------------------
    467467
    468       DO iq=1,nqmx
     468      DO iq=1,nq
    469469         DO l=1,llm
    470470            DO i=1,iip1
  • trunk/LMDZ.MARS/libf/dyn3d/dynetat0.F

    r999 r1036  
    33     
    44      use netcdf
     5      use infotrac, only: tnom
    56     
    67      IMPLICIT NONE
     
    3738#include "serre.h"
    3839#include "logic.h"
    39 #include "advtrac.h"
     40!#include "advtrac.h"
    4041#include "control.h"
    4142
     
    380381!           WRITE(str3(2:3),'(i2.2)') iq
    381382!           ierr =  NF_INQ_VARID (nid, str3, nvarid)
    382 ! NB: tracers are now read in using their name ('tnom' from advtrac.h)
     383! NB: tracers are now read in using their name ('tnom' from infotrac)
    383384!           write(*,*) "  loading tracer:",trim(tnom(iq))
    384385           ierr=nf90_inq_varid(nid,tnom(iq),nvarid)
     
    404405c        case when new tracer are added in addition to old ones
    405406             write(*,*)'tracers 1 to ', nqold,'were already present'
    406              write(*,*)'tracers ', nqold+1,' to ', nqmx,'are new'
     407             write(*,*)'tracers ', nqold+1,' to ', nq,'are new'
    407408!             yes=' '
    408409!            do while ((yes.ne.'y').and.(yes.ne.'n'))
    409410!             write(*,*) 'Would you like to reindex tracer # 1 ->',nqold
    410 !             write(*,*) 'to #',nqmx-nqold+1,'->', nqmx,'   (y or n) ?'
     411!             write(*,*) 'to #',nq-nqold+1,'->', nq,'   (y or n) ?'
    411412!             read(*,fmt='(a)') yes
    412413!            end do
     
    416417!                do j=1,jjp1
    417418!                  do i=1,iip1
    418 !                    do iq=nqmx,nqmx-nqold+1,-1
    419 !                       q(i,j,l,iq)=q(i,j,l,iq-nqmx+nqold)   
     419!                    do iq=nq,nq-nqold+1,-1
     420!                       q(i,j,l,iq)=q(i,j,l,iq-nq+nqold)   
    420421!                    end do
    421 !                    do iq=nqmx-nqold,1,-1
     422!                    do iq=nq-nqold,1,-1
    422423!                       q(i,j,l,iq)= 0.
    423424!                    end do
  • trunk/LMDZ.MARS/libf/dyn3d/dynredem.F

    r999 r1036  
    11      SUBROUTINE dynredem0(fichnom,idayref,anneeref,phis,nq)
     2      use infotrac, only: tnom
    23      IMPLICIT NONE
    34c=======================================================================
     
    1718#include "description.h"
    1819#include "serre.h"
    19 #include "advtrac.h"
     20!#include "advtrac.h"
    2021c   Arguments:
    2122c   ----------
     
    963964      SUBROUTINE dynredem1(fichnom,time,
    964965     .                     vcov,ucov,teta,q,nq,masse,ps)
     966      use infotrac, only: nqtot, tnom
    965967      IMPLICIT NONE
    966968c=================================================================
     
    973975#include "comvert.h"
    974976#include "comgeom.h"
    975 #include"advtrac.h"
     977!#include"advtrac.h"
    976978
    977979      INTEGER nq, l
     
    979981      REAL teta(ip1jmp1,llm)                   
    980982      REAL ps(ip1jmp1),masse(ip1jmp1,llm)                   
    981       REAL q(iip1,jjp1,llm,nqmx)
     983      REAL q(iip1,jjp1,llm,nqtot)
    982984      REAL q3d(iip1,jjp1,llm) !temporary variable
    983985      CHARACTER*(*) fichnom
  • trunk/LMDZ.MARS/libf/dyn3d/gcm.F

    r999 r1036  
    11      PROGRAM gcm
    22
     3      use infotrac, only: iniadvtrac, nqtot, iadv
    34      IMPLICIT NONE
    45
     
    4849#include "tracstoke.h"
    4950#include "sponge.h"
    50 #include"advtrac.h"
     51!#include"advtrac.h"
    5152
    5253      INTEGER*4  iday ! jour julien
     
    5758      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
    5859      real, dimension(ip1jmp1,llm) :: teta   ! temperature potentielle
    59       REAL q(ip1jmp1,llm,nqmx)               ! champs advectes
     60      REAL,allocatable :: q(:,:,:)           ! champs advectes
    6061      REAL ps(ip1jmp1)                       ! pression  au sol
    6162      REAL pext(ip1jmp1)                     ! pression  extensive
     
    8081c   tendances dynamiques
    8182      REAL dv(ip1jm,llm),du(ip1jmp1,llm)
    82       REAL dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqmx),dp(ip1jmp1)
     83      REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
     84      REAL,ALLOCATABLE :: dq(:,:,:)
    8385
    8486c   tendances de la dissipation
     
    8890c   tendances physiques
    8991      REAL dvfi(ip1jm,llm),dufi(ip1jmp1,llm)
    90       REAL dhfi(ip1jmp1,llm),dqfi(ip1jmp1,llm,nqmx),dpfi(ip1jmp1)
     92      REAL dhfi(ip1jmp1,llm),dpfi(ip1jmp1)
     93      REAL,ALLOCATABLE :: dqfi(:,:,:)
    9194
    9295c   variables pour le fichier histoire
     
    9598      REAL tppn(iim),tpps(iim),tpn,tps
    9699c
    97 !      INTEGER iadv(nqmx) ! indice schema de transport pour le traceur iq
    98100
    99101      INTEGER itau,itaufinp1,iav
     
    124126      LOGICAL tracer
    125127          data tracer/.true./
    126       INTEGER nq
     128!      INTEGER nq
    127129
    128130C Calendrier
     
    142144
    143145c-----------------------------------------------------------------------
    144 c  Initialize tracers using iniadvtrac (Ehouarn, oct 2008)
    145146      CALL defrun_new( 99, .TRUE. )
    146147
    147       CALL iniadvtrac(nq,numvanle)
    148      
    149       CALL dynetat0("start.nc",nqmx,vcov,ucov,
     148! Initialize tracers
     149      call iniadvtrac(nqtot,numvanle)
     150! Allocation de la tableau q : champs advectes   
     151      allocate(q(ip1jmp1,llm,nqtot))
     152      allocate(dq(ip1jmp1,llm,nqtot))
     153      allocate(dqfi(ip1jmp1,llm,nqtot))
     154
     155      CALL dynetat0("start.nc",nqtot,vcov,ucov,
    150156     .              teta,q,masse,ps,phis,time_0)
    151157
     
    245251     . 'c''est a dire du jour',i7,3x,'au jour',i7//)
    246252
    247       CALL dynredem0("restart.nc",day_ini,anne_ini,phis,nqmx)
     253      CALL dynredem0("restart.nc",day_ini,anne_ini,phis,nqtot)
    248254
    249255      ecripar = .TRUE.
     
    253259
    254260c   Quelques initialisations pour les traceurs
    255       call initial0(ijp1llm*nqmx,dq)
     261      dq(:,:,:)=0
    256262c     istdyn=day_step/4     ! stockage toutes les 6h=1jour/4
    257263c     istphy=istdyn/iphysiq
     
    348354       IF( forward. OR . leapf )  THEN
    349355
    350         DO iq = 1, nqmx
     356        DO iq = 1, nqtot
    351357c
    352358         IF ( iadv(iq).EQ.1.OR.iadv(iq).EQ.2 )  THEN
    353359            CALL traceur( iq,iadv,q,teta,pk,w, pbaru, pbarv, dq )
    354360
    355          ELSE IF( iq.EQ. nqmx )   THEN
     361         ELSE IF( iq.EQ. nqtot )   THEN
    356362c
    357363            iapp_tracvl = 5
     
    361367c
    362368
    363             CALL vanleer(numvanle,iapp_tracvl,nqmx,q,pbaru,pbarv,
     369            CALL vanleer(numvanle,iapp_tracvl,nqtot,q,pbaru,pbarv,
    364370     *                      p, masse, dq,  iadv(1), teta, pk     )
    365371
     
    422428           ENDIF
    423429c
    424         CALL calfis( nqmx, lafin ,rdayvrai,rday_ecri,time  ,
     430        CALL calfis( nqtot, lafin ,rdayvrai,rday_ecri,time  ,
    425431     $                 ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
    426432     $     du,dv,dteta,dq,w, dufi,dvfi,dhfi,dqfi,dpfi,tracer)
     
    429435c      ajout des tendances physiques:
    430436c      ------------------------------
    431           CALL addfi( nqmx, dtphys, leapf, forward   ,
     437          CALL addfi( nqtot, dtphys, leapf, forward   ,
    432438     $                  ucov, vcov, teta , q   ,ps , masse,
    433439     $                 dufi, dvfi, dhfi , dqfi ,dpfi  )
     
    540546c                 iav=0
    541547c              ENDIF
    542 c              CALL writedynav(histaveid, nqmx, itau,vcov ,
     548c              CALL writedynav(histaveid, nqtot, itau,vcov ,
    543549c    ,                          ucov,teta,pk,phi,q,masse,ps,phis)
    544550c           ENDIF
     
    556562     .  ' date=',REAL(itau)/REAL(day_step)
    557563       CALL dynredem1("restart.nc",REAL(itau)/REAL(day_step),
    558      .                vcov,ucov,teta,q,nqmx,masse,ps)
     564     .                vcov,ucov,teta,q,nqtot,masse,ps)
    559565     
    560566      CLOSE(99)
     
    625631                  iav=0
    626632               ENDIF
    627 c              CALL writedynav(histaveid, nqmx, itau,vcov ,
     633c              CALL writedynav(histaveid, nqtot, itau,vcov ,
    628634c    ,                          ucov,teta,pk,phi,q,masse,ps,phis)
    629635
     
    636642              CALL dynredem1("restart.nc",
    637643     .                REAL(itau)/REAL(day_step),
    638      .                vcov,ucov,teta,q,nqmx,masse,ps)
     644     .                vcov,ucov,teta,q,nqtot,masse,ps)
    639645     
    640646              forward = .TRUE.
  • trunk/LMDZ.MARS/libf/dyn3d/lect_start_archive.F

    r999 r1036  
    1       SUBROUTINE lect_start_archive(date,tsurf,tsoil,emis,q2,
     1      SUBROUTINE lect_start_archive(nqtot,date,tsurf,tsoil,emis,q2,
    22     &     t,ucov,vcov,ps,co2ice,h,phisold_newgrid,
    33     &     q,qsurf,surfith,nid)
     
    1616c
    1717c=======================================================================
    18 
     18      use infotrac, only: tnom
    1919      implicit none
    2020
     
    3838#include "netcdf.inc"
    3939!#include "tracer.h"
    40 #include"advtrac.h"
     40!#include"advtrac.h"
    4141c=======================================================================
    4242c   Declarations
     
    4949c et autres:
    5050c----------
    51       INTEGER lnblnk
    52       EXTERNAL lnblnk
     51      integer,intent(in) :: nqtot ! number of advected tracers
    5352
    5453c Variables pour les lectures des fichiers "ini"
     
    8584      REAL vcov(iip1,jjm,llm),ucov(iip1,jjp1,llm) ! vents covariants
    8685      REAL h(iip1,jjp1,llm),ps(iip1,jjp1)
    87       REAL q(iip1,jjp1,llm,nqmx),qtot(iip1,jjp1,llm)
     86      REAL q(iip1,jjp1,llm,nqtot),qtot(iip1,jjp1,llm)
    8887
    8988c autre variables dynamique nouvelle grille
     
    103102      REAL co2ice(ngridmx) ! CO2 ice layer
    104103      REAL emis(ngridmx)
    105       REAL q2(ngridmx,nlayermx+1),qsurf(ngridmx,nqmx)
     104      REAL q2(ngridmx,nlayermx+1),qsurf(ngridmx,nqtot)
    106105c     REAL phisfi(ngridmx)
    107106
     
    130129      real inertiedatS(iip1,jjp1,nsoilmx)
    131130      real co2iceS(iip1,jjp1),emisS(iip1,jjp1)
    132       REAL q2S(iip1,jjp1,llm+1),qsurfS(iip1,jjp1,nqmx)
     131      REAL q2S(iip1,jjp1,llm+1),qsurfS(iip1,jjp1,nqtot)
    133132
    134133      real ptotal, co2icetotal
     
    193192! check if tracers follow old naming convention (q01, q02, q03, ...)
    194193      counter=0
    195       do iq=1,nqmx
     194      do iq=1,nqtot
    196195        txt= " "
    197196        write(txt,'(a1,i2.2)')'q',iq
     
    205204        endif
    206205      enddo
    207       if (counter.eq.nqmx) then
     206      if (counter.eq.nqtot) then
    208207        write(*,*) "lect_start_archive: tracers seem to follow old ",
    209208     &             "naming convention (q01, q02,...)"
     
    318317      allocate(psold(imold+1,jmold+1))
    319318      allocate(phisold(imold+1,jmold+1))
    320       allocate(qold(imold+1,jmold+1,lmold,nqmx))
     319      allocate(qold(imold+1,jmold+1,lmold,nqtot))
    321320      allocate(co2iceold(imold+1,jmold+1))
    322321      allocate(tsurfold(imold+1,jmold+1))
     
    331330      allocate(surfithold(imold+1,jmold+1))
    332331      allocate(mlayerold(nsoilold))
    333       allocate(qsurfold(imold+1,jmold+1,nqmx))
     332      allocate(qsurfold(imold+1,jmold+1,nqtot))
    334333
    335334      allocate(var (imold+1,jmold+1,llm))
     
    748747c -------------------------------------------
    749748! Surface tracers:     
    750       qsurfold(1:imold+1,1:jmold+1,1:nqmx)=0
    751 
    752       DO iq=1,nqmx
     749      qsurfold(1:imold+1,1:jmold+1,1:nqtot)=0
     750
     751      DO iq=1,nqtot
    753752        IF (oldtracernames) THEN
    754753          txt=" "
     
    787786        ENDIF
    788787
    789       ENDDO ! of DO iq=1,nqmx
     788      ENDDO ! of DO iq=1,nqtot
    790789
    791790!-----------------------------------------------------------------------
     
    936935c -------------------------------------------
    937936! Tracers:
    938       qold(1:imold+1,1:jmold+1,1:lmold,1:nqmx)=0
    939 
    940       DO iq=1,nqmx
     937      qold(1:imold+1,1:jmold+1,1:lmold,1:nqtot)=0
     938
     939      DO iq=1,nqtot
    941940        IF (oldtracernames) THEN
    942941          txt=" "
     
    966965        ENDIF
    967966
    968       ENDDO ! of DO iq=1,nqmx
     967      ENDDO ! of DO iq=1,nqtot
    969968
    970969
     
    12731272
    12741273c traceurs surface
    1275       do iq = 1, nqmx
     1274      do iq = 1, nqtot
    12761275            call interp_horiz(qsurfold(1,1,iq) ,qsurfs(1,1,iq),
    12771276     &                  imold,jmold,iim,jjm,1,
     
    12791278      enddo
    12801279
    1281       call gr_dyn_fi (nqmx,iim+1,jjm+1,ngridmx,qsurfs,qsurf)
     1280      call gr_dyn_fi (nqtot,iim+1,jjm+1,ngridmx,qsurfs,qsurf)
    12821281
    12831282c traceurs 3D
    1284       do  iq = 1, nqmx
     1283      do  iq = 1, nqtot
    12851284            call interp_vert(qold(1,1,1,iq),var,lmold,llm,
    12861285     &        apsold,bpsold,aps,bps,psold,(imold+1)*(jmold+1))
     
    13221321
    13231322c     Periodicite :
    1324       do  iq = 1, nqmx
     1323      do  iq = 1, nqtot
    13251324         do l=1, llm
    13261325            do j = 1, jjp1
  • trunk/LMDZ.MARS/libf/dyn3d/newstart.F

    r999 r1036  
    1616
    1717! to use  'getin'
    18       USE ioipsl_getincom
    19 
     18      use ioipsl_getincom, only: getin
     19      use infotrac, only: iniadvtrac, nqtot, tnom
     20      use tracer_mod, only: noms, igcm_h2o_vap, igcm_h2o_ice
    2021      implicit none
    2122
     
    4142#include "serre.h"
    4243#include "netcdf.inc"
    43 #include"advtrac.h"
    44 #include"tracer.h"
     44!#include"advtrac.h"
     45!#include"tracer.h"
    4546#include "datafile.h"
    4647c=======================================================================
     
    7273      REAL vcov(iip1,jjm,llm),ucov(iip1,jjp1,llm) ! vents covariants
    7374      REAL phis(iip1,jjp1)
    74       REAL q(iip1,jjp1,llm,nqmx)               ! champs advectes
     75      REAL,ALLOCATABLE :: q(:,:,:,:)               ! champs advectes
    7576
    7677c autre variables dynamique nouvelle grille
     
    9899      REAL co2ice(ngridmx)      ! CO2 ice layer
    99100      REAL emis(ngridmx)        ! surface emissivity
    100       REAL qsurf(ngridmx,nqmx)
     101      REAL,ALLOCATABLE :: qsurf(:,:)
    101102      REAL q2(ngridmx,nlayermx+1)
    102103!      REAL rnaturfi(ngridmx)
     
    179180      pa= 20           ! for Mars, instead of 500 (Earth)
    180181
     182! Load tracer number and names:
     183      call iniadvtrac(nqtot,numvanle)
     184! allocate arrays
     185      allocate(q(iip1,jjp1,llm,nqtot))
     186      allocate(qsurf(ngridmx,nqtot))
     187     
    181188c=======================================================================
    182189c   Choice of the start file(s) to use
     
    323330c  INITIALISATIONS DIVERSES
    324331c=======================================================================
    325 ! Load tracer names:
    326       call iniadvtrac(nq,numvanle)
    327332
    328333      day_step=180 !?! Note: day_step is a common in "control.h"
     
    357362!    (for instance initracer needs to know about some flags, and/or
    358363!      'datafile' path may be changed by user)
    359       call inifis(ngridmx,llm,day_ini,daysec,dtphys,
     364      call inifis(ngridmx,llm,nqtot,day_ini,daysec,dtphys,
    360365     &                latfi,lonfi,airefi,rad,g,r,cpp)
    361366
     
    399404
    400405        write(*,*) 'Reading file START_ARCHIVE'
    401         CALL lect_start_archive(date,tsurf,tsoil,emis,q2,
     406        CALL lect_start_archive(nqtot,date,tsurf,tsoil,emis,q2,
    402407     .   t,ucov,vcov,ps,co2ice,teta,phisold_newgrid,q,qsurf,
    403408     &   surfith,nid)
     
    415420        write(*,*) 'Reading file START'
    416421        fichnom = 'start.nc'
    417         CALL dynetat0(fichnom,nqmx,vcov,ucov,teta,q,masse,
     422        CALL dynetat0(fichnom,nqtot,vcov,ucov,teta,q,masse,
    418423     .       ps,phis,time)
    419424
    420425        write(*,*) 'Reading file STARTFI'
    421426        fichnom = 'startfi.nc'
    422         CALL phyetat0 (fichnom,tab0,Lmodif,nsoilmx,nqmx,
     427        CALL phyetat0 (fichnom,tab0,Lmodif,nsoilmx,nqtot,
    423428     .        day_ini,time,
    424429     .        tsurf,tsoil,emis,q2,qsurf,co2ice)
     
    448453! rename them
    449454      count=0
    450       do iq=1,nqmx
     455      do iq=1,nqtot
    451456        txt=" "
    452457        write(txt,'(a1,i2.2)') 'q',iq
     
    454459          count=count+1
    455460        endif
    456       enddo ! of do iq=1,nqmx
     461      enddo ! of do iq=1,nqtot
    457462     
    458463      ! initialize tracer names noms(:) and indexes (igcm_co2, igcm_h2o_vap, ...)
    459       call initracer(qsurf,co2ice)
     464      call initracer(ngridmx,nqtot,qsurf,co2ice)
    460465     
    461       if (count.eq.nqmx) then
     466      if (count.eq.nqtot) then
    462467        write(*,*) 'Newstart: updating tracer names'
    463468        ! copy noms(:) to tnom(:) to have matching tracer names in physics
    464469        ! and dynamics
    465         tnom(1:nqmx)=noms(1:nqmx)
     470        tnom(1:nqtot)=noms(1:nqtot)
    466471      endif
    467472
     
    693698         if (yes.eq.'y') then
    694699           write(*,*) 'OK : conservation of tracer total mass'
    695            DO iq =1, nqmx
     700           DO iq =1, nqtot
    696701             DO l=1,llm
    697702               DO j=1,jjp1
     
    712717         do while (yes.eq.'y')
    713718          write(*,*) 'Which tracer name do you want to change ?'
    714           do iq=1,nqmx
     719          do iq=1,nqtot
    715720            write(*,'(i3,a3,a20)')iq,' : ',trim(tnom(iq))
    716721          enddo
    717722          write(*,'(a35,i3)')
    718      &            '(enter tracer number; between 1 and ',nqmx
     723     &            '(enter tracer number; between 1 and ',nqtot
    719724          write(*,*)' or any other value to quit this option)'
    720725          read(*,*) iq
    721           if ((iq.ge.1).and.(iq.le.nqmx)) then
     726          if ((iq.ge.1).and.(iq.le.nqtot)) then
    722727            write(*,*)'Change tracer name ',trim(tnom(iq)),' to ?'
    723728            read(*,*) txt
     
    728733! inapropiate value of iq; quit this option
    729734            yes='n'
    730           endif ! of if ((iq.ge.1).and.(iq.le.nqmx))
     735          endif ! of if ((iq.ge.1).and.(iq.le.nqtot))
    731736         enddo ! of do while (yes.ne.'y')
    732737
     
    736741c          mise a 0 des q (traceurs)
    737742          write(*,*) 'Tracers set to 0 (1.E-30 in fact)'
    738            DO iq =1, nqmx
     743           DO iq =1, nqtot
    739744             DO l=1,llm
    740745               DO j=1,jjp1
     
    747752
    748753c          set surface tracers to zero
    749            DO iq =1, nqmx
     754           DO iq =1, nqtot
    750755             DO ig=1,ngridmx
    751756                 qsurf(ig,iq)=0.
     
    757762        else if (trim(modif) .eq. 'q=x') then
    758763             write(*,*) 'Which tracer do you want to modify ?'
    759              do iq=1,nqmx
     764             do iq=1,nqtot
    760765               write(*,*)iq,' : ',trim(tnom(iq))
    761766             enddo
    762              write(*,*) '(choose between 1 and ',nqmx,')'
     767             write(*,*) '(choose between 1 and ',nqtot,')'
    763768             read(*,*) iq
    764              if ((iq.lt.1).or.(iq.gt.nqmx)) then
     769             if ((iq.lt.1).or.(iq.gt.nqtot)) then
    765770               ! wrong value for iq, go back to menu
    766771               write(*,*) "wrong input value:",iq
     
    793798             write(*,*) "followed by 2nd, etc. up to top of atmosphere)"
    794799             write(*,*) 'Which tracer do you want to set?'
    795              do iq=1,nqmx
     800             do iq=1,nqtot
    796801               write(*,*)iq,' : ',trim(tnom(iq))
    797802             enddo
    798              write(*,*) '(choose between 1 and ',nqmx,')'
     803             write(*,*) '(choose between 1 and ',nqtot,')'
    799804             read(*,*) iq
    800              if ((iq.lt.1).or.(iq.gt.nqmx)) then
     805             if ((iq.lt.1).or.(iq.gt.nqtot)) then
    801806               ! wrong value for iq, go back to menu
    802807               write(*,*) "wrong input value:",iq
     
    853858          endif
    854859         
    855           call inichim_newstart(q, qsurf, ps, flagh2o, flagthermo)
     860          call inichim_newstart(nq, q, qsurf, ps, flagh2o, flagthermo)
    856861
    857862         ! We want to have the very same value at lon -180 and lon 180
    858863          do l = 1,llm
    859864             do j = 1,jjp1
    860                 do iq = 1,nqmx
     865                do iq = 1,nqtot
    861866                   q(iip1,j,l,iq) = q(1,j,l,iq)
    862867                end do
     
    892897          do l = 1,llm
    893898             do j = 1,jjp1
    894                 do iq = 1,nqmx
     899                do iq = 1,nqtot
    895900                   q(iip1,j,l,iq) = q(1,j,l,iq)
    896901                end do
     
    14601465c    $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, day_ini )
    14611466
    1462       CALL dynredem0("restart.nc",day_ini,anneeref,phis,nqmx)
     1467      CALL dynredem0("restart.nc",day_ini,anneeref,phis,nqtot)
    14631468      CALL dynredem1("restart.nc",hour_ini,vcov,ucov,teta,q,
    1464      .               nqmx,masse,ps)
     1469     .               nqtot,masse,ps)
    14651470C
    14661471C Ecriture etat initial physique
    14671472C
    14681473
    1469       call physdem0("restartfi.nc",lonfi,latfi,nsoilmx,nqmx,
     1474      call physdem0("restartfi.nc",lonfi,latfi,nsoilmx,nqtot,
    14701475     .              dtphys,real(day_ini),0.0,
    14711476     .              airefi,albfi,ithfi,zmea,zstd,zsig,zgam,zthe)
    1472       call physdem1("restartfi.nc",nsoilmx,nqmx,
     1477      call physdem1("restartfi.nc",nsoilmx,nqtot,
    14731478     .              dtphys,hour_ini,
    14741479     .              tsurf,tsoil,co2ice,emis,q2,qsurf)
  • trunk/LMDZ.MARS/libf/dyn3d/paramet.h

    r38 r1036  
    33
    44      INTEGER  iip1,iip2,iip3,jjp1,llmp1,llmp2,llmm1
    5       INTEGER  kftd,ip1jm,ip1jmp1,ip1jmi1,ijp1llm
     5      INTEGER  ip1jm,ip1jmp1,ip1jmi1,ijp1llm
    66      INTEGER  ijmllm,mvar
    77      INTEGER jcfil,jcfllm
     
    1010      PARAMETER( jjp1=jjm+1-1/jjm)
    1111      PARAMETER( llmp1 = llm+1,  llmp2 = llm+2, llmm1 = llm-1 )
    12       PARAMETER( kftd  = iim/2 -ndm )
    1312      PARAMETER( ip1jm  = iip1*jjm,  ip1jmp1= iip1*jjp1 )
    1413      PARAMETER( ip1jmi1= ip1jm - iip1 )
  • trunk/LMDZ.MARS/libf/dyn3d/start2archive.F

    r999 r1036  
    1919c=======================================================================
    2020
     21      use infotrac, only: iniadvtrac, nqtot, tnom
    2122      implicit none
    2223
     
    3536#include "dimphys.h"
    3637#include "comsoil.h"
    37 #include"advtrac.h"
     38!#include"advtrac.h"
    3839#include "netcdf.inc"
    3940
     
    4647      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
    4748      REAL teta(ip1jmp1,llm)                    ! temperature potentielle
    48       REAL q(ip1jmp1,llm,nqmx)               ! champs advectes
     49      REAL,ALLOCATABLE :: q(:,:,:)   ! champs advectes
    4950      REAL pks(ip1jmp1)                      ! exner (f pour filtre)
    5051      REAL pk(ip1jmp1,llm)
     
    6162      REAL tsoil(ngridmx,nsoilmx) ! Soil temperature
    6263      REAL co2ice(ngridmx)      ! CO2 ice layer
    63       REAL q2(ngridmx,nlayermx+1),qsurf(ngridmx,nqmx)
     64      REAL q2(ngridmx,nlayermx+1)
     65      REAL,ALLOCATABLE :: qsurf(:,:)
    6466      REAL emis(ngridmx)
    6567      INTEGER start,length
     
    7577      REAL ithS(ip1jmp1,nsoilmx) ! Soil Thermal Inertia
    7678      REAL co2iceS(ip1jmp1)
    77       REAL q2S(ip1jmp1,llm+1),qsurfS(ip1jmp1,nqmx)
     79      REAL q2S(ip1jmp1,llm+1)
     80      REAL,ALLOCATABLE :: qsurfS(:,:)
    7881      REAL emisS(ip1jmp1)
    7982
     
    116119c Lecture des donnees
    117120c=======================================================================
    118 ! Load tracer names:
    119       call iniadvtrac(nq,numvanle)
     121! Load tracer number and names:
     122      call iniadvtrac(nqtot,numvanle)
     123
     124! allocate arrays:
     125      allocate(q(ip1jmp1,llm,nqtot))
     126      allocate(qsurf(ngridmx,nqtot))
     127      allocate(qsurfS(ip1jmp1,nqtot))
    120128
    121129      fichnom = 'start.nc'
    122       CALL dynetat0(fichnom,nqmx,vcov,ucov,teta,q,masse,
     130      CALL dynetat0(fichnom,nqtot,vcov,ucov,teta,q,masse,
    123131     .       ps,phis,timedyn)
    124132
     
    127135      Lmodif=0
    128136
    129       CALL phyetat0 (fichnom,0,Lmodif,nsoilmx,nqmx,day_ini_fi,timefi,
     137      CALL phyetat0 (fichnom,0,Lmodif,nsoilmx,nqtot,day_ini_fi,timefi,
    130138     .      tsurf,tsoil,emis,q2,qsurf,co2ice)
    131139
     
    233241      call gr_fi_dyn(1,ngridmx,iip1,jjp1,emis,emisS)
    234242      call gr_fi_dyn(llm+1,ngridmx,iip1,jjp1,q2,q2S)
    235       call gr_fi_dyn(nqmx,ngridmx,iip1,jjp1,qsurf,qsurfS)
     243      call gr_fi_dyn(nqtot,ngridmx,iip1,jjp1,qsurf,qsurfS)
    236244
    237245c=======================================================================
     
    334342
    335343c-----------------------------------------------------------------------
    336 c Ecriture du champs  q  ( q[1,nqmx] )
    337 c-----------------------------------------------------------------------
    338       do iq=1,nqmx
     344c Ecriture du champs  q  ( q[1,nqtot] )
     345c-----------------------------------------------------------------------
     346      do iq=1,nqtot
    339347c       write(str2,'(i2.2)') iq
    340348c        call write_archive(nid,ntime,'q'//str2,'tracer','kg/kg',
     
    344352      end do
    345353c-----------------------------------------------------------------------
    346 c Ecriture du champs  qsurf  ( qsurf[1,nqmx] )
    347 c-----------------------------------------------------------------------
    348       do iq=1,nqmx
     354c Ecriture du champs  qsurf  ( qsurf[1,nqtot] )
     355c-----------------------------------------------------------------------
     356      do iq=1,nqtot
    349357c       write(str2,'(i2.2)') iq
    350358c       call write_archive(nid,ntime,'qsurf'//str2,'Tracer on surface',
  • trunk/LMDZ.MARS/libf/dyn3d/test_period.F

    r1005 r1036  
    66c                           teta, q , p et phis                 ..........
    77c
    8 c     IMPLICIT NONE
     8      use infotrac,only: nqtot
     9      IMPLICIT NONE
    910c
    1011#include "dimensions.h"
     
    1415c
    1516      REAL ucov(ip1jmp1,llm), vcov(ip1jm,llm), teta(ip1jmp1,llm) ,
    16      ,      q(ip1jmp1,llm,nqmx), p(ip1jmp1,llmp1), phis(ip1jmp1)
     17     ,      q(ip1jmp1,llm,nqtot), p(ip1jmp1,llmp1), phis(ip1jmp1)
    1718c
    1819c   .....  Variables  locales  .....
     
    5657     
    5758c
    58       DO nq =1, nqmx
     59      DO nq =1, nqtot
    5960        DO l =1, llm
    6061          DO ij = 1, ip1jmp1, iip1
Note: See TracChangeset for help on using the changeset viewer.