Changeset 960 for LMDZ4


Ignore:
Timestamp:
May 27, 2008, 6:46:50 PM (16 years ago)
Author:
lsce
Message:
  • Ajoute du parametre config_inca dans conf_gcm.F config_inca='none'(sans INCA, par defaut) config_inca='chem'(avec INCA config chemie) config_inca='aero'(avec INCA config aerosol)
  • Menage parmis les cles CPP INCA
  • Enleve le calcul d'omega dans calfis.F et active le calcul correspondant dans advtrac.F(avant uniquement pour INCA).

JG

Location:
LMDZ4/trunk/libf
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/dyn3d/advtrac.F

    r762 r960  
    44c
    55c
    6 #ifdef INCA
    76      SUBROUTINE advtrac(pbaru,pbarv ,
    87     *                   p,  masse,q,iapptrac,teta,
    98     *                  flxw,
    109     *                  pk)
    11 #else
    12       SUBROUTINE advtrac(pbaru,pbarv ,
    13      *                   p,  masse,q,iapptrac,teta,
    14      *                  pk)
    15 #endif
    1610c     Auteur :  F. Hourdin
    1711c
     
    4842      REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
    4943      REAL pk(ip1jmp1,llm)
    50 #ifdef INCA
    51       REAL               :: flxw(ip1jmp1,llm)
    52 #endif
     44      REAL flxw(ip1jmp1,llm)
    5345
    5446c-------------------------------------------------------------
     
    124116        CALL groupe( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
    125117
    126 #ifdef INCA
    127118      ! ... Flux de masse diaganostiques traceurs
    128119      flxw = wg / FLOAT(iapp_tracvl)
    129 #endif
    130120
    131121c  test sur l'eventuelle creation de valeurs negatives de la masse
     
    209199        else if (iadv(iq).eq.20) then
    210200            call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
    211 #ifdef INCA
    212        do iiq = iq+1, iq+3
    213 c         q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
    214           q(:,:,iiq)=q(:,:,iiq)*1
    215        enddo
    216 #endif
    217201
    218202c   ----------------------------------------------------------------
     
    228212           call  prather(q(1,1,iq),wg,massem,pbarug,pbarvg,
    229213     s                     n,dtbon)
    230 #ifdef INCA
    231        do iiq = iq+1, iq+9
    232 c         q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
    233          q(:,:,iiq)=q(:,:,iiq)*1
    234        enddo
    235 #endif
     214
    236215c   ----------------------------------------------------------------
    237216c   Schemas PPM Lin et Rood
  • LMDZ4/trunk/libf/dyn3d/caladvtrac.F

    r762 r960  
    44c
    55c
    6 #ifdef INCA
    76            SUBROUTINE caladvtrac(q,pbaru,pbarv ,
    87     *                   p ,masse, dq ,  teta,
    9      *                   flxw,
    10      *                   pk)
    11 #else
    12             SUBROUTINE caladvtrac(q,pbaru,pbarv ,
    13      *                   p ,masse, dq ,  teta,
    14      *                   pk)
    15 #endif
    16 
     8     *                   flxw, pk)
    179c
    1810      IMPLICIT NONE
     
    3931      REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nqmx),dq( ip1jmp1,llm,2 )
    4032      REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm)
    41 #ifdef INCA
    4233      REAL               :: flxw(ip1jmp1,llm)
    43 #endif
    4434
    4535c  ..................................................................
     
    6959c   advection
    7060
    71 #ifdef INCA
    72       CALL advtrac( pbaru,pbarv,
    73      *             p,  masse,q,iapptrac, teta,
    74      .             flxw,
    75      .             pk)
    76 #else
    77       CALL advtrac( pbaru,pbarv,
    78      *             p,  masse,q,iapptrac, teta,
    79      .             pk)
    80 #endif
     61        CALL advtrac( pbaru,pbarv,
     62     *       p,  masse,q,iapptrac, teta,
     63     .       flxw, pk)
    8164c
    8265
  • LMDZ4/trunk/libf/dyn3d/calfis.F

    r956 r960  
    2222     $                  pdteta,
    2323     $                  pdq,
    24      $                  pw,
    25 #ifdef INCA
    2624     $                  flxw,
    27 #endif
    2825     $                  clesphy0,
    2926     $                  pdufi,
     
    121118      REAL pdq(iip1,jjp1,llm,nqmx)
    122119c
    123       REAL pw(iip1,jjp1,llm)
    124 
    125120      REAL pps(iip1,jjp1)
    126121      REAL pp(iip1,jjp1,llmp1)
     
    151146      REAL pcvgu(ngridmx,llm), pcvgv(ngridmx,llm)
    152147      REAL pcvgt(ngridmx,llm), pcvgq(ngridmx,llm,2)
    153 c
    154       REAL pvervel(ngridmx,llm)
    155148c
    156149      REAL zdufi(ngridmx,llm),zdvfi(ngridmx,llm)
     
    169162      REAL PVteta(ngridmx,ntetaSTD)
    170163c
    171 #ifdef INCA
    172       REAL flxw(iip1,jjp1,llm)
    173       REAL flxwfi(ngridmx,llm)
    174 #endif
     164      REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
     165      REAL flxwfi(ngridmx,llm)  ! Flux de masse verticale sur la grille physiq
    175166c
    176167     
     
    328319
    329320c   ....  Calcul de la vitesse  verticale  ( en Pa*m*s  ou Kg/s )  ....
    330 c
    331       DO l=1,llm
    332         pvervel(1,l)=pw(1,1,l) * g /apoln
    333         ig0=2
    334        DO j=2,jjm
    335            DO i = 1, iim
    336               pvervel(ig0,l) = pw(i,j,l) * g * unsaire(i,j)
    337               ig0 = ig0 + 1
    338            ENDDO
    339        ENDDO
    340         pvervel(ig0,l)=pw(1,jjp1,l) * g /apols
    341       ENDDO
     321c JG : ancien calcule de omega utilise dans physiq.F. Maintenant le flux
     322c    de masse est calclue dans advtrac.F 
     323c      DO l=1,llm
     324c        pvervel(1,l)=pw(1,1,l) * g /apoln
     325c        ig0=2
     326c       DO j=2,jjm
     327c           DO i = 1, iim
     328c              pvervel(ig0,l) = pw(i,j,l) * g * unsaire(i,j)
     329c              ig0 = ig0 + 1
     330c           ENDDO
     331c       ENDDO
     332c        pvervel(ig0,l)=pw(1,jjp1,l) * g /apols
     333c      ENDDO
    342334
    343335c
     
    442434     $           ntetaSTD,rtetaSTD,PVteta)
    443435c
    444 #ifdef INCA
     436c On change de grille, dynamique vers physiq, pour le flux de masse verticale
    445437      CALL gr_dyn_fi(llm,iip1,jjp1,ngridmx,flxw,flxwfi)
    446 #endif
    447 
    448438
    449439c-----------------------------------------------------------------------
     
    470460     .             ztfi,
    471461     .             zqfi,
    472      .             pvervel,
    473 #ifdef INCA
    474462     .             flxwfi,
    475 #endif
    476463     .             zdufi,
    477464     .             zdvfi,
  • LMDZ4/trunk/libf/dyn3d/conf_gcm.F

    r956 r960  
    507507       offline = .FALSE.
    508508       CALL getin('offline',offline)
     509
     510!Config  Key  = config_inca
     511!Config  Desc = Choix de configuration de INCA
     512!Config  Def  = none
     513!Config  Help = Choix de configuration de INCA :
     514!Config         'none' = sans INCA
     515!Config         'chem' = INCA avec calcul de chemie
     516!Config         'aero' = INCA avec calcul des aerosols
     517      config_inca = 'none'
     518      CALL getin('config_inca',config_inca)
    509519
    510520
     
    541551      write(lunout,*)' tauyy = ', tauyy
    542552      write(lunout,*)' offline = ', offline
     553      write(lunout,*)' config_inca = ', config_inca
    543554
    544555      RETURN
     
    653664       offline = .FALSE.
    654665       CALL getin('offline',offline)
    655       write(lunout,*)' offline = ', offline
    656 
     666
     667!Config  Key  = config_inca
     668!Config  Desc = Choix de configuration de INCA
     669!Config  Def  = none
     670!Config  Help = Choix de configuration de INCA :
     671!Config         'none' = sans INCA
     672!Config         'chem' = INCA avec calcul de chemie
     673!Config         'aero' = INCA avec calcul des aerosols
     674      config_inca = 'none'
     675      CALL getin('config_inca',config_inca)
    657676
    658677      write(lunout,*)' #########################################'
     
    688707      write(lunout,*)' tauy = ', tauy
    689708      write(lunout,*)' offline = ', offline
     709      write(lunout,*)' config_inca = ', config_inca
    690710c
    691711      RETURN
  • LMDZ4/trunk/libf/dyn3d/control.h

    r956 r960  
    1414     &              iperiod,iapp_tracvl,iconser,iecri,idissip,iphysiq , &
    1515     &              periodav,iecrimoy,dayref,anneeref,                  &
    16      &              raz_date,offline,ip_ebil_dyn
     16     &              raz_date,offline,ip_ebil_dyn,config_inca
    1717
    1818      INTEGER   nday,day_step,iperiod,iapp_tracvl,iconser,iecri,        &
     
    2121      REAL periodav
    2222      logical offline
    23 
     23      CHARACTER*4 config_inca
    2424!-----------------------------------------------------------------------
  • LMDZ4/trunk/libf/dyn3d/create_etat0_limit.F

    r822 r960  
    2929#include "indicesol.h"
    3030#include "advtrac.h"
    31 cym#include "dimphy.h"
     31#include  "control.h"
    3232      REAL :: masque(iip1,jjp1)
    3333      REAL :: pctsrf(iim*(jjm-1)+2, nbsrf)
     
    4343      mmt_adj(:,:,:,:) = 1
    4444
     45      IF (config_inca /= 'none') THEN
    4546#ifdef INCA
    46       call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday)
    47       print *, 'nbtrac =' , nbtrac
     47         call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday)
    4848#endif
     49         print *, 'nbtrac =' , nbtrac
     50      END IF
    4951
    5052      CALL Init_Phys_lmdz(iim,jjp1,llm,nqmx-2,1,(jjm-1)*iim+2)
  • LMDZ4/trunk/libf/dyn3d/dynredem.F

    r822 r960  
    521521#include "advtrac.h"
    522522#include "temps.h"
     523#include "control.h"
    523524
    524525      INTEGER nq, l
     
    623624#endif
    624625
    625 #ifdef INCA
     626      IF (config_inca /= 'none') THEN
    626627! Ajout Anne pour lecture valeurs traceurs dans un fichier start_trac.nc
    627       ierr_file = NF_OPEN ("start_trac.nc", NF_NOWRITE,nid_trac)
    628       IF (ierr_file .NE.NF_NOERR) THEN
    629         write(6,*)' Pb d''ouverture du fichier start_trac.nc'
    630         write(6,*)' ierr = ', ierr_file
    631       ENDIF
    632 #endif
     628         ierr_file = NF_OPEN ("start_trac.nc", NF_NOWRITE,nid_trac)
     629         IF (ierr_file .NE.NF_NOERR) THEN
     630            write(6,*)' Pb d''ouverture du fichier start_trac.nc'
     631            write(6,*)' ierr = ', ierr_file
     632         ENDIF
     633      END IF
    633634
    634635      IF(nq.GE.1) THEN
    635        do iq=1,nq
    636 #ifdef INCA
     636      do iq=1,nq
     637
     638         IF (config_inca == 'none') THEN
     639            ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
     640            IF (ierr .NE. NF_NOERR) THEN
     641               PRINT*, "Variable  tname(iq) n est pas definie"
     642               CALL abort
     643            ENDIF
     644#ifdef NC_DOUBLE
     645            ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
     646#else
     647            ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
     648#endif
     649        ELSE ! config_inca = 'chem' ou 'aero'
    637650! lecture de la valeur du traceur dans start_trac.nc
    638          if (ierr_file .ne. 2) then
    639             ierr = NF_INQ_VARID (nid_trac, tname(iq), nvarid_trac)
    640             IF (ierr .NE. NF_NOERR) THEN
    641                PRINT*, tname(iq),"est absent de start_trac.nc"
    642                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
    643                IF (ierr .NE. NF_NOERR) THEN
    644                   PRINT*, "Variable ", tname(iq)," n est pas definie"
    645                   CALL abort
    646                ENDIF
    647 #ifdef NC_DOUBLE
    648                ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
    649 #else
    650                ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
    651 #endif
    652 
    653             ELSE
    654                PRINT*, tname(iq), "est present dans start_trac.nc"
     651           IF (ierr_file .ne. 2) THEN
     652             ierr = NF_INQ_VARID (nid_trac, tname(iq), nvarid_trac)
     653             IF (ierr .NE. NF_NOERR) THEN
     654                PRINT*, tname(iq),"est absent de start_trac.nc"
     655                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
     656                IF (ierr .NE. NF_NOERR) THEN
     657                   PRINT*, "Variable ", tname(iq)," n est pas definie"
     658                   CALL abort
     659                ENDIF
     660#ifdef NC_DOUBLE
     661                ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
     662#else
     663                ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
     664#endif
     665               
     666             ELSE
     667                PRINT*, tname(iq), "est present dans start_trac.nc"
    655668#ifdef NC_DOUBLE
    656669               ierr = NF_GET_VAR_DOUBLE(nid_trac, nvarid_trac, trac_tmp)
     
    658671               ierr = NF_GET_VAR_REAL(nid_trac, nvarid_trac, trac_tmp)
    659672#endif
    660                IF (ierr .NE. NF_NOERR) THEN
    661                   PRINT*, "Lecture echouee pour", tname(iq)
    662                   CALL abort
    663                ENDIF
    664                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
    665                IF (ierr .NE. NF_NOERR) THEN
    666                   PRINT*, "Variable ", tname(iq)," n est pas definie"
    667                   CALL abort
    668                ENDIF
    669 #ifdef NC_DOUBLE
    670                ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,trac_tmp)
    671 #else
    672                ierr = NF_PUT_VAR_REAL (nid,nvarid,trac_tmp)
    673 #endif
    674 
    675           ENDIF
     673                IF (ierr .NE. NF_NOERR) THEN
     674                   PRINT*, "Lecture echouee pour", tname(iq)
     675                   CALL abort
     676                ENDIF
     677                ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
     678                IF (ierr .NE. NF_NOERR) THEN
     679                   PRINT*, "Variable ", tname(iq)," n est pas definie"
     680                   CALL abort
     681                ENDIF
     682#ifdef NC_DOUBLE
     683                ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,trac_tmp)
     684#else
     685                ierr = NF_PUT_VAR_REAL (nid,nvarid,trac_tmp)
     686#endif
     687               
     688             ENDIF ! IF (ierr .NE. NF_NOERR)
    676689! fin lecture du traceur
    677           ELSE  ! si il n'y a pas de fichier start_trac.nc
     690          ELSE                  ! si il n'y a pas de fichier start_trac.nc
    678691!             print *, 'il n y a pas de fichier start_trac'
    679692             ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
     
    687700             ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
    688701#endif
    689           ENDIF
    690 ! endif ifdef INCA
    691 #endif
    692          
    693 #ifndef INCA
    694         ierr = NF_INQ_VARID(nid, tname(iq), nvarid)
    695         IF (ierr .NE. NF_NOERR) THEN
    696            PRINT*, "Variable  tname(iq) n est pas definie"
    697            CALL abort
    698         ENDIF
    699 #ifdef NC_DOUBLE
    700           ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
    701 #else
    702           ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
    703 #endif
    704 ! endif ifndef INCA
    705 #endif
     702          ENDIF ! (ierr_file .ne. 2)
     703       END IF   ! config_inca
     704     
    706705      ENDDO
    707706      ENDIF
  • LMDZ4/trunk/libf/dyn3d/gcm.F

    r956 r960  
    220220!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    221221
     222      IF (config_inca /= 'none') THEN
    222223#ifdef INCA
    223224      call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday)
    224225      call init_inca_para(iim,jjm+1,klon,1,klon_mpi_para_nb,0)
    225226#endif
    226 
     227      END IF
    227228c
    228229c
     
    259260      endif
    260261
     262      IF (config_inca /= 'none') THEN
    261263#ifdef INCA
    262       call init_inca_dim(klon,llm,iim,jjm,
    263      $     rlonu,rlatu,rlonv,rlatv)
    264 #endif
     264         call init_inca_dim(klon,llm,iim,jjm,
     265     $        rlonu,rlatu,rlonv,rlatv)
     266#endif
     267      END IF
    265268
    266269
  • LMDZ4/trunk/libf/dyn3d/iniadvtrac.F

    r762 r960  
    2727#include "dimensions.h"
    2828#include "advtrac.h"
    29 
     29#include "control.h"
    3030c   local
    3131      character*3 descrq(30)
     
    5555      descrq(30)='PRA'
    5656
     57      IF (config_inca /= 'none') THEN
    5758#ifdef INCA
    58 
    59       CALL init_transport(
    60      $     hadv_flg,
    61      $     vadv_flg,
    62      $     conv_flg,
    63      $     pbl_flg,
    64      $     tracnam)
     59         CALL init_transport(
     60     $        hadv_flg,
     61     $        vadv_flg,
     62     $        conv_flg,
     63     $        pbl_flg,
     64     $        tracnam)
    6565#endif
     66      END IF
    6667
    6768c-----------------------------------------------------------------------
     
    109110c    dans fichier traceur.def
    110111c------------------------------------------------------------------
    111 #ifdef INCA
     112      IF (config_inca == 'none') THEN
     113         print*,'ouverture de traceur.def'
     114         open(90,file='traceur.def',form='formatted',status='old',
     115     s        iostat=ierr)
     116         if(ierr.eq.0) then
     117            print*,'ouverture de traceur.def ok'
     118            read(90,*) nq
     119            print*,'nombre de traceurs ',nq
     120            if (nq.gt.nqmx) then
     121               print*,'nombre de traceurs trop important'
     122               print*,'verifier traceur.def'
     123               stop
     124            endif
     125C     
     126            do iq=1,nq
     127               read(90,999) hadv(iq),vadv(iq),tnom(iq)
     128            end do
     129            close(90) 
     130            PRINT*,'lecture de traceur.def :'   
     131            do iq=1,nq
     132               write(*,*) hadv(iq),vadv(iq),tnom(iq)
     133            end do       
     134         else
     135            print*,'pb ouverture traceur.def'
     136            print*,'ATTENTION on prend des valeurs par defaut'
     137            nq = 4
     138            hadv(1) = 14
     139            vadv(1) = 14
     140            tnom(1) = 'H2Ov'
     141            hadv(2) = 10
     142            vadv(2) = 10
     143            tnom(2) = 'H2Ol'
     144            hadv(3) = 10
     145            vadv(3) = 10
     146            tnom(3) = 'RN'
     147            hadv(4) = 10
     148            vadv(4) = 10
     149            tnom(4) = 'PB'
     150         ENDIF
     151         PRINT*,'Valeur de traceur.def :'
     152         do iq=1,nq
     153            write(*,*) hadv(iq),vadv(iq),tnom(iq)
     154         end do       
     155      ELSE  ! config_inca='aero' ou 'chem'
    112156C le module de chimie fournit les noms des traceurs
    113157C et les schemas d'advection associes.
    114       tnom(1)='H2Ov'
    115       tnom(2)='H2Ol'
    116       nq=nbtrac+2
    117        if (nq.gt.nqmx) then
    118        print*,'nombre de traceurs incompatible INCA/LMDZT'
    119        stop
    120        endif
    121       do iq =3,nq
    122       tnom(iq)=tracnam(iq-2)
    123       end do
    124       do iq =1,nq
    125       hadv(iq)= hadv_flg(iq)
    126       vadv(iq)= vadv_flg(iq)
    127       end do
    128 #else
    129       print*,'ouverture de traceur.def'
    130       open(90,file='traceur.def',form='formatted',status='old',
    131      s     iostat=ierr)
    132       if(ierr.eq.0) then
    133         print*,'ouverture de traceur.def ok'
    134         read(90,*) nq
    135         print*,'nombre de traceurs ',nq
    136         if (nq.gt.nqmx) then
    137           print*,'nombre de traceurs trop important'
    138           print*,'verifier traceur.def'
    139           stop
    140         endif
    141 C
    142         do iq=1,nq
    143           read(90,999) hadv(iq),vadv(iq),tnom(iq)
    144         end do
    145         close(90) 
    146         PRINT*,'lecture de traceur.def :'   
    147         do iq=1,nq
    148           write(*,*) hadv(iq),vadv(iq),tnom(iq)
    149         end do       
    150       else
    151         print*,'pb ouverture traceur.def'
    152         print*,'ATTENTION on prend des valeurs par defaut'
    153         nq = 4
    154         hadv(1) = 14
    155         vadv(1) = 14
    156         tnom(1) = 'H2Ov'
    157         hadv(2) = 10
    158         vadv(2) = 10
    159         tnom(2) = 'H2Ol'
    160         hadv(3) = 10
    161         vadv(3) = 10
    162         tnom(3) = 'RN'
    163         hadv(4) = 10
    164         vadv(4) = 10
    165         tnom(4) = 'PB'
    166       ENDIF
    167       PRINT*,'Valeur de traceur.def :'
    168       do iq=1,nq
    169         write(*,*) hadv(iq),vadv(iq),tnom(iq)
    170       end do       
    171 
    172 #endif
     158         tnom(1)='H2Ov'
     159         tnom(2)='H2Ol'
     160         nq=nbtrac+2
     161         if (nq.gt.nqmx) then
     162            print*,'nombre de traceurs incompatible INCA/LMDZT'
     163            stop
     164         endif
     165         do iq =3,nq
     166            tnom(iq)=tracnam(iq-2)
     167         end do
     168         do iq =1,nq
     169            hadv(iq)= hadv_flg(iq)
     170            vadv(iq)= vadv_flg(iq)
     171         end do
     172      END IF ! config_inca
     173
    173174c a partir du nom court du traceur et du schema d'advection au detemine le nom long.
    174175        iiq=0
  • LMDZ4/trunk/libf/dyn3d/leapfrog.F

    r956 r960  
    149149
    150150      REAL alpha(ip1jmp1,llm),beta(ip1jmp1,llm)
    151 #ifdef INCA
    152       REAL :: flxw(ip1jmp1,llm)
    153 #endif
     151      REAL :: flxw(ip1jmp1,llm)  ! flux de masse verticale
    154152
    155153c+jld variables test conservation energie
     
    293291      IF( forward. OR . leapf )  THEN
    294292
    295 c
    296 #ifdef INCA
    297              CALL caladvtrac(q,pbaru,pbarv,
    298      *                      p, masse, dq,  teta,
    299      .             flxw,
    300      .             pk)
    301 #else
    302              CALL caladvtrac(q,pbaru,pbarv,
    303      *                      p, masse, dq,  teta,
    304      .             pk)
    305 #endif
    306 
     293         CALL caladvtrac(q,pbaru,pbarv,
     294     *        p, masse, dq,  teta,
     295     .        flxw, pk)
     296         
    307297         IF (offline) THEN
    308298Cmaf stokage du flux de masse pour traceurs OFF-LINE
     
    383373        CALL calfis( nq, lafin ,rdayvrai,time  ,
    384374     $               ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
    385      $               du,dv,dteta,dq,w,
    386 #ifdef INCA
     375     $               du,dv,dteta,dq,
    387376     $               flxw,
    388 #endif
    389377     $               clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi  )
    390378
  • LMDZ4/trunk/libf/dyn3dpar/advtrac_p.F

    r764 r960  
    44c
    55c
    6 #ifdef INCA
    76      SUBROUTINE advtrac_p(pbaru,pbarv ,
    87     *                   p,  masse,q,iapptrac,teta,
    98     *                  flxw,
    109     *                  pk   )
    11 #else
    12       SUBROUTINE advtrac_p(pbaru,pbarv ,
    13      *                   p,  masse,q,iapptrac,teta,
    14      *                  pk)
    15 #endif
    1610
    1711c     Auteur :  F. Hourdin
     
    5549      REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
    5650      REAL pk(ip1jmp1,llm)
    57 #ifdef INCA
    58        REAL               :: flxw(ip1jmp1,llm)
    59 #endif
     51      REAL               :: flxw(ip1jmp1,llm)
    6052
    6153c-------------------------------------------------------------
     
    209201c$OMP BARRIER
    210202     
    211 #ifdef INCA
    212203      ! ... Flux de masse diaganostiques traceurs
    213 c      flxw = wg / FLOAT(iapp_tracvl)
    214204         ijb=ij_begin
    215205         ije=ij_end
    216206         flxw(ijb:ije,1:llm)=wg(ijb:ije,1:llm)/FLOAT(iapp_tracvl)
    217 #endif
    218207
    219208c  test sur l'eventuelle creation de valeurs negatives de la masse
     
    327316
    328317            call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
    329 #ifdef INCA
    330        do iiq = iq+1, iq+3
    331          q(:,:,iiq)=q(:,:,iiq)*1
    332        enddo
    333 #endif
    334318
    335319c   ----------------------------------------------------------------
     
    346330           call  prather(q(1,1,iq),wg,massem,pbarug,pbarvg,
    347331     s                     n,dtbon)
    348 #ifdef INCA
    349        do iiq = iq+1, iq+9
    350          q(:,:,iiq)=q(:,:,iiq)*1
    351        enddo
    352 #endif
    353332c   ----------------------------------------------------------------
    354333c   Schemas PPM Lin et Rood
     
    487466        enddo
    488467
    489 #ifdef INCA
    490        call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm,
    491      *                             jj_nb_caldyn,0,0,Request_vanleer)
    492 #endif     
     468        call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm,
     469     *       jj_nb_caldyn,0,0,Request_vanleer)
     470
    493471        call SetDistrib(jj_nb_caldyn)
    494472        call SendRequest(Request_vanleer)
  • LMDZ4/trunk/libf/dyn3dpar/caladvtrac_p.F

    r764 r960  
    44c
    55c
    6 #ifdef INCA
    76            SUBROUTINE caladvtrac_p(q,pbaru,pbarv ,
    87     *                   p ,masse, dq ,  teta,
    9      *                   flxw,
    10      *                   pk,
    11      *                   iapptrac)
    12 #else
    13             SUBROUTINE caladvtrac_p(q,pbaru,pbarv ,
    14      *                   p ,masse, dq ,  teta,
    15      *                   pk,iapptrac)
    16 #endif
     8     *                   flxw, pk, iapptrac)
    179      USE parallel
    1810c
     
    4032      REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nqmx),dq( ip1jmp1,llm,2 )
    4133      REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm)
    42 #ifdef INCA
    4334      REAL               :: flxw(ip1jmp1,llm)
    44 #endif
     35
    4536      integer ijb,ije,jjb,jje
    4637
     
    7465c      print *,'appel a advtrac'
    7566
    76 #ifdef INCA
    7767      CALL advtrac_p( pbaru,pbarv,
    7868     *             p,  masse,q,iapptrac, teta,
    79      .             flxw,
    80      .             pk)
    81 #else
    82       CALL advtrac_p( pbaru,pbarv,
    83      *             p,  masse,q,iapptrac, teta,
    84      .             pk)
    85 #endif
    86 c
     69     .             flxw, pk)
    8770
    8871         goto 9999
  • LMDZ4/trunk/libf/dyn3dpar/calfis_p.F

    r774 r960  
    2222     $                  pdteta,
    2323     $                  pdq,
    24      $                  pw,
    25 #ifdef INCA
    2624     $                  flxw,
    27 #endif
    2825     $                  clesphy0,
    2926     $                  pdufi,
     
    130127      REAL pdq(iip1,jjp1,llm,nqmx)
    131128c
    132       REAL pw(iip1,jjp1,llm)
    133 
    134129      REAL pps(iip1,jjp1)
    135130      REAL pp(iip1,jjp1,llmp1)
     
    161156      REAL,ALLOCATABLE,SAVE :: pcvgt(:,:), pcvgq(:,:,:)
    162157c
    163       REAL,ALLOCATABLE,SAVE :: pvervel(:,:)
     158c      REAL,ALLOCATABLE,SAVE :: pvervel(:,:)
    164159c
    165160      REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:)
     
    176171      REAL,ALLOCATABLE,SAVE :: ztfi_omp(:,:)
    177172      REAL,ALLOCATABLE,SAVE :: zqfi_omp(:,:,:)
    178       REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:)
     173c      REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:)
    179174      REAL,ALLOCATABLE,SAVE :: zdufi_omp(:,:)
    180175      REAL,ALLOCATABLE,SAVE :: zdvfi_omp(:,:)
     
    202197      REAL PVteta(klon,ntetaSTD)
    203198     
    204 #ifdef INCA
    205       REAL flxw(iip1,jjp1,llm)
    206       REAL flxwfi(klon,llm)
    207 #endif
    208 c
     199      REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
     200      REAL flxwfi(klon,llm)     ! Flux de masse verticale sur la grille physiq
    209201     
    210202      REAL SSUM
     
    257249      ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm))
    258250      ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2))
    259       ALLOCATE(pvervel(klon,llm))
     251c      ALLOCATE(pvervel(klon,llm))
    260252      ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm))
    261253      ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqmx))
     
    380372         ENDDO
    381373      ENDDO
    382 c$OMP END DO NOWAIT     
     374c$OMP END DO NOWAIT
     375     
    383376c   ....  Calcul de la vitesse  verticale  ( en Pa*m*s  ou Kg/s )  ....
    384 c
    385 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
    386       DO l=1,llm
    387         do ig0=1,klon
    388            i=index_i(ig0)
    389            j=index_j(ig0)
    390            pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j)
    391         enddo
    392         if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln
    393         if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols
    394       ENDDO
    395 c$OMP END DO NOWAIT
     377c JG : ancien calcule de omega utilise dans physiq.F. Maintenant le flux
     378c      de masse est calclue dans advtrac_p.F 
     379c
     380cc$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
     381c      DO l=1,llm
     382c        do ig0=1,klon
     383c           i=index_i(ig0)
     384c           j=index_j(ig0)
     385c           pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j)
     386c        enddo
     387c       if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln
     388c       if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols
     389c      ENDDO
     390cc$OMP END DO NOWAIT
    396391
    397392c
     
    514509c
    515510      ENDIF
    516 #ifdef INCA
     511
     512c On change de grille, dynamique vers physiq, pour le flux de masse verticale
    517513      CALL gr_dyn_fi_p(llm,iip1,jjp1,klon,flxw,flxwfi)
    518 #endif
    519 
    520514
    521515c-----------------------------------------------------------------------
     
    548542        allocate(ztfi_omp(klon,llm))
    549543        allocate(zqfi_omp(klon,llm,nq))
    550         allocate(pvervel_omp(klon,llm))
     544c        allocate(pvervel_omp(klon,llm))
    551545        allocate(zdufi_omp(klon,llm))
    552546        allocate(zdvfi_omp(klon,llm))
     
    614608      enddo
    615609       
    616       do l=1,llm
    617         do i=1,klon
    618           pvervel_omp(i,l)=pvervel(offset+i,l)
    619         enddo
    620       enddo
     610c      do l=1,llm
     611c        do i=1,klon
     612c         pvervel_omp(i,l)=pvervel(offset+i,l)
     613c       enddo
     614c      enddo
    621615       
    622616      do l=1,llm
     
    671665     .             ztfi_omp,
    672666     .             zqfi_omp,
    673      .             pvervel_omp,
    674 #ifdef INCA
     667c     .             pvervel_omp,
     668c#ifdef INCA
    675669     .             flxwfi,
    676 #endif
     670c#endif
    677671     .             zdufi_omp,
    678672     .             zdvfi_omp,
     
    742736      enddo
    743737       
    744       do l=1,llm
    745         do i=1,klon
    746           pvervel(offset+i,l)=pvervel_omp(i,l)
    747         enddo
    748       enddo
     738c      do l=1,llm
     739c        do i=1,klon
     740c         pvervel(offset+i,l)=pvervel_omp(i,l)
     741c       enddo
     742c      enddo
    749743       
    750744      do l=1,llm
  • LMDZ4/trunk/libf/dyn3dpar/conf_gcm.F

    r764 r960  
    600600       offline = .FALSE.
    601601       CALL getin('offline',offline)
     602
     603!Config  Key  = config_inca
     604!Config  Desc = Choix de configuration de INCA
     605!Config  Def  = none
     606!Config  Help = Choix de configuration de INCA :
     607!Config         'none' = sans INCA
     608!Config         'chem' = INCA avec calcul de chemie
     609!Config         'aero' = INCA avec calcul des aerosols
     610      config_inca = 'none'
     611      CALL getin('config_inca',config_inca)
    602612
    603613
     
    643653      write(lunout,*)' tauyy = ', tauyy
    644654      write(lunout,*)' offline = ', offline
     655      write(lunout,*)' config_inca = ', config_inca
    645656
    646657      RETURN
     
    755766       offline = .FALSE.
    756767       CALL getin('offline',offline)
    757       write(lunout,*)' offline = ', offline
     768
     769!Config  Key  = config_inca
     770!Config  Desc = Choix de configuration de INCA
     771!Config  Def  = none
     772!Config  Help = Choix de configuration de INCA :
     773!Config         'none' = sans INCA
     774!Config         'chem' = INCA avec calcul de chemie
     775!Config         'aero' = INCA avec calcul des aerosols
     776      config_inca = 'none'
     777      CALL getin('config_inca',config_inca)
    758778
    759779
     
    799819      write(lunout,*)' tauy = ', tauy
    800820      write(lunout,*)' offline = ', offline
     821      write(lunout,*)' config_inca = ', config_inca
    801822c
    802823      RETURN
  • LMDZ4/trunk/libf/dyn3dpar/control.h

    r792 r960  
    1414     &              iperiod,iapp_tracvl,iconser,iecri,idissip,iphysiq , &
    1515     &              periodav,ecritphy,iecrimoy,dayref,anneeref,         &
    16      &              raz_date,offline,ip_ebil_dyn
     16     &              raz_date,offline,ip_ebil_dyn,config_inca
    1717
    1818      INTEGER   nday,day_step,iperiod,iapp_tracvl,iconser,iecri,        &
     
    2121      REAL periodav, ecritphy
    2222      logical offline
    23 
     23      CHARACTER*4 config_inca
    2424!-----------------------------------------------------------------------
  • LMDZ4/trunk/libf/dyn3dpar/gcm.F

    r949 r960  
    230230      call InitComgeomphy
    231231c$OMP END PARALLEL
     232
     233      IF (config_inca /= 'none') THEN
    232234#ifdef INCA
    233       call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday)
    234       call init_inca_para(iim,jjm+1,klon_glo,mpi_size,klon_mpi_para_nb,
    235      $ COMM_LMDZ)
    236 #endif
     235         call init_const_lmdz(nbtrac,anneeref,dayref,iphysiq,day_step,nday)
     236         call init_inca_para(iim,jjm+1,klon_glo,mpi_size,klon_mpi_para_nb,
     237     $        COMM_LMDZ)
     238#endif
     239      END IF
    237240
    238241c-----------------------------------------------------------------------
     
    262265      endif
    263266
     267      IF (config_inca /= 'none') THEN
    264268#ifdef INCA
    265       call init_inca_dim(klon,llm,iim,jjm,
    266      $     rlonu,rlatu,rlonv,rlatv)
    267 #endif
    268 
     269         call init_inca_dim(klon,llm,iim,jjm,
     270     $        rlonu,rlatu,rlonv,rlatv)
     271#endif
     272      END IF
    269273
    270274c le cas echeant, creation d un etat initial
  • LMDZ4/trunk/libf/dyn3dpar/iniadvtrac.F

    r764 r960  
    2727#include "dimensions.h"
    2828#include "advtrac.h"
     29#include "control.h"
    2930
    3031c   local
     
    5556      descrq(30)='PRA'
    5657
     58      IF (config_inca /= 'none') THEN
    5759#ifdef INCA
    58 
    59       CALL init_transport(
    60      $     hadv_flg,
    61      $     vadv_flg,
    62      $     conv_flg,
    63      $     pbl_flg,
    64      $     tracnam)
     60         CALL init_transport(
     61     $        hadv_flg,
     62     $        vadv_flg,
     63     $        conv_flg,
     64     $        pbl_flg,
     65     $        tracnam)
    6566#endif
    66 
     67      END IF
    6768c-----------------------------------------------------------------------
    6869c        Choix  des schemas d'advection pour l'eau et les traceurs
     
    109110c    dans fichier traceur.def
    110111c------------------------------------------------------------------
    111 #ifdef INCA
     112
     113      IF (config_inca /= 'none') THEN
    112114C le module de chimie fournit les noms des traceurs
    113115C et les schemas d'advection associes.
    114       tnom(1)='H2Ov'
    115       tnom(2)='H2Ol'
    116       nq=nbtrac+2
     116         tnom(1)='H2Ov'
     117         tnom(2)='H2Ol'
     118         nq=nbtrac+2
    117119     
    118120       if (nq.gt.nqmx) then
     
    127129      vadv(iq)= vadv_flg(iq)
    128130      end do
    129 #else
    130       print*,'ouverture de traceur.def'
    131       open(90,file='traceur.def',form='formatted',status='old',
    132      s     iostat=ierr)
     131      ELSE  ! config_inca=none
     132         print*,'ouverture de traceur.def'
     133         open(90,file='traceur.def',form='formatted',status='old',
     134     s        iostat=ierr)
    133135      if(ierr.eq.0) then
    134136        print*,'ouverture de traceur.def ok'
     
    171173      end do       
    172174
    173 #endif
     175      END IF ! config_inca
     176
    174177c a partir du nom court du traceur et du schema d'advection au detemine le nom long.
    175178        iiq=0
  • LMDZ4/trunk/libf/dyn3dpar/leapfrog_p.F

    r949 r960  
    146146
    147147      REAL,SAVE :: alpha(ip1jmp1,llm),beta(ip1jmp1,llm)
    148 #ifdef INCA
    149       REAL,SAVE :: flxw(ip1jmp1,llm)
    150 #endif
     148      REAL,SAVE :: flxw(ip1jmp1,llm) ! flux de masse verticale
    151149
    152150c+jld variables test conservation energie
     
    565563cc$OMP PARALLEL DEFAULT(SHARED)
    566564c
    567 #ifdef INCA
    568              CALL caladvtrac_p(q,pbaru,pbarv,
    569      *                      p, masse, dq,  teta,
    570      .             flxw,
    571      .             pk,
    572      .             iapptrac)
    573 #else
    574              CALL caladvtrac_p(q,pbaru,pbarv,
    575      *                      p, masse, dq,  teta,
    576      .             pk,iapptrac)
    577 #endif
    578 
    579 
    580 
     565         CALL caladvtrac_p(q,pbaru,pbarv,
     566     *        p, masse, dq,  teta,
     567     .        flxw,pk, iapptrac)
     568         
    581569c      do j=1,nqmx
    582570c        call WriteField_p('q'//trim(int2str(j)),
     
    722710     *                               jj_Nb_physic,2,2,Request_physic)
    723711        enddo
    724 #ifdef INCA
     712
    725713        call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm,
    726714     *                               jj_Nb_physic,2,2,Request_physic)
    727 #endif
    728715        call SetDistrib(jj_nb_Physic)
    729716       
     
    748735        CALL calfis_p( nq, lafin ,rdayvrai,time  ,
    749736     $               ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
    750      $               du,dv,dteta,dq,w,
    751 #ifdef INCA
     737     $               du,dv,dteta,dq,
    752738     $               flxw,
    753 #endif
    754739     $               clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi  )
    755740        ijb=ij_begin
Note: See TracChangeset for help on using the changeset viewer.