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 13154 for NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/step.F90 – NEMO

Ignore:
Timestamp:
2020-06-24T15:31:32+02:00 (4 years ago)
Author:
gm
Message:

Alternative Directions on VOR and KE and bug fixed ln_vorlat

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/step.F90

    r13151 r13154  
    1717   USE phycst           ! physical constants 
    1818   USE usrdef_nam 
    19    ! 
     19   USE lib_mpp        ! MPP library 
    2020   USE iom              ! xIOs server  
    2121 
     
    6666      REAL(wp) ::   zue3a, zue3n, zue3b    ! local scalars 
    6767      REAL(wp) ::   zve3a, zve3n, zve3b    !   -      - 
    68       REAL(wp) ::   ze3t_tf, ze3u_tf, ze3v_tf, zua, zva 
     68      REAL(wp) ::   ze3t_tf, ze3u_tf, ze3v_tf, zua, zva      
     69      REAL(wp), DIMENSION(jpi,jpj)    ::   zssh 
     70      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ze3u, ze3v 
    6971      !! --------------------------------------------------------------------- 
    7072#if defined key_agrif 
     
    141143               &            CALL Agrif_Sponge_dyn        ! momentum sponge 
    142144#endif 
    143                             CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)   ==> RHS 
    144   
    145                             CALL dyn_vor( kstp,      Nnn      , uu, vv, Nrhs )  ! vorticity              ==> RHS 
    146   
    147                             CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
    148145 
    149146!!an - calcul du gradient de pression horizontal (explicit) 
     147      zssh(:,:) = ssh(:,:,Nnn) 
     148# if defined key_bvp 
     149      !   gradient and divergence not penalised 
     150      zssh(:,:) = zssh(:,:) * r1_rpo(:,:,1)   
     151#endif  
    150152      DO_3D_00_00( 1, jpkm1 ) 
    151          uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 
    152          vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 
     153         uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( zssh(ji+1,jj) - zssh(ji,jj) ) * r1_e1u(ji,jj) 
     154         vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( zssh(ji,jj+1) - zssh(ji,jj) ) * r1_e2v(ji,jj) 
    153155      END_3D 
    154156      ! 
    155       ! add wind stress forcing and layer linear friction to the RHS  
     157       
     158!      IF( kstp == nit000 .AND. lwp ) THEN 
     159!         WRITE(numout,*) 
     160!         WRITE(numout,*) 'step.F90 : classic script used' 
     161!         WRITE(numout,*) '~~~~~~~' 
     162!         IF(       ln_dynvor_ens_adVO .OR. ln_dynvor_ens_adKE .OR. ln_dynvor_ens_adKEVO   & 
     163!         &    .OR. ln_dynvor_ene_adVO .OR. ln_dynvor_ene_adKE .OR. ln_dynvor_ene_adKEVO   ) THEN 
     164!            CALL ctl_stop('STOP','step : alternative direction asked but classis step'  ) 
     165!         ENDIF 
     166!      ENDIF 
     167!!an      
     168!                         CALL dyn_adv( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! advection (VF or FF)  ==> RHS 
     169!  
     170!                         CALL dyn_vor( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! vorticity             ==> RHS 
     171!  
     172!!an     In dynvor, dynkegAD is called even if not AD, so we keep the same step.F90 
     173   
     174                         CALL dyn_vor( kstp, Nbb, Nnn      , uu, vv, Nrhs)  ! vorticity            ==> RHS 
     175   
     176                         CALL dyn_ldf( kstp, Nbb, Nnn      , uu, vv, Nrhs )  ! lateral mixing 
     177 
     178      ! add wind stress forcing and layer linear friction to the RHS 
     179      ze3u(:,:,:) = e3u(:,:,:,Nnn) 
     180      ze3v(:,:,:) = e3v(:,:,:,Nnn) 
     181# if defined key_bvp 
     182      !ze3u(:,:,:) = ze3u(:,:,:) * r1_rpo(:,:,:)   
     183      !ze3v(:,:,:) = ze3v(:,:,:) * r1_rpo(:,:,:)   
     184#endif   
    156185      z1_2rho0 = 0.5_wp * r1_rho0 
    157186      DO_3D_00_00(1,jpkm1) 
    158          uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + z1_2rho0 * ( utau_b(ji,jj) + utau(ji,jj) ) / e3u(ji,jj,jk,Nnn)   & 
     187         uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + z1_2rho0 * ( utau_b(ji,jj) + utau(ji,jj) ) / ze3u(ji,jj,jk)   & 
    159188            &                                  - rn_rfr * uu(ji,jj,jk,Nbb) 
    160          vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + z1_2rho0 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / e3v(ji,jj,jk,Nnn)   & 
    161             &                                  - rn_rfr * vv(ji,jj,jk,Nbb) 
     189         vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + z1_2rho0 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ze3v(ji,jj,jk)   & 
     190            &                                  - rn_rfr * vv(ji,jj,jk,Nbb)   
    162191      END_3D    
    163 !!an          
     192      ! 
     193# if defined key_bvp 
     194      !  Add frictionnal term   - sigma * u 
     195      ! can be done via sigmaT (mean_ij) 
     196      DO_3D_00_00(1,jpkm1) 
     197         uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - bmpu(ji,jj,jk) * uu(ji,jj,jk,Nbb) 
     198         vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - bmpv(ji,jj,jk) * vv(ji,jj,jk,Nbb) 
     199      END_3D  
     200#endif  
     201      !          
    164202   
    165203      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
Note: See TracChangeset for help on using the changeset viewer.