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/OCE/DYN/sshwzv.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/OCE/DYN/sshwzv.F90

    r9598 r9863  
    6868      INTEGER, INTENT(in) ::   kt   ! time step 
    6969      !  
    70       INTEGER  ::   jk            ! dummy loop indice 
    71       REAL(wp) ::   z2dt, zcoef   ! local scalars 
     70      INTEGER  ::   jk         ! dummy loop indice 
     71      REAL(wp) ::   z1_2rau0   ! local scalars 
    7272      REAL(wp), DIMENSION(jpi,jpj) ::   zhdiv   ! 2D workspace 
    7373      !!---------------------------------------------------------------------- 
     
    8181      ENDIF 
    8282      ! 
    83       z2dt = 2._wp * rdt                          ! set time step size (Euler/Leapfrog) 
    84       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    85       zcoef = 0.5_wp * r1_rau0 
     83      z1_2rau0 = 0.5_wp * r1_rau0 
    8684 
    8785      !                                           !------------------------------! 
    8886      !                                           !   After Sea Surface Height   ! 
    8987      !                                           !------------------------------! 
    90       IF(ln_wd_il) THEN 
    91          CALL wad_lmt(sshb, zcoef * (emp_b(:,:) + emp(:,:)), z2dt) 
    92       ENDIF 
     88 
     89      IF(ln_wd_il)   CALL wad_lmt( sshb, z1_2rau0 * (emp_b(:,:) + emp(:,:)), r2dt ) 
    9390 
    9491      CALL div_hor( kt )                               ! Horizontal divergence 
     
    10299      ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 
    103100      !  
    104       ssha(:,:) = (  sshb(:,:) - z2dt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
     101      ssha(:,:) = (  sshb(:,:) - r2dt * ( z1_2rau0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) )  ) * ssmask(:,:) 
    105102      ! 
    106103#if defined key_agrif 
     
    143140      ! 
    144141      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    145       REAL(wp) ::   z1_2dt       ! local scalars 
    146142      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zhdiv 
    147143      !!---------------------------------------------------------------------- 
     
    159155      !                                           !     Now Vertical Velocity    ! 
    160156      !                                           !------------------------------! 
    161       z1_2dt = 1. / ( 2. * rdt )                         ! set time step size (Euler/Leapfrog) 
    162       IF( neuler == 0 .AND. kt == nit000 )   z1_2dt = 1. / rdt 
    163157      ! 
    164158      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN      ! z_tilde and layer cases 
     
    180174            ! computation of w 
    181175            wn(:,:,jk) = wn(:,:,jk+1) - (  e3t_n(:,:,jk) * hdivn(:,:,jk) + zhdiv(:,:,jk)    & 
    182                &                         + z1_2dt * ( e3t_a(:,:,jk) - e3t_b(:,:,jk) )     ) * tmask(:,:,jk) 
     176               &                         + r1_2dt * ( e3t_a(:,:,jk) - e3t_b(:,:,jk) )     ) * tmask(:,:,jk) 
    183177         END DO 
    184178         !          IF( ln_vvl_layer ) wn(:,:,:) = 0.e0 
     
    188182            ! computation of w 
    189183            wn(:,:,jk) = wn(:,:,jk+1) - (  e3t_n(:,:,jk) * hdivn(:,:,jk)                 & 
    190                &                         + z1_2dt * ( e3t_a(:,:,jk) - e3t_b(:,:,jk) )  ) * tmask(:,:,jk) 
     184               &                         + r1_2dt * ( e3t_a(:,:,jk) - e3t_b(:,:,jk) )  ) * tmask(:,:,jk) 
    191185         END DO 
    192186      ENDIF 
     
    243237         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
    244238      ENDIF 
    245       !              !==  Euler time-stepping: no filter, just swap  ==! 
    246       IF ( neuler == 0 .AND. kt == nit000 ) THEN 
    247          sshn(:,:) = ssha(:,:)                              ! now    <-- after  (before already = now) 
    248          ! 
    249       ELSE           !==  Leap-Frog time-stepping: Asselin filter + swap  ==! 
    250          !                                                  ! before <-- now filtered 
     239      !               
     240      IF ( l_1st_euler ) THEN    !==  Euler time-stepping  ==!   no filter, just swap 
     241         ! 
     242         sshn(:,:) = ssha(:,:)               ! now    <-- after  (before already = now) 
     243         ! 
     244      ELSE                       !==  Leap-Frog time-stepping  ==!   Asselin filter + swap 
     245         ! 
     246         !                                   ! before <-- now filtered 
    251247         sshb(:,:) = sshn(:,:) + atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) ) 
    252          IF( .NOT.ln_linssh ) THEN                          ! before <-- with forcing removed 
     248         IF( .NOT.ln_linssh ) THEN           ! before <-- with forcing removed 
    253249            zcoef = atfp * rdt * r1_rau0 
    254250            sshb(:,:) = sshb(:,:) - zcoef * (     emp_b(:,:) - emp   (:,:)   & 
     
    256252               &                             + fwfisf_b(:,:) - fwfisf(:,:)   ) * ssmask(:,:) 
    257253         ENDIF 
    258          sshn(:,:) = ssha(:,:)                              ! now <-- after 
     254         sshn(:,:) = ssha(:,:)               ! now <-- after 
    259255      ENDIF 
    260256      ! 
Note: See TracChangeset for help on using the changeset viewer.