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.
ticket/1472_NOC2_JATTR – NEMO
wiki:ticket/1472_NOC2_JATTR

Version 6 (modified by acc, 9 years ago) (diff)

--

svn copy svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk   \
         svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_r5087_NOC2_JATTR \
               -m"#1472. Temporary development branch for testing use of file attributes to control starting j-row from input netcdf files"

Committed revision 5088.

svn co svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_r5087_NOC2_JATTR

Submitted first stage changes (introduces option for bathymetry and coordinates only). These changes have been preliminarily tested in an ORCA1 configuration using the extended grid bathymetry and coordinate files:

eORCA1_bathymetry_v2.nc
eORCA1_coordinates.nc

These files define a horizontal domain of 362x332. The first row with open ocean wet points in the non-isf bathymetry for this set is row 41 (Fortran indexing) so the formally correct setting for open_ocean_jstart would be 40. However this results in a 362x293 domain which is one row larger than the original ORCA1 domain. In order to test this configuration with all the old forcing fields, initial conditions and weights, I set the attribute to 41 instead. NEMO fills the first row with land anyway (and there are only a couple of wet points lost) so the resulting configuration is a valid test. Full instructions for configuring this test are:

  1. Add the new attribute to any input files requiring a j-row offset, i.e:
ncatted  -a open_ocean_jstart,global,a,d,41 eORCA1_coordinates.nc 
ncatted  -a open_ocean_jstart,global,a,d,41 eORCA1_bathymetry_v2.nc
  1. Add the logical switch to namcfg in the cfg namelist and set true:
!-----------------------------------------------------------------------
&namcfg        !   parameters of the configuration
!-----------------------------------------------------------------------
   cp_cfg      =  "orca"               !  name of the configuration
   jp_cfg      =       1               !  resolution of the configuration
   jpidta      =     362               !  1st lateral dimension ( >= jpi )
   jpjdta      =     292               !  2nd    "         "    ( >= jpj )
   jpkdta      =      75               !  number of levels      ( >= jpk )
   jpiglo      =     362               !  1st dimension of global domain --> i =jpidta
   jpjglo      =     292               !  2nd    -                  -    --> j  =jpjdta
   jperio      =       6               !  lateral cond. type (between 0 and 6)
   ln_use_jattr = .true.               !  use (T) the file attribute: open_ocean_jstart if present

Note the j-size of the global domain is the (extended j-size minus open_ocean_jstart + 1 ) and this must match the size of all datasets other than bathymetry and coordinates currently. However the option can be extended to any global, 2D and 3D, netcdf, input field by adding the:

lrowattr=ln_use_jattr

optional argument to the appropriate iom_get call and the open_ocean_jstart attribute to the input files.

svn ci -m"#1472. Branch dev_r5087_NOC2_JATTR. Submit first working version tested with ORCA1 extended grids. See wiki:ticket/1472_NOC2_JATTR for usage example"

Sending        NEMOGCM/CONFIG/SHARED/namelist_ref
Sending        NEMOGCM/NEMO/OFF_SRC/nemogcm.F90
Sending        NEMOGCM/NEMO/OOO_SRC/nemogcm.F90
Sending        NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90
Sending        NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
Sending        NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
Sending        NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90
Sending        NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
Sending        NEMOGCM/NEMO/OPA_SRC/par_oce.F90
Sending        NEMOGCM/NEMO/SAS_SRC/nemogcm.F90
Transmitting file data ..........
Committed revision 5089.


svn diff
Index: CONFIG/SHARED/namelist_ref
===================================================================
--- CONFIG/SHARED/namelist_ref  (revision 5088)
+++ CONFIG/SHARED/namelist_ref  (working copy)
@@ -75,6 +75,8 @@
                                        !  = 4 cyclic East-West AND North fold T-point pivot
                                        !  = 5 North fold F-point pivot
                                        !  = 6 cyclic East-West AND North fold F-point pivot
+   ln_use_jattr = .false.              !  use (T) the file attribute: open_ocean_jstart, if present 
+                                       !  in netcdf input files, as the start j-row for reading
 /
 !-----------------------------------------------------------------------
 &namzgr        !   vertical coordinate
