Ignore:
Timestamp:
Jul 12, 2012, 1:37:16 PM (12 years ago)
Author:
lguez
Message:

In "dynetat0" and "dynredem_*", replaced calls to "nf_get_var*" and
"nf_put_var*" (old NetCDF 77 interface, embedded in a test of
NC_DOUBLE) by calls to "nf90_get_var" and "nf95_put_var". This
required a change of the rank of some variables in those procedures.

Updated the NetCDF95 library, included in "bibio".

Revision tested in sequential and parallel with MPI. Identical
results.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3dpar/dynredem.F

    r1577 r1635  
    88#endif
    99      USE infotrac
     10      use netcdf95, only: NF95_PUT_VAR
    1011 
    1112      IMPLICIT NONE
     
    1920#include "comconst.h"
    2021#include "comvert.h"
    21 #include "comgeom.h"
     22#include "comgeom2.h"
    2223#include "temps.h"
    2324#include "ener.h"
     
    3132c   ----------
    3233      INTEGER iday_end
    33       REAL phis(ip1jmp1)
     34      REAL phis(iip1, jjp1)
    3435      CHARACTER*(*) fichnom
    3536
     
    166167     .                       "Parametres de controle")
    167168      ierr = NF_ENDDEF(nid)
    168 #ifdef NC_DOUBLE
    169       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,tab_cntrl)
    170 #else
    171       ierr = NF_PUT_VAR_REAL (nid,nvarid,tab_cntrl)
    172 #endif
     169      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
    173170c
    174171      ierr = NF_REDEF (nid)
     
    183180     .                       "Longitudes des points U")
    184181      ierr = NF_ENDDEF(nid)
    185 #ifdef NC_DOUBLE
    186       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonu)
    187 #else
    188       ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonu)
    189 #endif
     182      call NF95_PUT_VAR(nid,nvarid,rlonu)
    190183c
    191184      ierr = NF_REDEF (nid)
     
    200193     .                       "Latitudes des points U")
    201194      ierr = NF_ENDDEF(nid)
    202 #ifdef NC_DOUBLE
    203       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu)
    204 #else
    205       ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu)
    206 #endif
     195      call NF95_PUT_VAR (nid,nvarid,rlatu)
    207196c
    208197      ierr = NF_REDEF (nid)
     
    217206     .                       "Longitudes des points V")
    218207      ierr = NF_ENDDEF(nid)
    219 #ifdef NC_DOUBLE
    220       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonv)
    221 #else
    222       ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonv)
    223 #endif
     208      call NF95_PUT_VAR(nid,nvarid,rlonv)
    224209c
    225210      ierr = NF_REDEF (nid)
     
    234219     .                       "Latitudes des points V")
    235220      ierr = NF_ENDDEF(nid)
    236 #ifdef NC_DOUBLE
    237       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatv)
    238 #else
    239       ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatv)
    240 #endif
     221      call NF95_PUT_VAR(nid,nvarid,rlatv)
    241222c
    242223      ierr = NF_REDEF (nid)
     
    251232     .                       "Numero naturel des couches s")
    252233      ierr = NF_ENDDEF(nid)
    253 #ifdef NC_DOUBLE
    254       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,nivsigs)
    255 #else
    256       ierr = NF_PUT_VAR_REAL (nid,nvarid,nivsigs)
    257 #endif
     234      call NF95_PUT_VAR(nid,nvarid,nivsigs)
    258235c
    259236      ierr = NF_REDEF (nid)
     
    268245     .                       "Numero naturel des couches sigma")
    269246      ierr = NF_ENDDEF(nid)
    270 #ifdef NC_DOUBLE
    271       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,nivsig)
    272 #else
    273       ierr = NF_PUT_VAR_REAL (nid,nvarid,nivsig)
    274 #endif
     247      call NF95_PUT_VAR(nid,nvarid,nivsig)
    275248c
    276249      ierr = NF_REDEF (nid)
     
    285258     .                       "Coefficient A pour hybride")
    286259      ierr = NF_ENDDEF(nid)
    287 #ifdef NC_DOUBLE
    288       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ap)
    289 #else
    290       ierr = NF_PUT_VAR_REAL (nid,nvarid,ap)
    291 #endif
     260      call NF95_PUT_VAR(nid,nvarid,ap)
    292261c
    293262      ierr = NF_REDEF (nid)
     
    302271     .                       "Coefficient B pour hybride")
    303272      ierr = NF_ENDDEF(nid)
    304 #ifdef NC_DOUBLE
    305       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,bp)
    306 #else
    307       ierr = NF_PUT_VAR_REAL (nid,nvarid,bp)
    308 #endif
     273      call NF95_PUT_VAR(nid,nvarid,bp)
    309274c
    310275      ierr = NF_REDEF (nid)
     
    317282cIM 220306 END
    318283      ierr = NF_ENDDEF(nid)
    319 #ifdef NC_DOUBLE
    320       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,presnivs)
    321 #else
    322       ierr = NF_PUT_VAR_REAL (nid,nvarid,presnivs)
    323 #endif
     284      call NF95_PUT_VAR(nid,nvarid,presnivs)
    324285c
    325286c Coefficients de passage cov. <-> contra. <--> naturel
     
    338299     .                       "Coefficient de passage pour U")
    339300      ierr = NF_ENDDEF(nid)
    340 #ifdef NC_DOUBLE
    341       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cu)
    342 #else
    343       ierr = NF_PUT_VAR_REAL (nid,nvarid,cu)
    344 #endif
     301      call NF95_PUT_VAR(nid,nvarid,cu)
    345302c
    346303      ierr = NF_REDEF (nid)
     
    357314     .                       "Coefficient de passage pour V")
    358315      ierr = NF_ENDDEF(nid)
    359 #ifdef NC_DOUBLE
    360       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cv)
    361 #else
    362       ierr = NF_PUT_VAR_REAL (nid,nvarid,cv)
    363 #endif
     316      call NF95_PUT_VAR(nid,nvarid,cv)
    364317c
    365318c Aire de chaque maille:
     
    378331     .                       "Aires de chaque maille")
    379332      ierr = NF_ENDDEF(nid)
    380 #ifdef NC_DOUBLE
    381       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,aire)
    382 #else
    383       ierr = NF_PUT_VAR_REAL (nid,nvarid,aire)
    384 #endif
     333      call NF95_PUT_VAR(nid,nvarid,aire)
    385334c
    386335c Geopentiel au sol:
     
    399348     .                       "Geopotentiel au sol")
    400349      ierr = NF_ENDDEF(nid)
    401 #ifdef NC_DOUBLE
    402       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,phis)
    403 #else
    404       ierr = NF_PUT_VAR_REAL (nid,nvarid,phis)
    405 #endif
     350      call NF95_PUT_VAR(nid,nvarid,phis)
    406351c
    407352c Definir les variables pour pouvoir les enregistrer plus tard:
     
    524469      USE infotrac
    525470      USE control_mod
     471      use netcdf, only: NF90_get_VAR
     472      use netcdf95, only: NF95_PUT_VAR
    526473 
    527474      IMPLICIT NONE
     
    540487
    541488      INTEGER l
    542       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm)
    543       REAL teta(ip1jmp1,llm)                   
    544       REAL ps(ip1jmp1),masse(ip1jmp1,llm)                   
    545       REAL q(ip1jmp1,llm,nqtot)
     489      REAL vcov(iip1,jjm,llm),ucov(iip1, jjp1,llm)
     490      REAL teta(iip1, jjp1,llm)                   
     491      REAL ps(iip1, jjp1),masse(iip1, jjp1,llm)                   
     492      REAL q(iip1, jjp1, llm, nqtot)
    546493      CHARACTER*(*) fichnom
    547494     
     
    577524         CALL abort_gcm(modname,abort_message,ierr)
    578525      ENDIF
    579 #ifdef NC_DOUBLE
    580       ierr = NF_PUT_VAR1_DOUBLE (nid,nvarid,nb,time)
    581 #else
    582       ierr = NF_PUT_VAR1_REAL (nid,nvarid,nb,time)
    583 #endif
     526      call NF95_PUT_VAR(nid,nvarid,time,start=(/nb/))
    584527      write(lunout,*) "dynredem1: Enregistrement pour ", nb, time
    585528
     
    593536         CALL abort_gcm(modname,abort_message,ierr)
    594537      ENDIF
    595 #ifdef NC_DOUBLE
    596       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tab_cntrl)
    597 #else
    598       ierr = NF_GET_VAR_REAL(nid, nvarid, tab_cntrl)
    599 #endif
     538      ierr = NF90_GET_VAR(nid, nvarid, tab_cntrl)
    600539       tab_cntrl(31) = REAL(itau_dyn + itaufin)
    601 #ifdef NC_DOUBLE
    602       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,tab_cntrl)
    603 #else
    604       ierr = NF_PUT_VAR_REAL (nid,nvarid,tab_cntrl)
    605 #endif
     540      call NF95_PUT_VAR(nid,nvarid,tab_cntrl)
    606541
    607542c  Ecriture des champs
     
    613548         CALL abort_gcm(modname,abort_message,ierr)
    614549      ENDIF
    615 #ifdef NC_DOUBLE
    616       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ucov)
    617 #else
    618       ierr = NF_PUT_VAR_REAL (nid,nvarid,ucov)
    619 #endif
     550      call NF95_PUT_VAR(nid,nvarid,ucov)
    620551
    621552      ierr = NF_INQ_VARID(nid, "vcov", nvarid)
     
    625556         CALL abort_gcm(modname,abort_message,ierr)
    626557      ENDIF
    627 #ifdef NC_DOUBLE
    628       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,vcov)
    629 #else
    630       ierr = NF_PUT_VAR_REAL (nid,nvarid,vcov)
    631 #endif
     558      call NF95_PUT_VAR(nid,nvarid,vcov)
    632559
    633560      ierr = NF_INQ_VARID(nid, "teta", nvarid)
     
    637564         CALL abort_gcm(modname,abort_message,ierr)
    638565      ENDIF
    639 #ifdef NC_DOUBLE
    640       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,teta)
    641 #else
    642       ierr = NF_PUT_VAR_REAL (nid,nvarid,teta)
    643 #endif
     566      call NF95_PUT_VAR(nid,nvarid,teta)
    644567
    645568      IF (type_trac == 'inca') THEN
     
    663586               CALL abort_gcm(modname,abort_message,ierr)
    664587            ENDIF
    665 #ifdef NC_DOUBLE
    666             ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
    667 #else
    668             ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
    669 #endif
    670         ELSE ! type_trac=inca
     588            call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
     589        ELSE ! type_trac = inca
    671590! lecture de la valeur du traceur dans start_trac.nc
    672591           IF (ierr_file .ne. 2) THEN
     
    682601                   CALL abort_gcm(modname,abort_message,ierr)
    683602                ENDIF
    684 #ifdef NC_DOUBLE
    685                 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
    686 #else
    687                 ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
    688 #endif
     603                call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
    689604               
    690605             ELSE
    691606                write(lunout,*) "dynredem1: ",trim(tname(iq)),
    692607     &              " est present dans start_trac.nc"
    693 #ifdef NC_DOUBLE
    694                ierr = NF_GET_VAR_DOUBLE(nid_trac, nvarid_trac, trac_tmp)
    695 #else
    696                ierr = NF_GET_VAR_REAL(nid_trac, nvarid_trac, trac_tmp)
    697 #endif
     608               ierr = NF90_GET_VAR(nid_trac, nvarid_trac, trac_tmp)
    698609                IF (ierr .NE. NF_NOERR) THEN
    699610                   abort_message="dynredem1: Lecture echouee pour"//
     
    709620                   CALL abort_gcm(modname,abort_message,ierr)
    710621                ENDIF
    711 #ifdef NC_DOUBLE
    712                 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,trac_tmp)
    713 #else
    714                 ierr = NF_PUT_VAR_REAL (nid,nvarid,trac_tmp)
    715 #endif
     622                call NF95_PUT_VAR(nid, nvarid, trac_tmp)
    716623               
    717624             ENDIF ! IF (ierr .NE. NF_NOERR)
     
    726633                   CALL abort_gcm(modname,abort_message,ierr)
    727634             ENDIF
    728 #ifdef NC_DOUBLE
    729              ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,q(1,1,iq))
    730 #else
    731              ierr = NF_PUT_VAR_REAL (nid,nvarid,q(1,1,iq))
    732 #endif
     635             call NF95_PUT_VAR(nid,nvarid,q(:,:,:,iq))
    733636          ENDIF ! (ierr_file .ne. 2)
    734        END IF   ! type_trac
     637       END IF   !type_trac
    735638     
    736639      ENDDO
     
    743646         CALL abort_gcm(modname,abort_message,ierr)
    744647      ENDIF
    745 #ifdef NC_DOUBLE
    746       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,masse)
    747 #else
    748       ierr = NF_PUT_VAR_REAL (nid,nvarid,masse)
    749 #endif
     648      call NF95_PUT_VAR(nid,nvarid,masse)
    750649c
    751650      ierr = NF_INQ_VARID(nid, "ps", nvarid)
     
    755654         CALL abort_gcm(modname,abort_message,ierr)
    756655      ENDIF
    757 #ifdef NC_DOUBLE
    758       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,ps)
    759 #else
    760       ierr = NF_PUT_VAR_REAL (nid,nvarid,ps)
    761 #endif
     656      call NF95_PUT_VAR(nid,nvarid,ps)
    762657
    763658      ierr = NF_CLOSE(nid)
Note: See TracChangeset for help on using the changeset viewer.