Changeset 9513
- Timestamp:
- 2018-04-27T14:30:02+02:00 (6 years ago)
- Location:
- branches/UKMO/dev_isf_remapping_UKESM_GO6package_r9314/NEMOGCM
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_isf_remapping_UKESM_GO6package_r9314/NEMOGCM/CONFIG/SHARED/namelist_ref
r9342 r9513 129 129 rn_zisfmax = 7000. ! limiter in m on the previous condition. (if change larger than this number, get back to value before we enforce the connection) 130 130 ln_isfcheminey = .false. ! close cheminey 131 ln_isfsubgl = .true. ! remove subglacial lake created by the remapping process 132 rn_isfsubgllon = 0.0 ! longitude of the seed to determine the open ocean 133 rn_isfsubgllat = 0.0 ! latitude of the seed to determine the open ocean 131 134 / 132 135 !----------------------------------------------------------------------- -
branches/UKMO/dev_isf_remapping_UKESM_GO6package_r9314/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90
r8280 r9513 25 25 USE oce ! ocean dynamics and tracers 26 26 USE dom_oce ! ocean space and time domain 27 USE domngb ! find nearest wet point 28 USE domutl ! fill closed 3d pool below isf 29 USE domzgr, ONLY : ln_isfsubgl, rn_isfsubgllon, rn_isfsubgllat ! import ln_isfsubgl to mask close sea below isf 30 ! 27 31 USE in_out_manager ! I/O manager 28 32 USE lbclnk ! ocean lateral boundary conditions (or mpp link) … … 133 137 INTEGER :: iif, iil, ii0, ii1, ii ! local integers 134 138 INTEGER :: ijf, ijl, ij0, ij1 ! - - 139 INTEGER :: jiseed, jjseed ! - - 135 140 INTEGER :: ios 136 141 INTEGER :: isrow ! index for ORCA1 starting row … … 187 192 END DO 188 193 189 ! (ISF) define barotropic mask and mask the ice shelf point190 ssmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked191 192 194 DO jk = 1, jpk 193 195 DO jj = 1, jpj … … 199 201 END DO 200 202 END DO 201 203 ! 204 IF ( ln_isfsubgl ) THEN 205 ! check closed wet pool 206 CALL dom_ngb(rn_isfsubgllon, rn_isfsubgllat, jiseed, jjseed, 'T', lwet=.TRUE.) 207 CALL fill_pool( jiseed, jjseed, 1, tmask, -1._wp ) 208 ! at this point itab3d (:,1:ijmax,:) can have 3 different values : 209 ! 0 where there where already 0 210 ! -1 where the ocean points are connected 211 ! 1 where ocean points in tmask are not connected 212 IF (lwp) THEN 213 WRITE(numout,*) 214 WRITE(numout,*)'dommsk : removal of subglacial lakes ' 215 WRITE(numout,*)'~~~~~~~' 216 WRITE(numout,*)'Number of disconected points : ', COUNT( (tmask(:,:,:) == 1) ) 217 WRITE(numout,*)'lon/lat seed to detect main ocean is: ', rn_isfsubgllon, rn_isfsubgllat 218 WRITE(numout,*)'i/j seed to detect main ocean is: ', jiseed, jjseed 219 END IF 220 DO jk = 1, jpk 221 WHERE (tmask(:,:,jk) > 0 .AND. misfdep(:,:) > 1) tmask(:,:,jk) = 0 ! remove only subglacial lake (ie similar to close sea only below an ice shelf 222 WHERE (tmask(:,:,jk) < 0) tmask(:,:,jk) = 1 ! restore mask value 223 END DO 224 END IF 225 226 ! (ISF) define barotropic mask and mask the ice shelf point 227 DO jj = 1, jpj 228 DO ji = 1, jpi ! vector loop 229 ssmask(ji,jj) = MIN(1._wp,SUM(tmask(ji,jj,:))) 230 END DO 231 END DO 202 232 !!gm ???? 203 233 #if defined key_zdfkpp -
branches/UKMO/dev_isf_remapping_UKESM_GO6package_r9314/NEMOGCM/NEMO/OPA_SRC/DOM/domngb.F90
r6486 r9513 28 28 CONTAINS 29 29 30 SUBROUTINE dom_ngb( plon, plat, kii, kjj, cdgrid )30 SUBROUTINE dom_ngb( plon, plat, kii, kjj, cdgrid, lwet, kkk ) 31 31 !!---------------------------------------------------------------------- 32 32 !! *** ROUTINE dom_ngb *** 33 33 !! 34 !! ** Purpose : find the closest grid point from a given lon/lat position34 !! ** Purpose : find the closest wet grid point from a given lon/lat position 35 35 !! 36 36 !! ** Method : look for minimum distance in cylindrical projection … … 40 40 REAL(wp) , INTENT(in ) :: plon, plat ! longitude,latitude of the point 41 41 INTEGER , INTENT( out) :: kii, kjj ! i-,j-index of the closes grid point 42 INTEGER , INTENT(in ), OPTIONAL :: kkk ! k-index of the mask level used 43 LOGICAL , INTENT(in ), OPTIONAL :: lwet ! logical to decide if we look for every where (false) 44 ! or only over the wet point (true) 42 45 CHARACTER(len=1), INTENT(in ) :: cdgrid ! grid name 'T', 'U', 'V', 'W' 43 46 ! 47 INTEGER :: ik ! working level 44 48 INTEGER , DIMENSION(2) :: iloc 45 49 REAL(wp) :: zlon, zmini 46 50 REAL(wp), POINTER, DIMENSION(:,:) :: zglam, zgphi, zmask, zdist 51 LOGICAL :: llwet ! working logical 47 52 !!-------------------------------------------------------------------- 48 53 ! … … 51 56 CALL wrk_alloc( jpi, jpj, zglam, zgphi, zmask, zdist ) 52 57 ! 58 ! select lat/lon variable 59 SELECT CASE( cdgrid ) 60 CASE( 'U' ) ; zglam(:,:) = glamu(:,:) ; zgphi(:,:) = gphiu(:,:) 61 CASE( 'V' ) ; zglam(:,:) = glamv(:,:) ; zgphi(:,:) = gphiv(:,:) 62 CASE( 'F' ) ; zglam(:,:) = glamf(:,:) ; zgphi(:,:) = gphif(:,:) 63 CASE DEFAULT ; zglam(:,:) = glamt(:,:) ; zgphi(:,:) = gphit(:,:) 64 END SELECT 65 ! 66 ! select vertical level 67 ik = 1 68 IF ( PRESENT(kkk) ) ik=kkk 69 ! 70 ! select mask variable 53 71 zmask(:,:) = 0._wp 54 SELECT CASE( cdgrid ) 55 CASE( 'U' ) ; zglam(:,:) = glamu(:,:) ; zgphi(:,:) = gphiu(:,:) ; zmask(nldi:nlei,nldj:nlej) = umask(nldi:nlei,nldj:nlej,1) 56 CASE( 'V' ) ; zglam(:,:) = glamv(:,:) ; zgphi(:,:) = gphiv(:,:) ; zmask(nldi:nlei,nldj:nlej) = vmask(nldi:nlei,nldj:nlej,1) 57 CASE( 'F' ) ; zglam(:,:) = glamf(:,:) ; zgphi(:,:) = gphif(:,:) ; zmask(nldi:nlei,nldj:nlej) = fmask(nldi:nlei,nldj:nlej,1) 58 CASE DEFAULT ; zglam(:,:) = glamt(:,:) ; zgphi(:,:) = gphit(:,:) ; zmask(nldi:nlei,nldj:nlej) = tmask(nldi:nlei,nldj:nlej,1) 59 END SELECT 60 61 zlon = MOD( plon + 720., 360. ) ! plon between 0 and 360 62 zglam(:,:) = MOD( zglam(:,:) + 720., 360. ) ! glam between 0 and 360 63 IF( zlon > 270. ) zlon = zlon - 360. ! zlon between -90 and 270 64 IF( zlon < 90. ) WHERE( zglam(:,:) > 180. ) zglam(:,:) = zglam(:,:) - 360. ! glam between -180 and 180 65 66 zglam(:,:) = zglam(:,:) - zlon 72 llwet = .TRUE. 73 IF ( PRESENT(lwet)) llwet=lwet 74 IF (llwet) THEN 75 SELECT CASE( cdgrid ) 76 CASE( 'U' ) ; zmask(nldi:nlei,nldj:nlej) = umask(nldi:nlei,nldj:nlej,ik) 77 CASE( 'V' ) ; zmask(nldi:nlei,nldj:nlej) = vmask(nldi:nlei,nldj:nlej,ik) 78 CASE( 'F' ) ; zmask(nldi:nlei,nldj:nlej) = fmask(nldi:nlei,nldj:nlej,ik) 79 CASE DEFAULT ; zmask(nldi:nlei,nldj:nlej) = tmask(nldi:nlei,nldj:nlej,ik) 80 END SELECT 81 ELSE 82 zmask(nldi:nlei,nldj:nlej)=1.e0 83 END IF 84 ! 85 ! compute distance 86 IF (jphgr_msh /= 2 .AND. jphgr_msh /= 3) THEN 87 zlon = MOD( plon + 720., 360. ) ! plon between 0 and 360 88 zglam(:,:) = MOD( zglam(:,:) + 720., 360. ) ! glam between 0 and 360 89 IF( zlon > 270. ) zlon = zlon - 360. ! zlon between -90 and 270 90 IF( zlon < 90. ) WHERE( zglam(:,:) > 180. ) zglam(:,:) = zglam(:,:) - 360. ! glam between -180 and 180 91 zglam(:,:) = zglam(:,:) - zlon 92 ELSE 93 zglam(:,:) = zglam(:,:) - plon 94 END IF 95 ! 67 96 zgphi(:,:) = zgphi(:,:) - plat 68 97 zdist(:,:) = zglam(:,:) * zglam(:,:) + zgphi(:,:) * zgphi(:,:) 69 98 ! 99 ! find min 70 100 IF( lk_mpp ) THEN 71 101 CALL mpp_minloc( zdist(:,:), zmask, zmini, kii, kjj) -
branches/UKMO/dev_isf_remapping_UKESM_GO6package_r9314/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r9342 r9513 50 50 PUBLIC dom_zgr ! called by dom_init.F90 51 51 52 ! remove subglacial lake under the ice sheet. 53 LOGICAL , PUBLIC :: ln_isfsubgl 54 REAL(wp), PUBLIC :: rn_isfsubgllon, rn_isfsubgllat 52 55 ! !!* Namelist namzgr_sco * 53 56 LOGICAL :: ln_s_sh94 ! use hybrid s-sig Song and Haidvogel 1994 stretching function fssig1 (ln_sco=T) … … 1293 1296 ! NAMELIST 1294 1297 INTEGER :: ios 1295 INTEGER :: nn_kisfmax = 999. !1296 REAL(wp) :: rn_isfdep_min = 10.0_wp ! ice shelf minimal thickness1298 INTEGER :: nn_kisfmax = 999. ! 1299 REAL(wp) :: rn_isfdep_min = 10.0_wp ! ice shelf minimal thickness 1297 1300 REAL(wp) :: rn_isfhw_deep = 1.e-3 , rn_isfhw_shallow = 1.0e-3 ! threshold to define grounding line in deep/shallow water 1298 REAL(wp) :: rn_isfshallow = 0.0_wp ! threshold to define shallow ice shelf cavity1299 REAL(wp) :: rn_zisfmax = 6000.0_wp ! maximun meter of ice we are allowed to dig to assure connectivity1300 LOGICAL :: ln_isfcheminey= .FALSE. , ln_isfconnect= .FALSE. , ln_isfchannel= .FALSE. ! remove cheminey, assure connectivity 1301 REAL(wp) :: rn_isfshallow = 0.0_wp ! threshold to define shallow ice shelf cavity 1302 REAL(wp) :: rn_zisfmax = 6000.0_wp ! maximun meter of ice we are allowed to dig to assure connectivity 1303 LOGICAL :: ln_isfcheminey= .FALSE. , ln_isfconnect= .FALSE. , ln_isfchannel= .FALSE. ! remove cheminey, assure connectivity, remove channel in water column (on z space not level space) 1301 1304 !!--------------------------------------------------------------------- 1302 1305 NAMELIST/namzgr_isf/nn_kisfmax, rn_zisfmax, & 1303 1306 & rn_isfdep_min, rn_isfhw_deep, rn_isfhw_shallow, rn_isfshallow, & 1304 & ln_isfcheminey, ln_isfconnect, ln_isfchannel 1307 & ln_isfcheminey, ln_isfconnect, ln_isfchannel, ln_isfsubgl, rn_isfsubgllon, rn_isfsubgllat 1305 1308 ! 1306 1309 IF( nn_timing == 1 ) CALL timing_start('zgr_isf')
Note: See TracChangeset
for help on using the changeset viewer.