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 13889 – NEMO

Changeset 13889


Ignore:
Timestamp:
2020-11-26T16:40:17+01:00 (3 years ago)
Author:
ayoung
Message:

Making changes following review feedback. Ticket #2480.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13723_KERNEL-01_Amy_Mike_newHPGschemes/src/OCE/DYN/dynhpg.F90

    r13729 r13889  
    1717   !!                 !           (A. Coward) suppression of hel, wdj and rot options 
    1818   !!            3.6  !  2014-11  (P. Mathiot) hpg_isf: original code for ice shelf cavity 
     19   !!            4.2  !  2020-12  (M. Bell, A. Young) hpg_djc: revised djc scheme 
    1920   !!---------------------------------------------------------------------- 
    2021 
     
    7273   INTEGER, PARAMETER ::   np_isf    =  5   ! s-coordinate similar to sco modify for isf 
    7374   ! 
    74    INTEGER, PUBLIC ::   nhpg         !: type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) 
    75    LOGICAL,  PUBLIC ::   ln_hpg_djc_vN_hor, ln_hpg_djc_vN_vrt 
    76    REAL(wp), PUBLIC ::   aco_bc_hor, bco_bc_hor, aco_bc_vrt, bco_bc_vrt 
     75   INTEGER, PUBLIC  ::   nhpg         !: type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) 
     76   ! 
     77   LOGICAL          ::   ln_hpg_djc_vnh, ln_hpg_djc_vnv                 ! flag to specify hpg_djc boundary condition type 
     78   REAL(wp), PUBLIC ::   aco_bc_hor, bco_bc_hor, aco_bc_vrt, bco_bc_vrt !: coefficients for hpg_djc hor and vert boundary conditions 
    7779 
    7880   !! * Substitutions 
     
    159161      NAMELIST/namdyn_hpg/ ln_hpg_zco, ln_hpg_zps, ln_hpg_sco,     & 
    160162         &                 ln_hpg_djc, ln_hpg_prj, ln_hpg_isf,     & 
    161          &                 ln_hpg_djc_vN_hor, ln_hpg_djc_vN_vrt 
     163         &                 ln_hpg_djc_vnh, ln_hpg_djc_vnv 
    162164      !!---------------------------------------------------------------------- 
    163165      ! 
     
    218220      ENDIF 
    219221      !                           
    220       IF (ln_hpg_djc_vN_hor) THEN ! Von Neumann boundary condition 
    221         aco_bc_hor = 6.0_wp/5.0_wp 
    222         bco_bc_hor = 7.0_wp/15.0_wp 
    223       ELSE ! Linear extrapolation 
    224         aco_bc_hor = 3.0_wp/2.0_wp 
    225         bco_bc_hor = 1.0_wp/2.0_wp 
    226       END IF 
    227       IF (ln_hpg_djc_vN_vrt) THEN ! Von Neumann boundary condition 
    228         aco_bc_vrt = 6.0_wp/5.0_wp 
    229         bco_bc_vrt = 7.0_wp/15.0_wp 
    230       ELSE ! Linear extrapolation 
    231         aco_bc_vrt = 3.0_wp/2.0_wp 
    232         bco_bc_vrt = 1.0_wp/2.0_wp 
     222      IF ( ln_hpg_djc ) THEN 
     223         IF (ln_hpg_djc_vnh) THEN ! Von Neumann boundary condition 
     224           IF(lwp) WRITE(numout,*) '           horizontal bc: von Neumann ' 
     225           aco_bc_hor = 6.0_wp/5.0_wp 
     226           bco_bc_hor = 7.0_wp/15.0_wp 
     227         ELSE ! Linear extrapolation 
     228           IF(lwp) WRITE(numout,*) '           horizontal bc: linear extrapolation' 
     229           aco_bc_hor = 3.0_wp/2.0_wp 
     230           bco_bc_hor = 1.0_wp/2.0_wp 
     231         END IF 
     232         IF (ln_hpg_djc_vnv) THEN ! Von Neumann boundary condition 
     233           IF(lwp) WRITE(numout,*) '           vertical bc: von Neumann ' 
     234           aco_bc_vrt = 6.0_wp/5.0_wp 
     235           bco_bc_vrt = 7.0_wp/15.0_wp 
     236         ELSE ! Linear extrapolation 
     237           IF(lwp) WRITE(numout,*) '           vertical bc: linear extrapolation' 
     238           aco_bc_vrt = 3.0_wp/2.0_wp 
     239           bco_bc_vrt = 1.0_wp/2.0_wp 
     240         END IF 
    233241      END IF 
    234242   END SUBROUTINE dyn_hpg_init 
     
    725733 
    726734!!bug gm   Not a true bug, but... zdzz=e3w  for zdzx, zdzy verify what it is really 
    727 !! zdzz, zdzx and zdzy changed to heights rather than depths; lower bounds of jj and ji changed from 2 to 1  
    728735 
    729736      DO_3D( 1, 1, 1, 1, 2, jpkm1 )   
     
    737744      zep = 1.e-15 
    738745 
    739 !!bug  gm  zdrhoz not defined at level 1 and used (jk-1 with jk=2) ; this issue has now been addressed 
    740 !!bug  gm  idem for zdrhox, zdrhoy et ji=jpi and jj=jpj; idem 
    741  
    742746!! mb zdrho_k, zdz_k, zdrho_i, zdz_i, zdrho_j, zdz_j re-centred about the point (ji,jj,jk)  
    743 !! mb DO loops broken up so that zdrho_k and zdz_k are calculated only for jk = 2 to jpk - 2  
    744747      zdrho_k(:,:,:) = 0._wp 
    745748      zdz_k  (:,:,:) = 0._wp 
     
    865868            ! Walls coming from left: should check from 2 to jpi-1 (and jpj=2-jpj) 
    866869            IF (ji < jpi) THEN 
    867                IF ( umask(ji,jj,jk) > 0.5_wp .AND. tmask(ji-1,jj,jk) < 0.5_wp .AND. umask(ji+1,jj,jk) > 0.5_wp)  THEN   
     870               IF ( umask(ji,jj,jk) > 0.5_wp .AND. umask(ji-1,jj,jk) < 0.5_wp .AND. umask(ji+1,jj,jk) > 0.5_wp)  THEN   
    868871                  zz_drho_i(ji,jj) = aco_bc_hor * ( rhd_opt    (ji+1,jj,jk) - rhd_opt    (ji,jj,jk) ) - bco_bc_hor * zdrho_i(ji+1,jj,jk)  
    869872                  zz_dz_i  (ji,jj) = aco_bc_hor * (-gde3w(ji+1,jj,jk) + gde3w(ji,jj,jk) ) - bco_bc_hor * zdz_i  (ji+1,jj,jk) 
     
    879882            ! Walls coming from left: should check from 2 to jpj-1 (and jpi=2-jpi) 
    880883            IF (jj < jpj) THEN 
    881                IF ( vmask(ji,jj,jk) > 0.5_wp .AND. tmask(ji,jj-1,jk) < 0.5_wp .AND. vmask(ji,jj+1,jk) > 0.5_wp)  THEN 
     884               IF ( vmask(ji,jj,jk) > 0.5_wp .AND. vmask(ji,jj-1,jk) < 0.5_wp .AND. vmask(ji,jj+1,jk) > 0.5_wp)  THEN 
    882885                  zz_drho_j(ji,jj) = aco_bc_hor * ( rhd_opt    (ji,jj+1,jk) - rhd_opt    (ji,jj,jk) ) - bco_bc_hor * zdrho_j(ji,jj+1,jk) 
    883886                  zz_dz_j  (ji,jj) = aco_bc_hor * (-gde3w(ji,jj+1,jk) + gde3w(ji,jj,jk) ) - bco_bc_hor * zdz_j  (ji,jj+1,jk) 
Note: See TracChangeset for help on using the changeset viewer.