Changeset 13889 for NEMO/branches
- Timestamp:
- 2020-11-26T16:40:17+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13723_KERNEL-01_Amy_Mike_newHPGschemes/src/OCE/DYN/dynhpg.F90
r13729 r13889 17 17 !! ! (A. Coward) suppression of hel, wdj and rot options 18 18 !! 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 19 20 !!---------------------------------------------------------------------- 20 21 … … 72 73 INTEGER, PARAMETER :: np_isf = 5 ! s-coordinate similar to sco modify for isf 73 74 ! 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 77 79 78 80 !! * Substitutions … … 159 161 NAMELIST/namdyn_hpg/ ln_hpg_zco, ln_hpg_zps, ln_hpg_sco, & 160 162 & ln_hpg_djc, ln_hpg_prj, ln_hpg_isf, & 161 & ln_hpg_djc_v N_hor, ln_hpg_djc_vN_vrt163 & ln_hpg_djc_vnh, ln_hpg_djc_vnv 162 164 !!---------------------------------------------------------------------- 163 165 ! … … 218 220 ENDIF 219 221 ! 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 233 241 END IF 234 242 END SUBROUTINE dyn_hpg_init … … 725 733 726 734 !!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 1728 735 729 736 DO_3D( 1, 1, 1, 1, 2, jpkm1 ) … … 737 744 zep = 1.e-15 738 745 739 !!bug gm zdrhoz not defined at level 1 and used (jk-1 with jk=2) ; this issue has now been addressed740 !!bug gm idem for zdrhox, zdrhoy et ji=jpi and jj=jpj; idem741 742 746 !! 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 - 2744 747 zdrho_k(:,:,:) = 0._wp 745 748 zdz_k (:,:,:) = 0._wp … … 865 868 ! Walls coming from left: should check from 2 to jpi-1 (and jpj=2-jpj) 866 869 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) THEN870 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 868 871 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) 869 872 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) … … 879 882 ! Walls coming from left: should check from 2 to jpj-1 (and jpi=2-jpi) 880 883 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) THEN884 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 882 885 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) 883 886 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.