# 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 15385 – NEMO

# Changeset 15385

Ignore:
Timestamp:
2021-10-15T15:52:48+02:00 (2 years ago)
Message:

cleaning some ice routines. No change in sette

Location:
NEMO/trunk/src/ICE
Files:
5 edited

Unmodified
Removed
• ## NEMO/trunk/src/ICE/icedyn_rhg_evp.F90

 r15375 REAL(wp) ::   zvCr                                                ! critical ice volume above which ice is landfast ! REAL(wp) ::   zintb, zintn                                        ! dummy argument REAL(wp) ::   zfac_x, zfac_y REAL(wp) ::   zshear, zdum1, zdum2 ! REAL(wp), DIMENSION(jpi,jpj) ::   zdelta, zp_delt                 ! delta and P/delta at T points
• ## NEMO/trunk/src/ICE/icethd.F90

 r15374 ENDIF END_2D CALL lbc_lnk( 'icecor', u_ice, 'U', -1.0_wp, v_ice, 'V', -1.0_wp ) CALL lbc_lnk( 'icethd', u_ice, 'U', -1.0_wp, v_ice, 'V', -1.0_wp ) ! ! convergence tests
• ## NEMO/trunk/src/ICE/icethd_da.F90

 r12489 !!--------------------------------------------------------------------- INTEGER  ::   ji     ! dummy loop indices REAL(wp)            ::   zastar, zdfloe, zperi, zwlat, zda REAL(wp)            ::   zastar, zdfloe, zperi, zwlat, zda, zda_tot REAL(wp), PARAMETER ::   zdmax = 300._wp REAL(wp), PARAMETER ::   zcs   = 0.66_wp REAL(wp), PARAMETER ::   zm1   = 3.e-6_wp REAL(wp), PARAMETER ::   zm2   = 1.36_wp ! REAL(wp), DIMENSION(jpij) ::   zda_tot !!--------------------------------------------------------------------- ! zwlat  = zm1 * ( MAX( 0._wp, sst_1d(ji) - ( t_bo_1d(ji) - rt0 ) ) )**zm2  ! Melt speed rate [m/s] ! zda_tot(ji) = MIN( zwlat * zperi * rDt_ice, at_i_1d(ji) )                 ! sea ice concentration decrease (>0) zda_tot = MIN( zwlat * zperi * rDt_ice, at_i_1d(ji) )                     ! sea ice concentration decrease (>0) ! --- Distribute reduction among ice categories and calculate associated ice-ocean fluxes --- ! ! decrease of concentration for the category jl !    each category contributes to melting in proportion to its concentration zda = MIN( a_i_1d(ji), zda_tot(ji) * a_i_1d(ji) / at_i_1d(ji) ) zda = MIN( a_i_1d(ji), zda_tot * a_i_1d(ji) / at_i_1d(ji) ) ! Contribution to salt flux
• ## NEMO/trunk/src/ICE/iceupdate.F90

 r14997 INTEGER  ::   ji, jj, jl, jk   ! dummy loop indices REAL(wp) ::   zqsr             ! New solar flux received by the ocean REAL(wp), DIMENSION(jpi,jpj) ::   z2d                  ! 2D workspace REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   z2d                  ! 2D workspace !!--------------------------------------------------------------------- IF( ln_timing )   CALL timing_start('iceupdate') IF ( iom_use( 'vfxthin' ) ) THEN   ! mass flux from ice growth in open water + thin ice (<20cm) => comparable to observations ALLOCATE( z2d(jpi,jpj) ) WHERE( hm_i(:,:) < 0.2 .AND. hm_i(:,:) > 0. ) ; z2d = wfx_bog ELSEWHERE                                     ; z2d = 0._wp END WHERE CALL iom_put( 'vfxthin', wfx_opw + z2d ) DEALLOCATE( z2d ) ENDIF