Index: NEMO/OFF_SRC/nemogcm.F90
===================================================================
--- NEMO/OFF_SRC/nemogcm.F90    (revision 5088)
+++ NEMO/OFF_SRC/nemogcm.F90    (working copy)
@@ -148,7 +148,7 @@
          &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle,   &
          &             nn_bench, nn_timing
       NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, &
-         &             jpizoom, jpjzoom, jperio
+         &             jpizoom, jpjzoom, jperio, ln_use_jattr
       !!----------------------------------------------------------------------
       cltxt = ''
       !
@@ -358,6 +358,7 @@
          WRITE(numout,*) '      left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom
          WRITE(numout,*) '      left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom
          WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio   
+         WRITE(numout,*) '      use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr
       ENDIF
       !                             ! Parameter control
       !
Index: NEMO/OOO_SRC/nemogcm.F90
===================================================================
--- NEMO/OOO_SRC/nemogcm.F90    (revision 5088)
+++ NEMO/OOO_SRC/nemogcm.F90    (working copy)
@@ -128,7 +128,7 @@
          &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle,   &
          &             nn_bench, nn_timing
       NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, &
-         &             jpizoom, jpjzoom, jperio
+         &             jpizoom, jpjzoom, jperio, ln_use_jattr
       !!----------------------------------------------------------------------
       !
       cltxt = ''
Index: NEMO/OPA_SRC/DOM/domhgr.F90
===================================================================
--- NEMO/OPA_SRC/DOM/domhgr.F90 (revision 5088)
+++ NEMO/OPA_SRC/DOM/domhgr.F90 (working copy)
@@ -615,25 +615,25 @@
       
       CALL iom_open( 'coordinates', inum )
       
-      CALL iom_get( inum, jpdom_data, 'glamt', glamt )
-      CALL iom_get( inum, jpdom_data, 'glamu', glamu )
-      CALL iom_get( inum, jpdom_data, 'glamv', glamv )
-      CALL iom_get( inum, jpdom_data, 'glamf', glamf )
+      CALL iom_get( inum, jpdom_data, 'glamt', glamt, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'glamu', glamu, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'glamv', glamv, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'glamf', glamf, lrowattr=ln_use_jattr )
       
-      CALL iom_get( inum, jpdom_data, 'gphit', gphit )
-      CALL iom_get( inum, jpdom_data, 'gphiu', gphiu )
-      CALL iom_get( inum, jpdom_data, 'gphiv', gphiv )
-      CALL iom_get( inum, jpdom_data, 'gphif', gphif )
+      CALL iom_get( inum, jpdom_data, 'gphit', gphit, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'gphiu', gphiu, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'gphiv', gphiv, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'gphif', gphif, lrowattr=ln_use_jattr )
       
-      CALL iom_get( inum, jpdom_data, 'e1t', e1t )
-      CALL iom_get( inum, jpdom_data, 'e1u', e1u )
-      CALL iom_get( inum, jpdom_data, 'e1v', e1v )
-      CALL iom_get( inum, jpdom_data, 'e1f', e1f )
+      CALL iom_get( inum, jpdom_data, 'e1t', e1t, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'e1u', e1u, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'e1v', e1v, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'e1f', e1f, lrowattr=ln_use_jattr )
       
-      CALL iom_get( inum, jpdom_data, 'e2t', e2t )
-      CALL iom_get( inum, jpdom_data, 'e2u', e2u )
-      CALL iom_get( inum, jpdom_data, 'e2v', e2v )
-      CALL iom_get( inum, jpdom_data, 'e2f', e2f )
+      CALL iom_get( inum, jpdom_data, 'e2t', e2t, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'e2u', e2u, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'e2v', e2v, lrowattr=ln_use_jattr )
+      CALL iom_get( inum, jpdom_data, 'e2f', e2f, lrowattr=ln_use_jattr )
       
       CALL iom_close( inum )
       
Index: NEMO/OPA_SRC/DOM/domzgr.F90
===================================================================
--- NEMO/OPA_SRC/DOM/domzgr.F90 (revision 5088)
+++ NEMO/OPA_SRC/DOM/domzgr.F90 (working copy)
@@ -533,7 +533,11 @@
          ENDIF
          IF( ln_zps .OR. ln_sco )   THEN              ! zps or sco : read meter bathymetry
             CALL iom_open ( 'bathy_meter.nc', inum ) 
