Changeset 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
- Timestamp:
- 2010-12-27T18:33:53+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
- Property svn:executable deleted
r1715 r2528 6 6 !! History : 1.0 ! 2005-01 (J. Chanut, A. Sellar) Original code 7 7 !! - ! 2007-01 (D. Storkey) Update to use IOM module 8 !! - ! 2007-07 (D. Storkey) add bdy_dta_ bt8 !! - ! 2007-07 (D. Storkey) add bdy_dta_fla 9 9 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 10 !! 3.3 ! 2010-09 (E.O'Dea) modifications for Shelf configurations 11 !! 3.3 ! 2010-09 (D.Storkey) add ice boundary conditions 10 12 !!---------------------------------------------------------------------- 11 13 #if defined key_bdy … … 13 15 !! 'key_bdy' Unstructured Open Boundary Conditions 14 16 !!---------------------------------------------------------------------- 15 !! bdy_dta : read u, v, t, s data along open boundaries 16 !! bdy_dta_bt : read depth-mean velocities and elevation along open 17 !! boundaries 17 !! bdy_dta_frs : read u, v, t, s data along open boundaries 18 !! bdy_dta_fla : read depth-mean velocities and elevation along open boundaries 18 19 !!---------------------------------------------------------------------- 19 20 USE oce ! ocean dynamics and tracers … … 25 26 USE ioipsl 26 27 USE in_out_manager ! I/O logical units 28 #if defined key_lim2 29 USE ice_2 30 #endif 27 31 28 32 IMPLICIT NONE 29 33 PRIVATE 30 34 31 PUBLIC bdy_dta ! routines called by step.F90 32 PUBLIC bdy_dta_bt 33 34 INTEGER :: numbdyt, numbdyu, numbdyv !: logical units for T-, U-, & V-points data file, resp. 35 INTEGER :: ntimes_bdy !: exact number of time dumps in data files 36 INTEGER :: nbdy_b, nbdy_a !: record of bdy data file for before and after model time step 37 INTEGER :: numbdyt_bt, numbdyu_bt, numbdyv_bt !: logical unit for T-, U- & V-points data file, resp. 38 INTEGER :: ntimes_bdy_bt !: exact number of time dumps in data files 39 INTEGER :: nbdy_b_bt, nbdy_a_bt !: record of bdy data file for before and after model time step 40 41 INTEGER, DIMENSION (jpbtime) :: istep, istep_bt !: time array in seconds in each data file 42 43 REAL(wp) :: zoffset !: time offset between time origin in file & start time of model run 44 45 REAL(wp), DIMENSION(jpbdim,jpk,2) :: tbdydta, sbdydta !: time interpolated values of T and S bdy data 46 REAL(wp), DIMENSION(jpbdim,jpk,2) :: ubdydta, vbdydta !: time interpolated values of U and V bdy data 47 REAL(wp), DIMENSION(jpbdim,2) :: ubtbdydta, vbtbdydta !: Arrays used for time interpolation of bdy data 48 REAL(wp), DIMENSION(jpbdim,2) :: sshbdydta !: bdy data of ssh 35 PUBLIC bdy_dta_frs ! routines called by step.F90 36 PUBLIC bdy_dta_fla 37 38 INTEGER :: numbdyt, numbdyu, numbdyv ! logical units for T-, U-, & V-points data file, resp. 39 INTEGER :: ntimes_bdy ! exact number of time dumps in data files 40 INTEGER :: nbdy_b, nbdy_a ! record of bdy data file for before and after time step 41 INTEGER :: numbdyt_bt, numbdyu_bt, numbdyv_bt ! logical unit for T-, U- & V-points data file, resp. 42 INTEGER :: ntimes_bdy_bt ! exact number of time dumps in data files 43 INTEGER :: nbdy_b_bt, nbdy_a_bt ! record of bdy data file for before and after time step 44 45 INTEGER, DIMENSION (jpbtime) :: istep, istep_bt ! time array in seconds in each data file 46 47 REAL(wp) :: zoffset ! time offset between time origin in file & start time of model run 48 49 REAL(wp), DIMENSION(jpbdim,jpk,2) :: tbdydta, sbdydta ! time interpolated values of T and S bdy data 50 REAL(wp), DIMENSION(jpbdim,jpk,2) :: ubdydta, vbdydta ! time interpolated values of U and V bdy data 51 REAL(wp), DIMENSION(jpbdim,2) :: ubtbdydta, vbtbdydta ! Arrays used for time interpolation of bdy data 52 REAL(wp), DIMENSION(jpbdim,2) :: sshbdydta ! bdy data of ssh 53 54 #if defined key_lim2 55 REAL(wp), DIMENSION(jpbdim,2) :: frld_bdydta ! } 56 REAL(wp), DIMENSION(jpbdim,2) :: hicif_bdydta ! } Arrays used for time interp. of ice bdy data 57 REAL(wp), DIMENSION(jpbdim,2) :: hsnif_bdydta ! } 58 #endif 49 59 50 60 !!---------------------------------------------------------------------- 51 !! NEMO/OPA 3. 0 , LOCEAN-IPSL (2008)61 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 52 62 !! $Id$ 53 !! Software governed by the CeCILL licence ( modipsl/doc/NEMO_CeCILL.txt)63 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 54 64 !!---------------------------------------------------------------------- 55 56 65 CONTAINS 57 66 58 SUBROUTINE bdy_dta ( kt )67 SUBROUTINE bdy_dta_frs( kt ) 59 68 !!---------------------------------------------------------------------- 60 !! *** SUBROUTINE bdy_dta ***69 !! *** SUBROUTINE bdy_dta_frs *** 61 70 !! 62 71 !! ** Purpose : Read unstructured boundary data for FRS condition. … … 67 76 !! the file. If so read it in. Time interpolate. 68 77 !!---------------------------------------------------------------------- 69 INTEGER, INTENT( in ) :: kt 78 INTEGER, INTENT( in ) :: kt ! ocean time-step index (for timesplitting option, otherwise zero) 70 79 !! 71 80 CHARACTER(LEN=80), DIMENSION(3) :: clfile ! names of input files … … 79 88 INTEGER :: itimer, totime 80 89 INTEGER :: ii, ij ! array addresses 81 INTEGER :: ipi, ipj, ipk, inum ! temporaryintegers (NetCDF read)90 INTEGER :: ipi, ipj, ipk, inum ! local integers (NetCDF read) 82 91 INTEGER :: iyear0, imonth0, iday0 83 92 INTEGER :: ihours0, iminutes0, isec0 … … 91 100 !!--------------------------------------------------------------------------- 92 101 93 IF( ln_bdy_dyn_frs .OR. ln_bdy_tra_frs ) THEN ! If these are both false then this routine 94 ! does nothing. 102 103 IF( ln_dyn_frs .OR. ln_tra_frs & 104 & .OR. ln_ice_frs ) THEN ! If these are both false then this routine does nothing 95 105 96 106 ! -------------------- ! … … 102 112 ! Some time variables for monthly climatological forcing: 103 113 ! ******************************************************* 104 !!gm here use directely daymod variables 114 115 !!gm here use directely daymod calendar variables 105 116 106 117 iman = INT( raamo ) ! Number of months in a year … … 121 132 ! !-------------------! 122 133 istep(:) = 0 123 nbdy_b 124 nbdy_a 134 nbdy_b = 0 135 nbdy_a = 0 125 136 126 137 ! Get time information from bdy data file … … 128 139 129 140 IF(lwp) WRITE(numout,*) 130 IF(lwp) WRITE(numout,*) 'bdy_dta : Initialize unstructured boundary data'141 IF(lwp) WRITE(numout,*) 'bdy_dta_frs : Initialize unstructured boundary data' 131 142 IF(lwp) WRITE(numout,*) '~~~~~~~' 132 143 133 IF ( n bdy_dta== 0 ) THEN144 IF ( nn_dtactl == 0 ) THEN 134 145 ! 135 146 IF(lwp) WRITE(numout,*) ' Bdy data are taken from initial conditions' 136 147 ! 137 ELSEIF (n bdy_dta== 1) THEN148 ELSEIF (nn_dtactl == 1) THEN 138 149 ! 139 150 IF(lwp) WRITE(numout,*) ' Bdy data are read in netcdf files' … … 144 155 ! ! necessary time dumps in file are included 145 156 ! 146 clfile(1) = filbdy_data_T147 clfile(2) = filbdy_data_U148 clfile(3) = filbdy_data_V157 clfile(1) = cn_dta_frs_T 158 clfile(2) = cn_dta_frs_U 159 clfile(3) = cn_dta_frs_V 149 160 ! 150 161 ! how many files are we to read in? 151 162 igrd_start = 1 152 163 igrd_end = 3 153 IF(.NOT. ln_bdy_tra_frs .AND. .NOT. ln_bdy_ice_frs) THEN 154 ! No T-grid file. 164 IF(.NOT. ln_tra_frs .AND. .NOT. ln_ice_frs) THEN ! No T-grid file. 155 165 igrd_start = 2 156 ELSEIF ( .NOT. ln_bdy_dyn_frs ) THEN 157 ! No U-grid or V-grid file. 166 ELSEIF ( .NOT. ln_dyn_frs ) THEN ! No U-grid or V-grid file. 158 167 igrd_end = 1 159 168 ENDIF … … 165 174 166 175 SELECT CASE( igrd ) 167 CASE (1) 168 numbdyt = inum 169 CASE (2) 170 numbdyu = inum 171 CASE (3) 172 numbdyv = inum 176 CASE (1) ; numbdyt = inum 177 CASE (2) ; numbdyu = inum 178 CASE (3) ; numbdyv = inum 173 179 END SELECT 174 180 … … 196 202 IF(lwp) WRITE(numout,*) 'offset: ',zoffset 197 203 IF(lwp) WRITE(numout,*) 'totime: ',totime 198 IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr 204 IF(lwp) WRITE(numout,*) 'zstepr: ',zstepr(1:ntimes_bdy) 199 205 200 206 ! Check that there are not too many times in the file. … … 205 211 206 212 ! Check that time array increases: 207 208 213 it = 1 209 DO WHILE( zstepr(it+1) > zstepr(it) .AND. it /= ntimes_bdy - 1 ) 210 it = it + 1214 DO WHILE( zstepr(it+1) > zstepr(it) .AND. it /= ntimes_bdy - 1 ) 215 it = it + 1 211 216 END DO 212 213 IF( it .NE.ntimes_bdy-1 .AND. ntimes_bdy > 1 ) THEN217 ! 218 IF( it /= ntimes_bdy-1 .AND. ntimes_bdy > 1 ) THEN 214 219 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 215 220 CALL ctl_stop( 'Time array in unstructured boundary data files', & … … 227 232 END IF 228 233 ! 229 IF ( igrd == 1 ) THEN 230 ntimes_bdyt = ntimes_bdy 231 zoffsett = zoffset 232 istept(:) = INT( zstepr(:) + zoffset ) 233 ELSEIF(igrd == 2 ) THEN 234 ntimes_bdyu = ntimes_bdy 235 zoffsetu = zoffset 236 istepu(:) = INT( zstepr(:) + zoffset ) 237 ELSEIF(igrd == 3 ) THEN 238 ntimes_bdyv = ntimes_bdy 239 zoffsetv = zoffset 240 istepv(:) = INT( zstepr(:) + zoffset ) 241 ENDIF 234 SELECT CASE( igrd ) 235 CASE (1) 236 ntimes_bdyt = ntimes_bdy 237 zoffsett = zoffset 238 istept(:) = INT( zstepr(:) + zoffset ) 239 numbdyt = inum 240 CASE (2) 241 ntimes_bdyu = ntimes_bdy 242 zoffsetu = zoffset 243 istepu(:) = INT( zstepr(:) + zoffset ) 244 numbdyu = inum 245 CASE (3) 246 ntimes_bdyv = ntimes_bdy 247 zoffsetv = zoffset 248 istepv(:) = INT( zstepr(:) + zoffset ) 249 numbdyv = inum 250 END SELECT 242 251 ! 243 252 END DO ! end loop over T, U & V grid … … 259 268 ENDIF 260 269 261 IF( igrd_start == 1 ) THEN 262 istep(:) = istept(:) 263 ELSE 264 istep(:) = istepu(:) 270 IF( igrd_start == 1 ) THEN ; istep(:) = istept(:) 271 ELSE ; istep(:) = istepu(:) 265 272 ENDIF 266 273 267 274 ! Check number of time dumps: 268 IF( ntimes_bdy == 1 .AND. .NOT. ln_ bdy_clim ) THEN275 IF( ntimes_bdy == 1 .AND. .NOT. ln_clim ) THEN 269 276 CALL ctl_stop( 'There is only one time dump in data files', & 270 & 'Choose ln_ bdy_clim=.true. in namelist for constant bdy forcing.' )277 & 'Choose ln_clim=.true. in namelist for constant bdy forcing.' ) 271 278 ENDIF 272 279 273 IF( ln_ bdy_clim ) THEN280 IF( ln_clim ) THEN 274 281 IF( ntimes_bdy /= 1 .AND. ntimes_bdy /= 12 ) THEN 275 CALL ctl_stop( 'For climatological boundary forcing (ln_ bdy_clim=.true.),', &282 CALL ctl_stop( 'For climatological boundary forcing (ln_clim=.true.),', & 276 283 & 'bdy data files must contain 1 or 12 time dumps.' ) 277 284 ELSEIF( ntimes_bdy == 1 ) THEN … … 287 294 it = 1 288 295 DO WHILE( istep(it+1) <= 0 .AND. it <= ntimes_bdy - 1 ) 289 it = it + 1296 it = it + 1 290 297 END DO 291 298 nbdy_b = it 292 299 ! 293 WRITE(numout,*) 'Time offset is ',zoffset294 WRITE(numout,*) 'First record to read is ',nbdy_b295 296 ENDIF ! endif (n bdy_dta== 1)297 298 299 ! 1.2 Read first record in file if necessary (ie if n bdy_dta== 1)300 IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 301 IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b 302 303 ENDIF ! endif (nn_dtactl == 1) 304 305 306 ! 1.2 Read first record in file if necessary (ie if nn_dtactl == 1) 300 307 ! ***************************************************************** 301 308 302 IF( n bdy_dta == 0) THEN ! boundary data arrays are filled with initial conditions309 IF( nn_dtactl == 0 ) THEN ! boundary data arrays are filled with initial conditions 303 310 ! 304 IF (ln_ bdy_tra_frs) THEN305 igrd = 1 ! T-points data306 DO ib = 1, nblen(igrd)307 ii = nbi(ib,igrd)308 ij = nbj(ib,igrd)309 DO ik = 1, jpkm1310 tbdy(ib,ik) = tn(ii, ij,ik)311 sbdy(ib,ik) = sn(ii, ij,ik)312 ENDDO313 END DO311 IF (ln_tra_frs) THEN 312 igrd = 1 ! T-points data 313 DO ib = 1, nblen(igrd) 314 ii = nbi(ib,igrd) 315 ij = nbj(ib,igrd) 316 DO ik = 1, jpkm1 317 tbdy(ib,ik) = tn(ii,ij,ik) 318 sbdy(ib,ik) = sn(ii,ij,ik) 319 END DO 320 END DO 314 321 ENDIF 315 322 316 IF(ln_ bdy_dyn_frs) THEN317 igrd = 2 ! U-points data318 DO ib = 1, nblen(igrd)319 ii = nbi(ib,igrd)320 ij = nbj(ib,igrd)321 DO ik = 1, jpkm1322 ubdy(ib,ik) = un(ii, ij, ik)323 ENDDO324 END DO325 326 igrd = 3 ! V-points data327 DO ib = 1, nblen(igrd)328 ii = nbi(ib,igrd)329 ij = nbj(ib,igrd)330 DO ik = 1, jpkm1331 vbdy(ib,ik) = vn(ii, ij, ik)332 ENDDO333 END DO323 IF(ln_dyn_frs) THEN 324 igrd = 2 ! U-points data 325 DO ib = 1, nblen(igrd) 326 ii = nbi(ib,igrd) 327 ij = nbj(ib,igrd) 328 DO ik = 1, jpkm1 329 ubdy(ib,ik) = un(ii, ij, ik) 330 END DO 331 END DO 332 ! 333 igrd = 3 ! V-points data 334 DO ib = 1, nblen(igrd) 335 ii = nbi(ib,igrd) 336 ij = nbj(ib,igrd) 337 DO ik = 1, jpkm1 338 vbdy(ib,ik) = vn(ii, ij, ik) 339 END DO 340 END DO 334 341 ENDIF 335 342 ! 336 ELSEIF( nbdy_dta == 1 ) THEN ! Set first record in the climatological case: 343 #if defined key_lim2 344 IF( ln_ice_frs ) THEN 345 igrd = 1 ! T-points data 346 DO ib = 1, nblen(igrd) 347 frld_bdy (ib) = frld(nbi(ib,igrd), nbj(ib,igrd)) 348 hicif_bdy(ib) = hicif(nbi(ib,igrd), nbj(ib,igrd)) 349 hsnif_bdy(ib) = hsnif(nbi(ib,igrd), nbj(ib,igrd)) 350 END DO 351 ENDIF 352 #endif 353 ELSEIF( nn_dtactl == 1 ) THEN ! Set first record in the climatological case: 337 354 ! 338 IF( ln_ bdy_clim .AND. ntimes_bdy == 1 ) THEN355 IF( ln_clim .AND. ntimes_bdy == 1 ) THEN 339 356 nbdy_a = 1 340 ELSEIF( ln_ bdy_clim .AND. ntimes_bdy == iman ) THEN357 ELSEIF( ln_clim .AND. ntimes_bdy == iman ) THEN 341 358 nbdy_b = 0 342 359 nbdy_a = imois … … 351 368 ipi = nblendta(igrd) 352 369 353 IF(ln_bdy_tra_frs) THEN 370 IF(ln_tra_frs) THEN 371 ! 354 372 igrd = 1 ! Temperature 355 373 IF( nblendta(igrd) <= 0 ) THEN … … 357 375 nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 358 376 ENDIF 359 WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd)377 IF(lwp) WRITE(numout,*) 'Dim size for votemper is ', nblendta(igrd) 360 378 ipi = nblendta(igrd) 361 379 CALL iom_get ( numbdyt, jpdom_unknown, 'votemper', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) 362 380 ! 363 381 DO ib = 1, nblen(igrd) 364 382 DO ik = 1, jpkm1 … … 372 390 nblendta(igrd) = iom_file(numbdyt)%dimsz(1,idvar) 373 391 ENDIF 374 WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd)392 IF(lwp) WRITE(numout,*) 'Dim size for vosaline is ', nblendta(igrd) 375 393 ipi = nblendta(igrd) 376 394 CALL iom_get ( numbdyt, jpdom_unknown, 'vosaline', zdta(1:ipi,1:ipj,1:ipk), nbdy_a ) 377 395 ! 378 396 DO ib = 1, nblen(igrd) 379 397 DO ik = 1, jpkm1 … … 381 399 END DO 382 400 END DO 383 ENDIF ! ln_ bdy_tra_frs401 ENDIF ! ln_tra_frs 384 402 385 IF( ln_bdy_dyn_frs) THEN386 403 IF( ln_dyn_frs ) THEN 404 ! 387 405 igrd = 2 ! u-velocity 388 406 IF ( nblendta(igrd) .le. 0 ) THEN … … 390 408 nblendta(igrd) = iom_file(numbdyu)%dimsz(1,idvar) 391 409 ENDIF 392 WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd)410 IF(lwp) WRITE(numout,*) 'Dim size for vozocrtx is ', nblendta(igrd) 393 411 ipi = nblendta(igrd) 394 412 CALL iom_get ( numbdyu, jpdom_unknown,'vozocrtx',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) … … 404 422 nblendta(igrd) = iom_file(numbdyv)%dimsz(1,idvar) 405 423 ENDIF 406 WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd)424 IF(lwp) WRITE(numout,*) 'Dim size for vomecrty is ', nblendta(igrd) 407 425 ipi = nblendta(igrd) 408 426 CALL iom_get ( numbdyv, jpdom_unknown,'vomecrty',zdta(1:ipi,1:ipj,1:ipk),nbdy_a ) … … 412 430 END DO 413 431 END DO 414 ENDIF ! ln_bdy_dyn_frs 415 416 417 IF ((.NOT.ln_bdy_clim) .AND. (istep(1) > 0)) THEN 418 ! First data time is after start of run 419 ! Put first value in both time levels 420 nbdy_b = nbdy_a 421 IF(ln_bdy_tra_frs) THEN 432 ENDIF ! ln_dyn_frs 433 434 #if defined key_lim2 435 IF( ln_ice_frs ) THEN 436 ! 437 igrd=1 ! leads fraction 438 IF(lwp) WRITE(numout,*) 'Dim size for ildsconc is ',nblendta(igrd) 439 ipi=nblendta(igrd) 440 CALL iom_get ( numbdyt, jpdom_unknown,'ildsconc',zdta(1:ipi,:,1),nbdy_a ) 441 DO ib=1, nblen(igrd) 442 frld_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 443 END DO 444 ! 445 igrd=1 ! ice thickness 446 IF(lwp) WRITE(numout,*) 'Dim size for iicethic is ',nblendta(igrd) 447 ipi=nblendta(igrd) 448 CALL iom_get ( numbdyt, jpdom_unknown,'iicethic',zdta(1:ipi,:,1),nbdy_a ) 449 DO ib=1, nblen(igrd) 450 hicif_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 451 END DO 452 ! 453 igrd=1 ! snow thickness 454 IF(lwp) WRITE(numout,*) 'Dim size for isnowthi is ',nblendta(igrd) 455 ipi=nblendta(igrd) 456 CALL iom_get ( numbdyt, jpdom_unknown,'isnowthi',zdta(1:ipi,:,1),nbdy_a ) 457 DO ib=1, nblen(igrd) 458 hsnif_bdydta(ib,2) = zdta(nbmap(ib,igrd),1,1) 459 END DO 460 ENDIF ! just if ln_ice_frs is set 461 #endif 462 463 IF( .NOT.ln_clim .AND. istep(1) > 0 ) THEN ! First data time is after start of run 464 nbdy_b = nbdy_a ! Put first value in both time levels 465 IF( ln_tra_frs ) THEN 422 466 tbdydta(:,:,1) = tbdydta(:,:,2) 423 467 sbdydta(:,:,1) = sbdydta(:,:,2) 424 468 ENDIF 425 IF( ln_bdy_dyn_frs) THEN469 IF( ln_dyn_frs ) THEN 426 470 ubdydta(:,:,1) = ubdydta(:,:,2) 427 471 vbdydta(:,:,1) = vbdydta(:,:,2) 428 472 ENDIF 473 #if defined key_lim2 474 IF( ln_ice_frs ) THEN 475 frld_bdydta (:,1) = frld_bdydta(:,2) 476 hicif_bdydta(:,1) = hicif_bdydta(:,2) 477 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 478 ENDIF 479 #endif 429 480 END IF 430 431 END IF ! nbdy_dta== 0/1481 ! 482 END IF ! nn_dtactl == 0/1 432 483 433 484 ! In the case of constant boundary forcing fill bdy arrays once for all 434 IF ((ln_bdy_clim).AND.(ntimes_bdy==1)) THEN435 IF( ln_bdy_tra_frs) THEN436 tbdy (:,:) = tbdydta (:,:,2)437 sbdy (:,:) = sbdydta (:,:,2)485 IF( ln_clim .AND. ntimes_bdy == 1 ) THEN 486 IF( ln_tra_frs ) THEN 487 tbdy (:,:) = tbdydta (:,:,2) 488 sbdy (:,:) = sbdydta (:,:,2) 438 489 ENDIF 439 IF( ln_bdy_dyn_frs) THEN440 ubdy (:,:) = ubdydta (:,:,2)441 vbdy (:,:) = vbdydta (:,:,2)490 IF( ln_dyn_frs) THEN 491 ubdy (:,:) = ubdydta (:,:,2) 492 vbdy (:,:) = vbdydta (:,:,2) 442 493 ENDIF 443 444 IF(ln_bdy_tra_frs .or. ln_bdy_ice_frs) CALL iom_close( numbdyt ) 445 IF(ln_bdy_dyn_frs) CALL iom_close( numbdyu ) 446 IF(ln_bdy_dyn_frs) CALL iom_close( numbdyv ) 494 #if defined key_lim2 495 IF( ln_ice_frs ) THEN 496 frld_bdy (:) = frld_bdydta (:,2) 497 hicif_bdy(:) = hicif_bdydta(:,2) 498 hsnif_bdy(:) = hsnif_bdydta(:,2) 499 ENDIF 500 #endif 501 502 IF( ln_tra_frs .OR. ln_ice_frs) CALL iom_close( numbdyt ) 503 IF( ln_dyn_frs ) CALL iom_close( numbdyu ) 504 IF( ln_dyn_frs ) CALL iom_close( numbdyv ) 447 505 END IF 448 506 ! 449 507 ENDIF ! End if nit000 450 508 451 509 452 510 ! !---------------------! 453 ! ! at each time step ! 454 ! !---------------------! 455 456 IF( nbdy_dta == 1 .AND. ntimes_bdy > 1 ) THEN 457 ! 511 IF( nn_dtactl == 1 .AND. ntimes_bdy > 1 ) THEN ! at each time step ! 512 ! !---------------------! 458 513 ! Read one more record if necessary 459 514 !********************************** 460 515 461 IF( ln_bdy_clim .AND. imois /= nbdy_b ) THEN ! remember that nbdy_b=0 for kt=nit000 462 nbdy_b = imois 463 nbdy_a = imois + 1 464 nbdy_b = MOD( nbdy_b, iman ) ; IF( nbdy_b == 0 ) nbdy_b = iman 465 nbdy_a = MOD( nbdy_a, iman ) ; IF( nbdy_a == 0 ) nbdy_a = iman 466 lect=.true. 467 ELSEIF( .NOT.ln_bdy_clim .AND. itimer >= istep(nbdy_a) ) THEN 468 469 IF ( nbdy_a < ntimes_bdy ) THEN 470 nbdy_b = nbdy_a 471 nbdy_a = nbdy_a + 1 472 lect =.true. 473 ELSE 474 ! We have reached the end of the file 475 ! put the last data time into both time levels 476 nbdy_b = nbdy_a 477 IF(ln_bdy_tra_frs) THEN 478 tbdydta(:,:,1) = tbdydta(:,:,2) 479 sbdydta(:,:,1) = sbdydta(:,:,2) 480 ENDIF 481 IF(ln_bdy_dyn_frs) THEN 482 ubdydta(:,:,1) = ubdydta(:,:,2) 483 vbdydta(:,:,1) = vbdydta(:,:,2) 484 ENDIF 516 IF( ln_clim .AND. imois /= nbdy_b ) THEN ! remember that nbdy_b=0 for kt=nit000 517 nbdy_b = imois 518 nbdy_a = imois + 1 519 nbdy_b = MOD( nbdy_b, iman ) ; IF( nbdy_b == 0 ) nbdy_b = iman 520 nbdy_a = MOD( nbdy_a, iman ) ; IF( nbdy_a == 0 ) nbdy_a = iman 521 lect=.true. 522 ELSEIF( .NOT.ln_clim .AND. itimer >= istep(nbdy_a) ) THEN 523 524 IF( nbdy_a < ntimes_bdy ) THEN 525 nbdy_b = nbdy_a 526 nbdy_a = nbdy_a + 1 527 lect =.true. 528 ELSE 529 ! We have reached the end of the file 530 ! put the last data time into both time levels 531 nbdy_b = nbdy_a 532 IF(ln_tra_frs) THEN 533 tbdydta(:,:,1) = tbdydta(:,:,2) 534 sbdydta(:,:,1) = sbdydta(:,:,2) 535 ENDIF 536 IF(ln_dyn_frs) THEN 537 ubdydta(:,:,1) = ubdydta(:,:,2) 538 vbdydta(:,:,1) = vbdydta(:,:,2) 539 ENDIF 540 #if defined key_lim2 541 IF(ln_ice_frs) THEN 542 frld_bdydta (:,1) = frld_bdydta (:,2) 543 hicif_bdydta(:,1) = hicif_bdydta(:,2) 544 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 545 ENDIF 546 #endif 485 547 END IF ! nbdy_a < ntimes_bdy 486 548 ! 487 549 END IF 488 550 489 IF( lect ) THEN 490 ! Swap arrays 491 IF(ln_bdy_tra_frs) THEN 551 IF( lect ) THEN ! Swap arrays 552 IF( ln_tra_frs ) THEN 492 553 tbdydta(:,:,1) = tbdydta(:,:,2) 493 554 sbdydta(:,:,1) = sbdydta(:,:,2) 494 555 ENDIF 495 IF( ln_bdy_dyn_frs) THEN556 IF( ln_dyn_frs ) THEN 496 557 ubdydta(:,:,1) = ubdydta(:,:,2) 497 558 vbdydta(:,:,1) = vbdydta(:,:,2) 498 559 ENDIF 499 560 #if defined key_lim2 561 IF( ln_ice_frs ) THEN 562 frld_bdydta (:,1) = frld_bdydta (:,2) 563 hicif_bdydta(:,1) = hicif_bdydta(:,2) 564 hsnif_bdydta(:,1) = hsnif_bdydta(:,2) 565 ENDIF 566 #endif 500 567 ! read another set 501 568 ipj = 1 502 569 ipk = jpk 503 570 504 IF( ln_bdy_tra_frs) THEN571 IF( ln_tra_frs ) THEN 505 572 ! 506 573 igrd = 1 ! temperature … … 521 588 END DO 522 589 END DO 523 ENDIF ! ln_ bdy_tra_frs524 525 IF(ln_ bdy_dyn_frs) THEN590 ENDIF ! ln_tra_frs 591 592 IF(ln_dyn_frs) THEN 526 593 ! 527 594 igrd = 2 ! u-velocity … … 542 609 END DO 543 610 END DO 544 ENDIF ! ln_bdy_dyn_frs 545 611 ENDIF ! ln_dyn_frs 546 612 ! 547 IF(lwp) WRITE(numout,*) 'bdy_dta : first record file used nbdy_b ',nbdy_b 613 #if defined key_lim2 614 IF(ln_ice_frs) THEN 615 ! 616 igrd = 1 ! ice concentration 617 ipi=nblendta(igrd) 618 CALL iom_get ( numbdyt, jpdom_unknown,'ildsconc',zdta(1:ipi,:,1),nbdy_a ) 619 DO ib=1, nblen(igrd) 620 frld_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 621 END DO 622 ! 623 igrd=1 ! ice thickness 624 ipi=nblendta(igrd) 625 CALL iom_get ( numbdyt, jpdom_unknown,'iicethic',zdta(1:ipi,:,1),nbdy_a ) 626 DO ib=1, nblen(igrd) 627 hicif_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 628 END DO 629 ! 630 igrd=1 ! snow thickness 631 ipi=nblendta(igrd) 632 CALL iom_get ( numbdyt, jpdom_unknown,'isnowthi',zdta(1:ipi,:,1),nbdy_a ) 633 DO ib=1, nblen(igrd) 634 hsnif_bdydta(ib,2) = zdta( nbmap(ib,igrd), 1, 1 ) 635 END DO 636 ENDIF ! ln_ice_frs 637 #endif 638 ! 639 IF(lwp) WRITE(numout,*) 'bdy_dta_frs : first record file used nbdy_b ',nbdy_b 548 640 IF(lwp) WRITE(numout,*) '~~~~~~~~ last record file used nbdy_a ',nbdy_a 549 IF (.NOT.ln_ bdy_clim) THEN641 IF (.NOT.ln_clim) THEN 550 642 IF(lwp) WRITE(numout,*) 'first record time (s): ', istep(nbdy_b) 551 643 IF(lwp) WRITE(numout,*) 'model time (s) : ', itimer … … 559 651 ! ******************** 560 652 ! 561 IF( ln_bdy_clim ) THEN ; zxy = REAL( nday , wp ) / REAL( nmonth_len(nbdy_b), wp ) + 0.5 - i15 562 ELSE ; zxy = REAL( istep(nbdy_b) - itimer, wp ) / REAL( istep(nbdy_b) - istep(nbdy_a), wp ) 653 IF( ln_clim ) THEN ; zxy = REAL( nday ) / REAL( nmonth_len(nbdy_b) ) + 0.5 - i15 654 ELSEIF( istep(nbdy_b) == istep(nbdy_a) ) THEN 655 zxy = 0.0_wp 656 ELSE ; zxy = REAL( istep(nbdy_b) - itimer ) / REAL( istep(nbdy_b) - istep(nbdy_a) ) 563 657 END IF 564 658 565 IF(ln_ bdy_tra_frs) THEN659 IF(ln_tra_frs) THEN 566 660 igrd = 1 ! temperature & salinity 567 661 DO ib = 1, nblen(igrd) … … 573 667 ENDIF 574 668 575 IF(ln_ bdy_dyn_frs) THEN669 IF(ln_dyn_frs) THEN 576 670 igrd = 2 ! u-velocity 577 671 DO ib = 1, nblen(igrd) … … 589 683 ENDIF 590 684 591 END IF !end if ((nbdy_dta==1).AND.(ntimes_bdy>1)) 685 #if defined key_lim2 686 IF(ln_ice_frs) THEN 687 igrd=1 688 DO ib=1, nblen(igrd) 689 frld_bdy(ib) = zxy * frld_bdydta(ib,2) + (1.-zxy) * frld_bdydta(ib,1) 690 hicif_bdy(ib) = zxy * hicif_bdydta(ib,2) + (1.-zxy) * hicif_bdydta(ib,1) 691 hsnif_bdy(ib) = zxy * hsnif_bdydta(ib,2) + (1.-zxy) * hsnif_bdydta(ib,1) 692 END DO 693 ENDIF ! just if ln_ice_frs is true 694 #endif 695 696 END IF !end if ((nn_dtactl==1).AND.(ntimes_bdy>1)) 592 697 593 698 … … 596 701 ! !---------------------! 597 702 IF( kt == nitend ) THEN 598 IF(ln_ bdy_tra_frs .or. ln_bdy_ice_frs) CALL iom_close( numbdyt ) ! Closing of the 3 files599 IF(ln_ bdy_dyn_frs) CALL iom_close( numbdyu )600 IF(ln_ bdy_dyn_frs) CALL iom_close( numbdyv )703 IF(ln_tra_frs .or. ln_ice_frs) CALL iom_close( numbdyt ) ! Closing of the 3 files 704 IF(ln_dyn_frs) CALL iom_close( numbdyu ) 705 IF(ln_dyn_frs) CALL iom_close( numbdyv ) 601 706 ENDIF 602 707 ! 603 ENDIF ! ln_ bdy_dyn_frs .OR. ln_bdy_tra_frs604 605 END SUBROUTINE bdy_dta 606 607 608 SUBROUTINE bdy_dta_ bt( kt, jit)708 ENDIF ! ln_dyn_frs .OR. ln_tra_frs 709 ! 710 END SUBROUTINE bdy_dta_frs 711 712 713 SUBROUTINE bdy_dta_fla( kt, jit, icycl ) 609 714 !!--------------------------------------------------------------------------- 610 !! *** SUBROUTINE bdy_dta_ bt***715 !! *** SUBROUTINE bdy_dta_fla *** 611 716 !! 612 717 !! ** Purpose : Read unstructured boundary data for Flather condition … … 620 725 INTEGER, INTENT( in ) :: kt ! ocean time-step index 621 726 INTEGER, INTENT( in ) :: jit ! barotropic time step index 727 INTEGER, INTENT( in ) :: icycl ! number of cycles need for final file close 622 728 ! ! (for timesplitting option, otherwise zero) 623 729 !! … … 639 745 REAL(wp), DIMENSION(jpbtime) :: zstepr ! REAL time array from data files 640 746 REAL(wp), DIMENSION(jpbdta,1) :: zdta ! temporary array for data fields 641 CHARACTER(LEN=80), DIMENSION( 3) :: clfile747 CHARACTER(LEN=80), DIMENSION(6) :: clfile 642 748 CHARACTER(LEN=70 ) :: clunits ! units attribute of time coordinate 643 749 !!--------------------------------------------------------------------------- 644 750 645 !!gm add here the same style as in bdy_dta 646 !!gm clearly bdy_dta_ bt and bdy_dtacan be combined...751 !!gm add here the same style as in bdy_dta_frs 752 !!gm clearly bdy_dta_fla and bdy_dta_frs can be combined... 647 753 !!gm too many things duplicated in the read of data... simplification can be done 648 754 … … 671 777 itimer = itimer + jit*rdt/REAL(nn_baro,wp) ! in non-climatological case 672 778 673 IF ( ln_ bdy_tides ) THEN779 IF ( ln_tides ) THEN 674 780 675 781 ! -------------------------------------! … … 681 787 ENDIF 682 788 683 IF ( ln_ bdy_dyn_fla ) THEN789 IF ( ln_dyn_fla ) THEN 684 790 685 791 ! -------------------------------------! … … 688 794 689 795 ! !-------------------! 690 IF( kt == nit000 ) THEN! First call only !796 IF( kt == nit000 .and. jit ==2 ) THEN ! First call only ! 691 797 ! !-------------------! 692 798 istep_bt(:) = 0 … … 698 804 699 805 IF(lwp) WRITE(numout,*) 700 IF(lwp) WRITE(numout,*) 'bdy_dta_ bt:Initialize unstructured boundary data for barotropic variables.'806 IF(lwp) WRITE(numout,*) 'bdy_dta_fla :Initialize unstructured boundary data for barotropic variables.' 701 807 IF(lwp) WRITE(numout,*) '~~~~~~~' 702 808 703 IF( n bdy_dta== 0 ) THEN809 IF( nn_dtactl == 0 ) THEN 704 810 IF(lwp) WRITE(numout,*) 'Bdy data are taken from initial conditions' 705 811 706 ELSEIF (n bdy_dta== 1) THEN812 ELSEIF (nn_dtactl == 1) THEN 707 813 IF(lwp) WRITE(numout,*) 'Bdy data are read in netcdf files' 708 814 … … 712 818 ! necessary time dumps in file are included 713 819 714 clfile( 1) = filbdy_data_bt_T715 clfile( 2) = filbdy_data_bt_U716 clfile( 3) = filbdy_data_bt_V717 718 DO igrd = 1,3820 clfile(4) = cn_dta_fla_T 821 clfile(5) = cn_dta_fla_U 822 clfile(6) = cn_dta_fla_V 823 824 DO igrd = 4,6 719 825 720 826 CALL iom_open( clfile(igrd), inum ) 721 CALL iom_gettime( inum, zstepr, kntime=ntimes_bdy , cdunits=clunits )827 CALL iom_gettime( inum, zstepr, kntime=ntimes_bdy_bt, cdunits=clunits ) 722 828 723 829 SELECT CASE( igrd ) 724 CASE ( 1)725 numbdyt = inum726 CASE ( 2)727 numbdyu = inum728 CASE ( 3)729 numbdyv = inum830 CASE (4) 831 numbdyt_bt = inum 832 CASE (5) 833 numbdyu_bt = inum 834 CASE (6) 835 numbdyv_bt = inum 730 836 END SELECT 731 837 … … 757 863 758 864 ! Check that time array increases (or interp will fail): 759 DO it = 2, ntimes_bdy 865 DO it = 2, ntimes_bdy_bt 760 866 IF ( zstepr(it-1) >= zstepr(it) ) THEN 761 867 CALL ctl_stop('Time array in unstructured boundary data file', & … … 766 872 END DO 767 873 768 IF ( .NOT. ln_ bdy_clim ) THEN874 IF ( .NOT. ln_clim ) THEN 769 875 ! Check that times in file span model run time: 770 876 … … 778 884 ! The same applies to the last time level: see setting of lect below. 779 885 780 IF ( ntimes_bdy == 1 ) CALL ctl_stop( &886 IF ( ntimes_bdy_bt == 1 ) CALL ctl_stop( & 781 887 'There is only one time dump in data files', & 782 'Set ln_ bdy_clim=.true. in namelist for constant bdy forcing.' )888 'Set ln_clim=.true. in namelist for constant bdy forcing.' ) 783 889 784 890 zinterval_s = zstepr(2) - zstepr(1) 785 zinterval_e = zstepr(ntimes_bdy) - zstepr(ntimes_bdy-1) 786 787 IF ( zstepr(1) - zinterval_s / 2.0 > 0 ) THEN 788 IF(lwp) WRITE(numout,*) 'First bdy time relative to nit000:', zstepr(1) 789 IF(lwp) WRITE(numout,*) 'Interval between first two times: ', zinterval_s 790 CALL ctl_stop( 'First data time is after start of run', & 791 'by more than half a meaning period', & 792 'Check file: ' // TRIM(clfile(igrd)) ) 891 zinterval_e = zstepr(ntimes_bdy_bt) - zstepr(ntimes_bdy_bt-1) 892 893 IF( zstepr(1) + zoffset > 0 ) THEN 894 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 895 CALL ctl_stop( 'First time dump in bdy file is after model initial time', ctmp1 ) 793 896 END IF 794 795 IF ( zstepr(ntimes_bdy) + zinterval_e / 2.0 < totime ) THEN 796 IF(lwp) WRITE(numout,*) 'Last bdy time relative to nit000:', zstepr(ntimes_bdy) 797 IF(lwp) WRITE(numout,*) 'Interval between last two times: ', zinterval_e 798 CALL ctl_stop( 'Last data time is before end of run', & 799 'by more than half a meaning period', & 800 'Check file: ' // TRIM(clfile(igrd)) ) 897 IF( zstepr(ntimes_bdy_bt) + zoffset < totime ) THEN 898 WRITE(ctmp1,*) 'Check file: ', clfile(igrd) 899 CALL ctl_stop( 'Last time dump in bdy file is before model final time', ctmp1 ) 801 900 END IF 802 803 END IF ! .NOT. ln_bdy_clim 804 805 IF ( igrd .EQ. 1) THEN 901 END IF ! .NOT. ln_clim 902 903 IF ( igrd .EQ. 4) THEN 806 904 ntimes_bdyt = ntimes_bdy_bt 807 905 zoffsett = zoffset 808 906 istept(:) = INT( zstepr(:) + zoffset ) 809 ELSE IF (igrd .EQ. 2) THEN907 ELSE IF (igrd .EQ. 5) THEN 810 908 ntimes_bdyu = ntimes_bdy_bt 811 909 zoffsetu = zoffset 812 910 istepu(:) = INT( zstepr(:) + zoffset ) 813 ELSE IF (igrd .EQ. 3) THEN911 ELSE IF (igrd .EQ. 6) THEN 814 912 ntimes_bdyv = ntimes_bdy_bt 815 913 zoffsetv = zoffset … … 840 938 841 939 ! Check number of time dumps: 842 IF (ln_ bdy_clim) THEN940 IF (ln_clim) THEN 843 941 SELECT CASE ( ntimes_bdy_bt ) 844 942 CASE( 1 ) … … 852 950 CASE DEFAULT 853 951 CALL ctl_stop( & 854 'For climatological boundary forcing (ln_ bdy_clim=.true.),',&952 'For climatological boundary forcing (ln_clim=.true.),',& 855 953 'bdy data files must contain 1 or 12 time dumps.' ) 856 954 END SELECT … … 865 963 nbdy_b_bt = it 866 964 867 WRITE(numout,*) 'Time offset is ',zoffset868 WRITE(numout,*) 'First record to read is ',nbdy_b_bt869 870 ENDIF ! endif (n bdy_dta== 1)871 872 ! 1.2 Read first record in file if necessary (ie if n bdy_dta== 1)965 IF(lwp) WRITE(numout,*) 'Time offset is ',zoffset 966 IF(lwp) WRITE(numout,*) 'First record to read is ',nbdy_b_bt 967 968 ENDIF ! endif (nn_dtactl == 1) 969 970 ! 1.2 Read first record in file if necessary (ie if nn_dtactl == 1) 873 971 ! ***************************************************************** 874 972 875 IF ( n bdy_dta== 0) THEN973 IF ( nn_dtactl == 0) THEN 876 974 ! boundary data arrays are filled with initial conditions 877 igrd = 2! U-points data975 igrd = 5 ! U-points data 878 976 DO ib = 1, nblen(igrd) 879 977 ubtbdy(ib) = un(nbi(ib,igrd), nbj(ib,igrd), 1) 880 978 END DO 881 979 882 igrd = 3! V-points data980 igrd = 6 ! V-points data 883 981 DO ib = 1, nblen(igrd) 884 982 vbtbdy(ib) = vn(nbi(ib,igrd), nbj(ib,igrd), 1) 885 983 END DO 886 984 887 igrd = 1! T-points data985 igrd = 4 ! T-points data 888 986 DO ib = 1, nblen(igrd) 889 987 sshbdy(ib) = sshn(nbi(ib,igrd), nbj(ib,igrd)) 890 988 END DO 891 989 892 ELSEIF (n bdy_dta== 1) THEN990 ELSEIF (nn_dtactl == 1) THEN 893 991 894 992 ! Set first record in the climatological case: 895 IF ((ln_ bdy_clim).AND.(ntimes_bdy_bt==1)) THEN993 IF ((ln_clim).AND.(ntimes_bdy_bt==1)) THEN 896 994 nbdy_a_bt = 1 897 ELSEIF ((ln_ bdy_clim).AND.(ntimes_bdy_bt==iman)) THEN995 ELSEIF ((ln_clim).AND.(ntimes_bdy_bt==iman)) THEN 898 996 nbdy_b_bt = 0 899 997 nbdy_a_bt = imois … … 904 1002 ! Open Netcdf files: 905 1003 906 CALL iom_open ( filbdy_data_bt_T, numbdyt_bt )907 CALL iom_open ( filbdy_data_bt_U, numbdyu_bt )908 CALL iom_open ( filbdy_data_bt_V, numbdyv_bt )1004 CALL iom_open ( cn_dta_fla_T, numbdyt_bt ) 1005 CALL iom_open ( cn_dta_fla_U, numbdyu_bt ) 1006 CALL iom_open ( cn_dta_fla_V, numbdyv_bt ) 909 1007 910 1008 ! Read first record: 911 1009 ipj=1 912 igrd= 11010 igrd=4 913 1011 ipi=nblendta(igrd) 914 1012 915 1013 ! ssh 916 igrd= 11014 igrd=4 917 1015 IF ( nblendta(igrd) .le. 0 ) THEN 918 1016 idvar = iom_varid( numbdyt_bt,'sossheig' ) … … 929 1027 930 1028 ! u-velocity 931 igrd= 21029 igrd=5 932 1030 IF ( nblendta(igrd) .le. 0 ) THEN 933 1031 idvar = iom_varid( numbdyu_bt,'vobtcrtx' ) … … 944 1042 945 1043 ! v-velocity 946 igrd= 31044 igrd=6 947 1045 IF ( nblendta(igrd) .le. 0 ) THEN 948 1046 idvar = iom_varid( numbdyv_bt,'vobtcrty' ) … … 961 1059 962 1060 ! In the case of constant boundary forcing fill bdy arrays once for all 963 IF ((ln_ bdy_clim).AND.(ntimes_bdy_bt==1)) THEN1061 IF ((ln_clim).AND.(ntimes_bdy_bt==1)) THEN 964 1062 965 1063 ubtbdy (:) = ubtbdydta (:,2) … … 979 1077 ! -------------------- ! 980 1078 981 IF ((n bdy_dta==1).AND.(ntimes_bdy_bt>1)) THEN1079 IF ((nn_dtactl==1).AND.(ntimes_bdy_bt>1)) THEN 982 1080 983 1081 ! 2.1 Read one more record if necessary 984 1082 !************************************** 985 1083 986 IF ( (ln_ bdy_clim).AND.(imois/=nbdy_b_bt) ) THEN ! remember that nbdy_b_bt=0 for kt=nit0001084 IF ( (ln_clim).AND.(imois/=nbdy_b_bt) ) THEN ! remember that nbdy_b_bt=0 for kt=nit000 987 1085 nbdy_b_bt = imois 988 1086 nbdy_a_bt = imois+1 … … 993 1091 lect=.true. 994 1092 995 ELSEIF ((.NOT.ln_ bdy_clim).AND.(itimer >= istep_bt(nbdy_a_bt))) THEN1093 ELSEIF ((.NOT.ln_clim).AND.(itimer >= istep_bt(nbdy_a_bt))) THEN 996 1094 nbdy_b_bt=nbdy_a_bt 997 1095 nbdy_a_bt=nbdy_a_bt+1 … … 1010 1108 ipj=1 1011 1109 ipk=jpk 1012 igrd= 11110 igrd=4 1013 1111 ipi=nblendta(igrd) 1014 1112 1015 1113 1016 1114 ! ssh 1017 igrd= 11115 igrd=4 1018 1116 ipi=nblendta(igrd) 1019 1117 … … 1025 1123 1026 1124 ! u-velocity 1027 igrd= 21125 igrd=5 1028 1126 ipi=nblendta(igrd) 1029 1127 … … 1035 1133 1036 1134 ! v-velocity 1037 igrd= 31135 igrd=6 1038 1136 ipi=nblendta(igrd) 1039 1137 … … 1045 1143 1046 1144 1047 IF(lwp) WRITE(numout,*) 'bdy_dta : first record file used nbdy_b_bt ',nbdy_b_bt1145 IF(lwp) WRITE(numout,*) 'bdy_dta_fla : first record file used nbdy_b_bt ',nbdy_b_bt 1048 1146 IF(lwp) WRITE(numout,*) '~~~~~~~~ last record file used nbdy_a_bt ',nbdy_a_bt 1049 IF (.NOT.ln_ bdy_clim) THEN1147 IF (.NOT.ln_clim) THEN 1050 1148 IF(lwp) WRITE(numout,*) 'first record time (s): ', istep_bt(nbdy_b_bt) 1051 1149 IF(lwp) WRITE(numout,*) 'model time (s) : ', itimer … … 1058 1156 ! *************************** 1059 1157 1060 IF (ln_ bdy_clim) THEN1158 IF (ln_clim) THEN 1061 1159 zxy = REAL( nday, wp ) / REAL( nmonth_len(nbdy_b_bt), wp ) + 0.5 - i15 1062 1160 ELSE … … 1064 1162 END IF 1065 1163 1066 igrd= 11164 igrd=4 1067 1165 DO ib=1, nblen(igrd) 1068 1166 sshbdy(ib) = zxy * sshbdydta(ib,2) + & … … 1070 1168 END DO 1071 1169 1072 igrd= 21170 igrd=5 1073 1171 DO ib=1, nblen(igrd) 1074 1172 ubtbdy(ib) = zxy * ubtbdydta(ib,2) + & … … 1076 1174 END DO 1077 1175 1078 igrd= 31176 igrd=6 1079 1177 DO ib=1, nblen(igrd) 1080 1178 vbtbdy(ib) = zxy * vbtbdydta(ib,2) + & … … 1083 1181 1084 1182 1085 END IF !end if ((n bdy_dta==1).AND.(ntimes_bdy_bt>1))1183 END IF !end if ((nn_dtactl==1).AND.(ntimes_bdy_bt>1)) 1086 1184 1087 1185 ! ------------------- ! … … 1090 1188 1091 1189 ! Closing of the 3 files 1092 IF( kt == nitend ) THEN1190 IF( kt == nitend .and. jit == icycl ) THEN 1093 1191 CALL iom_close( numbdyt_bt ) 1094 1192 CALL iom_close( numbdyu_bt ) … … 1096 1194 ENDIF 1097 1195 1098 ENDIF ! ln_ bdy_dyn_frs1099 1100 END SUBROUTINE bdy_dta_ bt1196 ENDIF ! ln_dyn_frs 1197 1198 END SUBROUTINE bdy_dta_fla 1101 1199 1102 1200 … … 1106 1204 !!---------------------------------------------------------------------- 1107 1205 CONTAINS 1108 SUBROUTINE bdy_dta ( kt ) ! Empty routine1109 WRITE(*,*) 'bdy_dta : You should not have seen this print! error?', kt1110 END SUBROUTINE bdy_dta 1111 SUBROUTINE bdy_dta_ bt( kt, kit) ! Empty routine1112 WRITE(*,*) 'bdy_dta : You should not have seen this print! error?', kt, kit1113 END SUBROUTINE bdy_dta_ bt1206 SUBROUTINE bdy_dta_frs( kt ) ! Empty routine 1207 WRITE(*,*) 'bdy_dta_frs: You should not have seen this print! error?', kt 1208 END SUBROUTINE bdy_dta_frs 1209 SUBROUTINE bdy_dta_fla( kt, kit, icycle ) ! Empty routine 1210 WRITE(*,*) 'bdy_dta_frs: You should not have seen this print! error?', kt, kit 1211 END SUBROUTINE bdy_dta_fla 1114 1212 #endif 1115 1213
Note: See TracChangeset
for help on using the changeset viewer.