- Timestamp:
- 2012-11-21T14:19:18+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_2/limthd_2.F90
r3294 r3625 13 13 !! 'key_lim2' : LIM 2.0 sea-ice model 14 14 !!---------------------------------------------------------------------- 15 !! lim_thd_2 : thermodynamic of sea ice16 !! lim_thd_init_2 : initialisation of sea-ice thermodynamic15 !! lim_thd_2 : thermodynamic of sea ice 16 !! lim_thd_init_2 : initialisation of sea-ice thermodynamic 17 17 !!---------------------------------------------------------------------- 18 USE phycst ! physical constants19 USE dom_oce ! ocean space and time domain variables18 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 ! I/O manager22 USE in_out_manager ! I/O manager 23 23 USE lib_mpp 24 USE wrk_nemo ! work arrays25 USE iom ! IOM library26 USE ice_2 ! LIM sea-ice variables27 USE sbc_oce !28 USE sbc_ice !29 USE thd_ice_2 ! LIM thermodynamic sea-ice variables30 USE dom_ice_2 ! LIM sea-ice domain24 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 ! Print control 35 USE cpl_oasis3, ONLY : lk_cpl 36 USE diaar5, ONLY : lk_diaar5 37 34 USE prtctl ! Print control 35 USE cpl_oasis3, ONLY : lk_cpl 36 USE diaar5 , ONLY : lk_diaar5 37 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 38 38 39 IMPLICIT NONE 39 40 PRIVATE … … 55 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 57 !!---------------------------------------------------------------------- 57 58 58 CONTAINS 59 59 … … 89 89 REAL(wp) :: za , zh, zthsnice ! 90 90 REAL(wp) :: zfric_u ! friction velocity 91 REAL(wp) :: zfnsol ! total non solar heat92 REAL(wp) :: zfontn ! heat flux from snow thickness93 91 REAL(wp) :: zfntlat, zpareff ! test. the val. of lead heat budget 94 92 … … 129 127 zdvolif(:,:) = 0.e0 ! total variation of ice volume 130 128 zdvonif(:,:) = 0.e0 ! transformation of snow to sea-ice volume 131 ! zdvonif(:,:) = 0.e0 ! lateral variation of ice volume132 129 zlicegr(:,:) = 0.e0 ! lateral variation of ice volume 133 130 zdvomif(:,:) = 0.e0 ! variation of ice volume at bottom due to melting only … … 137 134 ffltbif(:,:) = 0.e0 ! linked with fstric 138 135 qfvbq (:,:) = 0.e0 ! linked with fstric 139 rdmsnif(:,:) = 0.e0 ! variation of snow mass per unit area 140 rdmicif(:,:) = 0.e0 ! variation of ice mass per unit area 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 141 140 zmsk (:,:,:) = 0.e0 142 141 … … 199 198 !-------------------------------------------------------------------------- 200 199 201 sst_m(:,:) = sst_m(:,:) + rt0 202 203 !CDIR NOVERRCHK 204 DO jj = 1, jpj 205 !CDIR NOVERRCHK 200 !CDIR NOVERRCHK 201 DO jj = 1, jpj 202 !CDIR NOVERRCHK 206 203 DO ji = 1, jpi 207 204 zthsnice = hsnif(ji,jj) + hicif(ji,jj) … … 217 214 ! temperature and turbulent mixing (McPhee, 1992) 218 215 zfric_u = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin ) ! friction velocity 219 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_m(ji,jj) - tfu(ji,jj) )216 fdtcn(ji,jj) = zindb * rau0 * rcp * 0.006 * zfric_u * ( sst_m(ji,jj) + rt0 - tfu(ji,jj) ) 220 217 qdtcn(ji,jj) = zindb * fdtcn(ji,jj) * frld(ji,jj) * rdt_ice 221 218 222 219 ! partial computation of the lead energy budget (qldif) 223 220 #if defined key_coupled 224 qldif(ji,jj) = tms(ji,jj) * rdt_ice &221 qldif(ji,jj) = tms(ji,jj) * rdt_ice & 225 222 & * ( ( qsr_tot(ji,jj) - qsr_ice(ji,jj,1) * zfricp ) * ( 1.0 - thcm(ji,jj) ) & 226 223 & + ( qns_tot(ji,jj) - qns_ice(ji,jj,1) * zfricp ) & 227 224 & + frld(ji,jj) * ( fdtcn(ji,jj) + ( 1.0 - zindb ) * fsbbq(ji,jj) ) ) 228 225 #else 229 zfontn = ( sprecip(ji,jj) / rhosn ) * xlsn ! energy for melting solid precipitation 230 zfnsol = qns(ji,jj) ! total non solar flux over the ocean 231 qldif(ji,jj) = tms(ji,jj) * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 232 & + zfnsol + fdtcn(ji,jj) - zfontn & 233 & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & 234 & * frld(ji,jj) * rdt_ice 235 !!$ qldif(ji,jj) = tms(ji,jj) * rdt_ice * frld(ji,jj) 236 !!$ & * ( qsr(ji,jj) * ( 1.0 - thcm(ji,jj) ) & 237 !!$ & + qns(ji,jj) + fdtcn(ji,jj) - zfontn & 238 !!$ & + ( 1.0 - zindb ) * fsbbq(ji,jj) ) & 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) ) 239 230 #endif 240 231 ! parlat : percentage of energy used for lateral ablation (0.0) … … 246 237 247 238 ! energy needed to bring ocean surface layer until its freezing 248 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) & 249 & * ( tfu(ji,jj) - sst_m(ji,jj) ) * ( 1 - zinda ) 239 qcmif (ji,jj) = rau0 * rcp * fse3t_m(ji,jj,1) * ( tfu(ji,jj) - sst_m(ji,jj) - rt0 ) * ( 1 - zinda ) 250 240 251 241 ! calculate oceanic heat flux. … … 257 247 END DO 258 248 259 sst_m(:,:) = sst_m(:,:) - rt0260 261 249 ! Select icy points and fulfill arrays for the vectorial grid. 262 250 !---------------------------------------------------------------------- … … 312 300 CALL tab_2d_1d_2( nbpb, qldif_1d (1:nbpb) , qldif , jpi, jpj, npb(1:nbpb) ) 313 301 CALL tab_2d_1d_2( nbpb, qstbif_1d (1:nbpb) , qstoif , jpi, jpj, npb(1:nbpb) ) 314 CALL tab_2d_1d_2( nbpb, rdmicif_1d (1:nbpb) , rdmicif , 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 304 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) ) 316 307 CALL tab_2d_1d_2( nbpb, qlbbq_1d (1:nbpb) , zqlbsbq , jpi, jpj, npb(1:nbpb) ) 317 308 ! … … 332 323 CALL tab_1d_2d_2( nbpb, qfvbq , npb, qfvbq_1d (1:nbpb) , jpi, jpj ) 333 324 CALL tab_1d_2d_2( nbpb, qstoif , npb, qstbif_1d (1:nbpb) , jpi, jpj ) 334 CALL tab_1d_2d_2( nbpb, rdmicif , npb, rdmicif_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 327 CALL tab_1d_2d_2( nbpb, dmgwi , npb, dmgwi_1d (1:nbpb) , jpi, jpj ) 336 CALL tab_1d_2d_2( nbpb, rdmsnif , npb, rdmsnif_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 330 CALL tab_1d_2d_2( nbpb, zdvosif , npb, dvsbq_1d (1:nbpb) , jpi, jpj ) 338 331 CALL tab_1d_2d_2( nbpb, zdvobif , npb, dvbbq_1d (1:nbpb) , jpi, jpj ) … … 393 386 IF( nbpac > 0 ) THEN 394 387 ! 395 zlicegr(:,:) = rdm icif(:,:) ! to output the lateral sea-ice growth388 zlicegr(:,:) = rdm_ice(:,:) ! to output the lateral sea-ice growth 396 389 !...Put the variable in a 1-D array for lateral accretion 397 390 CALL tab_2d_1d_2( nbpac, frld_1d (1:nbpac) , frld , jpi, jpj, npac(1:nbpac) ) … … 404 397 CALL tab_2d_1d_2( nbpac, qcmif_1d (1:nbpac) , qcmif , jpi, jpj, npac(1:nbpac) ) 405 398 CALL tab_2d_1d_2( nbpac, qstbif_1d (1:nbpac) , qstoif , jpi, jpj, npac(1:nbpac) ) 406 CALL tab_2d_1d_2( nbpac, rdmicif_1d(1:nbpac) , rdmicif , 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 401 CALL tab_2d_1d_2( nbpac, dvlbq_1d (1:nbpac) , zdvolif , jpi, jpj, npac(1:nbpac) ) 408 402 CALL tab_2d_1d_2( nbpac, tfu_1d (1:nbpac) , tfu , jpi, jpj, npac(1:nbpac) ) … … 418 412 CALL tab_1d_2d_2( nbpac, tbif(:,:,3), npac(1:nbpac), tbif_1d (1:nbpac , 3 ), jpi, jpj ) 419 413 CALL tab_1d_2d_2( nbpac, qstoif , npac(1:nbpac), qstbif_1d (1:nbpac) , jpi, jpj ) 420 CALL tab_1d_2d_2( nbpac, rdmicif , npac(1:nbpac), rdmicif_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 416 CALL tab_1d_2d_2( nbpac, zdvolif , npac(1:nbpac), dvlbq_1d (1:nbpac) , jpi, jpj ) 422 417 ! … … 449 444 CALL iom_put( 'iceprod_cea' , hicifp (:,:) * zztmp ) ! Ice produced [m/s] 450 445 IF( lk_diaar5 ) THEN 451 CALL iom_put( 'snowmel_cea' , rdm snif(:,:) * zztmp ) ! Snow melt [kg/m2/s]446 CALL iom_put( 'snowmel_cea' , rdm_snw(:,:) * zztmp ) ! Snow melt [kg/m2/s] 452 447 zztmp = rhoic / rdt_ice 453 448 CALL iom_put( 'sntoice_cea' , zdvonif(:,:) * zztmp ) ! Snow to Ice transformation [kg/m2/s] 454 449 CALL iom_put( 'ticemel_cea' , zdvosif(:,:) * zztmp ) ! Melt at Sea Ice top [kg/m2/s] 455 450 CALL iom_put( 'bicemel_cea' , zdvomif(:,:) * zztmp ) ! Melt at Sea Ice bottom [kg/m2/s] 456 zlicegr(:,:) = MAX( 0.e0, rdm icif(:,:)-zlicegr(:,:) )457 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Later eal sea ice growth[kg/m2/s]451 zlicegr(:,:) = MAX( 0.e0, rdm_ice(:,:)-zlicegr(:,:) ) 452 CALL iom_put( 'licepro_cea' , zlicegr(:,:) * zztmp ) ! Lateral sea ice growth [kg/m2/s] 458 453 ENDIF 459 454 !
Note: See TracChangeset
for help on using the changeset viewer.