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 9863 for NEMO/branches/2018/dev_r9838_ENHANCE04_MLF/src/NST/agrif_oce_update.F90 – NEMO

Ignore:
Timestamp:
2018-06-30T12:51:02+02:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-04): simplified implementation of the Euler stepping at nit000

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r9838_ENHANCE04_MLF/src/NST/agrif_oce_update.F90

    r9780 r9863  
    1212   !!            3.6  !  2014-09  (R. Benshila)  
    1313   !!---------------------------------------------------------------------- 
     14 
     15   !!---------------------------------------------------------------------- 
     16   !!   Agrif_Update_Tra   : T-S agrif update 
     17   !!   Agrif_Update_Dyn   : dynamics agrif update 
     18   !!   Agrif_Update_ssh   : sea surface height update 
     19   !!   Agrif_Update_Tke   :  
     20   !!   Agrif_Update_vvl   :  
     21   !!   dom_vvl_update_UVF :  
     22   !!   updateTS           :  
     23   !!   updateu            : 
     24   !!   correct_u_bdy      : 
     25   !!   updatev            : 
     26   !!   correct_v_bdy      : 
     27   !!   updateu2d          : 
     28   !!   updatev2d          : 
     29   !!   updateSSH          : 
     30   !!   updateub2b         : 
     31   !!   reflux_sshu        : 
     32   !!   updatevb2b         : 
     33   !!   reflux_sshv        : 
     34   !!   update_scales      : 
     35   !!   updateEN           : 
     36   !!   updateAVT          : 
     37   !!   updateAVM          : 
     38   !!   updatee3t          : 
     39   !!---------------------------------------------------------------------- 
     40 
    1441#if defined key_agrif  
    1542   !!---------------------------------------------------------------------- 
    1643   !!   'key_agrif'                                              AGRIF zoom 
    1744   !!---------------------------------------------------------------------- 
    18    USE par_oce 
    19    USE oce 
    20    USE dom_oce 
     45   USE par_oce        ! ocean parameter 
     46   USE oce            ! ocean variables 
     47   USE dom_oce        ! ocean domain 
    2148   USE zdf_oce        ! vertical physics: ocean variables  
    22    USE agrif_oce 
     49   USE agrif_oce      !  
    2350   ! 
    2451   USE in_out_manager ! I/O manager 
     
    6794      ! 
    6895   END SUBROUTINE Agrif_Update_Tra 
     96 
    6997 
    7098   SUBROUTINE Agrif_Update_Dyn( ) 
     
    125153   END SUBROUTINE Agrif_Update_Dyn 
    126154 
     155 
    127156   SUBROUTINE Agrif_Update_ssh( ) 
    128       !!--------------------------------------------- 
    129       !!   *** ROUTINE Agrif_Update_ssh *** 
    130       !!--------------------------------------------- 
     157      !!---------------------------------------------------------------------- 
     158      !!                   *** ROUTINE Agrif_Update_ssh *** 
     159      !!---------------------------------------------------------------------- 
    131160      !  
    132161      IF (Agrif_Root()) RETURN 
     
    163192 
    164193   SUBROUTINE Agrif_Update_Tke( ) 
    165       !!--------------------------------------------- 
    166       !!   *** ROUTINE Agrif_Update_Tke *** 
    167       !!--------------------------------------------- 
    168       !! 
     194      !!---------------------------------------------------------------------- 
     195      !!                   *** ROUTINE Agrif_Update_Tke *** 
     196      !!---------------------------------------------------------------------- 
    169197      !  
    170198      IF (Agrif_Root()) RETURN 
    171199      !        
    172200#  if defined TWO_WAY 
    173  
     201      ! 
    174202      Agrif_UseSpecialValueInUpdate = .TRUE. 
    175203      Agrif_SpecialValueFineGrid = 0. 
    176  
     204      ! 
    177205      CALL Agrif_Update_Variable( en_id, locupdate=(/0,0/), procname=updateEN  ) 
    178206      CALL Agrif_Update_Variable(avt_id, locupdate=(/0,0/), procname=updateAVT ) 
    179207      CALL Agrif_Update_Variable(avm_id, locupdate=(/0,0/), procname=updateAVM ) 
    180  
     208      ! 
    181209      Agrif_UseSpecialValueInUpdate = .FALSE. 
    182  
     210      ! 
    183211#  endif 
    184        
     212      ! 
    185213   END SUBROUTINE Agrif_Update_Tke 
    186214 
    187215 
    188216   SUBROUTINE Agrif_Update_vvl( ) 
    189       !!--------------------------------------------- 
    190       !!   *** ROUTINE Agrif_Update_vvl *** 
    191       !!--------------------------------------------- 
    192       ! 
    193       IF (Agrif_Root()) RETURN 
     217      !!---------------------------------------------------------------------- 
     218      !!                   *** ROUTINE Agrif_Update_vvl *** 
     219      !!---------------------------------------------------------------------- 
     220      ! 
     221      IF ( Agrif_Root() )  RETURN 
    194222      ! 
    195223#if defined TWO_WAY   
     
    214242   END SUBROUTINE Agrif_Update_vvl 
    215243 
     244 
    216245   SUBROUTINE dom_vvl_update_UVF 
    217       !!--------------------------------------------- 
    218       !!       *** ROUTINE dom_vvl_update_UVF *** 
    219       !!--------------------------------------------- 
    220       !! 
    221       INTEGER :: jk 
    222       REAL(wp):: zcoef 
    223       !!--------------------------------------------- 
    224  
    225       IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Finalize e3 on grid Number', & 
    226                   & Agrif_Fixed(), 'Step', Agrif_Nb_Step() 
    227  
    228       ! Save "old" scale factor (prior update) for subsequent asselin correction 
    229       ! of prognostic variables 
     246      !!---------------------------------------------------------------------- 
     247      !!                   *** ROUTINE dom_vvl_update_UVF *** 
     248      !!---------------------------------------------------------------------- 
     249      INTEGER ::   jk      ! dummy loop index 
     250      REAL(wp)::   zcoef   ! local scalar 
     251      !!---------------------------------------------------------------------- 
     252      ! 
     253      IF (lwp.AND.lk_agrif_debug)   Write(*,*) 'Finalize e3 on grid Number', & 
     254         &                                      Agrif_Fixed(), 'Step', Agrif_Nb_Step() 
     255 
     256      ! Save "old" scale factor (prior update) for subsequent asselin correction of prognostic variables 
    230257      ! ----------------------- 
    231       ! 
    232258      e3u_a(:,:,:) = e3u_n(:,:,:) 
    233259      e3v_a(:,:,:) = e3v_n(:,:,:) 
     
    239265      ! 1) NOW fields 
    240266      !-------------- 
    241        
    242          ! Vertical scale factor interpolations 
    243          ! ------------------------------------ 
    244       CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:) ,  'U' ) 
    245       CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:) ,  'V' ) 
    246       CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:) ,  'F' ) 
    247  
     267      !                       ! Vertical scale factor interpolations 
     268      CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n (:,:,:) , 'U' ) 
     269      CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n (:,:,:) , 'V' ) 
     270      CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n (:,:,:) , 'F' ) 
    248271      CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
    249272      CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
    250  
    251          ! Update total depths: 
    252          ! -------------------- 
     273      ! 
     274      !                       ! Update total depths 
    253275      hu_n(:,:) = 0._wp                        ! Ocean depth at U-points 
    254276      hv_n(:,:) = 0._wp                        ! Ocean depth at V-points 
     
    264286      ! 2) BEFORE fields: 
    265287      !------------------ 
    266       IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN 
    267          ! 
    268          ! Vertical scale factor interpolations 
    269          ! ------------------------------------ 
    270          CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:),  'U'  ) 
    271          CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:),  'V'  ) 
    272  
     288      IF (.NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN 
     289!!gm      IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN 
     290         !                    ! Vertical scale factor interpolations 
     291         CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b (:,:,:), 'U'  ) 
     292         CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b (:,:,:), 'V'  ) 
    273293         CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
    274294         CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
    275  
    276          ! Update total depths: 
    277          ! -------------------- 
     295         ! 
     296         !                    ! Update total depths: 
    278297         hu_b(:,:) = 0._wp                     ! Ocean depth at U-points 
    279298         hv_b(:,:) = 0._wp                     ! Ocean depth at V-points 
     
    289308   END SUBROUTINE dom_vvl_update_UVF 
    290309 
    291 #if defined key_vertical 
     310# if defined key_vertical 
    292311 
    293312   SUBROUTINE updateTS( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    294313      !!---------------------------------------------------------------------- 
    295       !!           *** ROUTINE updateT *** 
    296       !!--------------------------------------------- 
     314      !!                   *** ROUTINE updateT *** 
     315      !!---------------------------------------------------------------------- 
    297316      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
    298317      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    306325      REAL(wp) :: zrho_xy, h_diff 
    307326      REAL(wp) :: tabin(k1:k2,n1:n2) 
    308       !!--------------------------------------------- 
     327      !!---------------------------------------------------------------------- 
    309328      ! 
    310329      IF (before) THEN 
    311330         AGRIF_SpecialValue = -999._wp 
    312331         zrho_xy = Agrif_rhox() * Agrif_rhoy()  
    313          DO jn = n1,n2-1 
    314             DO jk=k1,k2 
    315                DO jj=j1,j2 
    316                   DO ji=i1,i2 
     332         DO jn = n1, n2-1 
     333            DO jk = k1, k2 
     334               DO jj = j1, j2 
     335                  DO ji = i1, i2 
    317336                     tabres(ji,jj,jk,jn) = (tsn(ji,jj,jk,jn) * e3t_n(ji,jj,jk) ) & 
    318337                                           * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1)*999._wp 
     
    321340            END DO 
    322341         END DO 
    323          DO jk=k1,k2 
    324             DO jj=j1,j2 
    325                DO ji=i1,i2 
     342         DO jk = k1, k2 
     343            DO jj = j1, j2 
     344               DO ji = i1, i2 
    326345                  tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) & 
    327346                                           + (tmask(ji,jj,jk)-1)*999._wp 
     
    332351         tabres_child(:,:,:,:) = 0. 
    333352         AGRIF_SpecialValue = 0._wp 
    334          DO jj=j1,j2 
    335             DO ji=i1,i2 
     353         DO jj = j1 , j2 
     354            DO ji = i1, i2 
    336355               N_in = 0 
    337                DO jk=k1,k2 !k2 = jpk of child grid 
    338                   IF (tabres(ji,jj,jk,n2) == 0  ) EXIT 
     356               DO jk = k1, k2 !k2 = jpk of child grid 
     357                  IF ( tabres(ji,jj,jk,n2) == 0  )  EXIT 
    339358                  N_in = N_in + 1 
    340359                  tabin(jk,:) = tabres(ji,jj,jk,n1:n2-1)/tabres(ji,jj,jk,n2) 
    341                   h_in(N_in) = tabres(ji,jj,jk,n2) 
    342                ENDDO 
     360                  h_in (N_in) = tabres(ji,jj,jk,n2) 
     361               END DO 
    343362               N_out = 0 
    344                DO jk=1,jpk ! jpk of parent grid 
    345                   IF (tmask(ji,jj,jk) < -900) EXIT ! TODO: Will not work with ISF 
     363               DO jk = 1, jpk ! jpk of parent grid 
     364                  IF (tmask(ji,jj,jk) < -900)   EXIT ! TODO: Will not work with ISF 
    346365                  N_out = N_out + 1 
    347366                  h_out(N_out) = e3t_n(ji,jj,jk)  
    348                ENDDO 
     367               END DO 
    349368               IF (N_in > 0) THEN !Remove this? 
    350369                  h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
     
    355374                     STOP 
    356375                  ENDIF 
    357                   DO jn=n1,n2-1 
     376                  DO jn = n1, n2-1 
    358377                     CALL reconstructandremap(tabin(1:N_in,jn),h_in(1:N_in),tabres_child(ji,jj,1:N_out,jn),h_out(1:N_out),N_in,N_out) 
    359                   ENDDO 
     378                  END DO 
    360379               ENDIF 
    361             ENDDO 
    362          ENDDO 
    363  
    364          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     380            END DO 
     381         END DO 
     382 
     383         IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN 
     384!!gm         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    365385            ! Add asselin part 
    366             DO jn = n1,n2-1 
    367                DO jk=1,jpk 
    368                   DO jj=j1,j2 
    369                      DO ji=i1,i2 
    370                         IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN 
     386            DO jn = n1, n2-1 
     387               DO jk = 1, jpk 
     388                  DO jj = j1, j2 
     389                     DO ji = i1, i2 
     390                        IF( tabres_child(ji,jj,jk,jn) /= 0. ) THEN 
    371391                           tsb(ji,jj,jk,jn) = tsb(ji,jj,jk,jn) &  
    372392                                 & + atfp * ( tabres_child(ji,jj,jk,jn) & 
    373393                                 &          - tsn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 
    374394                        ENDIF 
    375                      ENDDO 
    376                   ENDDO 
    377                ENDDO 
    378             ENDDO 
    379          ENDIF 
    380          DO jn = n1,n2-1 
    381             DO jk=1,jpk 
    382                DO jj=j1,j2 
    383                   DO ji=i1,i2 
    384                      IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN  
     395                     END DO 
     396                  END DO 
     397               END DO 
     398            END DO 
     399         ENDIF 
     400         DO jn = n1, n2-1 
     401            DO jk = 1, jpk 
     402               DO jj = j1, j2 
     403                  DO ji = i1, i2 
     404                     IF( tabres_child(ji,jj,jk,jn) /= 0. ) THEN  
    385405                        tsn(ji,jj,jk,jn) = tabres_child(ji,jj,jk,jn) * tmask(ji,jj,jk) 
    386406                     END IF 
     
    396416 
    397417   SUBROUTINE updateTS( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    398       !!--------------------------------------------- 
    399       !!           *** ROUTINE updateT *** 
    400       !!--------------------------------------------- 
     418      !!---------------------------------------------------------------------- 
     419      !!                   *** ROUTINE ROUTINE updateT *** 
     420      !!---------------------------------------------------------------------- 
    401421      INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 
    402422      REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
    403423      LOGICAL, INTENT(in) :: before 
    404       !! 
     424      ! 
    405425      INTEGER :: ji,jj,jk,jn 
    406426      REAL(wp) :: ztb, ztnu, ztno 
    407       !!--------------------------------------------- 
     427      !!---------------------------------------------------------------------- 
    408428      ! 
    409429      IF (before) THEN 
     
    425445            tabres(i1:i2,j1:j2,k1:k2,jn) =  tabres(i1:i2,j1:j2,k1:k2,jn) * e3t_0(i1:i2,j1:j2,k1:k2) & 
    426446                                         & * tmask(i1:i2,j1:j2,k1:k2) 
    427          ENDDO 
     447         END DO 
    428448!< jc tmp 
    429          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     449         IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN 
     450!!gm         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    430451            ! Add asselin part 
    431452            DO jn = 1,jpts 
     
    457478         END DO 
    458479         ! 
    459          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     480         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
     481!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    460482            tsb(i1:i2,j1:j2,k1:k2,1:jpts)  = tsn(i1:i2,j1:j2,k1:k2,1:jpts) 
    461483         ENDIF 
     
    470492 
    471493   SUBROUTINE updateu( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    472       !!--------------------------------------------- 
    473       !!           *** ROUTINE updateu *** 
    474       !!--------------------------------------------- 
     494      !!---------------------------------------------------------------------- 
     495      !!                   *** ROUTINE updateu *** 
     496      !!---------------------------------------------------------------------- 
    475497      INTEGER                                     , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
    476498      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    487509      REAL(wp) :: tabin(k1:k2) 
    488510! VERTICAL REFINEMENT END 
    489       !!--------------------------------------------- 
     511      !!---------------------------------------------------------------------- 
    490512      !  
    491513      IF( before ) THEN 
     
    515537                  tabin(jk) = tabres(ji,jj,jk,1)/tabres(ji,jj,jk,2) 
    516538                  h_in(N_in) = tabres(ji,jj,jk,2)/e2u(ji,jj) 
    517                ENDDO 
     539               END DO 
    518540               N_out = 0 
    519541               DO jk=1,jpk 
     
    521543                  N_out = N_out + 1 
    522544                  h_out(N_out) = e3u_n(ji,jj,jk) 
    523                ENDDO 
     545               END DO 
    524546               IF (N_in * N_out > 0) THEN 
    525547                  h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
     
    538560                           EXIT 
    539561                        ENDIF 
    540                      ENDDO 
     562                     END DO 
    541563                  ENDIF 
    542564                  CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out) 
    543565                  tabres_child(ji,jj,N_out) = tabres_child(ji,jj,N_out) + excess/(e2u(ji,jj)*h_out(N_out)) 
    544566               ENDIF 
    545             ENDDO 
    546          ENDDO 
     567            END DO 
     568         END DO 
    547569 
    548570         DO jk=1,jpk 
    549571            DO jj=j1,j2 
    550572               DO ji=i1,i2 
    551                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
     573                  IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler) ) THEN    ! Add asselin part 
     574!!gm                  IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN   ! Add asselin part 
    552575                     ub(ji,jj,jk) = ub(ji,jj,jk) &  
    553576                           & + atfp * ( tabres_child(ji,jj,jk) - un(ji,jj,jk) ) * umask(ji,jj,jk) 
     
    565588 
    566589   SUBROUTINE updateu( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    567       !!--------------------------------------------- 
    568       !!           *** ROUTINE updateu *** 
    569       !!--------------------------------------------- 
     590      !!---------------------------------------------------------------------- 
     591      !!                   *** ROUTINE updateu *** 
     592      !!---------------------------------------------------------------------- 
    570593      INTEGER                               , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
    571594      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    574597      INTEGER  :: ji, jj, jk 
    575598      REAL(wp) :: zrhoy, zub, zunu, zuno 
    576       !!--------------------------------------------- 
     599      !!---------------------------------------------------------------------- 
    577600      !  
    578601      IF( before ) THEN 
     
    587610                  tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e2u(ji,jj)  
    588611                  ! 
    589                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
     612                  IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN    ! Add asselin part 
     613!!gm                  IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN   ! Add asselin part 
    590614                     zub  = ub(ji,jj,jk) * e3u_b(ji,jj,jk)  ! fse3t_b prior update should be used 
    591615                     zuno = un(ji,jj,jk) * e3u_a(ji,jj,jk) 
     
    600624         END DO 
    601625         ! 
    602          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     626         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
     627!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    603628            ub(i1:i2,j1:j2,k1:k2)  = un(i1:i2,j1:j2,k1:k2) 
    604629         ENDIF 
     
    611636 
    612637   SUBROUTINE correct_u_bdy( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before, nb, ndir ) 
    613       !!--------------------------------------------- 
    614       !!           *** ROUTINE correct_u_bdy *** 
    615       !!--------------------------------------------- 
     638      !!---------------------------------------------------------------------- 
     639      !!                   *** ROUTINE correct_u_bdy *** 
     640      !!---------------------------------------------------------------------- 
    616641      INTEGER                                     , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
    617642      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
    618643      LOGICAL                                     , INTENT(in   ) :: before 
    619       INTEGER                                     , INTENT(in)    :: nb, ndir 
     644      INTEGER                                     , INTENT(in   ) :: nb, ndir 
    620645      !! 
    621646      LOGICAL :: western_side, eastern_side  
    622       ! 
    623       INTEGER  :: jj, jk 
    624       REAL(wp) :: zcor 
    625       !!--------------------------------------------- 
     647      INTEGER ::   jj, jk 
     648      REAL(wp)::   zcor 
     649      !!---------------------------------------------------------------------- 
    626650      !  
    627651      IF( .NOT.before ) THEN 
     
    657681 
    658682   SUBROUTINE updatev( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) 
    659       !!--------------------------------------------- 
    660       !!           *** ROUTINE updatev *** 
    661       !!--------------------------------------------- 
     683      !!---------------------------------------------------------------------- 
     684      !!                   *** ROUTINE updatev *** 
     685      !!---------------------------------------------------------------------- 
    662686      INTEGER                                     , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
    663687      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    674698      REAL(wp) :: tabin(k1:k2) 
    675699! VERTICAL REFINEMENT END 
    676       !!---------------------------------------------       
     700      !!----------------------------------------------------------------------       
    677701      ! 
    678702      IF( before ) THEN 
     
    700724                  tabin(jk) = tabres(ji,jj,jk,1)/tabres(ji,jj,jk,2) 
    701725                  h_in(N_in) = tabres(ji,jj,jk,2)/e1v(ji,jj) 
    702                ENDDO 
     726               END DO 
    703727               N_out = 0 
    704728               DO jk=1,jpk 
     
    706730                  N_out = N_out + 1 
    707731                  h_out(N_out) = e3v_n(ji,jj,jk) 
    708                ENDDO 
     732               END DO 
    709733               IF (N_in * N_out > 0) THEN 
    710734                  h_diff = sum(h_out(1:N_out))-sum(h_in(1:N_in)) 
     
    723747                           EXIT 
    724748                        ENDIF 
    725                      ENDDO 
     749                     END DO 
    726750                  ENDIF 
    727751                  CALL reconstructandremap(tabin(1:N_in),h_in(1:N_in),tabres_child(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out) 
    728752                  tabres_child(ji,jj,N_out) = tabres_child(ji,jj,N_out) + excess/(e1v(ji,jj)*h_out(N_out)) 
    729753               ENDIF 
    730             ENDDO 
    731          ENDDO 
     754            END DO 
     755         END DO 
    732756 
    733757         DO jk=1,jpk 
     
    735759               DO ji=i1,i2 
    736760                  ! 
    737                   IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN ! Add asselin part 
     761                  IF( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN  ! Add asselin part 
     762!!gm                  IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN  ! Add asselin part 
    738763                     vb(ji,jj,jk) = vb(ji,jj,jk) &  
    739764                           & + atfp * ( tabres_child(ji,jj,jk) - vn(ji,jj,jk) ) * vmask(ji,jj,jk) 
     
    751776 
    752777   SUBROUTINE updatev( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before) 
    753       !!--------------------------------------------- 
    754       !!           *** ROUTINE updatev *** 
    755       !!--------------------------------------------- 
     778      !!---------------------------------------------------------------------- 
     779      !!                   *** ROUTINE updatev *** 
     780      !!---------------------------------------------------------------------- 
    756781      INTEGER                                     , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
    757782      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    760785      INTEGER  :: ji, jj, jk 
    761786      REAL(wp) :: zrhox, zvb, zvnu, zvno 
    762       !!---------------------------------------------       
     787      !!----------------------------------------------------------------------       
    763788      ! 
    764789      IF (before) THEN 
     
    777802                  tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e1v(ji,jj) 
    778803                  ! 
    779                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
     804                  IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN    ! Add asselin part 
     805!!gm                  IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN   ! Add asselin part 
    780806                     zvb  = vb(ji,jj,jk) * e3v_b(ji,jj,jk) ! fse3t_b prior update should be used 
    781807                     zvno = vn(ji,jj,jk) * e3v_a(ji,jj,jk) 
     
    790816         END DO 
    791817         ! 
    792          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     818         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
     819!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    793820            vb(i1:i2,j1:j2,k1:k2)  = vn(i1:i2,j1:j2,k1:k2) 
    794821         ENDIF 
     
    801828 
    802829   SUBROUTINE correct_v_bdy( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before, nb, ndir ) 
    803       !!--------------------------------------------- 
    804       !!           *** ROUTINE correct_u_bdy *** 
    805       !!--------------------------------------------- 
     830      !!---------------------------------------------------------------------- 
     831      !!                   *** ROUTINE correct_v_bdy *** 
     832      !!---------------------------------------------------------------------- 
    806833      INTEGER                                     , INTENT(in   ) :: i1, i2, j1, j2, k1, k2, n1, n2 
    807834      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 
     
    813840      INTEGER  :: ji, jk 
    814841      REAL(wp) :: zcor 
    815       !!--------------------------------------------- 
     842      !!---------------------------------------------------------------------- 
    816843      !  
    817844      IF( .NOT.before ) THEN 
     
    847874   SUBROUTINE updateu2d( tabres, i1, i2, j1, j2, before ) 
    848875      !!---------------------------------------------------------------------- 
    849       !!                      *** ROUTINE updateu2d *** 
     876      !!                   *** ROUTINE updateu2d *** 
    850877      !!---------------------------------------------------------------------- 
    851878      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
    852879      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
    853880      LOGICAL                         , INTENT(in   ) ::   before 
    854       !!  
     881      ! 
    855882      INTEGER  :: ji, jj, jk 
    856883      REAL(wp) :: zrhoy 
    857884      REAL(wp) :: zcorr 
    858       !!--------------------------------------------- 
     885      !!---------------------------------------------------------------------- 
    859886      ! 
    860887      IF( before ) THEN 
     
    883910               ! Update barotropic velocities: 
    884911               IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 
    885                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
     912                  IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN    ! Add asselin part 
     913!!gm                  IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    886914                     zcorr = (tabres(ji,jj) - un_b(ji,jj) * hu_a(ji,jj)) * r1_hu_b(ji,jj) 
    887915                     ub_b(ji,jj) = ub_b(ji,jj) + atfp * zcorr * umask(ji,jj,1) 
     
    904932         END DO 
    905933         ! 
    906          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     934         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
     935!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    907936            ub_b(i1:i2,j1:j2)  = un_b(i1:i2,j1:j2) 
    908937         ENDIF 
     
    948977               ! 
    949978               ! Update barotropic velocities: 
    950                IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 
    951                   IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
     979               IF ( .NOT.ln_dynspg_ts .OR. ( ln_dynspg_ts .AND. .NOT.ln_bt_fw ) ) THEN 
     980                  IF ( .NOT.( lk_agrif_fstep. AND. l_1st_euler ) ) THEN    ! Add asselin part 
     981!!gm                  IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 
    952982                     zcorr = (tabres(ji,jj) - vn_b(ji,jj) * hv_a(ji,jj)) * r1_hv_b(ji,jj) 
    953983                     vb_b(ji,jj) = vb_b(ji,jj) + atfp * zcorr * vmask(ji,jj,1) 
     
    9701000         END DO 
    9711001         ! 
    972          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     1002         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
     1003!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    9731004            vb_b(i1:i2,j1:j2)  = vn_b(i1:i2,j1:j2) 
    9741005         ENDIF 
     
    9861017      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
    9871018      LOGICAL                         , INTENT(in   ) ::   before 
    988       !! 
     1019      ! 
    9891020      INTEGER :: ji, jj 
    9901021      !!---------------------------------------------------------------------- 
     
    9971028         END DO 
    9981029      ELSE 
    999          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
     1030         IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN 
     1031!!gm         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 
    10001032            DO jj=j1,j2 
    10011033               DO ji=i1,i2 
     
    10121044         END DO 
    10131045         ! 
    1014          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     1046         IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 
     1047!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    10151048            sshb(i1:i2,j1:j2)  = sshn(i1:i2,j1:j2) 
    10161049         ENDIF 
    10171050         ! 
    1018  
    10191051      ENDIF 
    10201052      ! 
     
    10621094   END SUBROUTINE updateub2b 
    10631095 
     1096 
    10641097   SUBROUTINE reflux_sshu( tabres, i1, i2, j1, j2, before, nb, ndir ) 
    1065       !!--------------------------------------------- 
    1066       !!          *** ROUTINE reflux_sshu *** 
    1067       !!--------------------------------------------- 
    1068       INTEGER, INTENT(in) :: i1, i2, j1, j2 
    1069       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 
    1070       LOGICAL, INTENT(in) :: before 
    1071       INTEGER, INTENT(in) :: nb, ndir 
    1072       !! 
    1073       LOGICAL :: western_side, eastern_side  
    1074       INTEGER :: ji, jj 
    1075       REAL(wp) :: zrhoy, za1, zcor 
    1076       !!--------------------------------------------- 
     1098      !!---------------------------------------------------------------------- 
     1099      !!                   *** ROUTINE reflux_sshu *** 
     1100      !!---------------------------------------------------------------------- 
     1101      INTEGER                         , INTENT(in   ) ::  i1, i2, j1, j2 
     1102      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
     1103      LOGICAL                         , INTENT(in   ) ::  before 
     1104      INTEGER                         , INTENT(in   ) ::  nb, ndir 
     1105      ! 
     1106      LOGICAL ::   western_side, eastern_side  
     1107      INTEGER ::   ji, jj 
     1108      REAL(wp)::  zrhoy, za1, zcor 
     1109      !!---------------------------------------------------------------------- 
    10771110      ! 
    10781111      IF (before) THEN 
     
    10911124         eastern_side  = (nb == 1).AND.(ndir == 2) 
    10921125         ! 
    1093          IF (western_side) THEN 
     1126         IF ( western_side ) THEN 
    10941127            DO jj=j1,j2 
    10951128               zcor = rdt * r1_e1e2t(i1  ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj))  
    10961129               sshn(i1  ,jj) = sshn(i1  ,jj) + zcor 
    1097                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i1  ,jj) = sshb(i1  ,jj) + atfp * zcor 
    1098             END DO 
    1099          ENDIF 
    1100          IF (eastern_side) THEN 
     1130               IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   sshb(i1  ,jj) = sshb(i1  ,jj) + atfp * zcor 
     1131!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i1  ,jj) = sshb(i1  ,jj) + atfp * zcor 
     1132            END DO 
     1133         ENDIF 
     1134         IF ( eastern_side ) THEN 
    11011135            DO jj=j1,j2 
    11021136               zcor = - rdt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 
    11031137               sshn(i2+1,jj) = sshn(i2+1,jj) + zcor 
    1104                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i2+1,jj) = sshb(i2+1,jj) + atfp * zcor 
     1138               IF (.NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   sshb(i2+1,jj) = sshb(i2+1,jj) + atfp * zcor 
     1139!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i2+1,jj) = sshb(i2+1,jj) + atfp * zcor 
    11051140            END DO 
    11061141         ENDIF 
     
    11101145   END SUBROUTINE reflux_sshu 
    11111146 
     1147 
    11121148   SUBROUTINE updatevb2b( tabres, i1, i2, j1, j2, before ) 
    11131149      !!---------------------------------------------------------------------- 
    1114       !!                      *** ROUTINE updatevb2b *** 
     1150      !!                    *** ROUTINE updatevb2b *** 
    11151151      !!---------------------------------------------------------------------- 
    11161152      INTEGER                         , INTENT(in   ) ::   i1, i2, j1, j2 
    11171153      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
    11181154      LOGICAL                         , INTENT(in   ) ::   before 
    1119       !! 
     1155      ! 
    11201156      INTEGER :: ji, jj 
    11211157      REAL(wp) :: zrhox, za1, zcor 
    1122       !!--------------------------------------------- 
     1158      !!--------------------------------------------------------------------- 
    11231159      ! 
    11241160      IF( before ) THEN 
     
    11501186   END SUBROUTINE updatevb2b 
    11511187 
     1188 
    11521189   SUBROUTINE reflux_sshv( tabres, i1, i2, j1, j2, before, nb, ndir ) 
    1153       !!--------------------------------------------- 
    1154       !!          *** ROUTINE reflux_sshv *** 
    1155       !!--------------------------------------------- 
    1156       INTEGER, INTENT(in) :: i1, i2, j1, j2 
    1157       REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 
    1158       LOGICAL, INTENT(in) :: before 
    1159       INTEGER, INTENT(in) :: nb, ndir 
     1190      !!---------------------------------------------------------------------- 
     1191      !!                   *** ROUTINE reflux_sshv *** 
     1192      !!---------------------------------------------------------------------- 
     1193      INTEGER                         , INTENT(in   ) ::  i1, i2, j1, j2 
     1194      REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) ::   tabres 
     1195      LOGICAL                         , INTENT(in   ) ::  before 
     1196      INTEGER                         , INTENT(in   ) ::  nb, ndir 
    11601197      !! 
    11611198      LOGICAL :: southern_side, northern_side  
    11621199      INTEGER :: ji, jj 
    11631200      REAL(wp) :: zrhox, za1, zcor 
    1164       !!--------------------------------------------- 
     1201      !!---------------------------------------------------------------------- 
    11651202      ! 
    11661203      IF (before) THEN 
     
    11831220               zcor = rdt * r1_e1e2t(ji,j1  ) * e1v(ji,j1  ) * (vb2_b(ji,j1)-tabres(ji,j1)) 
    11841221               sshn(ji,j1  ) = sshn(ji,j1  ) + zcor 
    1185                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j1  ) = sshb(ji,j1) + atfp * zcor 
     1222               IF ( .NOT.( lk_agrif_fstep .AND. l_euler ) )   sshb(ji,j1  ) = sshb(ji,j1) + atfp * zcor 
     1223!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j1  ) = sshb(ji,j1) + atfp * zcor 
    11861224            END DO 
    11871225         ENDIF 
     
    11901228               zcor = - rdt * r1_e1e2t(ji,j2+1) * e1v(ji,j2  ) * (vb2_b(ji,j2)-tabres(ji,j2)) 
    11911229               sshn(ji,j2+1) = sshn(ji,j2+1) + zcor 
    1192                IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j2+1) = sshb(ji,j2+1) + atfp * zcor 
     1230               IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) )   sshb(ji,j2+1) = sshb(ji,j2+1) + atfp * zcor 
     1231!!gm               IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j2+1) = sshb(ji,j2+1) + atfp * zcor 
    11931232            END DO 
    11941233         ENDIF 
     
    11981237   END SUBROUTINE reflux_sshv 
    11991238 
     1239 
    12001240   SUBROUTINE update_scales( tabres, i1, i2, j1, j2, k1, k2, n1,n2, before ) 
     1241      !!---------------------------------------------------------------------- 
     1242      !!                      *** ROUTINE updateT *** 
    12011243      ! 
    12021244      ! ====>>>>>>>>>>    currently not used 
    12031245      ! 
    1204       !!---------------------------------------------------------------------- 
    1205       !!                      *** ROUTINE updateT *** 
    12061246      !!---------------------------------------------------------------------- 
    12071247      INTEGER                                    , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2, n1, n2 
     
    12841324 
    12851325   SUBROUTINE updateAVM( ptab, i1, i2, j1, j2, k1, k2, before ) 
    1286       !!--------------------------------------------- 
    1287       !!           *** ROUTINE updateavm *** 
     1326      !!---------------------------------------------------------------------- 
     1327      !!                      *** ROUTINE updateavm *** 
    12881328      !!---------------------------------------------------------------------- 
    12891329      INTEGER                               , INTENT(in   ) ::   i1, i2, j1, j2, k1, k2 
     
    12981338   END SUBROUTINE updateAVM 
    12991339 
     1340 
    13001341   SUBROUTINE updatee3t(ptab_dum, i1, i2, j1, j2, k1, k2, before ) 
    1301       !!--------------------------------------------- 
    1302       !!           *** ROUTINE updatee3t *** 
    1303       !!--------------------------------------------- 
     1342      !!---------------------------------------------------------------------- 
     1343      !!                   *** ROUTINE updatee3t *** 
     1344      !!---------------------------------------------------------------------- 
    13041345      REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: ptab_dum 
    13051346      INTEGER, INTENT(in) :: i1, i2, j1, j2, k1, k2 
     
    13131354      IF (.NOT.before) THEN 
    13141355         ! 
    1315          ALLOCATE(ptab(i1:i2,j1:j2,1:jpk))  
     1356         ALLOCATE( ptab(i1:i2,j1:j2,1:jpk) )  
    13161357         ! 
    13171358         ! Update e3t from ssh (z* case only) 
     
    13351376!         hdivn(i1:i2,j1:j2,1:jpkm1)   = e3t_b(i1:i2,j1:j2,1:jpkm1) 
    13361377 
    1337          IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN 
     1378         IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler==0 ) ) THEN 
     1379!!gm         IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN 
    13381380            DO jk = 1, jpkm1 
    13391381               DO jj=j1,j2 
     
    13981440         END DO 
    13991441         ! 
    1400          IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
     1442         IF ( l_1st_euler .AND. Agrif_Nb_Step()==0 ) THEN 
     1443!!gm         IF  ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 
    14011444            e3t_b (i1:i2,j1:j2,1:jpk)  = e3t_n (i1:i2,j1:j2,1:jpk) 
    14021445            e3w_b (i1:i2,j1:j2,1:jpk)  = e3w_n (i1:i2,j1:j2,1:jpk) 
Note: See TracChangeset for help on using the changeset viewer.