- Timestamp:
- 2016-06-24T09:50:27+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r3874_FASTNEt/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90
r3625 r6736 13 13 !! 'key_lim2' : LIM 2.0 sea-ice model 14 14 !!---------------------------------------------------------------------- 15 !! lim_thd_2 16 !! lim_thd_init_2 15 !! lim_thd_2 : thermodynamic of sea ice 16 !! lim_thd_init_2 : initialisation of sea-ice thermodynamic 17 17 !!---------------------------------------------------------------------- 18 USE phycst 19 USE dom_oce 18 USE phycst ! physical constants 19 USE dom_oce ! ocean space and time domain variables 20 20 USE domvvl 21 21 USE lbclnk 22 USE in_out_manager 22 USE in_out_manager ! I/O manager 23 23 USE lib_mpp 24 USE wrk_nemo 25 USE iom 26 USE ice_2 27 USE sbc_oce 28 USE sbc_ice 29 USE thd_ice_2 30 USE dom_ice_2 24 USE wrk_nemo ! work arrays 25 USE iom ! IOM library 26 USE ice_2 ! LIM sea-ice variables 27 USE sbc_oce ! 28 USE sbc_ice ! 29 USE thd_ice_2 ! LIM thermodynamic sea-ice variables 30 USE dom_ice_2 ! LIM sea-ice domain 31 31 USE limthd_zdf_2 32 32 USE limthd_lac_2 33 33 USE limtab_2 34 USE prtctl 35 USE cpl_oasis3, ONLY : lk_cpl36 USE diaar5 , ONLY : lk_diaar537 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)38 34 USE prtctl ! Print control 35 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 36 USE cpl_oasis3, ONLY : lk_cpl 37 USE diaar5, ONLY : lk_diaar5 38 39 39 IMPLICIT NONE 40 40 PRIVATE … … 56 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 57 57 !!---------------------------------------------------------------------- 58 58 59 CONTAINS 59 60 … … 89 90 REAL(wp) :: za , zh, zthsnice ! 90 91 REAL(wp) :: zfric_u ! friction velocity 92 REAL(wp) :: zfnsol ! total non solar heat 93 REAL(wp) :: zfontn ! heat flux from snow thickness 91 94 REAL(wp) :: zfntlat, zpareff ! test. the val. of lead heat budget 92 95 … … 127 130 zdvolif(:,:) = 0.e0 ! total variation of ice volume 128 131 zdvonif(:,:) = 0.e0 ! transformation of snow to sea-ice volume 132 ! zdvonif(:,:) = 0.e0 ! lateral variation of ice volume 129 133 zlicegr(:,:) = 0.e0 ! lateral variation of ice volume 130 134 zdvomif(:,:) = 0.e0 ! variation of ice volume at bottom due to melting only … … 134 138 ffltbif(:,:) = 0.e0 ! linked with fstric 135 139 qfvbq (:,:) = 0.e0 ! linked with fstric 136 rdm_snw(:,:) = 0.e0 ! variation of snow mass over 1 time step 137 rdq_snw(:,:) = 0.e0 ! heat content associated with rdm_snw 138 rdm_ice(:,:) = 0.e0 ! variation of ice mass over 1 time step 139 rdq_ice(:,:) = 0.e0 ! heat content associated with rdm_ice 140 rdmsnif(:,:) = 0.e0 ! variation of snow mass per unit area 141 rdmicif(:,:) = 0.e0 ! variation of ice mass per unit area 140 142 zmsk (:,:,:) = 0.e0 141 143 … … 198 200 !-------------------------------------------------------------------------- 199 201 200 !CDIR NOVERRCHK 201 DO jj = 1, jpj 202 !CDIR NOVERRCHK 202 sst_m(:,:) = sst_m(:,:) + rt0 203 204 !CDIR NOVERRCHK 205 DO jj = 1, jpj 206 !CDIR NOVERRCHK 203 207 DO ji = 1, jpi 204 208 zthsnice = hsnif(ji,jj) + hicif(ji,jj) … … 214 218 ! temperature and turbulent mixing (McPhee, 1992) 215 219 zfric_u = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin ) ! friction velocity 216 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_m(ji,jj) + rt0- tfu(ji,jj) )220 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_m(ji,jj) - tfu(ji,jj) ) 217 221 qdtcn(ji,jj) = zindb * fdtcn(ji,jj) * frld(ji,jj) * rdt_ice 218 222 219 223 ! partial computation of the lead energy budget (qldif) 220 224 #if defined key_coupled 221 qldif(ji,jj) = tms(ji,jj) * rdt_ice 225 qldif(ji,jj) = tms(ji,jj) * rdt_ice & 222 226 & * ( ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) ) & 223 227 & + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp ) & 224 228 & + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) ) ) 225 229 #else 226 qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) & 227 & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 228 & + qns(ji,jj) + fdtcn(ji,jj) & 229 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) 230 zfontn = ( sprecip(ji,jj) / rhosn ) * xlsn ! energy for melting solid precipitation 231 zfnsol = qns(ji,jj) ! total non solar flux over the ocean 232 qldif(ji,jj) = tms(ji,jj) * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 233 & + zfnsol + fdtcn(ji,jj) - zfontn & 234 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & 235 & * frld(ji,jj) * rdt_ice 236 !!$ qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) 237 !!$ & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 238 !!$ & + qns(ji,jj) + fdtcn(ji,jj) - zfontn & 239 !!$ & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & 230 240 #endif 231 241 ! parlat : percentage of energy used for lateral ablation (0.0) … … 237 247 238 248 ! energy needed to bring ocean surface layer until its freezing 239 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) * ( tfu(ji,jj) - sst_m(ji,jj) - rt0 ) * ( 1 - zinda ) 249 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) & 250 & * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 240 251 241 252 ! calculate oceanic heat flux. … … 247 258 END DO 248 259 260 sst_m(:,:) = sst_m(:,:) - rt0 261 249 262 ! Select icy points and fulfill arrays for the vectorial grid. 250 263 !---------------------------------------------------------------------- … … 300 313 CALL tab_2d_1d_2( nbpb, qldif_1d (1:nbpb) , qldif , jpi, jpj, npb(1:nbpb) ) 301 314 CALL tab_2d_1d_2( nbpb, qstbif_1d (1:nbpb) , qstoif , jpi, jpj, npb(1:nbpb) ) 302 CALL tab_2d_1d_2( nbpb, rdm_ice_1d (1:nbpb) , rdm_ice , jpi, jpj, npb(1:nbpb) ) 303 CALL tab_2d_1d_2( nbpb, rdq_ice_1d (1:nbpb) , rdq_ice , jpi, jpj, npb(1:nbpb) ) 315 CALL tab_2d_1d_2( nbpb, rdmicif_1d (1:nbpb) , rdmicif , jpi, jpj, npb(1:nbpb) ) 304 316 CALL tab_2d_1d_2( nbpb, dmgwi_1d (1:nbpb) , dmgwi , jpi, jpj, npb(1:nbpb) ) 305 CALL tab_2d_1d_2( nbpb, rdm_snw_1d (1:nbpb) , rdm_snw , jpi, jpj, npb(1:nbpb) )306 CALL tab_2d_1d_2( nbpb, rdq_snw_1d (1:nbpb) , rdq_snw , jpi, jpj, npb(1:nbpb) )307 317 CALL tab_2d_1d_2( nbpb, qlbbq_1d (1:nbpb) , zqlbsbq , jpi, jpj, npb(1:nbpb) ) 308 318 ! … … 323 333 CALL tab_1d_2d_2( nbpb, qfvbq , npb, qfvbq_1d (1:nbpb) , jpi, jpj ) 324 334 CALL tab_1d_2d_2( nbpb, qstoif , npb, qstbif_1d (1:nbpb) , jpi, jpj ) 325 CALL tab_1d_2d_2( nbpb, rdm_ice , npb, rdm_ice_1d(1:nbpb) , jpi, jpj ) 326 CALL tab_1d_2d_2( nbpb, rdq_ice , npb, rdq_ice_1d(1:nbpb) , jpi, jpj ) 335 CALL tab_1d_2d_2( nbpb, rdmicif , npb, rdmicif_1d(1:nbpb) , jpi, jpj ) 327 336 CALL tab_1d_2d_2( nbpb, dmgwi , npb, dmgwi_1d (1:nbpb) , jpi, jpj ) 328 CALL tab_1d_2d_2( nbpb, rdm_snw , npb, rdm_snw_1d(1:nbpb) , jpi, jpj ) 329 CALL tab_1d_2d_2( nbpb, rdq_snw , npb, rdq_snw_1d(1:nbpb) , jpi, jpj ) 337 CALL tab_1d_2d_2( nbpb, rdmsnif , npb, rdmsnif_1d(1:nbpb) , jpi, jpj ) 330 338 CALL tab_1d_2d_2( nbpb, zdvosif , npb, dvsbq_1d (1:nbpb) , jpi, jpj ) 331 339 CALL tab_1d_2d_2( nbpb, zdvobif , npb, dvbbq_1d (1:nbpb) , jpi, jpj ) … … 386 394 IF( nbpac > 0 ) THEN 387 395 ! 388 zlicegr(:,:) = rdm _ice(:,:) ! to output the lateral sea-ice growth396 zlicegr(:,:) = rdmicif(:,:) ! to output the lateral sea-ice growth 389 397 !...Put the variable in a 1-D array for lateral accretion 390 398 CALL tab_2d_1d_2( nbpac, frld_1d (1:nbpac) , frld , jpi, jpj, npac(1:nbpac) ) … … 397 405 CALL tab_2d_1d_2( nbpac, qcmif_1d (1:nbpac) , qcmif , jpi, jpj, npac(1:nbpac) ) 398 406 CALL tab_2d_1d_2( nbpac, qstbif_1d (1:nbpac) , qstoif , jpi, jpj, npac(1:nbpac) ) 399 CALL tab_2d_1d_2( nbpac, rdm_ice_1d(1:nbpac) , rdm_ice , jpi, jpj, npac(1:nbpac) ) 400 CALL tab_2d_1d_2( nbpac, rdq_ice_1d(1:nbpac) , rdq_ice , jpi, jpj, npac(1:nbpac) ) 407 CALL tab_2d_1d_2( nbpac, rdmicif_1d(1:nbpac) , rdmicif , jpi, jpj, npac(1:nbpac) ) 401 408 CALL tab_2d_1d_2( nbpac, dvlbq_1d (1:nbpac) , zdvolif , jpi, jpj, npac(1:nbpac) ) 402 409 CALL tab_2d_1d_2( nbpac, tfu_1d (1:nbpac) , tfu , jpi, jpj, npac(1:nbpac) ) … … 412 419 CALL tab_1d_2d_2( nbpac, tbif(:,:,3), npac(1:nbpac), tbif_1d (1:nbpac , 3 ), jpi, jpj ) 413 420 CALL tab_1d_2d_2( nbpac, qstoif , npac(1:nbpac), qstbif_1d (1:nbpac) , jpi, jpj ) 414 CALL tab_1d_2d_2( nbpac, rdm_ice , npac(1:nbpac), rdm_ice_1d(1:nbpac) , jpi, jpj ) 415 CALL tab_1d_2d_2( nbpac, rdq_ice , npac(1:nbpac), rdq_ice_1d(1:nbpac) , jpi, jpj ) 421 CALL tab_1d_2d_2( nbpac, rdmicif , npac(1:nbpac), rdmicif_1d(1:nbpac) , jpi, jpj ) 416 422 CALL tab_1d_2d_2( nbpac, zdvolif , npac(1:nbpac), dvlbq_1d (1:nbpac) , jpi, jpj ) 417 423 ! … … 444 450 CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp ) ! Ice produced [m/s] 445 451 IF( lk_diaar5 ) THEN 446 CALL iom_put( 'snowmel_cea' , rdm _snw(:,:) * zztmp ) ! Snow melt [kg/m2/s]452 CALL iom_put( 'snowmel_cea' , rdmsnif(:,:) * zztmp ) ! Snow melt [kg/m2/s] 447 453 zztmp = rhoic / rdt_ice 448 454 CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp ) ! Snow to Ice transformation [kg/m2/s] 449 455 CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp ) ! Melt at Sea Ice top [kg/m2/s] 450 456 CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp ) ! Melt at Sea Ice bottom [kg/m2/s] 451 zlicegr(:,:) = MAX( 0.e0, rdm _ice(:,:)-zlicegr(:,:) )452 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Later al sea ice growth[kg/m2/s]457 zlicegr(:,:) = MAX( 0.e0, rdmicif(:,:)-zlicegr(:,:) ) 458 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Latereal sea ice growth [kg/m2/s] 453 459 ENDIF 454 460 !
Note: See TracChangeset
for help on using the changeset viewer.