Changeset 15197
- Timestamp:
- 2021-08-16T17:15:38+02:00 (3 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/cfgs/SHARED/field_def_nemo-oce.xml
r15179 r15197 856 856 <field id="utrd_tfr" long_name="i-trend: top friction (3D) in top layer" unit="m/s^2" /> 857 857 <field id="utrd_tfr2d" long_name="i-trend: top friction: 2D component" unit="m/s^2" grid_ref="grid_U_2D" /> 858 <field id="utrd_iceoc_iceimp" long_name="i-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_U_2D" /> 859 <field id="utrd_tfre_bt_iceimp" long_name="i-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_U_2D" /> 860 <field id="utrd_tfri_iceimp" long_name="i-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_U_2D" /> 861 <field id="utrd_tfr_iceimp" long_name="i-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_U_2D" /> 858 862 <field id="utrd_tot" long_name="i-trend: total momentum trend before atf" unit="m/s^2" /> 859 863 <field id="utrd_tot2d" long_name="i-trend: total momentum trend before atf: 2D component" unit="m/s^2" grid_ref="grid_U_2D" /> … … 903 907 <field id="vtrd_tfr" long_name="j-trend: top friction (3D) in top layer" unit="m/s^2" /> 904 908 <field id="vtrd_tfr2d" long_name="j-trend: top friction: 2D component" unit="m/s^2" grid_ref="grid_V_2D" /> 909 <field id="vtrd_iceoc_iceimp" long_name="j-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_V_2D" /> 910 <field id="vtrd_tfre_bt_iceimp" long_name="j-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_V_2D" /> 911 <field id="vtrd_tfri_iceimp" long_name="j-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_V_2D" /> 912 <field id="vtrd_tfr_iceimp" long_name="j-trend: top friction: as if implicit ice-ocean drag" unit="m/s^2" grid_ref="grid_V_2D" /> 905 913 <field id="vtrd_tot" long_name="j-trend: total momentum trend before atf" unit="m/s^2" /> 906 914 <field id="vtrd_tot2d" long_name="j-trend: total momentum trend before atf: 2D component" unit="m/s^2" grid_ref="grid_V_2D" /> -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/ICE/iceupdate.F90
r15176 r15197 365 365 ELSE 366 366 zflagi = 1._wp 367 IF( l_trddyn ) THEN 368 ! Save drag with right sign to update alternative top drag trend diagnostic 369 rCdU_ice(:,:) = -r1_rau0 * tmod_io(:,:) * at_i(:,:) * tmask(:,:,1) 370 ENDIF 367 371 ENDIF 368 372 ! … … 384 388 uiceoc(ji,jj) = zat_u * zutau_ice 385 389 viceoc(ji,jj) = zat_v * zvtau_ice 390 ! save part of the ice-ocean stress as would do for the implicit ice-ocean drag calculation 391 uiceoc_iceimp(ji,jj) = zat_u * 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * u_ice(ji,jj) 392 viceoc_iceimp(ji,jj) = zat_v * 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * v_ice(ji,jj) 386 393 ENDIF 387 394 ! -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/DYN/dynzdf.F90
r15185 r15197 16 16 USE dom_oce ! ocean space and time domain variables 17 17 USE sbc_oce ! surface boundary condition: ocean 18 USE sbc_ice, ONLY: rCdU_ice ! ice-ocean drag coefficient 18 19 USE zdf_oce ! ocean vertical physics variables 19 20 USE zdfdrg ! vertical physics: top/bottom drag coef. … … 174 175 ENDIF 175 176 END IF 177 IF( l_trddyn .AND. (.NOT.ln_drgice_imp) ) THEN 178 ! Output the contribution to the top friction trend as if using implicit ice-ocean drag 179 DO jj = 2, jpjm1 180 DO ji = fs_2, fs_jpim1 ! vector opt. 181 ze3ua = ( 1._wp - r_vvl ) * e3u_n(ji,jj,1) + r_vvl * e3u_a(ji,jj,1) 182 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,1) + r_vvl * e3v_a(ji,jj,1) 183 ztrdu_fr(ji,jj,1) = 0.5*( rCdU_ice(ji+1,jj)+rCdU_ice(ji,jj) ) * ua_b(ji,jj) / ze3ua 184 ztrdv_fr(ji,jj,1) = 0.5*( rCdU_ice(ji,jj+1)+rCdU_ice(ji,jj) ) * va_b(ji,jj) / ze3va 185 END DO 186 END DO 187 CALL trd_dyn( ztrdu_fr(:,:,1), ztrdv_fr(:,:,1), jpdyn_tfre_bt_iceimp, kt ) 188 END IF 176 189 ENDIF 177 190 ! … … 521 534 ztrdv_fr(:,:,1) = ( viceoc_b(:,:) + viceoc(:,:) ) / ( e3v_n(:,:,1) * rau0 ) 522 535 CALL trd_dyn( ztrdu_fr(:,:,1), ztrdv_fr(:,:,1), jpdyn_iceoc, kt ) 536 IF( .NOT. ln_drgice_imp ) THEN 537 ! ! trends due to ice-ocean drag in surface layer 538 ! ! as if using implicit ice ocean drag 539 ztrdu_fr(:,:,:) = 0._wp ; ztrdv_fr(:,:,:) = 0._wp 540 ztrdu_fr(:,:,1) = ( uiceoc_iceimp_b(:,:) + uiceoc_iceimp(:,:) ) / ( e3u_n(:,:,1) * rau0 ) 541 ztrdv_fr(:,:,1) = ( viceoc_iceimp_b(:,:) + viceoc_iceimp(:,:) ) / ( e3v_n(:,:,1) * rau0 ) 542 CALL trd_dyn( ztrdu_fr(:,:,1), ztrdv_fr(:,:,1), jpdyn_iceoc_iceimp, kt ) 543 ENDIF 523 544 ENDIF 524 545 ! … … 558 579 CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_tfri, kt ) 559 580 ENDIF 581 IF( .NOT. ln_drgice_imp ) THEN ! trends as if using implicit ice-ocean drag 582 ztrdu_fr(:,:,:) = 0._wp ; ztrdv_fr(:,:,:) = 0._wp 583 DO jj = 2, jpjm1 584 DO ji = 2, jpim1 585 ztrdu_fr(ji,jj,1) = 0.5 * ( rCdU_ice(ji+1,jj) + rCdU_ice(ji,jj) ) & 586 & * un(ji,jj,1) / e3u_n(ji,jj,1) 587 ztrdv_fr(ji,jj,1) = 0.5 * ( rCdU_ice(ji,jj+1) + rCdU_ice(ji,jj) ) & 588 & * vn(ji,jj,1) / e3v_n(ji,jj,1) 589 END DO 590 END DO 591 CALL trd_dyn( ztrdu_fr(:,:,1), ztrdv_fr(:,:,1), jpdyn_tfri_iceimp, kt ) 592 ENDIF 560 593 ENDIF 561 594 ! -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/SBC/sbc_oce.F90
r15176 r15197 113 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: uiceoc, uiceoc_b !: sea surface i-stress (ice-ocean) [N/m2] 114 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: viceoc, viceoc_b !: sea surface j-stress (ice-ocean) [N/m2] 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: uiceoc_iceimp, uiceoc_iceimp_b !: sea surface i-stress (ice-ocean) [N/m2] 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: viceoc_iceimp, viceoc_iceimp_b !: sea surface j-stress (ice-ocean) [N/m2] 115 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: taum !: module of sea surface stress (at T-point) [N/m2] 116 118 !! wndm is used onmpute surface gases exchanges in ice-free ocean or leads -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/SBC/sbcmod.F90
r15176 r15197 422 422 uiceoc_b(:,:) = uiceoc(:,:) 423 423 viceoc_b(:,:) = viceoc(:,:) 424 uiceoc_iceimp_b(:,:) = uiceoc_iceimp(:,:) 425 viceoc_iceimp_b(:,:) = viceoc_iceimp(:,:) 424 426 ENDIF 425 427 ! … … 541 543 uiceoc_b(:,:) = uiceoc(:,:) 542 544 viceoc_b(:,:) = viceoc(:,:) 545 uiceoc_iceimp_b(:,:) = uiceoc_iceimp(:,:) 546 viceoc_iceimp_b(:,:) = viceoc_iceimp(:,:) 543 547 ENDIF 544 548 ! -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/TRD/trd_oce.F90
r15179 r15197 90 90 INTEGER, PUBLIC, PARAMETER :: jpdyn_bfre_bt = 25 !: bottom friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.TRUE.) 91 91 INTEGER, PUBLIC, PARAMETER :: jpdyn_bfri = 26 !: implicit bottom friction for baroclinic trend (ln_drgimp=.TRUE.) 92 ! ================ !: EXTRA DIAGNOSTIC FLAGS - AS IF USING IMPLICIT ICE-OCEAN DRAG 93 INTEGER, PUBLIC, PARAMETER :: jpdyn_iceoc_iceimp = 27 !: ice-ocean drag trend as if using implicit ice-ocean drag 94 INTEGER, PUBLIC, PARAMETER :: jpdyn_tfri_iceimp = 28 !: implicit bottom friction for baroclinic trend (ln_drgimp=.FALSE.) 95 INTEGER, PUBLIC, PARAMETER :: jpdyn_tfre_bt_iceimp=29 !: top friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.FALSE.) 96 INTEGER, PUBLIC, PARAMETER :: jpdyn_tfr_iceimp = 30 !: top friction trend as if using implicit ice-ocean drag 92 97 ! 93 98 !!---------------------------------------------------------------------- -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/TRD/trddyn.F90
r15194 r15197 49 49 REAL(wp), ALLOCATABLE, DIMENSION(:,:) , SAVE :: zutrd_tfr2d, zvtrd_tfr2d 50 50 REAL(wp), ALLOCATABLE, DIMENSION(:,:) , SAVE :: zutrd_bfr2d, zvtrd_bfr2d 51 REAL(wp), ALLOCATABLE, DIMENSION(:,:) , SAVE :: zutrd_tfr_iceimp, zvtrd_tfr_iceimp 52 REAL(wp), ALLOCATABLE, DIMENSION(:,:) , SAVE :: zutrd_iceoc_iceimp, zvtrd_iceoc_iceimp 51 53 52 54 !! * Substitutions … … 237 239 DEALLOCATE( zue, zve, zutrd_tfr, zvtrd_tfr ) 238 240 ENDIF 241 IF( ALLOCATED( zutrd_tfr_iceimp ) ) THEN 242 ! Finalise top friction trend as if using implicit ice-ocean drag 243 IF( ALLOCATED( zutrd_iceoc_iceimp ) ) THEN 244 ! Add trend due to ice-ocean stress at the surface 245 zutrd_tfr_iceimp(:,:) = zutrd_tfr_iceimp(:,:) + zutrd_iceoc_iceimp(:,:) 246 zvtrd_tfr_iceimp(:,:) = zvtrd_tfr_iceimp(:,:) + zvtrd_iceoc_iceimp(:,:) 247 DEALLOCATE( zutrd_iceoc_iceimp, zvtrd_iceoc_iceimp ) 248 ENDIF 249 ! Simulate "removal of depth-mean component" as if it was a 3D field: 250 zutrd_tfr_iceimp(:,:) = ( zutrd_tfr_iceimp(:,:) * ( 1._wp - r1_hu_a(:,:) ) ) * umask(:,:,1) 251 zvtrd_tfr_iceimp(:,:) = ( zvtrd_tfr_iceimp(:,:) * ( 1._wp - r1_hv_a(:,:) ) ) * vmask(:,:,1) 252 CALL trd_dyn_iom_2d( zutrd_tfr_iceimp, zvtrd_tfr_iceimp, jpdyn_tfr_iceimp, kt ) 253 DEALLOCATE( zutrd_tfr_iceimp, zvtrd_tfr_iceimp ) 254 ENDIF 239 255 IF( ALLOCATED( zutrd_bfr ) ) THEN 240 256 ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) … … 353 369 zutrd_iceoc(:,:) = putrd(:,:) 354 370 zvtrd_iceoc(:,:) = pvtrd(:,:) 371 372 CASE( jpdyn_iceoc_iceimp ) 373 ! 374 ! Save surface ice-ocean stress trend as if using implicit ice-ocean drag. 375 ! Will be add to TFR_ICEIMP trend later. 376 IF( .NOT. ALLOCATED(zutrd_iceoc_iceimp) ) ALLOCATE( zutrd_iceoc_iceimp(jpi,jpj), zvtrd_iceoc_iceimp(jpi,jpj) ) 377 zutrd_iceoc_iceimp(:,:) = putrd(:,:) 378 zvtrd_iceoc_iceimp(:,:) = pvtrd(:,:) 379 CALL trd_dyn_iom_2d( putrd, pvtrd, jpdyn_iceoc_iceimp, kt ) 380 381 CASE( jpdyn_tfre_bt_iceimp, jpdyn_tfri_iceimp ) 382 ! 383 ! Add various top friction (as if using implicit ice ocean drag) 384 ! terms for baroclinic trend to saved quantity. 385 ! Any depth-mean component removed later when TFR_ICEIMP trend written out. 386 IF( .NOT. ALLOCATED(zutrd_tfr_iceimp) ) THEN 387 ALLOCATE( zutrd_tfr_iceimp(jpi,jpj), zvtrd_tfr_iceimp(jpi,jpj) ) 388 zutrd_tfr_iceimp(:,:) = 0.0 389 zvtrd_tfr_iceimp(:,:) = 0.0 390 ENDIF 391 zutrd_tfr_iceimp(:,:) = zutrd_tfr_iceimp(:,:) + putrd(:,:) 392 zvtrd_tfr_iceimp(:,:) = zvtrd_tfr_iceimp(:,:) + pvtrd(:,:) 393 CALL trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt ) 355 394 356 395 CASE( jpdyn_tau ) … … 530 569 CASE( jpdyn_tfr ) ; CALL iom_put( "utrd_tfr2d", putrd ) ! top friction depth-mean trend 531 570 CALL iom_put( "vtrd_tfr2d", pvtrd ) 571 CASE( jpdyn_iceoc_iceimp ) ; CALL iom_put( "utrd_iceoc_iceimp", putrd ) ! total top friction for top layer 572 CALL iom_put( "vtrd_iceoc_iceimp", pvtrd ) ! as if with implicit ice-ocean drag 573 CASE( jpdyn_tfre_bt_iceimp ); CALL iom_put( "utrd_tfre_bt_iceimp", putrd ) ! total top friction for top layer 574 CALL iom_put( "vtrd_tfre_bt_iceimp", pvtrd ) ! as if with implicit ice-ocean drag 575 CASE( jpdyn_tfri_iceimp ) ; CALL iom_put( "utrd_tfri_iceimp", putrd ) ! total top friction for top layer 576 CALL iom_put( "vtrd_tfri_iceimp", pvtrd ) ! as if with implicit ice-ocean drag 577 CASE( jpdyn_tfr_iceimp ) ; CALL iom_put( "utrd_tfr_iceimp", putrd ) ! total top friction for top layer 578 CALL iom_put( "vtrd_tfr_iceimp", pvtrd ) ! as if with implicit ice-ocean drag 532 579 CASE( jpdyn_tot ) ; CALL iom_put( "utrd_tot2d", putrd ) ! total 2D trend, excluding time filter 533 580 CALL iom_put( "vtrd_tot2d", pvtrd ) -
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/TRD/trdini.F90
r15176 r15197 85 85 ! Allocate (partial) ice-ocean stresses (only used for dynamics trends diagnostics). 86 86 IF( l_trddyn .and. nn_ice == 2 ) ALLOCATE( uiceoc(jpi,jpj), uiceoc_b(jpi,jpj), & 87 viceoc(jpi,jpj), viceoc_b(jpi,jpj) ) 87 viceoc(jpi,jpj), viceoc_b(jpi,jpj), & 88 uiceoc_iceimp(jpi,jpj), uiceoc_iceimp_b(jpi,jpj), & 89 viceoc_iceimp(jpi,jpj), viceoc_iceimp_b(jpi,jpj) ) 88 90 89 91 !!gm check the stop below
Note: See TracChangeset
for help on using the changeset viewer.