Changeset 8172
- Timestamp:
- 2017-06-14T15:44:31+02:00 (7 years ago)
- Location:
- branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r8158 r8172 423 423 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_dmi_dyn !: Change in ice mass due to ice dynamics (kg/m2/s) 424 424 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_dms_dyn !: Change in snow mass due to ice dynamics (kg/m2/s) 425 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_dmtx_dyn !: X-component of total snow + ice mass transport (kg/s) 426 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_dmty_dyn !: X-component of total snow + ice mass transport (kg/s) 425 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_xmtrp_ice !: X-component of ice mass transport (kg/s) 426 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_ymtrp_ice !: Y-component of ice mass transport (kg/s) 427 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_xmtrp_snw !: X-component of snow mass transport (kg/s) 428 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_ymtrp_ice !: Y-component of snow mass transport (kg/s) 429 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_xatran !: X-component of area transport (m2/s) 430 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_yatran !: Y-component of area transport (m2/s) 427 431 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_fc_bo !: Bottom conduction flux (W/m2) 428 432 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: diag_fc_su !: Surface conduction flux (W/m2) … … 540 544 ALLOCATE( t_si (jpi,jpj,jpl) , tm_si(jpi,jpj) , & 541 545 diag_dmi_dyn(jpi,jpj) , diag_dms_dyn(jpi,jpj) , & 542 diag_dmtx_dyn(jpi,jpj), diag_dmty_dyn(jpi,jpj), & 546 diag_xmtrp_ice(jpi,jpj), diag_ymtrp_ice(jpi,jpj), & 547 diag_xmtrp_snw(jpi,jpj), diag_ymtrp_snw(jpi,jpj), & 548 diag_xatrp(jpi,jpj) , diag_yatrp(jpi,jpj) , & 543 549 diag_fc_bo(jpi,jpj) , diag_fc_su(jpi,jpj) , & 544 550 diag_utau_oi(jpi,jpj) , diag_vtau_oi(jpi,jpj) , & -
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r8156 r8172 129 129 REAL(wp) :: zresm ! Maximal error on ice velocity 130 130 REAL(wp) :: zintb, zintn ! dummy argument 131 REAL(wp) :: zswi 131 REAL(wp) :: zswi, zfac_x, zfac_y 132 132 133 133 REAL(wp), POINTER, DIMENSION(:,:) :: zpresh ! temporary array for ice strength … … 672 672 diag_vtau_oi(ji,jj) = ztauy_oi(ji,jj) * zswi 673 673 674 ! 2D ice mass, snow mass, area transport arrays (X, Y) 675 zfac_x = 0.5 * u_ice(ji,jj) * e2u(ji,jj) * zswi 676 zfac_y = 0.5 * v_ice(ji,jj) * e1v(ji,jj) * zswi 677 678 diag_xmtrp_ice(ji,jj) = rhoic * zfac_x * ( vt_i(ji+1,jj) + vt_i(ji,jj) ) ! ice mass transport, X-component 679 diag_ymtrp_ice(ji,jj) = rhoic * zfac_y * ( vt_i(ji,jj+1) + vt_i(ji,jj) ) ! '' Y- '' 680 681 diag_xmtrp_snw(ji,jj) = rhosn * zfac_x * ( vt_s(ji+1,jj) + vt_s(ji,jj) ) ! snow mass transport, X-component 682 diag_ymtrp_snw(ji,jj) = rhosn * zfac_y * ( vt_s(ji,jj+1) + vt_s(ji,jj) ) ! '' Y- '' 683 684 diag_xatrp(ji,jj) = zfac_x * ( at_i(ji+1,jj) + at_i(ji,jj) ) ! area transport, X-component 685 diag_yatrp(ji,jj) = zfac_y * ( at_i(ji,jj+1) + at_i(ji,jj) ) ! '' Y- '' 686 674 687 END DO 675 688 END DO -
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r8152 r8172 117 117 zesold(:,:) = SUM( SUM( e_s(:,:,1:nlay_s,:), dim=4 ), dim=3 ) 118 118 119 ! SIMIP diags init120 diag_dmtx_dyn(:,:) = 0._wp ; diag_dmty_dyn(:,:) = 0._wp121 122 119 !--- Thickness correction init. ------------------------------- 123 120 zatold(:,:) = SUM( a_i(:,:,:), dim=3 ) … … 192 189 & sxxopw(:,:) , syopw(:,:), syyopw(:,:), sxyopw(:,:) ) 193 190 DO jl = 1, jpl 194 195 ! SIMIP mass transport diags196 diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )197 198 191 CALL lim_adv_x( zusnit, u_ice, 1._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl), & !--- ice volume --- 192 & sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl) ) 193 CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl), & !--- ice volume 199 194 & sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl) ) 200 195 CALL lim_adv_x( zusnit, u_ice, 1._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl), & !--- snow volume --- 201 196 & sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl) ) 202 203 diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )204 205 diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )206 207 CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl), & !--- ice volume208 & sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl) )209 197 CALL lim_adv_y( zusnit, v_ice, 0._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl), & !--- snow volume 210 198 & sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl) ) 211 212 diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )213 214 199 CALL lim_adv_x( zusnit, u_ice, 1._wp, zsm, z0smi (:,:,jl), sxsal(:,:,jl), & !--- ice salinity --- 215 200 & sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl) ) … … 245 230 & sxxopw(:,:) , syopw(:,:), syyopw(:,:), sxyopw(:,:) ) 246 231 DO jl = 1, jpl 247 248 ! SIMIP mass transport diags249 diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )250 232 CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl), & !--- ice volume --- 233 & sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl) ) 234 CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl), & !--- ice volume --- 251 235 & sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl) ) 252 236 CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl), & !--- snow volume --- 253 237 & sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl) ) 254 diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )255 256 diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) - ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )257 CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0ice (:,:,jl), sxice(:,:,jl), & !--- ice volume ---258 & sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl) )259 238 CALL lim_adv_x( zusnit, u_ice, 0._wp, zsm, z0snw (:,:,jl), sxsn (:,:,jl), & !--- snow volume --- 260 239 & sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl) ) 261 diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) + ( rhoic * z0ice(:,:,jl) + rhosn * z0snw(:,:,jl) )262 263 240 CALL lim_adv_y( zusnit, v_ice, 1._wp, zsm, z0smi (:,:,jl), sxsal(:,:,jl), & !--- ice salinity --- 264 241 & sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl) ) … … 289 266 ENDIF 290 267 291 ! SIMIP diags292 diag_dmtx_dyn(:,:) = diag_dmtx_dyn(:,:) / rdt_ice293 diag_dmty_dyn(:,:) = diag_dmty_dyn(:,:) / rdt_ice294 295 268 !------------------------------------------- 296 269 ! Recover the properties from their contents -
branches/2016/v3_6_CMIP6_ice_diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90
r8158 r8172 68 68 & zdiag_volu_sh 69 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 70 ! ! Strait / passage fluxes (SIMIP) 71 ! REAL(wp), DIMENSION(4) :: & ! Strait fluxes for output 72 ! & zdiag_area_strait , & ! 1=Fram Strait, 2=CAA, 3= Barents, 4 = Bering 73 ! & zdiag_mice_strait , & 74 ! & zdiag_msno_strait 75 76 ! REAL(wp) :: zfarea_u, zfmice_u, zfmsno_u, zfarea_v, zfmice_v, zfmsno_v ! dummy fluxes 77 78 ! REAL(wp), DIMENSION(11) :: & 79 ! & zui, zuj, zvi, zvj ! strait addresses 80 81 ! INTEGER :: Nu, Nv, & ! passage size 82 ! i_strait ! strait number 83 84 ! INTEGER, DIMENSION(4) :: ji0, ji1, jj0, jj1 85 85 86 86 !!------------------------------------------------------------------- … … 293 293 IF ( iom_use( "wfxsum" ) ) CALL iom_put( "wfxsum" , wfx_sum ) ! Freshwater flux from sea-ice surface 294 294 295 IF ( iom_use( "dmtxdyn" ) ) CALL iom_put( "dmtxdyn" , diag_dmtx_dyn ) ! X-component of sea-ice mass transport296 IF ( iom_use( "dmtydyn" ) ) CALL iom_put( "dmtydyn" , diag_dmty_dyn ) ! Y-component of sea-ice mass transport297 298 295 IF ( iom_use( "utau_oi" ) ) CALL iom_put( "utau_oi" , diag_utau_oi*zswi ) ! X-component of ocean stress on sea ice 299 296 IF ( iom_use( "vtau_oi" ) ) CALL iom_put( "vtau_oi" , diag_vtau_oi*zswi ) ! Y-component of ocean stress on sea ice … … 310 307 IF ( iom_use( "normstr" ) ) CALL iom_put( "normstr" , diag_sig1 *zswi ) ! Normal stress 311 308 IF ( iom_use( "sheastr" ) ) CALL iom_put( "sheastr" , diag_sig2 *zswi ) ! Shear stress 309 310 IF ( iom_use( "xmtrpice" ) ) CALL iom_put( "xmtrpice" , diag_xmtrp_ice ) ! X-component of sea-ice mass transport 311 IF ( iom_use( "ymtrpice" ) ) CALL iom_put( "ymtrpice" , diag_ymtrp_ice ) ! Y-component of sea-ice mass transport 312 313 IF ( iom_use( "xmtrpsnw" ) ) CALL iom_put( "xmtrpsnw" , diag_xmtrp_snw ) ! X-component of snow mass transport 314 IF ( iom_use( "ymtrpsnw" ) ) CALL iom_put( "ymtrpsnw" , diag_ymtrp_snw ) ! Y-component of snow mass transport 315 316 IF ( iom_use( "xatrp" ) ) CALL iom_put( "xatrp" , diag_xatrp ) ! X-component of ice area transport 317 IF ( iom_use( "yatrp" ) ) CALL iom_put( "yatrp" , diag_yatrp ) ! Y-component of ice area transport 312 318 313 319 !-------------------------------- … … 356 362 357 363 ENDIF 358 359 !-------------------------------- 360 ! Fluxes through straits (SIMIP) 361 !-------------------------------- 362 ! 363 ! Valid only for ORCA-like grids 364 ! 365 ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering; see Notz et al (GMD 2016) for definitions) 366 ! 367 ! Fram and Bering straits are easy because they follow parallels 368 ! Barents and Canadian Arctic Archipelago are less easy because they do not, which is why they look so awful. 369 ! 370 371 IF ( iom_use( "strait_arfl" ) .OR. iom_use( "strait_mifl" ) .OR. iom_use( "strait_msfl" ) .AND. cp_cfg == "orca" ) THEN 372 373 zdiag_area_strait(:) = 0._wp ; zdiag_mice_strait(:) = 0._wp ; zdiag_msno_strait(:) = 0._wp 374 375 !------------------------------ 376 ! === Fram & Bering Straits === 377 !------------------------------ 378 379 SELECT CASE ( jp_cfg ) 380 381 CASE ( 2 ) ! --- ORCA2 382 383 ! Fram Strait (i_strait = 1) 384 ji0(1) = 133 ; ji1(1) = 136 385 jj0(1) = 136 386 387 ! Bering Strait (i_strait = 4) 388 ji0(4) = 55 ; ji1(4) = 56 389 jj0(4) = 122 390 391 CASE ( 1 ) ! --- eORCA1 392 393 ! Fram Strait 394 ji0(1) = 268 ; ji1(1) = 277 395 jj0(1) = 311 396 397 ! Bering Strait 398 ji0(4) = 113 ; jj1(4) = 115 399 jj0(4) = 285 400 401 END SELECT 402 403 DO i_strait = 1, 4, 3 404 405 DO ji = mi0( ji0(i_strait) ), mi1(ji1 (i_strait) ) 406 jj = mj0( jj0(i_strait) ) 407 408 zdiag_area_strait(i_strait) = zdiag_area_strait(i_strait) & ! --- ice area flux --- 409 & + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 ) & ! northwards (positive) flow 410 & + at_i(ji,jj ) * e12t(ji,jj) * MIN( v_ice(ji,jj-1), 0.0 ) ! southwards (negative) flow 411 412 zdiag_mice_strait(i_strait) = zdiag_mice_strait(i_strait) + rhoic * & ! --- ice mass flux --- 413 & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 ) & 414 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( v_ice(ji,jj-1), 0.0 ) ) 415 416 zdiag_msno_strait(i_strait) = zdiag_msno_strait(i_strait) + rhosn * & ! --- snow mass flux --- 417 & ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 ) & 418 & + vt_s(ji,jj ) * e12t(ji,jj) * MIN( v_ice(ji,jj-1), 0.0 ) ) 419 420 END DO 421 422 END DO 423 424 !--------------------- 425 ! === Barents opening 426 !--------------------- 427 428 SELECT CASE ( jp_cfg ) 429 430 CASE ( 1 ) ! 'eORCA1' 431 432 Nu = 11 ! U-Flow 433 zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/) 434 zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/) 435 436 Nv = 9 ! V-Flow 437 zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/) 438 zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/) 439 440 CASE ( 2 ) ! 'ORCA2' 441 442 Nu = 5 ! U-Flow 443 zui(1:Nu) = (/ 141,142,142,143,144 /) 444 zuj(1:Nu) = (/ 134,133,132,131,130 /) 445 446 Nv = 4 ! V-Flow 447 zvi(1:Nv) = (/ 140,141,142,143 /) 448 zvj(1:Nv) = (/ 135,134,132,131 /) 449 450 END SELECT 451 452 ! Barents U-flow 453 zfarea_u = 0._wp ; zfmice_u = 0._wp ; zfmsno_u = 0._wp 454 455 DO ii = 1, Nu 456 457 ji = mi0(zui(ii)) 458 jj = mj0(zuj(ii)) 459 460 zfarea_u = zfarea_u & ! --- ice area zonal flux --- 461 & + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & ! --- northward 462 & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ! --- southward 463 zfmice_u = zfmice_u + rhoic * & ! --- ice mass zonal flux --- 464 & ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 465 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 466 zfmsno_u = zfmsno_u + rhosn * & ! --- snow mass zonal flux --- 467 & ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 468 & + vt_s(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 469 END DO 470 471 ! Barents V-flow 472 zfarea_v = 0._wp ; zfmice_v = 0._wp ; zfmsno_v = 0._wp 473 474 DO ii = 1, Nv 475 476 ji = mi0(zvi(ii)) 477 jj = mj0(zvj(ii)) 478 479 zfarea_v = zfarea_v & ! --- ice area meridian flux --- 480 & + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! --- eastward 481 & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ! --- westward 482 zfmice_v = zfmice_v + rhoic * & ! --- ice mass meridian flux --- 483 & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 484 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 485 zfmsno_v = zfmsno_v + rhosn * & ! --- snow mass meridian flux --- 486 & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 487 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 488 END DO 489 490 ! Sum Barents U-/V- contributions 491 zdiag_area_strait(3) = zfarea_u + zfarea_v 492 zdiag_mice_strait(3) = zfmice_u + zfmice_v 493 zdiag_msno_strait(3) = zfmsno_u + zfmsno_v 494 495 !--------------------- 496 ! === CAA throughflow 497 !--------------------- 498 499 SELECT CASE ( jp_cfg ) 500 501 CASE ( 1 ) ! eORCA1 502 503 ! V-flow through Nares Strait 504 Nv = 4 505 zvi(1:Nv) = (/ 254,255,256,257 /) 506 zvj(1:Nv) = (/ 317,317,317,317 /) 507 508 ! U-flow through Queen Elisabeth Islands and McClure straits 509 Nu = 8 510 zui(1:Nu) = (/ 231,231,231, 132,132,132,132,132 /) 511 zuj(1:Nu) = (/ 328,329,330, 318,319,320,321,322 /) 512 513 zfarea_u = 0._wp ; zfmice_u = 0._wp ; zfmsno_u = 0._wp 514 515 DO ii = 1, Nu 516 517 ji = mi0(zui(ii)) 518 jj = mj0(zuj(ii)) 519 520 zfarea_u = zfarea_u & ! --- ice area zonal flux --- 521 & + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & ! --- eastward 522 & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ! --- westward 523 zfmice_u = zfmice_u + rhoic * & ! --- ice mass zonal flux --- 524 & ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 525 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 526 zfmsno_u = zfmsno_u + rhosn * & ! --- snow mass zonal flux --- 527 & ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 528 & + vt_s(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 529 530 END DO 531 532 533 CASE ( 2 ) ! ORCA2 534 535 ! V-flow through Nares Strait 536 Nv = 2 537 zvi(1:Nv) = (/ 117,118 /) 538 zvj(1:Nv) = (/ 145,145 /) 539 540 ! U-flow through Queen Elisabeth Islands and McClure straits (not resolved in ORCA2) 541 zfarea_u = 0._wp ; zfmice_u = 0._wp ; zfmsno_u = 0._wp 542 543 END SELECT 544 545 ! V-flow through Nares Strait 546 zfarea_v = 0._wp ; zfmice_v = 0._wp ; zfmsno_v = 0._wp 547 548 DO ii = 1, Nv 549 550 ji = mi0(zvi(ii)) 551 jj = mj0(zvj(ii)) 552 553 zfarea_v = zfarea_v & ! --- ice area meridian flux --- 554 & + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! --- eastward 555 & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ! --- westward 556 zfmice_v = zfmice_v + rhoic * & ! --- ice mass meridian flux --- 557 & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 558 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 559 zfmsno_v = zfmsno_v + rhosn * & ! --- snow mass meridian flux --- 560 & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 561 & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 562 563 END DO 564 565 ! Sum U/V contributions 566 zdiag_area_strait(2) = zfarea_u + zfarea_v 567 zdiag_mice_strait(2) = zfmice_u + zfmice_v 568 zdiag_msno_strait(2) = zfmsno_u + zfmsno_v 569 570 ! === Ncdf output 571 IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait ) 572 IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait ) 573 IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait ) 574 575 WRITE(numout,*) " area flx ", zdiag_area_strait(:) 576 WRITE(numout,*) " mice flx ", zdiag_mice_strait(:) 577 WRITE(numout,*) " msno flx ", zdiag_msno_strait(:) 578 579 ENDIF 364 ! !------------------------------------- 365 ! ! Area, ice mass and snow mass fluxes 366 ! !------------------------------------- 367 ! ! SIMIP requires fluxes through passages and straits 368 ! ! Easiest implementation is via offline python script 369 ! ! strait_ar_x 370 ! 371 ! !-------------------------------- 372 ! ! Fluxes through straits (SIMIP) 373 ! !-------------------------------- 374 ! ! 375 ! ! Valid only for ORCA-like grids 376 ! ! 377 ! ! 4 Arctic passages are considered (Fram, CAA, Barents, Bering; see Notz et al (GMD 2016) for definitions) 378 ! ! 379 ! ! Fram and Bering straits are easy because they follow parallels 380 ! ! Barents and Canadian Arctic Archipelago are less easy because they do not, which is why they look so awful. 381 ! ! 382 ! 383 ! IF ( iom_use( "strait_arfl" ) .OR. iom_use( "strait_mifl" ) .OR. iom_use( "strait_msfl" ) .AND. cp_cfg == "orca" ) THEN 384 ! 385 ! zdiag_area_strait(:) = 0._wp ; zdiag_mice_strait(:) = 0._wp ; zdiag_msno_strait(:) = 0._wp 386 ! 387 ! !------------------------------ 388 ! ! === Fram & Bering Straits === 389 ! !------------------------------ 390 ! 391 ! SELECT CASE ( jp_cfg ) 392 ! 393 ! CASE ( 2 ) ! --- ORCA2 394 ! 395 ! ! Fram Strait (i_strait = 1) 396 ! ji0(1) = 133 ; ji1(1) = 136 397 ! jj0(1) = 136 398 ! 399 ! ! Bering Strait (i_strait = 4) 400 ! ji0(4) = 55 ; ji1(4) = 56 401 ! jj0(4) = 122 402 ! 403 ! CASE ( 1 ) ! --- eORCA1 404 ! 405 ! ! Fram Strait 406 ! ji0(1) = 268 ; ji1(1) = 277 407 ! jj0(1) = 311 408 ! 409 ! ! Bering Strait 410 ! ji0(4) = 113 ; jj1(4) = 115 411 ! jj0(4) = 285 412 ! 413 ! END SELECT 414 ! 415 ! DO i_strait = 1, 4, 3 416 ! 417 ! DO ji = mi0( ji0(i_strait) ), mi1(ji1 (i_strait) ) 418 ! jj = mj0( jj0(i_strait) ) 419 ! 420 ! zdiag_area_strait(i_strait) = zdiag_area_strait(i_strait) & ! --- ice area flux --- 421 ! & + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 ) & ! northwards (positive) flow 422 ! & + at_i(ji,jj ) * e12t(ji,jj) * MIN( v_ice(ji,jj-1), 0.0 ) ! southwards (negative) flow 423 ! 424 ! zdiag_mice_strait(i_strait) = zdiag_mice_strait(i_strait) + rhoic * & ! --- ice mass flux --- 425 ! & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 ) & 426 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( v_ice(ji,jj-1), 0.0 ) ) 427 ! 428 ! zdiag_msno_strait(i_strait) = zdiag_msno_strait(i_strait) + rhosn * & ! --- snow mass flux --- 429 ! & ( vt_s(ji,jj-1) * e12t(ji,jj-1) * MAX( v_ice(ji,jj-1), 0.0 ) & 430 ! & + vt_s(ji,jj ) * e12t(ji,jj) * MIN( v_ice(ji,jj-1), 0.0 ) ) 431 ! 432 ! END DO 433 ! 434 ! END DO 435 ! 436 ! !--------------------- 437 ! ! === Barents opening 438 ! !--------------------- 439 ! 440 ! SELECT CASE ( jp_cfg ) 441 ! 442 ! CASE ( 1 ) ! 'eORCA1' 443 ! 444 ! Nu = 11 ! U-Flow 445 ! zui(1:Nu) = (/ 282,283,284,285,286,286,287,288,289,290,292/) 446 ! zuj(1:Nu) = (/ 308,307,306,305,304,303,302,301,300,299,298/) 447 ! 448 ! Nv = 9 ! V-Flow 449 ! zvi(1:Nv) = (/ 282,283,284,285,286,287,288,289,290/) 450 ! zvj(1:Nv) = (/ 308,307,306,305,303,302,301,300,299/) 451 ! 452 ! CASE ( 2 ) ! 'ORCA2' 453 ! 454 ! Nu = 5 ! U-Flow 455 ! zui(1:Nu) = (/ 141,142,142,143,144 /) 456 ! zuj(1:Nu) = (/ 134,133,132,131,130 /) 457 ! 458 ! Nv = 4 ! V-Flow 459 ! zvi(1:Nv) = (/ 140,141,142,143 /) 460 ! zvj(1:Nv) = (/ 135,134,132,131 /) 461 ! 462 ! END SELECT 463 ! 464 ! ! Barents U-flow 465 ! zfarea_u = 0._wp ; zfmice_u = 0._wp ; zfmsno_u = 0._wp 466 ! 467 ! DO ii = 1, Nu 468 ! 469 ! ji = mi0(zui(ii)) 470 ! jj = mj0(zuj(ii)) 471 ! 472 ! zfarea_u = zfarea_u & ! --- ice area zonal flux --- 473 ! & + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & ! --- northward 474 ! & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ! --- southward 475 ! zfmice_u = zfmice_u + rhoic * & ! --- ice mass zonal flux --- 476 ! & ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 477 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 478 ! zfmsno_u = zfmsno_u + rhosn * & ! --- snow mass zonal flux --- 479 ! & ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 480 ! & + vt_s(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 481 ! END DO 482 ! 483 ! ! Barents V-flow 484 ! zfarea_v = 0._wp ; zfmice_v = 0._wp ; zfmsno_v = 0._wp 485 ! 486 ! DO ii = 1, Nv 487 ! 488 ! ji = mi0(zvi(ii)) 489 ! jj = mj0(zvj(ii)) 490 ! 491 ! zfarea_v = zfarea_v & ! --- ice area meridian flux --- 492 ! & + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! --- eastward 493 ! & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ! --- westward 494 ! zfmice_v = zfmice_v + rhoic * & ! --- ice mass meridian flux --- 495 ! & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 496 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 497 ! zfmsno_v = zfmsno_v + rhosn * & ! --- snow mass meridian flux --- 498 ! & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 499 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 500 ! END DO 501 ! 502 ! ! Sum Barents U-/V- contributions 503 ! zdiag_area_strait(3) = zfarea_u + zfarea_v 504 ! zdiag_mice_strait(3) = zfmice_u + zfmice_v 505 ! zdiag_msno_strait(3) = zfmsno_u + zfmsno_v 506 ! 507 ! !--------------------- 508 ! ! === CAA throughflow 509 ! !--------------------- 510 ! 511 ! SELECT CASE ( jp_cfg ) 512 ! 513 ! CASE ( 1 ) ! eORCA1 514 ! 515 ! ! V-flow through Nares Strait 516 ! Nv = 4 517 ! zvi(1:Nv) = (/ 254,255,256,257 /) 518 ! zvj(1:Nv) = (/ 317,317,317,317 /) 519 ! 520 ! ! U-flow through Queen Elisabeth Islands and McClure straits 521 ! Nu = 8 522 ! zui(1:Nu) = (/ 231,231,231, 132,132,132,132,132 /) 523 ! zuj(1:Nu) = (/ 328,329,330, 318,319,320,321,322 /) 524 ! 525 ! zfarea_u = 0._wp ; zfmice_u = 0._wp ; zfmsno_u = 0._wp 526 ! 527 ! DO ii = 1, Nu 528 ! 529 ! ji = mi0(zui(ii)) 530 ! jj = mj0(zuj(ii)) 531 ! 532 ! zfarea_u = zfarea_u & ! --- ice area zonal flux --- 533 ! & + at_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & ! --- eastward 534 ! & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ! --- westward 535 ! zfmice_u = zfmice_u + rhoic * & ! --- ice mass zonal flux --- 536 ! & ( vt_i(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 537 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 538 ! zfmsno_u = zfmsno_u + rhosn * & ! --- snow mass zonal flux --- 539 ! & ( vt_s(ji-1,jj) * e12t(ji-1,jj) * MAX( u_ice(ji-1,jj), 0.0 ) & 540 ! & + vt_s(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji-1,jj), 0.0 ) ) 541 ! 542 ! END DO 543 ! 544 ! 545 ! CASE ( 2 ) ! ORCA2 546 ! 547 ! ! V-flow through Nares Strait 548 ! Nv = 2 549 ! zvi(1:Nv) = (/ 117,118 /) 550 ! zvj(1:Nv) = (/ 145,145 /) 551 ! 552 ! ! U-flow through Queen Elisabeth Islands and McClure straits (not resolved in ORCA2) 553 ! zfarea_u = 0._wp ; zfmice_u = 0._wp ; zfmsno_u = 0._wp 554 ! 555 ! END SELECT 556 ! 557 ! ! V-flow through Nares Strait 558 ! zfarea_v = 0._wp ; zfmice_v = 0._wp ; zfmsno_v = 0._wp 559 ! 560 ! DO ii = 1, Nv 561 ! 562 ! ji = mi0(zvi(ii)) 563 ! jj = mj0(zvj(ii)) 564 ! 565 ! zfarea_v = zfarea_v & ! --- ice area meridian flux --- 566 ! & + at_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! --- eastward 567 ! & + at_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ! --- westward 568 ! zfmice_v = zfmice_v + rhoic * & ! --- ice mass meridian flux --- 569 ! & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 570 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 571 ! zfmsno_v = zfmsno_v + rhosn * & ! --- snow mass meridian flux --- 572 ! & ( vt_i(ji,jj-1) * e12t(ji,jj-1) * MAX( u_ice(ji,jj-1), 0.0 ) & ! 573 ! & + vt_i(ji,jj ) * e12t(ji,jj) * MIN( u_ice(ji,jj-1), 0.0 ) ) ! 574 ! 575 ! END DO 576 ! 577 ! ! Sum U/V contributions 578 ! zdiag_area_strait(2) = zfarea_u + zfarea_v 579 ! zdiag_mice_strait(2) = zfmice_u + zfmice_v 580 ! zdiag_msno_strait(2) = zfmsno_u + zfmsno_v 581 ! 582 ! ! === Ncdf output 583 ! IF ( iom_use("strait_arfl") ) CALL iom_put( "strait_arfl", zdiag_area_strait ) 584 ! IF ( iom_use("strait_mifl") ) CALL iom_put( "strait_mifl", zdiag_mice_strait ) 585 ! IF ( iom_use("strait_msfl") ) CALL iom_put( "strait_msfl", zdiag_msno_strait ) 586 ! 587 ! WRITE(numout,*) " area flx ", zdiag_area_strait(:) 588 ! WRITE(numout,*) " mice flx ", zdiag_mice_strait(:) 589 ! WRITE(numout,*) " msno flx ", zdiag_msno_strait(:) 590 ! 591 ! ENDIF 580 592 581 593 ! ! Create an output files (output.lim.abort.nc) if S < 0 or u > 20 m/s
Note: See TracChangeset
for help on using the changeset viewer.