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 8741 for branches/2017/dev_r8624_AGRIF3_VVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90 – NEMO

Ignore:
Timestamp:
2017-11-17T17:19:55+01:00 (6 years ago)
Author:
jchanut
Message:

AGRIF + vvl Main changes - #1965

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8624_AGRIF3_VVL/NEMOGCM/NEMO/NST_SRC/agrif_opa_interp.F90

    r7646 r8741  
    2424   USE agrif_oce 
    2525   USE phycst 
     26   USE dynspg_ts, ONLY: un_adv, vn_adv 
    2627   ! 
    2728   USE in_out_manager 
     
    3839   PUBLIC   interpunb, interpvnb, interpub2b, interpvb2b 
    3940   PUBLIC   interpe3t, interpumsk, interpvmsk 
    40 # if defined key_zdftke 
    41    PUBLIC   Agrif_tke, interpavm 
     41# if defined key_zdftke || defined key_zdfgls 
     42   PUBLIC   Agrif_avm, interpavm 
    4243# endif 
    4344 
     
    449450      INTEGER :: ji, jj 
    450451      LOGICAL :: ll_int_cons 
    451       REAL(wp) :: zrhot, zt 
    452452      !!----------------------------------------------------------------------   
    453453      ! 
     
    456456      ll_int_cons = ln_bt_fw ! Assume conservative temporal integration in the forward case only 
    457457      ! 
    458       zrhot = Agrif_rhot() 
    459       ! 
    460       ! "Central" time index for interpolation: 
    461       IF( ln_bt_fw ) THEN 
    462          zt = REAL( Agrif_NbStepint()+0.5_wp, wp ) / zrhot 
    463       ELSE 
    464          zt = REAL( Agrif_NbStepint()       , wp ) / zrhot 
    465       ENDIF 
    466       ! 
    467       ! Linear interpolation of sea level 
    468       Agrif_SpecialValue    = 0._wp 
    469       Agrif_UseSpecialValue = .TRUE. 
    470       CALL Agrif_Bc_variable( sshn_id, calledweight=zt, procname=interpsshn ) 
    471       Agrif_UseSpecialValue = .FALSE. 
     458      ! Enforce volume conservation if no time refinement:   
     459      IF ( Agrif_rhot()==1 ) ll_int_cons=.TRUE.   
    472460      ! 
    473461      ! Interpolate barotropic fluxes 
    474       Agrif_SpecialValue=0. 
     462      Agrif_SpecialValue=0._wp 
    475463      Agrif_UseSpecialValue = ln_spc_dyn 
    476464      ! 
     
    491479         ubdy_n(:) = 0._wp   ;   vbdy_n(:) = 0._wp  
    492480         ubdy_s(:) = 0._wp   ;   vbdy_s(:) = 0._wp 
    493          CALL Agrif_Bc_variable( unb_id, calledweight=zt, procname=interpunb ) 
    494          CALL Agrif_Bc_variable( vnb_id, calledweight=zt, procname=interpvnb ) 
     481         CALL Agrif_Bc_variable( unb_id, procname=interpunb ) 
     482         CALL Agrif_Bc_variable( vnb_id, procname=interpvnb ) 
    495483      ENDIF 
    496484      Agrif_UseSpecialValue = .FALSE. 
     
    501489   SUBROUTINE Agrif_ssh( kt ) 
    502490      !!---------------------------------------------------------------------- 
    503       !!                  ***  ROUTINE Agrif_DYN  *** 
     491      !!                  ***  ROUTINE Agrif_ssh  *** 
    504492      !!----------------------------------------------------------------------   
    505493      INTEGER, INTENT(in) ::   kt 
    506494      !! 
     495      INTEGER :: ji, jj 
    507496      !!----------------------------------------------------------------------   
    508497      ! 
    509498      IF( Agrif_Root() )   RETURN 
     499      !       
     500      ! Linear interpolation in time of sea level 
     501      ! 
     502      Agrif_SpecialValue    = 0._wp 
     503      Agrif_UseSpecialValue = .TRUE. 
     504      CALL Agrif_Bc_variable(sshn_id, procname=interpsshn ) 
     505      Agrif_UseSpecialValue = .FALSE. 
    510506      ! 
    511507      IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    512          ssha(2,:)=ssha(3,:) 
    513          sshn(2,:)=sshn(3,:) 
     508         DO jj=1,jpj 
     509            ssha(2,jj) = hbdy_w(jj) 
     510         END DO 
    514511      ENDIF 
    515512      ! 
    516513      IF((nbondi == 1).OR.(nbondi == 2)) THEN 
    517          ssha(nlci-1,:)=ssha(nlci-2,:) 
    518          sshn(nlci-1,:)=sshn(nlci-2,:) 
     514         DO jj=1,jpj 
     515            ssha(nlci-1,jj) = hbdy_e(jj) 
     516         END DO 
    519517      ENDIF 
    520518      ! 
    521519      IF((nbondj == -1).OR.(nbondj == 2)) THEN 
    522          ssha(:,2)=ssha(:,3) 
    523          sshn(:,2)=sshn(:,3) 
     520         DO ji=1,jpi 
     521            ssha(ji,2) = hbdy_s(ji) 
     522         END DO 
    524523      ENDIF 
    525524      ! 
    526525      IF((nbondj == 1).OR.(nbondj == 2)) THEN 
    527          ssha(:,nlcj-1)=ssha(:,nlcj-2) 
    528          sshn(:,nlcj-1)=sshn(:,nlcj-2) 
     526         DO ji=1,jpi 
     527            ssha(ji,nlcj-1) = hbdy_n(ji) 
     528         END DO 
    529529      ENDIF 
    530530      ! 
     
    541541      !!----------------------------------------------------------------------   
    542542      ! 
     543      ! 
     544      IF( Agrif_Root() )   RETURN 
     545      ! 
    543546      IF((nbondi == -1).OR.(nbondi == 2)) THEN 
    544547         DO jj = 1, jpj 
     
    567570   END SUBROUTINE Agrif_ssh_ts 
    568571 
    569 # if defined key_zdftke 
    570  
    571    SUBROUTINE Agrif_tke 
    572       !!---------------------------------------------------------------------- 
    573       !!                  ***  ROUTINE Agrif_tke  *** 
     572# if defined key_zdftke || defined key_zdfgls 
     573 
     574   SUBROUTINE Agrif_avm 
     575      !!---------------------------------------------------------------------- 
     576      !!                  ***  ROUTINE Agrif_avm  *** 
    574577      !!----------------------------------------------------------------------   
    575578      REAL(wp) ::   zalpha 
    576579      !!----------------------------------------------------------------------   
    577580      ! 
    578       zalpha = REAL( Agrif_NbStepint() + Agrif_IRhot() - 1, wp ) / REAL( Agrif_IRhot(), wp ) 
    579       IF( zalpha > 1. )   zalpha = 1. 
     581      IF( Agrif_Root() )   RETURN 
     582      ! 
     583!      zalpha = REAL( Agrif_NbStepint() + Agrif_IRhot() - 1, wp ) / REAL( Agrif_IRhot(), wp ) 
     584!      IF( zalpha > 1. )   zalpha = 1. 
     585      zalpha = 1._wp ! JC: proper time interpolation impossible   
     586                     ! => use last available value from parent  
    580587      ! 
    581588      Agrif_SpecialValue    = 0.e0 
     
    586593      Agrif_UseSpecialValue = .FALSE. 
    587594      ! 
    588    END SUBROUTINE Agrif_tke 
     595   END SUBROUTINE Agrif_avm 
    589596    
    590597# endif 
     
    781788      ! 
    782789      IF( before ) THEN  
    783          DO jk = k1, jpk 
     790         DO jk = 1, jpkm1 
    784791            ptab(i1:i2,j1:j2,jk) = e2u(i1:i2,j1:j2) * e3u_n(i1:i2,j1:j2,jk) * un(i1:i2,j1:j2,jk) 
    785792         END DO 
     
    788795         DO jk = 1, jpkm1 
    789796            DO jj=j1,j2 
    790                ua(i1:i2,jj,jk) = ptab(i1:i2,jj,jk) / ( zrhoy * e2u(i1:i2,jj) * e3u_n(i1:i2,jj,jk) ) 
     797               ua(i1:i2,jj,jk) = ptab(i1:i2,jj,jk) / ( zrhoy * e2u(i1:i2,jj) * e3u_a(i1:i2,jj,jk) ) 
    791798            END DO 
    792799         END DO 
     
    808815      !!---------------------------------------------------------------------- 
    809816      !       
    810       IF( before ) THEN       !interpv entre 1 et k2 et interpv2d en jpkp1 
    811          DO jk = k1, jpk 
     817      IF( before ) THEN   
     818         DO jk = 1, jpkm1 
    812819            ptab(i1:i2,j1:j2,jk) = e1v(i1:i2,j1:j2) * e3v_n(i1:i2,j1:j2,jk) * vn(i1:i2,j1:j2,jk) 
    813820         END DO 
     
    815822         zrhox= Agrif_Rhox() 
    816823         DO jk = 1, jpkm1 
    817             va(i1:i2,j1:j2,jk) = ptab(i1:i2,j1:j2,jk) / ( zrhox * e1v(i1:i2,j1:j2) * e3v_n(i1:i2,j1:j2,jk) ) 
     824            va(i1:i2,j1:j2,jk) = ptab(i1:i2,j1:j2,jk) / ( zrhox * e1v(i1:i2,j1:j2) * e3v_a(i1:i2,j1:j2,jk) ) 
    818825         END DO 
    819826      ENDIF 
     
    978985      !!----------------------------------------------------------------------   
    979986      IF( before ) THEN 
    980          ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * ub2_b(i1:i2,j1:j2) 
     987         IF ( ln_bt_fw ) THEN 
     988            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * ub2_b(i1:i2,j1:j2) 
     989         ELSE 
     990            ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * un_adv(i1:i2,j1:j2) 
     991         ENDIF 
    981992      ELSE 
    982993         western_side  = (nb == 1).AND.(ndir == 1) 
     
    10161027      ! 
    10171028      IF( before ) THEN 
    1018          ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vb2_b(i1:i2,j1:j2) 
     1029         IF ( ln_bt_fw ) THEN 
     1030            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vb2_b(i1:i2,j1:j2) 
     1031         ELSE 
     1032            ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * vn_adv(i1:i2,j1:j2) 
     1033         ENDIF 
    10191034      ELSE       
    10201035         western_side  = (nb == 1).AND.(ndir == 1) 
     
    11751190   END SUBROUTINE interpvmsk 
    11761191 
    1177 # if defined key_zdftke 
     1192# if defined key_zdftke || defined key_zdfgls 
    11781193 
    11791194   SUBROUTINE interpavm( ptab, i1, i2, j1, j2, k1, k2, before ) 
     
    11891204         ptab (i1:i2,j1:j2,k1:k2) = avm_k(i1:i2,j1:j2,k1:k2) 
    11901205      ELSE 
    1191          avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2) 
     1206         avm  (i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2) 
    11921207      ENDIF 
    11931208      ! 
    11941209   END SUBROUTINE interpavm 
    11951210 
    1196 # endif /* key_zdftke */ 
     1211# endif /* key_zdftke || key_zdfgls */ 
    11971212 
    11981213#else 
Note: See TracChangeset for help on using the changeset viewer.