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

Ignore:
Timestamp:
2019-11-22T15:29:17+01:00 (5 years ago)
Author:
acc
Message:

Merge in changes from 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. This just creates a fresh copy of this branch to use as the merge base. See ticket #2341

Location:
NEMO/branches/2019/dev_r11943_MERGE_2019/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src

    • Property svn:mergeinfo deleted
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/SBC/fldread.F90

    r11536 r11949  
    129129CONTAINS 
    130130 
    131    SUBROUTINE fld_read( kt, kn_fsbc, sd, kit, kt_offset ) 
     131   SUBROUTINE fld_read( kt, kn_fsbc, sd, kit, kt_offset, Kmm ) 
    132132      !!--------------------------------------------------------------------- 
    133133      !!                    ***  ROUTINE fld_read  *** 
     
    149149      !                                                     !   kt_offset = +1 => fields at "after"  time level 
    150150      !                                                     !   etc. 
     151      INTEGER  , INTENT(in   ), OPTIONAL     ::   Kmm   ! ocean time level index 
    151152      !! 
    152153      INTEGER  ::   itmp         ! local variable 
     
    275276                   
    276277               ! read after data 
    277                CALL fld_get( sd(jf) ) 
     278 
     279               CALL fld_get( sd(jf), Kmm ) 
    278280                
    279281            ENDIF   ! read new data? 
     
    598600 
    599601 
    600    SUBROUTINE fld_get( sdjf ) 
     602   SUBROUTINE fld_get( sdjf, Kmm ) 
    601603      !!--------------------------------------------------------------------- 
    602604      !!                    ***  ROUTINE fld_get  *** 
     
    605607      !!---------------------------------------------------------------------- 
    606608      TYPE(FLD)        , INTENT(inout) ::   sdjf   ! input field related variables 
     609      INTEGER  , INTENT(in), OPTIONAL  ::   Kmm     ! ocean time level index 
    607610      ! 
    608611      INTEGER ::   ipk      ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) 
     
    676679   END SUBROUTINE fld_get 
    677680 
    678     
    679    SUBROUTINE fld_map( knum, cdvar, pdta, krec, kmap, kgrd, kbdy, ldtotvel, ldzint ) 
     681   SUBROUTINE fld_map( knum, cdvar, pdta, krec, kmap, kgrd, kbdy, ldtotvel, ldzint, Kmm ) 
    680682      !!--------------------------------------------------------------------- 
    681683      !!                    ***  ROUTINE fld_map  *** 
     
    694696      LOGICAL, OPTIONAL         , INTENT(in   ) ::   ldtotvel     ! true if total ( = barotrop + barocline) velocity 
    695697      LOGICAL, OPTIONAL         , INTENT(in   ) ::   ldzint       ! true if 3D variable requires a vertical interpolation 
     698      INTEGER, OPTIONAL         , INTENT(in   ) ::   Kmm          ! ocean time level index  
    696699      !! 
    697700      INTEGER                                   ::   ipi          ! length of boundary data on local process 
     
    822825   END SUBROUTINE fld_map_core 
    823826    
    824     
    825    SUBROUTINE fld_bdy_interp(pdta_read, pdta_read_z, pdta_read_dz, pdta, kgrd, kbdy, pfv, ldtotvel) 
     827   SUBROUTINE fld_bdy_interp(pdta_read, pdta_read_z, pdta_read_dz, pdta, kgrd, kbdy, pfv, ldtotvel, Kmm ) 
    826828      !!--------------------------------------------------------------------- 
    827829      !!                    ***  ROUTINE fld_bdy_interp  *** 
     
    840842      INTEGER                   , INTENT(in   ) ::   kgrd            ! grid type (t, u, v) 
    841843      INTEGER                   , INTENT(in   ) ::   kbdy            ! bdy number 
     844      INTEGER, OPTIONAL         , INTENT(in   ) ::   Kmm             ! ocean time level index 
    842845      !! 
    843846      INTEGER                                   ::   ipi             ! length of boundary data on local process 
     
    868871         SELECT CASE( kgrd )                          
    869872         CASE(1) 
    870             IF( ABS( (zh - ht_n(ji,jj)) / ht_n(ji,jj)) * tmask(ji,jj,1) > 0.01_wp ) THEN 
     873            IF( ABS( (zh - ht(ji,jj)) / ht(ji,jj)) * tmask(ji,jj,1) > 0.01_wp ) THEN 
    871874               WRITE(ctmp1,"(I10.10)") jb  
    872875               CALL ctl_warn('fld_bdy_interp: T depths differ between grids at BDY point '//TRIM(ctmp1)//' by more than 1%') 
    873                !   IF(lwp) WRITE(numout,*) 'DEPTHT', zh, sum(e3t_n(ji,jj,:), mask=tmask(ji,jj,:)==1),  ht_n(ji,jj), jb, jb, ji, jj 
     876               !   IF(lwp) WRITE(numout,*) 'DEPTHT', zh, sum(e3t(ji,jj,:,Kmm), mask=tmask(ji,jj,:)==1),  ht(ji,jj), jb, jb, ji, jj 
    874877            ENDIF 
    875878         CASE(2) 
    876             IF( ABS( (zh - hu_n(ji,jj)) * r1_hu_n(ji,jj)) * umask(ji,jj,1) > 0.01_wp ) THEN 
     879            IF( ABS( (zh - hu(ji,jj,Kmm)) * r1_hu(ji,jj,Kmm)) * umask(ji,jj,1) > 0.01_wp ) THEN 
    877880               WRITE(ctmp1,"(I10.10)") jb  
    878881               CALL ctl_warn('fld_bdy_interp: U depths differ between grids at BDY point '//TRIM(ctmp1)//' by more than 1%') 
    879                !   IF(lwp) WRITE(numout,*) 'DEPTHU', zh, SUM(e3u_n(ji,jj,:), mask=umask(ji,jj,:)==1),  SUM(umask(ji,jj,:)), & 
    880                !      &                hu_n(ji,jj), jb, jb, ji, jj, narea-1, pdta_read(jb,1,:) 
     882               !   IF(lwp) WRITE(numout,*) 'DEPTHU', zh, SUM(e3u(ji,jj,:,Kmm), mask=umask(ji,jj,:)==1),  SUM(umask(ji,jj,:)), & 
     883               !      &                hu(ji,jj,Kmm), jb, jb, ji, jj, narea-1, pdta_read(jb,1,:) 
    881884            ENDIF 
    882885         CASE(3) 
    883             IF( ABS( (zh - hv_n(ji,jj)) * r1_hv_n(ji,jj)) * vmask(ji,jj,1) > 0.01_wp ) THEN 
     886            IF( ABS( (zh - hv(ji,jj,Kmm)) * r1_hv(ji,jj,Kmm)) * vmask(ji,jj,1) > 0.01_wp ) THEN 
    884887               WRITE(ctmp1,"(I10.10)") jb 
    885888               CALL ctl_warn('fld_bdy_interp: V depths differ between grids at BDY point '//TRIM(ctmp1)//' by more than 1%') 
     
    890893         CASE(1) 
    891894            ! depth of T points: 
    892             zdepth(:) = gdept_n(ji,jj,:) 
     895            zdepth(:) = gdept(ji,jj,:,Kmm) 
    893896         CASE(2) 
    894897            ! depth of U points: we must not use gdept_n as we don't want to do a communication 
    895898            !   --> copy what is done for gdept_n in domvvl... 
    896899            zdhalf(1) = 0.0_wp 
    897             zdepth(1) = 0.5_wp * e3uw_n(ji,jj,1) 
     900            zdepth(1) = 0.5_wp * e3uw(ji,jj,1,Kmm) 
    898901            DO jk = 2, jpk                               ! vertical sum 
    899902               !    zcoef = umask - wumask    ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
     
    902905               !!gm ???????   BUG ?  gdept_n as well as gde3w_n  does not include the thickness of ISF ?? 
    903906               zcoef = ( umask(ji,jj,jk) - wumask(ji,jj,jk) ) 
    904                zdhalf(jk) = zdhalf(jk-1) + e3u_n(ji,jj,jk-1) 
    905                zdepth(jk) =      zcoef  * ( zdhalf(jk  ) + 0.5 * e3uw_n(ji,jj,jk))  & 
    906                   &         + (1-zcoef) * ( zdepth(jk-1) +       e3uw_n(ji,jj,jk)) 
     907               zdhalf(jk) = zdhalf(jk-1) + e3u(ji,jj,jk-1,Kmm) 
     908               zdepth(jk) =      zcoef  * ( zdhalf(jk  ) + 0.5 * e3uw(ji,jj,jk,Kmm))  & 
     909                  &         + (1-zcoef) * ( zdepth(jk-1) + e3uw(ji,jj,jk,Kmm)) 
    907910            END DO 
    908911         CASE(3) 
     
    910913            !   --> copy what is done for gdept_n in domvvl... 
    911914            zdhalf(1) = 0.0_wp 
    912             zdepth(1) = 0.5_wp * e3vw_n(ji,jj,1) 
     915            zdepth(1) = 0.5_wp * e3vw(ji,jj,1,Kmm) 
    913916            DO jk = 2, jpk                               ! vertical sum 
    914917               !    zcoef = vmask - wvmask    ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
     
    917920               !!gm ???????   BUG ?  gdept_n as well as gde3w_n  does not include the thickness of ISF ?? 
    918921               zcoef = ( vmask(ji,jj,jk) - wvmask(ji,jj,jk) ) 
    919                zdhalf(jk) = zdhalf(jk-1) + e3v_n(ji,jj,jk-1) 
    920                zdepth(jk) =      zcoef  * ( zdhalf(jk  ) + 0.5 * e3vw_n(ji,jj,jk))  & 
    921                   &         + (1-zcoef) * ( zdepth(jk-1) +       e3vw_n(ji,jj,jk)) 
     922               zdhalf(jk) = zdhalf(jk-1) + e3v(ji,jj,jk-1,Kmm) 
     923               zdepth(jk) =      zcoef  * ( zdhalf(jk  ) + 0.5 * e3vw(ji,jj,jk,Kmm))  & 
     924                  &         + (1-zcoef) * ( zdepth(jk-1) + e3vw(ji,jj,jk,Kmm)) 
    922925            END DO 
    923926         END SELECT 
     
    952955            ENDDO 
    953956            DO jk = 1, jpk                                ! calculate transport on model grid 
    954                ztrans_new = ztrans_new +      pdta(jb,1,jk ) *        e3u_n(ji,jj,jk ) * umask(ji,jj,jk) 
     957               ztrans_new = ztrans_new +      pdta(jb,1,jk ) *        e3u(ji,jj,jk,Kmm ) * umask(ji,jj,jk) 
    955958            ENDDO 
    956959            DO jk = 1, jpk                                ! make transport correction 
    957960               IF(ldtotvel) THEN ! bdy data are total velocity so adjust bt transport term to match input data 
    958                   pdta(jb,1,jk) = ( pdta(jb,1,jk) + ( ztrans - ztrans_new ) * r1_hu_n(ji,jj) ) * umask(ji,jj,jk) 
     961                  pdta(jb,1,jk) = ( pdta(jb,1,jk) + ( ztrans - ztrans_new ) * r1_hu(ji,jj,Kmm) ) * umask(ji,jj,jk) 
    959962               ELSE ! we're just dealing with bc velocity so bt transport term should sum to zero 
    960                   pdta(jb,1,jk) =   pdta(jb,1,jk) + (  0._wp - ztrans_new ) * r1_hu_n(ji,jj)   * umask(ji,jj,jk) 
     963                  pdta(jb,1,jk) =   pdta(jb,1,jk) + (  0._wp - ztrans_new ) * r1_hu(ji,jj,Kmm)   * umask(ji,jj,jk) 
    961964               ENDIF 
    962965            ENDDO 
     
    975978            ENDDO 
    976979            DO jk = 1, jpk                                ! calculate transport on model grid 
    977                ztrans_new = ztrans_new +      pdta(jb,1,jk ) *        e3v_n(ji,jj,jk ) * vmask(ji,jj,jk) 
     980               ztrans_new = ztrans_new +      pdta(jb,1,jk ) *        e3v(ji,jj,jk,Kmm ) * vmask(ji,jj,jk) 
    978981            ENDDO 
    979982            DO jk = 1, jpk                                ! make transport correction 
    980983               IF(ldtotvel) THEN ! bdy data are total velocity so adjust bt transport term to match input data 
    981                   pdta(jb,1,jk) = ( pdta(jb,1,jk) + ( ztrans - ztrans_new ) * r1_hv_n(ji,jj) ) * vmask(ji,jj,jk) 
     984                  pdta(jb,1,jk) = ( pdta(jb,1,jk) + ( ztrans - ztrans_new ) * r1_hv(ji,jj,Kmm) ) * vmask(ji,jj,jk) 
    982985               ELSE ! we're just dealing with bc velocity so bt transport term should sum to zero 
    983                   pdta(jb,1,jk) =   pdta(jb,1,jk) + (  0._wp - ztrans_new ) * r1_hv_n(ji,jj)   * vmask(ji,jj,jk) 
     986                  pdta(jb,1,jk) =   pdta(jb,1,jk) + (  0._wp - ztrans_new ) * r1_hv(ji,jj,Kmm)   * vmask(ji,jj,jk) 
    984987               ENDIF 
    985988            ENDDO 
Note: See TracChangeset for help on using the changeset viewer.