-            CALL iom_get  ( inum, jpdom_data, 'Bathymetry', bathy )
+            IF ( ln_isfcav ) THEN
+               CALL iom_get  ( inum, jpdom_data, 'Bathymetry_isf', bathy, lrowattr=.false. )
+            ELSE
+               CALL iom_get  ( inum, jpdom_data, 'Bathymetry'    , bathy, lrowattr=ln_use_jattr  )
+            END IF
             CALL iom_close( inum )
             !  
             risfdep(:,:)=0._wp         
Index: NEMO/OPA_SRC/IOM/iom.F90
===================================================================
--- NEMO/OPA_SRC/IOM/iom.F90    (revision 5088)
+++ NEMO/OPA_SRC/IOM/iom.F90    (working copy)
@@ -542,7 +542,7 @@
       ENDIF
    END SUBROUTINE iom_g1d
 
-   SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount )
+   SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr )
       INTEGER         , INTENT(in   )                           ::   kiomid    ! Identifier of the file
       INTEGER         , INTENT(in   )                           ::   kdom      ! Type of domain to be read
       CHARACTER(len=*), INTENT(in   )                           ::   cdvar     ! Name of the variable
@@ -550,14 +550,19 @@
       INTEGER         , INTENT(in   )                , OPTIONAL ::   ktime     ! record number
       INTEGER         , INTENT(in   ), DIMENSION(2)  , OPTIONAL ::   kstart    ! start axis position of the reading 
       INTEGER         , INTENT(in   ), DIMENSION(2)  , OPTIONAL ::   kcount    ! number of points in each axis
+      LOGICAL         , INTENT(in   )                , OPTIONAL ::   lrowattr  ! logical flag telling iom_get to
+                                                                               ! look for and use a file attribute
+                                                                               ! called open_ocean_jstart to set the start
+                                                                               ! value for the 2nd dimension (netcdf only)
       !
       IF( kiomid > 0 ) THEN
          IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r2d=pvar,   &
-              &                                                     ktime=ktime, kstart=kstart, kcount=kcount )
+              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, &
+              &                                                     lrowattr=lrowattr )
       ENDIF
    END SUBROUTINE iom_g2d
 
-   SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount )
+   SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr )
       INTEGER         , INTENT(in   )                             ::   kiomid    ! Identifier of the file
       INTEGER         , INTENT(in   )                             ::   kdom      ! Type of domain to be read
       CHARACTER(len=*), INTENT(in   )                             ::   cdvar     ! Name of the variable
@@ -565,17 +570,23 @@
       INTEGER         , INTENT(in   )                  , OPTIONAL ::   ktime     ! record number
       INTEGER         , INTENT(in   ), DIMENSION(3)    , OPTIONAL ::   kstart    ! start axis position of the reading 
       INTEGER         , INTENT(in   ), DIMENSION(3)    , OPTIONAL ::   kcount    ! number of points in each axis
+      LOGICAL         , INTENT(in   )                  , OPTIONAL ::   lrowattr  ! logical flag telling iom_get to
+                                                                                 ! look for and use a file attribute
+                                                                                 ! called open_ocean_jstart to set the start
+                                                                                 ! value for the 2nd dimension (netcdf only)
       !
       IF( kiomid > 0 ) THEN
          IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom       , cdvar        , pv_r3d=pvar,   &
-              &                                                     ktime=ktime, kstart=kstart, kcount=kcount )
+              &                                                     ktime=ktime, kstart=kstart, kcount=kcount, &
+              &                                                     lrowattr=lrowattr )
       ENDIF
    END SUBROUTINE iom_g3d
    !!----------------------------------------------------------------------
 
    SUBROUTINE iom_get_123d( kiomid, kdom  , cdvar ,   &
          &                  pv_r1d, pv_r2d, pv_r3d,   &
-         &                  ktime , kstart, kcount  )
+         &                  ktime , kstart, kcount,   &
+         &                  lrowattr                )
       !!-----------------------------------------------------------------------
       !!                  ***  ROUTINE  iom_get_123d  ***
       !!
