Ignore:
Timestamp:
May 6, 2016, 12:30:29 PM (9 years ago)
Author:
emillour
Message:

All GCMs:
Further adaptations to keep up with changes in LMDZ5 concerning
physics/dynamics separation (up to rev r2420 of LMDZ5)

  • all physics packages:
  • added module callphysiq_mod.F90 in dynphy_lonlat/phy* which contains the routine "call_physiq" which is called by calfis* and calls the physics. This way different "physiq" routine from different physics packages may be called: The calfis* routines now exposes all available fields that might be transmitted to physiq but which is actually send (ie: expected/needed by physiq) is decided in call_physiq.
  • turned "physiq.F[90]" into module "physiq_mod.F[90]" for better control of "physiq" arguments. for phyvenus/phytitan, extracted gr_fi_ecrit from physiq.F as gr_fi_ecrit.F90 (note that it can only work in serial).
  • misc:
  • updated wxios.F90 to keep up with LMDZ5 modifications.
  • dyn3d_common:
  • infotrac.F90 keep up with LMDZ5 modifications (cosmetics)
  • dyn3d:
  • gcm.F90: cosmetic cleanup.
  • leapfrog.F90: fix computation of date as function of itau.
  • dyn3dpar:
  • gcm.F: cosmetic cleanup.
  • leapfrog_p.F90: fix computation of date as function of itau.

NB: physics are given the date corresponding to the end of the
physics step.

  • dynphy_lonlat:
  • calfis.F : added computation of relative wind vorticity.
  • calfis_p.F: added computation of relative wind vorticity (input required by Earth physics)

EM

