Changeset 13363


Ignore:
Timestamp:
2020-07-30T17:03:23+02:00 (12 days ago)
Author:
techene
Message:

horizontal surface pressure gradient is now added systematically (linear and non-linear case) to rhs when explicit time scheme, it is not removed in the non linear case when time splitting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/DYN/dynspg_ts.F90

    r13295 r13363  
    162162      REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v   ! top/bottom stress at u- & v-points 
    163163      REAL(wp), DIMENSION(jpi,jpj) :: zhU, zhV         ! fluxes 
     164#if defined key_qco  
    164165      REAL(wp), DIMENSION(jpi, jpj, jpk) :: ze3u, ze3v 
     166#endif 
    165167      ! 
    166168      REAL(wp) ::   zwdramp                     ! local scalar - only used if ln_wd_dl = .True.  
     
    229231      !                                   !=  zu_frc =  1/H e3*d/dt(Ua)  =!  (Vertical mean of Ua, the 3D trends) 
    230232      !                                   !  ---------------------------  ! 
     233#if defined key_qco  
    231234      DO jk = 1 , jpk 
    232235         ze3u(:,:,jk) = e3u(:,:,jk,Kmm) 
     
    236239      zu_frc(:,:) = SUM( ze3u(:,:,:) * uu(:,:,:,Krhs) * umask(:,:,:) , DIM=3 ) * r1_hu(:,:,Kmm) 
    237240      zv_frc(:,:) = SUM( ze3v(:,:,:) * vv(:,:,:,Krhs) * vmask(:,:,:) , DIM=3 ) * r1_hv(:,:,Kmm) 
     241#else 
     242      zu_frc(:,:) = SUM( e3u(:,:,:,Kmm) * uu(:,:,:,Krhs) * umask(:,:,:) , DIM=3 ) * r1_hu(:,:,Kmm) 
     243      zv_frc(:,:) = SUM( e3v(:,:,:,Kmm) * vv(:,:,:,Krhs) * vmask(:,:,:) , DIM=3 ) * r1_hv(:,:,Kmm) 
     244#endif  
    238245      ! 
    239246      ! 
     
    247254!!gm  Is it correct to do so ?   I think so... 
    248255       
    249       !                                   !=  remove 2D Coriolis and pressure gradient trends  =! 
    250       !                                   !  -------------------------------------------------  ! 
     256      !                                   !=  remove 2D Coriolis trend  =! 
     257      !                                   !  --------------------------  ! 
    251258      ! 
    252259      IF( kt == nit000 .OR. .NOT. ln_linssh )   CALL dyn_cor_2D_init( Kmm )   ! Set zwz, the barotropic Coriolis force coefficient 
    253       !       ! recompute zwz = f/depth  at every time step for (.NOT.ln_linssh) as the water colomn height changes 
     260      !                      ! recompute zwz = f/depth  at every time step for (.NOT.ln_linssh) as the water colomn height changes 
    254261      ! 
    255262      !                                         !* 2D Coriolis trends 
     
    258265      ! 
    259266      CALL dyn_cor_2d( ht(:,:), hu(:,:,Kmm), hv(:,:,Kmm), puu_b(:,:,Kmm), pvv_b(:,:,Kmm), zhU, zhV,  &   ! <<== in 
    260          &                                                                     zu_trd, zv_trd   )   ! ==>> out 
    261       ! 
    262       IF( .NOT.ln_linssh ) THEN                 !* surface pressure gradient   (variable volume only) 
    263          ! 
    264          IF( ln_wd_il ) THEN                       ! W/D : limiter applied to spgspg 
    265             CALL wad_spg( pssh(:,:,Kmm), zcpx, zcpy )          ! Calculating W/D gravity filters, zcpx and zcpy 
    266             DO_2D( 0, 0, 0, 0 ) 
    267                zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( pssh(ji+1,jj  ,Kmm) - pssh(ji  ,jj ,Kmm) )   & 
    268                   &                          * r1_e1u(ji,jj) * zcpx(ji,jj)  * wdrampu(ji,jj)  !jth 
    269                zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( pssh(ji  ,jj+1,Kmm) - pssh(ji  ,jj ,Kmm) )   & 
    270                   &                          * r1_e2v(ji,jj) * zcpy(ji,jj)  * wdrampv(ji,jj)  !jth 
    271             END_2D 
    272          ELSE                                      ! now suface pressure gradient 
    273             DO_2D( 0, 0, 0, 0 ) 
    274                zu_trd(ji,jj) = zu_trd(ji,jj) - grav * (  pssh(ji+1,jj  ,Kmm) - pssh(ji  ,jj  ,Kmm)  ) * r1_e1u(ji,jj) 
    275                zv_trd(ji,jj) = zv_trd(ji,jj) - grav * (  pssh(ji  ,jj+1,Kmm) - pssh(ji  ,jj  ,Kmm)  ) * r1_e2v(ji,jj)  
    276             END_2D 
    277          ENDIF 
    278          ! 
    279       ENDIF 
     267         &                                                                          zu_trd, zv_trd   )   ! ==>> out 
    280268      ! 
    281269      DO_2D( 0, 0, 0, 0 ) 
     
    287275      !                                   !  -----------------------------------------------------------  ! 
    288276      CALL dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, zu_frc, zv_frc,  zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
     277      ! 
    289278      !                                   !=  Add atmospheric pressure forcing  =! 
    290279      !                                   !  ----------------------------------  ! 
     
    330319      ELSE                                        ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 
    331320         zztmp = r1_rho0 * r1_2 
    332          zssh_frc(:,:) = zztmp * (  emp(:,:)        + emp_b(:,:)                    & 
    333                 &                 - rnf(:,:)        - rnf_b(:,:)                    & 
    334                 &                 + fwfisf_cav(:,:) + fwfisf_cav_b(:,:)             & 
    335                 &                 + fwfisf_par(:,:) + fwfisf_par_b(:,:)             ) 
     321         zssh_frc(:,:) = zztmp * (   emp(:,:)        + emp_b(:,:)          & 
     322            &                      - rnf(:,:)        - rnf_b(:,:)          & 
     323            &                      + fwfisf_cav(:,:) + fwfisf_cav_b(:,:)   & 
     324            &                      + fwfisf_par(:,:) + fwfisf_par_b(:,:)   ) 
    336325      ENDIF 
    337326      !                                   !=  Add Stokes drift divergence  =!   (if exist) 
Note: See TracChangeset for help on using the changeset viewer.