Ignore:
Timestamp:
May 27, 2008, 6:46:50 PM (17 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/dyn3dpar
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • 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.