- Timestamp:
- 2021-05-24T17:40:43+02:00 (3 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icb_oce.F90
r14880 r14898 86 86 ! particularly for MPP when iceberg can lie inside T grid but outside U, V, or f grid 87 87 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: uo_e, vo_e 88 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ff_e, tt_e, fr_e, ss_e, q t_e88 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ff_e, tt_e, fr_e, ss_e, qsr_e, qml_e 89 89 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ua_e, va_e 90 90 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ssh_e … … 178 178 & ff_e(0:jpi+1,0:jpj+1) , fr_e(0:jpi+1,0:jpj+1) , & 179 179 & tt_e(0:jpi+1,0:jpj+1) , ssh_e(0:jpi+1,0:jpj+1) , & 180 & ss_e(0:jpi+1,0:jpj+1) , qt_e(0:jpi+1,0:jpj+1) , & 180 & ss_e(0:jpi+1,0:jpj+1) , qsr_e(0:jpi+1,0:jpj+1) , & 181 & qml_e(0:jpi+1,0:jpj+1) , & 181 182 & first_width(nclasses) , first_length(nclasses) , & 182 183 & src_calving (jpi,jpj) , & -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbdyn.F90
r14880 r14898 269 269 ! 270 270 INTEGER :: itloop 271 REAL(wp) :: zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss, p qt271 REAL(wp) :: zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss, psr, pml 272 272 REAL(wp) :: zvo, zvi, zva, zvwave, zssh_y 273 273 REAL(wp) :: zff, zT, zD, zW, zL, zM, zF … … 282 282 nknberg = berg%number(1) 283 283 CALL icb_utl_interp( pxi, pe1, zuo, zui, zua, zssh_x, & 284 & pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss, p qt)284 & pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss, psr, pml ) 285 285 286 286 zM = berg%current_point%mass -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbini.F90
r14880 r14898 80 80 ff_e(:,:) = 0._wp ; tt_e(:,:) = 0._wp ; 81 81 fr_e(:,:) = 0._wp ; ss_e(:,:) = 0._wp ; 82 q t_e(:,:) = 0._wp82 qsr_e(:,:) = 0._wp ; qml_e(:,:) = 0._wp ; 83 83 #if defined key_si3 84 84 hi_e(:,:) = 0._wp ; -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbthm.F90
r14880 r14898 51 51 INTEGER :: ii, ij 52 52 REAL(wp) :: zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 53 REAL(wp) :: zq t, pqt53 REAL(wp) :: zqsr, pqsr, zqml, pqml 54 54 REAL(wp) :: zSSS, zfzpt 55 55 REAL(wp) :: zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv, zMt … … 88 88 CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x, & 89 89 & pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y, & 90 & pt%sst, pt%cn, pt%hi, zff, pt%sss, pq t)90 & pt%sst, pt%cn, pt%hi, zff, pt%sss, pqsr, pqml ) 91 91 ! 92 92 zSST = pt%sst 93 93 zSSS = pt%sss 94 zqt = MAX( pqt, 0._wp ) ! Net surface heat flux 94 zqsr = MAX( pqsr, 0._wp ) ! Downward oceanic surface solar flux 95 zqml = MAX( pqml, 0._wp ) ! Sea ice top melt 95 96 CALL eos_fzp(zSSS,zfzpt) ! freezing point 96 97 zIC = MIN( 1._wp, pt%cn + rn_sicn_shift ) ! Shift sea-ice concentration !!gm ??? … … 123 124 ENDIF 124 125 zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3))) , 0._wp ) * z1_rday ! Wave erosion (eqn M.A8 ) 125 zMt = MIN( (zqt*(1.0_wp - zIC)*0.25_wp + zqt*zIC) / (rLfus * rhoi) , 1.0E-7_wp ) ! Top melt by surface heat flux. Assuming surface heat flux 126 ! involved in melting is a quarter of that going into the 127 ! ocean but all of that going into sea ice. Apply a maximum 128 ! amount of melt of 1E-7 m/s to keep 129 ! this term lower than the other terms when the berg is in 130 ! mid ocean. 126 127 ! Energy involved in top melt is a combination of 10% of solar flux (for portion of grid box that is ocean) and 128 ! 100% of sea ice top melt (for portion of grid box that is sea ice). Apply a maximum amount of melt of 5E-6 m/s 129 ! to keep this term lower than the other terms when the berg is in mid ocean. 130 zMt = MIN( (zqsr*0.1_wp + zqml) / (rLfus * rhoi) , 5.0E-6_wp ) 131 131 132 132 IF( ln_operator_splitting ) THEN ! Operator split update of volume/mass … … 174 174 zdMbitsM = MIN( zMbb*zdt , znMbits ) ! bergy bits mass lost to melting (kg) 175 175 znMbits = znMbits-zdMbitsM ! remove mass lost to bergy bits melt 176 IF( zMnew == 0._wp ) THEN ! if parent berg has completely melted then176 IF( zMnew <= 0._wp ) THEN ! if parent berg has completely melted then 177 177 zdMbitsM = zdMbitsM + znMbits ! instantly melt all the bergy bits 178 178 znMbits = 0._wp -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbutl.F90
r14880 r14898 23 23 USE sbc_oce ! ocean surface boundary conditions 24 24 #if defined key_si3 25 USE ice, ONLY: u_ice, v_ice, hm_i, qt_atm_oi ! SI3 variables25 USE ice, ONLY: u_ice, v_ice, hm_i, a_i ! SI3 variables 26 26 USE icevar ! ice_var_sshdyn 27 USE sbc_ice, ONLY: snwice_mass, snwice_mass_b 27 USE sbc_ice, ONLY: snwice_mass, snwice_mass_b, qsr_oce, qml_ice 28 28 #endif 29 29 … … 78 78 ua_e(1:jpi,1:jpj) = utau (:,:) * umask(:,:,1) ! maybe mask useless because mask applied in sbcblk 79 79 va_e(1:jpi,1:jpj) = vtau (:,:) * vmask(:,:,1) ! maybe mask useless because mask applied in sbcblk 80 qt_e(1:jpi,1:jpj) = qt_atm_oi(:,:) 80 qsr_e(1:jpi,1:jpj) = qsr_oce(:,:) 81 qml_e(1:jpi,1:jpj) = SUM(qml_ice(:,:,:) * a_i(:,:,:), dim=3 ) 81 82 ! 82 83 CALL lbc_lnk_icb( 'icbutl', uo_e, 'U', -1._wp, 1, 1 ) … … 88 89 CALL lbc_lnk_icb( 'icbutl', tt_e, 'T', +1._wp, 1, 1 ) 89 90 CALL lbc_lnk_icb( 'icbutl', ss_e, 'T', +1._wp, 1, 1 ) 90 CALL lbc_lnk_icb( 'icbutl', qt_e, 'T', +1._wp, 1, 1 ) 91 CALL lbc_lnk_icb( 'icbutl', qsr_e, 'T', +1._wp, 1, 1 ) 92 CALL lbc_lnk_icb( 'icbutl', qml_e, 'T', +1._wp, 1, 1 ) 91 93 #if defined key_si3 92 94 hi_e(1:jpi, 1:jpj) = hm_i (:,:) … … 111 113 SUBROUTINE icb_utl_interp( pi, pe1, puo, pui, pua, pssh_i, & 112 114 & pj, pe2, pvo, pvi, pva, pssh_j, & 113 & psst, pcn, phi, pff, psss, pq t)115 & psst, pcn, phi, pff, psss, pqsr, pqml ) 114 116 !!---------------------------------------------------------------------- 115 117 !! *** ROUTINE icb_utl_interp *** … … 133 135 REAL(wp), INTENT( out) :: pssh_i, pssh_j ! ssh i- & j-gradients 134 136 REAL(wp), INTENT( out) :: psst, pcn, phi, pff, psss ! SST, ice concentration, ice thickness, Coriolis, SSS 135 REAL(wp), INTENT( out) :: pq t ! Net surface solar radiation137 REAL(wp), INTENT( out) :: pqsr, pqml ! Ocean solar and sea ice top melt 136 138 ! 137 139 REAL(wp) :: zcd, zmod ! local scalars … … 147 149 pcn = icb_utl_bilin_h( fr_e, pi, pj, 'T', .true. ) ! ice concentration 148 150 pff = icb_utl_bilin_h( ff_e, pi, pj, 'F', .false. ) ! Coriolis parameter 149 pqt = icb_utl_bilin_h( qt_e, pi, pj, 'T', .true. ) ! Total surface shortwave 151 pqsr = icb_utl_bilin_h( qsr_e, pi, pj, 'T', .true. ) ! Ocean surface solar 152 pqml = icb_utl_bilin_h( qml_e, pi, pj, 'T', .true. ) ! Sea ice top melt 150 153 ! 151 154 pua = icb_utl_bilin_h( ua_e, pi, pj, 'U', .true. ) ! 10m wind
Note: See TracChangeset
for help on using the changeset viewer.