- Timestamp:
- 2021-05-18T18:06:20+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
r14741 r14880 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 88 REAL(wp), PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ff_e, tt_e, fr_e, ss_e, qt_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) , 180 & ss_e(0:jpi+1,0:jpj+1) , qt_e(0:jpi+1,0:jpj+1) , & 181 181 & first_width(nclasses) , first_length(nclasses) , & 182 182 & src_calving (jpi,jpj) , & -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbdyn.F90
r14711 r14880 269 269 ! 270 270 INTEGER :: itloop 271 REAL(wp) :: zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss 271 REAL(wp) :: zuo, zui, zua, zuwave, zssh_x, zsst, zcn, zhi, zsss, pqt 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 )284 & pyj, pe2, zvo, zvi, zva, zssh_y, zsst, zcn, zhi, zff, zsss, pqt ) 285 285 286 286 zM = berg%current_point%mass -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbini.F90
r14075 r14880 80 80 ff_e(:,:) = 0._wp ; tt_e(:,:) = 0._wp ; 81 81 fr_e(:,:) = 0._wp ; ss_e(:,:) = 0._wp ; 82 qt_e(:,:) = 0._wp 82 83 #if defined key_si3 83 84 hi_e(:,:) = 0._wp ; -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbthm.F90
r14075 r14880 51 51 INTEGER :: ii, ij 52 52 REAL(wp) :: zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 53 REAL(wp) :: zqt, pqt 53 54 REAL(wp) :: zSSS, zfzpt 54 REAL(wp) :: zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 55 REAL(wp) :: zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv, zMt 55 56 REAL(wp) :: zMnew, zMnew1, zMnew2, zheat_hcflux, zheat_latent, z1_12 56 57 REAL(wp) :: zMbits, znMbits, zdMbitsE, zdMbitsM, zLbits, zAbits, zMbb … … 87 88 CALL icb_utl_interp( pt%xi, pt%e1, pt%uo, pt%ui, pt%ua, pt%ssh_x, & 88 89 & pt%yj, pt%e2, pt%vo, pt%vi, pt%va, pt%ssh_y, & 89 & pt%sst, pt%cn, pt%hi, zff, pt%sss )90 & pt%sst, pt%cn, pt%hi, zff, pt%sss, pqt ) 90 91 ! 91 92 zSST = pt%sst 92 93 zSSS = pt%sss 94 zqt = MAX( pqt, 0._wp ) ! Net surface heat flux 93 95 CALL eos_fzp(zSSS,zfzpt) ! freezing point 94 96 zIC = MIN( 1._wp, pt%cn + rn_sicn_shift ) ! Shift sea-ice concentration !!gm ??? … … 107 109 zVol = zT * zW * zL 108 110 111 109 112 ! Environment 110 113 zdvo = SQRT( (pt%uvel-pt%uo)**2 + (pt%vvel-pt%vo)**2 ) … … 120 123 ENDIF 121 124 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. 122 131 123 132 IF( ln_operator_splitting ) THEN ! Operator split update of volume/mass 124 zTn = MAX( zT - zMb*zdt , 0._wp ) ! new total thickness (m)133 zTn = MAX( zT - zMb*zdt - zMt*zdt , 0._wp ) ! new total thickness (m) 125 134 znVol = zTn * zW * zL ! new volume (m^3) 126 135 zMnew1 = ( znVol / zVol ) * zM ! new mass (kg) … … 143 152 zLn = MAX( zL -(zMv+zMe)*zdt ,0._wp ) ! (m) 144 153 zWn = MAX( zW -(zMv+zMe)*zdt ,0._wp ) ! (m) 145 zTn = MAX( zT - zMb *zdt ,0._wp )! (m)154 zTn = MAX( zT - zMb*zdt - zMt*zdt ,0._wp ) ! (m) 146 155 ! Update volume and mass of berg 147 156 znVol = zTn*zWn*zLn ! (m^3) 148 157 zMnew = (znVol/zVol)*zM ! (kg) 149 158 zdM = zM - zMnew ! (kg) 150 zdMb = (zM/zVol) * (zW* zL ) * zMb*zdt ! approx. mass loss to basal melting (kg)159 zdMb = (zM/zVol) * (zW* zL ) *(zMb+zMt)*zdt ! approx. mass loss to basal melting (kg) 151 160 zdMe = (zM/zVol) * (zT*(zW+zL)) *zMe*zdt ! approx. mass lost to erosion (kg) 152 161 zdMv = (zM/zVol) * (zT*(zW+zL)) *zMv*zdt ! approx. mass loss to buoyant convection (kg) … … 176 185 ENDIF 177 186 187 188 178 189 ! use tmask rather than tmask_i when dealing with icebergs 179 190 IF( tmask(ii,ij,1) /= 0._wp ) THEN ! Add melting to the grid and field diagnostics -
NEMO/branches/UKMO/NEMO_4.0.4_bouncing_icebergs/src/OCE/ICB/icbutl.F90
r14075 r14880 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 ! SI3 variables25 USE ice, ONLY: u_ice, v_ice, hm_i, qt_atm_oi ! SI3 variables 26 26 USE icevar ! ice_var_sshdyn 27 27 USE sbc_ice, ONLY: snwice_mass, snwice_mass_b … … 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 81 ! 81 82 CALL lbc_lnk_icb( 'icbutl', uo_e, 'U', -1._wp, 1, 1 ) … … 87 88 CALL lbc_lnk_icb( 'icbutl', tt_e, 'T', +1._wp, 1, 1 ) 88 89 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 ) 89 91 #if defined key_si3 90 92 hi_e(1:jpi, 1:jpj) = hm_i (:,:) … … 109 111 SUBROUTINE icb_utl_interp( pi, pe1, puo, pui, pua, pssh_i, & 110 112 & pj, pe2, pvo, pvi, pva, pssh_j, & 111 & psst, pcn, phi, pff, psss )113 & psst, pcn, phi, pff, psss, pqt ) 112 114 !!---------------------------------------------------------------------- 113 115 !! *** ROUTINE icb_utl_interp *** … … 131 133 REAL(wp), INTENT( out) :: pssh_i, pssh_j ! ssh i- & j-gradients 132 134 REAL(wp), INTENT( out) :: psst, pcn, phi, pff, psss ! SST, ice concentration, ice thickness, Coriolis, SSS 135 REAL(wp), INTENT( out) :: pqt ! Net surface solar radiation 133 136 ! 134 137 REAL(wp) :: zcd, zmod ! local scalars … … 144 147 pcn = icb_utl_bilin_h( fr_e, pi, pj, 'T', .true. ) ! ice concentration 145 148 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 146 150 ! 147 151 pua = icb_utl_bilin_h( ua_e, pi, pj, 'U', .true. ) ! 10m wind
Note: See TracChangeset
for help on using the changeset viewer.