New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10380 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src – NEMO

Ignore:
Timestamp:
2018-12-11T09:27:54+01:00 (5 years ago)
Author:
smasson
Message:

dev_r10164_HPC09_ESIWACE_PREP_MERGE: iom cleaning: (1) get rid of jpnf90, jprstlib, jlibalt, iolib and (2) improve iom_getatt and iom_putatt, see #2133

Location:
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/ICE/icerst.F90

    r10359 r10380  
    6969            IF(lwp) THEN 
    7070               WRITE(numout,*) 
    71                SELECT CASE ( jprstlib ) 
    72                CASE DEFAULT 
    73                   WRITE(numout,*) '             open ice restart NetCDF file: ',TRIM(clpath)//clname 
    74                END SELECT 
     71               WRITE(numout,*) '             open ice restart NetCDF file: ',TRIM(clpath)//clname 
    7572               IF( kt == nitrst - 2*nn_fsbc + 1 ) THEN 
    7673                  WRITE(numout,*) '             kt = nitrst - 2*nn_fsbc + 1 = ', kt,' date= ', ndastp 
     
    8077            ENDIF 
    8178            ! 
    82             CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kiolib = jprstlib, kdlev = jpl ) 
     79            CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl ) 
    8380            lrst_ice = .TRUE. 
    8481         ENDIF 
     
    175172      LOGICAL           ::   llok 
    176173      INTEGER           ::   id1            ! local integer 
    177       INTEGER           ::   jlibalt = jprstlib 
    178174      CHARACTER(len=25) ::   znam 
    179175      CHARACTER(len=2)  ::   zchar, zchar1 
     
    188184      ENDIF 
    189185 
    190       CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir, kiolib = jprstlib, kdlev = jpl ) 
     186      CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir, kdlev = jpl ) 
    191187 
    192188      CALL iom_get( numrir, 'nn_fsbc', zfice ) 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/ASM/asmbkg.F90

    r10068 r10380  
    8585            ! 
    8686            !                                      ! Define the output file         
    87             CALL iom_open( c_asmbkg, inum, ldwrt = .TRUE., kiolib = jprstlib) 
     87            CALL iom_open( c_asmbkg, inum, ldwrt = .TRUE. ) 
    8888            ! 
    8989            IF( nitbkg_r == nit000 - 1 ) THEN      ! Treat special case when nitbkg = 0 
     
    123123            ! 
    124124            !                                      ! Define the output file         
    125             CALL iom_open( c_asmdin, inum, ldwrt = .TRUE., kiolib = jprstlib) 
     125            CALL iom_open( c_asmdin, inum, ldwrt = .TRUE. ) 
    126126            ! 
    127127            IF( nitdin_r == nit000 - 1 ) THEN      ! Treat special case when nitbkg = 0 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/CRS/crsdomwri.F90

    r10068 r10380  
    6969      !                            ! ============================ 
    7070      ! 
    71       CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     71      CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE. ) 
    7272  
    7373      CALL iom_rstput( 0, 0, inum, 'tmask', tmask_crs, ktype = jp_i1 )    ! land-sea mask 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/DIA/diawri.F90

    r10358 r10380  
    893893 
    894894#if defined key_si3 
    895      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kiolib = jprstlib, kdlev = jpl ) 
     895     CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kdlev = jpl ) 
    896896#else 
    897      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     897     CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE. ) 
    898898#endif 
    899899 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/DOM/domain.F90

    r10314 r10380  
    553553                                          !- or they may be present as global attributes  
    554554                                          !- (netcdf only)   
    555          IF( iom_file(inum)%iolib == jpnf90 ) THEN 
    556             CALL iom_getatt( inum, 'cn_cfg', cd_cfg )  ! returns   !  if not found 
    557             CALL iom_getatt( inum, 'nn_cfg', kk_cfg )  ! returns -999 if not found 
    558             IF( TRIM(cd_cfg) == '!') cd_cfg = 'UNKNOWN' 
    559             IF( kk_cfg == -999     ) kk_cfg = -9999999 
    560          ENDIF 
     555         CALL iom_getatt( inum, 'cn_cfg', cd_cfg )  ! returns   !  if not found 
     556         CALL iom_getatt( inum, 'nn_cfg', kk_cfg )  ! returns -999 if not found 
     557         IF( TRIM(cd_cfg) == '!') cd_cfg = 'UNKNOWN' 
     558         IF( kk_cfg == -999     ) kk_cfg = -9999999 
    561559         ! 
    562560      ENDIF 
     
    608606      !          
    609607      clnam = cn_domcfg_out  ! filename (configuration information) 
    610       CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     608      CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE. ) 
    611609       
    612610      ! 
     
    693691      ! 
    694692      ! Add some global attributes ( netcdf only ) 
    695       IF( iom_file(inum)%iolib == jpnf90 ) THEN 
    696          CALL iom_putatt( inum, 'nn_cfg', nn_cfg ) 
    697          CALL iom_putatt( inum, 'cn_cfg', TRIM(cn_cfg) ) 
    698       ENDIF 
     693      CALL iom_putatt( inum, 'nn_cfg', nn_cfg ) 
     694      CALL iom_putatt( inum, 'cn_cfg', TRIM(cn_cfg) ) 
    699695      ! 
    700696      !                                ! ============================ 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/DOM/domwri.F90

    r10297 r10380  
    7272      !                                  !  create 'mesh_mask.nc' file 
    7373      !                                  ! ============================ 
    74       CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     74      CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE. ) 
    7575      ! 
    7676      !                                                         ! global domain size 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/DOM/iscplrst.F90

    r10170 r10380  
    8282         cfile='correction' 
    8383         cfile = TRIM( cfile ) 
    84          CALL iom_open  ( cfile, inum0, ldwrt = .TRUE., kiolib = jprstlib ) 
     84         CALL iom_open  ( cfile, inum0, ldwrt = .TRUE. ) 
    8585         CALL iom_rstput( 0, 0, inum0, 'vol_cor', hdiv_iscpl(:,:,:) ) 
    8686         CALL iom_rstput( 0, 0, inum0, 'tem_cor', htsc_iscpl(:,:,:,jp_tem) ) 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/IOM/iom.F90

    r10368 r10380  
    7575   END INTERFACE 
    7676   INTERFACE iom_getatt 
    77       MODULE PROCEDURE iom_g0d_iatt, iom_g0d_ratt, iom_g0d_catt 
     77      MODULE PROCEDURE iom_g0d_iatt, iom_g1d_iatt, iom_g0d_ratt, iom_g1d_ratt, iom_g0d_catt 
    7878   END INTERFACE 
    7979   INTERFACE iom_putatt 
    80       MODULE PROCEDURE iom_p0d_iatt, iom_p0d_ratt, iom_p0d_catt 
     80      MODULE PROCEDURE iom_p0d_iatt, iom_p1d_iatt, iom_p0d_ratt, iom_p1d_ratt, iom_p0d_catt 
    8181   END INTERFACE 
    8282   INTERFACE iom_rstput 
     
    634634 
    635635 
    636    SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, kiolib, ldstop, ldiof, kdlev ) 
     636   SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, ldstop, ldiof, kdlev ) 
    637637      !!--------------------------------------------------------------------- 
    638638      !!                   ***  SUBROUTINE  iom_open  *** 
     
    644644      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldwrt    ! open in write modeb          (default = .FALSE.) 
    645645      INTEGER         , INTENT(in   ), OPTIONAL ::   kdom     ! Type of domain to be written (default = jpdom_local_noovlap) 
    646       INTEGER         , INTENT(in   ), OPTIONAL ::   kiolib   ! library used to open the file (default = jpnf90)  
    647646      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldstop   ! stop if open to read a non-existing file (default = .TRUE.) 
    648647      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldiof    ! Interp On the Fly, needed for AGRIF (default = .FALSE.) 
     
    659658      LOGICAL               ::   llstop    ! local definition of ldstop 
    660659      LOGICAL               ::   lliof     ! local definition of ldiof 
    661       INTEGER               ::   iolib     ! library do we use to open the file 
    662660      INTEGER               ::   icnt      ! counter for digits in clcpu (max = jpmax_digits) 
    663661      INTEGER               ::   iln, ils  ! lengths of character 
     
    692690      ELSE                         ;   llstop = .TRUE. 
    693691      ENDIF 
    694       ! what library do we use to open the file? 
    695       IF( PRESENT(kiolib) ) THEN   ;   iolib = kiolib 
    696       ELSE                         ;   iolib = jpnf90 
    697       ENDIF 
    698692      ! are we using interpolation on the fly? 
    699693      IF( PRESENT(ldiof) ) THEN   ;   lliof = ldiof 
     
    713707      ENDIF 
    714708      ! which suffix should we use? 
    715       SELECT CASE (iolib) 
    716       CASE (jpnf90   ) ;   clsuffix = '.nc' 
    717       CASE DEFAULT     ;   clsuffix = '' 
    718          CALL ctl_stop( TRIM(clinfo), 'accepted IO library is only jpnf90 (jpioipsl option has been removed) ' ) 
    719       END SELECT 
     709      clsuffix = '.nc' 
    720710      ! Add the suffix if needed 
    721711      iln = LEN_TRIM(clname) 
     
    802792      ENDIF 
    803793      IF( istop == nstop ) THEN   ! no error within this routine 
    804          SELECT CASE (iolib) 
    805          CASE (jpnf90   )   ;   CALL iom_nf90_open(    clname, kiomid, llwrt, llok, idompar, kdlev = kdlev ) 
    806          CASE DEFAULT 
    807             CALL ctl_stop( TRIM(clinfo)//' accepted IO library is only jpnf90 (jpioipsl option has been removed) ' ) 
    808          END SELECT 
     794         CALL iom_nf90_open( clname, kiomid, llwrt, llok, idompar, kdlev = kdlev ) 
    809795      ENDIF 
    810796      ! 
     
    839825         DO jf = i_s, i_e 
    840826            IF( iom_file(jf)%nfid > 0 ) THEN 
    841                SELECT CASE (iom_file(jf)%iolib) 
    842                CASE (jpnf90   )   ;   CALL iom_nf90_close(    jf ) 
    843                CASE DEFAULT 
    844                   CALL ctl_stop( TRIM(clinfo)//' accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    845                END SELECT 
     827               CALL iom_nf90_close( jf ) 
    846828               iom_file(jf)%nfid       = 0          ! free the id  
    847829               IF( PRESENT(kiomid) )   kiomid = 0   ! return 0 as id to specify that the file was closed 
     
    896878               iiv = iiv + 1 
    897879               IF( iiv <= jpmax_vars ) THEN 
    898                   SELECT CASE (iom_file(kiomid)%iolib) 
    899                   CASE (jpnf90   )   ;   iom_varid = iom_nf90_varid  ( kiomid, cdvar, iiv, kdimsz, kndims ) 
    900                   CASE DEFAULT 
    901                      CALL ctl_stop( TRIM(clinfo)//' accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    902                   END SELECT 
     880                  iom_varid = iom_nf90_varid( kiomid, cdvar, iiv, kdimsz, kndims ) 
    903881               ELSE 
    904882                  CALL ctl_stop( trim(clinfo), 'Too many variables in the file '//iom_file(kiomid)%name,   & 
    905                         &                         'increase the parameter jpmax_vars') 
     883                        &                      'increase the parameter jpmax_vars') 
    906884               ENDIF 
    907885               IF( llstop .AND. iom_varid == -1 )   CALL ctl_stop( TRIM(clinfo)//' not found' )  
     
    962940                                    &                         'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 
    963941                                    &                         'Use ncwa -a to suppress the unnecessary dimensions' ) 
    964                SELECT CASE (iom_file(kiomid)%iolib) 
    965                CASE (jpnf90   )   ;   CALL iom_nf90_get(    kiomid, idvar, pvar, itime ) 
    966                CASE DEFAULT 
    967                   CALL ctl_stop( 'iom_g0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    968                END SELECT 
     942               CALL iom_nf90_get( kiomid, idvar, pvar, itime ) 
    969943            ENDIF 
    970944         ENDIF 
     
    11221096            IF( lrowattr .AND. idom /= jpdom_data   ) CALL ctl_stop(trim(clinfo), 'lrowattr present and true needs kdom = jpdom_data') 
    11231097            IF( lrowattr .AND. idom == jpdom_data   ) luse_jattr = .true. 
    1124          ENDIF 
    1125          IF( luse_jattr ) THEN 
    1126             SELECT CASE (iom_file(kiomid)%iolib) 
    1127             CASE (jpnf90   )    
    1128                 ! Ok 
    1129             CASE DEFAULT     
    1130                CALL ctl_stop( TRIM(clinfo)//' accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1131             END SELECT 
    11321098         ENDIF 
    11331099 
     
    13011267            ENDIF 
    13021268       
    1303             SELECT CASE (iom_file(kiomid)%iolib) 
    1304             CASE (jpnf90   )   ;   CALL iom_nf90_get(    kiomid, idvar, inbdim, istart, icnt, ix1, ix2, iy1, iy2,   & 
    1305                &                                         pv_r1d, pv_r2d, pv_r3d ) 
    1306             CASE DEFAULT 
    1307                CALL ctl_stop( TRIM(clinfo)//' accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1308             END SELECT 
     1269            CALL iom_nf90_get( kiomid, idvar, inbdim, istart, icnt, ix1, ix2, iy1, iy2, pv_r1d, pv_r2d, pv_r3d ) 
    13091270 
    13101271            IF( istop == nstop ) THEN   ! no additional errors until this point... 
     
    14221383               IF( iom_file(kiomid)%luld(idvar) ) THEN 
    14231384                  IF( iom_file(kiomid)%dimsz(1,idvar) <= size(ptime) ) THEN 
    1424                      SELECT CASE (iom_file(kiomid)%iolib) 
    1425                      CASE (jpnf90   )   ;   CALL iom_nf90_gettime(   kiomid, idvar, ptime, cdunits, cdcalendar ) 
    1426                      CASE DEFAULT 
    1427                         CALL ctl_stop( TRIM(clinfo)//' accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1428                      END SELECT 
     1385                     CALL iom_nf90_gettime(   kiomid, idvar, ptime, cdunits, cdcalendar ) 
    14291386                  ELSE 
    14301387                     WRITE(ctmp1,*) 'error with the size of ptime ',size(ptime),iom_file(kiomid)%dimsz(1,idvar) 
     
    14481405   !!                   INTERFACE iom_getatt 
    14491406   !!---------------------------------------------------------------------- 
    1450    SUBROUTINE iom_g0d_iatt( kiomid, cdatt, pvar, cdvar ) 
    1451       INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    1452       CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
    1453       INTEGER         , INTENT(  out)                 ::   pvar      ! read field 
    1454       CHARACTER(len=*), INTENT(in   ), OPTIONAL      ::   cdvar     ! Name of the variable 
     1407   SUBROUTINE iom_g0d_iatt( kiomid, cdatt, katt0d, cdvar ) 
     1408      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1409      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1410      INTEGER               , INTENT(  out)           ::   katt0d    ! read field 
     1411      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    14551412      ! 
    14561413      IF( kiomid > 0 ) THEN 
    1457          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1458             SELECT CASE (iom_file(kiomid)%iolib) 
    1459             CASE (jpnf90   )   ;   IF( PRESENT(cdvar) ) THEN 
    1460                                       CALL iom_nf90_getatt( kiomid, cdatt, pvar, cdvar=cdvar ) 
    1461                                    ELSE 
    1462                                       CALL iom_nf90_getatt( kiomid, cdatt, pvar ) 
    1463                                    ENDIF 
    1464             CASE DEFAULT 
    1465                CALL ctl_stop( 'iom_g0d_iatt: accepted IO library is only jpnf90' ) 
    1466             END SELECT 
    1467          ENDIF 
     1414         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  katt0d =  katt0d, cdvar=cdvar ) 
    14681415      ENDIF 
    14691416   END SUBROUTINE iom_g0d_iatt 
    14701417 
    1471    SUBROUTINE iom_g0d_ratt( kiomid, cdatt, pvar, cdvar ) 
    1472       INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    1473       CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
    1474       REAL(wp)        , INTENT(  out)                 ::   pvar      ! written field 
    1475       CHARACTER(len=*), INTENT(in   ), OPTIONAL      ::   cdvar     ! Name of the variable 
     1418   SUBROUTINE iom_g1d_iatt( kiomid, cdatt, katt1d, cdvar ) 
     1419      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1420      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1421      INTEGER, DIMENSION(:) , INTENT(  out)           ::   katt1d    ! read field 
     1422      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    14761423      ! 
    14771424      IF( kiomid > 0 ) THEN 
    1478          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1479             SELECT CASE (iom_file(kiomid)%iolib) 
    1480             CASE (jpnf90   )   ;   IF( PRESENT(cdvar) ) THEN 
    1481                                       CALL iom_nf90_getatt( kiomid, cdatt, pvar, cdvar=cdvar ) 
    1482                                    ELSE 
    1483                                       CALL iom_nf90_getatt( kiomid, cdatt, pvar ) 
    1484                                    ENDIF 
    1485             CASE DEFAULT     
    1486                CALL ctl_stop( 'iom_g0d_ratt: accepted IO library is only jpnf90' ) 
    1487             END SELECT 
    1488          ENDIF 
     1425         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  katt1d =  katt1d, cdvar=cdvar ) 
     1426      ENDIF 
     1427   END SUBROUTINE iom_g1d_iatt 
     1428 
     1429   SUBROUTINE iom_g0d_ratt( kiomid, cdatt, patt0d, cdvar ) 
     1430      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1431      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1432      REAL(wp)              , INTENT(  out)           ::   patt0d    ! read field 
     1433      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1434      ! 
     1435      IF( kiomid > 0 ) THEN 
     1436         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  patt0d =  patt0d, cdvar=cdvar ) 
    14891437      ENDIF 
    14901438   END SUBROUTINE iom_g0d_ratt 
    14911439 
    1492    SUBROUTINE iom_g0d_catt( kiomid, cdatt, pvar, cdvar ) 
    1493       INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    1494       CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
    1495       CHARACTER(len=*), INTENT(  out)                 ::   pvar      ! written field 
    1496       CHARACTER(len=*), INTENT(in   ), OPTIONAL      ::   cdvar     ! Name of the variable 
     1440   SUBROUTINE iom_g1d_ratt( kiomid, cdatt, patt1d, cdvar ) 
     1441      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1442      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1443      REAL(wp), DIMENSION(:), INTENT(  out)           ::   patt1d    ! read field 
     1444      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    14971445      ! 
    14981446      IF( kiomid > 0 ) THEN 
    1499          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1500             SELECT CASE (iom_file(kiomid)%iolib) 
    1501             CASE (jpnf90   )   ;   IF( PRESENT(cdvar) ) THEN 
    1502                                       CALL iom_nf90_getatt( kiomid, cdatt, pvar, cdvar=cdvar ) 
    1503                                    ELSE 
    1504                                       CALL iom_nf90_getatt( kiomid, cdatt, pvar ) 
    1505                                    ENDIF 
    1506             CASE DEFAULT 
    1507                CALL ctl_stop( 'iom_g0d_ratt: accepted IO library is only jpnf90' ) 
    1508             END SELECT 
    1509          ENDIF 
     1447         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  patt1d =  patt1d, cdvar=cdvar ) 
     1448      ENDIF 
     1449   END SUBROUTINE iom_g1d_ratt 
     1450    
     1451   SUBROUTINE iom_g0d_catt( kiomid, cdatt, cdatt0d, cdvar ) 
     1452      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1453      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1454      CHARACTER(len=*)      , INTENT(  out)           ::   cdatt0d   ! read field 
     1455      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1456      ! 
     1457      IF( kiomid > 0 ) THEN 
     1458         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt, cdatt0d = cdatt0d, cdvar=cdvar ) 
    15101459      ENDIF 
    15111460   END SUBROUTINE iom_g0d_catt 
     1461 
    15121462 
    15131463   !!---------------------------------------------------------------------- 
    15141464   !!                   INTERFACE iom_putatt 
    15151465   !!---------------------------------------------------------------------- 
    1516    SUBROUTINE iom_p0d_iatt( kiomid, cdatt, pvar, cdvar ) 
    1517       INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    1518       CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
    1519       INTEGER         , INTENT(in   )                 ::   pvar      ! write field 
    1520       CHARACTER(len=*), INTENT(in   ), OPTIONAL      ::   cdvar     ! Name of the variable 
     1466   SUBROUTINE iom_p0d_iatt( kiomid, cdatt, katt0d, cdvar ) 
     1467      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1468      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1469      INTEGER               , INTENT(in   )           ::   katt0d    ! written field 
     1470      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    15211471      ! 
    15221472      IF( kiomid > 0 ) THEN 
    1523          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1524             SELECT CASE (iom_file(kiomid)%iolib) 
    1525             CASE (jpnf90   )   ;   IF( PRESENT(cdvar) ) THEN 
    1526                                       CALL iom_nf90_putatt( kiomid, cdatt, pvar, cdvar=cdvar ) 
    1527                                    ELSE 
    1528                                       CALL iom_nf90_putatt( kiomid, cdatt, pvar ) 
    1529                                    ENDIF 
    1530             CASE DEFAULT 
    1531                CALL ctl_stop( 'iom_p0d_iatt: accepted IO library is only jpnf90' ) 
    1532             END SELECT 
    1533          ENDIF 
     1473         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  katt0d =  katt0d, cdvar=cdvar ) 
    15341474      ENDIF 
    15351475   END SUBROUTINE iom_p0d_iatt 
    15361476 
    1537    SUBROUTINE iom_p0d_ratt( kiomid, cdatt, pvar, cdvar ) 
    1538       INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    1539       CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
    1540       REAL(wp)        , INTENT(in   )                 ::   pvar      ! write field 
    1541       CHARACTER(len=*), INTENT(in   ), OPTIONAL      ::   cdvar     ! Name of the variable 
     1477   SUBROUTINE iom_p1d_iatt( kiomid, cdatt, katt1d, cdvar ) 
     1478      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1479      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1480      INTEGER, DIMENSION(:) , INTENT(in   )           ::   katt1d    ! written field 
     1481      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    15421482      ! 
    15431483      IF( kiomid > 0 ) THEN 
    1544          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1545             SELECT CASE (iom_file(kiomid)%iolib) 
    1546             CASE (jpnf90   )   ;   IF( PRESENT(cdvar) ) THEN 
    1547                                       CALL iom_nf90_putatt( kiomid, cdatt, pvar, cdvar=cdvar ) 
    1548                                    ELSE 
    1549                                       CALL iom_nf90_putatt( kiomid, cdatt, pvar ) 
    1550                                    ENDIF 
    1551             CASE DEFAULT     
    1552                CALL ctl_stop( 'iom_p0d_ratt: accepted IO library is only jpnf90' ) 
    1553             END SELECT 
    1554          ENDIF 
     1484         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  katt1d =  katt1d, cdvar=cdvar ) 
     1485      ENDIF 
     1486   END SUBROUTINE iom_p1d_iatt 
     1487 
     1488   SUBROUTINE iom_p0d_ratt( kiomid, cdatt, patt0d, cdvar ) 
     1489      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1490      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1491      REAL(wp)              , INTENT(in   )           ::   patt0d    ! written field 
     1492      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1493      ! 
     1494      IF( kiomid > 0 ) THEN 
     1495         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  patt0d =  patt0d, cdvar=cdvar ) 
    15551496      ENDIF 
    15561497   END SUBROUTINE iom_p0d_ratt 
    15571498 
    1558    SUBROUTINE iom_p0d_catt( kiomid, cdatt, pvar, cdvar ) 
    1559       INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
    1560       CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
    1561       CHARACTER(len=*), INTENT(in   )                 ::   pvar      ! write field 
    1562       CHARACTER(len=*), INTENT(in   ), OPTIONAL      ::   cdvar     ! Name of the variable 
     1499   SUBROUTINE iom_p1d_ratt( kiomid, cdatt, patt1d, cdvar ) 
     1500      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1501      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1502      REAL(wp), DIMENSION(:), INTENT(in   )           ::   patt1d    ! written field 
     1503      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    15631504      ! 
    15641505      IF( kiomid > 0 ) THEN 
    1565          IF( iom_file(kiomid)%nfid > 0 ) THEN 
    1566             SELECT CASE (iom_file(kiomid)%iolib) 
    1567             CASE (jpnf90   )   ;   IF( PRESENT(cdvar) ) THEN 
    1568                                       CALL iom_nf90_putatt( kiomid, cdatt, pvar, cdvar=cdvar ) 
    1569                                    ELSE 
    1570                                       CALL iom_nf90_putatt( kiomid, cdatt, pvar ) 
    1571                                    ENDIF 
    1572             CASE DEFAULT 
    1573                CALL ctl_stop( 'iom_p0d_ratt: accepted IO library is only jpnf90' ) 
    1574             END SELECT 
    1575          ENDIF 
     1506         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  patt1d =  patt1d, cdvar=cdvar ) 
     1507      ENDIF 
     1508   END SUBROUTINE iom_p1d_ratt 
     1509    
     1510   SUBROUTINE iom_p0d_catt( kiomid, cdatt, cdatt0d, cdvar ) 
     1511      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1512      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1513      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt0d   ! written field 
     1514      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1515      ! 
     1516      IF( kiomid > 0 ) THEN 
     1517         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt, cdatt0d = cdatt0d, cdvar=cdvar ) 
    15761518      ENDIF 
    15771519   END SUBROUTINE iom_p0d_catt 
     1520 
    15781521 
    15791522   !!---------------------------------------------------------------------- 
     
    16041547            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    16051548               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1606                SELECT CASE (iom_file(kiomid)%iolib) 
    1607                CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
    1608                CASE DEFAULT      
    1609                   CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1610                END SELECT 
     1549               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
    16111550            ENDIF 
    16121551         ENDIF 
     
    16381577            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    16391578               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1640                SELECT CASE (iom_file(kiomid)%iolib) 
    1641                CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
    1642                CASE DEFAULT      
    1643                   CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1644                END SELECT 
     1579               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
    16451580            ENDIF 
    16461581         ENDIF 
     
    16721607            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    16731608               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1674                SELECT CASE (iom_file(kiomid)%iolib) 
    1675                CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
    1676                CASE DEFAULT      
    1677                   CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1678                END SELECT 
     1609               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
    16791610            ENDIF 
    16801611         ENDIF 
     
    17061637            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    17071638               ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 
    1708                SELECT CASE (iom_file(kiomid)%iolib) 
    1709                CASE (jpnf90   )   ;   CALL iom_nf90_rstput(   kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
    1710                CASE DEFAULT      
    1711                   CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 
    1712                END SELECT 
     1639               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
    17131640            ENDIF 
    17141641         ENDIF 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/IOM/iom_def.F90

    r10068 r10380  
    2323   INTEGER, PARAMETER, PUBLIC ::   jpdom_autoglo_xy    = 9   !: Automatically set horizontal dimensions only 
    2424   INTEGER, PARAMETER, PUBLIC ::   jpdom_autodta       = 10  !:  
    25  
    26    INTEGER, PARAMETER, PUBLIC ::   jpnf90      = 101      !: Use nf90 library 
    27  
    28    INTEGER, PARAMETER, PUBLIC ::   jprstlib  = jpnf90     !: restarts io library 
    2925 
    3026   INTEGER, PARAMETER, PUBLIC ::   jp_r8    = 200      !: write REAL(8) 
     
    5551      CHARACTER(LEN=240)                        ::   name     !: name of the file 
    5652      INTEGER                                   ::   nfid     !: identifier of the file (0 if closed) 
    57       INTEGER                                   ::   iolib    !: library used to read the file (jpnf90 or new formats, 
    5853                                                              !: jpioipsl option has been removed) 
    5954      INTEGER                                   ::   nvars    !: number of identified varibles in the file 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/IOM/iom_nf90.F90

    r10377 r10380  
    3434   INTERFACE iom_nf90_get 
    3535      MODULE PROCEDURE iom_nf90_g0d, iom_nf90_g123d 
    36    END INTERFACE 
    37    INTERFACE iom_nf90_getatt 
    38       MODULE PROCEDURE iom_nf90_giatt, iom_nf90_gratt, iom_nf90_gcatt 
    39    END INTERFACE 
    40    INTERFACE iom_nf90_putatt 
    41       MODULE PROCEDURE iom_nf90_piatt, iom_nf90_pratt, iom_nf90_pcatt 
    4236   END INTERFACE 
    4337   INTERFACE iom_nf90_rstput 
     
    163157         iom_file(kiomid)%name   = TRIM(cdname) 
    164158         iom_file(kiomid)%nfid   = if90id 
    165          iom_file(kiomid)%iolib  = jpnf90 
    166159         iom_file(kiomid)%nvars  = 0 
    167160         iom_file(kiomid)%irec   = -1   ! useless for NetCDF files, used to know if the file is in define mode  
     
    327320   END SUBROUTINE iom_nf90_g123d 
    328321 
    329    !!---------------------------------------------------------------------- 
    330    !!                   INTERFACE iom_nf90_getatt 
    331    !!---------------------------------------------------------------------- 
    332  
    333    SUBROUTINE iom_nf90_giatt( kiomid, cdatt, pv_i0d, cdvar) 
    334       !!----------------------------------------------------------------------- 
    335       !!                  ***  ROUTINE  iom_nf90_giatt  *** 
    336       !! 
    337       !! ** Purpose : read an integer attribute with NF90 
     322 
     323   SUBROUTINE iom_nf90_getatt( kiomid, cdatt, katt0d, katt1d, patt0d, patt1d, cdatt0d, cdvar) 
     324      !!----------------------------------------------------------------------- 
     325      !!                  ***  ROUTINE  iom_nf90_getatt  *** 
     326      !! 
     327      !! ** Purpose : read an attribute with NF90 
    338328      !!              (either a global attribute (default) or a variable 
    339329      !!               attribute if optional variable name is supplied (cdvar)) 
    340330      !!----------------------------------------------------------------------- 
    341       INTEGER         , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    342       CHARACTER(len=*), INTENT(in   ) ::   cdatt    ! attribute name 
    343       INTEGER         , INTENT(  out) ::   pv_i0d   ! read field 
    344       CHARACTER(len=*), INTENT(in   ), OPTIONAL     & 
    345                       &               ::   cdvar    ! name of the variable 
     331      INTEGER               , INTENT(in   )           ::   kiomid   ! Identifier of the file 
     332      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt    ! attribute name 
     333      INTEGER               , INTENT(  out), OPTIONAL ::   katt0d   ! read scalar integer 
     334      INTEGER, DIMENSION(:) , INTENT(  out), OPTIONAL ::   katt1d   ! read 1d array integer 
     335      REAL(wp)              , INTENT(  out), OPTIONAL ::   patt0d   ! read scalar  real 
     336      REAL(wp), DIMENSION(:), INTENT(  out), OPTIONAL ::   patt1d   ! read 1d array real 
     337      CHARACTER(len=*)      , INTENT(  out), OPTIONAL ::   cdatt0d  ! read character 
     338      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar    ! name of the variable 
    346339      ! 
    347340      INTEGER                         ::   if90id   ! temporary integer 
     
    359352            llok = NF90_Inquire_attribute(if90id, ivarid, cdatt) == nf90_noerr 
    360353         ELSE 
    361             CALL ctl_warn('iom_nf90_getatt: no variable '//cdvar//' found') 
     354            CALL ctl_warn('iom_nf90_getatt: no variable '//TRIM(cdvar)//' found') 
    362355         ENDIF 
    363356      ELSE 
     
    367360      ! 
    368361      IF( llok) THEN 
    369          clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', giatt: '//TRIM(cdatt) 
    370          CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values=pv_i0d), clinfo) 
     362         clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 
     363         IF(PRESENT( katt0d))   CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values =  katt0d), clinfo) 
     364         IF(PRESENT( katt1d))   CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values =  katt1d), clinfo) 
     365         IF(PRESENT( patt0d))   CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values =  patt0d), clinfo) 
     366         IF(PRESENT( patt1d))   CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values =  patt1d), clinfo) 
     367         IF(PRESENT(cdatt0d))   CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values = cdatt0d), clinfo) 
    371368      ELSE 
    372          CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 
    373          pv_i0d = -999 
    374       ENDIF 
    375       ! 
    376    END SUBROUTINE iom_nf90_giatt 
    377  
    378  
    379    SUBROUTINE iom_nf90_gratt( kiomid, cdatt, pv_r0d, cdvar ) 
    380       !!----------------------------------------------------------------------- 
    381       !!                  ***  ROUTINE  iom_nf90_gratt  *** 
    382       !! 
    383       !! ** Purpose : read a real attribute with NF90 
     369         CALL ctl_warn('iom_nf90_getatt: no attribute '//TRIM(cdatt)//' found') 
     370         IF(PRESENT( katt0d))    katt0d    = -999 
     371         IF(PRESENT( katt1d))    katt1d(:) = -999 
     372         IF(PRESENT( patt0d))    patt0d    = -999._wp 
     373         IF(PRESENT( patt1d))    patt1d(:) = -999._wp 
     374         IF(PRESENT(cdatt0d))   cdatt0d    = '!' 
     375      ENDIF 
     376      ! 
     377   END SUBROUTINE iom_nf90_getatt 
     378 
     379 
     380   SUBROUTINE iom_nf90_putatt( kiomid, cdatt, katt0d, katt1d, patt0d, patt1d, cdatt0d, cdvar) 
     381      !!----------------------------------------------------------------------- 
     382      !!                  ***  ROUTINE  iom_nf90_putatt  *** 
     383      !! 
     384      !! ** Purpose : write an attribute with NF90 
    384385      !!              (either a global attribute (default) or a variable 
    385386      !!               attribute if optional variable name is supplied (cdvar)) 
    386387      !!----------------------------------------------------------------------- 
    387       INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    388       CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
    389       REAL(wp)                  , INTENT(  out) ::   pv_r0d   ! read field 
    390       CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
    391       ! 
    392       INTEGER            ::   if90id   ! temporary integer 
    393       INTEGER            ::   ivarid   ! NetCDF variable Id 
    394       LOGICAL            ::   llok     ! temporary logical 
    395       CHARACTER(LEN=100) ::   clinfo   ! info character 
    396       !--------------------------------------------------------------------- 
    397       ! 
    398       if90id = iom_file(kiomid)%nfid 
    399       IF( PRESENT(cdvar) ) THEN 
    400          ! check the variable exists in the file 
    401          llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr 
    402          IF( llok ) THEN 
    403             ! check the variable has the attribute required 
    404             llok = NF90_Inquire_attribute(if90id, ivarid, cdatt) == nf90_noerr 
    405          ELSE 
    406             CALL ctl_warn('iom_nf90_getatt: no variable '//cdvar//' found') 
    407          ENDIF 
    408       ELSE 
    409          llok = NF90_Inquire_attribute(if90id, NF90_GLOBAL, cdatt) == nf90_noerr 
    410          ivarid = NF90_GLOBAL 
    411       ENDIF 
    412       ! 
    413       IF( llok) THEN 
    414          clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', gratt: '//TRIM(cdatt) 
    415          CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values=pv_r0d), clinfo) 
    416       ELSE 
    417          CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 
    418          pv_r0d = -999._wp 
    419       ENDIF 
    420       ! 
    421    END SUBROUTINE iom_nf90_gratt 
    422  
    423  
    424    SUBROUTINE iom_nf90_gcatt( kiomid, cdatt, pv_c0d, cdvar ) 
    425       !!----------------------------------------------------------------------- 
    426       !!                  ***  ROUTINE  iom_nf90_gcatt  *** 
    427       !! 
    428       !! ** Purpose : read a character attribute with NF90 
    429       !!              (either a global attribute (default) or a variable 
    430       !!               attribute if optional variable name is supplied (cdvar)) 
    431       !!----------------------------------------------------------------------- 
    432       INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    433       CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
    434       CHARACTER(len=*)          , INTENT(  out) ::   pv_c0d   ! read field 
    435       CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
    436       ! 
    437       INTEGER            ::   if90id   ! temporary integer 
    438       INTEGER            ::   ivarid   ! NetCDF variable Id 
    439       LOGICAL            ::   llok     ! temporary logical 
    440       CHARACTER(LEN=100) ::   clinfo   ! info character 
    441       !--------------------------------------------------------------------- 
    442       ! 
    443       if90id = iom_file(kiomid)%nfid 
    444       IF( PRESENT(cdvar) ) THEN 
    445          ! check the variable exists in the file 
    446          llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr 
    447          IF( llok ) THEN 
    448             ! check the variable has the attribute required 
    449             llok = NF90_Inquire_attribute(if90id, ivarid, cdatt) == nf90_noerr 
    450          ELSE 
    451             CALL ctl_warn('iom_nf90_getatt: no variable '//cdvar//' found') 
    452          ENDIF 
    453       ELSE 
    454          llok = NF90_Inquire_attribute(if90id, NF90_GLOBAL, cdatt) == nf90_noerr 
    455          ivarid = NF90_GLOBAL 
    456       ENDIF 
    457 ! 
    458       IF( llok) THEN 
    459          clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', gcatt: '//TRIM(cdatt) 
    460          CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, cdatt, values=pv_c0d), clinfo) 
    461       ELSE 
    462          CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 
    463          pv_c0d = '!' 
    464       ENDIF 
    465       ! 
    466    END SUBROUTINE iom_nf90_gcatt 
    467  
    468  
    469    !!---------------------------------------------------------------------- 
    470    !!                   INTERFACE iom_nf90_putatt 
    471    !!---------------------------------------------------------------------- 
    472  
    473    SUBROUTINE iom_nf90_piatt( kiomid, cdatt, pv_i0d, cdvar) 
    474       !!----------------------------------------------------------------------- 
    475       !!                  ***  ROUTINE  iom_nf90_piatt  *** 
    476       !! 
    477       !! ** Purpose : write an integer attribute with NF90 
    478       !!              (either a global attribute (default) or a variable 
    479       !!               attribute if optional variable name is supplied (cdvar)) 
    480       !!----------------------------------------------------------------------- 
    481       INTEGER         , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    482       CHARACTER(len=*), INTENT(in   ) ::   cdatt    ! attribute name 
    483       INTEGER         , INTENT(in   ) ::   pv_i0d   ! write field 
    484       CHARACTER(len=*), INTENT(in   ), OPTIONAL     & 
    485                       &               ::   cdvar    ! name of the variable 
     388      INTEGER               , INTENT(in   )           ::   kiomid   ! Identifier of the file 
     389      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt    ! attribute name 
     390      INTEGER               , INTENT(in   ), OPTIONAL ::   katt0d   ! read scalar integer 
     391      INTEGER, DIMENSION(:) , INTENT(in   ), OPTIONAL ::   katt1d   ! read 1d array integer 
     392      REAL(wp)              , INTENT(in   ), OPTIONAL ::   patt0d   ! read scalar  real 
     393      REAL(wp), DIMENSION(:), INTENT(in   ), OPTIONAL ::   patt1d   ! read 1d array real 
     394      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdatt0d  ! read character 
     395      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar    ! name of the variable 
    486396      ! 
    487397      INTEGER                         ::   if90id   ! temporary integer 
     
    498408         llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr 
    499409         IF( .NOT. llok ) THEN 
    500             CALL ctl_warn('iom_nf90_putatt: no variable '//cdvar//' found') 
     410            CALL ctl_warn('iom_nf90_putatt: no variable '//TRIM(cdvar)//' found') 
    501411         ENDIF 
    502412      ELSE 
     
    506416      ! 
    507417      IF( llok) THEN 
    508          clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', piatt: '//TRIM(cdatt) 
     418         clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 
    509419         IF( iom_file(kiomid)%irec /= -1 ) THEN    
    510420            ! trick: irec used to know if the file is in define mode or not 
     
    514424         ENDIF 
    515425         ! 
    516          CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values=pv_i0d), clinfo) 
     426         IF(PRESENT( katt0d))   CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values =  katt0d), clinfo) 
     427         IF(PRESENT( katt1d))   CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values =  katt1d), clinfo) 
     428         IF(PRESENT( patt0d))   CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values =  patt0d), clinfo) 
     429         IF(PRESENT( patt1d))   CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values =  patt1d), clinfo) 
     430         IF(PRESENT(cdatt0d))   CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values = cdatt0d), clinfo) 
    517431         ! 
    518          IF( lenddef ) THEN    
    519             ! file was in data mode on entry; put it back in that mode 
     432         IF( lenddef ) THEN   ! file was in data mode on entry; put it back in that mode 
    520433            CALL iom_nf90_check(NF90_ENDDEF( if90id ), clinfo) 
    521434         ENDIF 
    522435      ELSE 
    523          CALL ctl_warn('iom_nf90_putatt: no attribute '//cdatt//' written') 
    524       ENDIF 
    525       ! 
    526    END SUBROUTINE iom_nf90_piatt 
    527  
    528  
    529    SUBROUTINE iom_nf90_pratt( kiomid, cdatt, pv_r0d, cdvar ) 
    530       !!----------------------------------------------------------------------- 
    531       !!                  ***  ROUTINE  iom_nf90_pratt  *** 
    532       !! 
    533       !! ** Purpose : write a real attribute with NF90 
    534       !!              (either a global attribute (default) or a variable 
    535       !!               attribute if optional variable name is supplied (cdvar)) 
    536       !!----------------------------------------------------------------------- 
    537       INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    538       CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
    539       REAL(wp)                  , INTENT(in   ) ::   pv_r0d   ! write field 
    540       CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
    541       ! 
    542       INTEGER            ::   if90id   ! temporary integer 
    543       INTEGER            ::   ivarid   ! NetCDF variable Id 
    544       LOGICAL            ::   llok     ! temporary logical 
    545       LOGICAL            ::   lenddef  ! temporary logical 
    546       CHARACTER(LEN=100) ::   clinfo   ! info character 
    547       !--------------------------------------------------------------------- 
    548       ! 
    549       if90id = iom_file(kiomid)%nfid 
    550       lenddef = .false. 
    551       IF( PRESENT(cdvar) ) THEN 
    552          ! check the variable exists in the file 
    553          llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr 
    554          IF( .NOT. llok ) THEN 
    555             CALL ctl_warn('iom_nf90_putatt: no variable '//cdvar//' found') 
    556          ENDIF 
    557       ELSE 
    558          llok = .true. 
    559          ivarid = NF90_GLOBAL 
    560       ENDIF 
    561       ! 
    562       IF( llok) THEN 
    563          clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', pratt: '//TRIM(cdatt) 
    564          IF( iom_file(kiomid)%irec /= -1 ) THEN    
    565             ! trick: irec used to know if the file is in define mode or not 
    566             ! if it is not then temporarily put it into define mode 
    567             CALL iom_nf90_check(NF90_REDEF( if90id ), clinfo) 
    568             lenddef = .true. 
    569          ENDIF 
    570          ! 
    571          CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values=pv_r0d), clinfo) 
    572          ! 
    573          IF( lenddef ) THEN    
    574             ! file was in data mode on entry; put it back in that mode 
    575             CALL iom_nf90_check(NF90_ENDDEF( if90id ), clinfo) 
    576          ENDIF 
    577       ELSE 
    578          CALL ctl_warn('iom_nf90_putatt: no attribute '//cdatt//' written') 
    579       ENDIF 
    580       ! 
    581    END SUBROUTINE iom_nf90_pratt 
    582  
    583  
    584    SUBROUTINE iom_nf90_pcatt( kiomid, cdatt, pv_c0d, cdvar ) 
    585       !!----------------------------------------------------------------------- 
    586       !!                  ***  ROUTINE  iom_nf90_pcatt  *** 
    587       !! 
    588       !! ** Purpose : write a character attribute with NF90 
    589       !!              (either a global attribute (default) or a variable 
    590       !!               attribute if optional variable name is supplied (cdvar)) 
    591       !!----------------------------------------------------------------------- 
    592       INTEGER                   , INTENT(in   ) ::   kiomid   ! Identifier of the file 
    593       CHARACTER(len=*)          , INTENT(in   ) ::   cdatt    ! attribute name 
    594       CHARACTER(len=*)          , INTENT(in   ) ::   pv_c0d   ! write field 
    595       CHARACTER(len=*), OPTIONAL, INTENT(in   ) ::   cdvar    ! name of the variable 
    596       ! 
    597       INTEGER            ::   if90id   ! temporary integer 
    598       INTEGER            ::   ivarid   ! NetCDF variable Id 
    599       LOGICAL            ::   llok     ! temporary logical 
    600       LOGICAL            ::   lenddef  ! temporary logical 
    601       CHARACTER(LEN=100) ::   clinfo   ! info character 
    602       !--------------------------------------------------------------------- 
    603       ! 
    604       if90id = iom_file(kiomid)%nfid 
    605       lenddef = .false. 
    606       IF( PRESENT(cdvar) ) THEN 
    607          ! check the variable exists in the file 
    608          llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr 
    609          IF( .NOT. llok ) THEN 
    610             CALL ctl_warn('iom_nf90_putatt: no variable '//cdvar//' found') 
    611          ENDIF 
    612       ELSE 
    613          llok = .true. 
    614          ivarid = NF90_GLOBAL 
    615       ENDIF 
    616       ! 
    617       IF( llok) THEN 
    618          clinfo = 'iom_nf90_putatt, file: '//TRIM(iom_file(kiomid)%name)//', pcatt: '//TRIM(cdatt) 
    619          IF( iom_file(kiomid)%irec /= -1 ) THEN    
    620             ! trick: irec used to know if the file is in define mode or not 
    621             ! if it is not then temporarily put it into define mode 
    622             CALL iom_nf90_check(NF90_REDEF( if90id ), clinfo) 
    623             lenddef = .true. 
    624          ENDIF 
    625          ! 
    626          CALL iom_nf90_check(NF90_PUT_ATT(if90id, ivarid, cdatt, values=pv_c0d), clinfo) 
    627          ! 
    628          IF( lenddef ) THEN    
    629             ! file was in data mode on entry; put it back in that mode 
    630             CALL iom_nf90_check(NF90_ENDDEF( if90id ), clinfo) 
    631          ENDIF 
    632       ELSE 
    633          CALL ctl_warn('iom_nf90_putatt: no attribute '//cdatt//' written') 
    634       ENDIF 
    635       ! 
    636    END SUBROUTINE iom_nf90_pcatt 
     436         CALL ctl_warn('iom_nf90_putatt: no attribute '//TRIM(cdatt)//' written') 
     437      ENDIF 
     438      ! 
     439   END SUBROUTINE iom_nf90_putatt 
    637440 
    638441 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/IOM/restart.F90

    r10359 r10380  
    9797               WRITE(numout,*) 
    9898               IF(.NOT.lwxios) THEN 
    99                   SELECT CASE ( jprstlib ) 
    100                   CASE DEFAULT         ;   WRITE(numout,*)                            & 
    101                       '             open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
    102                   END SELECT 
     99                  WRITE(numout,*) '             open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 
    103100                  IF ( snc4set%luse )      WRITE(numout,*) '             opened for NetCDF4 chunking and compression' 
    104101                  IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt 
     
    109106            ! 
    110107            IF(.NOT.lwxios) THEN 
    111                CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 
     108               CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE. ) 
    112109            ELSE 
    113110#if defined key_iomput 
     
    137134      !!                   ***  ROUTINE rstwrite  *** 
    138135      !!                      
    139       !! ** Purpose :   Write restart fields in the format corresponding to jprstlib 
     136      !! ** Purpose :   Write restart fields in NetCDF format 
    140137      !! 
    141138      !! ** Method  :   Write in numrow when kt == nitrst in NetCDF 
     
    201198      !!                   ***  ROUTINE rst_read_open  *** 
    202199      !!  
    203       !! ** Purpose :   Open read files for restart (format fixed by jprstlib ) 
     200      !! ** Purpose :   Open read files for NetCDF restart 
    204201      !!  
    205202      !! ** Method  :   Use a non-zero, positive value of numror to assess whether or not 
    206203      !!                the file has already been opened 
    207204      !!---------------------------------------------------------------------- 
    208       INTEGER        ::   jlibalt = jprstlib 
    209205      LOGICAL        ::   llok 
    210206      CHARACTER(lc)  ::   clpath   ! full path to ocean output restart file 
     
    214210         IF(lwp) THEN                                             ! Contol prints 
    215211            WRITE(numout,*) 
    216             SELECT CASE ( jprstlib ) 
    217             CASE ( jpnf90    )   ;   WRITE(numout,*) 'rst_read : read oce NetCDF restart file' 
    218             END SELECT 
     212            WRITE(numout,*) 'rst_read : read oce NetCDF restart file' 
    219213            IF ( snc4set%luse )      WRITE(numout,*) 'rst_read : configured with NetCDF4 support' 
    220214            WRITE(numout,*) '~~~~~~~~' 
     
    223217         clpath = TRIM(cn_ocerst_indir) 
    224218         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    225          CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 
     219         CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror ) 
    226220! are we using XIOS to read the data? Part above will have to modified once XIOS 
    227221! can handle checking if variable is in the restart file (there will be no need to open 
     
    250244      !!                   ***  ROUTINE rst_read  *** 
    251245      !!  
    252       !! ** Purpose :   Read files for restart (format fixed by jprstlib ) 
     246      !! ** Purpose :   Read files for NetCDF restart 
    253247      !!  
    254248      !! ** Method  :   Read in restart.nc file fields which are necessary for restart 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/SBC/sbcrnf.F90

    r10297 r10380  
    423423         IF( nn_rnf_depth_file == 1 ) THEN      !  save  output nb levels for runoff 
    424424            IF(lwp) WRITE(numout,*) '   ==>>>   create runoff depht file' 
    425             CALL iom_open  ( TRIM( sn_dep_rnf%clname ), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     425            CALL iom_open  ( TRIM( sn_dep_rnf%clname ), inum, ldwrt = .TRUE. ) 
    426426            CALL iom_rstput( 0, 0, inum, 'rodepth', h_rnf ) 
    427427            CALL iom_close ( inum ) 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/STO/stopar.F90

    r10170 r10380  
    701701 
    702702         ! Open the restart file 
    703          CALL iom_open( cn_storst_in, numstor, kiolib = jprstlib ) 
     703         CALL iom_open( cn_storst_in, numstor ) 
    704704 
    705705         ! Get stochastic parameters from restart file: 
     
    806806            ENDIF 
    807807            ! open the restart file 
    808             CALL iom_open( clname, numstow, ldwrt = .TRUE., kiolib = jprstlib ) 
     808            CALL iom_open( clname, numstow, ldwrt = .TRUE. ) 
    809809         ENDIF 
    810810         ENDIF 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/TRD/trdmxl_rst.F90

    r10068 r10380  
    6161         IF(lwp) THEN 
    6262            WRITE(numout,*) 
    63             SELECT CASE ( jprstlib ) 
    64             CASE DEFAULT         ;   WRITE(numout,*) '             open ocean restart_mxl NetCDF file: '//clname 
    65             END SELECT 
     63            WRITE(numout,*) '             open ocean restart_mxl NetCDF file: '//clname 
    6664            IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt,' date= ', ndastp 
    6765            ELSE                          ;   WRITE(numout,*) '             kt = '             , kt,' date= ', ndastp 
     
    6967         ENDIF 
    7068 
    71          CALL iom_open( TRIM(clpath)//TRIM(clname), nummxlw, ldwrt = .TRUE., kiolib = jprstlib ) 
     69         CALL iom_open( TRIM(clpath)//TRIM(clname), nummxlw, ldwrt = .TRUE. ) 
    7270      ENDIF 
    7371 
     
    133131      CHARACTER (len=35) :: charout 
    134132      INTEGER ::   jk         ! loop indice 
    135       INTEGER ::   jlibalt = jprstlib 
    136133      LOGICAL ::   llok 
    137134      CHARACTER(LEN=256)  ::   clpath   ! full path to restart file 
     
    146143      clpath = TRIM(cn_ocerst_indir) 
    147144      IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    148       CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_in), inum, kiolib = jlibalt )  
     145      CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_in), inum )  
    149146 
    150147      IF( ln_trdmxl_instant ) THEN  
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/SAS/diawri.F90

    r10358 r10380  
    354354 
    355355#if defined key_si3 
    356      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kiolib = jprstlib, kdlev = jpl ) 
     356     CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kdlev = jpl ) 
    357357#else 
    358      CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE., kiolib = jprstlib ) 
     358     CALL iom_open( TRIM(cdfile_name), inum, ldwrt = .TRUE. ) 
    359359#endif 
    360360 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/SED/sedrst.F90

    r10345 r10380  
    7878         IF(lwp) WRITE(numsed,*) & 
    7979             '             open sed restart.output NetCDF file: ',TRIM(clpath)//clname 
    80          CALL iom_open( TRIM(clpath)//TRIM(clname), numrsw, ldwrt = .TRUE., kiolib = jprstlib, kdlev = jpksed ) 
     80         CALL iom_open( TRIM(clpath)//TRIM(clname), numrsw, ldwrt = .TRUE., kdlev = jpksed ) 
    8181         lrst_sed = .TRUE. 
    8282      ENDIF 
     
    105105      CHARACTER(len = 20) ::   cltra 
    106106      CHARACTER(LEN=20)   ::   name1 
    107       INTEGER             ::   jlibalt = jprstlib 
    108107      LOGICAL             ::   llok 
    109108      !-------------------------------------------------------------------- 
     
    338337      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    339338      ! 
    340       INTEGER  ::  jlibalt = jprstlib 
    341339      LOGICAL  ::  llok 
    342340      REAL(wp) ::  zkt, zrdttrc1 
     
    353351 
    354352         IF( ln_rst_sed ) THEN 
    355             CALL iom_open( TRIM(cn_sedrst_indir)//'/'//cn_sedrst_in, numrsr, kiolib = jlibalt ) 
     353            CALL iom_open( TRIM(cn_sedrst_indir)//'/'//cn_sedrst_in, numrsr ) 
    356354            CALL iom_get ( numrsr, 'kt', zkt )   ! last time-step of previous run 
    357355 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/TRP/trdmxl_trc_rst.F90

    r10068 r10380  
    5454         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    5555         IF(lwp) WRITE(numout,*) '             open ocean restart_mld_trc NetCDF  'TRIM(clpath)//TRIM(clname) 
    56          CALL iom_open( TRIM(clpath)//TRIM(clname), nummldw_trc, ldwrt = .TRUE., kiolib = jprstlib ) 
     56         CALL iom_open( TRIM(clpath)//TRIM(clname), nummldw_trc, ldwrt = .TRUE. ) 
    5757      ENDIF 
    5858 
     
    127127      CHARACTER (len=35) :: charout 
    128128      INTEGER ::  jk, jn, jl     ! loop indice 
    129       INTEGER ::  jlibalt = jprstlib 
    130129      LOGICAL ::  llok 
    131130      CHARACTER(LEN=256)  ::   clpath   ! full path to restart file 
     
    140139      clpath = TRIM(cn_trcrst_indir) 
    141140      IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    142       CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_trc_in), inum, kiolib = jlibalt )  
     141      CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_trc_in), inum )  
    143142       
    144143      IF( ln_trdmxl_trc_instant ) THEN  
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/trcrst.F90

    r10345 r10380  
    8787         IF(lwp) WRITE(numout,*) & 
    8888             '             open trc restart.output NetCDF file: ',TRIM(clpath)//clname 
    89          CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE., kiolib = jprstlib ) 
     89         CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE. ) 
    9090         lrst_trc = .TRUE. 
    9191      ENDIF 
     
    184184      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    185185      ! 
    186       INTEGER  ::  jlibalt = jprstlib 
    187186      LOGICAL  ::  llok 
    188187      REAL(wp) ::  zrdttrc1, zkt, zndastp, zdayfrac, ksecs, ktime 
     
    199198 
    200199         IF( ln_rsttr ) THEN 
    201             CALL iom_open( TRIM(cn_trcrst_indir)//'/'//cn_trcrst_in, numrtr, kiolib = jlibalt ) 
     200            CALL iom_open( TRIM(cn_trcrst_indir)//'/'//cn_trcrst_in, numrtr ) 
    202201            CALL iom_get ( numrtr, 'kt', zkt )   ! last time-step of previous run 
    203202 
Note: See TracChangeset for help on using the changeset viewer.