Changeset 10332
- Timestamp:
- 2018-11-19T13:02:15+01:00 (5 years ago)
- Location:
- NEMO/trunk/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/icedyn_rhg_evp.F90
r10069 r10332 26 26 USE sbc_ice , ONLY : utau_ice, vtau_ice, snwice_mass, snwice_mass_b 27 27 USE ice ! sea-ice: ice variables 28 USE icevar ! ice_var_sshdyn 28 29 USE icedyn_rdgrft ! sea-ice: ice strength 29 30 USE bdy_oce , ONLY : ln_bdy … … 143 144 REAL(wp), DIMENSION(jpi,jpj) :: zs1, zs2, zs12 ! stress tensor components 144 145 REAL(wp), DIMENSION(jpi,jpj) :: zu_ice, zv_ice, zresr ! check convergence 145 REAL(wp), DIMENSION(jpi,jpj) :: z pice! array used for the calculation of ice surface slope:146 REAL(wp), DIMENSION(jpi,jpj) :: zssh_lead_m ! array used for the calculation of ice surface slope: 146 147 ! ! ocean surface (ssh_m) if ice is not embedded 147 148 ! ! ice top surface if ice is embedded … … 261 262 !------------------------------------------------------------------------------! 262 263 263 IF( ln_ice_embd ) THEN !== embedded sea ice: compute representative ice top surface ==! 264 ! 265 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1} 266 ! = (1/nn_fsbc)^2 * {SUM[n] , n=0,nn_fsbc-1} 267 zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp 268 ! 269 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1} 270 ! = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1}) 271 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 272 ! 273 zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0 274 ! 275 ELSE !== non-embedded sea ice: use ocean surface for slope calculation ==! 276 zpice(:,:) = ssh_m(:,:) 277 ENDIF 264 !== embedded sea ice: compute representative ice top surface ==! 265 !== non-embedded sea ice: use ocean surface for slope calculation ==! 266 zssh_lead_m(:,:) = ice_var_sshdyn( ssh_m, snwice_mass, snwice_mass_b) 278 267 279 268 DO jj = 2, jpjm1 … … 313 302 314 303 ! Surface pressure gradient (- m*g*GRAD(ssh)) at U-V points 315 zspgU(ji,jj) = - zmassU * grav * ( z pice(ji+1,jj) - zpice(ji,jj) ) * r1_e1u(ji,jj)316 zspgV(ji,jj) = - zmassV * grav * ( z pice(ji,jj+1) - zpice(ji,jj) ) * r1_e2v(ji,jj)304 zspgU(ji,jj) = - zmassU * grav * ( zssh_lead_m(ji+1,jj) - zssh_lead_m(ji,jj) ) * r1_e1u(ji,jj) 305 zspgV(ji,jj) = - zmassV * grav * ( zssh_lead_m(ji,jj+1) - zssh_lead_m(ji,jj) ) * r1_e2v(ji,jj) 317 306 318 307 ! masks -
NEMO/trunk/src/ICE/icevar.F90
r10069 r10332 49 49 !! ice_var_bv : brine volume 50 50 !! ice_var_enthalpy : compute ice and snow enthalpies from temperature 51 !! ice_var_sshdyn : compute equivalent ssh in lead 51 52 !!---------------------------------------------------------------------- 52 53 USE dom_oce ! ocean space and time domain 53 54 USE phycst ! physical constants (ocean directory) 54 USE sbc_oce , ONLY : sss_m 55 USE sbc_oce , ONLY : sss_m, ln_ice_embd, nn_fsbc 55 56 USE ice ! sea-ice: variables 56 57 USE ice1D ! sea-ice: thermodynamics variables … … 74 75 PUBLIC ice_var_bv 75 76 PUBLIC ice_var_enthalpy 77 PUBLIC ice_var_sshdyn 76 78 77 79 !!---------------------------------------------------------------------- … … 949 951 END SUBROUTINE ice_var_enthalpy 950 952 953 FUNCTION ice_var_sshdyn(pssh, psnwice_mass, psnwice_mass_b) 954 !!--------------------------------------------------------------------- 955 !! *** ROUTINE rhg_evp_rst *** 956 !! 957 !! ** Purpose : compute the equivalent ssh in lead when sea ice is embedded 958 !! 959 !! ** Method : ssh_lead = ssh + (Mice + Msnow) / rau0 960 !! 961 !! ** Reference : Jean-Michel Campin, John Marshall, David Ferreira, 962 !! Sea ice-ocean coupling using a rescaled vertical coordinate z*, 963 !! Ocean Modelling, Volume 24, Issues 1-2, 2008 964 !! 965 !!---------------------------------------------------------------------- 966 ! 967 ! input 968 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pssh !: ssh [m] 969 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: psnwice_mass !: mass of snow and ice at current ice time step [Kg/m2] 970 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: psnwice_mass_b !: mass of snow and ice at previous ice time step [Kg/m2] 971 ! 972 ! output 973 REAL(wp), DIMENSION(jpi,jpj) :: ice_var_sshdyn ! equivalent ssh in lead [m] 974 ! 975 ! temporary 976 REAL(wp) :: zintn, zintb ! time interpolation weights [] 977 REAL(wp), DIMENSION(jpi,jpj) :: zsnwiceload ! snow and ice load [m] 978 ! 979 ! compute ice load used to define the equivalent ssh in lead 980 IF( ln_ice_embd ) THEN 981 ! 982 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1} 983 ! = (1/nn_fsbc)^2 * {SUM[n] , n=0,nn_fsbc-1} 984 zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp 985 ! 986 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1} 987 ! = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1}) 988 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 989 ! 990 zsnwiceload(:,:) = ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_rau0 991 ! 992 ELSE 993 zsnwiceload(:,:) = 0.0_wp 994 ENDIF 995 ! compute equivalent ssh in lead 996 ice_var_sshdyn(:,:) = pssh(:,:) + zsnwiceload(:,:) 997 ! 998 END FUNCTION ice_var_sshdyn 999 1000 951 1001 #else 952 1002 !!---------------------------------------------------------------------- -
NEMO/trunk/src/OCE/ICB/icbutl.F90
r10068 r10332 24 24 #if defined key_si3 25 25 USE ice, ONLY: u_ice, v_ice, hm_i ! SI3 variables 26 USE icevar ! ice_var_sshdyn 27 USE sbc_ice, ONLY: snwice_mass, snwice_mass_b 26 28 #endif 27 29 … … 60 62 !! ** Method : - blah blah 61 63 !!---------------------------------------------------------------------- 62 64 #if defined key_si3 65 REAL(wp), DIMENSION(jpi,jpj) :: zssh_lead_m ! ocean surface (ssh_m) if ice is not embedded 66 ! ! ocean surface in leads if ice is embedded 67 #endif 63 68 ! copy nemo forcing arrays into iceberg versions with extra halo 64 69 ! only necessary for variables not on T points … … 84 89 ui_e(:,:) = 0._wp ; ui_e(1:jpi, 1:jpj) = u_ice(:,:) 85 90 vi_e(:,:) = 0._wp ; vi_e(1:jpi, 1:jpj) = v_ice(:,:) 91 ! 92 ! compute ssh slope using ssh_lead if embedded 93 zssh_lead_m(:,:) = ice_var_sshdyn(ssh_m, snwice_mass, snwice_mass_b) 94 ssh_e(:,:) = 0._wp ; ssh_e(1:jpi, 1:jpj) = zssh_lead_m(:,:) * tmask(:,:,1) 86 95 ! 87 96 CALL lbc_lnk_icb( hicth, 'T', +1._wp, 1, 1 ) 88 97 CALL lbc_lnk_icb( ui_e , 'U', -1._wp, 1, 1 ) 89 98 CALL lbc_lnk_icb( vi_e , 'V', -1._wp, 1, 1 ) 99 #else 100 ssh_e(:,:) = 0._wp ; ssh_e(1:jpi, 1:jpj) = ssh_m(:,:) * tmask(:,:,1) 90 101 #endif 91 102 92 103 !! special for ssh which is used to calculate slope 93 104 !! so fudge some numbers all the way around the boundary 94 95 ssh_e(:,:) = 0._wp ; ssh_e(1:jpi, 1:jpj) = ssh_m(:,:) * tmask(:,:,1)96 105 ssh_e(0 , :) = ssh_e(1 , :) 97 106 ssh_e(jpi+1, :) = ssh_e(jpi, :)
Note: See TracChangeset
for help on using the changeset viewer.