New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 15197 – NEMO

Changeset 15197


Ignore:
Timestamp:
2021-08-16T17:15:38+02:00 (3 years ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag: Science changes.

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  
    856856     <field id="utrd_tfr"       long_name="i-trend: top friction (3D) in top layer"         unit="m/s^2"                        />    
    857857     <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" /> 
    858862     <field id="utrd_tot"       long_name="i-trend: total momentum trend before atf"        unit="m/s^2"                        />    
    859863     <field id="utrd_tot2d"     long_name="i-trend: total momentum trend before atf: 2D component"    unit="m/s^2"  grid_ref="grid_U_2D" />    
     
    903907     <field id="vtrd_tfr"       long_name="j-trend: top friction (3D) in top layer"         unit="m/s^2"                        />    
    904908     <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" /> 
    905913     <field id="vtrd_tot"       long_name="j-trend: total momentum trend before atf"        unit="m/s^2"                        />    
    906914     <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  
    365365      ELSE 
    366366         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 
    367371      ENDIF 
    368372      ! 
     
    384388               uiceoc(ji,jj) = zat_u * zutau_ice 
    385389               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) 
    386393            ENDIF 
    387394            ! 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/DYN/dynzdf.F90

    r15185 r15197  
    1616   USE dom_oce        ! ocean space and time domain variables  
    1717   USE sbc_oce        ! surface boundary condition: ocean 
     18   USE sbc_ice, ONLY: rCdU_ice  ! ice-ocean drag coefficient 
    1819   USE zdf_oce        ! ocean vertical physics variables 
    1920   USE zdfdrg         ! vertical physics: top/bottom drag coef. 
     
    174175            ENDIF 
    175176         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 
    176189     ENDIF 
    177190      ! 
     
    521534            ztrdv_fr(:,:,1) = ( viceoc_b(:,:) + viceoc(:,:) ) / ( e3v_n(:,:,1) * rau0 ) 
    522535            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 
    523544         ENDIF 
    524545         ! 
     
    558579               CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_tfri, kt ) 
    559580            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 
    560593         ENDIF 
    561594         ! 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/SBC/sbc_oce.F90

    r15176 r15197  
    113113   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   uiceoc, uiceoc_b !: sea surface i-stress (ice-ocean)             [N/m2] 
    114114   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] 
    115117   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   taum             !: module of sea surface stress (at T-point)    [N/m2]  
    116118   !! 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  
    422422            uiceoc_b(:,:) = uiceoc(:,:)       
    423423            viceoc_b(:,:) = viceoc(:,:)       
     424            uiceoc_iceimp_b(:,:) = uiceoc_iceimp(:,:)       
     425            viceoc_iceimp_b(:,:) = viceoc_iceimp(:,:)       
    424426         ENDIF         
    425427         ! 
     
    541543            uiceoc_b(:,:) = uiceoc(:,:)       
    542544            viceoc_b(:,:) = viceoc(:,:)       
     545            uiceoc_iceimp_b(:,:) = uiceoc_iceimp(:,:)       
     546            viceoc_iceimp_b(:,:) = viceoc_iceimp(:,:)       
    543547         ENDIF         
    544548         ! 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/TRD/trd_oce.F90

    r15179 r15197  
    9090   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfre_bt  = 25  !: bottom friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.TRUE.) 
    9191   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 
    9297   ! 
    9398   !!---------------------------------------------------------------------- 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/TRD/trddyn.F90

    r15194 r15197  
    4949   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tfr2d, zvtrd_tfr2d 
    5050   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 
    5153 
    5254   !! * Substitutions 
     
    237239            DEALLOCATE( zue, zve, zutrd_tfr, zvtrd_tfr ) 
    238240         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 
    239255         IF( ALLOCATED( zutrd_bfr ) ) THEN 
    240256            ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
     
    353369          zutrd_iceoc(:,:) = putrd(:,:) 
    354370          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 ) 
    355394 
    356395      CASE( jpdyn_tau ) 
     
    530569      CASE( jpdyn_tfr )      ;   CALL iom_put( "utrd_tfr2d", putrd )      ! top friction depth-mean trend 
    531570                                 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 
    532579      CASE( jpdyn_tot )      ;   CALL iom_put( "utrd_tot2d", putrd )      ! total 2D trend, excluding time filter 
    533580                                 CALL iom_put( "vtrd_tot2d", pvtrd ) 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends_iceoc_drag/src/OCE/TRD/trdini.F90

    r15176 r15197  
    8585      ! Allocate (partial) ice-ocean stresses (only used for dynamics trends diagnostics).  
    8686      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) ) 
    8890 
    8991!!gm check the stop below       
Note: See TracChangeset for help on using the changeset viewer.