@@ -592,8 +603,14 @@
       INTEGER                    , INTENT(in   ), OPTIONAL ::   ktime      ! record number
       INTEGER , DIMENSION(:)     , INTENT(in   ), OPTIONAL ::   kstart     ! start position of the reading in each axis 
       INTEGER , DIMENSION(:)     , INTENT(in   ), OPTIONAL ::   kcount     ! number of points to be read in each axis
+      LOGICAL                    , INTENT(in   ), OPTIONAL ::   lrowattr   ! logical flag telling iom_get to
+                                                                           ! look for and use a file attribute
+                                                                           ! called open_ocean_jstart to set the start
+                                                                           ! value for the 2nd dimension (netcdf only)
       !
       LOGICAL                        ::   llnoov      ! local definition to read overlap
+      LOGICAL                        ::   luse_jattr  ! local definition to read open_ocean_jstart file attribute
+      INTEGER                        ::   jstartrow   ! start point for 2nd dimension optionally set by file attribute
       INTEGER                        ::   jl          ! loop on number of dimension 
       INTEGER                        ::   idom        ! type of domain
       INTEGER                        ::   idvar       ! id of the variable
@@ -603,7 +620,7 @@
       INTEGER                        ::   istop       ! temporary value of nstop
       INTEGER                        ::   ix1, ix2, iy1, iy2   ! subdomain indexes
       INTEGER                        ::   ji, jj      ! loop counters
-      INTEGER                        ::   irankpv       ! 
+      INTEGER                        ::   irankpv     ! 
       INTEGER                        ::   ind1, ind2  ! substring index
       INTEGER, DIMENSION(jpmax_dims) ::   istart      ! starting point to read for each axis
       INTEGER, DIMENSION(jpmax_dims) ::   icnt        ! number of value to read along each axis 
@@ -628,6 +645,23 @@
       IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present')
       IF( PRESENT(kstart) .AND. idom /= jpdom_unknown   ) CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown')
 
+      luse_jattr = .false.
+      IF( PRESENT(lrowattr) ) THEN
+         IF( lrowattr .AND. idom /= jpdom_data   ) CALL ctl_stop(trim(clinfo), 'lrowattr present and true needs kdom = jpdom_data')
+         IF( lrowattr .AND. idom == jpdom_data   ) luse_jattr = .true.
+      ENDIF
+      IF( luse_jattr ) THEN
+         SELECT CASE (iom_file(kiomid)%iolib)
+         CASE (jpioipsl, jprstdimg )
+             CALL ctl_warn(trim(clinfo), 'lrowattr present and true but this only works with netcdf (jpnf90)')
+             luse_jattr = .false.
+         CASE (jpnf90   )   
+             ! Ok
+         CASE DEFAULT    
+            CALL ctl_stop( TRIM(clinfo)//' accepted IO library are only jpioipsl, jpnf90 and jprstdimg' )
+         END SELECT
+      ENDIF
+
       ! Search for the variable in the data base (eventually actualize data)
       istop = nstop
       idvar = iom_varid( kiomid, cdvar )
@@ -700,8 +734,14 @@
             IF(           idom == jpdom_unknown ) THEN                                       ; icnt(1:idmspc) = idimsz(1:idmspc)
             ELSE 
                IF( .NOT. PRESENT(pv_r1d) ) THEN   !   not a 1D array
-                  IF(     idom == jpdom_data    ) THEN ; istart(1:2) = (/ mig(1), mjg(1) /)  ! icnt(1:2) done bellow
-                  ELSEIF( idom == jpdom_global  ) THEN ; istart(1:2) = (/ nimpp , njmpp  /)  ! icnt(1:2) done bellow
+                  IF(     idom == jpdom_data    ) THEN
+                     jstartrow = 1
+                     IF( luse_jattr ) THEN
+                        CALL iom_getatt(kiomid, 'open_ocean_jstart', jstartrow ) ! -999 is returned if the attribute is not found
+                        jstartrow = MAX(1,jstartrow)
+                     ENDIF
+                     istart(1:2) = (/ mig(1), mjg(1) + jstartrow - 1 /)  ! icnt(1:2) done below
+                  ELSEIF( idom == jpdom_global  ) THEN ; istart(1:2) = (/ nimpp , njmpp  /)  ! icnt(1:2) done below
                   ENDIF
                   ! we do not read the overlap                     -> we start to read at nldi, nldj
 ! JMM + SM: ugly patch before getting the new version of lib_mpp)
