Changeset 5682 for branches/2015/dev_r5072_UKMO2_OBS_simplification/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
- Timestamp:
- 2015-08-12T17:46:45+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5072_UKMO2_OBS_simplification/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90
r4990 r5682 22 22 USE eosbn2 ! equation of state 23 23 USE ice ! sea-ice variables 24 USE par_ice ! ice parameters25 24 USE par_oce ! ocean parameters 26 25 USE dom_ice ! sea-ice domain … … 36 35 37 36 ! !!** init namelist (namiceini) ** 38 REAL(wp) :: thres_sst ! threshold water temperature for initial sea ice39 REAL(wp) :: hts_ini_n ! initial snow thickness in the north40 REAL(wp) :: hts_ini_s ! initial snow thickness in the south41 REAL(wp) :: hti_ini_n ! initial ice thickness in the north42 REAL(wp) :: hti_ini_s ! initial ice thickness in the south43 REAL(wp) :: ati_ini_n ! initial leads area in the north44 REAL(wp) :: ati_ini_s ! initial leads area in the south45 REAL(wp) :: smi_ini_n ! initial salinity46 REAL(wp) :: smi_ini_s ! initial salinity47 REAL(wp) :: tmi_ini_n ! initial temperature48 REAL(wp) :: tmi_ini_s ! initial temperature49 50 LOGICAL :: ln_ limini ! initialization or not37 REAL(wp) :: rn_thres_sst ! threshold water temperature for initial sea ice 38 REAL(wp) :: rn_hts_ini_n ! initial snow thickness in the north 39 REAL(wp) :: rn_hts_ini_s ! initial snow thickness in the south 40 REAL(wp) :: rn_hti_ini_n ! initial ice thickness in the north 41 REAL(wp) :: rn_hti_ini_s ! initial ice thickness in the south 42 REAL(wp) :: rn_ati_ini_n ! initial leads area in the north 43 REAL(wp) :: rn_ati_ini_s ! initial leads area in the south 44 REAL(wp) :: rn_smi_ini_n ! initial salinity 45 REAL(wp) :: rn_smi_ini_s ! initial salinity 46 REAL(wp) :: rn_tmi_ini_n ! initial temperature 47 REAL(wp) :: rn_tmi_ini_s ! initial temperature 48 49 LOGICAL :: ln_iceini ! initialization or not 51 50 !!---------------------------------------------------------------------- 52 51 !! LIM 3.0, UCL-LOCEAN-IPSL (2008) … … 87 86 !! * Local variables 88 87 INTEGER :: ji, jj, jk, jl ! dummy loop indices 89 REAL(wp) :: epsi20,ztmelts, zdh88 REAL(wp) :: ztmelts, zdh 90 89 INTEGER :: i_hemis, i_fill, jl0 91 90 REAL(wp) :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv … … 101 100 CALL wrk_alloc( 2, zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 102 101 103 epsi20 = 1.e-20_wp104 105 102 IF(lwp) WRITE(numout,*) 106 103 IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization ' … … 115 112 ! surface temperature 116 113 DO jl = 1, jpl ! loop over categories 117 t_su (:,:,jl) = rt t * tms(:,:)118 tn_ice(:,:,jl) = rt t * tms(:,:)114 t_su (:,:,jl) = rt0 * tmask(:,:,1) 115 tn_ice(:,:,jl) = rt0 * tmask(:,:,1) 119 116 END DO 120 117 121 118 ! basal temperature (considered at freezing point) 122 t_bo(:,:) = ( eos_fzp( tsn(:,:,1,jp_sal) ) + rt0 ) * tms(:,:) 123 124 IF( ln_limini ) THEN 119 CALL eos_fzp( sss_m(:,:), t_bo(:,:) ) 120 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) 121 122 IF( ln_iceini ) THEN 125 123 126 124 !-------------------------------------------------------------------- … … 130 128 DO jj = 1, jpj ! ice if sst <= t-freez + ttest 131 129 DO ji = 1, jpi 132 IF( ( tsn(ji,jj,1,jp_tem) - ( t_bo(ji,jj) - rt0 ) ) * tms(ji,jj) >=thres_sst ) THEN133 zswitch(ji,jj) = 0._wp * tm s(ji,jj) ! no ice130 IF( ( sst_m(ji,jj) - ( t_bo(ji,jj) - rt0 ) ) * tmask(ji,jj,1) >= rn_thres_sst ) THEN 131 zswitch(ji,jj) = 0._wp * tmask(ji,jj,1) ! no ice 134 132 ELSE 135 zswitch(ji,jj) = 1._wp * tm s(ji,jj) ! ice133 zswitch(ji,jj) = 1._wp * tmask(ji,jj,1) ! ice 136 134 ENDIF 137 135 END DO … … 158 156 !----------------------------- 159 157 ! assign initial thickness, concentration, snow depth and salinity to an hemisphere-dependent array 160 zht_i_ini(1) = hti_ini_n ; zht_i_ini(2) =hti_ini_s ! ice thickness161 zht_s_ini(1) = hts_ini_n ; zht_s_ini(2) =hts_ini_s ! snow depth162 zat_i_ini(1) = ati_ini_n ; zat_i_ini(2) =ati_ini_s ! ice concentration163 zsm_i_ini(1) = smi_ini_n ; zsm_i_ini(2) =smi_ini_s ! bulk ice salinity164 ztm_i_ini(1) = tmi_ini_n ; ztm_i_ini(2) =tmi_ini_s ! temperature (ice and snow)158 zht_i_ini(1) = rn_hti_ini_n ; zht_i_ini(2) = rn_hti_ini_s ! ice thickness 159 zht_s_ini(1) = rn_hts_ini_n ; zht_s_ini(2) = rn_hts_ini_s ! snow depth 160 zat_i_ini(1) = rn_ati_ini_n ; zat_i_ini(2) = rn_ati_ini_s ! ice concentration 161 zsm_i_ini(1) = rn_smi_ini_n ; zsm_i_ini(2) = rn_smi_ini_s ! bulk ice salinity 162 ztm_i_ini(1) = rn_tmi_ini_n ; ztm_i_ini(2) = rn_tmi_ini_s ! temperature (ice and snow) 165 163 166 164 zvt_i_ini(:) = zht_i_ini(:) * zat_i_ini(:) ! ice volume … … 197 195 !--- Ice thicknesses in the i_fill - 1 first categories 198 196 DO jl = 1, i_fill - 1 199 zh_i_ini(jl,i_hemis) = 0.5 * ( hi_max(jl) + hi_max(jl-1))197 zh_i_ini(jl,i_hemis) = hi_mean(jl) 200 198 END DO 201 199 202 200 !--- jl0: most likely index where cc will be maximum 203 201 DO jl = 1, jpl 204 IF ( ( zht_i_ini(i_hemis) .GT.hi_max(jl-1) ) .AND. &205 ( zht_i_ini(i_hemis) .LE.hi_max(jl) ) ) THEN202 IF ( ( zht_i_ini(i_hemis) > hi_max(jl-1) ) .AND. & 203 & ( zht_i_ini(i_hemis) <= hi_max(jl) ) ) THEN 206 204 jl0 = jl 207 205 ENDIF … … 267 265 268 266 ! Test 3: thickness of the last category is in-bounds ? 269 IF ( zh_i_ini(i_fill, i_hemis) .GT.hi_max(i_fill-1) ) THEN267 IF ( zh_i_ini(i_fill, i_hemis) > hi_max(i_fill-1) ) THEN 270 268 ztest_3 = 1 271 269 ELSE … … 317 315 DO ji = 1, jpi 318 316 a_i(ji,jj,jl) = zswitch(ji,jj) * za_i_ini (jl,zhemis(ji,jj)) ! concentration 319 ht_i(ji,jj,jl) = zswitch(ji,jj) * zh_i_ini(jl,zhemis(ji,jj)) ! ice thickness317 ht_i(ji,jj,jl) = zswitch(ji,jj) * zh_i_ini(jl,zhemis(ji,jj)) ! ice thickness 320 318 ht_s(ji,jj,jl) = ht_i(ji,jj,jl) * ( zht_s_ini( zhemis(ji,jj) ) / zht_i_ini( zhemis(ji,jj) ) ) ! snow depth 321 sm_i(ji,jj,jl) = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * s_i_min! salinity322 o_i(ji,jj,jl) = zswitch(ji,jj) * 1._wp + ( 1._wp - zswitch(ji,jj) ) ! age323 t_su(ji,jj,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rt t! surf temp319 sm_i(ji,jj,jl) = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) ! salinity 320 o_i(ji,jj,jl) = zswitch(ji,jj) * 1._wp ! age (1 day) 321 t_su(ji,jj,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rt0 ! surf temp 324 322 325 323 ! This case below should not be used if (ht_s/ht_i) is ok in namelist … … 329 327 ! recompute ht_i, ht_s avoiding out of bounds values 330 328 ht_i(ji,jj,jl) = MIN( hi_max(jl), ht_i(ji,jj,jl) + zdh ) 331 ht_s(ji,jj,jl) = MAX( 0._wp, ht_s(ji,jj,jl) - zdh * rhoic /rhosn )329 ht_s(ji,jj,jl) = MAX( 0._wp, ht_s(ji,jj,jl) - zdh * rhoic * r1_rhosn ) 332 330 333 331 ! ice volume, salt content, age content … … 336 334 smv_i(ji,jj,jl) = MIN( sm_i(ji,jj,jl) , sss_m(ji,jj) ) * v_i(ji,jj,jl) ! salt content 337 335 oa_i(ji,jj,jl) = o_i(ji,jj,jl) * a_i(ji,jj,jl) ! age content 338 END DO ! ji339 END DO ! jj340 END DO ! jl336 END DO 337 END DO 338 END DO 341 339 342 340 ! Snow temperature and heat content … … 345 343 DO jj = 1, jpj 346 344 DO ji = 1, jpi 347 t_s(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rt t345 t_s(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rt0 348 346 ! Snow energy of melting 349 e_s(ji,jj,jk,jl) = zswitch(ji,jj) * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 350 ! Change dimensions 351 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac 352 ! Multiply by volume, so that heat content in Joules 353 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * v_s(ji,jj,jl) / nlay_s 354 END DO ! ji 355 END DO ! jj 356 END DO ! jl 357 END DO ! jk 347 e_s(ji,jj,jk,jl) = zswitch(ji,jj) * rhosn * ( cpic * ( rt0 - t_s(ji,jj,jk,jl) ) + lfus ) 348 349 ! Mutliply by volume, and divide by number of layers to get heat content in J/m2 350 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * v_s(ji,jj,jl) * r1_nlay_s 351 END DO 352 END DO 353 END DO 354 END DO 358 355 359 356 ! Ice salinity, temperature and heat content … … 362 359 DO jj = 1, jpj 363 360 DO ji = 1, jpi 364 t_i(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rt t365 s_i(ji,jj,jk,jl) = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * s_i_min366 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rt t!Melting temperature in K361 t_i(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rt0 362 s_i(ji,jj,jk,jl) = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * rn_simin 363 ztmelts = - tmut * s_i(ji,jj,jk,jl) + rt0 !Melting temperature in K 367 364 368 365 ! heat content per unit volume 369 366 e_i(ji,jj,jk,jl) = zswitch(ji,jj) * rhoic * ( cpic * ( ztmelts - t_i(ji,jj,jk,jl) ) & 370 + lfus * ( 1._wp - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) & 371 - rcp * ( ztmelts - rtt ) ) 372 373 ! Correct dimensions to avoid big values 374 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac 375 376 ! Mutliply by ice volume, and divide by number of layers to get heat content in J 377 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / nlay_i 378 END DO ! ji 379 END DO ! jj 380 END DO ! jl 381 END DO ! jk 367 + lfus * ( 1._wp - (ztmelts-rt0) / MIN((t_i(ji,jj,jk,jl)-rt0),-epsi20) ) & 368 - rcp * ( ztmelts - rt0 ) ) 369 370 ! Mutliply by ice volume, and divide by number of layers to get heat content in J/m2 371 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * v_i(ji,jj,jl) * r1_nlay_i 372 END DO 373 END DO 374 END DO 375 END DO 382 376 383 377 tn_ice (:,:,:) = t_su (:,:,:) 384 378 385 379 ELSE 386 ! if ln_ limini=false380 ! if ln_iceini=false 387 381 a_i (:,:,:) = 0._wp 388 382 v_i (:,:,:) = 0._wp … … 400 394 DO jl = 1, jpl 401 395 DO jk = 1, nlay_i 402 t_i(:,:,jk,jl) = rt t * tms(:,:)396 t_i(:,:,jk,jl) = rt0 * tmask(:,:,1) 403 397 END DO 404 398 DO jk = 1, nlay_s 405 t_s(:,:,jk,jl) = rt t * tms(:,:)399 t_s(:,:,jk,jl) = rt0 * tmask(:,:,1) 406 400 END DO 407 401 END DO 408 402 409 ENDIF ! ln_ limini403 ENDIF ! ln_iceini 410 404 411 405 at_i (:,:) = 0.0_wp … … 481 475 !! 8.5 ! 07-11 (M. Vancoppenolle) rewritten initialization 482 476 !!----------------------------------------------------------------------------- 483 NAMELIST/namiceini/ ln_ limini, thres_sst, hts_ini_n, hts_ini_s, hti_ini_n,hti_ini_s, &484 & ati_ini_n, ati_ini_s, smi_ini_n, smi_ini_s, tmi_ini_n,tmi_ini_s477 NAMELIST/namiceini/ ln_iceini, rn_thres_sst, rn_hts_ini_n, rn_hts_ini_s, rn_hti_ini_n, rn_hti_ini_s, & 478 & rn_ati_ini_n, rn_ati_ini_s, rn_smi_ini_n, rn_smi_ini_s, rn_tmi_ini_n, rn_tmi_ini_s 485 479 INTEGER :: ios ! Local integer output status for namelist read 486 480 !!----------------------------------------------------------------------------- … … 502 496 WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' 503 497 WRITE(numout,*) '~~~~~~~~~~~~~~~' 504 WRITE(numout,*) ' initialization with ice (T) or not (F) ln_ limini = ', ln_limini505 WRITE(numout,*) ' threshold water temp. for initial sea-ice thres_sst = ',thres_sst506 WRITE(numout,*) ' initial snow thickness in the north hts_ini_n = ',hts_ini_n507 WRITE(numout,*) ' initial snow thickness in the south hts_ini_s = ',hts_ini_s508 WRITE(numout,*) ' initial ice thickness in the north hti_ini_n = ',hti_ini_n509 WRITE(numout,*) ' initial ice thickness in the south hti_ini_s = ',hti_ini_s510 WRITE(numout,*) ' initial ice concentr. in the north ati_ini_n = ',ati_ini_n511 WRITE(numout,*) ' initial ice concentr. in the north ati_ini_s = ',ati_ini_s512 WRITE(numout,*) ' initial ice salinity in the north smi_ini_n = ',smi_ini_n513 WRITE(numout,*) ' initial ice salinity in the south smi_ini_s = ',smi_ini_s514 WRITE(numout,*) ' initial ice/snw temp in the north tmi_ini_n = ',tmi_ini_n515 WRITE(numout,*) ' initial ice/snw temp in the south tmi_ini_s = ',tmi_ini_s498 WRITE(numout,*) ' initialization with ice (T) or not (F) ln_iceini = ', ln_iceini 499 WRITE(numout,*) ' threshold water temp. for initial sea-ice rn_thres_sst = ', rn_thres_sst 500 WRITE(numout,*) ' initial snow thickness in the north rn_hts_ini_n = ', rn_hts_ini_n 501 WRITE(numout,*) ' initial snow thickness in the south rn_hts_ini_s = ', rn_hts_ini_s 502 WRITE(numout,*) ' initial ice thickness in the north rn_hti_ini_n = ', rn_hti_ini_n 503 WRITE(numout,*) ' initial ice thickness in the south rn_hti_ini_s = ', rn_hti_ini_s 504 WRITE(numout,*) ' initial ice concentr. in the north rn_ati_ini_n = ', rn_ati_ini_n 505 WRITE(numout,*) ' initial ice concentr. in the north rn_ati_ini_s = ', rn_ati_ini_s 506 WRITE(numout,*) ' initial ice salinity in the north rn_smi_ini_n = ', rn_smi_ini_n 507 WRITE(numout,*) ' initial ice salinity in the south rn_smi_ini_s = ', rn_smi_ini_s 508 WRITE(numout,*) ' initial ice/snw temp in the north rn_tmi_ini_n = ', rn_tmi_ini_n 509 WRITE(numout,*) ' initial ice/snw temp in the south rn_tmi_ini_s = ', rn_tmi_ini_s 516 510 ENDIF 517 511
Note: See TracChangeset
for help on using the changeset viewer.