• ## NEMO/trunk/src/ICE/icevar.F90

 r15070 REAL(wp) ::   z1_dS REAL(wp) ::   ztmp1, ztmp2, zs0, zs REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   z_slope_s, zalpha    ! case 2 only REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   z_slope_s, zalpha    ! case 2 only REAL(wp), PARAMETER :: zsi0 = 3.5_wp REAL(wp), PARAMETER :: zsi1 = 4.5_wp CASE( 2 )       !  time varying salinity with linear profile  ! !            !---------------------------------------------! ! ALLOCATE( z_slope_s(jpi,jpj,jpl) , zalpha(jpi,jpj,jpl) ) z1_dS = 1._wp / ( zsi1 - zsi0 ) ! ALLOCATE( z_slope_s(jpi,jpj) , zalpha(jpi,jpj) ) ! DO jl = 1, jpl DO jk = 1, nlay_i sz_i(:,:,jk,jl)  = s_i(:,:,jl) END DO END DO !                                      ! Slope of the linear profile WHERE( h_i(:,:,:) > epsi20 )   ;   z_slope_s(:,:,:) = 2._wp * s_i(:,:,:) / h_i(:,:,:) ELSEWHERE                      ;   z_slope_s(:,:,:) = 0._wp END WHERE ! z1_dS = 1._wp / ( zsi1 - zsi0 ) DO jl = 1, jpl DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) zalpha(ji,jj,jl) = MAX(  0._wp , MIN( ( zsi1 - s_i(ji,jj,jl) ) * z1_dS , 1._wp )  ) !                                      ! Slope of the linear profile IF( h_i(ji,jj,jl) > epsi20 ) THEN z_slope_s(ji,jj) = 2._wp * s_i(ji,jj,jl) / h_i(ji,jj,jl) ELSE z_slope_s(ji,jj) = 0._wp ENDIF ! zalpha(ji,jj) = MAX(  0._wp , MIN( ( zsi1 - s_i(ji,jj,jl) ) * z1_dS , 1._wp )  ) !                             ! force a constant profile when SSS too low (Baltic Sea) IF( 2._wp * s_i(ji,jj,jl) >= sss_m(ji,jj) )   zalpha(ji,jj,jl) = 0._wp IF( 2._wp * s_i(ji,jj,jl) >= sss_m(ji,jj) )   zalpha(ji,jj) = 0._wp END_2D END DO ! ! Computation of the profile DO jl = 1, jpl ! ! Computation of the profile DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nlay_i ) !                          ! linear profile with 0 surface value zs0 = z_slope_s(ji,jj,jl) * ( REAL(jk,wp) - 0.5_wp ) * h_i(ji,jj,jl) * r1_nlay_i zs  = zalpha(ji,jj,jl) * zs0 + ( 1._wp - zalpha(ji,jj,jl) ) * s_i(ji,jj,jl)     ! weighting the profile zs0 = z_slope_s(ji,jj) * ( REAL(jk,wp) - 0.5_wp ) * h_i(ji,jj,jl) * r1_nlay_i zs  = zalpha(ji,jj) * zs0 + ( 1._wp - zalpha(ji,jj) ) * s_i(ji,jj,jl)     ! weighting the profile sz_i(ji,jj,jk,jl) = MIN( rn_simax, MAX( zs, rn_simin ) ) END_3D CASE( 2 )       !  time varying salinity with linear profile  ! !            !---------------------------------------------! z1_dS = 1._wp / ( zsi1 - zsi0 ) ! ALLOCATE( z_slope_s(jpij), zalpha(jpij) ) ! !                                      ! Slope of the linear profile WHERE( h_i_1d(1:npti) > epsi20 )   ;   z_slope_s(1:npti) = 2._wp * s_i_1d(1:npti) / h_i_1d(1:npti) ELSEWHERE                          ;   z_slope_s(1:npti) = 0._wp END WHERE z1_dS = 1._wp / ( zsi1 - zsi0 ) DO ji = 1, npti !                                      ! Slope of the linear profile IF( h_i_1d(ji) > epsi20 ) THEN z_slope_s(ji) = 2._wp * s_i_1d(ji) / h_i_1d(ji) ELSE z_slope_s(ji) = 0._wp ENDIF ! zalpha(ji) = MAX(  0._wp , MIN(  ( zsi1 - s_i_1d(ji) ) * z1_dS , 1._wp  )  ) !                             ! force a constant profile when SSS too low (Baltic Sea) IF( 2._wp * s_i_1d(ji) >= sss_1d(ji) )   zalpha(ji) = 0._wp ! END DO ! bv_i (:,:,:) = 0._wp DO jl = 1, jpl DO jk = 1, nlay_i WHERE( t_i(:,:,jk,jl) < rt0 - epsi10 ) bv_i(:,:,jl) = bv_i(:,:,jl) - rTmlt * sz_i(:,:,jk,jl) * r1_nlay_i / ( t_i(:,:,jk,jl) - rt0 ) END WHERE END DO DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, nlay_i ) IF( t_i(ji,jj,jk,jl) < rt0 - epsi10 ) THEN bv_i(ji,jj,jl) = bv_i(ji,jj,jl) - rTmlt * sz_i(ji,jj,jk,jl) * r1_nlay_i / ( t_i(ji,jj,jk,jl) - rt0 ) ENDIF END_3D END DO WHERE( vt_i(:,:) > epsi20 )   ;   bvm_i(:,:) = SUM( bv_i(:,:,:) * v_i(:,:,:) , dim=3 ) / vt_i(:,:) ! temporary REAL(wp) :: zintn, zintb                     ! time interpolation weights [] REAL(wp), DIMENSION(jpi,jpj) :: zsnwiceload  ! snow and ice load [m] ! ! compute ice load used to define the equivalent ssh in lead zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp ! zsnwiceload(:,:) = ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_rho0 ! compute equivalent ssh in lead ice_var_sshdyn(:,:) = pssh(:,:) + ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_rho0 ! ELSE zsnwiceload(:,:) = 0.0_wp ! compute equivalent ssh in lead ice_var_sshdyn(:,:) = pssh(:,:) ENDIF ! compute equivalent ssh in lead ice_var_sshdyn(:,:) = pssh(:,:) + zsnwiceload(:,:) ! END FUNCTION ice_var_sshdyn
Note: See TracChangeset for help on using the changeset viewer.