Location:
trunk/LMDZ.COMMON/libf
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3d/gcm.F90

    r1543 r1549  
    8585  include "iniprint.h"
    8686  include "tracstoke.h"
    87 #ifdef INCA
    88 ! Only INCA needs these informations (from the Earth's physics)
    89 !#include "indicesol.h"
    90 #endif
    91 
    9287
    9388  REAL zdtvr
  • trunk/LMDZ.COMMON/libf/dyn3d/leapfrog.F

    r1508 r1549  
    298298   1  CONTINUE ! Matsuno Forward step begins here
    299299
     300c   date: (NB: date remains unchanged for Backward step)
     301c   -----
     302
    300303      jD_cur = jD_ref + day_ini - day_ref +                             &
    301      &          itau/day_step
     304     &          (itau+1)/day_step
    302305      jH_cur = jH_ref + start_time +                                    &
    303      &          mod(itau,day_step)/float(day_step)
     306     &          mod(itau+1,day_step)/float(day_step)
    304307      jD_cur = jD_cur + int(jH_cur)
    305308      jH_cur = jH_cur - int(jH_cur)
     
    349352c-----------------------------------------------------------------------
    350353
    351 c   date:
     354c   date: (NB: only leapfrog step requires recomputing date)
    352355c   -----
     356
     357      IF (leapf) THEN
     358        jD_cur = jD_ref + day_ini - day_ref +
     359     &            (itau+1)/day_step
     360        jH_cur = jH_ref + start_time +
     361     &            mod(itau+1,day_step)/float(day_step)
     362        jD_cur = jD_cur + int(jH_cur)
     363        jH_cur = jH_cur - int(jH_cur)
     364      ENDIF
    353365
    354366
     
    516528
    517529           jD_cur = jD_ref + day_ini - day_ref +                        &
    518      &          itau/day_step
     530     &          (itau+1)/day_step
    519531
    520532           IF ((planet_type .eq."generic").or.
     
    525537
    526538           jH_cur = jH_ref + start_time +                               &
    527      &          mod(itau,day_step)/float(day_step)
     539     &          mod(itau+1,day_step)/float(day_step)
     540           IF ((planet_type .eq."generic").or.
     541     &         (planet_type .eq."mars")) THEN
     542             jH_cur = jH_ref + start_time +                               &
     543     &          mod(itau,day_step)/float(day_step)
     544           ENDIF
    528545           jD_cur = jD_cur + int(jH_cur)
    529546           jH_cur = jH_cur - int(jH_cur)
  • trunk/LMDZ.COMMON/libf/dyn3d_common/infotrac.F90

    r1508 r1549  
    728728
    729729    do iq=nqo+1,nqtot
    730        write(lunout,*) 'infotrac 569: iq,tnom_0(iq)=',iq,tnom_0(iq)
     730!       write(lunout,*) 'infotrac 569: iq,tnom_0(iq)=',iq,tnom_0(iq)
    731731       do phase=1,nqo   
    732732        do ixt= 1,niso_possibles   
    733733         tnom_trac=trim(tnom_0(phase))//'_'
    734734         tnom_trac=trim(tnom_trac)//trim(tnom_iso(ixt))
    735          write(*,*) 'phase,ixt,tnom_trac=',phase,ixt,tnom_trac     
     735!         write(*,*) 'phase,ixt,tnom_trac=',phase,ixt,tnom_trac     
    736736         IF (tnom_0(iq) == tnom_trac) then
    737           write(lunout,*) 'Ce traceur est un isotope'
     737!          write(lunout,*) 'Ce traceur est un isotope'
    738738          nb_iso(ixt,phase)=nb_iso(ixt,phase)+1   
    739739          nb_isoind(phase)=nb_isoind(phase)+1   
     
    742742          indnum_fn_num(ixt)=iso_indnum(iq)
    743743          phase_num(iq)=phase
    744           write(lunout,*) 'iso_num(iq)=',iso_num(iq)
    745           write(lunout,*) 'iso_indnum(iq)=',iso_indnum(iq)
    746           write(lunout,*) 'indnum_fn_num(ixt)=',indnum_fn_num(ixt)
    747           write(lunout,*) 'phase_num(iq)=',phase_num(iq)
     744!          write(lunout,*) 'iso_num(iq)=',iso_num(iq)
     745!          write(lunout,*) 'iso_indnum(iq)=',iso_indnum(iq)
     746!          write(lunout,*) 'indnum_fn_num(ixt)=',indnum_fn_num(ixt)
     747!          write(lunout,*) 'phase_num(iq)=',phase_num(iq)
    748748          goto 20
    749749         else if (iqpere(iq).gt.0) then         
    750750          if (tnom_0(iqpere(iq)) == tnom_trac) then
    751            write(lunout,*) 'Ce traceur est le fils d''un isotope'
     751!           write(lunout,*) 'Ce traceur est le fils d''un isotope'
    752752           ! c'est un traceur d'isotope
    753753           nb_traciso(ixt,phase)=nb_traciso(ixt,phase)+1
     
    756756           zone_num(iq)=nb_traciso(ixt,phase)
    757757           phase_num(iq)=phase
    758            write(lunout,*) 'iso_num(iq)=',iso_num(iq)
    759            write(lunout,*) 'phase_num(iq)=',phase_num(iq)
    760            write(lunout,*) 'zone_num(iq)=',zone_num(iq)
     758!           write(lunout,*) 'iso_num(iq)=',iso_num(iq)
     759!           write(lunout,*) 'phase_num(iq)=',phase_num(iq)
     760!           write(lunout,*) 'zone_num(iq)=',zone_num(iq)
    761761           goto 20
    762762          endif !if (tnom_0(iqpere(iq)) == trim(tnom_0(phase))//trim(tnom_iso(ixt))) then
     
    767767      enddo !do iq=1,nqtot
    768768
    769       write(lunout,*) 'iso_num=',iso_num
    770       write(lunout,*) 'iso_indnum=',iso_indnum
    771       write(lunout,*) 'zone_num=',zone_num 
    772       write(lunout,*) 'phase_num=',phase_num
    773       write(lunout,*) 'indnum_fn_num=',indnum_fn_num
     769!      write(lunout,*) 'iso_num=',iso_num
     770!      write(lunout,*) 'iso_indnum=',iso_indnum
     771!      write(lunout,*) 'zone_num=',zone_num 
     772!      write(lunout,*) 'phase_num=',phase_num
     773!      write(lunout,*) 'indnum_fn_num=',indnum_fn_num
    774774
    775775      do ixt= 1,niso_possibles 
     
    824824    ! dimensions isotopique:
    825825    ntraciso=niso*(ntraceurs_zone+1)
    826     WRITE(lunout,*) 'niso=',niso
    827     WRITE(lunout,*) 'ntraceurs_zone,ntraciso=',ntraceurs_zone,ntraciso   
     826!    WRITE(lunout,*) 'niso=',niso
     827!    WRITE(lunout,*) 'ntraceurs_zone,ntraciso=',ntraceurs_zone,ntraciso   
    828828 
    829829    ! flags isotopiques:
     
    833833        ok_isotopes=.false.
    834834    endif
    835     WRITE(lunout,*) 'ok_isotopes=',ok_isotopes
     835!    WRITE(lunout,*) 'ok_isotopes=',ok_isotopes
    836836 
    837837    if (ok_isotopes) then
     
    843843        alpha_ideal=(/1.0,1.01,1.006,1.003,1.0/)
    844844    endif !if (ok_isotopes) then 
    845     WRITE(lunout,*) 'ok_iso_verif=',ok_iso_verif
    846     WRITE(lunout,*) 'ok_init_iso=',ok_init_iso
     845!    WRITE(lunout,*) 'ok_iso_verif=',ok_iso_verif
     846!    WRITE(lunout,*) 'ok_init_iso=',ok_init_iso
    847847
    848848    if (ntraceurs_zone.gt.0) then
     
    851851        ok_isotrac=.false.
    852852    endif   
    853     WRITE(lunout,*) 'ok_isotrac=',ok_isotrac
     853!    WRITE(lunout,*) 'ok_isotrac=',ok_isotrac
    854854
    855855    ! remplissage du tableau iqiso(ntraciso,phase)
     
    875875        index_trac(:,:)=0.0
    876876    endif !if (ok_isotrac) then
    877     write(lunout,*) 'index_trac=',index_trac   
     877!    write(lunout,*) 'index_trac=',index_trac   
    878878
    879879! Finalize :
  • trunk/LMDZ.COMMON/libf/dyn3dpar/gcm.F

    r1543 r1549  
    2828
    2929
    30 #ifdef INCA
    31 ! Only INCA needs these informations (from the Earth's physics)
    32       USE indice_sol_mod
    33 #endif
    34 
    3530! Ehouarn: the following are needed with (parallel) physics:
    3631#ifdef CPP_PHYS
     
    8681#include "iniprint.h"
    8782#include "tracstoke.h"
    88 #ifdef INCA
    89 ! Only INCA needs these informations (from the Earth's physics)
    90 #include "indicesol.h"
    91 #endif
    9283
    9384
     
    258249      endif
    259250#endif
    260 c-----------------------------------------------------------------------
    261 
    262       IF (type_trac == 'inca') THEN
    263 #ifdef INCA
    264          call init_const_lmdz(
    265      $        nbtr,anneeref,dayref,
    266      $        iphysiq,day_step,nday,
    267      $        nbsrf, is_oce,is_sic,
    268      $        is_ter,is_lic, calend)
    269 
    270          call init_inca_para(
    271      $        iim,jjm+1,llm,klon_glo,mpi_size,
    272      $        distrib_phys,COMM_LMDZ)
    273 #endif
    274       END IF
    275 
    276251c-----------------------------------------------------------------------
    277252c   Initialisation des traceurs
     
    507482
    508483c-----------------------------------------------------------------------
    509 c   Initialisation des dimensions d'INCA :
    510 c   --------------------------------------
    511       IF (type_trac == 'inca') THEN
    512 #ifdef INCA
    513 !$OMP PARALLEL
    514          CALL init_inca_dim(klon_omp,llm,iim,jjm,
    515      $        rlonu,rlatu,rlonv,rlatv)
    516 !$OMP END PARALLEL
    517 #endif
    518       END IF
    519 
    520 c-----------------------------------------------------------------------
    521484c   Initialisation des I/O :
    522485c   ------------------------
  • trunk/LMDZ.COMMON/libf/dyn3dpar/leapfrog_p.F

    r1508 r1549  
    313313   1  CONTINUE ! Matsuno Forward step begins here
    314314
     315c   date: (NB: date remains unchanged for Backward step)
     316c   -----
     317
    315318      jD_cur = jD_ref + day_ini - day_ref +                             &
    316      &          itau/day_step
     319     &          (itau+1)/day_step
    317320      jH_cur = jH_ref + start_time +                                    &
    318      &         mod(itau,day_step)/float(day_step)
     321     &         mod(itau+1,day_step)/float(day_step)
    319322      if (jH_cur > 1.0 ) then
    320323        jD_cur = jD_cur +1.
     
    414417c-----------------------------------------------------------------------
    415418
    416 c   date:
     419c   date:  (NB: only leapfrog step requires recomputing date)
    417420c   -----
     421
     422      IF (leapf) THEN
     423        jD_cur = jD_ref + day_ini - day_ref +
     424     &            (itau+1)/day_step
     425        jH_cur = jH_ref + start_time +
     426     &           mod(itau+1,day_step)/float(day_step)
     427        if (jH_cur > 1.0 ) then
     428          jD_cur = jD_cur +1.
     429          jH_cur = jH_cur -1.
     430        endif
     431      ENDIF
    418432
    419433
     
    858872
    859873           jD_cur = jD_ref + day_ini - day_ref
    860      $        + itau/day_step
     874     $        + (itau+1)/day_step
    861875
    862876           IF ((planet_type .eq."generic").or.
     
    867881
    868882           jH_cur = jH_ref + start_time +                                &
    869      &              mod(itau,day_step)/float(day_step)
    870 !         call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes)
     883     &              mod(itau+1,day_step)/float(day_step)
     884           IF ((planet_type .eq."generic").or.
     885     &         (planet_type .eq."mars")) THEN
     886             jH_cur = jH_ref + start_time +                               &
     887     &          mod(itau,day_step)/float(day_step)
     888           ENDIF
    871889           if (jH_cur > 1.0 ) then
    872890             jD_cur = jD_cur +1.
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/calfis.F

    r1459 r1549  
    3333      USE write_field
    3434      USE cpdet_mod, only: t2tpot,tpot2t
    35  
     35#ifdef CPP_PHYS
     36      USE callphysiq_mod, ONLY: call_physiq
     37#endif
     38
    3639! used only for zonal averages
    3740      USE moyzon_mod
     
    145148      REAL zphi(ngridmx,llm),zphis(ngridmx)
    146149
     150      REAL zrot(iip1,jjm,llm) ! AdlC May 2014
    147151      REAL zufi(ngridmx,llm), zvfi(ngridmx,llm)
     152      REAL zrfi(ngridmx,llm) ! relative wind vorticity
    148153      REAL ztfi(ngridmx,llm),zqfi(ngridmx,llm,nqtot)
    149154! ADAPTATION GCM POUR CP(T)
     
    572577
    573578
     579C  Alvaro de la Camara (May 2014)
     580C  46.1 Calcul de la vorticite et passage sur la grille physique
     581C  --------------------------------------------------------------
     582      DO l=1,llm
     583        do i=1,iim
     584          do j=1,jjm
     585            zrot(i,j,l) = (pvcov(i+1,j,l) - pvcov(i,j,l)
     586     $                   + pucov(i,j+1,l) - pucov(i,j,l))
     587     $                   / (cu(i,j)+cu(i,j+1))
     588     $                   / (cv(i+1,j)+cv(i,j)) *4
     589          enddo
     590        enddo
     591      ENDDO
     592
    574593c   46.champ v:
    575594c   -----------
     
    584603c     $         ( pdvcov(i,j-1,l)/cv(i,j-1) + pdvcov(i,j,l)/cv(i,j) )
    585604            ENDDO
     605               zrfi(ig0 + 1,l)= 0.25 *(zrot(iim,j-1,l)+zrot(iim,j,l)
     606     &                                +zrot(1,j-1,l)+zrot(1,j,l))
     607            DO i=2,iim
     608               zrfi(ig0 + i,l)= 0.25 *(zrot(i-1,j-1,l)+zrot(i-1,j,l)
     609     $                   +zrot(i,j-1,l)+zrot(i,j,l))   !  AdlC MAY 2014
     610            ENDDO
    586611         ENDDO
    587612      ENDDO
     
    613638         zvfi(1,l)  = SSUM(iim,zsin,1)/pi
    614639!         pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi
    615 
     640         zrfi(1, l) = 0.
    616641      ENDDO
    617642
     
    642667         zvfi(ngridmx,l)  = SSUM(iim,zsin,1)/pi
    643668!         pcvgv(ngridmx,l) = SSUM(iim,zsinbis,1)/pi
    644 
     669         zrfi(ngridmx, l) = 0.
    645670      ENDDO
    646671c
     
    674699         lafin_split=lafin.and.isplit==nsplit_phys
    675700
    676       if (planet_type.eq."earth") then
    677          CALL physiq (ngridmx,
    678      .             llm,
    679      .             debut_split,
    680      .             lafin_split,
    681      .             jD_cur,
    682      .             jH_cur_split,
    683      .             zdt_split,
    684      .             zplev,
    685      .             zplay,
    686      .             zphi,
    687      .             zphis,
    688      .             presnivs,
    689      .             zufi,
    690      .             zvfi,
    691      .             ztfi,
    692      .             zqfi,
    693      .             flxwfi,
    694      .             zdufi,
    695      .             zdvfi,
    696      .             zdtfi,
    697      .             zdqfi,
    698      .             zdpsrf,
    699      .             pducov)
    700 
    701       else if ( planet_type=="generic" ) then
    702 
    703          CALL physiq (ngridmx,     !! ngrid
    704      .             llm,            !! nlayer
    705      .             nqtot,          !! nq
    706      .             tname,          !! tracer names from dynamical core (given in infotrac)
    707      .             debut_split,    !! firstcall
    708      .             lafin_split,    !! lastcall
    709      .             jD_cur,         !! pday. see leapfrog
    710      .             jH_cur_split,   !! ptime "fraction of day"
    711      .             zdt_split,      !! ptimestep
    712      .             zplev,          !! pplev
    713      .             zplay,          !! pplay
    714      .             zphi,           !! pphi
    715      .             zufi,           !! pu
    716      .             zvfi,           !! pv
    717      .             ztfi,           !! pt
    718      .             zqfi,           !! pq
    719      .             flxwfi,         !! pw !! or 0. anyway this is for diagnostic. not used in physiq.
    720      .             zdufi,          !! pdu
    721      .             zdvfi,          !! pdv
    722      .             zdtfi,          !! pdt
    723      .             zdqfi,          !! pdq
    724      .             zdpsrf,         !! pdpsrf
    725      .             tracerdyn)      !! tracerdyn <-- utilite ???
    726 
    727       else if ( planet_type=="mars" ) then
    728 
    729         CALL physiq (ngridmx,    ! ngrid
    730      .             llm,          ! nlayer
    731      .             nqtot,        ! nq
    732      .             debut_split,  ! firstcall
    733      .             lafin_split,  ! lastcall
    734      .             jD_cur,       ! pday
    735      .             jH_cur_split, ! ptime
    736      .             zdt_split,    ! ptimestep
    737      .             zplev,        ! pplev
    738      .             zplay,        ! pplay
    739      .             zphi,         ! pphi
    740      .             zufi,         ! pu
    741      .             zvfi,         ! pv
    742      .             ztfi,         ! pt
    743      .             zqfi,         ! pq
    744      .             flxwfi,       ! pw
    745      .             zdufi,        ! pdu
    746      .             zdvfi,        ! pdv
    747      .             zdtfi,        ! pdt
    748      .             zdqfi,        ! pdq
    749      .             zdpsrf,       ! pdpsrf
    750      .             tracerdyn)    ! tracerdyn (somewhat obsolete)
    751 
    752       else if ((planet_type=="titan").or.(planet_type=="venus")) then
    753 
    754          CALL physiq (ngridmx,
    755      .             llm,
    756      .             nqtot,
    757      .             debut_split,
    758      .             lafin_split,
    759      .             jD_cur,
    760      .             jH_cur_split,
    761      .             zdt_split,
    762      .             zplev,
    763      .             zplay,
    764      .             zpk,
    765      .             zphi,
    766      .             zphis,
    767      .             presnivs,
    768      .             zufi,
    769      .             zvfi,
    770      .             ztfi,
    771      .             zqfi,
    772      .             flxwfi,
    773      .             zdufi,
    774      .             zdvfi,
    775      .             zdtfi,
    776      .             zdqfi,
    777      .             zdpsrf)
    778 
    779       else ! unknown "planet_type"
    780 
    781         write(lunout,*) "calfis_p: error, unknown planet_type: ",
    782      &                  trim(planet_type)
    783         stop
    784 
    785       endif ! planet_type
     701        CALL call_physiq(ngridmx,llm,nqtot,tname,
     702     &                   debut_split,lafin_split,
     703     &                   jD_cur,jH_cur_split,zdt_split,
     704     &                   zplev,zplay,
     705     &                   zpk,zphi,zphis,
     706     &                   presnivs,
     707     &                   zufi,zvfi,zrfi,ztfi,zqfi,
     708     &                   flxwfi,pducov,
     709     &                   zdufi,zdvfi,zdtfi,zdqfi,zdpsrf,
     710     &                   tracerdyn)
     711
     712!      if (planet_type.eq."earth") then
     713!         CALL physiq (ngridmx,
     714!     .             llm,
     715!     .             debut_split,
     716!     .             lafin_split,
     717!     .             jD_cur,
     718!     .             jH_cur_split,
     719!     .             zdt_split,
     720!     .             zplev,
     721!     .             zplay,
     722!     .             zphi,
     723!     .             zphis,
     724!     .             presnivs,
     725!     .             zufi,
     726!     .             zvfi,
     727!     .             ztfi,
     728!     .             zqfi,
     729!     .             flxwfi,
     730!     .             zdufi,
     731!     .             zdvfi,
     732!     .             zdtfi,
     733!     .             zdqfi,
     734!     .             zdpsrf,
     735!     .             pducov)
     736!
     737!      else if ( planet_type=="generic" ) then
     738!
     739!         CALL physiq (ngridmx,     !! ngrid
     740!     .             llm,            !! nlayer
     741!     .             nqtot,          !! nq
     742!     .             tname,          !! tracer names from dynamical core (given in infotrac)
     743!     .             debut_split,    !! firstcall
     744!     .             lafin_split,    !! lastcall
     745!     .             jD_cur,         !! pday. see leapfrog
     746!     .             jH_cur_split,   !! ptime "fraction of day"
     747!     .             zdt_split,      !! ptimestep
     748!     .             zplev,          !! pplev
     749!     .             zplay,          !! pplay
     750!     .             zphi,           !! pphi
     751!     .             zufi,           !! pu
     752!     .             zvfi,           !! pv
     753!     .             ztfi,           !! pt
     754!     .             zqfi,           !! pq
     755!     .             flxwfi,         !! pw !! or 0. anyway this is for diagnostic. not used in physiq.
     756!     .             zdufi,          !! pdu
     757!     .             zdvfi,          !! pdv
     758!     .             zdtfi,          !! pdt
     759!     .             zdqfi,          !! pdq
     760!     .             zdpsrf,         !! pdpsrf
     761!     .             tracerdyn)      !! tracerdyn <-- utilite ???
     762!
     763!      else if ( planet_type=="mars" ) then
     764!
     765!        CALL physiq (ngridmx,    ! ngrid
     766!     .             llm,          ! nlayer
     767!     .             nqtot,        ! nq
     768!     .             debut_split,  ! firstcall
     769!     .             lafin_split,  ! lastcall
     770!     .             jD_cur,       ! pday
     771!     .             jH_cur_split, ! ptime
     772!     .             zdt_split,    ! ptimestep
     773!     .             zplev,        ! pplev
     774!     .             zplay,        ! pplay
     775!     .             zphi,         ! pphi
     776!     .             zufi,         ! pu
     777!     .             zvfi,         ! pv
     778!     .             ztfi,         ! pt
     779!     .             zqfi,         ! pq
     780!     .             flxwfi,       ! pw
     781!     .             zdufi,        ! pdu
     782!     .             zdvfi,        ! pdv
     783!     .             zdtfi,        ! pdt
     784!     .             zdqfi,        ! pdq
     785!     .             zdpsrf,       ! pdpsrf
     786!     .             tracerdyn)    ! tracerdyn (somewhat obsolete)
     787!
     788!      else if ((planet_type=="titan").or.(planet_type=="venus")) then
     789!
     790!         CALL physiq (ngridmx,
     791!     .             llm,
     792!     .             nqtot,
     793!     .             debut_split,
     794!     .             lafin_split,
     795!     .             jD_cur,
     796!     .             jH_cur_split,
     797!     .             zdt_split,
     798!     .             zplev,
     799!     .             zplay,
     800!     .             zpk,
     801!     .             zphi,
     802!     .             zphis,
     803!     .             presnivs,
     804!     .             zufi,
     805!     .             zvfi,
     806!     .             ztfi,
     807!     .             zqfi,
     808!     .             flxwfi,
     809!     .             zdufi,
     810!     .             zdvfi,
     811!     .             zdtfi,
     812!     .             zdqfi,
     813!     .             zdpsrf)
     814!
     815!      else ! unknown "planet_type"
     816!
     817!        write(lunout,*) "calfis_p: error, unknown planet_type: ",
     818!     &                  trim(planet_type)
     819!        stop
     820!
     821!      endif ! planet_type
    786822
    787823         zufi(:,:)=zufi(:,:)+zdufi(:,:)*zdt_split
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/calfis_p.F

    r1543 r1549  
    3636#endif
    3737#ifdef CPP_PARA
    38       USE parallel_lmdz, ONLY : omp_chunk, using_mpi, AllGather_Field
     38      USE parallel_lmdz, ONLY: omp_chunk, using_mpi, AllGather_Field,
     39     &                         jjb_u,jje_u,jjb_v,jje_v,
     40     &                         jj_begin_dyn=>jj_begin,jj_end_dyn=>jj_end
    3941      USE Write_Field
    4042      Use Write_field_p
     
    4951      USE comconst_mod, ONLY: daysec,dtvr,dtphys,kappa,cpp,g,rad,pi
    5052      USE logic_mod, ONLY: moyzon_ch,moyzon_mu
     53#ifdef CPP_PHYS
     54      USE callphysiq_mod, ONLY: call_physiq
     55#endif
    5156
    5257      IMPLICIT NONE
     
    159164      REAL,ALLOCATABLE,SAVE :: zphi(:,:),zphis(:)
    160165
     166!      REAL zrot(iip1,jjb_v:jje_v,llm) ! AdlC May 2014
     167      REAL :: zrot(iip1,jjm,llm)
    161168      REAL,ALLOCATABLE,SAVE :: zufi(:,:), zvfi(:,:)
    162169      REAL,ALLOCATABLE,SAVE :: ztfi(:,:),zqfi(:,:,:)
     
    170177!      REAL,ALLOCATABLE,SAVE :: pcvgt(:,:), pcvgq(:,:,:)
    171178c
    172       REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:)
     179      REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:), zrfi(:,:)
    173180      REAL,ALLOCATABLE,SAVE :: zdtfi(:,:),zdqfi(:,:,:)
    174181      REAL,ALLOCATABLE,SAVE :: zdpsrf(:)
     
    183190      REAL,ALLOCATABLE,SAVE :: zufi_omp(:,:)
    184191      REAL,ALLOCATABLE,SAVE :: zvfi_omp(:,:)
     192      REAL,ALLOCATABLE,SAVE :: zrfi_omp(:,:)
    185193      REAL,ALLOCATABLE,SAVE :: ztfi_omp(:,:)
    186194      REAL,ALLOCATABLE,SAVE :: zqfi_omp(:,:,:)
     
    216224c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zpk_omp,zphi_omp,zphis_omp,
    217225c$OMP+                 presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,
    218 c$OMP+                 zqfi_omp,zdufi_omp,zdvfi_omp,
     226c$OMP+                 zrfi_omp,zqfi_omp,zdufi_omp,zdvfi_omp,
    219227c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp,
    220228c$OMP+                 zdufic_omp,zdvfic_omp,zdtfic_omp,zdqfic_omp)       
     
    244252      integer :: k,kstart,kend
    245253      INTEGER :: offset 
     254      INTEGER :: jjb,jje
    246255
    247256      LOGICAL tracerdyn ! for generic/mars physics call ; possibly to get rid of
     
    294303!      ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm))
    295304!      ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2))
    296       ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm))
     305      ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm),zrfi(klon,llm))
    297306      ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqtot))
    298307      ALLOCATE(zdpsrf(klon))
     
    610619c$OMP END DO NOWAIT
    611620
    612 c   46.champ v:
     621c
     622C  Alvaro de la Camara (May 2014)
     623C  46.1 Calcul de la vorticite et passage sur la grille physique
     624C  --------------------------------------------------------------
     625
     626      jjb=jj_begin_dyn-1
     627      jje=jj_end_dyn+1
     628      if (is_north_pole) jjb=1
     629      if (is_south_pole) jje=jjm
     630
     631c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     632
     633      DO l=1,llm
     634        do i=1,iim
     635          do j=jjb,jje
     636            zrot(i,j,l) = (pvcov(i+1,j,l) - pvcov(i,j,l)
     637     $                   + pucov(i,j+1,l) - pucov(i,j,l))
     638     $                   / (cu(i,j)+cu(i,j+1))
     639     $                   / (cv(i+1,j)+cv(i,j)) *4
     640          enddo
     641        enddo
     642      ENDDO
     643
     644
     645c   46.2champ v:
    613646c   -----------
    614647
     
    623656     $                       + pvcov(i,j,l)/cv(i,j) )
    624657   
     658          if (j==1 .OR. j==jjp1) then !  AdlC MAY 2014
     659            zrfi(ig0,l) = 0 !  AdlC MAY 2014
     660          else
     661            if(i==1)then
     662            zrfi(ig0,l)= 0.25 *(zrot(iim,j-1,l)+zrot(iim,j,l)
     663     $                   +zrot(1,j-1,l)+zrot(1,j,l))   !  AdlC MAY 2014
     664            else
     665            zrfi(ig0,l)= 0.25 *(zrot(i-1,j-1,l)+zrot(i-1,j,l)
     666     $                   +zrot(i,j-1,l)+zrot(i,j,l))   !  AdlC MAY 2014
     667            endif
     668          endif
     669
     670
    625671         ENDDO
    626672      ENDDO
     
    648694           zufi(1,l)  = SSUM(iim,zcos,1)/pi
    649695           zvfi(1,l)  = SSUM(iim,zsin,1)/pi
     696           zrfi(1,l)  = 0.
    650697 
    651698        ENDDO
     
    675722           zufi(klon,l)  = SSUM(iim,zcos,1)/pi
    676723           zvfi(klon,l)  = SSUM(iim,zsin,1)/pi
     724           zrfi(klon,l)  = 0.
    677725        ENDDO
    678726c$OMP END DO NOWAIT       
     
    706754        allocate(zufi_omp(klon,llm))
    707755        allocate(zvfi_omp(klon,llm))
     756        allocate(zrfi_omp(klon,llm))  ! LG Ari 2014
    708757        allocate(ztfi_omp(klon,llm))
    709758        allocate(zqfi_omp(klon,llm,nqtot))
     
    775824      do l=1,llm
    776825        do i=1,klon
     826          zrfi_omp(i,l)=zrfi(offset+i,l)
     827        enddo
     828      enddo
     829       
     830       
     831      do l=1,llm
     832        do i=1,klon
    777833          ztfi_omp(i,l)=ztfi(offset+i,l)
    778834        enddo
     
    880936         lafin_split=lafin.and.isplit==nsplit_phys
    881937
    882 
    883       if (planet_type=="earth") then
    884         CALL physiq (klon,
    885      .             llm,
    886      .             debut_split,
    887      .             lafin_split,
    888      .             jD_cur,
    889      .             jH_cur_split,
    890      .             zdt_split,
    891      .             zplev_omp,
    892      .             zplay_omp,
    893      .             zphi_omp,
    894      .             zphis_omp,
    895      .             presnivs_omp,
    896      .             zufi_omp,
    897      .             zvfi_omp,
    898      .             ztfi_omp,
    899      .             zqfi_omp,
    900      .             flxwfi_omp,
    901      .             zdufi_omp,
    902      .             zdvfi_omp,
    903      .             zdtfi_omp,
    904      .             zdqfi_omp,
    905      .             zdpsrf_omp,
    906      .             pducov)
    907 
    908       else if ( planet_type=="generic" ) then
    909 
    910       CALL physiq (klon,     !! ngrid
    911      .             llm,            !! nlayer
    912      .             nqtot,          !! nq
    913      .             tname,          !! tracer names from dynamical core (given in infotrac)
    914      .             debut_split,    !! firstcall
    915      .             lafin_split,    !! lastcall
    916      .             jD_cur,         !! pday. see leapfrog_p
    917      .             jH_cur_split,   !! ptime "fraction of day"
    918      .             zdt_split,      !! ptimestep
    919      .             zplev_omp,  !! pplev
    920      .             zplay_omp,  !! pplay
    921      .             zphi_omp,   !! pphi
    922      .             zufi_omp,   !! pu
    923      .             zvfi_omp,   !! pv
    924      .             ztfi_omp,   !! pt
    925      .             zqfi_omp,   !! pq
    926      .             flxwfi_omp, !! pw !! or 0. anyway this is for diagnostic. not used in physiq.
    927      .             zdufi_omp,  !! pdu
    928      .             zdvfi_omp,  !! pdv
    929      .             zdtfi_omp,  !! pdt
    930      .             zdqfi_omp,  !! pdq
    931      .             zdpsrf_omp, !! pdpsrf
    932      .             tracerdyn)      !! tracerdyn <-- utilite ???
    933 
    934       else if ( planet_type=="mars" ) then
    935 
    936         CALL physiq (klon,       ! ngrid
    937      .             llm,          ! nlayer
    938      .             nqtot,        ! nq
    939      .             debut_split,  ! firstcall
    940      .             lafin_split,  ! lastcall
    941      .             jD_cur,       ! pday
    942      .             jH_cur_split, ! ptime
    943      .             zdt_split,    ! ptimestep
    944      .             zplev_omp,    ! pplev
    945      .             zplay_omp,    ! pplay
    946      .             zphi_omp,     ! pphi
    947      .             zufi_omp,     ! pu
    948      .             zvfi_omp,     ! pv
    949      .             ztfi_omp,     ! pt
    950      .             zqfi_omp,     ! pq
    951      .             flxwfi_omp,   ! pw
    952      .             zdufi_omp,    ! pdu
    953      .             zdvfi_omp,    ! pdv
    954      .             zdtfi_omp,    ! pdt
    955      .             zdqfi_omp,    ! pdq
    956      .             zdpsrf_omp,   ! pdpsrf
    957      .             tracerdyn)    ! tracerdyn (somewhat obsolete)
    958 
    959       else if ((planet_type=="titan").or.(planet_type=="venus")) then
    960 
    961         CALL physiq (klon,
    962      .             llm,
    963      .             nqtot,
    964      .             debut_split,
    965      .             lafin_split,
    966      .             jD_cur,
    967      .             jH_cur_split,
    968      .             zdt_split,
    969      .             zplev_omp,
    970      .             zplay_omp,
    971      .             zpk_omp,
    972      .             zphi_omp,
    973      .             zphis_omp,
    974      .             presnivs_omp,
    975      .             zufi_omp,
    976      .             zvfi_omp,
    977      .             ztfi_omp,
    978      .             zqfi_omp,
    979      .             flxwfi_omp,
    980      .             zdufi_omp,
    981      .             zdvfi_omp,
    982      .             zdtfi_omp,
    983      .             zdqfi_omp,
    984      .             zdpsrf_omp)
    985 
    986       else ! unknown "planet_type"
    987 
    988         write(lunout,*) "calfis_p: error, unknown planet_type: ",
    989      &                  trim(planet_type)
    990         stop
    991 
    992       endif ! planet_type
     938        CALL call_physiq(klon,llm,nqtot,tname,
     939     &                   debut_split,lafin_split,
     940     &                   jD_cur,jH_cur_split,zdt_split,
     941     &                   zplev_omp,zplay_omp,
     942     &                   zpk_omp,zphi_omp,zphis_omp,
     943     &                   presnivs_omp,
     944     &                   zufi_omp,zvfi_omp,zrfi_omp,ztfi_omp,zqfi_omp,
     945     &                   flxwfi_omp,pducov,
     946     &                   zdufi_omp,zdvfi_omp,zdtfi_omp,zdqfi_omp,
     947     &                   zdpsrf_omp,tracerdyn)
     948
     949!      if (planet_type=="earth") then
     950!        CALL physiq (klon,
     951!     .             llm,
     952!     .             debut_split,
     953!     .             lafin_split,
     954!     .             jD_cur,
     955!     .             jH_cur_split,
     956!     .             zdt_split,
     957!     .             zplev_omp,
     958!     .             zplay_omp,
     959!     .             zphi_omp,
     960!     .             zphis_omp,
     961!     .             presnivs_omp,
     962!     .             zufi_omp,
     963!     .             zvfi_omp,
     964!     .             ztfi_omp,
     965!     .             zqfi_omp,
     966!     .             flxwfi_omp,
     967!     .             zdufi_omp,
     968!     .             zdvfi_omp,
     969!     .             zdtfi_omp,
     970!     .             zdqfi_omp,
     971!     .             zdpsrf_omp,
     972!     .             pducov)
     973!
     974!      else if ( planet_type=="generic" ) then
     975!
     976!      CALL physiq (klon,     !! ngrid
     977!     .             llm,            !! nlayer
     978!     .             nqtot,          !! nq
     979!     .             tname,          !! tracer names from dynamical core (given in infotrac)
     980!     .             debut_split,    !! firstcall
     981!     .             lafin_split,    !! lastcall
     982!     .             jD_cur,         !! pday. see leapfrog_p
     983!     .             jH_cur_split,   !! ptime "fraction of day"
     984!     .             zdt_split,      !! ptimestep
     985!     .             zplev_omp,  !! pplev
     986!     .             zplay_omp,  !! pplay
     987!     .             zphi_omp,   !! pphi
     988!     .             zufi_omp,   !! pu
     989!     .             zvfi_omp,   !! pv
     990!     .             ztfi_omp,   !! pt
     991!     .             zqfi_omp,   !! pq
     992!     .             flxwfi_omp, !! pw !! or 0. anyway this is for diagnostic. not used in physiq.
     993!     .             zdufi_omp,  !! pdu
     994!     .             zdvfi_omp,  !! pdv
     995!     .             zdtfi_omp,  !! pdt
     996!     .             zdqfi_omp,  !! pdq
     997!     .             zdpsrf_omp, !! pdpsrf
     998!     .             tracerdyn)      !! tracerdyn <-- utilite ???
     999!
     1000!      else if ( planet_type=="mars" ) then
     1001!
     1002!        CALL physiq (klon,       ! ngrid
     1003!     .             llm,          ! nlayer
     1004!     .             nqtot,        ! nq
     1005!     .             debut_split,  ! firstcall
     1006!     .             lafin_split,  ! lastcall
     1007!     .             jD_cur,       ! pday
     1008!     .             jH_cur_split, ! ptime
     1009!     .             zdt_split,    ! ptimestep
     1010!     .             zplev_omp,    ! pplev
     1011!     .             zplay_omp,    ! pplay
     1012!     .             zphi_omp,     ! pphi
     1013!     .             zufi_omp,     ! pu
     1014!     .             zvfi_omp,     ! pv
     1015!     .             ztfi_omp,     ! pt
     1016!     .             zqfi_omp,     ! pq
     1017!     .             flxwfi_omp,   ! pw
     1018!     .             zdufi_omp,    ! pdu
     1019!     .             zdvfi_omp,    ! pdv
     1020!     .             zdtfi_omp,    ! pdt
     1021!     .             zdqfi_omp,    ! pdq
     1022!     .             zdpsrf_omp,   ! pdpsrf
     1023!     .             tracerdyn)    ! tracerdyn (somewhat obsolete)
     1024!
     1025!      else if ((planet_type=="titan").or.(planet_type=="venus")) then
     1026!
     1027!        CALL physiq (klon,
     1028!     .             llm,
     1029!     .             nqtot,
     1030!     .             debut_split,
     1031!     .             lafin_split,
     1032!     .             jD_cur,
     1033!     .             jH_cur_split,
     1034!     .             zdt_split,
     1035!     .             zplev_omp,
     1036!     .             zplay_omp,
     1037!     .             zpk_omp,
     1038!     .             zphi_omp,
     1039!     .             zphis_omp,
     1040!     .             presnivs_omp,
     1041!     .             zufi_omp,
     1042!     .             zvfi_omp,
     1043!     .             ztfi_omp,
     1044!     .             zqfi_omp,
     1045!     .             flxwfi_omp,
     1046!     .             zdufi_omp,
     1047!     .             zdvfi_omp,
     1048!     .             zdtfi_omp,
     1049!     .             zdqfi_omp,
     1050!     .             zdpsrf_omp)
     1051!
     1052!      else ! unknown "planet_type"
     1053!
     1054!        write(lunout,*) "calfis_p: error, unknown planet_type: ",
     1055!     &                  trim(planet_type)
     1056!        stop
     1057!
     1058!      endif ! planet_type
    9931059         zufi_omp(:,:)=zufi_omp(:,:)+zdufi_omp(:,:)*zdt_split
    9941060         zvfi_omp(:,:)=zvfi_omp(:,:)+zdvfi_omp(:,:)*zdt_split
  • trunk/LMDZ.COMMON/libf/misc/wxios.F90

    r1508 r1549  
    191191                CALL xios_set_context_attr_hdl(g_ctx, calendar_type= "NoLeap")
    192192                IF (prt_level >= 10) WRITE(lunout,*) 'wxios_set_cal: Calendrier terrestre a 365 jours/an'
    193             CASE('earth_366d')
     193            CASE('gregorian')
    194194                CALL xios_set_context_attr_hdl(g_ctx, calendar_type= "Gregorian")
    195195                IF (prt_level >= 10) WRITE(lunout,*) 'wxios_set_cal: Calendrier gregorien'
Note: See TracChangeset for help on using the changeset viewer.