- Timestamp:
- 2017-12-01T18:44:09+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r8329 r8882 13 13 !! 3.6 ! 2012-01 (C. Rousset) add ice boundary conditions for lim3 14 14 !!---------------------------------------------------------------------- 15 !! bdy_dta : read external data along open boundaries from file 16 !! bdy_dta_init : initialise arrays etc for reading of external data 15 17 16 !!---------------------------------------------------------------------- 18 USE timing ! Timing 19 USE oce ! ocean dynamics and tracers 20 USE dom_oce ! ocean space and time domain 21 USE phycst ! physical constants 22 USE bdy_oce ! ocean open boundary conditions 23 USE bdytides ! tidal forcing at boundaries 24 USE fldread ! read input fields 25 USE iom ! IOM library 26 USE in_out_manager ! I/O logical units 27 #if defined key_lim2 28 USE ice_2 29 #elif defined key_lim3 30 USE ice 31 USE limvar ! redistribute ice input into categories 32 #endif 33 USE sbcapr 34 USE sbctide ! Tidal forcing or not 17 !! bdy_dta : read external data along open boundaries from file 18 !! bdy_dta_init : initialise arrays etc for reading of external data 19 !!---------------------------------------------------------------------- 20 USE oce ! ocean dynamics and tracers 21 USE dom_oce ! ocean space and time domain 22 USE phycst ! physical constants 23 USE sbcapr ! atmospheric pressure forcing 24 USE sbctide ! Tidal forcing or not 25 USE bdy_oce ! ocean open boundary conditions 26 USE bdytides ! tidal forcing at boundaries 27 #if defined key_lim3 28 USE ice ! sea-ice variables 29 USE icevar ! redistribute ice input into categories 30 #endif 31 ! 32 USE fldread ! read input fields 33 USE iom ! IOM library 34 USE in_out_manager ! I/O logical units 35 USE timing ! Timing 35 36 36 37 IMPLICIT NONE … … 50 51 51 52 #if defined key_lim3 52 LOGICAL :: ll_bdylim3 ! determine whether ice input is lim2 (F) or lim3 (T) type53 INTEGER :: jfld_hti, jfld_hts, jfld_ai! indices of ice thickness, snow thickness and concentration in bf structure53 INTEGER :: nice_cat ! number of categories in the input file 54 INTEGER :: jfld_hti, jfld_hts, jfld_ai ! indices of ice thickness, snow thickness and concentration in bf structure 54 55 #endif 55 56 56 57 !!---------------------------------------------------------------------- 57 !! NEMO/OPA 3.3 , NEMO Consortium (2010)58 !! NEMO/OPA 4.0 , NEMO Consortium (2017) 58 59 !! $Id$ 59 60 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 79 80 ! ! etc. 80 81 ! 81 INTEGER :: ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd, jl ! local indices 82 INTEGER :: jbdy, jfld, jstart, jend, ib, jl ! dummy loop indices 83 INTEGER :: ii, ij, ik, igrd ! local integers 82 84 INTEGER, DIMENSION(jpbgrd) :: ilen1 83 85 INTEGER, POINTER, DIMENSION(:) :: nblen, nblenrim ! short cuts … … 94 96 !----------------------------- 95 97 96 DO ib_bdy = 1, nb_bdy98 DO jbdy = 1, nb_bdy 97 99 ! 98 nblen => idx_bdy(ib_bdy)%nblen99 nblenrim => idx_bdy( ib_bdy)%nblenrim100 dta => dta_bdy(ib_bdy)101 102 IF( nn_dyn2d_dta( ib_bdy) == 0 ) THEN100 nblen => idx_bdy(jbdy)%nblen 101 nblenrim => idx_bdy(jbdy)%nblenrim 102 dta => dta_bdy(jbdy) 103 ! 104 IF( nn_dyn2d_dta(jbdy) == 0 ) THEN 103 105 ilen1(:) = nblen(:) 104 106 IF( dta%ll_ssh ) THEN 105 107 igrd = 1 106 108 DO ib = 1, ilen1(igrd) 107 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)108 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)109 dta_bdy( ib_bdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)109 ii = idx_bdy(jbdy)%nbi(ib,igrd) 110 ij = idx_bdy(jbdy)%nbj(ib,igrd) 111 dta_bdy(jbdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1) 110 112 END DO 111 END 113 ENDIF 112 114 IF( dta%ll_u2d ) THEN 113 115 igrd = 2 114 116 DO ib = 1, ilen1(igrd) 115 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)116 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)117 dta_bdy( ib_bdy)%u2d(ib) = un_b(ii,ij) * umask(ii,ij,1)117 ii = idx_bdy(jbdy)%nbi(ib,igrd) 118 ij = idx_bdy(jbdy)%nbj(ib,igrd) 119 dta_bdy(jbdy)%u2d(ib) = un_b(ii,ij) * umask(ii,ij,1) 118 120 END DO 119 END 121 ENDIF 120 122 IF( dta%ll_v2d ) THEN 121 123 igrd = 3 122 124 DO ib = 1, ilen1(igrd) 123 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)124 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)125 dta_bdy( ib_bdy)%v2d(ib) = vn_b(ii,ij) * vmask(ii,ij,1)125 ii = idx_bdy(jbdy)%nbi(ib,igrd) 126 ij = idx_bdy(jbdy)%nbj(ib,igrd) 127 dta_bdy(jbdy)%v2d(ib) = vn_b(ii,ij) * vmask(ii,ij,1) 126 128 END DO 127 END 128 ENDIF 129 130 IF( nn_dyn3d_dta( ib_bdy) == 0 ) THEN129 ENDIF 130 ENDIF 131 ! 132 IF( nn_dyn3d_dta(jbdy) == 0 ) THEN 131 133 ilen1(:) = nblen(:) 132 134 IF( dta%ll_u3d ) THEN … … 134 136 DO ib = 1, ilen1(igrd) 135 137 DO ik = 1, jpkm1 136 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)137 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)138 dta_bdy( ib_bdy)%u3d(ib,ik) = ( un(ii,ij,ik) - un_b(ii,ij) ) * umask(ii,ij,ik)138 ii = idx_bdy(jbdy)%nbi(ib,igrd) 139 ij = idx_bdy(jbdy)%nbj(ib,igrd) 140 dta_bdy(jbdy)%u3d(ib,ik) = ( un(ii,ij,ik) - un_b(ii,ij) ) * umask(ii,ij,ik) 139 141 END DO 140 142 END DO 141 END 143 ENDIF 142 144 IF( dta%ll_v3d ) THEN 143 145 igrd = 3 144 146 DO ib = 1, ilen1(igrd) 145 147 DO ik = 1, jpkm1 146 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)147 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)148 dta_bdy( ib_bdy)%v3d(ib,ik) = ( vn(ii,ij,ik) - vn_b(ii,ij) ) * vmask(ii,ij,ik)148 ii = idx_bdy(jbdy)%nbi(ib,igrd) 149 ij = idx_bdy(jbdy)%nbj(ib,igrd) 150 dta_bdy(jbdy)%v3d(ib,ik) = ( vn(ii,ij,ik) - vn_b(ii,ij) ) * vmask(ii,ij,ik) 149 151 END DO 150 152 END DO 151 END 152 ENDIF 153 154 IF( nn_tra_dta( ib_bdy) == 0 ) THEN153 ENDIF 154 ENDIF 155 156 IF( nn_tra_dta(jbdy) == 0 ) THEN 155 157 ilen1(:) = nblen(:) 156 158 IF( dta%ll_tem ) THEN … … 158 160 DO ib = 1, ilen1(igrd) 159 161 DO ik = 1, jpkm1 160 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)161 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)162 dta_bdy( ib_bdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik)162 ii = idx_bdy(jbdy)%nbi(ib,igrd) 163 ij = idx_bdy(jbdy)%nbj(ib,igrd) 164 dta_bdy(jbdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik) 163 165 END DO 164 166 END DO 165 END 167 ENDIF 166 168 IF( dta%ll_sal ) THEN 167 169 igrd = 1 168 170 DO ib = 1, ilen1(igrd) 169 171 DO ik = 1, jpkm1 170 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)171 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)172 dta_bdy( ib_bdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik)172 ii = idx_bdy(jbdy)%nbi(ib,igrd) 173 ij = idx_bdy(jbdy)%nbj(ib,igrd) 174 dta_bdy(jbdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik) 173 175 END DO 174 176 END DO 175 END IF 176 ENDIF 177 178 #if defined key_lim2 179 IF( nn_ice_lim_dta(ib_bdy) == 0 ) THEN 180 ilen1(:) = nblen(:) 181 IF( dta%ll_frld ) THEN 182 igrd = 1 183 DO ib = 1, ilen1(igrd) 184 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 185 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 186 dta_bdy(ib_bdy)%frld(ib) = frld(ii,ij) * tmask(ii,ij,1) 187 END DO 188 END IF 189 IF( dta%ll_hicif ) THEN 190 igrd = 1 191 DO ib = 1, ilen1(igrd) 192 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 193 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 194 dta_bdy(ib_bdy)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1) 195 END DO 196 END IF 197 IF( dta%ll_hsnif ) THEN 198 igrd = 1 199 DO ib = 1, ilen1(igrd) 200 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 201 ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 202 dta_bdy(ib_bdy)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1) 203 END DO 204 END IF 205 ENDIF 206 #elif defined key_lim3 207 IF( nn_ice_lim_dta(ib_bdy) == 0 ) THEN 177 ENDIF 178 ENDIF 179 180 #if defined key_lim3 181 IF( nn_ice_lim_dta(jbdy) == 0 ) THEN ! set ice to initial values 208 182 ilen1(:) = nblen(:) 209 183 IF( dta%ll_a_i ) THEN … … 211 185 DO jl = 1, jpl 212 186 DO ib = 1, ilen1(igrd) 213 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)214 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)215 dta_bdy( ib_bdy)%a_i (ib,jl) = a_i(ii,ij,jl) * tmask(ii,ij,1)187 ii = idx_bdy(jbdy)%nbi(ib,igrd) 188 ij = idx_bdy(jbdy)%nbj(ib,igrd) 189 dta_bdy(jbdy)%a_i (ib,jl) = a_i(ii,ij,jl) * tmask(ii,ij,1) 216 190 END DO 217 191 END DO 218 192 ENDIF 219 IF( dta%ll_h t_i ) THEN193 IF( dta%ll_h_i ) THEN 220 194 igrd = 1 221 195 DO jl = 1, jpl 222 196 DO ib = 1, ilen1(igrd) 223 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)224 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)225 dta_bdy( ib_bdy)%ht_i (ib,jl) = ht_i(ii,ij,jl) * tmask(ii,ij,1)197 ii = idx_bdy(jbdy)%nbi(ib,igrd) 198 ij = idx_bdy(jbdy)%nbj(ib,igrd) 199 dta_bdy(jbdy)%h_i (ib,jl) = h_i(ii,ij,jl) * tmask(ii,ij,1) 226 200 END DO 227 201 END DO 228 202 ENDIF 229 IF( dta%ll_h t_s ) THEN203 IF( dta%ll_h_s ) THEN 230 204 igrd = 1 231 205 DO jl = 1, jpl 232 206 DO ib = 1, ilen1(igrd) 233 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)234 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)235 dta_bdy( ib_bdy)%ht_s (ib,jl) = ht_s(ii,ij,jl) * tmask(ii,ij,1)207 ii = idx_bdy(jbdy)%nbi(ib,igrd) 208 ij = idx_bdy(jbdy)%nbj(ib,igrd) 209 dta_bdy(jbdy)%h_s (ib,jl) = h_s(ii,ij,jl) * tmask(ii,ij,1) 236 210 END DO 237 211 END DO … … 239 213 ENDIF 240 214 #endif 241 END DO ! ib_bdy215 END DO ! jbdy 242 216 ! 243 217 ENDIF ! kt == nit000 … … 247 221 248 222 jstart = 1 249 DO ib_bdy = 1, nb_bdy250 dta => dta_bdy( ib_bdy)251 IF( nn_dta( ib_bdy) == 1 ) THEN ! skip this bit if no external data required223 DO jbdy = 1, nb_bdy 224 dta => dta_bdy(jbdy) 225 IF( nn_dta(jbdy) == 1 ) THEN ! skip this bit if no external data required 252 226 253 227 IF( PRESENT(jit) ) THEN 254 228 ! Update barotropic boundary conditions only 255 229 ! jit is optional argument for fld_read and bdytide_update 256 IF( cn_dyn2d( ib_bdy) /= 'none' ) THEN257 IF( nn_dyn2d_dta( ib_bdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays230 IF( cn_dyn2d(jbdy) /= 'none' ) THEN 231 IF( nn_dyn2d_dta(jbdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 258 232 IF( dta%ll_ssh ) dta%ssh(:) = 0._wp 259 233 IF( dta%ll_u2d ) dta%u2d(:) = 0._wp 260 234 IF( dta%ll_u3d ) dta%v2d(:) = 0._wp 261 235 ENDIF 262 IF (cn_tra( ib_bdy) /= 'runoff') THEN263 IF( nn_dyn2d_dta( ib_bdy) == 1 .OR. nn_dyn2d_dta(ib_bdy) == 3 ) THEN236 IF (cn_tra(jbdy) /= 'runoff') THEN 237 IF( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 ) THEN 264 238 265 239 jend = jstart + dta%nread(2) - 1 266 IF( ln_full_vel_array( ib_bdy) ) THEN240 IF( ln_full_vel_array(jbdy) ) THEN 267 241 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), & 268 242 & kit=jit, kt_offset=time_offset , jpk_bdy=nb_jpk_bdy, & 269 & fvl=ln_full_vel_array( ib_bdy) )243 & fvl=ln_full_vel_array(jbdy) ) 270 244 ELSE 271 245 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), & … … 274 248 275 249 ! If full velocities in boundary data then extract barotropic velocities from 3D fields 276 IF( ln_full_vel_array( ib_bdy) .AND. &277 & ( nn_dyn2d_dta( ib_bdy) == 1 .OR. nn_dyn2d_dta(ib_bdy) == 3 .OR. &278 & nn_dyn3d_dta( ib_bdy) == 1 ) )THEN250 IF( ln_full_vel_array(jbdy) .AND. & 251 & ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 .OR. & 252 & nn_dyn3d_dta(jbdy) == 1 ) )THEN 279 253 280 254 igrd = 2 ! zonal velocity 281 255 dta%u2d(:) = 0._wp 282 DO ib = 1, idx_bdy( ib_bdy)%nblen(igrd)283 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)284 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)256 DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 257 ii = idx_bdy(jbdy)%nbi(ib,igrd) 258 ij = idx_bdy(jbdy)%nbj(ib,igrd) 285 259 DO ik = 1, jpkm1 286 260 dta%u2d(ib) = dta%u2d(ib) & … … 291 265 igrd = 3 ! meridional velocity 292 266 dta%v2d(:) = 0._wp 293 DO ib = 1, idx_bdy( ib_bdy)%nblen(igrd)294 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)295 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)267 DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 268 ii = idx_bdy(jbdy)%nbi(ib,igrd) 269 ij = idx_bdy(jbdy)%nbj(ib,igrd) 296 270 DO ik = 1, jpkm1 297 271 dta%v2d(ib) = dta%v2d(ib) & … … 302 276 ENDIF 303 277 ENDIF 304 IF( nn_dyn2d_dta( ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing305 CALL bdytide_update( kt=kt, idx=idx_bdy( ib_bdy), dta=dta, td=tides(ib_bdy), &278 IF( nn_dyn2d_dta(jbdy) .ge. 2 ) THEN ! update tidal harmonic forcing 279 CALL bdytide_update( kt=kt, idx=idx_bdy(jbdy), dta=dta, td=tides(jbdy), & 306 280 & jit=jit, time_offset=time_offset ) 307 281 ENDIF … … 309 283 ENDIF 310 284 ELSE 311 IF (cn_tra( ib_bdy) == 'runoff') then ! runoff condition312 jend = nb_bdy_fld( ib_bdy)285 IF (cn_tra(jbdy) == 'runoff') then ! runoff condition 286 jend = nb_bdy_fld(jbdy) 313 287 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 314 288 & map=nbmap_ptr(jstart:jend), kt_offset=time_offset ) 315 289 ! 316 290 igrd = 2 ! zonal velocity 317 DO ib = 1, idx_bdy( ib_bdy)%nblen(igrd)318 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)319 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)291 DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 292 ii = idx_bdy(jbdy)%nbi(ib,igrd) 293 ij = idx_bdy(jbdy)%nbj(ib,igrd) 320 294 dta%u2d(ib) = dta%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) ) 321 295 END DO 322 296 ! 323 297 igrd = 3 ! meridional velocity 324 DO ib = 1, idx_bdy( ib_bdy)%nblen(igrd)325 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)326 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)298 DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 299 ii = idx_bdy(jbdy)%nbi(ib,igrd) 300 ij = idx_bdy(jbdy)%nbj(ib,igrd) 327 301 dta%v2d(ib) = dta%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) ) 328 302 END DO 329 303 ELSE 330 IF( nn_dyn2d_dta( ib_bdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays304 IF( nn_dyn2d_dta(jbdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 331 305 IF( dta%ll_ssh ) dta%ssh(:) = 0._wp 332 306 IF( dta%ll_u2d ) dta%u2d(:) = 0._wp … … 337 311 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 338 312 & map=nbmap_ptr(jstart:jend), kt_offset=time_offset, jpk_bdy=nb_jpk_bdy, & 339 & fvl=ln_full_vel_array( ib_bdy) )313 & fvl=ln_full_vel_array(jbdy) ) 340 314 ENDIF 341 315 ! If full velocities in boundary data then split into barotropic and baroclinic data 342 IF( ln_full_vel_array( ib_bdy) .and. &343 & ( nn_dyn2d_dta( ib_bdy) == 1 .OR. nn_dyn2d_dta(ib_bdy) == 3 .OR. &344 & nn_dyn3d_dta( ib_bdy) == 1 ) ) THEN316 IF( ln_full_vel_array(jbdy) .and. & 317 & ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 .OR. & 318 & nn_dyn3d_dta(jbdy) == 1 ) ) THEN 345 319 igrd = 2 ! zonal velocity 346 320 dta%u2d(:) = 0._wp 347 DO ib = 1, idx_bdy( ib_bdy)%nblen(igrd)348 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)349 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)321 DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 322 ii = idx_bdy(jbdy)%nbi(ib,igrd) 323 ij = idx_bdy(jbdy)%nbj(ib,igrd) 350 324 DO ik = 1, jpkm1 351 325 dta%u2d(ib) = dta%u2d(ib) & … … 359 333 igrd = 3 ! meridional velocity 360 334 dta%v2d(:) = 0._wp 361 DO ib = 1, idx_bdy( ib_bdy)%nblen(igrd)362 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)363 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)335 DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 336 ii = idx_bdy(jbdy)%nbi(ib,igrd) 337 ij = idx_bdy(jbdy)%nbj(ib,igrd) 364 338 DO ik = 1, jpkm1 365 339 dta%v2d(ib) = dta%v2d(ib) & … … 375 349 ENDIF 376 350 #if defined key_lim3 377 IF( .NOT. ll_bdylim3 .AND. cn_ice_lim(ib_bdy) /= 'none' .AND. nn_ice_lim_dta(ib_bdy) == 1 ) THEN ! bdy ice input (case input is lim2 type) 378 CALL lim_var_itd ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 379 & dta_bdy(ib_bdy)%ht_i, dta_bdy(ib_bdy)%ht_s, dta_bdy(ib_bdy)%a_i ) 351 IF( cn_ice_lim(jbdy) /= 'none' .AND. nn_ice_lim_dta(jbdy) == 1 ) THEN 352 IF( nice_cat == 1 ) THEN ! case input cat = 1 353 CALL ice_var_itd ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 354 & dta_bdy(jbdy)%h_i , dta_bdy(jbdy)%h_s , dta_bdy(jbdy)%a_i ) 355 ELSEIF( nice_cat /= 1 .AND. nice_cat /= jpl ) THEN ! case input cat /=1 and /=jpl 356 CALL ice_var_itd2( bf(jfld_hti)%fnow(:,1,:), bf(jfld_hts)%fnow(:,1,:), bf(jfld_ai)%fnow(:,1,:), & 357 & dta_bdy(jbdy)%h_i , dta_bdy(jbdy)%h_s , dta_bdy(jbdy)%a_i ) 358 ENDIF 380 359 ENDIF 381 360 #endif 382 361 ENDIF 383 362 jstart = jstart + dta%nread(1) 384 END IF ! nn_dta(ib_bdy) = 1385 END DO ! ib_bdy363 ENDIF ! nn_dta(jbdy) = 1 364 END DO ! jbdy 386 365 387 366 IF ( ln_tide ) THEN 388 367 IF (ln_dynspg_ts) THEN ! Fill temporary arrays with slow-varying bdy data 389 DO ib_bdy = 1, nb_bdy ! Tidal component added in ts loop390 IF ( nn_dyn2d_dta( ib_bdy) .ge. 2 ) THEN391 nblen => idx_bdy( ib_bdy)%nblen392 nblenrim => idx_bdy( ib_bdy)%nblenrim393 IF( cn_dyn2d( ib_bdy) == 'frs' ) THEN; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF394 IF ( dta_bdy( ib_bdy)%ll_ssh ) dta_bdy_s(ib_bdy)%ssh(1:ilen1(1)) = dta_bdy(ib_bdy)%ssh(1:ilen1(1))395 IF ( dta_bdy( ib_bdy)%ll_u2d ) dta_bdy_s(ib_bdy)%u2d(1:ilen1(2)) = dta_bdy(ib_bdy)%u2d(1:ilen1(2))396 IF ( dta_bdy( ib_bdy)%ll_v2d ) dta_bdy_s(ib_bdy)%v2d(1:ilen1(3)) = dta_bdy(ib_bdy)%v2d(1:ilen1(3))368 DO jbdy = 1, nb_bdy ! Tidal component added in ts loop 369 IF ( nn_dyn2d_dta(jbdy) .ge. 2 ) THEN 370 nblen => idx_bdy(jbdy)%nblen 371 nblenrim => idx_bdy(jbdy)%nblenrim 372 IF( cn_dyn2d(jbdy) == 'frs' ) THEN; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF 373 IF ( dta_bdy(jbdy)%ll_ssh ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 374 IF ( dta_bdy(jbdy)%ll_u2d ) dta_bdy_s(jbdy)%u2d(1:ilen1(2)) = dta_bdy(jbdy)%u2d(1:ilen1(2)) 375 IF ( dta_bdy(jbdy)%ll_v2d ) dta_bdy_s(jbdy)%v2d(1:ilen1(3)) = dta_bdy(jbdy)%v2d(1:ilen1(3)) 397 376 ENDIF 398 377 END DO … … 404 383 405 384 IF ( ln_apr_obc ) THEN 406 DO ib_bdy = 1, nb_bdy407 IF (cn_tra( ib_bdy) /= 'runoff')THEN385 DO jbdy = 1, nb_bdy 386 IF (cn_tra(jbdy) /= 'runoff')THEN 408 387 igrd = 1 ! meridional velocity 409 DO ib = 1, idx_bdy( ib_bdy)%nblenrim(igrd)410 ii = idx_bdy( ib_bdy)%nbi(ib,igrd)411 ij = idx_bdy( ib_bdy)%nbj(ib,igrd)412 dta_bdy( ib_bdy)%ssh(ib) = dta_bdy(ib_bdy)%ssh(ib) + ssh_ib(ii,ij)388 DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd) 389 ii = idx_bdy(jbdy)%nbi(ib,igrd) 390 ij = idx_bdy(jbdy)%nbj(ib,igrd) 391 dta_bdy(jbdy)%ssh(ib) = dta_bdy(jbdy)%ssh(ib) + ssh_ib(ii,ij) 413 392 END DO 414 393 ENDIF … … 431 410 !! 432 411 !!---------------------------------------------------------------------- 433 INTEGER :: ib_bdy, jfld, jstart, jend, ierror, ios ! Local integers412 INTEGER :: jbdy, jfld, jstart, jend, ierror, ios ! Local integers 434 413 ! 435 414 CHARACTER(len=100) :: cn_dir ! Root directory for location of data files … … 437 416 CHARACTER(len = 256):: clname ! temporary file name 438 417 LOGICAL :: ln_full_vel ! =T => full velocities in 3D boundary data 439 418 ! ! =F => baroclinic velocities in 3D boundary data 440 419 INTEGER :: ilen_global ! Max length required for global bdy dta arrays 441 420 INTEGER, ALLOCATABLE, DIMENSION(:) :: ilen1, ilen3 ! size of 1st and 3rd dimensions of local arrays … … 445 424 TYPE(OBC_DATA), POINTER :: dta ! short cut 446 425 #if defined key_lim3 447 INTEGER :: zndims ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 426 INTEGER :: kndims ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 427 INTEGER, DIMENSION(4) :: kdimsz ! size of dimensions 448 428 INTEGER :: inum,id1 ! local integer 449 429 #endif … … 451 431 TYPE(FLD_N) :: bn_tem, bn_sal, bn_u3d, bn_v3d ! 452 432 TYPE(FLD_N) :: bn_ssh, bn_u2d, bn_v2d ! informations about the fields to be read 453 #if defined key_lim2 454 TYPE(FLD_N) :: bn_frld, bn_hicif, bn_hsnif ! 455 #elif defined key_lim3 456 TYPE(FLD_N) :: bn_a_i, bn_ht_i, bn_ht_s 433 #if defined key_lim3 434 TYPE(FLD_N) :: bn_a_i, bn_h_i, bn_h_s 457 435 #endif 458 436 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 459 #if defined key_lim2 460 NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif 461 #elif defined key_lim3 462 NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s 437 #if defined key_lim3 438 NAMELIST/nambdy_dta/ bn_a_i, bn_h_i, bn_h_s 463 439 #endif 464 440 NAMELIST/nambdy_dta/ ln_full_vel, nb_jpk_bdy … … 473 449 474 450 ! Set nn_dta 475 DO ib_bdy = 1, nb_bdy476 nn_dta( ib_bdy) = MAX( nn_dyn2d_dta(ib_bdy)&477 ,nn_dyn3d_dta(ib_bdy)&478 ,nn_tra_dta(ib_bdy)&479 #if ( defined key_lim2 || defined key_lim3 )480 ,nn_ice_lim_dta(ib_bdy) &451 DO jbdy = 1, nb_bdy 452 nn_dta(jbdy) = MAX( nn_dyn2d_dta (jbdy) & 453 & , nn_dyn3d_dta (jbdy) & 454 & , nn_tra_dta (jbdy) & 455 #if defined key_lim3 456 & , nn_ice_lim_dta(jbdy) & 481 457 #endif 482 458 ) 483 IF(nn_dta( ib_bdy) > 1) nn_dta(ib_bdy) = 1459 IF(nn_dta(jbdy) > 1) nn_dta(jbdy) = 1 484 460 END DO 485 461 … … 488 464 ALLOCATE( nb_bdy_fld(nb_bdy) ) 489 465 nb_bdy_fld(:) = 0 490 DO ib_bdy = 1, nb_bdy491 IF( cn_dyn2d( ib_bdy) /= 'none' .and. ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) ) THEN492 nb_bdy_fld( ib_bdy) = nb_bdy_fld(ib_bdy) + 3493 ENDIF 494 IF( cn_dyn3d( ib_bdy) /= 'none' .and. nn_dyn3d_dta(ib_bdy) == 1 ) THEN495 nb_bdy_fld( ib_bdy) = nb_bdy_fld(ib_bdy) + 2496 ENDIF 497 IF( cn_tra( ib_bdy) /= 'none' .and. nn_tra_dta(ib_bdy) == 1 ) THEN498 nb_bdy_fld( ib_bdy) = nb_bdy_fld(ib_bdy) + 2499 ENDIF 500 #if ( defined key_lim2 || defined key_lim3 )501 IF( cn_ice_lim( ib_bdy) /= 'none' .and. nn_ice_lim_dta(ib_bdy) == 1 ) THEN502 nb_bdy_fld( ib_bdy) = nb_bdy_fld(ib_bdy) + 3466 DO jbdy = 1, nb_bdy 467 IF( cn_dyn2d(jbdy) /= 'none' .AND. ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) ) THEN 468 nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 3 469 ENDIF 470 IF( cn_dyn3d(jbdy) /= 'none' .AND. nn_dyn3d_dta(jbdy) == 1 ) THEN 471 nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 2 472 ENDIF 473 IF( cn_tra(jbdy) /= 'none' .AND. nn_tra_dta(jbdy) == 1 ) THEN 474 nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 2 475 ENDIF 476 #if defined key_lim3 477 IF( cn_ice_lim(jbdy) /= 'none' .AND. nn_ice_lim_dta(jbdy) == 1 ) THEN 478 nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 3 503 479 ENDIF 504 480 #endif 505 IF(lwp) WRITE(numout,*) 'Maximum number of files to open =', nb_bdy_fld(ib_bdy)481 IF(lwp) WRITE(numout,*) 'Maximum number of files to open =', nb_bdy_fld(jbdy) 506 482 END DO 507 483 … … 529 505 REWIND(numnam_cfg) 530 506 jfld = 0 531 DO ib_bdy = 1, nb_bdy532 IF( nn_dta( ib_bdy) == 1 ) THEN507 DO jbdy = 1, nb_bdy 508 IF( nn_dta(jbdy) == 1 ) THEN 533 509 READ ( numnam_ref, nambdy_dta, IOSTAT = ios, ERR = 901) 534 510 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_dta in reference namelist', lwp ) … … 538 514 IF(lwm) WRITE( numond, nambdy_dta ) 539 515 540 cn_dir_array( ib_bdy) = cn_dir541 ln_full_vel_array( ib_bdy) = ln_full_vel542 543 nblen => idx_bdy( ib_bdy)%nblen544 nblenrim => idx_bdy( ib_bdy)%nblenrim545 dta => dta_bdy( ib_bdy)516 cn_dir_array(jbdy) = cn_dir 517 ln_full_vel_array(jbdy) = ln_full_vel 518 519 nblen => idx_bdy(jbdy)%nblen 520 nblenrim => idx_bdy(jbdy)%nblenrim 521 dta => dta_bdy(jbdy) 546 522 dta%nread(2) = 0 547 523 548 524 ! Only read in necessary fields for this set. 549 525 ! Important that barotropic variables come first. 550 IF( nn_dyn2d_dta( ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) THEN526 IF( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) THEN 551 527 552 528 IF( dta%ll_ssh ) THEN … … 554 530 jfld = jfld + 1 555 531 blf_i(jfld) = bn_ssh 556 ibdy(jfld) = ib_bdy532 ibdy(jfld) = jbdy 557 533 igrid(jfld) = 1 558 534 ilen1(jfld) = nblen(igrid(jfld)) … … 561 537 ENDIF 562 538 563 IF( dta%ll_u2d .and. .not. ln_full_vel_array( ib_bdy) ) THEN539 IF( dta%ll_u2d .and. .not. ln_full_vel_array(jbdy) ) THEN 564 540 if(lwp) write(numout,*) '++++++ reading in u2d field' 565 541 jfld = jfld + 1 566 542 blf_i(jfld) = bn_u2d 567 ibdy(jfld) = ib_bdy543 ibdy(jfld) = jbdy 568 544 igrid(jfld) = 2 569 545 ilen1(jfld) = nblen(igrid(jfld)) … … 572 548 ENDIF 573 549 574 IF( dta%ll_v2d .and. .not. ln_full_vel_array( ib_bdy) ) THEN550 IF( dta%ll_v2d .and. .not. ln_full_vel_array(jbdy) ) THEN 575 551 if(lwp) write(numout,*) '++++++ reading in v2d field' 576 552 jfld = jfld + 1 577 553 blf_i(jfld) = bn_v2d 578 ibdy(jfld) = ib_bdy554 ibdy(jfld) = jbdy 579 555 igrid(jfld) = 3 580 556 ilen1(jfld) = nblen(igrid(jfld)) … … 587 563 ! read 3D velocities if baroclinic velocities require OR if 588 564 ! barotropic velocities required and ln_full_vel set to .true. 589 IF( nn_dyn3d_dta( ib_bdy) == 1 .OR. &590 & ( ln_full_vel_array( ib_bdy) .AND. ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) ) ) THEN591 592 IF( dta%ll_u3d .OR. ( ln_full_vel_array( ib_bdy) .and. dta%ll_u2d ) ) THEN565 IF( nn_dyn3d_dta(jbdy) == 1 .OR. & 566 & ( ln_full_vel_array(jbdy) .AND. ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 ) ) ) THEN 567 568 IF( dta%ll_u3d .OR. ( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) ) THEN 593 569 if(lwp) write(numout,*) '++++++ reading in u3d field' 594 570 jfld = jfld + 1 595 571 blf_i(jfld) = bn_u3d 596 ibdy(jfld) = ib_bdy572 ibdy(jfld) = jbdy 597 573 igrid(jfld) = 2 598 574 ilen1(jfld) = nblen(igrid(jfld)) 599 575 ilen3(jfld) = jpk 600 IF( ln_full_vel_array( ib_bdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1601 ENDIF 602 603 IF( dta%ll_v3d .OR. ( ln_full_vel_array( ib_bdy) .and. dta%ll_v2d ) ) THEN576 IF( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1 577 ENDIF 578 579 IF( dta%ll_v3d .OR. ( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) ) THEN 604 580 if(lwp) write(numout,*) '++++++ reading in v3d field' 605 581 jfld = jfld + 1 606 582 blf_i(jfld) = bn_v3d 607 ibdy(jfld) = ib_bdy583 ibdy(jfld) = jbdy 608 584 igrid(jfld) = 3 609 585 ilen1(jfld) = nblen(igrid(jfld)) 610 586 ilen3(jfld) = jpk 611 IF( ln_full_vel_array( ib_bdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1587 IF( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1 612 588 ENDIF 613 589 … … 615 591 616 592 ! temperature and salinity 617 IF( nn_tra_dta( ib_bdy) == 1 ) THEN593 IF( nn_tra_dta(jbdy) == 1 ) THEN 618 594 619 595 IF( dta%ll_tem ) THEN … … 621 597 jfld = jfld + 1 622 598 blf_i(jfld) = bn_tem 623 ibdy(jfld) = ib_bdy599 ibdy(jfld) = jbdy 624 600 igrid(jfld) = 1 625 601 ilen1(jfld) = nblen(igrid(jfld)) … … 631 607 jfld = jfld + 1 632 608 blf_i(jfld) = bn_sal 633 ibdy(jfld) = ib_bdy609 ibdy(jfld) = jbdy 634 610 igrid(jfld) = 1 635 611 ilen1(jfld) = nblen(igrid(jfld)) … … 639 615 ENDIF 640 616 641 #if defined key_lim 2617 #if defined key_lim3 642 618 ! sea ice 643 IF( nn_ice_lim_dta(ib_bdy) == 1 ) THEN 644 645 IF( dta%ll_frld ) THEN 646 jfld = jfld + 1 647 blf_i(jfld) = bn_frld 648 ibdy(jfld) = ib_bdy 649 igrid(jfld) = 1 650 ilen1(jfld) = nblen(igrid(jfld)) 651 ilen3(jfld) = 1 652 ENDIF 653 654 IF( dta%ll_hicif ) THEN 655 jfld = jfld + 1 656 blf_i(jfld) = bn_hicif 657 ibdy(jfld) = ib_bdy 658 igrid(jfld) = 1 659 ilen1(jfld) = nblen(igrid(jfld)) 660 ilen3(jfld) = 1 661 ENDIF 662 663 IF( dta%ll_hsnif ) THEN 664 jfld = jfld + 1 665 blf_i(jfld) = bn_hsnif 666 ibdy(jfld) = ib_bdy 667 igrid(jfld) = 1 668 ilen1(jfld) = nblen(igrid(jfld)) 669 ilen3(jfld) = 1 670 ENDIF 671 672 ENDIF 673 #elif defined key_lim3 674 ! sea ice 675 IF( nn_ice_lim_dta(ib_bdy) == 1 ) THEN 676 ! Test for types of ice input (lim2 or lim3) 619 IF( nn_ice_lim_dta(jbdy) == 1 ) THEN 620 ! Test for types of ice input (1cat or Xcat) 677 621 ! Build file name to find dimensions 678 622 clname=TRIM( cn_dir )//TRIM(bn_a_i%clname) … … 687 631 ! 688 632 CALL iom_open ( clname, inum ) 689 id1 = iom_varid( inum, bn_a_i%clvar, k ndims=zndims, ldstop = .FALSE. )633 id1 = iom_varid( inum, bn_a_i%clvar, kdimsz=kdimsz, kndims=kndims, ldstop = .FALSE. ) 690 634 CALL iom_close ( inum ) 691 635 692 IF ( zndims == 4 ) THEN693 ll_bdylim3 = .TRUE. ! lim3input636 IF ( kndims == 4 ) THEN 637 nice_cat = kdimsz(4) ! Xcat input 694 638 ELSE 695 ll_bdylim3 = .FALSE. ! lim2input639 nice_cat = 1 ! 1cat input 696 640 ENDIF 697 641 ! End test … … 700 644 jfld = jfld + 1 701 645 blf_i(jfld) = bn_a_i 702 ibdy(jfld) = ib_bdy646 ibdy(jfld) = jbdy 703 647 igrid(jfld) = 1 704 648 ilen1(jfld) = nblen(igrid(jfld)) 705 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF706 ENDIF 707 708 IF( dta%ll_h t_i ) THEN709 jfld = jfld + 1 710 blf_i(jfld) = bn_h t_i711 ibdy(jfld) = ib_bdy649 ilen3(jfld) = nice_cat 650 ENDIF 651 652 IF( dta%ll_h_i ) THEN 653 jfld = jfld + 1 654 blf_i(jfld) = bn_h_i 655 ibdy(jfld) = jbdy 712 656 igrid(jfld) = 1 713 657 ilen1(jfld) = nblen(igrid(jfld)) 714 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF715 ENDIF 716 717 IF( dta%ll_h t_s ) THEN718 jfld = jfld + 1 719 blf_i(jfld) = bn_ht_s720 ibdy(jfld) = ib_bdy658 ilen3(jfld) = nice_cat 659 ENDIF 660 661 IF( dta%ll_h_s ) THEN 662 jfld = jfld + 1 663 blf_i(jfld) = bn_h_s 664 ibdy(jfld) = jbdy 721 665 igrid(jfld) = 1 722 666 ilen1(jfld) = nblen(igrid(jfld)) 723 IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF667 ilen3(jfld) = nice_cat 724 668 ENDIF 725 669 … … 728 672 ! Recalculate field counts 729 673 !------------------------- 730 IF( ib_bdy == 1 ) THEN674 IF( jbdy == 1 ) THEN 731 675 nb_bdy_fld_sum = 0 732 nb_bdy_fld( ib_bdy) = jfld676 nb_bdy_fld(jbdy) = jfld 733 677 nb_bdy_fld_sum = jfld 734 678 ELSE 735 nb_bdy_fld( ib_bdy) = jfld - nb_bdy_fld_sum736 nb_bdy_fld_sum = nb_bdy_fld_sum + nb_bdy_fld( ib_bdy)737 ENDIF 738 739 dta%nread(1) = nb_bdy_fld( ib_bdy)679 nb_bdy_fld(jbdy) = jfld - nb_bdy_fld_sum 680 nb_bdy_fld_sum = nb_bdy_fld_sum + nb_bdy_fld(jbdy) 681 ENDIF 682 683 dta%nread(1) = nb_bdy_fld(jbdy) 740 684 741 685 ENDIF ! nn_dta == 1 742 ENDDO ! ib_bdy686 ENDDO ! jbdy 743 687 744 688 DO jfld = 1, nb_bdy_fld_sum … … 752 696 !------------------------------------- 753 697 jstart = 1 754 DO ib_bdy = 1, nb_bdy755 jend = jstart - 1 + nb_bdy_fld( ib_bdy)756 CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array( ib_bdy), 'bdy_dta', &698 DO jbdy = 1, nb_bdy 699 jend = jstart - 1 + nb_bdy_fld(jbdy) 700 CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array(jbdy), 'bdy_dta', & 757 701 & 'open boundary conditions', 'nambdy_dta' ) 758 702 jstart = jend + 1 … … 765 709 766 710 jfld = 0 767 DO ib_bdy=1, nb_bdy768 769 nblen => idx_bdy( ib_bdy)%nblen770 dta => dta_bdy( ib_bdy)711 DO jbdy=1, nb_bdy 712 713 nblen => idx_bdy(jbdy)%nblen 714 dta => dta_bdy(jbdy) 771 715 772 716 if(lwp) then … … 780 724 endif 781 725 782 IF ( nn_dyn2d_dta( ib_bdy) == 0 .or. nn_dyn2d_dta(ib_bdy) == 2 ) THEN726 IF ( nn_dyn2d_dta(jbdy) == 0 .or. nn_dyn2d_dta(jbdy) == 2 ) THEN 783 727 if(lwp) write(numout,*) '++++++ dta%ssh/u2d/u3d allocated space' 784 728 IF( dta%ll_ssh ) ALLOCATE( dta%ssh(nblen(1)) ) … … 786 730 IF( dta%ll_v2d ) ALLOCATE( dta%v2d(nblen(3)) ) 787 731 ENDIF 788 IF ( nn_dyn2d_dta( ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) THEN732 IF ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) THEN 789 733 IF( dta%ll_ssh ) THEN 790 734 if(lwp) write(numout,*) '++++++ dta%ssh pointing to fnow' … … 793 737 ENDIF 794 738 IF ( dta%ll_u2d ) THEN 795 IF ( ln_full_vel_array( ib_bdy) ) THEN739 IF ( ln_full_vel_array(jbdy) ) THEN 796 740 if(lwp) write(numout,*) '++++++ dta%u2d allocated space' 797 741 ALLOCATE( dta%u2d(nblen(2)) ) … … 803 747 ENDIF 804 748 IF ( dta%ll_v2d ) THEN 805 IF ( ln_full_vel_array( ib_bdy) ) THEN749 IF ( ln_full_vel_array(jbdy) ) THEN 806 750 if(lwp) write(numout,*) '++++++ dta%v2d allocated space' 807 751 ALLOCATE( dta%v2d(nblen(3)) ) … … 814 758 ENDIF 815 759 816 IF ( nn_dyn3d_dta( ib_bdy) == 0 ) THEN760 IF ( nn_dyn3d_dta(jbdy) == 0 ) THEN 817 761 if(lwp) write(numout,*) '++++++ dta%u3d/v3d allocated space' 818 IF( dta%ll_u3d ) ALLOCATE( dta_bdy( ib_bdy)%u3d(nblen(2),jpk) )819 IF( dta%ll_v3d ) ALLOCATE( dta_bdy( ib_bdy)%v3d(nblen(3),jpk) )820 ENDIF 821 IF ( nn_dyn3d_dta( ib_bdy) == 1 .or. &822 & ( ln_full_vel_array( ib_bdy) .and. ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) ) ) THEN823 IF ( dta%ll_u3d .or. ( ln_full_vel_array( ib_bdy) .and. dta%ll_u2d ) ) THEN762 IF( dta%ll_u3d ) ALLOCATE( dta_bdy(jbdy)%u3d(nblen(2),jpk) ) 763 IF( dta%ll_v3d ) ALLOCATE( dta_bdy(jbdy)%v3d(nblen(3),jpk) ) 764 ENDIF 765 IF ( nn_dyn3d_dta(jbdy) == 1 .or. & 766 & ( ln_full_vel_array(jbdy) .and. ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) ) ) THEN 767 IF ( dta%ll_u3d .or. ( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) ) THEN 824 768 if(lwp) write(numout,*) '++++++ dta%u3d pointing to fnow' 825 769 jfld = jfld + 1 826 dta_bdy( ib_bdy)%u3d => bf(jfld)%fnow(:,1,:)827 ENDIF 828 IF ( dta%ll_v3d .or. ( ln_full_vel_array( ib_bdy) .and. dta%ll_v2d ) ) THEN770 dta_bdy(jbdy)%u3d => bf(jfld)%fnow(:,1,:) 771 ENDIF 772 IF ( dta%ll_v3d .or. ( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) ) THEN 829 773 if(lwp) write(numout,*) '++++++ dta%v3d pointing to fnow' 830 774 jfld = jfld + 1 831 dta_bdy( ib_bdy)%v3d => bf(jfld)%fnow(:,1,:)832 ENDIF 833 ENDIF 834 835 IF( nn_tra_dta( ib_bdy) == 0 ) THEN775 dta_bdy(jbdy)%v3d => bf(jfld)%fnow(:,1,:) 776 ENDIF 777 ENDIF 778 779 IF( nn_tra_dta(jbdy) == 0 ) THEN 836 780 if(lwp) write(numout,*) '++++++ dta%tem/sal allocated space' 837 IF( dta%ll_tem ) ALLOCATE( dta_bdy( ib_bdy)%tem(nblen(1),jpk) )838 IF( dta%ll_sal ) ALLOCATE( dta_bdy( ib_bdy)%sal(nblen(1),jpk) )781 IF( dta%ll_tem ) ALLOCATE( dta_bdy(jbdy)%tem(nblen(1),jpk) ) 782 IF( dta%ll_sal ) ALLOCATE( dta_bdy(jbdy)%sal(nblen(1),jpk) ) 839 783 ELSE 840 784 IF( dta%ll_tem ) THEN 841 785 if(lwp) write(numout,*) '++++++ dta%tem pointing to fnow' 842 786 jfld = jfld + 1 843 dta_bdy( ib_bdy)%tem => bf(jfld)%fnow(:,1,:)787 dta_bdy(jbdy)%tem => bf(jfld)%fnow(:,1,:) 844 788 ENDIF 845 789 IF( dta%ll_sal ) THEN 846 790 if(lwp) write(numout,*) '++++++ dta%sal pointing to fnow' 847 791 jfld = jfld + 1 848 dta_bdy( ib_bdy)%sal => bf(jfld)%fnow(:,1,:)849 ENDIF 850 ENDIF 851 852 #if defined key_lim 2853 IF (cn_ice_lim( ib_bdy) /= 'none') THEN854 IF( nn_ice_lim_dta( ib_bdy) == 0 ) THEN855 ALLOCATE( dta_bdy( ib_bdy)%frld(nblen(1)) )856 ALLOCATE( dta_bdy( ib_bdy)%hicif(nblen(1)) )857 ALLOCATE( dta_bdy( ib_bdy)%hsnif(nblen(1)) )792 dta_bdy(jbdy)%sal => bf(jfld)%fnow(:,1,:) 793 ENDIF 794 ENDIF 795 796 #if defined key_lim3 797 IF (cn_ice_lim(jbdy) /= 'none') THEN 798 IF( nn_ice_lim_dta(jbdy) == 0 ) THEN 799 ALLOCATE( dta_bdy(jbdy)%a_i(nblen(1),jpl) ) 800 ALLOCATE( dta_bdy(jbdy)%h_i(nblen(1),jpl) ) 801 ALLOCATE( dta_bdy(jbdy)%h_s(nblen(1),jpl) ) 858 802 ELSE 859 jfld = jfld + 1 860 dta_bdy(ib_bdy)%frld => bf(jfld)%fnow(:,1,1) 861 jfld = jfld + 1 862 dta_bdy(ib_bdy)%hicif => bf(jfld)%fnow(:,1,1) 863 jfld = jfld + 1 864 dta_bdy(ib_bdy)%hsnif => bf(jfld)%fnow(:,1,1) 865 ENDIF 866 ENDIF 867 #elif defined key_lim3 868 IF (cn_ice_lim(ib_bdy) /= 'none') THEN 869 IF( nn_ice_lim_dta(ib_bdy) == 0 ) THEN 870 ALLOCATE( dta_bdy(ib_bdy)%a_i (nblen(1),jpl) ) 871 ALLOCATE( dta_bdy(ib_bdy)%ht_i(nblen(1),jpl) ) 872 ALLOCATE( dta_bdy(ib_bdy)%ht_s(nblen(1),jpl) ) 873 ELSE 874 IF ( ll_bdylim3 ) THEN ! case input is lim3 type 875 jfld = jfld + 1 876 dta_bdy(ib_bdy)%a_i => bf(jfld)%fnow(:,1,:) 877 jfld = jfld + 1 878 dta_bdy(ib_bdy)%ht_i => bf(jfld)%fnow(:,1,:) 879 jfld = jfld + 1 880 dta_bdy(ib_bdy)%ht_s => bf(jfld)%fnow(:,1,:) 881 ELSE ! case input is lim2 type 803 IF ( nice_cat == jpl ) THEN ! case input cat = jpl 804 jfld = jfld + 1 805 dta_bdy(jbdy)%a_i => bf(jfld)%fnow(:,1,:) 806 jfld = jfld + 1 807 dta_bdy(jbdy)%h_i => bf(jfld)%fnow(:,1,:) 808 jfld = jfld + 1 809 dta_bdy(jbdy)%h_s => bf(jfld)%fnow(:,1,:) 810 ELSE ! case input cat = 1 OR (/=1 and /=jpl) 882 811 jfld_ai = jfld + 1 883 812 jfld_hti = jfld + 2 884 813 jfld_hts = jfld + 3 885 814 jfld = jfld + 3 886 ALLOCATE( dta_bdy( ib_bdy)%a_i(nblen(1),jpl) )887 ALLOCATE( dta_bdy( ib_bdy)%ht_i(nblen(1),jpl) )888 ALLOCATE( dta_bdy( ib_bdy)%ht_s(nblen(1),jpl) )889 dta_bdy( ib_bdy)%a_i(:,:) = 0._wp890 dta_bdy( ib_bdy)%ht_i(:,:) = 0._wp891 dta_bdy( ib_bdy)%ht_s(:,:) = 0._wp815 ALLOCATE( dta_bdy(jbdy)%a_i(nblen(1),jpl) ) 816 ALLOCATE( dta_bdy(jbdy)%h_i(nblen(1),jpl) ) 817 ALLOCATE( dta_bdy(jbdy)%h_s(nblen(1),jpl) ) 818 dta_bdy(jbdy)%a_i(:,:) = 0._wp 819 dta_bdy(jbdy)%h_i(:,:) = 0._wp 820 dta_bdy(jbdy)%h_s(:,:) = 0._wp 892 821 ENDIF 893 822 … … 896 825 #endif 897 826 ! 898 END DO ! ib_bdy827 END DO ! jbdy 899 828 ! 900 829 IF( nn_timing == 1 ) CALL timing_stop('bdy_dta_init')
Note: See TracChangeset
for help on using the changeset viewer.