Changeset 11604 for NEMO/branches/2019/ENHANCE-03_domcfg/src/domclo.F90
- Timestamp:
- 2019-09-26T18:48:45+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/ENHANCE-03_domcfg/src/domclo.F90
r11201 r11604 58 58 CHARACTER(256) :: cloctrg ! where water is spread 59 59 CHARACTER(256) :: cschtrg ! how water is spread 60 REAL(wp) :: radtrg ! radius of closed sea river mouth 60 REAL(wp) :: radtrg ! radius of closed sea river mouth (used if cschtrg is rnf or emp) 61 61 INTEGER :: idtrg ! target id in case multiple lakes for the same river mouth 62 62 END TYPE … … 70 70 INTEGER :: nn_closea ! number of closed seas 71 71 72 REAL(wp) :: zdistseed ! distance to seed 73 REAL(wp) :: zarea ! river mouth area 74 REAL(wp) :: rn_lon_opnsea, rn_lat_opnsea ! open sea seed 75 REAL(wp), DIMENSION(1) :: zchk, zradtrg 76 REAL(wp), DIMENSION(jpi,jpj) :: zmsksrc, zmsktrg, zmsk_coastline, zdist 77 78 CHARACTER(256) :: csch, cloc ! scheme name for water spreading (glo, rnf, emp) 79 TYPE(closea) , DIMENSION(jp_closea) :: sn_lake ! lake properties 72 REAL(wp) :: zdistseed ! distance to seed 73 REAL(wp) :: zarea ! river mouth area 74 REAL(wp) :: rn_lon_opnsea, rn_lat_opnsea ! open sea seed 75 REAL(wp), DIMENSION(1) :: zchk, zradtrg ! 76 REAL(wp), DIMENSION(jpi,jpj) :: zdist ! distance to seed trg location 77 REAL(wp), DIMENSION(jpi,jpj) :: zmsksrc, zmsktrg, zmsk_coastline ! various mask 78 79 CHARACTER(256) :: csch, cloc ! scheme name for water spreading (glo, rnf, emp) 80 TYPE(closea) , DIMENSION(jp_closea) :: sn_lake ! lake properties 80 81 81 82 LOGICAL :: lskip ! flag in case lake seed on land or already filled (...) … … 90 91 NAMELIST/namclo/ rn_lon_opnsea, rn_lat_opnsea, nn_closea, sn_lake 91 92 !!--------------------------------------------------------------------- 92 PRINT *, rn_lon_opnsea, rn_lat_opnsea, nn_closea 93 !! 93 94 94 REWIND( numnam_ref ) ! Namelist namlbc in reference namelist : Lateral momentum boundary condition 95 95 READ ( numnam_ref, namclo, IOSTAT = ios, ERR = 901 ) … … 118 118 IF (zchk(1) == 0._wp) CALL ctl_stop( 'STOP', 'open sea seed is on land, please update namelist (rn_lon_opnsea,rn_lat_opnsea)' ) 119 119 120 !! 1.3 set to 0 everything >0 and revert mask120 !! print 121 121 IF (lwp) THEN 122 122 WRITE(numout,*) … … 128 128 END IF 129 129 130 WHERE (msk_opnsea(:,:) > 0) msk_opnsea(:,:) = 0 ! mask all closed seas 131 WHERE (msk_opnsea(:,:) < 0) msk_opnsea(:,:) = 1 ! restore mask value 130 !! 1.3 set to 0 everything >0 and revert mask 131 WHERE (msk_opnsea(:,:) > 0._wp) msk_opnsea(:,:) = 0._wp ! mask all closed seas 132 WHERE (msk_opnsea(:,:) < 0._wp) msk_opnsea(:,:) = 1._wp ! restore mask value 132 133 133 134 !! 1.4 Define closed sea mask (all of them, ie defined in the namelist or not) 134 135 !! needed to remove the undefined closed seas at the end 135 msk_closea = (ssmask - msk_opnsea) * 99136 msk_closea(:,:) = ( ssmask(:,:) - msk_opnsea(:,:) ) * 99._wp 136 137 137 138 !!---------------------------------------------------------------------- … … 142 143 jglo = 1 ; jrnf = 1 ; jemp = 1 143 144 !! mask used to group lake by net evap/precip distribution technics 144 msk_glo = msk_closea145 msk_rnf = msk_closea146 msk_emp = msk_closea145 msk_glo(:,:) = msk_closea(:,:) 146 msk_rnf(:,:) = msk_closea(:,:) 147 msk_emp(:,:) = msk_closea(:,:) 147 148 148 149 !! mask used to group multiple lake with the same river mouth (great lake for example) 149 msk_gloid = 0.0_wp150 msk_rnfid = 0.0_wp151 msk_empid = 0.0_wp150 msk_gloid(:,:) = 0.0_wp 151 msk_rnfid(:,:) = 0.0_wp 152 msk_empid(:,:) = 0.0_wp 152 153 153 154 IF (lwp) WRITE(numout,*)'closed seas: ' … … 175 176 CASE('glo') 176 177 jsch = jglo 177 zmsksrc = msk_glo178 zmsktrg = msk_gloid178 zmsksrc(:,:) = msk_glo(:,:) 179 zmsktrg(:,:) = msk_gloid(:,:) 179 180 IF (lwp) WRITE(numout,*)' net evap/precip will be spread globally' 180 181 CASE('rnf') 181 182 jsch = jrnf 182 zmsksrc = msk_rnf183 zmsktrg = msk_rnfid183 zmsksrc(:,:) = msk_rnf(:,:) 184 zmsktrg(:,:) = msk_rnfid(:,:) 184 185 IF (lwp) WRITE(numout,*)' net precip will be spread locally and net evap globally' 185 186 CASE('emp') 186 187 jsch = jemp 187 zmsksrc = msk_emp188 zmsktrg = msk_empid188 zmsksrc(:,:) = msk_emp(:,:) 189 zmsktrg(:,:) = msk_empid(:,:) 189 190 IF (lwp) WRITE(numout,*)' net precip will be spread locally' 190 191 CASE DEFAULT … … 213 214 !! fill close sea mask with counter value 214 215 CALL fill_pool( jiseed, jjseed, zmsksrc, REAL(jsch ,8)) 215 WHERE (zmsksrc == REAL(jsch,8))216 WHERE (zmsksrc(:,:) == REAL(jsch,8)) 216 217 msk_closea = 0._wp 217 218 zmsktrg = sn_lake(jcs)%idtrg … … 220 221 !! compute location of river mouth and distance to river mouth 221 222 IF (cloc /= 'global') THEN 223 222 224 !! set a minimum value for radius of the river influence 223 225 zradtrg = 0._wp … … 229 231 !! compute seed location for print 230 232 CALL dom_ngb(sn_lake(jcs)%rlontrg, sn_lake(jcs)%rlattrg, jiseed, jjseed, zdistseed, 'T') 233 231 234 !! compute distance to river mouth 232 235 zdist(:,:) = dist(sn_lake(jcs)%rlontrg, sn_lake(jcs)%rlattrg, glamt, gphit) 236 233 237 END IF 234 238 … … 237 241 SELECT CASE (cloc) 238 242 CASE ('global') 239 WHERE (msk_opnsea(:,:) == 1 ) zmsktrg = sn_lake(jcs)%idtrg243 WHERE (msk_opnsea(:,:) == 1._wp) zmsktrg = sn_lake(jcs)%idtrg 240 244 241 245 CASE ('local') 242 246 !! compute mask 243 247 WHERE (zdist(:,:) < zradtrg(1) .AND. msk_opnsea(:,:) == 1 ) zmsktrg = sn_lake(jcs)%idtrg 248 244 249 !! print 245 250 IF (lwp) WRITE(numout,'(a,f7.0,a,2f7.2,a,2i7,a)')' river mouth area is defined by points within ',zradtrg(1) & 246 251 & ,' m of lat/lon ', sn_lake(jcs)%rlontrg, sn_lake(jcs)%rlattrg & 247 252 & ,' (closest point is i/j ',jiseed, jjseed,')' 248 249 253 CASE ('coast') 250 254 !! define coastline mask … … 259 263 !! compute mask 260 264 WHERE ( zdist(:,:) < zradtrg(1) .AND. zmsk_coastline(:,:) == 1 .AND. msk_opnsea(:,:) == 1 ) zmsktrg = sn_lake(jcs)%idtrg 265 261 266 !! print 262 267 IF (lwp) WRITE(numout,'(a,f7.0,a,2f7.2,a,2i7,a)')' river mouth area is defined by coastal points within ',zradtrg(1) & … … 277 282 CASE ('glo') 278 283 jglo = jglo + 1 279 msk_glo = zmsksrc280 msk_gloid = zmsktrg284 msk_glo(:,:) = zmsksrc(:,:) 285 msk_gloid(:,:) = zmsktrg(:,:) 281 286 CASE ('rnf') 282 287 jrnf = jrnf + 1 283 msk_rnf = zmsksrc284 msk_rnfid = zmsktrg288 msk_rnf(:,:) = zmsksrc(:,:) 289 msk_rnfid(:,:) = zmsktrg(:,:) 285 290 CASE ('emp') 286 291 jemp = jemp + 1 287 msk_emp = zmsksrc288 msk_empid = zmsktrg292 msk_emp(:,:) = zmsksrc(:,:) 293 msk_empid(:,:) = zmsktrg(:,:) 289 294 END SELECT 290 295 … … 298 303 299 304 !! mask all the cells not defined as closed sea 300 WHERE ( msk_glo == 99 ) msk_glo = 0301 WHERE ( msk_rnf == 99 ) msk_rnf = 0302 WHERE ( msk_emp == 99 ) msk_emp = 0305 WHERE ( msk_glo(:,:) == 99._wp ) msk_glo = 0._wp 306 WHERE ( msk_rnf(:,:) == 99._wp ) msk_rnf = 0._wp 307 WHERE ( msk_emp(:,:) == 99._wp ) msk_emp = 0._wp 303 308 304 309 !! non defined closed sea 305 WHERE ( msk_closea > 0) msk_closea = 1310 WHERE ( msk_closea(:,:) > 0._wp ) msk_closea = 1._wp 306 311 307 312 END SUBROUTINE dom_clo
Note: See TracChangeset
for help on using the changeset viewer.