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 11405 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/fldread.F90 – NEMO

Ignore:
Timestamp:
2019-08-06T15:16:49+02:00 (5 years ago)
Author:
andmirek
Message:

ticket #2195: read weights for blk using XIOS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/fldread.F90

    r10425 r11405  
    647647         ENDIF         
    648648      ELSE IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 
    649          CALL wgt_list( sdjf, iw ) 
     649         CALL wgt_list( sdjf, iw, lxios_blkw ) 
    650650         IF( sdjf%ln_tint ) THEN   ;   CALL fld_interp( sdjf%num, sdjf%clvar, iw, ipk, sdjf%fdta(:,:,:,2),          &  
    651651            &                                                                          sdjf%nrec_a(1), sdjf%lsmname ) 
     
    13451345 
    13461346 
    1347    SUBROUTINE wgt_list( sd, kwgt ) 
     1347   SUBROUTINE wgt_list( sd, kwgt, ldxios ) 
    13481348      !!--------------------------------------------------------------------- 
    13491349      !!                    ***  ROUTINE wgt_list  *** 
     
    13551355      TYPE( FLD ), INTENT(in   ) ::   sd        ! field with name of weights file 
    13561356      INTEGER    , INTENT(inout) ::   kwgt      ! index of weights 
     1357      LOGICAL    , INTENT(in), OPTIONAL :: ldxios 
    13571358      ! 
    13581359      INTEGER ::   kw, nestid   ! local integer 
    13591360      LOGICAL ::   found        ! local logical 
     1361      LOGICAL ::   luxios 
     1362      luxios = .FALSE. 
     1363      if(PRESENT(ldxios)) luxios = ldxios 
    13601364      !!---------------------------------------------------------------------- 
    13611365      ! 
     
    13811385      IF( .NOT.found ) THEN 
    13821386         kwgt = nxt_wgt 
    1383          CALL fld_weight( sd ) 
     1387         CALL fld_weight( sd, luxios ) 
    13841388      ENDIF 
    13851389      ! 
     
    14161420 
    14171421 
    1418    SUBROUTINE fld_weight( sd ) 
     1422   SUBROUTINE fld_weight( sd, ldxios ) 
    14191423      !!--------------------------------------------------------------------- 
    14201424      !!                    ***  ROUTINE fld_weight  *** 
     
    14241428      !!---------------------------------------------------------------------- 
    14251429      TYPE( FLD ), INTENT(in) ::   sd   ! field with name of weights file 
     1430      LOGICAL, INTENT(in), OPTIONAL :: ldxios 
    14261431      !! 
    14271432      INTEGER ::   jn         ! dummy loop indices 
     
    14351440      INTEGER,  DIMENSION(jpi,jpj) ::   data_src 
    14361441      REAL(wp), DIMENSION(jpi,jpj) ::   data_tmp 
     1442      LOGICAL                      ::   luxios 
    14371443      !!---------------------------------------------------------------------- 
     1444      luxios = .FALSE. 
     1445      IF(PRESENT(ldxios)) luxios = ldxios 
    14381446      ! 
    14391447      IF( nxt_wgt > tot_wgts ) THEN 
     
    14641472      CALL iom_open ( sd%wgtname, inum )   ! interpolation weights 
    14651473      IF ( inum > 0 ) THEN 
    1466  
     1474         IF(luxios) THEN  
     1475            CALL iom_swap(cbwxios_context) 
     1476         ENDIF 
    14671477         !! determine whether we have an east-west cyclic grid 
    14681478         !! from global attribute called "ew_wrap" in the weights file 
     
    15111521            WRITE(aname,'(a3,i2.2)') 'src',jn 
    15121522            data_tmp(:,:) = 0 
    1513             CALL iom_get ( inum, jpdom_data, aname, data_tmp(:,:) ) 
     1523            IF(luxios) THEN 
     1524               CALL iom_get ( inum, jpdom_data, aname//TRIM(sd%wgtname), data_tmp(:,:), ldxios = luxios ) 
     1525            ELSE 
     1526               CALL iom_get ( inum, jpdom_data, aname, data_tmp(:,:) ) 
     1527            ENDIF 
    15141528            data_src(:,:) = INT(data_tmp(:,:)) 
    15151529            ref_wgts(nxt_wgt)%data_jpj(:,:,jn) = 1 + (data_src(:,:)-1) / ref_wgts(nxt_wgt)%ddims(1) 
     
    15211535            WRITE(aname,'(a3,i2.2)') 'wgt',jn 
    15221536            ref_wgts(nxt_wgt)%data_wgt(:,:,jn) = 0.0 
    1523             CALL iom_get ( inum, jpdom_data, aname, ref_wgts(nxt_wgt)%data_wgt(:,:,jn) ) 
     1537            IF(luxios) THEN 
     1538               CALL iom_get ( inum, jpdom_data, aname//TRIM(sd%wgtname), ref_wgts(nxt_wgt)%data_wgt(:,:,jn), ldxios = luxios ) 
     1539            ELSE 
     1540               CALL iom_get ( inum, jpdom_data, aname, ref_wgts(nxt_wgt)%data_wgt(:,:,jn) ) 
     1541            ENDIF 
    15241542         END DO 
    15251543         CALL iom_close (inum) 
     
    15481566         nxt_wgt = nxt_wgt + 1 
    15491567         ! 
     1568         IF(luxios) CALL iom_swap(cxios_context) 
    15501569      ELSE  
    15511570         CALL ctl_stop( '    fld_weight : unable to read the file ' ) 
Note: See TracChangeset for help on using the changeset viewer.