- Timestamp:
- 2019-08-29T13:15:12+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/fldread.F90
r11405 r11482 129 129 CONTAINS 130 130 131 SUBROUTINE fld_read( kt, kn_fsbc, sd, map, kit, kt_offset, jpk_bdy, fvl )131 SUBROUTINE fld_read( kt, kn_fsbc, sd, map, kit, kt_offset, jpk_bdy, fvl, ldxios ) 132 132 !!--------------------------------------------------------------------- 133 133 !! *** ROUTINE fld_read *** … … 152 152 INTEGER , INTENT(in ), OPTIONAL :: jpk_bdy ! number of vertical levels in the BDY data 153 153 LOGICAL , INTENT(in ), OPTIONAL :: fvl ! number of vertical levels in the BDY data 154 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! use xios to read data 154 155 !! 155 156 INTEGER :: itmp ! local variable … … 167 168 CHARACTER(LEN=1000) :: clfmt ! write format 168 169 TYPE(MAP_POINTER) :: imap ! global-to-local mapping indices 169 !!--------------------------------------------------------------------- 170 LOGICAL :: luxios ! temporary variable to hold ldxios 171 !!--------------------------------------------------------------------- 172 173 luxios = .FALSE. 174 IF( PRESENT(ldxios) ) luxios = ldxios 175 170 176 ll_firstcall = kt == nit000 171 177 IF( PRESENT(kit) ) ll_firstcall = ll_firstcall .and. kit == 1 … … 190 196 IF( PRESENT(map) ) imap = map(jf) 191 197 IF( PRESENT(jpk_bdy) ) THEN 192 CALL fld_init( kn_fsbc, sd(jf), imap, jpk_bdy, fvl 198 CALL fld_init( kn_fsbc, sd(jf), imap, jpk_bdy, fvl, ldxios = luxios) ! read each before field (put them in after as they will be swapped) 193 199 ELSE 194 CALL fld_init( kn_fsbc, sd(jf), imap 200 CALL fld_init( kn_fsbc, sd(jf), imap, ldxios = luxios) ! read each before field (put them in after as they will be swapped) 195 201 ENDIF 196 202 END DO … … 211 217 IF( sd(jf)%ln_tint ) sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2) ! swap before record field 212 218 213 CALL fld_rec( kn_fsbc, sd(jf), kt_offset = it_offset, kit = kit 219 CALL fld_rec( kn_fsbc, sd(jf), kt_offset = it_offset, kit = kit) ! update after record informations 214 220 215 221 ! if kn_fsbc*rdt is larger than nfreqh (which is kind of odd), … … 222 228 itmp = sd(jf)%nrec_a(1) ! temporary storage 223 229 sd(jf)%nrec_a(1) = sd(jf)%nreclast ! read the last record of the file currently opened 224 CALL fld_get( sd(jf), imap )! read after data230 CALL fld_get( sd(jf), imap, ldxios = luxios) ! read after data 225 231 sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2) ! re-swap before record field 226 232 sd(jf)%nrec_b(1) = sd(jf)%nrec_a(1) ! update before record informations … … 240 246 & .AND. sd(jf)%nrec_b(1) /= sd(jf)%nrec_a(1) - 1 ) THEN 241 247 sd(jf)%nrec_a(1) = sd(jf)%nrec_a(1) - 1 ! move back to before record 242 CALL fld_get( sd(jf), imap )! read after data248 CALL fld_get( sd(jf), imap, ldxios = luxios) ! read after data 243 249 sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2) ! re-swap before record field 244 250 sd(jf)%nrec_b(1) = sd(jf)%nrec_a(1) ! update before record informations … … 286 292 ! read after data 287 293 IF( PRESENT(jpk_bdy) ) THEN 288 CALL fld_get( sd(jf), imap, jpk_bdy, fvl )294 CALL fld_get( sd(jf), imap, jpk_bdy, fvl, ldxios = luxios) 289 295 ELSE 290 CALL fld_get( sd(jf), imap )296 CALL fld_get( sd(jf), imap, ldxios = luxios ) 291 297 ENDIF 292 298 ENDIF ! read new data? … … 327 333 328 334 329 SUBROUTINE fld_init( kn_fsbc, sdjf, map , jpk_bdy, fvl )335 SUBROUTINE fld_init( kn_fsbc, sdjf, map , jpk_bdy, fvl, ldxios) 330 336 !!--------------------------------------------------------------------- 331 337 !! *** ROUTINE fld_init *** … … 339 345 INTEGER , INTENT(in), OPTIONAL :: jpk_bdy ! number of vertical levels in the BDY data 340 346 LOGICAL , INTENT(in), OPTIONAL :: fvl ! number of vertical levels in the BDY data 347 LOGICAL , OPTIONAL :: ldxios ! use xios for I/O 341 348 !! 342 349 LOGICAL :: llprevyr ! are we reading previous year file? … … 350 357 INTEGER :: isec_week ! number of seconds since start of the weekly file 351 358 CHARACTER(LEN=1000) :: clfmt ! write format 359 LOGICAL :: luxios ! local variable to keep ldxios info 352 360 !!--------------------------------------------------------------------- 353 361 llprevyr = .FALSE. … … 356 364 llprevday = .FALSE. 357 365 isec_week = 0 366 luxios = .FALSE. 367 IF( PRESENT(ldxios)) luxios = ldxios 368 358 369 ! 359 370 ! define record informations … … 365 376 ! 366 377 IF( sdjf%nrec_a(1) == 0 ) THEN ! we redefine record sdjf%nrec_a(1) with the last record of previous year file 378 IF(luxios) THEN 379 IF(lwp) write(numout, *) 'Can not use XIOS to read data. Switching to old functionality' 380 luxios = .FALSE. ! we can not use XIOS in this case 381 ENDIF 367 382 IF ( sdjf%nfreqh == -12 ) THEN ! yearly mean 368 383 IF( sdjf%cltype == 'yearly' ) THEN ! yearly file … … 436 451 CALL fld_get( sdjf, map, jpk_bdy, fvl ) 437 452 ELSE 438 CALL fld_get( sdjf, map 453 CALL fld_get( sdjf, map, ldxios = luxios) 439 454 ENDIF 440 455 ! … … 613 628 614 629 615 SUBROUTINE fld_get( sdjf, map, jpk_bdy, fvl 630 SUBROUTINE fld_get( sdjf, map, jpk_bdy, fvl, ldxios) 616 631 !!--------------------------------------------------------------------- 617 632 !! *** ROUTINE fld_get *** … … 623 638 INTEGER , INTENT(in), OPTIONAL :: jpk_bdy ! number of vertical levels in the bdy data 624 639 LOGICAL , INTENT(in), OPTIONAL :: fvl ! number of vertical levels in the bdy data 640 LOGICAL , OPTIONAL :: ldxios ! xios I/O 625 641 ! 626 642 INTEGER :: ipk ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) … … 630 646 INTEGER :: idmspc ! number of spatial dimensions 631 647 LOGICAL :: lmoor ! C1D case: point data 632 !!--------------------------------------------------------------------- 633 ! 648 LOGICAL :: luxios ! local variable for ldxios 649 REAL(wp):: amaxval, aminval 650 !!--------------------------------------------------------------------- 651 ! 652 653 luxios = .FALSE. 654 IF( PRESENT(ldxios) ) luxios = ldxios 634 655 ipk = SIZE( sdjf%fnow, 3 ) 635 656 ! … … 668 689 IF( lk_c1d .AND. lmoor ) THEN 669 690 IF( sdjf%ln_tint ) THEN 670 CALL iom_get( sdjf%num, sdjf%clvar, sdjf%fdta(2,2,1,2), sdjf%nrec_a(1) )691 CALL iom_get( sdjf%num, sdjf%clvar, sdjf%fdta(2,2,1,2), sdjf%nrec_a(1), ldxios = luxios ) 671 692 CALL lbc_lnk( 'fldread', sdjf%fdta(:,:,1,2),'Z',1. ) 672 693 ELSE 673 CALL iom_get( sdjf%num, sdjf%clvar, sdjf%fnow(2,2,1 ), sdjf%nrec_a(1) )694 CALL iom_get( sdjf%num, sdjf%clvar, sdjf%fnow(2,2,1 ), sdjf%nrec_a(1), ldxios = luxios ) 674 695 CALL lbc_lnk( 'fldread', sdjf%fnow(:,:,1 ),'Z',1. ) 675 696 ENDIF 676 697 ELSE 677 IF( sdjf%ln_tint ) THEN ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_a(1) )678 ELSE ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fnow(:,:,1 ), sdjf%nrec_a(1) )698 IF( sdjf%ln_tint ) THEN ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fdta(:,:,1,2), sdjf%nrec_a(1), ldxios = luxios ) 699 ELSE ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fnow(:,:,1 ), sdjf%nrec_a(1), ldxios = luxios ) 679 700 ENDIF 680 701 ENDIF … … 682 703 IF (lk_c1d .AND. lmoor ) THEN 683 704 IF( sdjf%ln_tint ) THEN 684 CALL iom_get( sdjf%num, jpdom_unknown, sdjf%clvar, sdjf%fdta(2,2,:,2), sdjf%nrec_a(1) 705 CALL iom_get( sdjf%num, jpdom_unknown, sdjf%clvar, sdjf%fdta(2,2,:,2), sdjf%nrec_a(1), ldxios = luxios) 685 706 CALL lbc_lnk( 'fldread', sdjf%fdta(:,:,:,2),'Z',1. ) 686 707 ELSE 687 CALL iom_get( sdjf%num, jpdom_unknown, sdjf%clvar, sdjf%fnow(2,2,: ), sdjf%nrec_a(1) 708 CALL iom_get( sdjf%num, jpdom_unknown, sdjf%clvar, sdjf%fnow(2,2,: ), sdjf%nrec_a(1), ldxios = luxios) 688 709 CALL lbc_lnk( 'fldread', sdjf%fnow(:,:,: ),'Z',1. ) 689 710 ENDIF 690 711 ELSE 691 IF( sdjf%ln_tint ) THEN ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1) )692 ELSE ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fnow(:,:,: ), sdjf%nrec_a(1) )712 IF( sdjf%ln_tint ) THEN ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1), ldxios = luxios ) 713 ELSE ; CALL iom_get( sdjf%num, ipdom, sdjf%clvar, sdjf%fnow(:,:,: ), sdjf%nrec_a(1), ldxios = luxios ) 693 714 ENDIF 694 715 ENDIF -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/sbcblk.F90
r11405 r11482 827 827 name = TRIM(aname), domain_ref="grid_global", & 828 828 operation = "instant") 829 WRITE(aname,'(a3,i2.2)') 'dst',jn 829 830 CALL xios_add_child(file_hdl, field_hdl, TRIM(aname)//TRIM(sf(jf)%wgtname)) 830 831 CALL xios_set_attr (field_hdl, enabled = .TRUE., & 831 832 name = TRIM(aname), domain_ref="grid_global", & 832 operation = "instant") 833 operation = "instant") 834 WRITE(aname,'(a3,i2.2)') 'wgt',jn 835 CALL xios_add_child(file_hdl, field_hdl, TRIM(aname)//TRIM(sf(jf)%wgtname)) 836 CALL xios_set_attr (field_hdl, enabled = .TRUE., & 837 name = TRIM(aname), domain_ref="grid_global", & 838 operation = "instant") 833 839 ENDDO 834 840 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.