Changeset 11758
- Timestamp:
- 2019-10-21T18:19:16+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/nemogcm.F90
r11480 r11758 473 473 #if defined key_top 474 474 ! ! Passive tracers 475 CALL trc_init 475 CALL trc_init( Nbb, Nnn, Naa ) 476 476 #endif 477 477 IF( l_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/oce_trc.F90
r11527 r11758 43 43 USE oce , ONLY : ssh => ssh !: sea surface height at t-point [m] 44 44 USE oce , ONLY : rab_n => rab_n !: local thermal/haline expension ratio at T-points 45 46 USE step, ONLY : Nbb, Nnn, Naa, Nrhs ! time level indices47 45 48 46 !* surface fluxes * -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/trcini.F90
r11527 r11758 39 39 CONTAINS 40 40 41 SUBROUTINE trc_init 41 SUBROUTINE trc_init( Kbb, Kmm, Kaa ) 42 42 !!--------------------------------------------------------------------- 43 43 !! *** ROUTINE trc_init *** … … 51 51 !! or read data or analytical formulation 52 52 !!--------------------------------------------------------------------- 53 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa ! time level indices 53 54 ! 54 55 IF( ln_timing ) CALL timing_start('trc_init') … … 69 70 IF(lwp) WRITE(numout,*) 70 71 ! 71 CALL trc_ini_sms( Nnn) ! SMS72 CALL trc_ini_sms( Kmm ) ! SMS 72 73 CALL trc_ini_trp ! passive tracers transport 73 74 CALL trc_ice_ini ! Tracers in sea ice … … 77 78 ENDIF 78 79 ! 79 CALL trc_ini_state( Nbb, Nnn, Naa ) ! passive tracers initialisation : from a restart or from clim80 ! 81 CALL trc_ini_inv( Nnn) ! Inventories80 CALL trc_ini_state( Kbb, Kmm, Kaa ) ! passive tracers initialisation : from a restart or from clim 81 ! 82 CALL trc_ini_inv( Kmm ) ! Inventories 82 83 ! 83 84 IF( ln_timing ) CALL timing_stop('trc_init') -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/trcwri.F90
r10975 r11758 71 71 PUBLIC trc_wri 72 72 CONTAINS 73 SUBROUTINE trc_wri( kt ) ! Empty routine73 SUBROUTINE trc_wri( kt, Kmm ) ! Empty routine 74 74 INTEGER, INTENT(in) :: kt 75 INTEGER, INTENT(in) :: Kmm ! time level indices 75 76 END SUBROUTINE trc_wri 76 77 #endif -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/BENCH/MY_SRC/diawri.F90
r10410 r11758 52 52 53 53 #if defined key_si3 54 USE ice 54 USE ice 55 55 USE icewri 56 56 #endif 57 57 USE lib_mpp ! MPP library 58 58 USE timing ! preformance summary 59 USE diu rnal_bulk! diurnal warm layer60 USE cool_skin! Cool skin59 USE diu_bulk ! diurnal warm layer 60 USE diu_coolskin ! Cool skin 61 61 62 62 IMPLICIT NONE … … 97 97 98 98 99 SUBROUTINE dia_wri( kt )99 SUBROUTINE dia_wri( kt, Kmm ) 100 100 !!--------------------------------------------------------------------- 101 101 !! *** ROUTINE dia_wri *** … … 107 107 !!---------------------------------------------------------------------- 108 108 INTEGER, INTENT( in ) :: kt ! ocean time-step index 109 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 109 110 !! 110 111 INTEGER :: ji, jj, jk ! dummy loop indices … … 120 121 ! Output the initial state and forcings 121 122 IF( ninist == 1 ) THEN 122 CALL dia_wri_state( 'output.init' )123 CALL dia_wri_state( Kmm, 'output.init' ) 123 124 ninist = 0 124 125 ENDIF … … 129 130 CALL iom_put("e3v_0", e3v_0(:,:,:) ) 130 131 ! 131 CALL iom_put( "e3t" , e3t _n(:,:,:) )132 CALL iom_put( "e3u" , e3u _n(:,:,:) )133 CALL iom_put( "e3v" , e3v _n(:,:,:) )134 CALL iom_put( "e3w" , e3w _n(:,:,:) )132 CALL iom_put( "e3t" , e3t(:,:,:,Kmm) ) 133 CALL iom_put( "e3u" , e3u(:,:,:,Kmm) ) 134 CALL iom_put( "e3v" , e3v(:,:,:,Kmm) ) 135 CALL iom_put( "e3w" , e3w(:,:,:,Kmm) ) 135 136 IF( iom_use("e3tdef") ) & 136 CALL iom_put( "e3tdef" , ( ( e3t _n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 )137 CALL iom_put( "e3tdef" , ( ( e3t(:,:,:,Kmm) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 ) 137 138 138 139 IF( ll_wd ) THEN 139 CALL iom_put( "ssh" , (ssh n+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying)140 CALL iom_put( "ssh" , (ssh(:,:,Kmm)+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying) 140 141 ELSE 141 CALL iom_put( "ssh" , ssh n) ! sea surface height142 CALL iom_put( "ssh" , ssh(:,:,Kmm) ) ! sea surface height 142 143 ENDIF 143 144 144 145 IF( iom_use("wetdep") ) & ! wet depth 145 CALL iom_put( "wetdep" , ht_0(:,:) + ssh n(:,:) )146 147 CALL iom_put( "toce", ts n(:,:,:,jp_tem) ) ! 3D temperature148 CALL iom_put( "sst", ts n(:,:,1,jp_tem) ) ! surface temperature146 CALL iom_put( "wetdep" , ht_0(:,:) + ssh(:,:,Kmm) ) 147 148 CALL iom_put( "toce", ts(:,:,:,jp_tem,Kmm) ) ! 3D temperature 149 CALL iom_put( "sst", ts(:,:,1,jp_tem,Kmm) ) ! surface temperature 149 150 IF ( iom_use("sbt") ) THEN 150 151 DO jj = 1, jpj 151 152 DO ji = 1, jpi 152 153 ikbot = mbkt(ji,jj) 153 z2d(ji,jj) = ts n(ji,jj,ikbot,jp_tem)154 z2d(ji,jj) = ts(ji,jj,ikbot,jp_tem,Kmm) 154 155 END DO 155 156 END DO … … 157 158 ENDIF 158 159 159 CALL iom_put( "soce", ts n(:,:,:,jp_sal) ) ! 3D salinity160 CALL iom_put( "sss", ts n(:,:,1,jp_sal) ) ! surface salinity160 CALL iom_put( "soce", ts(:,:,:,jp_sal,Kmm) ) ! 3D salinity 161 CALL iom_put( "sss", ts(:,:,1,jp_sal,Kmm) ) ! surface salinity 161 162 IF ( iom_use("sbs") ) THEN 162 163 DO jj = 1, jpj 163 164 DO ji = 1, jpi 164 165 ikbot = mbkt(ji,jj) 165 z2d(ji,jj) = ts n(ji,jj,ikbot,jp_sal)166 z2d(ji,jj) = ts(ji,jj,ikbot,jp_sal,Kmm) 166 167 END DO 167 168 END DO … … 174 175 DO jj = 2, jpjm1 175 176 DO ji = fs_2, fs_jpim1 ! vector opt. 176 zztmp2 = ( ( rCdU_bot(ji+1,jj)+rCdU_bot(ji ,jj) ) * u n(ji ,jj,mbku(ji ,jj)) )**2 &177 & + ( ( rCdU_bot(ji ,jj)+rCdU_bot(ji-1,jj) ) * u n(ji-1,jj,mbku(ji-1,jj)) )**2 &178 & + ( ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj ) ) * v n(ji,jj ,mbkv(ji,jj )) )**2 &179 & + ( ( rCdU_bot(ji,jj )+rCdU_bot(ji,jj-1) ) * v n(ji,jj-1,mbkv(ji,jj-1)) )**2177 zztmp2 = ( ( rCdU_bot(ji+1,jj)+rCdU_bot(ji ,jj) ) * uu(ji ,jj,mbku(ji ,jj),Kmm) )**2 & 178 & + ( ( rCdU_bot(ji ,jj)+rCdU_bot(ji-1,jj) ) * uu(ji-1,jj,mbku(ji-1,jj),Kmm) )**2 & 179 & + ( ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj ) ) * vv(ji,jj ,mbkv(ji,jj ),Kmm) )**2 & 180 & + ( ( rCdU_bot(ji,jj )+rCdU_bot(ji,jj-1) ) * vv(ji,jj-1,mbkv(ji,jj-1),Kmm) )**2 180 181 z2d(ji,jj) = zztmp * SQRT( zztmp2 ) * tmask(ji,jj,1) 181 182 ! … … 186 187 ENDIF 187 188 188 CALL iom_put( "uoce", u n(:,:,:) ) ! 3D i-current189 CALL iom_put( "ssu", u n(:,:,1) ) ! surface i-current189 CALL iom_put( "uoce", uu(:,:,:,Kmm) ) ! 3D i-current 190 CALL iom_put( "ssu", uu(:,:,1,Kmm) ) ! surface i-current 190 191 IF ( iom_use("sbu") ) THEN 191 192 DO jj = 1, jpj 192 193 DO ji = 1, jpi 193 194 ikbot = mbku(ji,jj) 194 z2d(ji,jj) = u n(ji,jj,ikbot)195 z2d(ji,jj) = uu(ji,jj,ikbot,Kmm) 195 196 END DO 196 197 END DO … … 198 199 ENDIF 199 200 200 CALL iom_put( "voce", v n(:,:,:) ) ! 3D j-current201 CALL iom_put( "ssv", v n(:,:,1) ) ! surface j-current201 CALL iom_put( "voce", vv(:,:,:,Kmm) ) ! 3D j-current 202 CALL iom_put( "ssv", vv(:,:,1,Kmm) ) ! surface j-current 202 203 IF ( iom_use("sbv") ) THEN 203 204 DO jj = 1, jpj 204 205 DO ji = 1, jpi 205 206 ikbot = mbkv(ji,jj) 206 z2d(ji,jj) = v n(ji,jj,ikbot)207 z2d(ji,jj) = vv(ji,jj,ikbot,Kmm) 207 208 END DO 208 209 END DO … … 210 211 ENDIF 211 212 212 CALL iom_put( "woce", w n) ! vertical velocity213 CALL iom_put( "woce", ww ) ! vertical velocity 213 214 IF( iom_use('w_masstr') .OR. iom_use('w_masstr2') ) THEN ! vertical mass transport & its square value 214 215 ! Caution: in the VVL case, it only correponds to the baroclinic mass transport. 215 216 z2d(:,:) = rau0 * e1e2t(:,:) 216 217 DO jk = 1, jpk 217 z3d(:,:,jk) = w n(:,:,jk) * z2d(:,:)218 z3d(:,:,jk) = ww(:,:,jk) * z2d(:,:) 218 219 END DO 219 220 CALL iom_put( "w_masstr" , z3d ) … … 231 232 DO jj = 2, jpjm1 ! sst gradient 232 233 DO ji = fs_2, fs_jpim1 ! vector opt. 233 zztmp = ts n(ji,jj,1,jp_tem)234 zztmpx = ( ts n(ji+1,jj,1,jp_tem) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - tsn(ji-1,jj ,1,jp_tem) ) * r1_e1u(ji-1,jj)235 zztmpy = ( ts n(ji,jj+1,1,jp_tem) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - tsn(ji ,jj-1,1,jp_tem) ) * r1_e2v(ji,jj-1)234 zztmp = ts(ji,jj,1,jp_tem,Kmm) 235 zztmpx = ( ts(ji+1,jj,1,jp_tem,Kmm) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - ts(ji-1,jj ,1,jp_tem,Kmm) ) * r1_e1u(ji-1,jj) 236 zztmpy = ( ts(ji,jj+1,1,jp_tem,Kmm) - zztmp ) * r1_e2v(ji,jj) + ( zztmp - ts(ji ,jj-1,1,jp_tem,Kmm) ) * r1_e2v(ji,jj-1) 236 237 z2d(ji,jj) = 0.25 * ( zztmpx * zztmpx + zztmpy * zztmpy ) & 237 238 & * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * umask(ji,jj-1,1) … … 250 251 DO jj = 1, jpj 251 252 DO ji = 1, jpi 252 z2d(ji,jj) = z2d(ji,jj) + e3t _n(ji,jj,jk) * tsn(ji,jj,jk,jp_tem) * tmask(ji,jj,jk)253 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) * tmask(ji,jj,jk) 253 254 END DO 254 255 END DO … … 262 263 DO jj = 1, jpj 263 264 DO ji = 1, jpi 264 z2d(ji,jj) = z2d(ji,jj) + e3t _n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) * tmask(ji,jj,jk)265 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) * tmask(ji,jj,jk) 265 266 END DO 266 267 END DO … … 274 275 DO jj = 2, jpjm1 275 276 DO ji = fs_2, fs_jpim1 ! vector opt. 276 zztmp = 0.25_wp * r1_e1e2t(ji,jj) / e3t _n(ji,jj,jk)277 z3d(ji,jj,jk) = zztmp * ( u n(ji-1,jj,jk)**2 * e2u(ji-1,jj) * e3u_n(ji-1,jj,jk) &278 & + u n(ji ,jj,jk)**2 * e2u(ji ,jj) * e3u_n(ji ,jj,jk) &279 & + v n(ji,jj-1,jk)**2 * e1v(ji,jj-1) * e3v_n(ji,jj-1,jk) &280 & + v n(ji,jj ,jk)**2 * e1v(ji,jj ) * e3v_n(ji,jj ,jk) )277 zztmp = 0.25_wp * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 278 z3d(ji,jj,jk) = zztmp * ( uu(ji-1,jj,jk,Kmm)**2 * e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm) & 279 & + uu(ji ,jj,jk,Kmm)**2 * e2u(ji ,jj) * e3u(ji ,jj,jk,Kmm) & 280 & + vv(ji,jj-1,jk,Kmm)**2 * e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm) & 281 & + vv(ji,jj ,jk,Kmm)**2 * e1v(ji,jj ) * e3v(ji,jj ,jk,Kmm) ) 281 282 END DO 282 283 END DO … … 286 287 ENDIF 287 288 ! 288 CALL iom_put( "hdiv", hdiv n) ! Horizontal divergence289 CALL iom_put( "hdiv", hdiv ) ! Horizontal divergence 289 290 ! 290 291 IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN … … 292 293 z2d(:,:) = 0.e0 293 294 DO jk = 1, jpkm1 294 z3d(:,:,jk) = rau0 * u n(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk)295 z3d(:,:,jk) = rau0 * uu(:,:,jk,Kmm) * e2u(:,:) * e3u(:,:,jk,Kmm) * umask(:,:,jk) 295 296 z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 296 297 END DO … … 304 305 DO jj = 2, jpjm1 305 306 DO ji = fs_2, fs_jpim1 ! vector opt. 306 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts n(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) )307 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji+1,jj,jk,jp_tem,Kmm) ) 307 308 END DO 308 309 END DO … … 317 318 DO jj = 2, jpjm1 318 319 DO ji = fs_2, fs_jpim1 ! vector opt. 319 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts n(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) )320 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji+1,jj,jk,jp_sal,Kmm) ) 320 321 END DO 321 322 END DO … … 329 330 z3d(:,:,jpk) = 0.e0 330 331 DO jk = 1, jpkm1 331 z3d(:,:,jk) = rau0 * v n(:,:,jk) * e1v(:,:) * e3v_n(:,:,jk) * vmask(:,:,jk)332 z3d(:,:,jk) = rau0 * vv(:,:,jk,Kmm) * e1v(:,:) * e3v(:,:,jk,Kmm) * vmask(:,:,jk) 332 333 END DO 333 334 CALL iom_put( "v_masstr", z3d ) ! mass transport in j-direction … … 339 340 DO jj = 2, jpjm1 340 341 DO ji = fs_2, fs_jpim1 ! vector opt. 341 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts n(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) )342 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji,jj+1,jk,jp_tem,Kmm) ) 342 343 END DO 343 344 END DO … … 352 353 DO jj = 2, jpjm1 353 354 DO ji = fs_2, fs_jpim1 ! vector opt. 354 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts n(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) )355 z2d(ji,jj) = z2d(ji,jj) + z3d(ji,jj,jk) * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji,jj+1,jk,jp_sal,Kmm) ) 355 356 END DO 356 357 END DO … … 365 366 DO jj = 2, jpjm1 366 367 DO ji = fs_2, fs_jpim1 ! vector opt. 367 z2d(ji,jj) = z2d(ji,jj) + e3t _n(ji,jj,jk) * tsn(ji,jj,jk,jp_tem)368 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm) 368 369 END DO 369 370 END DO … … 377 378 DO jj = 2, jpjm1 378 379 DO ji = fs_2, fs_jpim1 ! vector opt. 379 z2d(ji,jj) = z2d(ji,jj) + e3t _n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal)380 z2d(ji,jj) = z2d(ji,jj) + e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm) 380 381 END DO 381 382 END DO … … 388 389 ! 389 390 390 IF (ln_diatmb) CALL dia_tmb 391 IF (ln_diatmb) CALL dia_tmb( Kmm ) ! tmb values 391 392 392 IF (ln_dia25h) CALL dia_25h( kt )! 25h averaging393 IF (ln_dia25h) CALL dia_25h( kt, Kmm ) ! 25h averaging 393 394 394 395 IF( ln_timing ) CALL timing_stop('dia_wri') … … 407 408 END FUNCTION dia_wri_alloc 408 409 409 SUBROUTINE dia_wri( kt ) 410 INTEGER, INTENT( in ) :: kt ! ocean time-step index 411 410 411 SUBROUTINE dia_wri( kt, Kmm ) 412 413 INTEGER, INTENT( in ) :: kt ! ocean time-step index 414 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 412 415 IF( ninist == 1 ) THEN !== Output the initial state and forcings ==! 413 CALL dia_wri_state( 'output.init' )416 CALL dia_wri_state( Kmm, 'output.init' ) 414 417 ninist = 0 415 418 ENDIF 419 ! 420 ! 0. Initialisation 421 ! ----------------- 416 422 417 423 END SUBROUTINE dia_wri … … 419 425 #endif 420 426 421 SUBROUTINE dia_wri_state( cdfile_name )427 SUBROUTINE dia_wri_state( Kmm, cdfile_name ) 422 428 !!--------------------------------------------------------------------- 423 429 !! *** ROUTINE dia_wri_state *** … … 432 438 !! File 'output.abort.nc' is created in case of abnormal job end 433 439 !!---------------------------------------------------------------------- 440 INTEGER , INTENT( in ) :: Kmm ! time level index 434 441 CHARACTER (len=* ), INTENT( in ) :: cdfile_name ! name of the file created 435 442 !! … … 448 455 #endif 449 456 450 CALL iom_rstput( 0, 0, inum, 'votemper', ts n(:,:,:,jp_tem) ) ! now temperature451 CALL iom_rstput( 0, 0, inum, 'vosaline', ts n(:,:,:,jp_sal) ) ! now salinity452 CALL iom_rstput( 0, 0, inum, 'sossheig', ssh n) ! sea surface height453 CALL iom_rstput( 0, 0, inum, 'vozocrtx', u n) ! now i-velocity454 CALL iom_rstput( 0, 0, inum, 'vomecrty', v n) ! now j-velocity455 CALL iom_rstput( 0, 0, inum, 'vovecrtz', w n) ! now k-velocity457 CALL iom_rstput( 0, 0, inum, 'votemper', ts(:,:,:,jp_tem,Kmm) ) ! now temperature 458 CALL iom_rstput( 0, 0, inum, 'vosaline', ts(:,:,:,jp_sal,Kmm) ) ! now salinity 459 CALL iom_rstput( 0, 0, inum, 'sossheig', ssh(:,:,Kmm) ) ! sea surface height 460 CALL iom_rstput( 0, 0, inum, 'vozocrtx', uu(:,:,:,Kmm) ) ! now i-velocity 461 CALL iom_rstput( 0, 0, inum, 'vomecrty', vv(:,:,:,Kmm) ) ! now j-velocity 462 CALL iom_rstput( 0, 0, inum, 'vovecrtz', ww ) ! now k-velocity 456 463 IF( ALLOCATED(ahtu) ) THEN 457 464 CALL iom_rstput( 0, 0, inum, 'ahtu', ahtu ) ! aht at u-point … … 469 476 CALL iom_rstput( 0, 0, inum, 'sometauy', vtau ) ! j-wind stress 470 477 IF( .NOT.ln_linssh ) THEN 471 CALL iom_rstput( 0, 0, inum, 'vovvldep', gdept _n) ! T-cell depth472 CALL iom_rstput( 0, 0, inum, 'vovvle3t', e3t _n) ! T-cell thickness478 CALL iom_rstput( 0, 0, inum, 'vovvldep', gdept(:,:,:,Kmm) ) ! T-cell depth 479 CALL iom_rstput( 0, 0, inum, 'vovvle3t', e3t(:,:,:,Kmm) ) ! T-cell thickness 473 480 END IF 474 481 IF( ln_wave .AND. ln_sdw ) THEN -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/tests/BENCH/MY_SRC/zdfiwm.F90
r10420 r11758 69 69 70 70 71 SUBROUTINE zdf_iwm( kt, p_avm, p_avt, p_avs )71 SUBROUTINE zdf_iwm( kt, Kmm, p_avm, p_avt, p_avs ) 72 72 !!---------------------------------------------------------------------- 73 73 !! *** ROUTINE zdf_iwm *** … … 118 118 !!---------------------------------------------------------------------- 119 119 INTEGER , INTENT(in ) :: kt ! ocean time step 120 INTEGER , INTENT(in ) :: Kmm ! time level index 120 121 REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: p_avm ! momentum Kz (w-points) 121 122 REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: p_avt, p_avs ! tracer Kz (w-points) … … 155 156 END DO 156 157 END DO 157 !!gm gde3w ==>>> check for ssh taken into account.... seem OK gde3w_n=gdept _n - sshn158 !!gm gde3w ==>>> check for ssh taken into account.... seem OK gde3w_n=gdept(Kmm) - ssh(Kmm) 158 159 DO jk = 2, jpkm1 ! complete with the level-dependent part 159 zemx_iwm(:,:,jk) = zfact(:,:) * ( EXP( ( gde3w _n(:,:,jk ) - zhdep(:,:) ) / hcri_iwm(:,:) ) &160 & - EXP( ( gde3w _n(:,:,jk-1) - zhdep(:,:) ) / hcri_iwm(:,:) ) ) * wmask(:,:,jk) &161 & / ( gde3w _n(:,:,jk) - gde3w_n(:,:,jk-1) )162 163 !!gm delta(gde3w _n) = e3t_n!! Please verify the grid-point position w versus t-point160 zemx_iwm(:,:,jk) = zfact(:,:) * ( EXP( ( gde3w(:,:,jk ) - zhdep(:,:) ) / hcri_iwm(:,:) ) & 161 & - EXP( ( gde3w(:,:,jk-1) - zhdep(:,:) ) / hcri_iwm(:,:) ) ) * wmask(:,:,jk) & 162 & / ( gde3w(:,:,jk) - gde3w(:,:,jk-1) ) 163 164 !!gm delta(gde3w) = e3t(Kmm) !! Please verify the grid-point position w versus t-point 164 165 !!gm it seems to me that only 1/hcri_iwm is used ==> compute it one for all 165 166 … … 175 176 zfact(:,:) = 0._wp 176 177 DO jk = 2, jpkm1 ! part independent of the level 177 zfact(:,:) = zfact(:,:) + e3w _n(:,:,jk) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk)178 zfact(:,:) = zfact(:,:) + e3w(:,:,jk,Kmm) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk) 178 179 END DO 179 180 ! … … 192 193 zfact(:,:) = 0._wp 193 194 DO jk = 2, jpkm1 ! part independent of the level 194 zfact(:,:) = zfact(:,:) + e3w _n(:,:,jk) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk)195 zfact(:,:) = zfact(:,:) + e3w(:,:,jk,Kmm) * MAX( 0._wp, rn2(:,:,jk) ) * wmask(:,:,jk) 195 196 END DO 196 197 ! … … 213 214 zfact(:,:) = 0._wp 214 215 DO jk = 2, jpkm1 215 zfact(:,:) = zfact(:,:) + e3w _n(:,:,jk) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk)216 zfact(:,:) = zfact(:,:) + e3w(:,:,jk,Kmm) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) * wmask(:,:,jk) 216 217 zwkb(:,:,jk) = zfact(:,:) 217 218 END DO 218 219 !!gm even better: 219 220 ! DO jk = 2, jpkm1 220 ! zwkb(:,:) = zwkb(:,:) + e3w _n(:,:,jk) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) )221 ! zwkb(:,:) = zwkb(:,:) + e3w(:,:,jk,Kmm) * SQRT( MAX( 0._wp, rn2(:,:,jk) ) ) 221 222 ! END DO 222 223 ! zfact(:,:) = zwkb(:,:,jpkm1) … … 253 254 DO jk = 2, jpkm1 ! complete with the level-dependent part 254 255 zemx_iwm(:,:,jk) = zemx_iwm(:,:,jk) + zweight(:,:,jk) * zfact(:,:) * wmask(:,:,jk) & 255 & / ( gde3w _n(:,:,jk) - gde3w_n(:,:,jk-1) )256 !!gm use of e3t _njust above?256 & / ( gde3w(:,:,jk) - gde3w(:,:,jk-1) ) 257 !!gm use of e3t(:,:,:,Kmm) just above? 257 258 END DO 258 259 ! 259 260 !!gm this is to be replaced by just a constant value znu=1.e-6 m2/s 260 261 ! Calculate molecular kinematic viscosity 261 znu_t(:,:,:) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * ts n(:,:,:,jp_tem) + 0.00694_wp * tsn(:,:,:,jp_tem) * tsn(:,:,:,jp_tem) &262 & + 0.02305_wp * ts n(:,:,:,jp_sal) ) * tmask(:,:,:) * r1_rau0262 znu_t(:,:,:) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * ts(:,:,:,jp_tem,Kmm) + 0.00694_wp * ts(:,:,:,jp_tem,Kmm) * ts(:,:,:,jp_tem,Kmm) & 263 & + 0.02305_wp * ts(:,:,:,jp_sal,Kmm) ) * tmask(:,:,:) * r1_rau0 263 264 DO jk = 2, jpkm1 264 265 znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) … … 300 301 DO jj = 1, jpj 301 302 DO ji = 1, jpi 302 zztmp = zztmp + e3w _n(ji,jj,jk) * e1e2t(ji,jj) &303 zztmp = zztmp + e3w(ji,jj,jk,Kmm) * e1e2t(ji,jj) & 303 304 & * MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 304 305 END DO … … 356 357 z2d(:,:) = 0._wp 357 358 DO jk = 2, jpkm1 358 z2d(:,:) = z2d(:,:) + e3w _n(:,:,jk) * z3d(:,:,jk) * wmask(:,:,jk)359 z2d(:,:) = z2d(:,:) + e3w(:,:,jk,Kmm) * z3d(:,:,jk) * wmask(:,:,jk) 359 360 END DO 360 361 z2d(:,:) = rau0 * z2d(:,:)
Note: See TracChangeset
for help on using the changeset viewer.