Changeset 1531 for trunk/LMDZ.GENERIC


Ignore:
Timestamp:
Apr 7, 2016, 9:17:30 AM (9 years ago)
Author:
mturbet
Message:

Generic GCM:

  • Fix buggy ouputs in 1D introduced by previous code modifications.

EM+MT

Location:
trunk/LMDZ.GENERIC
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/README

    r1529 r1531  
    11631163  on the global dynamics grid.
    11641164  As before, the slab ocean only works in serial.
     1165
     1166== 07/04/2016 == EM+MT
     1167- Fix buggy ouputs in 1D introduced by previous code modifications.
  • trunk/LMDZ.GENERIC/libf/phystd/dyn1d/rcm1d.F

    r1529 r1531  
    2121     &                        mugaz, rcp, omeg
    2222      use time_phylmdz_mod, only: daysec, dtphys, day_step, ecritphy,
    23      &                            nday
     23     &                            nday, iphysiq
    2424      use callkeys_mod, only: tracer,check_cpp_match,rings_shadow,
    2525     &                        specOLR,water,pceil,ok_slab_ocean
    2626      USE comvert_mod, ONLY: ap,bp,aps,bps,pa,preff
    2727      USE logic_mod, ONLY: hybrid,autozlevs
     28      use regular_lonlat_mod, only: init_regular_lonlat
     29      use planete_mod, only: ini_planete_mod
    2830      use inifis_mod, only: inifis
    2931      implicit none
     
    478480      write(*,*) " day_step = ",day_step
    479481
    480        
     482      iphysiq=1 ! in 1D model physics are called evry time step
    481483      ecritphy=day_step ! default value for ecritphy
    482484      PRINT *,'Nunber of steps between writediagfi ?'
     
    497499      write(*,*)"-------------------------------------"
    498500      write(*,*)"-------------------------------------"
     501
     502      ! initializations, as with iniphysiq.F90 for the 3D GCM
     503      CALL init_regular_lonlat(1,1,longitude,latitude,
     504     &                   (/0.,0./),(/0.,0./))
     505     
     506      call ini_planete_mod(nlayer,preff,ap,bp)
    499507
    500508!!! CALL INIFIS
  • trunk/LMDZ.GENERIC/libf/phystd/inistats.F

    r1529 r1531  
    1616      integer :: l,nsteppd
    1717      real, dimension(nbp_lev) ::  sig_s
    18       real :: lon_reg_ext(nbp_lon+1) ! extended longitudes
     18      real,allocatable :: lon_reg_ext(:) ! extended longitudes
    1919      integer :: idim_lat,idim_lon,idim_llm,idim_llmp1,idim_time
    2020      real, dimension(istime) :: lt
    2121      integer :: nvarid
    2222
     23
     24      IF (nbp_lon*nbp_lat==1) THEN
     25        ! 1D model
     26        ALLOCATE(lon_reg_ext(1))
     27      ELSE
     28        ! 3D model
     29        ALLOCATE(lon_reg_ext(nbp_lon+1))
     30      ENDIF
     31     
    2332      write (*,*)
    2433      write (*,*) '                        || STATS ||'
     
    4655     
    4756      lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon)
    48       !add extra redundant point (180 degrees, since lon_reg starts at -180
    49       lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     57      IF (nbp_lon*nbp_lat/=1) THEN
     58        ! In 3D, add extra redundant point (180 degrees,
     59        ! since lon_reg starts at -180)
     60        lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     61      ENDIF
    5062
    5163      if (is_master) then
     
    5971
    6072      ierr = NF_DEF_DIM (nid, "latitude", nbp_lat, idim_lat)
    61       ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_lon)
     73      IF (nbp_lon*nbp_lat==1) THEN
     74        ierr = NF_DEF_DIM (nid, "longitude", 1, idim_lon)
     75      ELSE
     76        ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_lon)
     77      ENDIF
    6278      ierr = NF_DEF_DIM (nid, "altitude", nbp_lev, idim_llm)
    6379      ierr = NF_DEF_DIM (nid, "llmp1", nbp_lev+1, idim_llmp1)
  • trunk/LMDZ.GENERIC/libf/phystd/iniwrite.F

    r1529 r1531  
    1       SUBROUTINE iniwrite(nid,idayref,phis,area)
     1      SUBROUTINE iniwrite(nid,idayref,phis,area,nbplon,nbplat)
    22
    33      use comsoil_h, only: mlayer, nsoilmx
     
    3535      integer,intent(in) :: nid        ! NetCDF file ID
    3636      INTEGER*4,intent(in) :: idayref  ! date (initial date for this run)
    37       real,intent(in) :: phis(nbp_lon+1,nbp_lat) ! surface geopotential
    38       real,intent(in) :: area(nbp_lon+1,nbp_lat) ! mesh area (m2)
     37      real,intent(in) :: phis(nbplon,nbp_lat) ! surface geopotential
     38      real,intent(in) :: area(nbplon,nbp_lat) ! mesh area (m2)
     39      integer,intent(in) :: nbplon,nbplat ! sizes of area and phis arrays
    3940
    4041c   Local:
     
    4445      REAL tab_cntrl(length) ! run parameters are stored in this array
    4546      INTEGER ierr
    46       REAl :: lon_reg_ext(nbp_lon+1) ! extended longitudes
     47      REAl,ALLOCATABLE :: lon_reg_ext(:) ! extended longitudes
    4748
    4849      integer :: nvarid,idim_index,idim_rlonv
     
    5152      integer, dimension(2) :: id 
    5253c-----------------------------------------------------------------------
     54
     55      IF (nbp_lon*nbp_lat==1) THEN
     56        ! 1D model
     57        ALLOCATE(lon_reg_ext(1))
     58      ELSE
     59        ! 3D model
     60        ALLOCATE(lon_reg_ext(nbp_lon+1))
     61      ENDIF
    5362
    5463      DO l=1,length
     
    102111!      ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)
    103112      ierr = NF_DEF_DIM (nid, "latitude", nbp_lat, idim_rlatu)
    104       ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv)
     113      IF (nbp_lon*nbp_lat==1) THEN
     114        ierr = NF_DEF_DIM (nid, "longitude", 1, idim_rlonv)
     115      ELSE
     116        ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv)
     117      ENDIF
    105118!      ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)
    106119      ierr = NF_DEF_DIM (nid, "interlayer", (nbp_lev+1), idim_llmp1)
     
    164177c
    165178c --------------------------
     179     
    166180      lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon)
    167       !add extra redundant point (180 degrees, since lon_reg starts at -180
    168       lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     181      IF (nbp_lon*nbp_lat/=1) THEN
     182        ! In 3D, add extra redundant point (180 degrees,
     183        ! since lon_reg starts at -180)
     184        lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     185      ENDIF
    169186
    170187      ierr = NF_REDEF (nid)
  • trunk/LMDZ.GENERIC/libf/phystd/iniwrite_specIR.F

    r1529 r1531  
    1       SUBROUTINE iniwrite_specIR(nid,idayref,area)
     1      SUBROUTINE iniwrite_specIR(nid,idayref,area,nbplon,nbplat)
    22
    33      use radinc_h, only: L_NSPECTI
     
    3636      integer,intent(in) :: nid        ! NetCDF file ID
    3737      INTEGER*4,intent(in) :: idayref  ! date (initial date for this run)
    38       real,intent(in) :: area(nbp_lon+1,nbp_lat) ! mesh area (m2)
     38      real,intent(in) :: area(nbplon,nbplat) ! mesh area (m2)
     39      integer,intent(in) :: nbplon,nbplat ! sizes of area
    3940
    4041c   Local:
     
    4445      REAL tab_cntrl(length) ! run parameters are stored in this array
    4546      INTEGER ierr
    46       REAl :: lon_reg_ext(nbp_lon+1) ! extended longitudes
     47      REAl,ALLOCATABLE :: lon_reg_ext(:) ! extended longitudes
    4748
    4849      integer :: nvarid,idim_index,idim_rlonu,idim_rlonv
     
    5354
    5455c-----------------------------------------------------------------------
     56
     57      IF (nbp_lon*nbp_lat==1) THEN
     58        ! 1D model
     59        ALLOCATE(lon_reg_ext(1))
     60      ELSE
     61        ! 3D model
     62        ALLOCATE(lon_reg_ext(nbp_lon+1))
     63      ENDIF
    5564
    5665      DO l=1,length
     
    103112      ierr = NF_DEF_DIM (nid, "index", length, idim_index)
    104113      ierr = NF_DEF_DIM (nid, "latitude", nbp_lat, idim_rlatu)
    105       ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv)
    106       ierr = NF_DEF_DIM (nid, "IR Wavenumber",L_NSPECTI,idim_bandsIR)
     114      IF (nbp_lon*nbp_lat==1) THEN
     115        ierr = NF_DEF_DIM (nid, "longitude", 1, idim_rlonv)
     116      ELSE
     117        ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv)
     118      ENDIF
     119      ierr = NF_DEF_DIM (nid, "IR_Wavenumber",L_NSPECTI,idim_bandsIR)
    107120
    108121      ierr = NF_ENDDEF(nid)
     
    149162      lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon)
    150163      !add extra redundant point (180 degrees, since lon_reg starts at -180
    151       lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     164      IF (nbp_lon*nbp_lat/=1) THEN
     165        ! In 3D, add extra redundant point (180 degrees,
     166        ! since lon_reg starts at -180)
     167        lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     168      ENDIF
    152169     
    153170      ierr = NF_REDEF (nid)
     
    175192      ! define variable
    176193#ifdef NC_DOUBLE
    177       ierr=NF_DEF_VAR(nid,"IR Wavenumber",NF_DOUBLE,1,
    178      .                                idim_bandsIR,nvarid)
    179 #else
    180       ierr=NF_DEF_VAR(nid,"IR Wavenumber",NF_FLOAT,1,
     194      ierr=NF_DEF_VAR(nid,"IR_Wavenumber",NF_DOUBLE,1,
     195     .                                idim_bandsIR,nvarid)
     196#else
     197      ierr=NF_DEF_VAR(nid,"IR_Wavenumber",NF_FLOAT,1,
    181198     .                                idim_bandsIR,nvarid)
    182199#endif
     
    199216      ! define variable
    200217#ifdef NC_DOUBLE
    201       ierr=NF_DEF_VAR(nid,"IR Bandwidth",NF_DOUBLE,1,
    202      .                                idim_bandsIR,nvarid)
    203 #else
    204       ierr=NF_DEF_VAR(nid,"IR Bandwidth",NF_FLOAT,1,
     218      ierr=NF_DEF_VAR(nid,"IR_Bandwidth",NF_DOUBLE,1,
     219     .                                idim_bandsIR,nvarid)
     220#else
     221      ierr=NF_DEF_VAR(nid,"IR_Bandwidth",NF_FLOAT,1,
    205222     .                                idim_bandsIR,nvarid)
    206223#endif
  • trunk/LMDZ.GENERIC/libf/phystd/iniwrite_specVI.F

    r1529 r1531  
    1       SUBROUTINE iniwrite_specVI(nid,idayref,area)
     1      SUBROUTINE iniwrite_specVI(nid,idayref,area,nbplon,nbplat)
    22
    33      use radinc_h, only: L_NSPECTV
     
    3636      integer,intent(in) :: nid        ! NetCDF file ID
    3737      INTEGER*4,INTENT(IN) :: idayref  ! date (initial date for this run)
    38       real,intent(in) :: area(nbp_lon+1,nbp_lat) ! mesh area (m2)
     38      real,intent(in) :: area(nbplon,nbplat) ! mesh area (m2)
     39      integer,intent(in) :: nbplon,nbplat ! sizes of area
    3940
    4041c   Local:
     
    4445      REAL tab_cntrl(length) ! run parameters are stored in this array
    4546      INTEGER ierr
    46       REAl :: lon_reg_ext(nbp_lon+1) ! extended longitudes
     47      REAl,ALLOCATABLE :: lon_reg_ext(:) ! extended longitudes
    4748
    4849      integer :: nvarid,idim_index,idim_rlonu,idim_rlonv
     
    5354
    5455c-----------------------------------------------------------------------
     56
     57      IF (nbp_lon*nbp_lat==1) THEN
     58        ! 1D model
     59        ALLOCATE(lon_reg_ext(1))
     60      ELSE
     61        ! 3D model
     62        ALLOCATE(lon_reg_ext(nbp_lon+1))
     63      ENDIF
    5564
    5665      DO l=1,length
     
    103112      ierr = NF_DEF_DIM (nid, "index", length, idim_index)
    104113      ierr = NF_DEF_DIM (nid, "latitude", nbp_lat, idim_rlatu)
    105       ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv)
    106       ierr = NF_DEF_DIM (nid, "VI Wavenumber",L_NSPECTV,idim_bandsVI)
     114      IF (nbp_lon*nbp_lat==1) THEN
     115        ierr = NF_DEF_DIM (nid, "longitude", 1, idim_rlonv)
     116      ELSE
     117        ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv)
     118      ENDIF
     119      ierr = NF_DEF_DIM (nid, "VI_Wavenumber",L_NSPECTV,idim_bandsVI)
    107120
    108121      ierr = NF_ENDDEF(nid)
     
    148161      lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon)
    149162      !add extra redundant point (180 degrees, since lon_reg starts at -180
    150       lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     163      IF (nbp_lon*nbp_lat/=1) THEN
     164        ! In 3D, add extra redundant point (180 degrees,
     165        ! since lon_reg starts at -180)
     166        lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     167      ENDIF
    151168
    152169      ierr = NF_REDEF (nid)
     
    174191      ! define variable
    175192#ifdef NC_DOUBLE
    176       ierr=NF_DEF_VAR(nid,"VI Wavenumber",NF_DOUBLE,1,
    177      .                                idim_bandsVI,nvarid)
    178 #else
    179       ierr=NF_DEF_VAR(nid,"VI Wavenumber",NF_FLOAT,1,
     193      ierr=NF_DEF_VAR(nid,"VI_Wavenumber",NF_DOUBLE,1,
     194     .                                idim_bandsVI,nvarid)
     195#else
     196      ierr=NF_DEF_VAR(nid,"VI_Wavenumber",NF_FLOAT,1,
    180197     .                                idim_bandsVI,nvarid)
    181198#endif
     
    199216      ! define variable
    200217#ifdef NC_DOUBLE
    201       ierr=NF_DEF_VAR(nid,"VI Bandwidth",NF_DOUBLE,1,
    202      .                                idim_bandsVI,nvarid)
    203 #else
    204       ierr=NF_DEF_VAR(nid,"VI Bandwidth",NF_FLOAT,1,
     218      ierr=NF_DEF_VAR(nid,"VI_Bandwidth",NF_DOUBLE,1,
     219     .                                idim_bandsVI,nvarid)
     220#else
     221      ierr=NF_DEF_VAR(nid,"VI_Bandwidth",NF_FLOAT,1,
    205222     .                                idim_bandsVI,nvarid)
    206223#endif
  • trunk/LMDZ.GENERIC/libf/phystd/iniwritesoil.F90

    r1529 r1531  
    1 subroutine iniwritesoil(nid,ngrid,inertia,area)
     1subroutine iniwritesoil(nid,ngrid,inertia,area,nbplon,nbplat)
    22
    33! initialization routine for 'writediagoil'. Here we create/define
     
    1717integer,intent(in) :: ngrid
    1818integer,intent(in) :: nid ! NetCDF output file ID
    19 real,intent(in) :: inertia(nbp_lon+1,nbp_lat,nsoilmx)
    20 real,intent(in) :: area(nbp_lon+1,nbp_lat) ! mesh area (m2)
     19real,intent(in) :: inertia(nbplon,nbplat,nsoilmx)
     20real,intent(in) :: area(nbplon,nbp_lat) ! mesh area (m2)
     21integer,intent(in) :: nbplon,nbplat ! sizes of area
    2122
    2223! Local variables:
     
    3334real,dimension(nbp_lon+1,nbp_lat,nsoilmx) :: data3 ! to store 3D data
    3435integer :: i,j,l,ig0
    35 real :: lon_reg_ext(nbp_lon+1) ! extended longitudes
     36real,allocatable :: lon_reg_ext(:) ! extended longitudes
     37
     38
     39if (nbp_lon*nbp_lat==1) then
     40  ! 1D model
     41  allocate(lon_reg_ext(1))
     42else
     43  ! 3D model
     44  allocate(lon_reg_ext(nbp_lon+1))
     45endif
    3646
    3747! 1. Define the dimensions
     
    4050
    4151! Define the dimensions
    42 ierr=NF_DEF_DIM(nid,"longitude",nbp_lon+1,idim_rlonv)
     52if (nbp_lon*nbp_lat==1) then
     53  ierr=NF_DEF_DIM(nid,"longitude",1,idim_rlonv)
     54else
     55  ierr=NF_DEF_DIM(nid,"longitude",nbp_lon+1,idim_rlonv)
     56endif
    4357if (ierr.ne.NF_NOERR) then
    4458  write(*,*)"iniwritesoil: Error, could not define longitude dimension"
     
    8296
    8397lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon)
    84 !add extra redundant point (180 degrees, since lon_reg starts at -180
    85 lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     98if (nbp_lon*nbp_lat/=1) then ! in 3D only:
     99  ! add extra redundant point (180 degrees, since lon_reg starts at -180
     100  lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1)
     101endif
    86102
    87103! Write longitude to file
  • trunk/LMDZ.GENERIC/libf/phystd/mkstat.F90

    r1529 r1531  
    1212use statto_mod, only: istime,count
    1313use mod_phys_lmdz_para, only : is_master
    14 use mod_grid_phy_lmdz, only : nbp_lon, nbp_lat, nbp_lev
     14use mod_grid_phy_lmdz, only : nbp_lon, nbp_lat, nbp_lev, klon_glo
    1515
    1616implicit none
     
    2222integer, dimension(5) :: dimids
    2323character (len=50) :: name,nameout,units,title
    24 real, dimension(nbp_lon+1,nbp_lat,nbp_lev) :: sum3d,square3d,mean3d,sd3d
    25 real, dimension(nbp_lon+1,nbp_lat) :: sum2d,square2d,mean2d,sd2d
     24real,allocatable :: sum3d(:,:,:),square3d(:,:,:),mean3d(:,:,:),sd3d(:,:,:)
     25real,allocatable :: sum2d(:,:),square2d(:,:),mean2d(:,:),sd2d(:,:)
    2626real, dimension(istime) :: time
    2727real, dimension(nbp_lat) :: lat
    28 real, dimension(nbp_lon+1) :: lon
     28real,allocatable :: lon(:)
    2929real, dimension(nbp_lev) :: alt
    3030logical :: lcopy=.true.
     
    3838if (is_master) then
    3939! only the master needs do this
     40if (klon_glo>1) then
     41  allocate(lon(nbp_lon+1))
     42  allocate(sum3d(nbp_lon+1,nbp_lat,nbp_lev))
     43  allocate(square3d(nbp_lon+1,nbp_lat,nbp_lev))
     44  allocate(mean3d(nbp_lon+1,nbp_lat,nbp_lev))
     45  allocate(sd3d(nbp_lon+1,nbp_lat,nbp_lev))
     46  allocate(sum2d(nbp_lon+1,nbp_lat))
     47  allocate(square2d(nbp_lon+1,nbp_lat))
     48  allocate(mean2d(nbp_lon+1,nbp_lat))
     49  allocate(sd2d(nbp_lon+1,nbp_lat))
     50else ! 1D model case
     51  allocate(lon(1))
     52  allocate(sum3d(1,1,nbp_lev))
     53  allocate(square3d(1,1,nbp_lev))
     54  allocate(mean3d(1,1,nbp_lev))
     55  allocate(sd3d(1,1,nbp_lev))
     56  allocate(sum2d(1,1))
     57  allocate(square2d(1,1))
     58  allocate(mean2d(1,1))
     59  allocate(sd2d(1,1))
     60endif
    4061
    4162ierr = NF_OPEN("stats.nc",NF_WRITE,nid)
     
    105126!      dimout(4)=timeid
    106127
    107       size=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     128      if (klon_glo>1) then ! general case
     129        size=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     130      else ! 1D model
     131        size=(/1,1,nbp_lev,1/)
     132      endif
    108133      do lt=1,istime
    109134         start=(/1,1,1,lt/)
     
    135160!      dimout(3)=timeid
    136161
    137       size=(/nbp_lon+1,nbp_lat,1,0/)
     162      if (klon_glo>1) then ! general case
     163        size=(/nbp_lon+1,nbp_lat,1,0/)
     164      else
     165        size=(/1,1,1,0/)
     166      endif
    138167      do lt=1,istime
    139168         start=(/1,1,lt,0/)
  • trunk/LMDZ.GENERIC/libf/phystd/writediagfi.F

    r1529 r1531  
    6363      real*4 dx1(nbp_lev)           ! to store a 1D (column) data set
    6464      real*4 dx0
     65      real*4 dx3_1d(1,nbp_lev) ! to store a profile with 1D model
     66      real*4 dx2_1d ! to store a surface value with 1D model
    6567
    6668      real*4,save :: date
     
    221223
    222224         ! Build phis() and area()
    223          do i=1,nbp_lon+1 ! poles
     225         IF (klon_glo>1) THEN
     226          do i=1,nbp_lon+1 ! poles
    224227           phis(i,1)=phisfi_glo(1)
    225228           phis(i,nbp_lat)=phisfi_glo(klon_glo)
     
    227230           area(i,1)=areafi_glo(1)/nbp_lon
    228231           area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon
    229          enddo
    230          do j=2,nbp_lat-1
     232          enddo
     233          do j=2,nbp_lat-1
    231234           ig0= 1+(j-2)*nbp_lon
    232235           do i=1,nbp_lon
     
    237240           phis(nbp_lon+1,j)=phis(1,j)
    238241           area(nbp_lon+1,j)=area(1,j)
    239          enddo
     242          enddo
     243         ENDIF
    240244         
    241245         ! write "header" of file (longitudes, latitudes, geopotential, ...)
    242          call iniwrite(nid,day_ini,phis,area)
     246         IF (klon_glo>1) THEN ! general 3D case
     247           call iniwrite(nid,day_ini,phis,area,nbp_lon+1,nbp_lat)
     248         ELSE ! 1D model
     249           call iniwrite(nid,day_ini,phisfi_glo(1),areafi_glo(1),1,1)
     250         ENDIF
    243251
    244252         endif ! of if (is_master)
     
    255263      endif ! if (firstnom.eq.'1234567890')
    256264
    257       if (ngrid.eq.1) then
     265      if (klon_glo.eq.1) then
    258266        ! in testphys1d, for the 1d version of the GCM, iphysiq and irythme
    259267        ! are undefined; so set them to 1
    260268        iphysiq=1
    261269        irythme=1
    262         ! NB:
    263270      endif
    264271
     
    327334!         Passage variable physique -->  variable dynamique
    328335!         recast (copy) variable from physics grid to dynamics grid
     336          IF (klon_glo>1) THEN ! General case
    329337           DO l=1,nbp_lev
    330338             DO i=1,nbp_lon+1
     
    340348             ENDDO
    341349           ENDDO
     350          ELSE ! 1D model case
     351           dx3_1d(1,1:nbp_lev)=px(1,1:nbp_lev)
     352          ENDIF
    342353#endif
    343354!         Ecriture du champs
     
    367378           corner(4)=ntime
    368379
    369            edges(1)=nbp_lon+1
     380           IF (klon_glo==1) THEN
     381             edges(1)=1
     382           ELSE
     383             edges(1)=nbp_lon+1
     384           ENDIF
    370385           edges(2)=nbp_lat
    371386           edges(3)=nbp_lev
     
    378393!           write(*,*)"       edges()=",edges
    379394!           write(*,*)"       dx3()=",dx3
    380            ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     395           IF (klon_glo>1) THEN ! General case
     396             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     397           ELSE
     398             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3_1d)
     399           ENDIF
    381400!#endif
    382401
    383402           if (ierr.ne.NF_NOERR) then
    384403              write(*,*) "***** PUT_VAR problem in writediagfi"
    385               write(*,*) "***** with ",nom
     404              write(*,*) "***** with dx3: ",nom
    386405              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    387 c             call abort
     406              stop
    388407           endif
    389408
     
    412431!         Passage variable physique -->  physique dynamique
    413432!         recast (copy) variable from physics grid to dynamics grid
    414 
     433          IF (klon_glo>1) THEN ! General case
    415434             DO i=1,nbp_lon+1
    416435                dx2(i,1)=px(1,1)
     
    424443                dx2(nbp_lon+1,j)=dx2(1,j)
    425444             ENDDO
     445          ELSE ! 1D model case
     446            dx2_1d=px(1,1)
     447          ENDIF
    426448#endif
    427449
     
    449471           corner(2)=1
    450472           corner(3)=ntime
    451            edges(1)=nbp_lon+1
     473           IF (klon_glo==1) THEN
     474             edges(1)=1
     475           ELSE
     476             edges(1)=nbp_lon+1
     477           ENDIF
    452478           edges(2)=nbp_lat
    453479           edges(3)=1
     
    457483!           ierr = NF_PUT_VARA_DOUBLE (nid,varid,corner,edges,dx2)
    458484!#else         
    459            ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx2)
     485           IF (klon_glo>1) THEN ! General case
     486             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx2)
     487           ELSE
     488             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx2_1d)
     489           ENDIF
    460490!#endif     
    461491
    462492           if (ierr.ne.NF_NOERR) then
    463493              write(*,*) "***** PUT_VAR matter in writediagfi"
    464               write(*,*) "***** with ",nom
     494              write(*,*) "***** with dx2: ",nom
    465495              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    466 c             call abort
     496              stop
    467497           endif
    468498
     
    512542           if (ierr.ne.NF_NOERR) then
    513543              write(*,*) "***** PUT_VAR problem in writediagfi"
    514               write(*,*) "***** with ",nom
     544              write(*,*) "***** with dx1: ",nom
    515545              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    516 c             call abort
     546              stop
    517547           endif
    518548
     
    550580           if (ierr.ne.NF_NOERR) then
    551581              write(*,*) "***** PUT_VAR matter in writediagfi"
    552               write(*,*) "***** with ",nom
     582              write(*,*) "***** with dx0: ",nom
    553583              write(*,*) 'ierr=', ierr,": ",NF_STRERROR(ierr)
    554 c             call abort
     584              stop
    555585           endif
    556586
  • trunk/LMDZ.GENERIC/libf/phystd/writediagsoil.F90

    r1529 r1531  
    3636real*4,dimension(nbp_lon+1,nbp_lat) :: data2 ! to store 2D data
    3737real*4 :: data0 ! to store 0D data
     38real*4 :: data3_1d(1,nsoilmx) ! to store a profile in 1D model
     39real*4 :: data2_1d ! to store surface value with 1D model
    3840integer :: i,j,l ! for loops
    3941integer :: ig0
     
    108110
    109111   ! build inertia() and area()
    110    do i=1,nbp_lon+1 ! poles
     112   if (klon_glo>1) then
     113    do i=1,nbp_lon+1 ! poles
    111114     inertia(i,1,1:nsoilmx)=inertiafi_glo(1,1:nsoilmx)
    112115     inertia(i,nbp_lat,1:nsoilmx)=inertiafi_glo(klon_glo,1:nsoilmx)
     
    114117     area(i,1)=areafi_glo(1)/nbp_lon
    115118     area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon
    116    enddo
    117    do j=2,nbp_lat-1
     119    enddo
     120    do j=2,nbp_lat-1
    118121     ig0= 1+(j-2)*nbp_lon
    119122     do i=1,nbp_lon
     
    124127     inertia(nbp_lon+1,j,1:nsoilmx)=inertia(1,j,1:nsoilmx)
    125128     area(nbp_lon+1,j)=area(1,j)
    126    enddo
     129    enddo
     130   endif
    127131   
    128132   ! write "header" of file (longitudes, latitudes, geopotential, ...)
    129    call iniwritesoil(nid,ngrid,inertia,area)
     133   if (klon_glo>1) then ! general 3D case
     134     call iniwritesoil(nid,ngrid,inertia,area,nbp_lon+1,nbp_lat)
     135   else ! 1D model
     136     call iniwritesoil(nid,ngrid,inertiafi_glo(1,:),areafi_glo(1),1,1)
     137   endif
    130138
    131139  endif ! of if (is_master)
     
    189197!$OMP BARRIER
    190198#else
    191   do l=1,nsoilmx
     199  if (klon_glo>1) then ! General case
     200   do l=1,nsoilmx
    192201    ! handle the poles
    193202    do i=1,nbp_lon+1
     
    203212      data3(nbp_lon+1,j,l)=data3(1,j,l) ! extra (modulo) longitude
    204213    enddo
    205   enddo
     214   enddo
     215  else ! 1D model case
     216   data3_1d(1,1:nsoilmx)=px(1,1:nsoilmx)
     217  endif
    206218#endif
    207219 
     
    230242  corners(4)=ntime
    231243 
    232   edges(1)=nbp_lon+1
     244  if (klon_glo==1) then
     245    edges(1)=1
     246  else
     247    edges(1)=nbp_lon+1
     248  endif
    233249  edges(2)=nbp_lat
    234250  edges(3)=nsoilmx
     
    239255!  ierr=NF_PUT_VARA_DOUBLE(nid,varid,corners,edges,data3)
    240256!#else
    241   ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data3)
     257  if (klon_glo>1) then
     258    ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data3)
     259  else
     260    ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data3_1d)
     261  endif
    242262!#endif
    243263  if (ierr.ne.NF_NOERR) then
     
    264284!$OMP BARRIER
    265285#else
    266   ! handle the poles
    267   do i=1,nbp_lon+1
    268     data2(i,1)=px(1,1)
    269     data2(i,nbp_lat)=px(ngrid,1)
    270   enddo
    271   ! rest of the grid
    272   do j=2,nbp_lat-1
    273     ig0=1+(j-2)*nbp_lon
    274     do i=1,nbp_lon
    275       data2(i,j)=px(ig0+i,1)
    276     enddo
    277     data2(nbp_lon+1,j)=data2(1,j) ! extra (modulo) longitude
    278   enddo
     286  if (klon_glo>1) then ! general case
     287    ! handle the poles
     288    do i=1,nbp_lon+1
     289      data2(i,1)=px(1,1)
     290      data2(i,nbp_lat)=px(ngrid,1)
     291    enddo
     292    ! rest of the grid
     293    do j=2,nbp_lat-1
     294      ig0=1+(j-2)*nbp_lon
     295      do i=1,nbp_lon
     296        data2(i,j)=px(ig0+i,1)
     297      enddo
     298      data2(nbp_lon+1,j)=data2(1,j) ! extra (modulo) longitude
     299    enddo
     300  else ! 1D model case
     301    data2_1d=px(1,1)
     302  endif
    279303#endif
    280304
     
    301325  corners(3)=ntime
    302326 
    303   edges(1)=nbp_lon+1
     327  if (klon_glo==1) then
     328    edges(1)=1
     329  else
     330    edges(1)=nbp_lon+1
     331  endif
    304332  edges(2)=nbp_lat
    305333  edges(3)=1
     
    309337!  ierr=NF_PUT_VARA_DOUBLE(nid,varid,corners,edges,data2)
    310338!#else
    311   ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data2)
     339  if (klon_glo>1) then ! General case
     340    ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data2)
     341  else
     342    ierr=NF_PUT_VARA_REAL(nid,varid,corners,edges,data2_1d)
     343  endif
    312344!#endif
    313345  if (ierr.ne.NF_NOERR) then
  • trunk/LMDZ.GENERIC/libf/phystd/writediagspecIR.F

    r1529 r1531  
    8787      real area((nbp_lon+1),nbp_lat)
    8888! added by RDW for OLR output
    89        real dx3(nbp_lon+1,nbp_lat,L_NSPECTI) ! to store the data set
     89      real dx3(nbp_lon+1,nbp_lat,L_NSPECTI) ! to store the data set
     90      real dx3_1d(1,L_NSPECTI) ! to store the data with 1D model
    9091
    9192#ifdef CPP_PARA
     
    152153
    153154         ! Build area()
    154          do i=1,nbp_lon+1 ! poles
     155         IF (klon_glo>1) THEN
     156          do i=1,nbp_lon+1 ! poles
    155157           ! divide at the poles by nbp_lon
    156158           area(i,1)=areafi_glo(1)/nbp_lon
    157159           area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon
    158          enddo
    159          do j=2,nbp_lat-1
     160          enddo
     161          do j=2,nbp_lat-1
    160162           ig0= 1+(j-2)*nbp_lon
    161163           do i=1,nbp_lon
     
    164166           ! handle redundant point in longitude
    165167           area(nbp_lon+1,j)=area(1,j)
    166          enddo
     168          enddo
     169         ENDIF
    167170
    168171         ! write "header" of file (longitudes, latitudes, area, ...)
    169          call iniwrite_specIR(nid,day_ini,area)
     172         IF (klon_glo>1) THEN ! general 3D case
     173           call iniwrite_specIR(nid,day_ini,area,nbp_lon+1,nbp_lat)
     174         ELSE
     175           call iniwrite_specIR(nid,day_ini,areafi_glo(1),1,1)
     176         ENDIF
    170177         endif ! of if (is_master)
    171178
     
    245252!$OMP BARRIER
    246253#else
     254          IF (klon_glo>1) THEN ! General case
    247255           DO l=1,L_NSPECTI
    248256             DO i=1,nbp_lon+1
     
    258266             ENDDO
    259267           ENDDO
     268          ELSE ! 1D model case
     269            dx3_1d(1,1:L_NSPECTI)=px(1,1:L_NSPECTI)
     270          ENDIF
    260271#endif
    261272
     
    269280              ierr= NF_INQ_DIMID(nid,"longitude",id(1))
    270281              ierr= NF_INQ_DIMID(nid,"latitude",id(2))
    271               ierr= NF_INQ_DIMID(nid,"IR Wavenumber",id(3))
     282              ierr= NF_INQ_DIMID(nid,"IR_Wavenumber",id(3))
    272283              ierr= NF_INQ_DIMID(nid,"Time",id(4))
    273284
     
    285296           corner(4)=ntime
    286297
    287            edges(1)=nbp_lon+1
     298           IF (klon_glo==1) THEN
     299             edges(1)=1
     300           ELSE
     301             edges(1)=nbp_lon+1
     302           ENDIF
    288303           edges(2)=nbp_lat
    289304           edges(3)=L_NSPECTI
    290305           edges(4)=1
    291306#ifdef NC_DOUBLE
    292            ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3)
    293 #else
    294            ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     307           IF (klon_glo>1) THEN ! General case
     308             ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3)
     309           ELSE
     310             ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3_1d)
     311           ENDIF
     312#else
     313           IF (klon_glo>1) THEN ! General case
     314             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     315           ELSE
     316             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3_1d)
     317           ENDIF
    295318#endif
    296319
  • trunk/LMDZ.GENERIC/libf/phystd/writediagspecVI.F

    r1529 r1531  
    8787      real area((nbp_lon+1),nbp_lat)
    8888! added by RDW for OSR output
    89        real dx3(nbp_lon+1,nbp_lat,L_NSPECTV) ! to store the data set
     89      real dx3(nbp_lon+1,nbp_lat,L_NSPECTV) ! to store the data set
     90      real dx3_1d(1,L_NSPECTV) ! to store the data with 1D model
    9091
    9192#ifdef CPP_PARA
     
    151152
    152153         ! Build area()
    153          do i=1,nbp_lon+1 ! poles
     154         IF (klon_glo>1) THEN
     155          do i=1,nbp_lon+1 ! poles
    154156           ! divide at the poles by nbp_lon
    155157           area(i,1)=areafi_glo(1)/nbp_lon
    156158           area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon
    157          enddo
    158          do j=2,nbp_lat-1
     159          enddo
     160          do j=2,nbp_lat-1
    159161           ig0= 1+(j-2)*nbp_lon
    160162           do i=1,nbp_lon
     
    163165           ! handle redundant point in longitude
    164166           area(nbp_lon+1,j)=area(1,j)
    165          enddo
     167          enddo
     168         ENDIF
    166169
    167170         ! write "header" of file (longitudes, latitudes, geopotential, ...)
    168          call iniwrite_specVI(nid,day_ini,area)
     171         IF (klon_glo>1) THEN ! general 3D case
     172           call iniwrite_specVI(nid,day_ini,area,nbp_lon+1,nbp_lat)
     173         ELSE
     174           call iniwrite_specVI(nid,day_ini,areafi_glo(1),1,1)
     175         ENDIF
    169176         endif ! of if (is_master)
    170177
     
    244251!$OMP BARRIER
    245252#else
     253          IF (klon_glo>1) THEN ! General case
    246254           DO l=1,L_NSPECTV
    247255             DO i=1,nbp_lon+1
     
    257265             ENDDO
    258266           ENDDO
     267          ELSE ! 1D model case
     268           dx3_1d(1,1:L_NSPECTV)=px(1,1:L_NSPECTV)
     269          ENDIF
    259270#endif
    260271
     
    268279              ierr= NF_INQ_DIMID(nid,"longitude",id(1))
    269280              ierr= NF_INQ_DIMID(nid,"latitude",id(2))
    270               ierr= NF_INQ_DIMID(nid,"VI Wavenumber",id(3))
     281              ierr= NF_INQ_DIMID(nid,"VI_Wavenumber",id(3))
    271282              ierr= NF_INQ_DIMID(nid,"Time",id(4))
    272283
     
    284295           corner(4)=ntime
    285296
    286            edges(1)=nbp_lon+1
     297           IF (klon_glo==1) THEN
     298             edges(1)=1
     299           ELSE
     300             edges(1)=nbp_lon+1
     301           ENDIF
    287302           edges(2)=nbp_lat
    288303           edges(3)=L_NSPECTV
    289304           edges(4)=1
    290305#ifdef NC_DOUBLE
    291            ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3)
    292 #else
    293            ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     306           IF (klon_glo>1) THEN ! General case
     307             ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3)
     308           ELSE
     309             ierr= NF_PUT_VARA_DOUBLE(nid,varid,corner,edges,dx3_1d)
     310           ENDIF
     311#else
     312           IF (klon_glo>1) THEN ! General case
     313             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3)
     314           ELSE
     315             ierr= NF_PUT_VARA_REAL(nid,varid,corner,edges,dx3_1d)
     316           ENDIF
    294317#endif
    295318
  • trunk/LMDZ.GENERIC/libf/phystd/wstats.F90

    r1529 r1531  
    1313integer,intent(in) :: dim
    1414real,intent(in) :: px(ngrid,nbp_lev)
    15 real, dimension(nbp_lon+1,nbp_lat,nbp_lev) :: mean3d,sd3d,dx3
    16 real, dimension(nbp_lon+1,nbp_lat) :: mean2d,sd2d,dx2
     15real,allocatable,save :: mean3d(:,:,:),sd3d(:,:,:),dx3(:,:,:)
     16real,allocatable,save :: mean2d(:,:),sd2d(:,:),dx2(:,:)
    1717character (len=50) :: namebis
    1818character (len=50), save :: firstvar
     
    4949   firstvar=trim((nom))
    5050   call inistats(ierr)
     51   if (klon_glo>1) then ! general case, 3D GCM
     52     allocate(mean3d(nbp_lon+1,nbp_lat,nbp_lev))
     53     allocate(sd3d(nbp_lon+1,nbp_lat,nbp_lev))
     54     allocate(dx3(nbp_lon+1,nbp_lat,nbp_lev))
     55     allocate(mean2d(nbp_lon+1,nbp_lat))
     56     allocate(sd2d(nbp_lon+1,nbp_lat))
     57     allocate(dx2(nbp_lon+1,nbp_lat))
     58   else ! 1D model
     59     allocate(mean3d(1,1,nbp_lev))
     60     allocate(sd3d(1,1,nbp_lev))
     61     allocate(dx3(1,1,nbp_lev))
     62     allocate(mean2d(1,1))
     63     allocate(sd2d(1,1))
     64     allocate(dx2(1,1))
     65   endif
    5166endif
    5267
     
    194209   if (dim.eq.3) then
    195210      start=(/1,1,1,indx/)
    196       sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     211      if (klon_glo>1) then !general case
     212        sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     213      else
     214        sizes=(/1,1,nbp_lev,1/)
     215      endif
    197216      mean3d(:,:,:)=0
    198217      sd3d(:,:,:)=0
    199218   else if (dim.eq.2) then
    200219      start=(/1,1,indx,0/)
    201       sizes=(/nbp_lon+1,nbp_lev,1,0/)
     220      if (klon_glo>1) then !general case
     221        sizes=(/nbp_lon+1,nbp_lev,1,0/)
     222      else
     223        sizes=(/1,1,1,0/)
     224      endif
    202225      mean2d(:,:)=0
    203226      sd2d(:,:)=0
     
    207230   if (dim.eq.3) then
    208231      start=(/1,1,1,indx/)
    209       sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     232      if (klon_glo>1) then !general case
     233        sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     234      else ! 1D model case
     235        sizes=(/1,1,nbp_lev,1/)
     236      endif
    210237#ifdef NC_DOUBLE
    211238      ierr = NF_GET_VARA_DOUBLE(nid,meanid,start,sizes,mean3d)
     
    216243#endif
    217244      if (ierr.ne.NF_NOERR) then
     245         write (*,*) "wstats error reading :",trim(nom)
    218246         write (*,*) NF_STRERROR(ierr)
    219247         stop ""
     
    222250   else if (dim.eq.2) then
    223251      start=(/1,1,indx,0/)
    224       sizes=(/nbp_lon+1,nbp_lat,1,0/)
     252      if (klon_glo>1) then ! general case
     253        sizes=(/nbp_lon+1,nbp_lat,1,0/)
     254      else
     255        sizes=(/1,1,1,0/)
     256      endif
    225257#ifdef NC_DOUBLE
    226258      ierr = NF_GET_VARA_DOUBLE(nid,meanid,start,sizes,mean2d)
     
    231263#endif
    232264      if (ierr.ne.NF_NOERR) then
     265         write (*,*) "wstats error reading :",trim(nom)
    233266         write (*,*) NF_STRERROR(ierr)
    234267         stop ""
     
    242275if (dim.eq.3) then
    243276  dx3(1:nbp_lon,:,:)=px3_glo(:,:,:)
    244   dx3(nbp_lon+1,:,:)=dx3(1,:,:)
     277  IF (klon_glo>1) THEN ! in 3D, add redundant longitude point
     278    dx3(nbp_lon+1,:,:)=dx3(1,:,:)
     279  ENDIF
    245280else ! dim.eq.2
    246281  dx2(1:nbp_lon,:)=px2_glo(:,:)
    247   dx2(nbp_lon+1,:)=dx2(1,:)
     282  IF (klon_glo>1) THEN ! in 3D, add redundant longitude point
     283    dx2(nbp_lon+1,:)=dx2(1,:)
     284  ENDIF
    248285endif
    249286
     
    263300   ierr = NF_PUT_VARA_REAL(nid,sdid,start,sizes,sd3d)
    264301#endif
     302  if (ierr.ne.NF_NOERR) then
     303     write (*,*) "wstats error writing :",trim(nom)
     304     write (*,*) NF_STRERROR(ierr)
     305     stop ""
     306  endif
    265307
    266308else if (dim.eq.2) then
     
    276318   ierr = NF_PUT_VARA_REAL(nid,sdid,start,sizes,sd2d)
    277319#endif
     320  if (ierr.ne.NF_NOERR) then
     321     write (*,*) "wstats error writing :",trim(nom)
     322     write(*,*) "start:",start
     323     write(*,*) "sizes:",sizes
     324     write(*,*) "mean2d:",mean2d
     325     write(*,*) "sd2d:",sd2d
     326     write (*,*) NF_STRERROR(ierr)
     327     stop ""
     328  endif
    278329
    279330endif ! of if (dim.eq.3) elseif (dim.eq.2)
     
    286337!======================================================
    287338subroutine inivar(nid,varid,ngrid,dim,indx,px,ierr)
    288 use mod_grid_phy_lmdz, only : nbp_lon, nbp_lat, nbp_lev
     339use mod_grid_phy_lmdz, only : nbp_lon, nbp_lat, nbp_lev, klon_glo
    289340
    290341implicit none
     
    300351real, dimension(nbp_lon+1,nbp_lat,nbp_lev) :: dx3
    301352real, dimension(nbp_lon+1,nbp_lat) :: dx2
     353real :: dx3_1d(nbp_lev) ! for 1D outputs
     354real :: dx2_1d ! for 1D outputs
    302355
    303356if (dim.eq.3) then
    304357
    305358   start=(/1,1,1,indx/)
    306    sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     359   if (klon_glo>1) then ! general 3D case
     360     sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/)
     361   else
     362     sizes=(/1,1,nbp_lev,1/)
     363   endif
    307364
    308365!  Passage variable physique -->  variable dynamique
    309366
    310    DO l=1,nbp_lev
     367   if (klon_glo>1) then ! general case
     368    DO l=1,nbp_lev
    311369      DO i=1,nbp_lon+1
    312370         dx3(i,1,l)=px(1,l)
     
    320378         dx3(nbp_lon+1,j,l)=dx3(1,j,l)
    321379      ENDDO
    322    ENDDO
    323 
    324 #ifdef NC_DOUBLE
    325    ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,sizes,dx3)
    326 #else
    327    ierr = NF_PUT_VARA_REAL(nid,varid,start,sizes,dx3)
    328 #endif
     380    ENDDO
     381   else ! 1D model case
     382     dx3_1d(1:nbp_lev)=px(1,1:nbp_lev)
     383   endif
     384
     385#ifdef NC_DOUBLE
     386   if (klon_glo>1) then
     387     ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,sizes,dx3)
     388   else
     389     ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,sizes,dx3_1d)
     390   endif
     391#else
     392   if (klon_glo>1) then
     393     ierr = NF_PUT_VARA_REAL(nid,varid,start,sizes,dx3)
     394   else
     395     ierr = NF_PUT_VARA_REAL(nid,varid,start,sizes,dx3_1d)
     396   endif
     397#endif
     398  if (ierr.ne.NF_NOERR) then
     399     write (*,*) "inivar error writing variable"
     400     write (*,*) NF_STRERROR(ierr)
     401     stop ""
     402  endif
    329403
    330404else if (dim.eq.2) then
    331405
    332406      start=(/1,1,indx,0/)
    333       sizes=(/nbp_lon+1,nbp_lat,1,0/)
     407      if (klon_glo>1) then ! general 3D case
     408        sizes=(/nbp_lon+1,nbp_lat,1,0/)
     409      else
     410        sizes=(/1,1,1,0/)
     411      endif
    334412
    335413!    Passage variable physique -->  physique dynamique
    336414
     415  if (klon_glo>1) then ! general case
    337416  DO i=1,nbp_lon+1
    338417     dx2(i,1)=px(1,1)
     
    346425     dx2(nbp_lon+1,j)=dx2(1,j)
    347426  ENDDO
    348 
    349 #ifdef NC_DOUBLE
    350    ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,sizes,dx2)
    351 #else
    352    ierr = NF_PUT_VARA_REAL(nid,varid,start,sizes,dx2)
    353 #endif
     427  else ! 1D model case
     428    dx2_1d=px(1,1)
     429  endif
     430 
     431#ifdef NC_DOUBLE
     432   if (klon_glo>1) then
     433     ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,sizes,dx2)
     434   else
     435     ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,sizes,dx2_1d)
     436   endif
     437#else
     438   if (klon_glo>1) then
     439     ierr = NF_PUT_VARA_REAL(nid,varid,start,sizes,dx2)
     440   else
     441     ierr = NF_PUT_VARA_REAL(nid,varid,start,sizes,dx2_1d)
     442   endif
     443#endif
     444  if (ierr.ne.NF_NOERR) then
     445     write (*,*) "inivar error writing variable"
     446     write (*,*) NF_STRERROR(ierr)
     447     stop ""
     448  endif
    354449
    355450endif
Note: See TracChangeset for help on using the changeset viewer.