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/IOM/iom.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/IOM/iom.F90

    r10817 r11405  
    10721072      llxios = .FALSE. 
    10731073      if(PRESENT(ldxios)) llxios = ldxios 
    1074       idvar = iom_varid( kiomid, cdvar )  
    10751074      idom = kdom 
    10761075      ! 
    10771076      IF(.NOT.llxios) THEN 
     1077         idvar = iom_varid( kiomid, cdvar ) 
    10781078         clname = iom_file(kiomid)%name   !   esier to read 
    10791079         clinfo = '          iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 
     
    12901290         ENDIF 
    12911291         ! 
     1292         !--- Apply scale_factor and offset 
     1293         zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
     1294         zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
     1295         IF(     PRESENT(pv_r1d) ) THEN 
     1296            IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf 
     1297            IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
     1298         ELSEIF( PRESENT(pv_r2d) ) THEN 
     1299            IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
     1300            IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs 
     1301         ELSEIF( PRESENT(pv_r3d) ) THEN 
     1302            IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
     1303            IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
     1304         ENDIF 
    12921305      ELSE        ! read using XIOS. Only if KEY_IOMPUT is defined 
    12931306#if defined key_iomput 
    1294 !would be good to be able to check which context is active and swap only if current is not restart 
    1295          CALL iom_swap( TRIM(crxios_context) )  
    12961307         IF( PRESENT(pv_r3d) ) THEN 
    12971308            pv_r3d(:, :, :) = 0. 
    1298             if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 
     1309            if(lwp) write(numout,*) 'XIOS READ (3D): ',trim(cdvar) 
    12991310            CALL xios_recv_field( trim(cdvar), pv_r3d) 
    13001311            IF(idom /= jpdom_unknown ) then 
     
    13031314         ELSEIF( PRESENT(pv_r2d) ) THEN 
    13041315            pv_r2d(:, :) = 0. 
    1305             if(lwp) write(numout,*) 'XIOS RST READ (2D): ', trim(cdvar) 
     1316            if(lwp) write(numout,*) 'XIOS READ (2D): ', trim(cdvar) 
    13061317            CALL xios_recv_field( trim(cdvar), pv_r2d) 
    13071318            IF(idom /= jpdom_unknown ) THEN 
     
    13101321         ELSEIF( PRESENT(pv_r1d) ) THEN 
    13111322            pv_r1d(:) = 0. 
    1312             if(lwp) write(numout,*) 'XIOS RST READ (1D): ', trim(cdvar) 
     1323            if(lwp) write(numout,*) 'XIOS READ (1D): ', trim(cdvar) 
    13131324            CALL xios_recv_field( trim(cdvar), pv_r1d) 
    13141325         ENDIF 
    1315          CALL iom_swap( TRIM(cxios_context) ) 
    13161326#else 
    13171327         istop = istop + 1  
     
    13231333      IF( lk_c1d .AND. PRESENT(pv_r2d) )   CALL lbc_lnk( 'iom', pv_r2d,'Z',1. ) 
    13241334      IF( lk_c1d .AND. PRESENT(pv_r3d) )   CALL lbc_lnk( 'iom', pv_r3d,'Z',1. ) 
    1325  
    1326       !--- Apply scale_factor and offset 
    1327       zscf = iom_file(kiomid)%scf(idvar)      ! scale factor 
    1328       zofs = iom_file(kiomid)%ofs(idvar)      ! offset 
    1329       IF(     PRESENT(pv_r1d) ) THEN 
    1330          IF( zscf /= 1. )   pv_r1d(:) = pv_r1d(:) * zscf  
    1331          IF( zofs /= 0. )   pv_r1d(:) = pv_r1d(:) + zofs 
    1332       ELSEIF( PRESENT(pv_r2d) ) THEN 
    1333          IF( zscf /= 1.)   pv_r2d(:,:) = pv_r2d(:,:) * zscf 
    1334          IF( zofs /= 0.)   pv_r2d(:,:) = pv_r2d(:,:) + zofs 
    1335       ELSEIF( PRESENT(pv_r3d) ) THEN 
    1336          IF( zscf /= 1.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 
    1337          IF( zofs /= 0.)   pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 
    1338       ENDIF 
    13391335      ! 
    13401336   END SUBROUTINE iom_get_123d 
Note: See TracChangeset for help on using the changeset viewer.