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 10425 for NEMO/trunk/src/OCE/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2018-12-19T22:54:16+01:00 (5 years ago)
Author:
smasson
Message:

trunk: merge back dev_r10164_HPC09_ESIWACE_PREP_MERGE@10424 into the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/IOM/iom.F90

    r10361 r10425  
    5858#endif 
    5959   PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get 
    60    PUBLIC iom_getatt, iom_putatt, iom_gettime, iom_rstput, iom_put 
     60   PUBLIC iom_chkatt, iom_getatt, iom_putatt, iom_gettime, iom_rstput, iom_delay_rst, iom_put 
    6161   PUBLIC iom_use, iom_context_finalize 
    6262 
     
    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 
     
    286286!Warn if variable is not in defined in rst_wfields 
    287287   IF(.NOT.llis_set) THEN 
    288       IF(lwp) THEN 
    289          write(numout,cform_err) 
    290          write(numout,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined'  
    291       ENDIF 
    292         nstop = nstop + 1 
     288      WRITE(ctmp1,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined'  
     289      CALL ctl_stop( 'iom_set_rstw_var_active:', ctmp1 ) 
    293290   ENDIF 
    294291#else 
     
    518515 
    519516        IF( i-1 > max_rst_fields) THEN 
    520         IF(lwp) write(numout,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
    521         nstop = nstop + 1 
     517           WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
     518           CALL ctl_stop( 'iom_set_rst_vars:', ctmp1 ) 
    522519        ENDIF 
    523520   END SUBROUTINE iom_set_rst_vars 
     
    634631 
    635632 
    636    SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, kiolib, ldstop, ldiof, kdlev ) 
     633   SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, ldstop, ldiof, kdlev ) 
    637634      !!--------------------------------------------------------------------- 
    638635      !!                   ***  SUBROUTINE  iom_open  *** 
     
    644641      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldwrt    ! open in write modeb          (default = .FALSE.) 
    645642      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)  
    647643      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldstop   ! stop if open to read a non-existing file (default = .TRUE.) 
    648644      LOGICAL         , INTENT(in   ), OPTIONAL ::   ldiof    ! Interp On the Fly, needed for AGRIF (default = .FALSE.) 
     
    659655      LOGICAL               ::   llstop    ! local definition of ldstop 
    660656      LOGICAL               ::   lliof     ! local definition of ldiof 
    661       INTEGER               ::   iolib     ! library do we use to open the file 
    662657      INTEGER               ::   icnt      ! counter for digits in clcpu (max = jpmax_digits) 
    663658      INTEGER               ::   iln, ils  ! lengths of character 
     
    692687      ELSE                         ;   llstop = .TRUE. 
    693688      ENDIF 
    694       ! what library do we use to open the file? 
    695       IF( PRESENT(kiolib) ) THEN   ;   iolib = kiolib 
    696       ELSE                         ;   iolib = jpnf90 
    697       ENDIF 
    698689      ! are we using interpolation on the fly? 
    699690      IF( PRESENT(ldiof) ) THEN   ;   lliof = ldiof 
     
    713704      ENDIF 
    714705      ! 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 
     706      clsuffix = '.nc' 
    720707      ! Add the suffix if needed 
    721708      iln = LEN_TRIM(clname) 
     
    802789      ENDIF 
    803790      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 
     791         CALL iom_nf90_open( clname, kiomid, llwrt, llok, idompar, kdlev = kdlev ) 
    809792      ENDIF 
    810793      ! 
     
    839822         DO jf = i_s, i_e 
    840823            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 
     824               CALL iom_nf90_close( jf ) 
    846825               iom_file(jf)%nfid       = 0          ! free the id  
    847826               IF( PRESENT(kiomid) )   kiomid = 0   ! return 0 as id to specify that the file was closed 
     
    896875               iiv = iiv + 1 
    897876               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 
     877                  iom_varid = iom_nf90_varid( kiomid, cdvar, iiv, kdimsz, kndims ) 
    903878               ELSE 
    904879                  CALL ctl_stop( trim(clinfo), 'Too many variables in the file '//iom_file(kiomid)%name,   & 
    905                         &                         'increase the parameter jpmax_vars') 
     880                        &                      'increase the parameter jpmax_vars') 
    906881               ENDIF 
    907882               IF( llstop .AND. iom_varid == -1 )   CALL ctl_stop( TRIM(clinfo)//' not found' )  
     
    962937                                    &                         'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 
    963938                                    &                         '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 
     939               CALL iom_nf90_get( kiomid, idvar, pvar, itime ) 
    969940            ENDIF 
    970941         ENDIF 
     
    976947         CALL iom_swap( TRIM(cxios_context) ) 
    977948#else 
    978          nstop = nstop + 1  
    979          clinfo = 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) 
     949         WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) 
     950         CALL ctl_stop( 'iom_g0d', ctmp1 ) 
    980951#endif 
    981952      ENDIF 
     
    11221093            IF( lrowattr .AND. idom /= jpdom_data   ) CALL ctl_stop(trim(clinfo), 'lrowattr present and true needs kdom = jpdom_data') 
    11231094            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 
    11321095         ENDIF 
    11331096 
     
    13011264            ENDIF 
    13021265       
    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 
     1266            CALL iom_nf90_get( kiomid, idvar, inbdim, istart, icnt, ix1, ix2, iy1, iy2, pv_r1d, pv_r2d, pv_r3d ) 
    13091267 
    13101268            IF( istop == nstop ) THEN   ! no additional errors until this point... 
     
    13131271               !--- overlap areas and extra hallows (mpp) 
    13141272               IF(     PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 
    1315                   CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 
     1273                  CALL lbc_lnk( 'iom', pv_r2d,'Z',-999.,'no0' ) 
    13161274               ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 
    13171275                  ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 
    13181276                  IF( icnt(3) == inlev ) THEN 
    1319                      CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     1277                     CALL lbc_lnk( 'iom', pv_r3d,'Z',-999.,'no0' ) 
    13201278                  ELSE   ! put some arbitrary value (a call to lbc_lnk will be done later...) 
    13211279                     DO jj = nlcj+1, jpj   ;   pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :)   ;   END DO 
     
    13421300            CALL xios_recv_field( trim(cdvar), pv_r3d) 
    13431301            IF(idom /= jpdom_unknown ) then 
    1344                 CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 
     1302                CALL lbc_lnk( 'iom', pv_r3d,'Z',-999.,'no0' ) 
    13451303            ENDIF 
    13461304         ELSEIF( PRESENT(pv_r2d) ) THEN 
     
    13491307            CALL xios_recv_field( trim(cdvar), pv_r2d) 
    13501308            IF(idom /= jpdom_unknown ) THEN 
    1351                 CALL lbc_lnk(pv_r2d,'Z',-999.,'no0') 
     1309                CALL lbc_lnk('iom', pv_r2d,'Z',-999.,'no0') 
    13521310            ENDIF 
    13531311         ELSEIF( PRESENT(pv_r1d) ) THEN 
     
    13641322!some final adjustments 
    13651323      ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 
    1366       IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( pv_r2d,'Z',1. ) 
    1367       IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( pv_r3d,'Z',1. ) 
     1324      IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( 'iom', pv_r2d,'Z',1. ) 
     1325      IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( 'iom', pv_r3d,'Z',1. ) 
    13681326 
    13691327      !--- Apply scale_factor and offset 
     
    14221380               IF( iom_file(kiomid)%luld(idvar) ) THEN 
    14231381                  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 
     1382                     CALL iom_nf90_gettime(   kiomid, idvar, ptime, cdunits, cdcalendar ) 
    14291383                  ELSE 
    14301384                     WRITE(ctmp1,*) 'error with the size of ptime ',size(ptime),iom_file(kiomid)%dimsz(1,idvar) 
     
    14441398   END SUBROUTINE iom_gettime 
    14451399 
     1400   !!---------------------------------------------------------------------- 
     1401   !!                   INTERFACE iom_chkatt 
     1402   !!---------------------------------------------------------------------- 
     1403   SUBROUTINE iom_chkatt( kiomid, cdatt, llok, ksize, cdvar ) 
     1404      INTEGER         , INTENT(in   )                 ::   kiomid    ! Identifier of the file 
     1405      CHARACTER(len=*), INTENT(in   )                 ::   cdatt     ! Name of the attribute 
     1406      LOGICAL         , INTENT(  out)                 ::   llok      ! Error code 
     1407      INTEGER         , INTENT(  out), OPTIONAL       ::   ksize     ! Size of the attribute array 
     1408      CHARACTER(len=*), INTENT(in   ), OPTIONAL       ::   cdvar     ! Name of the variable 
     1409      ! 
     1410      IF( kiomid > 0 ) THEN 
     1411         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_chkatt( kiomid, cdatt, llok, ksize=ksize, cdvar=cdvar ) 
     1412      ENDIF 
     1413      ! 
     1414   END SUBROUTINE iom_chkatt 
    14461415 
    14471416   !!---------------------------------------------------------------------- 
    14481417   !!                   INTERFACE iom_getatt 
    14491418   !!---------------------------------------------------------------------- 
    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 
     1419   SUBROUTINE iom_g0d_iatt( kiomid, cdatt, katt0d, cdvar ) 
     1420      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1421      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1422      INTEGER               , INTENT(  out)           ::   katt0d    ! read field 
     1423      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    14551424      ! 
    14561425      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 
     1426         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  katt0d =  katt0d, cdvar=cdvar ) 
    14681427      ENDIF 
    14691428   END SUBROUTINE iom_g0d_iatt 
    14701429 
    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 
     1430   SUBROUTINE iom_g1d_iatt( kiomid, cdatt, katt1d, cdvar ) 
     1431      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1432      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1433      INTEGER, DIMENSION(:) , INTENT(  out)           ::   katt1d    ! read field 
     1434      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    14761435      ! 
    14771436      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 
     1437         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  katt1d =  katt1d, cdvar=cdvar ) 
     1438      ENDIF 
     1439   END SUBROUTINE iom_g1d_iatt 
     1440 
     1441   SUBROUTINE iom_g0d_ratt( kiomid, cdatt, patt0d, cdvar ) 
     1442      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1443      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1444      REAL(wp)              , INTENT(  out)           ::   patt0d    ! read field 
     1445      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1446      ! 
     1447      IF( kiomid > 0 ) THEN 
     1448         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  patt0d =  patt0d, cdvar=cdvar ) 
    14891449      ENDIF 
    14901450   END SUBROUTINE iom_g0d_ratt 
    14911451 
    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 
     1452   SUBROUTINE iom_g1d_ratt( kiomid, cdatt, patt1d, cdvar ) 
     1453      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1454      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1455      REAL(wp), DIMENSION(:), INTENT(  out)           ::   patt1d    ! read field 
     1456      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    14971457      ! 
    14981458      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 
     1459         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt,  patt1d =  patt1d, cdvar=cdvar ) 
     1460      ENDIF 
     1461   END SUBROUTINE iom_g1d_ratt 
     1462    
     1463   SUBROUTINE iom_g0d_catt( kiomid, cdatt, cdatt0d, cdvar ) 
     1464      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1465      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1466      CHARACTER(len=*)      , INTENT(  out)           ::   cdatt0d   ! read field 
     1467      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1468      ! 
     1469      IF( kiomid > 0 ) THEN 
     1470         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_getatt( kiomid, cdatt, cdatt0d = cdatt0d, cdvar=cdvar ) 
    15101471      ENDIF 
    15111472   END SUBROUTINE iom_g0d_catt 
     1473 
    15121474 
    15131475   !!---------------------------------------------------------------------- 
    15141476   !!                   INTERFACE iom_putatt 
    15151477   !!---------------------------------------------------------------------- 
    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 
     1478   SUBROUTINE iom_p0d_iatt( kiomid, cdatt, katt0d, cdvar ) 
     1479      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1480      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1481      INTEGER               , INTENT(in   )           ::   katt0d    ! written field 
     1482      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    15211483      ! 
    15221484      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 
     1485         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  katt0d =  katt0d, cdvar=cdvar ) 
    15341486      ENDIF 
    15351487   END SUBROUTINE iom_p0d_iatt 
    15361488 
    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 
     1489   SUBROUTINE iom_p1d_iatt( kiomid, cdatt, katt1d, cdvar ) 
     1490      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1491      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1492      INTEGER, DIMENSION(:) , INTENT(in   )           ::   katt1d    ! written field 
     1493      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    15421494      ! 
    15431495      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 
     1496         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  katt1d =  katt1d, cdvar=cdvar ) 
     1497      ENDIF 
     1498   END SUBROUTINE iom_p1d_iatt 
     1499 
     1500   SUBROUTINE iom_p0d_ratt( kiomid, cdatt, patt0d, cdvar ) 
     1501      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1502      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1503      REAL(wp)              , INTENT(in   )           ::   patt0d    ! written field 
     1504      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1505      ! 
     1506      IF( kiomid > 0 ) THEN 
     1507         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  patt0d =  patt0d, cdvar=cdvar ) 
    15551508      ENDIF 
    15561509   END SUBROUTINE iom_p0d_ratt 
    15571510 
    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 
     1511   SUBROUTINE iom_p1d_ratt( kiomid, cdatt, patt1d, cdvar ) 
     1512      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1513      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1514      REAL(wp), DIMENSION(:), INTENT(in   )           ::   patt1d    ! written field 
     1515      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
    15631516      ! 
    15641517      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 
     1518         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt,  patt1d =  patt1d, cdvar=cdvar ) 
     1519      ENDIF 
     1520   END SUBROUTINE iom_p1d_ratt 
     1521    
     1522   SUBROUTINE iom_p0d_catt( kiomid, cdatt, cdatt0d, cdvar ) 
     1523      INTEGER               , INTENT(in   )           ::   kiomid    ! Identifier of the file 
     1524      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt     ! Name of the attribute 
     1525      CHARACTER(len=*)      , INTENT(in   )           ::   cdatt0d   ! written field 
     1526      CHARACTER(len=*)      , INTENT(in   ), OPTIONAL ::   cdvar     ! Name of the variable 
     1527      ! 
     1528      IF( kiomid > 0 ) THEN 
     1529         IF( iom_file(kiomid)%nfid > 0 )   CALL iom_nf90_putatt( kiomid, cdatt, cdatt0d = cdatt0d, cdvar=cdvar ) 
    15761530      ENDIF 
    15771531   END SUBROUTINE iom_p0d_catt 
     1532 
    15781533 
    15791534   !!---------------------------------------------------------------------- 
     
    16041559            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    16051560               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 
     1561               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 
    16111562            ENDIF 
    16121563         ENDIF 
     
    16381589            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    16391590               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 
     1591               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 
    16451592            ENDIF 
    16461593         ENDIF 
     
    16721619            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    16731620               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 
     1621               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 
    16791622            ENDIF 
    16801623         ENDIF 
     
    17061649            IF( iom_file(kiomid)%nfid > 0 ) THEN 
    17071650               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 
     1651               CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 
    17131652            ENDIF 
    17141653         ENDIF 
     
    17161655   END SUBROUTINE iom_rp3d 
    17171656 
     1657 
     1658  SUBROUTINE iom_delay_rst( cdaction, cdcpnt, kncid ) 
     1659      !!--------------------------------------------------------------------- 
     1660      !!   Routine iom_delay_rst: used read/write restart related to mpp_delay 
     1661      !! 
     1662      !!--------------------------------------------------------------------- 
     1663      CHARACTER(len=*), INTENT(in   ) ::   cdaction        ! 
     1664      CHARACTER(len=*), INTENT(in   ) ::   cdcpnt 
     1665      INTEGER         , INTENT(in   ) ::   kncid 
     1666      ! 
     1667      INTEGER  :: ji 
     1668      INTEGER  :: indim 
     1669      LOGICAL  :: llattexist 
     1670      REAL(wp), ALLOCATABLE, DIMENSION(:) ::   zreal1d 
     1671      !!--------------------------------------------------------------------- 
     1672      ! 
     1673      !                                      =================================== 
     1674      IF( TRIM(cdaction) == 'READ' ) THEN   ! read restart related to mpp_delay ! 
     1675         !                                   =================================== 
     1676         DO ji = 1, nbdelay 
     1677            IF ( c_delaycpnt(ji) == cdcpnt ) THEN 
     1678               CALL iom_chkatt( kncid, 'DELAY_'//c_delaylist(ji), llattexist, indim ) 
     1679               IF( llattexist )  THEN 
     1680                  ALLOCATE( todelay(ji)%z1d(indim) ) 
     1681                  CALL iom_getatt( kncid, 'DELAY_'//c_delaylist(ji), todelay(ji)%z1d(:) ) 
     1682                  ndelayid(ji) = 0   ! set to 0 to specify that the value was read in the restart 
     1683               ENDIF 
     1684           ENDIF 
     1685         END DO 
     1686         !                                   ==================================== 
     1687      ELSE                                  ! write restart related to mpp_delay ! 
     1688         !                                   ==================================== 
     1689         DO ji = 1, nbdelay   ! save only ocean delayed global communication variables 
     1690            IF ( c_delaycpnt(ji) == cdcpnt ) THEN 
     1691               IF( ASSOCIATED(todelay(ji)%z1d) ) THEN 
     1692                  CALL mpp_delay_rcv(ji)   ! make sure %z1d is received 
     1693                  CALL iom_putatt( kncid, 'DELAY_'//c_delaylist(ji), todelay(ji)%z1d(:) ) 
     1694               ENDIF 
     1695            ENDIF 
     1696         END DO 
     1697         ! 
     1698      ENDIF 
     1699       
     1700   END SUBROUTINE iom_delay_rst 
     1701   
     1702    
    17181703 
    17191704   !!---------------------------------------------------------------------- 
     
    19711956         SELECT CASE ( cdgrd ) 
    19721957         CASE('T')   ;   zmask(:,:,:)       = tmask(:,:,:) 
    1973          CASE('U')   ;   zmask(2:jpim1,:,:) = tmask(2:jpim1,:,:) + tmask(3:jpi,:,:)   ;   CALL lbc_lnk( zmask, 'U', 1. ) 
    1974          CASE('V')   ;   zmask(:,2:jpjm1,:) = tmask(:,2:jpjm1,:) + tmask(:,3:jpj,:)   ;   CALL lbc_lnk( zmask, 'V', 1. ) 
     1958         CASE('U')   ;   zmask(2:jpim1,:,:) = tmask(2:jpim1,:,:) + tmask(3:jpi,:,:)   ;   CALL lbc_lnk( 'iom', zmask, 'U', 1. ) 
     1959         CASE('V')   ;   zmask(:,2:jpjm1,:) = tmask(:,2:jpjm1,:) + tmask(:,3:jpj,:)   ;   CALL lbc_lnk( 'iom', zmask, 'V', 1. ) 
    19751960         CASE('W')   ;   zmask(:,:,2:jpk  ) = tmask(:,:,1:jpkm1) + tmask(:,:,2:jpk)   ;   zmask(:,:,1) = tmask(:,:,1) 
    19761961         END SELECT 
     
    20152000      ! 
    20162001      z_fld(:,:) = 1._wp 
    2017       CALL lbc_lnk( z_fld, cdgrd, -1. )    ! Working array for location of northfold 
     2002      CALL lbc_lnk( 'iom', z_fld, cdgrd, -1. )    ! Working array for location of northfold 
    20182003      ! 
    20192004      ! Cell vertices that can be defined 
     
    20332018      ! Cell vertices on boundries 
    20342019      DO jn = 1, 4 
    2035          CALL lbc_lnk( z_bnds(jn,:,:,1), cdgrd, 1., pval=999._wp ) 
    2036          CALL lbc_lnk( z_bnds(jn,:,:,2), cdgrd, 1., pval=999._wp ) 
     2020         CALL lbc_lnk( 'iom', z_bnds(jn,:,:,1), cdgrd, 1., pval=999._wp ) 
     2021         CALL lbc_lnk( 'iom', z_bnds(jn,:,:,2), cdgrd, 1., pval=999._wp ) 
    20372022      END DO 
    20382023      ! 
Note: See TracChangeset for help on using the changeset viewer.