Index: NEMO/OPA_SRC/LBC/mppini_2.h90
===================================================================
--- NEMO/OPA_SRC/LBC/mppini_2.h90       (revision 5088)
+++ NEMO/OPA_SRC/LBC/mppini_2.h90       (working copy)
@@ -44,6 +44,7 @@
       INTEGER :: ji, jj, jn, jproc, jarea     ! dummy loop indices
       INTEGER ::  inum                        ! temporary logical unit
       INTEGER ::  idir                        ! temporary integers
+      INTEGER ::  jstartrow                   ! temporary integers
       INTEGER ::   ios                        ! Local integer output status for namelist read
       INTEGER ::   &
          ii, ij, ifreq, il1, il2,          &  ! temporary integers
@@ -99,13 +100,26 @@
 
       ! open the file
       ! Remember that at this level in the code, mpp is not yet initialized, so
-      ! the file must be open with jpdom_unknown, and kstart amd kcount forced 
+      ! the file must be open with jpdom_unknown, and kstart and kcount forced 
+      jstartrow = 1
       IF ( ln_zco ) THEN 
          CALL iom_open ( 'bathy_level.nc', inum )   ! Level bathymetry
-         CALL iom_get ( inum, jpdom_unknown, 'Bathy_level', zdta, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) )
+          ! Optionally use a file attribute (open_ocean_jstart) to set a start row for reading from the global file
+          ! This allows the unextended grid bathymetry to be stored in the same file as the under ice-shelf extended bathymetry
+         CALL iom_getatt(inum, 'open_ocean_jstart', jstartrow ) ! -999 is returned if the attribute is not found
+         jstartrow = MAX(1,jstartrow)
+         CALL iom_get ( inum, jpdom_unknown, 'Bathy_level', zdta, kstart=(/jpizoom,jpjzoom+jstartrow-1/), kcount=(/jpiglo,jpjglo/) )
       ELSE
          CALL iom_open ( 'bathy_meter.nc', inum )   ! Meter bathy in case of partial steps
-         CALL iom_get ( inum, jpdom_unknown, 'Bathymetry' , zdta, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) )
+         IF ( ln_isfcav ) THEN
+             CALL iom_get ( inum, jpdom_unknown, 'Bathymetry_isf' , zdta, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) )
+         ELSE
+             ! Optionally use a file attribute (open_ocean_jstart) to set a start row for reading from the global file
+             ! This allows the unextended grid bathymetry to be stored in the same file as the under ice-shelf extended bathymetry
+             CALL iom_getatt(inum, 'open_ocean_jstart', jstartrow ) ! -999 is returned if the attribute is not found
+             jstartrow = MAX(1,jstartrow)
+             CALL iom_get ( inum, jpdom_unknown, 'Bathymetry' , zdta, kstart=(/jpizoom,jpjzoom+jstartrow-1/), kcount=(/jpiglo,jpjglo/) )
+         ENDIF
       ENDIF
       CALL iom_close (inum)
       
Index: NEMO/OPA_SRC/nemogcm.F90
===================================================================
--- NEMO/OPA_SRC/nemogcm.F90    (revision 5088)
+++ NEMO/OPA_SRC/nemogcm.F90    (working copy)
@@ -221,7 +221,7 @@
          &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle,   &
          &             nn_bench, nn_timing
       NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, &
-         &             jpizoom, jpjzoom, jperio
+         &             jpizoom, jpjzoom, jperio, ln_use_jattr
       !!----------------------------------------------------------------------
       !
       cltxt = ''
@@ -260,6 +260,7 @@
       jpjzoom = 1
       nperio  = 0
       jperio  = 0
+      ln_use_jattr = .false.
    ENDIF
 #endif
       !
@@ -505,6 +506,7 @@
          WRITE(numout,*) '      left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom
          WRITE(numout,*) '      left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom
          WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio   
