Ignore:
Timestamp:
Apr 2, 2016, 4:09:43 PM (9 years ago)
Author:
emillour
Message:

Mars GCM:

  • Got rid of references to "dimensions.h" from physics packages: use nbp_lon (=iim), nbp_lat (==jjp1) and nbp_lev from module mod_grid_phy_lmdz (in phy_common) instead.
  • Added "ioipsl_getin_p_mod.F90" (getin_p routine) in phy_common to correctly read in parameters from *.def files in a parallel environment.

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/writediagfi.F

    r1525 r1528  
    4040!=================================================================
    4141      use surfdat_h, only: phisfi
     42      use comgeomphy, only: airephy
    4243      use time_phylmdz_mod, only: ecritphy, day_step, iphysiq, day_ini
    4344      USE mod_phys_lmdz_para, only : is_parallel, is_mpi_root,
    4445     &                               is_master, gather
    45       USE mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo
     46      USE mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo,
     47     &                              nbp_lon, nbp_lat, nbp_lev
    4648      implicit none
    4749
    4850! Commons
    49 #include "dimensions.h"
    50 #include "paramet.h"
    51 #include "comgeom.h"
    52 #include "netcdf.inc"
     51      include "netcdf.inc"
    5352
    5453! Arguments on input:
     
    5655      character (len=*),intent(in) :: nom,titre,unite
    5756      integer,intent(in) :: dim
    58       real,intent(in) :: px(ngrid,llm)
     57      real,intent(in) :: px(ngrid,nbp_lev)
    5958
    6059! Local variables:
    6160
    62       real*4 dx3(iip1,jjp1,llm) ! to store a 3D data set
    63       real*4 dx2(iip1,jjp1)     ! to store a 2D (surface) data set
    64       real*4 dx1(llm)           ! to store a 1D (column) data set
     61      real*4 dx3(nbp_lon+1,nbp_lat,nbp_lev) ! to store a 3D data set
     62      real*4 dx2(nbp_lon+1,nbp_lat)     ! to store a 2D (surface) data set
     63      real*4 dx1(nbp_lev)           ! to store a 1D (column) data set
    6564      real*4 dx0
    6665
    6766      real*4,save :: date
    6867
    69       REAL phis(ip1jmp1)
     68      REAL phis((nbp_lon+1),nbp_lat)
     69      REAL area((nbp_lon+1),nbp_lat)
    7070
    7171      integer irythme
    7272      integer ierr,ierr2
    73       integer iq
    74       integer i,j,l,zmax , ig0
     73      integer i,j,l, ig0
    7574
    7675      integer,save :: zitau=0
     
    9897#ifdef CPP_PARA
    9998! Added to work in parallel mode
    100       real dx3_glop(klon_glo,llm)
    101       real dx3_glo(iim,jjp1,llm) ! to store a global 3D data set
     99      real dx3_glop(klon_glo,nbp_lev)
     100      real dx3_glo(nbp_lon,nbp_lat,nbp_lev) ! to store a global 3D data set
    102101      real dx2_glop(klon_glo)
    103       real dx2_glo(iim,jjp1)     ! to store a global 2D (surface) data set
     102      real dx2_glo(nbp_lon,nbp_lat)     ! to store a global 2D (surface) data set
    104103      real px2(ngrid)
    105 !      real dx1_glo(llm)          ! to store a 1D (column) data set
     104!      real dx1_glo(nbp_lev)          ! to store a 1D (column) data set
    106105!      real dx0_glo
    107106      real phisfi_glo(klon_glo) ! surface geopotential on global physics grid
     107      real areafi_glo(klon_glo) ! mesh area on global physics grid
    108108#else
    109109      real phisfi_glo(ngrid) ! surface geopotential on global physics grid
     110      real areafi_glo(ngrid) ! mesh area on global physics grid
    110111#endif
    111112
     
    181182          ! Gather phisfi() geopotential on physics grid
    182183          call Gather(phisfi,phisfi_glo)
     184          ! Gather airephy() mesh area on physics grid
     185          call Gather(airephy,areafi_glo)
    183186#else
    184187         phisfi_glo(:)=phisfi(:)
     188         areafi_glo(:)=airephy(:)
    185189#endif
    186190
     
    209213         ierr = NF_ENDDEF(nid)
    210214
     215         ! Build phis() and area()
     216         do i=1,nbp_lon+1 ! poles
     217           phis(i,1)=phisfi_glo(1)
     218           phis(i,nbp_lat)=phisfi_glo(klon_glo)
     219           ! for area, divide at the poles by nbp_lon
     220           area(i,1)=areafi_glo(1)/nbp_lon
     221           area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon
     222         enddo
     223         do j=2,nbp_lat-1
     224           ig0= 1+(j-2)*nbp_lon
     225           do i=1,nbp_lon
     226              phis(i,j)=phisfi_glo(ig0+i)
     227              area(i,j)=areafi_glo(ig0+i)
     228           enddo
     229           ! handle redundant point in longitude
     230           phis(nbp_lon+1,j)=phis(1,j)
     231           area(nbp_lon+1,j)=area(1,j)
     232         enddo
     233         
    211234         ! write "header" of file (longitudes, latitudes, geopotential, ...)
    212          call gr_fi_dyn(1,size(phisfi_glo),iip1,jjp1,phisfi_glo,phis)
    213          call iniwrite(nid,day_ini,phis)
     235         call iniwrite(nid,day_ini,phis,area)
    214236
    215237         endif ! of if (is_master)
     
    290312            call Grid1Dto2D_glo(dx3_glop,dx3_glo)
    291313            ! copy dx3_glo() to dx3(:) and add redundant longitude
    292             dx3(1:iim,:,:)=dx3_glo(1:iim,:,:)
    293             dx3(iip1,:,:)=dx3(1,:,:)
     314            dx3(1:nbp_lon,:,:)=dx3_glo(1:nbp_lon,:,:)
     315            dx3(nbp_lon+1,:,:)=dx3(1,:,:)
    294316          endif
    295317!$OMP END MASTER
     
    298320!         Passage variable physique -->  variable dynamique
    299321!         recast (copy) variable from physics grid to dynamics grid
    300            DO l=1,llm
    301              DO i=1,iip1
     322           DO l=1,nbp_lev
     323             DO i=1,nbp_lon+1
    302324                dx3(i,1,l)=px(1,l)
    303                 dx3(i,jjp1,l)=px(ngrid,l)
     325                dx3(i,nbp_lat,l)=px(ngrid,l)
    304326             ENDDO
    305              DO j=2,jjm
    306                 ig0= 1+(j-2)*iim
    307                 DO i=1,iim
     327             DO j=2,nbp_lat-1
     328                ig0= 1+(j-2)*nbp_lon
     329                DO i=1,nbp_lon
    308330                   dx3(i,j,l)=px(ig0+i,l)
    309331                ENDDO
    310                 dx3(iip1,j,l)=dx3(1,j,l)
     332                dx3(nbp_lon+1,j,l)=dx3(1,j,l)
    311333             ENDDO
    312334           ENDDO
     
    338360           corner(4)=ntime
    339361
    340            edges(1)=iip1
    341            edges(2)=jjp1
    342            edges(3)=llm
     362           edges(1)=nbp_lon+1
     363           edges(2)=nbp_lat
     364           edges(3)=nbp_lev
    343365           edges(4)=1
    344366!#ifdef NC_DOUBLE
     
    374396            call Grid1Dto2D_glo(dx2_glop,dx2_glo)
    375397            ! copy dx2_glo() to dx2(:) and add redundant longitude
    376             dx2(1:iim,:)=dx2_glo(1:iim,:)
    377             dx2(iip1,:)=dx2(1,:)
     398            dx2(1:nbp_lon,:)=dx2_glo(1:nbp_lon,:)
     399            dx2(nbp_lon+1,:)=dx2(1,:)
    378400          endif
    379401!$OMP END MASTER
     
    384406!         recast (copy) variable from physics grid to dynamics grid
    385407
    386              DO i=1,iip1
     408             DO i=1,nbp_lon+1
    387409                dx2(i,1)=px(1,1)
    388                 dx2(i,jjp1)=px(ngrid,1)
     410                dx2(i,nbp_lat)=px(ngrid,1)
    389411             ENDDO
    390              DO j=2,jjm
    391                 ig0= 1+(j-2)*iim
    392                 DO i=1,iim
     412             DO j=2,nbp_lat-1
     413                ig0= 1+(j-2)*nbp_lon
     414                DO i=1,nbp_lon
    393415                   dx2(i,j)=px(ig0+i,1)
    394416                ENDDO
    395                 dx2(iip1,j)=dx2(1,j)
     417                dx2(nbp_lon+1,j)=dx2(1,j)
    396418             ENDDO
    397419#endif
     
    420442           corner(2)=1
    421443           corner(3)=ntime
    422            edges(1)=iip1
    423            edges(2)=jjp1
     444           edges(1)=nbp_lon+1
     445           edges(2)=nbp_lat
    424446           edges(3)=1
    425447
     
    451473!         Passage variable physique -->  physique dynamique
    452474!         recast (copy) variable from physics grid to dynamics grid
    453           do l=1,llm
     475          do l=1,nbp_lev
    454476            dx1(l)=px(1,l)
    455477          enddo
     
    473495           corner(2)=ntime
    474496           
    475            edges(1)=llm
     497           edges(1)=nbp_lev
    476498           edges(2)=1
    477499!#ifdef NC_DOUBLE
Note: See TracChangeset for help on using the changeset viewer.