| 1 | |
| 2 | {{{ |
| 3 | svn copy svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk \ |
| 4 | svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_r5087_NOC2_JATTR \ |
| 5 | -m"#1472. Temporary development branch for testing use of file attributes to control starting j-row from input netcdf files" |
| 6 | |
| 7 | Committed revision 5088. |
| 8 | |
| 9 | svn co svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2015/dev_r5087_NOC2_JATTR |
| 10 | }}} |
| 11 | |
| 12 | Submit first stage changes (introduces option for bathymetry and coordinates only) |
| 13 | |
| 14 | |
| 15 | {{{ |
| 16 | svn status |
| 17 | M CONFIG/SHARED/namelist_ref |
| 18 | M NEMO/OFF_SRC/nemogcm.F90 |
| 19 | M NEMO/OOO_SRC/nemogcm.F90 |
| 20 | M NEMO/OPA_SRC/DOM/domhgr.F90 |
| 21 | M NEMO/OPA_SRC/DOM/domzgr.F90 |
| 22 | M NEMO/OPA_SRC/IOM/iom.F90 |
| 23 | M NEMO/OPA_SRC/LBC/mppini_2.h90 |
| 24 | M NEMO/OPA_SRC/nemogcm.F90 |
| 25 | M NEMO/OPA_SRC/par_oce.F90 |
| 26 | M NEMO/SAS_SRC/nemogcm.F90 |
| 27 | |
| 28 | |
| 29 | svn diff |
| 30 | Index: CONFIG/SHARED/namelist_ref |
| 31 | =================================================================== |
| 32 | --- CONFIG/SHARED/namelist_ref (revision 5088) |
| 33 | +++ CONFIG/SHARED/namelist_ref (working copy) |
| 34 | @@ -75,6 +75,8 @@ |
| 35 | ! = 4 cyclic East-West AND North fold T-point pivot |
| 36 | ! = 5 North fold F-point pivot |
| 37 | ! = 6 cyclic East-West AND North fold F-point pivot |
| 38 | + ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present |
| 39 | + ! in netcdf input files, as the start j-row for reading |
| 40 | / |
| 41 | !----------------------------------------------------------------------- |
| 42 | &namzgr ! vertical coordinate |
| 43 | Index: NEMO/OFF_SRC/nemogcm.F90 |
| 44 | =================================================================== |
| 45 | --- NEMO/OFF_SRC/nemogcm.F90 (revision 5088) |
| 46 | +++ NEMO/OFF_SRC/nemogcm.F90 (working copy) |
| 47 | @@ -148,7 +148,7 @@ |
| 48 | & nn_isplt, nn_jsplt, nn_jctls, nn_jctle, & |
| 49 | & nn_bench, nn_timing |
| 50 | NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & |
| 51 | - & jpizoom, jpjzoom, jperio |
| 52 | + & jpizoom, jpjzoom, jperio, ln_use_jattr |
| 53 | !!---------------------------------------------------------------------- |
| 54 | cltxt = '' |
| 55 | ! |
| 56 | @@ -358,6 +358,7 @@ |
| 57 | WRITE(numout,*) ' left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom |
| 58 | WRITE(numout,*) ' left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom |
| 59 | WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio = ', jperio |
| 60 | + WRITE(numout,*) ' use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr |
| 61 | ENDIF |
| 62 | ! ! Parameter control |
| 63 | ! |
| 64 | Index: NEMO/OOO_SRC/nemogcm.F90 |
| 65 | =================================================================== |
| 66 | --- NEMO/OOO_SRC/nemogcm.F90 (revision 5088) |
| 67 | +++ NEMO/OOO_SRC/nemogcm.F90 (working copy) |
| 68 | @@ -128,7 +128,7 @@ |
| 69 | & nn_isplt, nn_jsplt, nn_jctls, nn_jctle, & |
| 70 | & nn_bench, nn_timing |
| 71 | NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & |
| 72 | - & jpizoom, jpjzoom, jperio |
| 73 | + & jpizoom, jpjzoom, jperio, ln_use_jattr |
| 74 | !!---------------------------------------------------------------------- |
| 75 | ! |
| 76 | cltxt = '' |
| 77 | Index: NEMO/OPA_SRC/DOM/domhgr.F90 |
| 78 | =================================================================== |
| 79 | --- NEMO/OPA_SRC/DOM/domhgr.F90 (revision 5088) |
| 80 | +++ NEMO/OPA_SRC/DOM/domhgr.F90 (working copy) |
| 81 | @@ -615,25 +615,25 @@ |
| 82 | |
| 83 | CALL iom_open( 'coordinates', inum ) |
| 84 | |
| 85 | - CALL iom_get( inum, jpdom_data, 'glamt', glamt ) |
| 86 | - CALL iom_get( inum, jpdom_data, 'glamu', glamu ) |
| 87 | - CALL iom_get( inum, jpdom_data, 'glamv', glamv ) |
| 88 | - CALL iom_get( inum, jpdom_data, 'glamf', glamf ) |
| 89 | + CALL iom_get( inum, jpdom_data, 'glamt', glamt, lrowattr=ln_use_jattr ) |
| 90 | + CALL iom_get( inum, jpdom_data, 'glamu', glamu, lrowattr=ln_use_jattr ) |
| 91 | + CALL iom_get( inum, jpdom_data, 'glamv', glamv, lrowattr=ln_use_jattr ) |
| 92 | + CALL iom_get( inum, jpdom_data, 'glamf', glamf, lrowattr=ln_use_jattr ) |
| 93 | |
| 94 | - CALL iom_get( inum, jpdom_data, 'gphit', gphit ) |
| 95 | - CALL iom_get( inum, jpdom_data, 'gphiu', gphiu ) |
| 96 | - CALL iom_get( inum, jpdom_data, 'gphiv', gphiv ) |
| 97 | - CALL iom_get( inum, jpdom_data, 'gphif', gphif ) |
| 98 | + CALL iom_get( inum, jpdom_data, 'gphit', gphit, lrowattr=ln_use_jattr ) |
| 99 | + CALL iom_get( inum, jpdom_data, 'gphiu', gphiu, lrowattr=ln_use_jattr ) |
| 100 | + CALL iom_get( inum, jpdom_data, 'gphiv', gphiv, lrowattr=ln_use_jattr ) |
| 101 | + CALL iom_get( inum, jpdom_data, 'gphif', gphif, lrowattr=ln_use_jattr ) |
| 102 | |
| 103 | - CALL iom_get( inum, jpdom_data, 'e1t', e1t ) |
| 104 | - CALL iom_get( inum, jpdom_data, 'e1u', e1u ) |
| 105 | - CALL iom_get( inum, jpdom_data, 'e1v', e1v ) |
| 106 | - CALL iom_get( inum, jpdom_data, 'e1f', e1f ) |
| 107 | + CALL iom_get( inum, jpdom_data, 'e1t', e1t, lrowattr=ln_use_jattr ) |
| 108 | + CALL iom_get( inum, jpdom_data, 'e1u', e1u, lrowattr=ln_use_jattr ) |
| 109 | + CALL iom_get( inum, jpdom_data, 'e1v', e1v, lrowattr=ln_use_jattr ) |
| 110 | + CALL iom_get( inum, jpdom_data, 'e1f', e1f, lrowattr=ln_use_jattr ) |
| 111 | |
| 112 | - CALL iom_get( inum, jpdom_data, 'e2t', e2t ) |
| 113 | - CALL iom_get( inum, jpdom_data, 'e2u', e2u ) |
| 114 | - CALL iom_get( inum, jpdom_data, 'e2v', e2v ) |
| 115 | - CALL iom_get( inum, jpdom_data, 'e2f', e2f ) |
| 116 | + CALL iom_get( inum, jpdom_data, 'e2t', e2t, lrowattr=ln_use_jattr ) |
| 117 | + CALL iom_get( inum, jpdom_data, 'e2u', e2u, lrowattr=ln_use_jattr ) |
| 118 | + CALL iom_get( inum, jpdom_data, 'e2v', e2v, lrowattr=ln_use_jattr ) |
| 119 | + CALL iom_get( inum, jpdom_data, 'e2f', e2f, lrowattr=ln_use_jattr ) |
| 120 | |
| 121 | CALL iom_close( inum ) |
| 122 | |
| 123 | Index: NEMO/OPA_SRC/DOM/domzgr.F90 |
| 124 | =================================================================== |
| 125 | --- NEMO/OPA_SRC/DOM/domzgr.F90 (revision 5088) |
| 126 | +++ NEMO/OPA_SRC/DOM/domzgr.F90 (working copy) |
| 127 | @@ -533,7 +533,11 @@ |
| 128 | ENDIF |
| 129 | IF( ln_zps .OR. ln_sco ) THEN ! zps or sco : read meter bathymetry |
| 130 | CALL iom_open ( 'bathy_meter.nc', inum ) |
| 131 | - CALL iom_get ( inum, jpdom_data, 'Bathymetry', bathy ) |
| 132 | + IF ( ln_isfcav ) THEN |
| 133 | + CALL iom_get ( inum, jpdom_data, 'Bathymetry_isf', bathy, lrowattr=.false. ) |
| 134 | + ELSE |
| 135 | + CALL iom_get ( inum, jpdom_data, 'Bathymetry' , bathy, lrowattr=ln_use_jattr ) |
| 136 | + END IF |
| 137 | CALL iom_close( inum ) |
| 138 | ! |
| 139 | risfdep(:,:)=0._wp |
| 140 | Index: NEMO/OPA_SRC/IOM/iom.F90 |
| 141 | =================================================================== |
| 142 | --- NEMO/OPA_SRC/IOM/iom.F90 (revision 5088) |
| 143 | +++ NEMO/OPA_SRC/IOM/iom.F90 (working copy) |
| 144 | @@ -542,7 +542,7 @@ |
| 145 | ENDIF |
| 146 | END SUBROUTINE iom_g1d |
| 147 | |
| 148 | - SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) |
| 149 | + SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) |
| 150 | INTEGER , INTENT(in ) :: kiomid ! Identifier of the file |
| 151 | INTEGER , INTENT(in ) :: kdom ! Type of domain to be read |
| 152 | CHARACTER(len=*), INTENT(in ) :: cdvar ! Name of the variable |
| 153 | @@ -550,14 +550,19 @@ |
| 154 | INTEGER , INTENT(in ) , OPTIONAL :: ktime ! record number |
| 155 | INTEGER , INTENT(in ), DIMENSION(2) , OPTIONAL :: kstart ! start axis position of the reading |
| 156 | INTEGER , INTENT(in ), DIMENSION(2) , OPTIONAL :: kcount ! number of points in each axis |
| 157 | + LOGICAL , INTENT(in ) , OPTIONAL :: lrowattr ! logical flag telling iom_get to |
| 158 | + ! look for and use a file attribute |
| 159 | + ! called open_ocean_startj to set the start |
| 160 | + ! value for the 2nd dimension (netcdf only) |
| 161 | ! |
| 162 | IF( kiomid > 0 ) THEN |
| 163 | IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom , cdvar , pv_r2d=pvar, & |
| 164 | - & ktime=ktime, kstart=kstart, kcount=kcount ) |
| 165 | + & ktime=ktime, kstart=kstart, kcount=kcount, & |
| 166 | + & lrowattr=lrowattr ) |
| 167 | ENDIF |
| 168 | END SUBROUTINE iom_g2d |
| 169 | |
| 170 | - SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) |
| 171 | + SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr ) |
| 172 | INTEGER , INTENT(in ) :: kiomid ! Identifier of the file |
| 173 | INTEGER , INTENT(in ) :: kdom ! Type of domain to be read |
| 174 | CHARACTER(len=*), INTENT(in ) :: cdvar ! Name of the variable |
| 175 | @@ -565,17 +570,23 @@ |
| 176 | INTEGER , INTENT(in ) , OPTIONAL :: ktime ! record number |
| 177 | INTEGER , INTENT(in ), DIMENSION(3) , OPTIONAL :: kstart ! start axis position of the reading |
| 178 | INTEGER , INTENT(in ), DIMENSION(3) , OPTIONAL :: kcount ! number of points in each axis |
| 179 | + LOGICAL , INTENT(in ) , OPTIONAL :: lrowattr ! logical flag telling iom_get to |
| 180 | + ! look for and use a file attribute |
| 181 | + ! called open_ocean_startj to set the start |
| 182 | + ! value for the 2nd dimension (netcdf only) |
| 183 | ! |
| 184 | IF( kiomid > 0 ) THEN |
| 185 | IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom , cdvar , pv_r3d=pvar, & |
| 186 | - & ktime=ktime, kstart=kstart, kcount=kcount ) |
| 187 | + & ktime=ktime, kstart=kstart, kcount=kcount, & |
| 188 | + & lrowattr=lrowattr ) |
| 189 | ENDIF |
| 190 | END SUBROUTINE iom_g3d |
| 191 | !!---------------------------------------------------------------------- |
| 192 | |
| 193 | SUBROUTINE iom_get_123d( kiomid, kdom , cdvar , & |
| 194 | & pv_r1d, pv_r2d, pv_r3d, & |
| 195 | - & ktime , kstart, kcount ) |
| 196 | + & ktime , kstart, kcount, & |
| 197 | + & lrowattr ) |
| 198 | !!----------------------------------------------------------------------- |
| 199 | !! *** ROUTINE iom_get_123d *** |
| 200 | !! |
| 201 | @@ -592,8 +603,14 @@ |
| 202 | INTEGER , INTENT(in ), OPTIONAL :: ktime ! record number |
| 203 | INTEGER , DIMENSION(:) , INTENT(in ), OPTIONAL :: kstart ! start position of the reading in each axis |
| 204 | INTEGER , DIMENSION(:) , INTENT(in ), OPTIONAL :: kcount ! number of points to be read in each axis |
| 205 | + LOGICAL , INTENT(in ), OPTIONAL :: lrowattr ! logical flag telling iom_get to |
| 206 | + ! look for and use a file attribute |
| 207 | + ! called open_ocean_startj to set the start |
| 208 | + ! value for the 2nd dimension (netcdf only) |
| 209 | ! |
| 210 | LOGICAL :: llnoov ! local definition to read overlap |
| 211 | + LOGICAL :: luse_jattr ! local definition to read open_ocean_startj file attribute |
| 212 | + INTEGER :: jstartrow ! start point for 2nd dimension optionally set by file attribute |
| 213 | INTEGER :: jl ! loop on number of dimension |
| 214 | INTEGER :: idom ! type of domain |
| 215 | INTEGER :: idvar ! id of the variable |
| 216 | @@ -603,7 +620,7 @@ |
| 217 | INTEGER :: istop ! temporary value of nstop |
| 218 | INTEGER :: ix1, ix2, iy1, iy2 ! subdomain indexes |
| 219 | INTEGER :: ji, jj ! loop counters |
| 220 | - INTEGER :: irankpv ! |
| 221 | + INTEGER :: irankpv ! |
| 222 | INTEGER :: ind1, ind2 ! substring index |
| 223 | INTEGER, DIMENSION(jpmax_dims) :: istart ! starting point to read for each axis |
| 224 | INTEGER, DIMENSION(jpmax_dims) :: icnt ! number of value to read along each axis |
| 225 | @@ -628,6 +645,23 @@ |
| 226 | IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') |
| 227 | IF( PRESENT(kstart) .AND. idom /= jpdom_unknown ) CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown') |
| 228 | |
| 229 | + luse_jattr = .false. |
| 230 | + IF( PRESENT(lrowattr) ) THEN |
| 231 | + IF( lrowattr .AND. idom /= jpdom_data ) CALL ctl_stop(trim(clinfo), 'lrowattr present and true needs kdom = jpdom_data') |
| 232 | + IF( lrowattr .AND. idom == jpdom_data ) luse_jattr = .true. |
| 233 | + ENDIF |
| 234 | + IF( luse_jattr ) THEN |
| 235 | + SELECT CASE (iom_file(kiomid)%iolib) |
| 236 | + CASE (jpioipsl, jprstdimg ) |
| 237 | + CALL ctl_warn(trim(clinfo), 'lrowattr present and true but this only works with netcdf (jpnf90)') |
| 238 | + luse_jattr = .false. |
| 239 | + CASE (jpnf90 ) |
| 240 | + ! Ok |
| 241 | + CASE DEFAULT |
| 242 | + CALL ctl_stop( TRIM(clinfo)//' accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) |
| 243 | + END SELECT |
| 244 | + ENDIF |
| 245 | + |
| 246 | ! Search for the variable in the data base (eventually actualize data) |
| 247 | istop = nstop |
| 248 | idvar = iom_varid( kiomid, cdvar ) |
| 249 | @@ -700,8 +734,14 @@ |
| 250 | IF( idom == jpdom_unknown ) THEN ; icnt(1:idmspc) = idimsz(1:idmspc) |
| 251 | ELSE |
| 252 | IF( .NOT. PRESENT(pv_r1d) ) THEN ! not a 1D array |
| 253 | - IF( idom == jpdom_data ) THEN ; istart(1:2) = (/ mig(1), mjg(1) /) ! icnt(1:2) done bellow |
| 254 | - ELSEIF( idom == jpdom_global ) THEN ; istart(1:2) = (/ nimpp , njmpp /) ! icnt(1:2) done bellow |
| 255 | + IF( idom == jpdom_data ) THEN |
| 256 | + jstartrow = 1 |
| 257 | + IF( luse_jattr ) THEN |
| 258 | + CALL iom_getatt(kiomid, 'open_ocean_startj', jstartrow ) ! -999 is returned if the attribute is not found |
| 259 | + jstartrow = MAX(1,jstartrow) |
| 260 | + ENDIF |
| 261 | + istart(1:2) = (/ mig(1), mjg(1) + jstartrow - 1 /) ! icnt(1:2) done below |
| 262 | + ELSEIF( idom == jpdom_global ) THEN ; istart(1:2) = (/ nimpp , njmpp /) ! icnt(1:2) done below |
| 263 | ENDIF |
| 264 | ! we do not read the overlap -> we start to read at nldi, nldj |
| 265 | ! JMM + SM: ugly patch before getting the new version of lib_mpp) |
| 266 | Index: NEMO/OPA_SRC/LBC/mppini_2.h90 |
| 267 | =================================================================== |
| 268 | --- NEMO/OPA_SRC/LBC/mppini_2.h90 (revision 5088) |
| 269 | +++ NEMO/OPA_SRC/LBC/mppini_2.h90 (working copy) |
| 270 | @@ -44,6 +44,7 @@ |
| 271 | INTEGER :: ji, jj, jn, jproc, jarea ! dummy loop indices |
| 272 | INTEGER :: inum ! temporary logical unit |
| 273 | INTEGER :: idir ! temporary integers |
| 274 | + INTEGER :: jstartrow ! temporary integers |
| 275 | INTEGER :: ios ! Local integer output status for namelist read |
| 276 | INTEGER :: & |
| 277 | ii, ij, ifreq, il1, il2, & ! temporary integers |
| 278 | @@ -99,13 +100,26 @@ |
| 279 | |
| 280 | ! open the file |
| 281 | ! Remember that at this level in the code, mpp is not yet initialized, so |
| 282 | - ! the file must be open with jpdom_unknown, and kstart amd kcount forced |
| 283 | + ! the file must be open with jpdom_unknown, and kstart and kcount forced |
| 284 | + jstartrow = 1 |
| 285 | IF ( ln_zco ) THEN |
| 286 | CALL iom_open ( 'bathy_level.nc', inum ) ! Level bathymetry |
| 287 | - CALL iom_get ( inum, jpdom_unknown, 'Bathy_level', zdta, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) ) |
| 288 | + ! Optionally use a file attribute (open_ocean_startj) to set a start row for reading from the global file |
| 289 | + ! This allows the unextended grid bathymetry to be stored in the same file as the under ice-shelf extended bathymetry |
| 290 | + CALL iom_getatt(inum, 'open_ocean_startj', jstartrow ) ! -999 is returned if the attribute is not found |
| 291 | + jstartrow = MAX(1,jstartrow) |
| 292 | + CALL iom_get ( inum, jpdom_unknown, 'Bathy_level', zdta, kstart=(/jpizoom,jpjzoom+jstartrow-1/), kcount=(/jpiglo,jpjglo/) ) |
| 293 | ELSE |
| 294 | CALL iom_open ( 'bathy_meter.nc', inum ) ! Meter bathy in case of partial steps |
| 295 | - CALL iom_get ( inum, jpdom_unknown, 'Bathymetry' , zdta, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) ) |
| 296 | + IF ( ln_isfcav ) THEN |
| 297 | + CALL iom_get ( inum, jpdom_unknown, 'Bathymetry_isf' , zdta, kstart=(/jpizoom,jpjzoom/), kcount=(/jpiglo,jpjglo/) ) |
| 298 | + ELSE |
| 299 | + ! Optionally use a file attribute (open_ocean_startj) to set a start row for reading from the global file |
| 300 | + ! This allows the unextended grid bathymetry to be stored in the same file as the under ice-shelf extended bathymetry |
| 301 | + CALL iom_getatt(inum, 'open_ocean_startj', jstartrow ) ! -999 is returned if the attribute is not found |
| 302 | + jstartrow = MAX(1,jstartrow) |
| 303 | + CALL iom_get ( inum, jpdom_unknown, 'Bathymetry' , zdta, kstart=(/jpizoom,jpjzoom+jstartrow-1/), kcount=(/jpiglo,jpjglo/) ) |
| 304 | + ENDIF |
| 305 | ENDIF |
| 306 | CALL iom_close (inum) |
| 307 | |
| 308 | Index: NEMO/OPA_SRC/nemogcm.F90 |
| 309 | =================================================================== |
| 310 | --- NEMO/OPA_SRC/nemogcm.F90 (revision 5088) |
| 311 | +++ NEMO/OPA_SRC/nemogcm.F90 (working copy) |
| 312 | @@ -221,7 +221,7 @@ |
| 313 | & nn_isplt, nn_jsplt, nn_jctls, nn_jctle, & |
| 314 | & nn_bench, nn_timing |
| 315 | NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & |
| 316 | - & jpizoom, jpjzoom, jperio |
| 317 | + & jpizoom, jpjzoom, jperio, ln_use_jattr |
| 318 | !!---------------------------------------------------------------------- |
| 319 | ! |
| 320 | cltxt = '' |
| 321 | @@ -260,6 +260,7 @@ |
| 322 | jpjzoom = 1 |
| 323 | nperio = 0 |
| 324 | jperio = 0 |
| 325 | + ln_use_jattr = .false. |
| 326 | ENDIF |
| 327 | #endif |
| 328 | ! |
| 329 | @@ -505,6 +506,7 @@ |
| 330 | WRITE(numout,*) ' left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom |
| 331 | WRITE(numout,*) ' left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom |
| 332 | WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio = ', jperio |
| 333 | + WRITE(numout,*) ' use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr |
| 334 | ENDIF |
| 335 | ! ! Parameter control |
| 336 | ! |
| 337 | Index: NEMO/OPA_SRC/par_oce.F90 |
| 338 | =================================================================== |
| 339 | --- NEMO/OPA_SRC/par_oce.F90 (revision 5088) |
| 340 | +++ NEMO/OPA_SRC/par_oce.F90 (working copy) |
| 341 | @@ -52,6 +52,13 @@ |
| 342 | ! ! = 5 North fold F-point pivot |
| 343 | ! ! = 6 cyclic East-West AND North fold F-point pivot |
| 344 | |
| 345 | + ! Input file read offset |
| 346 | + LOGICAL :: ln_use_jattr !: Use file global attribute: open_ocean_jstart to determine start j-row |
| 347 | + ! when reading input from those netcdf files that have the |
| 348 | + ! attribute defined. This is designed to enable input files associated |
| 349 | + ! with the extended grids used in the under ice shelf configurations to |
| 350 | + ! be used without redundant rows when the ice shelves are not in use. |
| 351 | + |
| 352 | !! Values set to pp_not_used indicates that this parameter is not used in THIS config. |
| 353 | !! Values set to pp_to_be_computed indicates that variables will be computed in domzgr |
| 354 | REAL(wp) :: pp_not_used = 999999._wp !: vertical grid parameter |
| 355 | Index: NEMO/SAS_SRC/nemogcm.F90 |
| 356 | =================================================================== |
| 357 | --- NEMO/SAS_SRC/nemogcm.F90 (revision 5088) |
| 358 | +++ NEMO/SAS_SRC/nemogcm.F90 (working copy) |
| 359 | @@ -160,7 +160,7 @@ |
| 360 | & nn_isplt, nn_jsplt, nn_jctls, nn_jctle, & |
| 361 | & nn_bench, nn_timing |
| 362 | NAMELIST/namcfg/ cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & |
| 363 | - & jpizoom, jpjzoom, jperio |
| 364 | + & jpizoom, jpjzoom, jperio, ln_use_jattr |
| 365 | !!---------------------------------------------------------------------- |
| 366 | cltxt = '' |
| 367 | ! |
| 368 | @@ -347,6 +347,7 @@ |
| 369 | WRITE(numout,*) ' left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom |
| 370 | WRITE(numout,*) ' left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom |
| 371 | WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio = ', jperio |
| 372 | + WRITE(numout,*) ' use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr |
| 373 | ENDIF |
| 374 | ! ! Parameter control |
| 375 | ! |
| 376 | }}} |