+         WRITE(numout,*) '      use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr
       ENDIF
       !                             ! Parameter control
       !
Index: NEMO/OPA_SRC/par_oce.F90
===================================================================
--- NEMO/OPA_SRC/par_oce.F90    (revision 5088)
+++ NEMO/OPA_SRC/par_oce.F90    (working copy)
@@ -52,6 +52,13 @@
    !                                       !  = 5 North fold F-point pivot
    !                                       !  = 6 cyclic East-West AND North fold F-point pivot
 
+   ! Input file read offset
+   LOGICAL       ::   ln_use_jattr     !: Use file global attribute: open_ocean_jstart to determine start j-row 
+                                           ! when reading input from those netcdf files that have the 
+                                           ! attribute defined. This is designed to enable input files associated 
+                                           ! with the extended grids used in the under ice shelf configurations to 
+                                           ! be used without redundant rows when the ice shelves are not in use.
+
    !!  Values set to pp_not_used indicates that this parameter is not used in THIS config.
    !!  Values set to pp_to_be_computed  indicates that variables will be computed in domzgr
    REAL(wp)      ::   pp_not_used       = 999999._wp   !: vertical grid parameter
Index: NEMO/SAS_SRC/nemogcm.F90
===================================================================
--- NEMO/SAS_SRC/nemogcm.F90    (revision 5088)
+++ NEMO/SAS_SRC/nemogcm.F90    (working copy)
@@ -160,7 +160,7 @@
          &             nn_isplt, nn_jsplt, nn_jctls, nn_jctle,   &
          &             nn_bench, nn_timing
       NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, &
-         &             jpizoom, jpjzoom, jperio
+         &             jpizoom, jpjzoom, jperio, ln_use_jattr
       !!----------------------------------------------------------------------
       cltxt = ''
       !
@@ -347,6 +347,7 @@
          WRITE(numout,*) '      left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom
          WRITE(numout,*) '      left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom
          WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio   
+         WRITE(numout,*) '      use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr
       ENDIF
       !                             ! Parameter control
       !

Documentation added to branch at revision 5117.

Changes merged with trunk and SETTE tested:

cd ISFMERGE
svn merge svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_r5087_NOC2_JATTR@5088 \
           svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_r5087_NOC2_JATTR@HEAD .
sette.sh
 ./sette_rpt
GYRE        restartability  passed
ISOMIP      restartability  passed
ORCA2LIMPIS restartability  passed
ORCA2OFFPIS restartability  passed
AMM12       restartability  passed
ORCA2LIM3   restartability  passed
SAS         restartability  inconclusive (  solver.stat  not found )
GYRE        reproducibility passed
ISOMIP      reproducibility passed
ORCA2LIMPIS reproducibility passed
ORCA2OFFPIS reproducibility passed
AMM12       reproducibility passed
ORCA2LIM3   reproducibility passed
SAS         reproducibility inconclusive (  solver.stat  not found )
ORCA2_LIM_AGRIF runability passed

Changed submitted to the trunk at revision 5118:

svn ci -m"Merge changes from dev_r5087_NOC2_JATTR (see #1472) into trunk following successful SETTE tests"
Sending        .
Sending        DOC
Sending        DOC/TexFiles/Chapters/Chap_MISC.tex
Adding         DOC/TexFiles/Namelist/namcfg_orca1
Sending        NEMOGCM/ARCH/arch-X64_MOBILIS.fcm
Sending        NEMOGCM/CONFIG/SHARED/namelist_ref
Sending        NEMOGCM/NEMO/OFF_SRC/nemogcm.F90
Sending        NEMOGCM/NEMO/OOO_SRC/nemogcm.F90
Sending        NEMOGCM/NEMO/OPA_SRC/DOM/domhgr.F90
Sending        NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
Sending        NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
Sending        NEMOGCM/NEMO/OPA_SRC/LBC/mppini_2.h90
Sending        NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
Sending        NEMOGCM/NEMO/OPA_SRC/par_oce.F90
Sending        NEMOGCM/NEMO/SAS_SRC/nemogcm.F90
Transmitting file data ............
Committed revision 5118.

Ticket closed 03/03/15