Ignore:
Timestamp:
2019-07-15T15:20:49+02:00 (15 months ago)
Author:
smasson
Message:

dev_r10984_HPC-13 : introduce a logical to force vertical interpolation if the number of vertical levels in bdy dta == jpk, see #2285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/SBC/fldread.F90

    r11267 r11268  
    8686      INTEGER, POINTER, DIMENSION(:)  ::   imap         !   Array of integer pointers to 1D arrays 
    8787      LOGICAL                         ::   ltotvel      !   total velocity or not (T/F) 
     88      LOGICAL                         ::   lzint        !   T if it requires a vertical interpolation 
    8889   END TYPE FLD 
    8990 
     
    616617      ! 
    617618      IF( ASSOCIATED(sdjf%imap) ) THEN 
    618          IF( sdjf%ln_tint ) THEN   ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fdta(:,:,:,2),                & 
    619             &                                        sdjf%nrec_a(1), sdjf%imap, sdjf%igrd, sdjf%ibdy, sdjf%ltotvel ) 
    620          ELSE                      ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fnow(:,:,:  ),                & 
    621             &                                        sdjf%nrec_a(1), sdjf%imap, sdjf%igrd, sdjf%ibdy, sdjf%ltotvel ) 
     619         IF( sdjf%ln_tint ) THEN   ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fdta(:,:,:,2), sdjf%nrec_a(1),   & 
     620            &                                        sdjf%imap, sdjf%igrd, sdjf%ibdy, sdjf%ltotvel, sdjf%lzint ) 
     621         ELSE                      ;   CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fnow(:,:,:  ), sdjf%nrec_a(1),   & 
     622            &                                        sdjf%imap, sdjf%igrd, sdjf%ibdy, sdjf%ltotvel, sdjf%lzint ) 
    622623         ENDIF 
    623624      ELSE IF( LEN(TRIM(sdjf%wgtname)) > 0 ) THEN 
     
    676677 
    677678    
    678    SUBROUTINE fld_map( knum, cdvar, pdta, krec, kmap, kgrd, kbdy, ldtotvel ) 
     679   SUBROUTINE fld_map( knum, cdvar, pdta, krec, kmap, kgrd, kbdy, ldtotvel, ldzint ) 
    679680      !!--------------------------------------------------------------------- 
    680681      !!                    ***  ROUTINE fld_map  *** 
     
    691692      INTEGER, OPTIONAL         , INTENT(in   ) ::   kgrd         ! grid type (t, u, v) 
    692693      INTEGER, OPTIONAL         , INTENT(in   ) ::   kbdy         ! bdy number 
    693       LOGICAL, OPTIONAL         , INTENT(in   ) ::   ldtotvel     ! true if toal ( = barotrop + barocline) velocity 
     694      LOGICAL, OPTIONAL         , INTENT(in   ) ::   ldtotvel     ! true if total ( = barotrop + barocline) velocity 
     695      LOGICAL, OPTIONAL         , INTENT(in   ) ::   ldzint       ! true if 3D variable requires a vertical interpolation 
    694696      !! 
    695697      INTEGER                                   ::   ipi          ! length of boundary data on local process 
     
    707709      CHARACTER(LEN=1),DIMENSION(3)             ::   clgrid 
    708710      LOGICAL                                   ::   lluld        ! is the variable using the unlimited dimension 
     711      LOGICAL                                   ::   llzint       ! local value of ldzint 
    709712      !!--------------------------------------------------------------------- 
    710713      ! 
     
    714717      ipj = SIZE( pdta, 2 )   ! must be equal to 1 
    715718      ipk = SIZE( pdta, 3 ) 
     719      ! 
     720      llzint = .FALSE. 
     721      IF( PRESENT(ldzint) )   llzint = ldzint 
    716722      ! 
    717723      idvar = iom_varid( knum, cdvar, kndims = indims, kdimsz = idimsz, lduld = lluld  ) 
     
    739745         CALL iom_get ( knum, jpdom_unknown, cdvar, zz_read(:,:,:), krec )   ! call iom_get with a 3D file 
    740746         ! 
    741          IF( ipkb /= ipk ) THEN   ! boundary data not on model vertical grid : vertical interpolation 
     747         IF( ipkb /= ipk .OR. llzint ) THEN   ! boundary data not on model vertical grid : vertical interpolation 
    742748            ! 
    743749            IF( ipk == jpk .AND. iom_varid(knum,'gdep'//clgrid(kgrd)) /= -1 .AND. iom_varid(knum,'e3'//clgrid(kgrd)) /= -1 ) THEN 
     
    11791185         sdf(jf)%imap       => NULL() 
    11801186         sdf(jf)%ltotvel    = .FALSE. 
     1187         sdf(jf)%lzint      = .FALSE. 
    11811188      END DO 
    11821189      ! 
Note: See TracChangeset for help on using the changeset viewer.