New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11482 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC – NEMO

Ignore:
Timestamp:
2019-08-29T13:15:12+02:00 (5 years ago)
Author:
andmirek
Message:

Ticket #2195 read initial conditions with XIOS

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  
    129129CONTAINS 
    130130 
    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 ) 
    132132      !!--------------------------------------------------------------------- 
    133133      !!                    ***  ROUTINE fld_read  *** 
     
    152152      INTEGER  , INTENT(in   ), OPTIONAL     ::   jpk_bdy   ! number of vertical levels in the BDY data 
    153153      LOGICAL  , INTENT(in   ), OPTIONAL     ::   fvl   ! number of vertical levels in the BDY data 
     154      LOGICAL  , INTENT(in   ), OPTIONAL     ::   ldxios    ! use xios to read data 
    154155      !! 
    155156      INTEGER  ::   itmp         ! local variable 
     
    167168      CHARACTER(LEN=1000) ::   clfmt  ! write format 
    168169      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 
    170176      ll_firstcall = kt == nit000 
    171177      IF( PRESENT(kit) )   ll_firstcall = ll_firstcall .and. kit == 1 
     
    190196            IF( PRESENT(map) ) imap = map(jf) 
    191197               IF( PRESENT(jpk_bdy) ) THEN 
    192                   CALL fld_init( kn_fsbc, sd(jf), imap, jpk_bdy, fvl )  ! read each before field (put them in after as they will be swapped) 
     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) 
    193199               ELSE 
    194                   CALL fld_init( kn_fsbc, sd(jf), imap )  ! read each before field (put them in after as they will be swapped) 
     200                  CALL fld_init( kn_fsbc, sd(jf), imap, ldxios = luxios)  ! read each before field (put them in after as they will be swapped) 
    195201               ENDIF 
    196202         END DO 
     
    211217               IF( sd(jf)%ln_tint )   sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2)   ! swap before record field 
    212218 
    213                CALL fld_rec( kn_fsbc, sd(jf), kt_offset = it_offset, kit = kit )    ! update after record informations 
     219               CALL fld_rec( kn_fsbc, sd(jf), kt_offset = it_offset, kit = kit)    ! update after record informations 
    214220 
    215221               ! if kn_fsbc*rdt is larger than nfreqh (which is kind of odd), 
     
    222228                  itmp = sd(jf)%nrec_a(1)                       ! temporary storage 
    223229                  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 data 
     230                  CALL fld_get( sd(jf), imap, ldxios = luxios)  ! read after data 
    225231                  sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2)   ! re-swap before record field 
    226232                  sd(jf)%nrec_b(1) = sd(jf)%nrec_a(1)           ! update before record informations 
     
    240246                     &                   .AND. sd(jf)%nrec_b(1) /= sd(jf)%nrec_a(1) - 1 ) THEN    
    241247                     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 data 
     248                     CALL fld_get( sd(jf), imap, ldxios = luxios)  ! read after data 
    243249                     sd(jf)%fdta(:,:,:,1) = sd(jf)%fdta(:,:,:,2)   ! re-swap before record field 
    244250                     sd(jf)%nrec_b(1) = sd(jf)%nrec_a(1)           ! update before record informations 
     
    286292               ! read after data 
    287293               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) 
    289295               ELSE 
    290                   CALL fld_get( sd(jf), imap ) 
     296                  CALL fld_get( sd(jf), imap, ldxios = luxios ) 
    291297               ENDIF 
    292298            ENDIF   ! read new data? 
     
    327333 
    328334 
    329    SUBROUTINE fld_init( kn_fsbc, sdjf, map , jpk_bdy, fvl) 
     335   SUBROUTINE fld_init( kn_fsbc, sdjf, map , jpk_bdy, fvl, ldxios) 
    330336      !!--------------------------------------------------------------------- 
    331337      !!                    ***  ROUTINE fld_init  *** 
     
    339345      INTEGER  , INTENT(in), OPTIONAL :: jpk_bdy ! number of vertical levels in the BDY data 
    340346      LOGICAL  , INTENT(in), OPTIONAL :: fvl     ! number of vertical levels in the BDY data 
     347      LOGICAL  ,             OPTIONAL :: ldxios  ! use xios for I/O  
    341348      !! 
    342349      LOGICAL :: llprevyr              ! are we reading previous year  file? 
     
    350357      INTEGER :: isec_week             ! number of seconds since start of the weekly file 
    351358      CHARACTER(LEN=1000) ::   clfmt   ! write format 
     359      LOGICAL :: luxios                ! local variable to keep ldxios info 
    352360      !!--------------------------------------------------------------------- 
    353361      llprevyr   = .FALSE. 
     
    356364      llprevday  = .FALSE. 
    357365      isec_week  = 0 
     366      luxios = .FALSE. 
     367      IF( PRESENT(ldxios)) luxios = ldxios 
     368 
    358369      ! 
    359370      ! define record informations 
     
    365376         ! 
    366377         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 
    367382            IF    ( sdjf%nfreqh == -12 ) THEN   ! yearly mean 
    368383               IF( sdjf%cltype == 'yearly' ) THEN             ! yearly file 
     
    436451            CALL fld_get( sdjf, map, jpk_bdy, fvl ) 
    437452         ELSE 
    438             CALL fld_get( sdjf, map ) 
     453            CALL fld_get( sdjf, map, ldxios = luxios) 
    439454         ENDIF 
    440455         ! 
     
    613628 
    614629 
    615    SUBROUTINE fld_get( sdjf, map, jpk_bdy, fvl ) 
     630   SUBROUTINE fld_get( sdjf, map, jpk_bdy, fvl, ldxios) 
    616631      !!--------------------------------------------------------------------- 
    617632      !!                    ***  ROUTINE fld_get  *** 
     
    623638      INTEGER  , INTENT(in), OPTIONAL  ::   jpk_bdy ! number of vertical levels in the bdy data 
    624639      LOGICAL  , INTENT(in), OPTIONAL  ::   fvl     ! number of vertical levels in the bdy data 
     640      LOGICAL  ,             OPTIONAL  ::   ldxios  ! xios I/O 
    625641      ! 
    626642      INTEGER ::   ipk      ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 
     
    630646      INTEGER ::   idmspc   ! number of spatial dimensions 
    631647      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 
    634655      ipk = SIZE( sdjf%fnow, 3 ) 
    635656      ! 
     
    668689            IF( lk_c1d .AND. lmoor ) THEN 
    669690               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 ) 
    671692                  CALL lbc_lnk( 'fldread', sdjf%fdta(:,:,1,2),'Z',1. ) 
    672693               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 ) 
    674695                  CALL lbc_lnk( 'fldread', sdjf%fnow(:,:,1  ),'Z',1. ) 
    675696               ENDIF 
    676697            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 ) 
    679700               ENDIF 
    680701            ENDIF 
     
    682703            IF (lk_c1d .AND. lmoor ) THEN 
    683704               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) 
    685706                  CALL lbc_lnk( 'fldread', sdjf%fdta(:,:,:,2),'Z',1. ) 
    686707               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) 
    688709                  CALL lbc_lnk( 'fldread', sdjf%fnow(:,:,:  ),'Z',1. ) 
    689710               ENDIF 
    690711            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 ) 
    693714               ENDIF 
    694715            ENDIF 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/sbcblk.F90

    r11405 r11482  
    827827                          name = TRIM(aname), domain_ref="grid_global", & 
    828828                          operation = "instant") 
     829            WRITE(aname,'(a3,i2.2)') 'dst',jn 
    829830            CALL xios_add_child(file_hdl, field_hdl, TRIM(aname)//TRIM(sf(jf)%wgtname)) 
    830831            CALL xios_set_attr (field_hdl, enabled = .TRUE., & 
    831832                          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") 
    833839         ENDDO  
    834840      ENDDO    
Note: See TracChangeset for help on using the changeset viewer.