- Timestamp:
- 2010-06-24T17:00:16+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r1784_mid_year_merge_2010/NEMO/OPA_SRC/SBC/fldread.F90
r1730 r1951 48 48 INTEGER , DIMENSION(2) :: nrec_b ! before record (1: index, 2: second since Jan. 1st 00h of nit000 year) 49 49 INTEGER , DIMENSION(2) :: nrec_a ! after record (1: index, 2: second since Jan. 1st 00h of nit000 year) 50 REAL(wp) , ALLOCATABLE, DIMENSION(:,: ) :: fnow! input fields interpolated to now time step51 REAL(wp) , ALLOCATABLE, DIMENSION(:,:,: ) :: fdta! 2 consecutive record of input fields50 REAL(wp) , ALLOCATABLE, DIMENSION(:,:,: ) :: fnow ! input fields interpolated to now time step 51 REAL(wp) , ALLOCATABLE, DIMENSION(:,:,:,:) :: fdta ! 2 consecutive record of input fields 52 52 CHARACTER(len = 256) :: wgtname ! current name of the NetCDF weight file acting as a key 53 53 ! into the WGTLIST structure … … 120 120 121 121 INTEGER :: jf ! dummy indices 122 INTEGER :: jk ! dummy indices 123 INTEGER :: ipk ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 122 124 INTEGER :: kw ! index into wgts array 123 125 INTEGER :: ireclast ! last record to be read in the current year file … … 143 145 IF( sd(jf)%ln_tint ) THEN ! time interpolation: swap before record field 144 146 !CDIR COLLAPSE 145 sd(jf)%fdta(:,:, 1) = sd(jf)%fdta(:,:,2)146 sd(jf)%rotn(1) = sd(jf)%rotn(2)147 sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2) 148 sd(jf)%rotn(1) = sd(jf)%rotn(2) 147 149 ENDIF 148 150 … … 202 204 203 205 ! read after data 206 ipk = SIZE( sd(jf)%fdta, 3 ) 204 207 IF( LEN(TRIM(sd(jf)%wgtname)) > 0 ) THEN 205 208 CALL wgt_list( sd(jf), kw ) 206 CALL fld_interp( sd(jf)%num, sd(jf)%clvar, kw, sd(jf)%fdta(:,:,2), sd(jf)%nrec_a(1) ) 209 DO jk = 1, ipk 210 CALL fld_interp( sd(jf)%num, sd(jf)%clvar, kw, sd(jf)%fdta(:,:,jk,2), sd(jf)%nrec_a(1) ) 211 END DO 207 212 ELSE 208 CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,2), sd(jf)%nrec_a(1) ) 213 IF( ipk == 1 ) THEN 214 CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,1,2), sd(jf)%nrec_a(1) ) 215 ELSE 216 CALL iom_get( sd(jf)%num, jpdom_data, sd(jf)%clvar, sd(jf)%fdta(:,:,:,2), sd(jf)%nrec_a(1) ) 217 ENDIF 209 218 ENDIF 210 219 sd(jf)%rotn(2) = .FALSE. … … 245 254 utmp(:,:) = 0.0 246 255 vtmp(:,:) = 0.0 247 CALL rot_rep( sd(jf)%fdta(:,:,nf), sd(kf)%fdta(:,:,nf), 'T', 'en->i', utmp(:,:) ) 248 CALL rot_rep( sd(jf)%fdta(:,:,nf), sd(kf)%fdta(:,:,nf), 'T', 'en->j', vtmp(:,:) ) 249 sd(jf)%fdta(:,:,nf) = utmp(:,:) 250 sd(kf)%fdta(:,:,nf) = vtmp(:,:) 256 ! 257 DO jk = 1, SIZE( sd(kf)%fdta, 3 ) 258 CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->i', utmp(:,:) ) 259 CALL rot_rep( sd(jf)%fdta(:,:,jk,nf),sd(kf)%fdta(:,:,jk,nf),'T', 'en->j', vtmp(:,:) ) 260 sd(jf)%fdta(:,:,jk,nf) = utmp(:,:) 261 sd(kf)%fdta(:,:,jk,nf) = vtmp(:,:) 262 END DO 263 ! 251 264 sd(jf)%rotn(nf) = .TRUE. 252 265 sd(kf)%rotn(nf) = .TRUE. … … 280 293 ztintb = 1. - ztinta 281 294 !CDIR COLLAPSE 282 sd(jf)%fnow(:,: ) = ztintb * sd(jf)%fdta(:,:,1) + ztinta * sd(jf)%fdta(:,:,2)295 sd(jf)%fnow(:,:,:) = ztintb * sd(jf)%fdta(:,:,:,1) + ztinta * sd(jf)%fdta(:,:,:,2) 283 296 ELSE 284 297 IF(lwp .AND. kt - nit000 <= 100 ) THEN … … 288 301 ENDIF 289 302 !CDIR COLLAPSE 290 sd(jf)%fnow(:,: ) = sd(jf)%fdta(:,:,2) ! piecewise constant field303 sd(jf)%fnow(:,:,:) = sd(jf)%fdta(:,:,:,2) ! piecewise constant field 291 304 292 305 ENDIF … … 320 333 INTEGER :: inrec ! number of record existing for this variable 321 334 INTEGER :: kwgt 335 INTEGER :: jk ! vertical loop variable 336 INTEGER :: ipk ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 322 337 CHARACTER(LEN=1000) :: clfmt ! write format 323 338 !!--------------------------------------------------------------------- … … 339 354 IF( sdjf%cltype == 'monthly' ) THEN ! monthly file 340 355 sdjf%nrec_b(1) = 1 ! force to read the unique record 341 llprevmth = . NOT. sdjf%ln_clim! use previous month file?356 llprevmth = .TRUE. ! use previous month file? 342 357 llprevyr = llprevmth .AND. nmonth == 1 ! use previous year file? 343 358 ELSE ! yearly file … … 384 399 385 400 ! read before data into sdjf%fdta(:,:,2) because we will swap data in the following part of fld_read 401 ipk = SIZE( sdjf%fdta, 3 ) 386 402 IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 387 403 CALL wgt_list( sdjf, kwgt ) 388 CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, sdjf%fdta(:,:,2), sdjf%nrec_b(1) ) 404 DO jk = 1, ipk 405 CALL fld_interp( sdjf%num, sdjf%clvar, kwgt, sdjf%fdta(:,:,jk,2), sdjf%nrec_b(1) ) 406 END DO 389 407 ELSE 390 CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,2), sdjf%nrec_b(1) ) 408 IF( ipk == 1 ) THEN 409 CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_b(1) ) 410 ELSE 411 CALL iom_get( sdjf%num, jpdom_data, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_b(1) ) 412 ENDIF 391 413 ENDIF 392 414 sdjf%rotn(2) = .FALSE. … … 534 556 IF( sdjf%cltype /= 'yearly' ) WRITE(sdjf%clname, '(a,"m" ,i2.2)' ) TRIM( sdjf%clname ), kmonth ! add month 535 557 IF( sdjf%cltype == 'daily' ) WRITE(sdjf%clname, '(a,"d" ,i2.2)' ) TRIM( sdjf%clname ), kday ! add day 558 ELSE 559 ! build the new filename if climatological data 560 IF( sdjf%cltype == 'monthly' ) WRITE(sdjf%clname, '(a,"_m",i2.2)' ) TRIM( sdjf%clrootname ), kmonth ! add month 536 561 ENDIF 537 562 CALL iom_open( sdjf%clname, sdjf%num, ldstop = ldstop, ldiof = LEN(TRIM(sdjf%wgtname)) > 0 ) … … 564 589 sdf(jf)%ln_tint = sdf_n(jf)%ln_tint 565 590 sdf(jf)%ln_clim = sdf_n(jf)%ln_clim 566 IF( sdf(jf)%nfreqh == -1. ) THEN ; sdf(jf)%cltype = 'yearly' 567 ELSE ; sdf(jf)%cltype = sdf_n(jf)%cltype 568 ENDIF 591 sdf(jf)%cltype = sdf_n(jf)%cltype 569 592 sdf(jf)%wgtname = " " 570 593 IF( LEN( TRIM(sdf_n(jf)%wname) ) > 0 ) sdf(jf)%wgtname = TRIM( cdir )//TRIM( sdf_n(jf)%wname )
Note: See TracChangeset
for help on using the changeset viewer.