Ignore:
Timestamp:
Oct 7, 2013, 6:42:03 PM (11 years ago)
Author:
slebonnois
Message:

SL: Titan runs ! see DOC/chantiers/commit_importants.log

Location:
trunk/LMDZ.COMMON/libf/dyn3dpar
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3dpar/calfis_p.F

    r1019 r1056  
    3333      USE IOPHY
    3434#endif
    35       USE parallel_lmdz, ONLY : omp_chunk, using_mpi
     35      USE parallel_lmdz, ONLY : omp_chunk, using_mpi, AllGather_Field
    3636      USE Write_Field
    3737      Use Write_field_p
     
    4040      USE control_mod
    4141      USE cpdet_mod, only: tpot2t_p, t2tpot_p
     42
     43! used only for zonal averages
     44      USE moyzon_mod
    4245
    4346      IMPLICIT NONE
     
    99102#include "paramet.h"
    100103#include "temps.h"
     104#include "logic.h"
    101105
    102106      INTEGER ngridmx
     
    122126      REAL pphis(iip1,jjp1)
    123127      REAL pphi(iip1,jjp1,llm)
    124 c
     128
    125129      REAL pdvcov(iip1,jjm,llm)
    126130      REAL pducov(iip1,jjp1,llm)
     
    131135      REAL pdq(iip1,jjp1,llm,nqtot)
    132136      REAL flxw(iip1,jjp1,llm)  ! Flux de masse verticale sur la grille dynamique
    133 c
     137
    134138      REAL pps(iip1,jjp1)
    135139      REAL pp(iip1,jjp1,llmp1)
    136140      REAL ppk(iip1,jjp1,llm)
    137 c
     141
    138142      REAL pdvfi(iip1,jjm,llm)
    139143      REAL pdufi(iip1,jjp1,llm)
     
    150154      REAL,ALLOCATABLE,SAVE :: zplev(:,:),zplay(:,:)
    151155      REAL,ALLOCATABLE,SAVE :: zphi(:,:),zphis(:)
    152 c
     156
    153157      REAL,ALLOCATABLE,SAVE :: zufi(:,:), zvfi(:,:)
    154158      REAL,ALLOCATABLE,SAVE :: ztfi(:,:),zqfi(:,:,:)
     
    156160      REAL,ALLOCATABLE,SAVE :: zteta(:,:)
    157161      REAL,ALLOCATABLE,SAVE ::  zpk(:,:)
    158 c
     162
    159163! Ces calculs ne servent pas.
    160164! Si necessaire, decommenter ces variables et les calculs...
     
    167171      REAL,SAVE,ALLOCATABLE ::  flxwfi(:,:)     ! Flux de masse verticale sur la grille physiq
    168172
    169 c
    170173      REAL,ALLOCATABLE,SAVE :: zplev_omp(:,:)
    171174      REAL,ALLOCATABLE,SAVE :: zplay_omp(:,:)
     
    219222      REAL zsinbis(iim),zcosbis(iim),z1bis(iim)
    220223      REAL unskap, pksurcp
    221 c
     224      save unskap
     225
    222226cIM diagnostique PVteta, Amip2
    223227      INTEGER ntetaSTD
     
    248252
    249253      LOGICAL tracerdyn ! for generic/mars physics call ; possibly to get rid of
    250 c
     254
     255! For Titan only right now:
     256! to allow for 2D computation of microphys and chemistry
     257      LOGICAL,save :: flag_moyzon
     258      REAL,dimension(iip1,llm) :: tmpvar
     259      REAL,dimension(iip1,llmp1) :: tmpvarp1
     260      REAL,dimension(llm) :: tmpvarbar
     261      REAL,dimension(llmp1) :: tmpvarbarp1
     262
    251263c-----------------------------------------------------------------------
    252 c
     264
    253265c    1. Initialisations :
    254266c    --------------------
    255 c
     267
    256268
    257269      klon=klon_mpi
     
    259271      PVteta(:,:)=0.
    260272           
    261 c
    262273      IF ( firstcal )  THEN
    263274        debut = .TRUE.
     
    270281         STOP
    271282        ENDIF
     283
     284        unskap   = 1./ kappa
     285
     286        flag_moyzon = .false.
     287        if(moyzon_ch.or.moyzon_mu) then
     288         flag_moyzon = .true.
     289        endif
     290
    272291c$OMP MASTER
    273292      ALLOCATE(zpsrf(klon))
     
    286305      ALLOCATE(zteta(klon,llm))
    287306      ALLOCATE(zpk(klon,llm))
     307
     308      if (flag_moyzon) call moyzon_init
     309
     310c------------------------------------------------------------------
     311c moyennes globales pour les profils de pression et de temperature
     312        call AllGather_Field(pp,iip1*jjp1,llmp1)
     313        call AllGather_Field(pteta,iip1*jjp1,llm)
     314        call AllGather_Field(ppk,iip1*jjp1,llm)
     315        ALLOCATE(plevmoy(llm+1))
     316        ALLOCATE(playmoy(llm))
     317        ALLOCATE(tmoy(llm))
     318        ALLOCATE(tetamoy(llm))
     319        ALLOCATE(pkmoy(llm))
     320        plevmoy=0.
     321        do l=1,llmp1
     322         do i=1,iip1
     323          do j=1,jjp1
     324            plevmoy(l)=plevmoy(l)+pp(i,j,l)/(iip1*jjp1)
     325          enddo
     326         enddo
     327        enddo
     328        tetamoy=0.
     329        pkmoy=0.
     330        do l=1,llm
     331         do i=1,iip1
     332          do j=1,jjp1
     333            tetamoy(l)=tetamoy(l)+pteta(i,j,l)/(iip1*jjp1)
     334            pkmoy(l)=pkmoy(l)+ppk(i,j,l)/(iip1*jjp1)
     335          enddo
     336         enddo
     337        enddo
     338        playmoy = preff * (pkmoy/cpp) ** unskap
     339        call tpot2t_p(1,llm,tetamoy,tmoy,pkmoy)
     340c------------------------------------------------------------------
     341c + lat index
     342      allocate(klat(klon))
     343      do ig0=1,klon
     344        j=index_j(ig0)
     345        klat(ig0)=j
     346      enddo
     347c------------------------------------------------------------------
     348
    288349c$OMP END MASTER
    289350c$OMP BARRIER     
     
    292353      ENDIF
    293354
    294 c
    295 c
     355
    296356c-----------------------------------------------------------------------
    297357c   40. transformation des variables dynamiques en variables physiques:
     
    317377
    318378c   42. pression intercouches et fonction d'Exner:
    319 c
     379
    320380c   -----------------------------------------------------------------
    321381c     .... zplev  definis aux (llm +1) interfaces des couches  ....
     
    324384
    325385c    ...    Exner = cp * ( p(l) / preff ) ** kappa     ....
    326 c
    327        unskap   = 1./ kappa
    328 c
     386
    329387c      print *,omp_rank,'klon--->',klon
    330388c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     
    339397      ENDDO
    340398c$OMP END DO NOWAIT
     399      if (flag_moyzon) then
     400        call AllGather_Field(pp,iip1*jjp1,llmp1)
     401        j=index_j(1)
     402        tmpvarp1(:,:) = pp(:,j,:)
     403        call moyzon(llmp1,tmpvarp1,tmpvarbarp1)
     404        zplevbar_mpi(1,:) = tmpvarbarp1
     405        do ig0=2,klon
     406          j=index_j(ig0)
     407          if (j.ne.index_j(ig0-1)) then
     408            tmpvarp1(:,:) = pp(:,j,:)
     409            call moyzon(llmp1,tmpvarp1,tmpvarbarp1)
     410            zplevbar_mpi(ig0,:) = tmpvarbarp1
     411          else
     412            zplevbar_mpi(ig0,:) = zplevbar_mpi(ig0-1,:)
     413          endif
     414        enddo
     415      endif
     416
    341417! ADAPTATION GCM POUR CP(T)
     418c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    342419      DO l=1,llm
    343420!CDIR ON_ADB(index_i)
     
    351428      ENDDO
    352429c$OMP END DO NOWAIT
    353 
    354 c
    355 c
     430      if (flag_moyzon) then
     431        call AllGather_Field(pteta,iip1*jjp1,llm)
     432        call AllGather_Field(ppk,iip1*jjp1,llm)
     433        j=index_j(1)
     434        tmpvar(:,:) = pteta(:,j,:)
     435        call moyzon(llm,tmpvar,tmpvarbar)
     436        ztetabar_mpi(1,:) = tmpvarbar
     437        tmpvar(:,:) = ppk(:,j,:)
     438        call moyzon(llm,tmpvar,tmpvarbar)
     439        zpkbar_mpi(1,:) = tmpvarbar
     440        call tpot2t_p(1,llm,ztetabar_mpi(1,:),ztfibar_mpi(1,:),
     441     &                      zpkbar_mpi(1,:))
     442        do ig0=2,klon
     443          j=index_j(ig0)
     444          if (j.ne.index_j(ig0-1)) then
     445            tmpvar(:,:) = pteta(:,j,:)
     446            call moyzon(llm,tmpvar,tmpvarbar)
     447            ztetabar_mpi(ig0,:) = tmpvarbar
     448            tmpvar(:,:) = ppk(:,j,:)
     449            call moyzon(llm,tmpvar,tmpvarbar)
     450            zpkbar_mpi(ig0,:) = tmpvarbar
     451            call tpot2t_p(1,llm,ztetabar_mpi(ig0,:),ztfibar_mpi(ig0,:),
     452     &                          zpkbar_mpi(ig0,:))
     453          else
     454            zpkbar_mpi(ig0,:)   = zpkbar_mpi(ig0-1,:)
     455            ztetabar_mpi(ig0,:) = ztetabar_mpi(ig0-1,:)
     456            ztfibar_mpi(ig0,:)  = ztfibar_mpi(ig0-1,:)
     457          endif
     458        enddo
     459      endif
    356460
    357461c   43. temperature naturelle (en K) et pressions milieux couches .
     
    370474          pksurcp        = ppk(i,j,l) / cpp
    371475          zplay(ig0,l)   = preff * pksurcp ** unskap
    372 !          ztfi(ig0,l)    = pteta(i,j,l)  * pksurcp
    373476        enddo
    374 
    375477      ENDDO
    376478c$OMP END DO NOWAIT
     479      if (flag_moyzon) then
     480        zplaybar_mpi(:,:) = preff * (zpkbar_mpi(:,:)/cpp)**unskap
     481      endif
    377482
    378483c   43.bis traceurs (tous intensifs)
    379484c   ---------------
    380 c
    381485
    382486      DO iq=1,nqtot
    383          iiq=niadv(iq)
    384487c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    385488         DO l=1,llm
     
    389492             i=index_i(ig0)
    390493             j=index_j(ig0)
    391              zqfi(ig0,l,iq)  = pq(i,j,l,iiq)
     494             zqfi(ig0,l,iq)  = pq(i,j,l,iq)
    392495           enddo
    393496         ENDDO
    394497c$OMP END DO NOWAIT     
    395498      ENDDO ! of DO iq=1,nqtot
     499      if (flag_moyzon) then
     500       DO iq=1,nqtot
     501         call AllGather_Field(pq(:,:,:,iq),iip1*jjp1,llm)
     502         j=index_j(1)
     503         tmpvar(:,:) = pq(:,j,:,iq)
     504         call moyzon(llm,tmpvar,tmpvarbar)
     505         zqfibar_mpi(1,:,iq) = tmpvarbar
     506         do ig0=2,klon
     507          j=index_j(ig0)
     508          if (j.ne.index_j(ig0-1)) then
     509            tmpvar(:,:) = pq(:,j,:,iq)
     510            call moyzon(llm,tmpvar,tmpvarbar)
     511            zqfibar_mpi(ig0,:,iq) = tmpvarbar
     512          else
     513            zqfibar_mpi(ig0,:,iq) = zqfibar_mpi(ig0-1,:,iq)
     514          endif
     515        enddo
     516       ENDDO ! of DO iq=1,nqtot
     517      endif
    396518
    397519
     
    404526
    405527c$OMP BARRIER
    406 
    407528c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    408529      DO l=1,llm
     
    413534c$OMP END DO NOWAIT
    414535     
     536      if (flag_moyzon) then
     537        call AllGather_Field(pphis,iip1*jjp1,1)
     538        call AllGather_Field(pphi,iip1*jjp1,llm)
     539        j=index_j(1)
     540        tmpvar(:,1) = pphis(:,j)
     541        call moyzon(1,tmpvar(:,1),tmpvarbar(1))
     542        zphisbar_mpi(1) = tmpvarbar(1)
     543        tmpvar(:,:) = pphi(:,j,:)
     544        call moyzon(llm,tmpvar,tmpvarbar)
     545        zphibar_mpi(1,:) = tmpvarbar-zphisbar_mpi(1)
     546        do ig0=2,klon
     547          j=index_j(ig0)
     548          if (j.ne.index_j(ig0-1)) then
     549            tmpvar(:,1) = pphis(:,j)
     550            call moyzon(1,tmpvar(:,1),tmpvarbar(1))
     551            zphisbar_mpi(ig0) = tmpvarbar(1)
     552            tmpvar(:,:) = pphi(:,j,:)
     553            call moyzon(llm,tmpvar,tmpvarbar)
     554            zphibar_mpi(ig0,:) = tmpvarbar-zphisbar_mpi(ig0)
     555          else
     556            zphisbar_mpi(ig0)  = zphisbar_mpi(ig0-1)
     557            zphibar_mpi(ig0,:) = zphibar_mpi(ig0-1,:)
     558          endif
     559        enddo
     560      endif
    415561
    416562c
     
    563709        allocate(zdpsrf_omp(klon))
    564710        allocate(flxwfi_omp(klon,llm))
     711
     712        if (flag_moyzon) call moyzon_init_omp(klon)
     713
    565714        first_omp=.false.
    566715      endif
     
    664813        enddo
    665814      enddo
     815
     816      if (flag_moyzon) then
     817       do l=1,llm+1
     818        do i=1,klon
     819          zplevbar(i,l)=zplevbar_mpi(offset+i,l)
     820        enddo
     821       enddo
     822         
     823       do l=1,llm
     824        do i=1,klon 
     825          zplaybar(i,l)=zplaybar_mpi(offset+i,l)
     826        enddo
     827       enddo
     828       
     829       do l=1,llm
     830        do i=1,klon
     831          zphibar(i,l)=zphibar_mpi(offset+i,l)
     832        enddo
     833       enddo
     834               
     835      do i=1,klon
     836        zphisbar(i)=zphisbar_mpi(offset+i)
     837      enddo
     838     
     839      do l=1,llm
     840        do i=1,klon
     841          ztfibar(i,l)=ztfibar_mpi(offset+i,l)
     842        enddo
     843      enddo
     844       
     845      do iq=1,nqtot
     846        do l=1,llm
     847          do i=1,klon
     848            zqfibar(i,l,iq)=zqfibar_mpi(offset+i,l,iq)
     849          enddo
     850        enddo
     851       enddo
     852      endif
     853
    666854     
    667855c$OMP BARRIER
     
    10671255!cdir NODEP
    10681256      DO iq=1,nqtot
    1069          iiq=niadv(iq)
    10701257c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    10711258         DO l=1,llm
     
    10761263              i=index_i(ig0)
    10771264              j=index_j(ig0)
    1078               pdqfi(i,j,l,iiq) = zdqfi(ig0,l,iq)
    1079               if (i==1) pdqfi(iip1,j,l,iiq) = zdqfi(ig0,l,iq)
     1265              pdqfi(i,j,l,iq) = zdqfi(ig0,l,iq)
     1266              if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,iq)
    10801267            ENDDO
    10811268           
    10821269            IF (is_north_pole) then
    10831270              DO i=1,iip1
    1084                 pdqfi(i,1,l,iiq)    = zdqfi(1,l,iq)
     1271                pdqfi(i,1,l,iq)    = zdqfi(1,l,iq)
    10851272              ENDDO
    10861273            ENDIF
     
    10881275            IF (is_south_pole) then
    10891276              DO i=1,iip1
    1090                 pdqfi(i,jjp1,l,iiq) = zdqfi(klon,l,iq)
     1277                pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,iq)
    10911278              ENDDO
    10921279            ENDIF
  • trunk/LMDZ.COMMON/libf/dyn3dpar/conf_gcm.F

    r1024 r1056  
    643643      grilles_gcm_netcdf = .FALSE.
    644644      CALL getin('grilles_gcm_netcdf',grilles_gcm_netcdf)
     645
     646c----------------------------------------
     647c Parameters for zonal averages in the case of Titan
     648      moyzon_mu = .false.
     649      moyzon_ch = .false.
     650      if (planet_type=="titan") then
     651       CALL getin('moyzon_mu', moyzon_mu)
     652       CALL getin('moyzon_ch', moyzon_ch)
     653      endif
     654c----------------------------------------
    645655
    646656c----------------------------------------
     
    10071017      write(lunout,*)' ok_etat0 = ', ok_etat0
    10081018      write(lunout,*)' grilles_gcm_netcdf = ', grilles_gcm_netcdf
    1009 c
     1019      if (planet_type=="titan") then
     1020       write(lunout,*)' moyzon_mu = ', moyzon_mu
     1021       write(lunout,*)' moyzon_ch = ', moyzon_ch
     1022      endif
     1023
    10101024      RETURN
    10111025      END
  • trunk/LMDZ.COMMON/libf/dyn3dpar/leapfrog_p.F

    r1024 r1056  
    587587!$OMP BARRIER
    588588!$OMP MASTER
    589         call WriteField_p('temp',reshape(temp,(/iip1,jmp1,llm/)))
    590         call WriteField_p('tsurpk',reshape(tsurpk,(/iip1,jmp1,llm/)))
     589        call WriteField_p('temp',reshape(temp,(/iip1,jmp1,llm/)))
     590        call WriteField_p('tsurpk',reshape(tsurpk,(/iip1,jmp1,llm/)))
    591591!$OMP END MASTER       
    592592!$OMP BARRIER     
     
    10291029c      call WriteField_p('dvfi',reshape(dvfi,(/iip1,jjm,llm/)))
    10301030c      call WriteField_p('dtetafi',reshape(dtetafi,(/iip1,jmp1,llm/)))
    1031 c      call WriteField_p('dpfi',reshape(dpfi,(/iip1,jmp1/)))
    10321031cc$OMP END MASTER
    1033 c     
    1034 c      do j=1,nqtot
    1035 c        call WriteField_p('dqfi'//trim(int2str(j)),
    1036 c     .                reshape(dqfi(:,:,j),(/iip1,jmp1,llm/)))
    1037 c      enddo
    10381032
    10391033c      ajout des tendances physiques:
  • trunk/LMDZ.COMMON/libf/dyn3dpar/logic.h

    r495 r1056  
    1111     &  statcl,conser,apdiss,apdelq,saison,ecripar,fxyhypb,ysinus       &
    1212     &  ,read_start,ok_guide,ok_strato,tidal,ok_gradsfile               &
    13      &  ,ok_limit,ok_etat0,grilles_gcm_netcdf,hybrid
     13     &  ,ok_limit,ok_etat0,grilles_gcm_netcdf,hybrid                    &
     14     &  ,moyzon_mu,moyzon_ch
    1415
    1516      COMMON/logici/ iflag_phys,iflag_trac
     
    2122      logical hybrid ! vertical coordinate is hybrid if true (sigma otherwise)
    2223                     ! (only used if disvert_type==2)
     24      logical moyzon_mu,moyzon_ch ! used for zonal averages in Titan
    2325
    2426      integer iflag_phys,iflag_trac
Note: See TracChangeset for help on using the changeset viewer.