Changeset 15421
- Timestamp:
- 2021-10-21T10:48:12+02:00 (2 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
r14898 r15421 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 , qsr_e, qml_e88 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ff_e, tt_e, fr_e, ss_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) , qsr_e(0:jpi+1,0:jpj+1) , & 181 & qml_e(0:jpi+1,0:jpj+1) , & 180 & ss_e(0:jpi+1,0:jpj+1) , & 182 181 & first_width(nclasses) , first_length(nclasses) , & 183 182 & src_calving (jpi,jpj) , & -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbdyn.F90
r14898 r15421 269 269 ! 270 270 INTEGER :: itloop 271 REAL(wp) :: zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss , psr, pml271 REAL(wp) :: zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss 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 , psr, pml)284 & pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss ) 285 285 286 286 zM = berg%current_point%mass -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbini.F90
r14898 r15421 80 80 ff_e(:,:) = 0._wp ; tt_e(:,:) = 0._wp ; 81 81 fr_e(:,:) = 0._wp ; ss_e(:,:) = 0._wp ; 82 qsr_e(:,:) = 0._wp ; qml_e(:,:) = 0._wp ;83 82 #if defined key_si3 84 83 hi_e(:,:) = 0._wp ; -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbthm.F90
r14898 r15421 51 51 INTEGER :: ii, ij 52 52 REAL(wp) :: zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 53 REAL(wp) :: zqsr, pqsr, zqml, pqml54 53 REAL(wp) :: zSSS, zfzpt 55 REAL(wp) :: zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv , zMt54 REAL(wp) :: zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 56 55 REAL(wp) :: zMnew, zMnew1, zMnew2, zheat_hcflux, zheat_latent, z1_12 57 56 REAL(wp) :: zMbits, znMbits, zdMbitsE, zdMbitsM, zLbits, zAbits, zMbb … … 88 87 CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x, & 89 88 & pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y, & 90 & pt%sst, pt%cn, pt%hi, zff, pt%sss , pqsr, pqml)89 & pt%sst, pt%cn, pt%hi, zff, pt%sss ) 91 90 ! 92 91 zSST = pt%sst 93 92 zSSS = pt%sss 94 zqsr = MAX( pqsr, 0._wp ) ! Downward oceanic surface solar flux95 zqml = MAX( pqml, 0._wp ) ! Sea ice top melt96 93 CALL eos_fzp(zSSS,zfzpt) ! freezing point 97 94 zIC = MIN( 1._wp, pt%cn + rn_sicn_shift ) ! Shift sea-ice concentration !!gm ??? … … 110 107 zVol = zT * zW * zL 111 108 112 113 109 ! Environment 114 110 zdvo = SQRT( (pt%uvel-pt%uo)**2 + (pt%vvel-pt%vo)**2 ) … … 125 121 zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3))) , 0._wp ) * z1_rday ! Wave erosion (eqn M.A8 ) 126 122 127 ! Energy involved in top melt is a combination of 10% of solar flux (for portion of grid box that is ocean) and128 ! 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/s129 ! 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 132 123 IF( ln_operator_splitting ) THEN ! Operator split update of volume/mass 133 zTn = MAX( zT - zMb*zdt - zMt*zdt, 0._wp ) ! new total thickness (m)124 zTn = MAX( zT - zMb*zdt , 0._wp ) ! new total thickness (m) 134 125 znVol = zTn * zW * zL ! new volume (m^3) 135 126 zMnew1 = ( znVol / zVol ) * zM ! new mass (kg) … … 152 143 zLn = MAX( zL -(zMv+zMe)*zdt ,0._wp ) ! (m) 153 144 zWn = MAX( zW -(zMv+zMe)*zdt ,0._wp ) ! (m) 154 zTn = MAX( zT - zMb *zdt - zMt*zdt ,0._wp )! (m)145 zTn = MAX( zT - zMb *zdt ,0._wp ) ! (m) 155 146 ! Update volume and mass of berg 156 147 znVol = zTn*zWn*zLn ! (m^3) 157 148 zMnew = (znVol/zVol)*zM ! (kg) 158 149 zdM = zM - zMnew ! (kg) 159 zdMb = (zM/zVol) * (zW* zL ) * (zMb+zMt)*zdt ! approx. mass loss to basal melting (kg)150 zdMb = (zM/zVol) * (zW* zL ) *zMb*zdt ! approx. mass loss to basal melting (kg) 160 151 zdMe = (zM/zVol) * (zT*(zW+zL)) *zMe*zdt ! approx. mass lost to erosion (kg) 161 152 zdMv = (zM/zVol) * (zT*(zW+zL)) *zMv*zdt ! approx. mass loss to buoyant convection (kg) … … 174 165 zdMbitsM = MIN( zMbb*zdt , znMbits ) ! bergy bits mass lost to melting (kg) 175 166 znMbits = znMbits-zdMbitsM ! remove mass lost to bergy bits melt 176 IF( zMnew <= 0._wp ) THEN ! if parent berg has completely melted then167 IF( zMnew == 0._wp ) THEN ! if parent berg has completely melted then 177 168 zdMbitsM = zdMbitsM + znMbits ! instantly melt all the bergy bits 178 169 znMbits = 0._wp … … 184 175 znMbits = pt%mass_of_bits ! retain previous value incase non-zero 185 176 ENDIF 186 187 188 177 189 178 ! use tmask rather than tmask_i when dealing with icebergs -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbutl.F90
r14898 r15421 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 , a_i! SI3 variables25 USE ice, ONLY: u_ice, v_ice, hm_i ! SI3 variables 26 26 USE icevar ! ice_var_sshdyn 27 USE sbc_ice, ONLY: snwice_mass, snwice_mass_b , qsr_oce, qml_ice27 USE sbc_ice, ONLY: snwice_mass, snwice_mass_b 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 qsr_e(1:jpi,1:jpj) = qsr_oce(:,:)81 qml_e(1:jpi,1:jpj) = SUM(qml_ice(:,:,:) * a_i(:,:,:), dim=3 )82 80 ! 83 81 CALL lbc_lnk_icb( 'icbutl', uo_e, 'U', -1._wp, 1, 1 ) … … 89 87 CALL lbc_lnk_icb( 'icbutl', tt_e, 'T', +1._wp, 1, 1 ) 90 88 CALL lbc_lnk_icb( 'icbutl', ss_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 )93 89 #if defined key_si3 94 90 hi_e(1:jpi, 1:jpj) = hm_i (:,:) … … 113 109 SUBROUTINE icb_utl_interp( pi, pe1, puo, pui, pua, pssh_i, & 114 110 & pj, pe2, pvo, pvi, pva, pssh_j, & 115 & psst, pcn, phi, pff, psss , pqsr, pqml)111 & psst, pcn, phi, pff, psss ) 116 112 !!---------------------------------------------------------------------- 117 113 !! *** ROUTINE icb_utl_interp *** … … 135 131 REAL(wp), INTENT( out) :: pssh_i, pssh_j ! ssh i- & j-gradients 136 132 REAL(wp), INTENT( out) :: psst, pcn, phi, pff, psss ! SST, ice concentration, ice thickness, Coriolis, SSS 137 REAL(wp), INTENT( out) :: pqsr, pqml ! Ocean solar and sea ice top melt138 133 ! 139 134 REAL(wp) :: zcd, zmod ! local scalars … … 149 144 pcn = icb_utl_bilin_h( fr_e, pi, pj, 'T', .true. ) ! ice concentration 150 145 pff = icb_utl_bilin_h( ff_e, pi, pj, 'F', .false. ) ! Coriolis parameter 151 pqsr = icb_utl_bilin_h( qsr_e, pi, pj, 'T', .true. ) ! Ocean surface solar152 pqml = icb_utl_bilin_h( qml_e, pi, pj, 'T', .true. ) ! Sea ice top melt153 146 ! 154 147 pua = icb_utl_bilin_h( ua_e, pi, pj, 'U', .true. ) ! 10m wind
Note: See TracChangeset
for help on using the changeset viewer.