Changeset 5053
- Timestamp:
- 2015-02-03T18:11:02+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO
- Files:
-
- 1 deleted
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_2/ice_2.F90
r4306 r5053 51 51 REAL(wp), PUBLIC :: ahi0 !: sea-ice hor. eddy diffusivity coeff. (m2/s) 52 52 REAL(wp), PUBLIC :: alphaevp !: coefficient for the solution of EVP int. stresses 53 REAL(wp), PUBLIC :: hminrhg = 0.001_wp !: clem : ice volume (a*h in m) below which ice velocity is set to ocean velocity54 53 55 54 REAL(wp), PUBLIC :: usecc2 !: = 1.0 / ( ecc * ecc ) -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_2/limdyn_2.F90
r4624 r5053 228 228 & dm, nbiter, nbitdr, om, resl, cw, angvg, pstar, & 229 229 & c_rhg, etamn, creepl, ecc, ahi0, & 230 & nevp, telast, alphaevp , hminrhg230 & nevp, telast, alphaevp 231 231 !!------------------------------------------------------------------- 232 232 … … 262 262 WRITE(numout,*) ' timescale for elastic waves telast = ', telast 263 263 WRITE(numout,*) ' coefficient for the solution of int. stresses alphaevp = ', alphaevp 264 WRITE(numout,*) ' min ice thickness for rheology calculations hminrhg = ', hminrhg265 264 ENDIF 266 265 ! -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r5051 r5053 178 178 REAL(wp), PUBLIC :: ahi0 !: sea-ice hor. eddy diffusivity coeff. (m2/s) 179 179 REAL(wp), PUBLIC :: relast !: ratio => telast/rdt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 180 REAL(wp), PUBLIC :: hminrhg !: ice volume (a*h, in m) below which ice velocity is set to ocean velocity181 180 182 181 ! !!** ice-salinity namelist (namicesal) ** … … 300 299 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ftr_ice !: transmitted solar radiation under ice 301 300 302 ! lateral melting (mono-category)303 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dh_i_melt !: net melting (m)304 305 301 !!-------------------------------------------------------------------------- 306 302 !! * Ice global state variables … … 370 366 !!-------------------------------------------------------------------------- 371 367 ! !!: ** Namelist namicerun read in sbc_lim_init ** 368 !clem INTEGER , PUBLIC :: jpl !: number of ice categories 369 !clem INTEGER , PUBLIC :: nlay_i !: number of ice layers 370 !clem INTEGER , PUBLIC :: nlay_s !: number of snow layers 372 371 CHARACTER(len=32) , PUBLIC :: cn_icerst_in !: suffix of ice restart name (input) 373 372 CHARACTER(len=32) , PUBLIC :: cn_icerst_out !: suffix of ice restart name (output) … … 439 438 & wfx_res(jpi,jpj) , wfx_sni(jpi,jpj) , wfx_opw(jpi,jpj) , wfx_spr(jpi,jpj) , qlead (jpi,jpj) , & 440 439 & afx_tot(jpi,jpj) , afx_thd(jpi,jpj), afx_dyn(jpi,jpj) , & 441 & fhtur (jpi,jpj) , ftr_ice(jpi,jpj,jpl) , dh_i_melt(jpi,jpj,jpl) ,&440 & fhtur (jpi,jpj) , ftr_ice(jpi,jpj,jpl), & 442 441 & sfx_res(jpi,jpj) , sfx_bri(jpi,jpj) , sfx_dyn(jpi,jpj) , & 443 442 & sfx_bog(jpi,jpj) , sfx_bom(jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) , & -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r5047 r5053 31 31 USE timing ! Timing 32 32 USE limcons ! conservation tests 33 USE limvar 33 34 34 35 IMPLICIT NONE … … 75 76 CALL wrk_alloc( jpi, jpj, zu_io, zv_io ) 76 77 CALL wrk_alloc( jpj, zswitch, zmsk ) 78 79 CALL lim_var_agg(1) ! aggregate ice categories 77 80 78 81 IF( kt == nit000 ) CALL lim_dyn_init ! Initialization (first time-step only) … … 241 244 !!------------------------------------------------------------------- 242 245 INTEGER :: ios ! Local integer output status for namelist read 243 NAMELIST/namicedyn/ cw, pstar, & 244 & c_rhg, creepl, ecc, ahi0, & 245 & nevp, relast, hminrhg 246 NAMELIST/namicedyn/ cw, pstar, c_rhg, creepl, ecc, ahi0, nevp, relast 246 247 !!------------------------------------------------------------------- 247 248 … … 267 268 WRITE(numout,*) ' number of iterations for subcycling nevp = ', nevp 268 269 WRITE(numout,*) ' ratio of elastic timescale over ice time step relast = ', relast 269 WRITE(numout,*) ' min ice thickness for rheology calculations hminrhg = ', hminrhg270 270 ENDIF 271 271 ! -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90
r5051 r5053 375 375 CALL lim_var_glo2eqv 376 376 CALL lim_var_zapsmall 377 CALL lim_var_agg( 1 ) 377 378 378 379 -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90
r5051 r5053 13 13 !! 'key_lim3' : LIM3 sea-ice model 14 14 !!---------------------------------------------------------------------- 15 !! lim_itd_th : thermodynamics of ice thickness distribution16 15 !! lim_itd_th_rem : 17 16 !! lim_itd_th_reb : … … 26 25 USE ice ! LIM-3 variables 27 26 USE par_ice ! LIM-3 parameters 28 USE limthd_lac ! LIM-3 lateral accretion29 27 USE limvar ! LIM-3 variables 30 28 USE limcons ! LIM-3 conservation … … 34 32 USE wrk_nemo ! work arrays 35 33 USE lib_fortran ! to use key_nosignedzero 36 USE timing ! Timing 37 USE limcons ! conservation tests 34 USE limcons ! conservation tests 38 35 39 36 IMPLICIT NONE 40 37 PRIVATE 41 38 42 PUBLIC lim_itd_th ! called by ice_stp43 39 PUBLIC lim_itd_th_rem 44 40 PUBLIC lim_itd_th_reb … … 52 48 !!---------------------------------------------------------------------- 53 49 CONTAINS 54 55 SUBROUTINE lim_itd_th( kt )56 !!------------------------------------------------------------------57 !! *** ROUTINE lim_itd_th ***58 !!59 !! ** Purpose : computes the thermodynamics of ice thickness distribution60 !!61 !! ** Method :62 !!------------------------------------------------------------------63 INTEGER, INTENT(in) :: kt ! time step index64 !65 INTEGER :: ji, jj, jk, jl ! dummy loop index66 !67 REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b68 !!------------------------------------------------------------------69 IF( nn_timing == 1 ) CALL timing_start('limitd_th')70 71 ! conservation test72 IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limitd_th', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b)73 74 IF( kt == nit000 .AND. lwp ) THEN75 WRITE(numout,*)76 WRITE(numout,*) 'lim_itd_th : Thermodynamics of the ice thickness distribution'77 WRITE(numout,*) '~~~~~~~~~~~'78 ENDIF79 80 !------------------------------------------------------------------------------|81 ! 1) Transport of ice between thickness categories. |82 !------------------------------------------------------------------------------|83 ! Given thermodynamic growth rates, transport ice between84 ! thickness categories.85 IF( jpl > 1 ) CALL lim_itd_th_rem( 1, jpl, kt )86 !87 CALL lim_var_glo2eqv ! only for info88 CALL lim_var_agg(1)89 90 !------------------------------------------------------------------------------|91 ! 3) Add frazil ice growing in leads.92 !------------------------------------------------------------------------------|93 CALL lim_thd_lac94 CALL lim_var_glo2eqv ! only for info95 96 ! MV: Could put lateral melting here, would be better I think ???97 98 99 IF(ln_ctl) THEN ! Control print100 CALL prt_ctl_info(' ')101 CALL prt_ctl_info(' - Cell values : ')102 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ')103 CALL prt_ctl(tab2d_1=area , clinfo1=' lim_itd_th : cell area :')104 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_itd_th : at_i :')105 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_itd_th : vt_i :')106 CALL prt_ctl(tab2d_1=vt_s , clinfo1=' lim_itd_th : vt_s :')107 DO jl = 1, jpl108 CALL prt_ctl_info(' ')109 CALL prt_ctl_info(' - Category : ', ivar1=jl)110 CALL prt_ctl_info(' ~~~~~~~~~~')111 CALL prt_ctl(tab2d_1=a_i (:,:,jl) , clinfo1= ' lim_itd_th : a_i : ')112 CALL prt_ctl(tab2d_1=ht_i (:,:,jl) , clinfo1= ' lim_itd_th : ht_i : ')113 CALL prt_ctl(tab2d_1=ht_s (:,:,jl) , clinfo1= ' lim_itd_th : ht_s : ')114 CALL prt_ctl(tab2d_1=v_i (:,:,jl) , clinfo1= ' lim_itd_th : v_i : ')115 CALL prt_ctl(tab2d_1=v_s (:,:,jl) , clinfo1= ' lim_itd_th : v_s : ')116 CALL prt_ctl(tab2d_1=e_s (:,:,1,jl) , clinfo1= ' lim_itd_th : e_s : ')117 CALL prt_ctl(tab2d_1=t_su (:,:,jl) , clinfo1= ' lim_itd_th : t_su : ')118 CALL prt_ctl(tab2d_1=t_s (:,:,1,jl) , clinfo1= ' lim_itd_th : t_snow : ')119 CALL prt_ctl(tab2d_1=sm_i (:,:,jl) , clinfo1= ' lim_itd_th : sm_i : ')120 CALL prt_ctl(tab2d_1=smv_i (:,:,jl) , clinfo1= ' lim_itd_th : smv_i : ')121 DO jk = 1, nlay_i122 CALL prt_ctl_info(' ')123 CALL prt_ctl_info(' - Layer : ', ivar1=jk)124 CALL prt_ctl_info(' ~~~~~~~')125 CALL prt_ctl(tab2d_1=t_i(:,:,jk,jl) , clinfo1= ' lim_itd_th : t_i : ')126 CALL prt_ctl(tab2d_1=e_i(:,:,jk,jl) , clinfo1= ' lim_itd_th : e_i : ')127 END DO128 END DO129 ENDIF130 !131 ! conservation test132 IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limitd_th', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b)133 !134 IF( nn_timing == 1 ) CALL timing_stop('limitd_th')135 END SUBROUTINE lim_itd_th136 !137 50 138 51 SUBROUTINE lim_itd_th_rem( klbnd, kubnd, kt ) … … 156 69 REAL(wp) :: zx1, zwk1, zdh0, zetamin, zdamax ! local scalars 157 70 REAL(wp) :: zx2, zwk2, zda0, zetamax ! - - 158 REAL(wp) :: zx3 , zareamin ! - -71 REAL(wp) :: zx3 159 72 CHARACTER (len = 15) :: fieldid 160 73 … … 191 104 CALL wrk_alloc( jpi,jpj, zhb0,zhb1,vt_i_init,vt_i_final,vt_s_init,vt_s_final,et_i_init,et_i_final,et_s_init,et_s_final ) 192 105 193 zareamin = epsi10 !minimum area in thickness categories tolerated by the conceptors of the model194 195 106 !!---------------------------------------------------------------------------------------------- 196 107 !! 0) Conservation checkand changes in each ice category … … 242 153 DO jj = 1, jpj 243 154 DO ji = 1, jpi 244 IF ( at_i(ji,jj) .gt. zareamin) THEN155 IF ( at_i(ji,jj) > epsi10 ) THEN 245 156 nbrem = nbrem + 1 246 157 nind_i(nbrem) = ji … … 1014 925 !!---------------------------------------------------------------------- 1015 926 CONTAINS 1016 SUBROUTINE lim_itd_th ! Empty routines1017 END SUBROUTINE lim_itd_th1018 SUBROUTINE lim_itd_th_ini1019 END SUBROUTINE lim_itd_th_ini1020 927 SUBROUTINE lim_itd_th_rem 1021 928 END SUBROUTINE lim_itd_th_rem -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r5051 r5053 152 152 153 153 REAL(wp), PARAMETER :: zepsi = 1.0e-20_wp ! tolerance parameter 154 REAL(wp), PARAMETER :: zvmin = 1.0e-03_wp ! ice volume below which ice velocity equals ocean velocity 154 155 !!------------------------------------------------------------------- 155 156 … … 161 162 #if defined key_lim2 && ! defined key_lim2_vp 162 163 # if defined key_agrif 163 USE ice_2, vt_s => hsnm164 USE ice_2, vt_i => hicm164 USE ice_2, vt_s => hsnm 165 USE ice_2, vt_i => hicm 165 166 # else 166 vt_s => hsnm167 vt_i => hicm167 vt_s => hsnm 168 vt_i => hicm 168 169 # endif 169 at_i(:,:) = 1. - frld(:,:)170 at_i(:,:) = 1. - frld(:,:) 170 171 #endif 171 172 #if defined key_agrif && defined key_lim2 172 CALL agrif_rhg_lim2_load ! First interpolation of coarse values173 CALL agrif_rhg_lim2_load ! First interpolation of coarse values 173 174 #endif 174 175 ! … … 189 190 #endif 190 191 191 !CDIR NOVERRCHK192 192 DO jj = k_j1 , k_jpj ! Ice mass and temp variables 193 !CDIR NOVERRCHK194 193 DO ji = 1 , jpi 195 194 #if defined key_lim3 … … 206 205 ! Ice strength on grid cell corners (zpreshc) 207 206 ! needed for calculation of shear stress 208 !CDIR NOVERRCHK209 207 DO jj = k_j1+1, k_jpj-1 210 !CDIR NOVERRCHK211 208 DO ji = 2, jpim1 !RB caution no fs_ (ji+1,jj+1) 212 zstms = tms(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + & 213 & tms(ji,jj+1) * wght(ji+1,jj+1,1,2) + & 214 & tms(ji+1,jj) * wght(ji+1,jj+1,2,1) + & 215 & tms(ji,jj) * wght(ji+1,jj+1,1,1) 216 zpreshc(ji,jj) = ( zpresh(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + & 217 & zpresh(ji,jj+1) * wght(ji+1,jj+1,1,2) + & 218 & zpresh(ji+1,jj) * wght(ji+1,jj+1,2,1) + & 219 & zpresh(ji,jj) * wght(ji+1,jj+1,1,1) & 209 zstms = tms(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + tms(ji,jj+1) * wght(ji+1,jj+1,1,2) + & 210 & tms(ji+1,jj) * wght(ji+1,jj+1,2,1) + tms(ji,jj) * wght(ji+1,jj+1,1,1) 211 zpreshc(ji,jj) = ( zpresh(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + zpresh(ji,jj+1) * wght(ji+1,jj+1,1,2) + & 212 & zpresh(ji+1,jj) * wght(ji+1,jj+1,2,1) + zpresh(ji,jj) * wght(ji+1,jj+1,1,1) & 220 213 & ) / MAX( zstms, zepsi ) 221 214 END DO 222 215 END DO 223 224 216 CALL lbc_lnk( zpreshc(:,:), 'F', 1. ) 225 217 ! … … 242 234 243 235 IF( nn_ice_embd == 2 ) THEN !== embedded sea ice: compute representative ice top surface ==! 244 245 246 236 ! 237 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[n/nn_fsbc], n=0,nn_fsbc-1} 238 ! = (1/nn_fsbc)^2 * {SUM[n], n=0,nn_fsbc-1} 247 239 zintn = REAL( nn_fsbc - 1 ) / REAL( nn_fsbc ) * 0.5_wp 248 249 250 240 ! 241 ! average interpolation coeff as used in dynspg = (1/nn_fsbc) * {SUM[1-n/nn_fsbc], n=0,nn_fsbc-1} 242 ! = (1/nn_fsbc)^2 * (nn_fsbc^2 - {SUM[n], n=0,nn_fsbc-1}) 251 243 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 252 244 ! 253 245 zpice(:,:) = ssh_m(:,:) + ( zintn * snwice_mass(:,:) + zintb * snwice_mass_b(:,:) ) * r1_rau0 254 246 ! 255 247 ELSE !== non-embedded sea ice: use ocean surface for slope calculation ==! 256 248 zpice(:,:) = ssh_m(:,:) … … 363 355 ! 364 356 ! 365 divu_i(ji,jj) = ( e2u(ji,jj)*u_ice(ji,jj) & 366 & -e2u(ji-1,jj)*u_ice(ji-1,jj) & 367 & +e1v(ji,jj)*v_ice(ji,jj) & 368 & -e1v(ji,jj-1)*v_ice(ji,jj-1) & 369 & ) & 370 & / area(ji,jj) 371 372 zdt(ji,jj) = ( ( u_ice(ji,jj)/e2u(ji,jj) & 373 & -u_ice(ji-1,jj)/e2u(ji-1,jj) & 374 & )*e2t(ji,jj)*e2t(ji,jj) & 375 & -( v_ice(ji,jj)/e1v(ji,jj) & 376 & -v_ice(ji,jj-1)/e1v(ji,jj-1) & 377 & )*e1t(ji,jj)*e1t(ji,jj) & 378 & ) & 379 & / area(ji,jj) 357 divu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) & 358 & + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) & 359 & ) / area(ji,jj) 360 361 zdt(ji,jj) = ( ( u_ice(ji,jj) / e2u(ji,jj) - u_ice(ji-1,jj) / e2u(ji-1,jj) ) * e2t(ji,jj) * e2t(ji,jj) & 362 & - ( v_ice(ji,jj) / e1v(ji,jj) - v_ice(ji,jj-1) / e1v(ji,jj-1) ) * e1t(ji,jj) * e1t(ji,jj) & 363 & ) / area(ji,jj) 380 364 381 365 ! 382 zds(ji,jj) = ( ( u_ice(ji,jj+1)/e1u(ji,jj+1) & 383 & -u_ice(ji,jj)/e1u(ji,jj) & 384 & )*e1f(ji,jj)*e1f(ji,jj) & 385 & +( v_ice(ji+1,jj)/e2v(ji+1,jj) & 386 & -v_ice(ji,jj)/e2v(ji,jj) & 387 & )*e2f(ji,jj)*e2f(ji,jj) & 388 & ) & 389 & / ( e1f(ji,jj) * e2f(ji,jj) ) * ( 2.0 - tmf(ji,jj) ) & 390 & * tmi(ji,jj) * tmi(ji,jj+1) & 391 & * tmi(ji+1,jj) * tmi(ji+1,jj+1) 392 393 394 v_ice1(ji,jj) = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji+1,jj) & 395 & +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji,jj)) & 396 & /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj) 397 398 u_ice2(ji,jj) = 0.5*( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj+1) & 399 & +(u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj)) & 400 & /(e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj) 366 zds(ji,jj) = ( ( u_ice(ji,jj+1) / e1u(ji,jj+1) - u_ice(ji,jj) / e1u(ji,jj) ) * e1f(ji,jj) * e1f(ji,jj) & 367 & + ( v_ice(ji+1,jj) / e2v(ji+1,jj) - v_ice(ji,jj) / e2v(ji,jj) ) * e2f(ji,jj) * e2f(ji,jj) & 368 & ) / ( e1f(ji,jj) * e2f(ji,jj) ) * ( 2._wp - tmf(ji,jj) ) & 369 & * tmi(ji,jj) * tmi(ji,jj+1) * tmi(ji+1,jj) * tmi(ji+1,jj+1) 370 371 372 v_ice1(ji,jj) = 0.5_wp * ( ( v_ice(ji,jj) + v_ice(ji,jj-1) ) * e1t(ji+1,jj) & 373 & + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji,jj) ) & 374 & / ( e1t(ji+1,jj) + e1t(ji,jj) ) * tmu(ji,jj) 375 376 u_ice2(ji,jj) = 0.5_wp * ( ( u_ice(ji,jj) + u_ice(ji-1,jj) ) * e2t(ji,jj+1) & 377 & + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj) ) & 378 & / ( e2t(ji,jj+1) + e2t(ji,jj) ) * tmv(ji,jj) 401 379 402 380 END DO … … 404 382 CALL lbc_lnk( v_ice1, 'U', -1. ) ; CALL lbc_lnk( u_ice2, 'V', -1. ) ! lateral boundary cond. 405 383 406 !CDIR NOVERRCHK407 384 DO jj = k_j1+1, k_jpj-1 408 !CDIR NOVERRCHK409 385 DO ji = fs_2, fs_jpim1 410 386 411 387 !- Calculate Delta at centre of grid cells 412 zdst = ( e2u(ji , jj) * v_ice1(ji ,jj) & 413 & - e2u(ji-1, jj) * v_ice1(ji-1,jj) & 414 & + e1v(ji, jj ) * u_ice2(ji,jj ) & 415 & - e1v(ji, jj-1) * u_ice2(ji,jj-1) & 416 & ) & 417 & / area(ji,jj) 418 419 delta = SQRT( divu_i(ji,jj)*divu_i(ji,jj) + ( zdt(ji,jj)*zdt(ji,jj) + zdst*zdst ) * usecc2 ) 388 zdst = ( e2u(ji, jj) * v_ice1(ji,jj) - e2u(ji-1,jj ) * v_ice1(ji-1,jj ) & 389 & + e1v(ji, jj) * u_ice2(ji,jj) - e1v(ji ,jj-1) * u_ice2(ji ,jj-1) & 390 & ) / area(ji,jj) 391 392 delta = SQRT( divu_i(ji,jj) * divu_i(ji,jj) + ( zdt(ji,jj) * zdt(ji,jj) + zdst * zdst ) * usecc2 ) 420 393 delta_i(ji,jj) = delta + creepl 421 394 !-Calculate stress tensor components zs1 and zs2 … … 432 405 CALL lbc_lnk( zs2(:,:), 'T', 1. ) 433 406 434 !CDIR NOVERRCHK435 407 DO jj = k_j1+1, k_jpj-1 436 !CDIR NOVERRCHK437 408 DO ji = fs_2, fs_jpim1 438 409 !- Calculate Delta on corners … … 490 461 IF (MOD(jter,2).eq.0) THEN 491 462 492 !CDIR NOVERRCHK493 463 DO jj = k_j1+1, k_jpj-1 494 !CDIR NOVERRCHK495 464 DO ji = fs_2, fs_jpim1 496 465 zmask = (1.0-MAX(0._wp,SIGN(1._wp,-zmass1(ji,jj))))*tmu(ji,jj) … … 520 489 #endif 521 490 522 !CDIR NOVERRCHK523 491 DO jj = k_j1+1, k_jpj-1 524 !CDIR NOVERRCHK525 492 DO ji = fs_2, fs_jpim1 526 493 … … 551 518 552 519 ELSE 553 !CDIR NOVERRCHK554 520 DO jj = k_j1+1, k_jpj-1 555 !CDIR NOVERRCHK556 521 DO ji = fs_2, fs_jpim1 557 522 zmask = (1.0-MAX(0._wp,SIGN(1._wp,-zmass2(ji,jj))))*tmv(ji,jj) … … 581 546 #endif 582 547 583 !CDIR NOVERRCHK584 548 DO jj = k_j1+1, k_jpj-1 585 !CDIR NOVERRCHK586 549 DO ji = fs_2, fs_jpim1 587 550 zmask = (1.0-MAX(0._wp,SIGN(1._wp,-zmass1(ji,jj))))*tmu(ji,jj) … … 628 591 ! 4) Prevent ice velocities when the ice is thin 629 592 !------------------------------------------------------------------------------! 630 ! If the ice thickness is below hminrhg (5cm) then ice velocity should equal the 631 ! ocean velocity, 632 ! This prevents high velocity when ice is thin 633 !CDIR NOVERRCHK 593 ! If the ice volume is below zvmin then ice velocity should equal the 594 ! ocean velocity. This prevents high velocity when ice is thin 634 595 DO jj = k_j1+1, k_jpj-1 635 !CDIR NOVERRCHK636 596 DO ji = fs_2, fs_jpim1 637 IF ( vt_i(ji,jj) .LE. hminrhg) THEN597 IF ( vt_i(ji,jj) <= zvmin ) THEN 638 598 u_ice(ji,jj) = u_oce(ji,jj) 639 599 v_ice(ji,jj) = v_oce(ji,jj) … … 655 615 DO jj = k_j1+1, k_jpj-1 656 616 DO ji = fs_2, fs_jpim1 657 IF ( vt_i(ji,jj) .LE. hminrhg) THEN658 v_ice1(ji,jj) = 0.5 *( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji+1,jj)&659 & +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji,jj))&660 & /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj)661 662 u_ice2(ji,jj) = 0.5 *( (u_ice(ji,jj)+u_ice(ji-1,jj))*e2t(ji,jj+1)&663 & +(u_ice(ji,jj+1)+u_ice(ji-1,jj+1))*e2t(ji,jj))&664 & /(e2t(ji,jj+1)+e2t(ji,jj)) * tmv(ji,jj)617 IF ( vt_i(ji,jj) <= zvmin ) THEN 618 v_ice1(ji,jj) = 0.5_wp * ( ( v_ice(ji ,jj) + v_ice(ji, jj-1) ) * e1t(ji+1,jj) & 619 & + ( v_ice(ji+1,jj) + v_ice(ji+1,jj-1) ) * e1t(ji ,jj) ) & 620 & / ( e1t(ji+1,jj) + e1t(ji,jj) ) * tmu(ji,jj) 621 622 u_ice2(ji,jj) = 0.5_wp * ( ( u_ice(ji,jj ) + u_ice(ji-1,jj ) ) * e2t(ji,jj+1) & 623 & + ( u_ice(ji,jj+1) + u_ice(ji-1,jj+1) ) * e2t(ji,jj ) ) & 624 & / ( e2t(ji,jj+1) + e2t(ji,jj) ) * tmv(ji,jj) 665 625 ENDIF 666 626 END DO … … 671 631 672 632 ! Recompute delta, shear and div, inputs for mechanical redistribution 673 !CDIR NOVERRCHK674 633 DO jj = k_j1+1, k_jpj-1 675 !CDIR NOVERRCHK676 634 DO ji = fs_2, jpim1 !RB bug no vect opt due to tmi 677 635 !- divu_i(:,:), zdt(:,:): divergence and tension at centre 678 636 !- zds(:,:): shear on northeast corner of grid cells 679 IF ( vt_i(ji,jj) .LE. hminrhg) THEN637 IF ( vt_i(ji,jj) <= zvmin ) THEN 680 638 681 639 divu_i(ji,jj) = ( e2u(ji,jj)*u_ice(ji,jj) & … … 722 680 ! 5) Store stress tensor and its invariants 723 681 !------------------------------------------------------------------------------! 724 !725 682 ! * Invariants of the stress tensor are required for limitd_me 726 683 ! (accelerates convergence and improves stability) 727 684 DO jj = k_j1+1, k_jpj-1 728 685 DO ji = fs_2, fs_jpim1 729 ! begin TECLIM change730 686 zdst= ( e2u( ji , jj ) * v_ice1(ji,jj) & 731 687 & - e2u( ji-1, jj ) * v_ice1(ji-1,jj) & … … 733 689 & - e1v( ji , jj-1 ) * u_ice2(ji,jj-1) ) / area(ji,jj) 734 690 shear_i(ji,jj) = SQRT( zdt(ji,jj) * zdt(ji,jj) + zdst * zdst ) 735 ! end TECLIM change736 691 END DO 737 692 END DO -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90
r5051 r5053 27 27 USE wrk_nemo ! work arrays 28 28 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 29 USE limctl 29 30 30 31 IMPLICIT NONE … … 86 87 ENDIF 87 88 ! 89 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 1, ' - Beginning the time step - ' ) ! control print 88 90 END SUBROUTINE lim_rst_opn 89 91 -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r5051 r5053 43 43 USE iom 44 44 USE domvvl ! Variable volume 45 USE limctl 45 46 46 47 IMPLICIT NONE … … 225 226 ENDIF 226 227 228 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 3, ' - Final state lim_sbc - ' ) ! control print 227 229 228 230 IF(ln_ctl) THEN … … 270 272 ! 271 273 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) 272 !CDIR NOVERRCHK273 274 DO jj = 2, jpjm1 !* update the modulus of stress at ocean surface (T-point) 274 !CDIR NOVERRCHK275 275 DO ji = fs_2, fs_jpim1 276 276 ! ! 2*(U_ice-U_oce) at T-point -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r5051 r5053 34 34 USE limthd_sal ! LIM: thermodynamics, ice salinity 35 35 USE limthd_ent ! LIM: thermodynamics, ice enthalpy redistribution 36 USE limthd_lac ! LIM-3 lateral accretion 37 USE limitd_th ! remapping thickness distribution 36 38 USE limtab ! LIM: 1D <==> 2D transformation 37 39 USE limvar ! LIM: sea-ice variables … … 44 46 USE timing ! Timing 45 47 USE limcons ! conservation tests 48 USE limctl 46 49 47 50 IMPLICIT NONE … … 80 83 !! ** References : 81 84 !!--------------------------------------------------------------------- 82 INTEGER, INTENT(in) :: 85 INTEGER, INTENT(in) :: kt ! number of iteration 83 86 !! 84 87 INTEGER :: ji, jj, jk, jl ! dummy loop indices 85 88 INTEGER :: nbpb ! nb of icy pts for vertical thermo calculations 86 INTEGER :: nbplm ! nb of icy pts for lateral melting calculations (mono-cat)87 89 INTEGER :: ii, ij ! temporary dummy loop index 88 REAL(wp) :: zfric_umin = 0._wp ! lower bound for the friction velocity (cice value=5.e-04)89 REAL(wp) :: zch = 0.0057_wp ! heat transfer coefficient90 REAL(wp) :: zareamin91 90 REAL(wp) :: zfric_u, zqld, zqfr 92 !93 91 REAL(wp) :: zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b 92 REAL(wp), PARAMETER :: zfric_umin = 0._wp ! lower bound for the friction velocity (cice value=5.e-04) 93 REAL(wp), PARAMETER :: zch = 0.0057_wp ! heat transfer coefficient 94 94 ! 95 95 REAL(wp), POINTER, DIMENSION(:,:) :: zqsr, zqns … … 106 106 !------------------------------------------------------------------------! 107 107 ftr_ice(:,:,:) = 0._wp ! part of solar radiation transmitted through the ice 108 109 108 110 109 !-------------------- … … 162 161 ENDIF 163 162 164 !CDIR NOVERRCHK165 163 DO jj = 1, jpj 166 !CDIR NOVERRCHK167 164 DO ji = 1, jpi 168 rswitch 165 rswitch = tms(ji,jj) * ( 1._wp - MAX( 0._wp , SIGN( 1._wp , - at_i(ji,jj) + epsi10 ) ) ) ! 0 if no ice 169 166 ! 170 167 ! ! solar irradiance transmission at the mixed layer bottom and used in the lead heat budget … … 260 257 ENDIF 261 258 262 zareamin = epsi10263 259 nbpb = 0 264 260 DO jj = 1, jpj 265 261 DO ji = 1, jpi 266 IF ( a_i(ji,jj,jl) .gt. zareamin) THEN262 IF ( a_i(ji,jj,jl) > epsi10 ) THEN 267 263 nbpb = nbpb + 1 268 264 npb(nbpb) = (jj - 1) * jpi + ji … … 442 438 CALL tab_1d_2d( nbpb, hfx_res , npb, hfx_res_1d(1:nbpb) , jpi, jpj ) 443 439 CALL tab_1d_2d( nbpb, hfx_err_rem , npb, hfx_err_rem_1d(1:nbpb), jpi, jpj ) 444 445 !clem IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN446 !clem CALL tab_1d_2d( nbpb, dh_i_melt(:,:,jl) , npb, dh_i_melt_1d(1:nbpb) , jpi, jpj )447 !clem ENDIF448 440 ! 449 441 CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) … … 460 452 461 453 !------------------------ 462 ! 5.1)Ice heat content454 ! Ice heat content 463 455 !------------------------ 464 456 ! Enthalpies are global variables we have to readjust the units (heat content in Joules) … … 470 462 471 463 !------------------------ 472 ! 5.2)Snow heat content464 ! Snow heat content 473 465 !------------------------ 474 466 ! Enthalpies are global variables we have to readjust the units (heat content in Joules) … … 478 470 END DO 479 471 END DO 472 473 !------------------------ 474 ! Ice natural aging 475 !------------------------ 476 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * rdt_ice /rday 480 477 481 478 !---------------------------------- 482 ! 5.3)Change thickness to volume479 ! Change thickness to volume 483 480 !---------------------------------- 484 481 CALL lim_var_eqv2glo … … 487 484 ! 5.4) Diagnostic thermodynamic growth rates 488 485 !-------------------------------------------- 486 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 1, ' - ice thermodyn. - ' ) ! control print 487 489 488 IF(ln_ctl) THEN ! Control print 490 489 CALL prt_ctl_info(' ') … … 522 521 CALL wrk_dealloc( jpi, jpj, zqsr, zqns ) 523 522 523 !------------------------------------------------------------------------------| 524 ! 1) Transport of ice between thickness categories. | 525 !------------------------------------------------------------------------------| 526 ! Given thermodynamic growth rates, transport ice between 527 ! thickness categories. 528 IF( jpl > 1 ) CALL lim_itd_th_rem( 1, jpl, kt ) 529 ! 530 CALL lim_var_glo2eqv ! only for info 531 CALL lim_var_agg(1) 532 533 !------------------------------------------------------------------------------| 534 ! 3) Add frazil ice growing in leads. 535 !------------------------------------------------------------------------------| 536 CALL lim_thd_lac 537 CALL lim_var_glo2eqv ! only for info 538 539 IF(ln_ctl) THEN ! Control print 540 CALL prt_ctl_info(' ') 541 CALL prt_ctl_info(' - Cell values : ') 542 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 543 CALL prt_ctl(tab2d_1=area , clinfo1=' lim_itd_th : cell area :') 544 CALL prt_ctl(tab2d_1=at_i , clinfo1=' lim_itd_th : at_i :') 545 CALL prt_ctl(tab2d_1=vt_i , clinfo1=' lim_itd_th : vt_i :') 546 CALL prt_ctl(tab2d_1=vt_s , clinfo1=' lim_itd_th : vt_s :') 547 DO jl = 1, jpl 548 CALL prt_ctl_info(' ') 549 CALL prt_ctl_info(' - Category : ', ivar1=jl) 550 CALL prt_ctl_info(' ~~~~~~~~~~') 551 CALL prt_ctl(tab2d_1=a_i (:,:,jl) , clinfo1= ' lim_itd_th : a_i : ') 552 CALL prt_ctl(tab2d_1=ht_i (:,:,jl) , clinfo1= ' lim_itd_th : ht_i : ') 553 CALL prt_ctl(tab2d_1=ht_s (:,:,jl) , clinfo1= ' lim_itd_th : ht_s : ') 554 CALL prt_ctl(tab2d_1=v_i (:,:,jl) , clinfo1= ' lim_itd_th : v_i : ') 555 CALL prt_ctl(tab2d_1=v_s (:,:,jl) , clinfo1= ' lim_itd_th : v_s : ') 556 CALL prt_ctl(tab2d_1=e_s (:,:,1,jl) , clinfo1= ' lim_itd_th : e_s : ') 557 CALL prt_ctl(tab2d_1=t_su (:,:,jl) , clinfo1= ' lim_itd_th : t_su : ') 558 CALL prt_ctl(tab2d_1=t_s (:,:,1,jl) , clinfo1= ' lim_itd_th : t_snow : ') 559 CALL prt_ctl(tab2d_1=sm_i (:,:,jl) , clinfo1= ' lim_itd_th : sm_i : ') 560 CALL prt_ctl(tab2d_1=smv_i (:,:,jl) , clinfo1= ' lim_itd_th : smv_i : ') 561 DO jk = 1, nlay_i 562 CALL prt_ctl_info(' ') 563 CALL prt_ctl_info(' - Layer : ', ivar1=jk) 564 CALL prt_ctl_info(' ~~~~~~~') 565 CALL prt_ctl(tab2d_1=t_i(:,:,jk,jl) , clinfo1= ' lim_itd_th : t_i : ') 566 CALL prt_ctl(tab2d_1=e_i(:,:,jk,jl) , clinfo1= ' lim_itd_th : e_i : ') 567 END DO 568 END DO 569 ENDIF 524 570 ! 525 571 ! conservation test 526 572 IF( ln_limdiahsb ) CALL lim_cons_hsm(1, 'limthd', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 527 ! 573 528 574 IF( nn_timing == 1 ) CALL timing_stop('limthd') 529 575 … … 571 617 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop 572 618 INTEGER :: ji ! dummy loop indices 573 574 WRITE(numout,*) ' Lateral melting ON ' 619 REAL(wp) :: zhi_bef ! ice thickness before thermo 620 REAL(wp) :: zdh_mel ! net melting 621 575 622 DO ji = kideb, kiut 576 IF( ht_i_1d(ji) > epsi10 .AND. dh_i_melt_1d(ji) < 0._wp ) THEN 577 a_i_1d(ji) = MAX( 0._wp, a_i_1d(ji) + a_i_1d(ji) * dh_i_melt_1d(ji) / ( 2._wp * ht_i_1d(ji) ) ) 578 END IF 623 zhi_bef = ht_i_1d(ji) - ( dh_i_surf(ji) + dh_i_bott(ji) + dh_snowice(ji) ) 624 zdh_mel = MIN( 0._wp, dh_i_surf(ji) + dh_i_bott(ji) + dh_snowice(ji) ) 625 IF( zdh_mel < 0._wp ) & 626 & a_i_1d(ji) = MAX( 0._wp, a_i_1d(ji) + a_i_1d(ji) * zdh_mel / ( 2._wp * MAX( zhi_bef, epsi10 ) ) ) 579 627 END DO 580 628 at_i_1d(:) = a_i_1d(:) -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r5051 r5053 689 689 END DO 690 690 691 !692 !-------------------------------------------------------------693 ! Net melting (input for thin ice melting, mono-category case)694 !-------------------------------------------------------------695 !696 IF ( ( ( nn_monocat == 1 ) .OR. ( nn_monocat == 4 ) ) .AND. ( jpl == 1 ) ) THEN697 DO ji = kideb, kiut698 dh_i_melt_1d(ji) = MIN( dh_i_surf(ji) + dh_i_bott(ji) + dh_snowice(ji), 0._wp )699 END DO700 ENDIF701 702 691 CALL wrk_dealloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 703 692 CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90
r5051 r5053 22 22 USE limadv ! ice advection 23 23 USE limhdf ! ice horizontal diffusion 24 USE limvar ! clem for ice thickness correction24 USE limvar ! 25 25 ! 26 26 USE in_out_manager ! I/O manager … … 32 32 USE timing ! Timing 33 33 USE limcons ! conservation tests 34 USE limctl ! control prints 34 35 35 36 IMPLICIT NONE … … 455 456 ENDIF 456 457 458 CALL lim_var_glo2eqv ! equivalent variables, requested for rafting 459 460 ! ------------------------------------------------- 461 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx,-1, ' - ice dyn & trp - ' ) ! control print 462 ! ------------------------------------------------- 457 463 IF(ln_ctl) THEN ! Control print 458 464 CALL prt_ctl_info(' ') -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90
r5051 r5053 59 59 CONTAINS 60 60 61 SUBROUTINE lim_update1 61 SUBROUTINE lim_update1( kt ) 62 62 !!------------------------------------------------------------------- 63 63 !! *** ROUTINE lim_update1 *** … … 67 67 !! 68 68 !!--------------------------------------------------------------------- 69 INTEGER, INTENT(in) :: kt ! number of iteration 69 70 INTEGER :: ji, jj, jk, jl ! dummy loop indices 70 71 INTEGER :: i_ice_switch … … 76 77 77 78 IF( ln_limdyn ) THEN 79 80 IF( kt == nit000 .AND. lwp ) THEN 81 WRITE(numout,*) ' lim_update1 ' 82 WRITE(numout,*) ' ~~~~~~~~~~~ ' 83 ENDIF 78 84 79 85 ! conservation test -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90
r5051 r5053 41 41 USE timing ! Timing 42 42 USE limcons ! conservation tests 43 USE limctl 43 44 44 45 IMPLICIT NONE … … 56 57 CONTAINS 57 58 58 SUBROUTINE lim_update2 59 SUBROUTINE lim_update2( kt ) 59 60 !!------------------------------------------------------------------- 60 61 !! *** ROUTINE lim_update2 *** … … 64 65 !! 65 66 !!--------------------------------------------------------------------- 67 INTEGER, INTENT(in) :: kt ! number of iteration 66 68 INTEGER :: ji, jj, jk, jl ! dummy loop indices 67 69 INTEGER :: i_ice_switch … … 71 73 !!------------------------------------------------------------------- 72 74 IF( nn_timing == 1 ) CALL timing_start('limupdate2') 75 76 IF( kt == nit000 .AND. lwp ) THEN 77 WRITE(numout,*) ' lim_update2 ' 78 WRITE(numout,*) ' ~~~~~~~~~~~ ' 79 ENDIF 73 80 74 81 ! conservation test … … 208 215 ! conservation test 209 216 IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limupdate2', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 217 218 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 2, ' - Final state - ' ) ! control print 210 219 211 220 IF(ln_ctl) THEN ! Control print -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r5051 r5053 30 30 !!====================================================================== 31 31 !! History : - ! 2006-01 (M. Vancoppenolle) Original code 32 !! 4.0! 2011-02 (G. Madec) dynamical allocation32 !! 3.4 ! 2011-02 (G. Madec) dynamical allocation 33 33 !!---------------------------------------------------------------------- 34 34 #if defined key_lim3 35 35 !!---------------------------------------------------------------------- 36 36 !! 'key_lim3' LIM3 sea-ice model 37 !!----------------------------------------------------------------------38 !! lim_var_agg :39 !! lim_var_glo2eqv :40 !! lim_var_eqv2glo :41 !! lim_var_salprof :42 !! lim_var_salprof1d :43 !! lim_var_bv :44 37 !!---------------------------------------------------------------------- 45 38 USE par_oce ! ocean parameters … … 58 51 PRIVATE 59 52 60 PUBLIC lim_var_agg !61 PUBLIC lim_var_glo2eqv !62 PUBLIC lim_var_eqv2glo !63 PUBLIC lim_var_salprof !64 PUBLIC lim_var_icetm !65 PUBLIC lim_var_bv !66 PUBLIC lim_var_salprof1d !53 PUBLIC lim_var_agg 54 PUBLIC lim_var_glo2eqv 55 PUBLIC lim_var_eqv2glo 56 PUBLIC lim_var_salprof 57 PUBLIC lim_var_icetm 58 PUBLIC lim_var_bv 59 PUBLIC lim_var_salprof1d 67 60 PUBLIC lim_var_zapsmall 61 PUBLIC lim_var_itd 68 62 69 63 !!---------------------------------------------------------------------- 70 !! NEMO/LIM3 4.0, UCL - NEMO Consortium (2011)64 !! NEMO/LIM3 3.5 , UCL - NEMO Consortium (2011) 71 65 !! $Id$ 72 66 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 130 124 DO jj = 1, jpj 131 125 DO ji = 1, jpi 132 et_s(ji,jj) = et_s(ji,jj) + e_s(ji,jj,1,jl) ! snow heat content126 et_s(ji,jj) = et_s(ji,jj) + e_s(ji,jj,1,jl) ! snow heat content 133 127 rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) ) 134 128 smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi10 ) * rswitch ! ice salinity … … 192 186 ! Ice temperatures 193 187 !------------------- 194 !CDIR NOVERRCHK 195 DO jl = 1, jpl 196 !CDIR NOVERRCHK 188 DO jl = 1, jpl 197 189 DO jk = 1, nlay_i 198 !CDIR NOVERRCHK 199 DO jj = 1, jpj 200 !CDIR NOVERRCHK 190 DO jj = 1, jpj 201 191 DO ji = 1, jpi 202 192 ! ! Energy of melting q(S,T) [J.m-3] 203 193 rswitch = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 ) ) ! rswitch = 0 if no ice and 1 if yes 204 194 zq_i = rswitch * e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , epsi10 ) * REAL(nlay_i,wp) 205 zq_i = zq_i * unit_fac ! convert units206 ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt 195 zq_i = zq_i * unit_fac ! convert units 196 ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt ! Ice layer melt temperature 207 197 ! 208 198 zaaa = cpic ! Conversion q(S,T) -> T (second order equation) … … 289 279 !! alpha-weighted linear combination of s_inf and s_zero 290 280 !! 291 !! ** References : Vancoppenolle et al., 2007 (in preparation)281 !! ** References : Vancoppenolle et al., 2007 292 282 !!------------------------------------------------------------------ 293 283 INTEGER :: ji, jj, jk, jl ! dummy loop index … … 368 358 ! 369 359 DO jl = 1, jpl 370 !CDIR NOVERRCHK371 360 DO jk = 1, nlay_i 372 361 zargtemp = ( REAL(jk,wp) - 0.5_wp ) / REAL(nlay_i,wp) … … 451 440 ! 452 441 INTEGER :: ji, jk ! dummy loop indices 453 INTEGER :: ii, ij ! local integers442 INTEGER :: ii, ij ! local integers 454 443 REAL(wp) :: dummy_fac0, dummy_fac1, dummy_fac2, zargtemp, zsal ! local scalars 455 444 REAL(wp) :: zalpha, zswi0, zswi01, zswibal, zs_zero ! - - … … 483 472 dummy_fac2 = 1._wp / REAL(nlay_i,wp) 484 473 485 !CDIR NOVERRCHK486 474 DO jk = 1, nlay_i 487 !CDIR NOVERRCHK488 475 DO ji = kideb, kiut 489 476 ii = MOD( npb(ji) - 1 , jpi ) + 1 … … 502 489 ! weighting the profile 503 490 s_i_1d(ji,jk) = zalpha * zs_zero + ( 1._wp - zalpha ) * sm_i_1d(ji) 504 END DO ! ji505 END DO ! jk506 507 ENDIF ! num_sal491 END DO 492 END DO 493 494 ENDIF 508 495 509 496 !------------------------------------------------------- … … 515 502 sm_i_1d(:) = 2.30_wp 516 503 ! 517 !CDIR NOVERRCHK518 504 DO jk = 1, nlay_i 519 505 zargtemp = ( REAL(jk,wp) - 0.5_wp ) / REAL(nlay_i,wp) … … 603 589 ! 604 590 END SUBROUTINE lim_var_zapsmall 591 592 SUBROUTINE lim_var_itd( zhti, zhts, zai, zht_i, zht_s, za_i ) 593 !!------------------------------------------------------------------ 594 !! *** ROUTINE lim_var_itd *** 595 !! 596 !! ** Purpose : converting 1-cat ice to multiple ice categories 597 !! 598 !! ice thickness distribution follows a gaussian law 599 !! around the concentration of the most likely ice thickness 600 !! (similar as limistate.F90) 601 !! 602 !! ** Method: Iterative procedure 603 !! 604 !! 1) Try to fill the jpl ice categories (bounds hi_max(0:jpl)) with a gaussian 605 !! 606 !! 2) Check whether the distribution conserves area and volume, positivity and 607 !! category boundaries 608 !! 609 !! 3) If not (input ice is too thin), the last category is empty and 610 !! the number of categories is reduced (jpl-1) 611 !! 612 !! 4) Iterate until ok (SUM(itest(:) = 4) 613 !! 614 !! ** Arguments : zhti: 1-cat ice thickness 615 !! zhts: 1-cat snow depth 616 !! zai : 1-cat ice concentration 617 !! 618 !! ** Output : jpl-cat 619 !! 620 !! (Example of application: BDY forcings when input are cell averaged) 621 !! 622 !!------------------------------------------------------------------- 623 !! History : LIM3.5 - 2012 (M. Vancoppenolle) Original code 624 !! 2014 (C. Rousset) Rewriting 625 !!------------------------------------------------------------------- 626 !! Local variables 627 INTEGER :: ji, jk, jl ! dummy loop indices 628 INTEGER :: ijpij, i_fill, jl0 629 REAL(wp) :: zarg, zV, zconv, zdh 630 REAL(wp), DIMENSION(:), INTENT(in) :: zhti, zhts, zai ! input ice/snow variables 631 REAL(wp), DIMENSION(:,:), INTENT(inout) :: zht_i, zht_s, za_i ! output ice/snow variables 632 INTEGER , POINTER, DIMENSION(:) :: itest 633 634 CALL wrk_alloc( 4, itest ) 635 !-------------------------------------------------------------------- 636 ! initialisation of variables 637 !-------------------------------------------------------------------- 638 ijpij = SIZE(zhti,1) 639 zht_i(1:ijpij,1:jpl) = 0._wp 640 zht_s(1:ijpij,1:jpl) = 0._wp 641 za_i (1:ijpij,1:jpl) = 0._wp 642 643 ! ---------------------------------------- 644 ! distribution over the jpl ice categories 645 ! ---------------------------------------- 646 DO ji = 1, ijpij 647 648 IF( zhti(ji) > 0._wp ) THEN 649 650 ! initialisation of tests 651 itest(:) = 0 652 653 i_fill = jpl + 1 !==================================== 654 DO WHILE ( ( SUM( itest(:) ) /= 4 ) .AND. ( i_fill >= 2 ) ) ! iterative loop on i_fill categories 655 ! iteration !==================================== 656 i_fill = i_fill - 1 657 658 ! initialisation of ice variables for each try 659 zht_i(ji,1:jpl) = 0._wp 660 za_i (ji,1:jpl) = 0._wp 661 662 ! *** case very thin ice: fill only category 1 663 IF ( i_fill == 1 ) THEN 664 zht_i(ji,1) = zhti(ji) 665 za_i (ji,1) = zai (ji) 666 667 ! *** case ice is thicker: fill categories >1 668 ELSE 669 670 ! Fill ice thicknesses except the last one (i_fill) by hmean 671 DO jl = 1, i_fill - 1 672 zht_i(ji,jl) = hi_mean(jl) 673 END DO 674 675 ! find which category (jl0) the input ice thickness falls into 676 jl0 = i_fill 677 DO jl = 1, i_fill 678 IF ( ( zhti(ji) >= hi_max(jl-1) ) .AND. ( zhti(ji) < hi_max(jl) ) ) THEN 679 jl0 = jl 680 CYCLE 681 ENDIF 682 END DO 683 684 ! Concentrations in the (i_fill-1) categories 685 za_i(ji,jl0) = zai(ji) / SQRT(REAL(jpl)) 686 DO jl = 1, i_fill - 1 687 IF ( jl == jl0 ) CYCLE 688 zarg = ( zht_i(ji,jl) - zhti(ji) ) / ( zhti(ji) * 0.5_wp ) 689 za_i(ji,jl) = za_i (ji,jl0) * EXP(-zarg**2) 690 END DO 691 692 ! Concentration in the last (i_fill) category 693 za_i(ji,i_fill) = zai(ji) - SUM( za_i(ji,1:i_fill-1) ) 694 695 ! Ice thickness in the last (i_fill) category 696 zV = SUM( za_i(ji,1:i_fill-1) * zht_i(ji,1:i_fill-1) ) 697 zht_i(ji,i_fill) = ( zhti(ji) * zai(ji) - zV ) / za_i(ji,i_fill) 698 699 ENDIF ! case ice is thick or thin 700 701 !--------------------- 702 ! Compatibility tests 703 !--------------------- 704 ! Test 1: area conservation 705 zconv = ABS( zai(ji) - SUM( za_i(ji,1:jpl) ) ) 706 IF ( zconv < epsi06 ) itest(1) = 1 707 708 ! Test 2: volume conservation 709 zconv = ABS( zhti(ji)*zai(ji) - SUM( za_i(ji,1:jpl)*zht_i(ji,1:jpl) ) ) 710 IF ( zconv < epsi06 ) itest(2) = 1 711 712 ! Test 3: thickness of the last category is in-bounds ? 713 IF ( zht_i(ji,i_fill) >= hi_max(i_fill-1) ) itest(3) = 1 714 715 ! Test 4: positivity of ice concentrations 716 itest(4) = 1 717 DO jl = 1, i_fill 718 IF ( za_i(ji,jl) < 0._wp ) itest(4) = 0 719 END DO 720 !============================ 721 END DO ! end iteration on categories 722 !============================ 723 ENDIF ! if zhti > 0 724 END DO ! i loop 725 726 ! ------------------------------------------------ 727 ! Adding Snow in each category where za_i is not 0 728 ! ------------------------------------------------ 729 DO jl = 1, jpl 730 DO ji = 1, ijpij 731 IF( za_i(ji,jl) > 0._wp ) THEN 732 zht_s(ji,jl) = zht_i(ji,jl) * ( zhts(ji) / zhti(ji) ) 733 ! In case snow load is in excess that would lead to transformation from snow to ice 734 ! Then, transfer the snow excess into the ice (different from limthd_dh) 735 zdh = MAX( 0._wp, ( rhosn * zht_s(ji,jl) + ( rhoic - rau0 ) * zht_i(ji,jl) ) * r1_rau0 ) 736 ! recompute ht_i, ht_s avoiding out of bounds values 737 zht_i(ji,jl) = MIN( hi_max(jl), zht_i(ji,jl) + zdh ) 738 zht_s(ji,jl) = MAX( 0._wp, zht_s(ji,jl) - zdh * rhoic / rhosn ) 739 ENDIF 740 ENDDO 741 ENDDO 742 743 CALL wrk_dealloc( 4, itest ) 744 ! 745 END SUBROUTINE lim_var_itd 746 605 747 606 748 #else … … 623 765 SUBROUTINE lim_var_zapsmall 624 766 END SUBROUTINE lim_var_zapsmall 767 SUBROUTINE lim_var_itd 768 END SUBROUTINE lim_var_itd 625 769 #endif 626 770 -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r5048 r5053 110 110 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_bott !: Ice bottom accretion/ablation [m] 111 111 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_snowice !: Snow ice formation [m of ice] 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: dh_i_melt_1d !: Net melting [m], for mono-cat lateral melting113 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: sm_i_1d !: Ice bulk salinity [ppt] 114 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: s_i_new !: Salinity of new ice at the bottom … … 167 166 & ht_s_1d (jpij) , fc_su (jpij) , fc_bo_i (jpij) , & 168 167 & dh_s_tot (jpij) , dh_i_surf(jpij) , dh_i_bott(jpij) , & 169 & dh_snowice(jpij) , dh_i_melt_1d(jpij) ,&168 & dh_snowice(jpij) , & 170 169 & sm_i_1d (jpij) , s_i_new (jpij) , & 171 170 & t_s_1d(jpij,nlay_s), & -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r4689 r5053 35 35 USE par_ice 36 36 USE ice 37 USE lim cat_1D! redistribute ice input into categories37 USE limvar ! redistribute ice input into categories 38 38 #endif 39 39 USE sbcapr … … 380 380 #if defined key_lim3 381 381 IF( .NOT. ll_bdylim3 .AND. cn_ice_lim(ib_bdy) /= 'none' .AND. nn_ice_lim_dta(ib_bdy) == 1 ) THEN ! bdy ice input (case input is lim2 type) 382 CALL lim_ cat_1D( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), &382 CALL lim_var_itd ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 383 383 & dta_bdy(ib_bdy)%ht_i, dta_bdy(ib_bdy)%ht_s, dta_bdy(ib_bdy)%a_i ) 384 384 ENDIF -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90
r4990 r5053 60 60 !!---------------------------------------------------------------------- 61 61 INTEGER, INTENT( in ) :: kt ! Main time step counter 62 !!63 62 INTEGER :: ib_bdy ! Loop index 63 64 64 DO ib_bdy=1, nb_bdy 65 65 … … 72 72 CALL ctl_stop( 'bdy_ice_lim : unrecognised option for open boundaries for ice fields' ) 73 73 END SELECT 74 ENDDO 74 75 END DO 75 76 76 77 END SUBROUTINE bdy_ice_lim … … 247 248 END DO 248 249 249 250 END DO !jb 250 END DO 251 251 252 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) ! lateral boundary conditions252 CALL lbc_bdy_lnk( a_i(:,:,jl), 'T', 1., ib_bdy ) 253 253 CALL lbc_bdy_lnk( ht_i(:,:,jl), 'T', 1., ib_bdy ) 254 254 CALL lbc_bdy_lnk( ht_s(:,:,jl), 'T', 1., ib_bdy ) -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r5051 r5053 39 39 USE limtrp ! Ice transport 40 40 USE limthd ! Ice thermodynamics 41 USE limitd_th ! Thermodynamics on ice thickness distribution42 41 USE limitd_me ! Mechanics on ice thickness distribution 43 42 USE limsbc ! sea surface boundary condition … … 109 108 INTEGER, INTENT(in) :: kblk ! type of bulk (=3 CLIO, =4 CORE, =5 COUPLED) 110 109 !! 111 INTEGER :: jl ! dummy loop index 112 REAL(wp) :: zcoef ! local scalar 110 INTEGER :: jl ! dummy loop index 113 111 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_os, zalb_cs ! ice albedo under overcast/clear sky 114 112 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_ice ! mean ice albedo (for coupled) … … 117 115 IF( nn_timing == 1 ) CALL timing_start('sbc_ice_lim') 118 116 119 ! !----------------------! 120 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! Ice time-step only ! 121 ! !----------------------! 122 ! ! Bulk Formulae ! 123 ! !----------------! 124 ! 117 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! Ice time-step only 118 !-----------------------! 119 ! --- Bulk Formulae --- ! 120 !-----------------------! 125 121 u_oce(:,:) = ssu_m(:,:) * umask(:,:,1) ! mean surface ocean current at ice velocity point 126 122 v_oce(:,:) = ssv_m(:,:) * vmask(:,:,1) ! (C-grid dynamics : U- & V-points as the ocean) … … 133 129 CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos 134 130 131 ! CORE and COUPLED bulk formulations 135 132 SELECT CASE( kblk ) 136 CASE( jp_core , jp_cpl ) ! CORE and COUPLED bulk formulations133 CASE( jp_core , jp_cpl ) 137 134 138 135 ! albedo depends on cloud fraction because of non-linear spectral effects … … 183 180 END SELECT 184 181 185 ! !----------------------! 186 ! ! LIM-3 time-stepping ! 187 ! !----------------------! 188 ! 182 !------------------------------! 183 ! --- LIM-3 main time-step --- ! 184 !------------------------------! 189 185 numit = numit + nn_fsbc ! Ice model time step 190 186 ! … … 200 196 v_ice_b(:,:) = v_ice(:,:) 201 197 202 CALL sbc_lim_ flx0! set diag of mass, heat and salt fluxes to 0198 CALL sbc_lim_diag0 ! set diag of mass, heat and salt fluxes to 0 203 199 204 200 CALL lim_rst_opn( kt ) ! Open Ice restart file 205 201 ! 206 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 1, ' - Beginning the time step - ' ) ! control print207 202 ! ---------------------------------------------- 208 203 ! ice dynamics and transport (except in 1D case) … … 211 206 212 207 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 208 213 209 CALL lim_trp( kt ) ! Ice transport ( Advection/diffusion ) 214 CALL lim_var_glo2eqv ! equivalent variables, requested for rafting 215 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx,-1, ' - ice dyn & trp - ' ) ! control print 210 216 211 IF( nn_monocat /= 2 ) & 217 212 & CALL lim_itd_me ! Mechanical redistribution ! (ridging/rafting) 218 CALL lim_var_agg( 1 ) 213 219 214 #if defined key_bdy 220 215 ! bdy ice thermo … … 225 220 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 1, ' - ice thermo bdy - ' ) ! control print 226 221 #endif 227 CALL lim_update1 222 223 CALL lim_update1( kt ) 224 228 225 ENDIF 229 ! !- Change old values for new values 230 u_ice_b(:,:) = u_ice(:,:) 231 v_ice_b(:,:) = v_ice(:,:) 232 a_i_b (:,:,:) = a_i (:,:,:) 233 v_s_b (:,:,:) = v_s (:,:,:) 234 v_i_b (:,:,:) = v_i (:,:,:) 235 e_s_b (:,:,:,:) = e_s (:,:,:,:) 236 e_i_b (:,:,:,:) = e_i (:,:,:,:) 237 oa_i_b (:,:,:) = oa_i (:,:,:) 238 smv_i_b(:,:,:) = smv_i(:,:,:) 226 227 !- Change old values for new values 228 u_ice_b(:,:) = u_ice(:,:) 229 v_ice_b(:,:) = v_ice(:,:) 230 a_i_b (:,:,:) = a_i (:,:,:) 231 v_s_b (:,:,:) = v_s (:,:,:) 232 v_i_b (:,:,:) = v_i (:,:,:) 233 e_s_b (:,:,:,:) = e_s (:,:,:,:) 234 e_i_b (:,:,:,:) = e_i (:,:,:,:) 235 oa_i_b (:,:,:) = oa_i (:,:,:) 236 smv_i_b(:,:,:) = smv_i(:,:,:) 239 237 240 238 ! ---------------------------------------------- … … 253 251 IF( nn_limflx == 2 ) CALL ice_lim_flx( t_su, zalb_ice, qns_ice, qsr_ice , & 254 252 & dqns_ice, qla_ice, dqla_ice, nn_limflx ) 255 ! Latent heat flux is forced to 0 in coupled : 256 ! it is included in qns (non-solar heat flux) 253 ! Latent heat flux is forced to 0 in coupled: it is included in qns (non-solar heat flux) 257 254 qla_ice (:,:,:) = 0._wp 258 255 dqla_ice (:,:,:) = 0._wp 259 256 END SELECT 260 257 ! 261 CALL lim_var_bv ! bulk brine volume (diag)262 258 CALL lim_thd( kt ) ! Ice thermodynamics 263 zcoef = rdt_ice /rday ! Ice natural aging 264 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * zcoef 265 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 1, ' - ice thermodyn. - ' ) ! control print 266 CALL lim_itd_th( kt ) ! Remap ice categories, lateral accretion 267 CALL lim_update2 ! Global variables update 268 269 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 2, ' - Final state - ' ) ! control print 270 ! 271 CALL lim_sbc_flx( kt ) ! Update surface ocean mass, heat and salt fluxes 272 ! 273 IF( ln_nicep ) CALL lim_prt( kt, jiindx, jjindx, 3, ' - Final state lim_sbc - ' ) ! control print 259 260 CALL lim_update2( kt ) ! Global variables update 261 ! 262 CALL lim_sbc_flx( kt ) ! Update surface ocean mass, heat and salt fluxes 274 263 ! 275 264 IF(ln_limdiaout) CALL lim_diahsb ! Diagnostics and outputs 276 265 277 CALL lim_wri( 1 )! Ice outputs266 CALL lim_wri( 1 ) ! Ice outputs 278 267 279 268 IF( kt == nit000 .AND. ln_rstart ) & 280 & CALL iom_close( numrir ) ! cl em: close input ice restart file269 & CALL iom_close( numrir ) ! close input ice restart file 281 270 ! 282 271 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Ice restart file … … 315 304 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ via Louvain la Neuve Ice Model (LIM-3) time stepping' 316 305 ! 317 !318 306 ! ! Allocate the ice arrays 319 307 ierr = ice_alloc () ! ice variables … … 343 331 CALL lim_thd_sal_init ! set ice salinity parameters 344 332 ! 345 rdt_ice = nn_fsbc * rdttra(1) ! sea-ice timestep346 r1_rdtice = 1._wp / rdt_ice ! sea-ice timestep inverse347 !348 333 CALL lim_msh ! ice mesh initialization 349 334 ! 350 CALL lim_itd_init 335 CALL lim_itd_init ! ice thickness distribution initialization 351 336 ! 352 337 CALL lim_itd_me_init ! ice thickness distribution initialization … … 356 341 numit = nit000 - 1 357 342 CALL lim_istate 358 CALL lim_var_agg(1)359 CALL lim_var_glo2eqv360 343 ELSE ! start from a restart file 361 344 CALL lim_rst_read 362 345 numit = nit000 - 1 363 CALL lim_var_agg(1)364 CALL lim_var_glo2eqv365 346 ENDIF 347 CALL lim_var_agg(1) 348 CALL lim_var_glo2eqv 366 349 ! 367 350 CALL lim_sbc_init ! ice surface boundary condition … … 390 373 !! ** input : Namelist namicerun 391 374 !!------------------------------------------------------------------- 392 NAMELIST/namicerun/ cn_icerst_in, cn_icerst_out, ln_limdyn, amax, ln_nicep, ln_limdiahsb, ln_limdiaout 375 !clem NAMELIST/namicerun/ jpl, nlay_i, nlay_s, cn_icerst_in, cn_icerst_out, & 376 !clem & ln_limdyn, amax, ln_nicep, ln_limdiahsb, ln_limdiaout 377 NAMELIST/namicerun/ cn_icerst_in, cn_icerst_out, & 378 & ln_limdyn, amax, ln_nicep, ln_limdiahsb, ln_limdiaout 393 379 INTEGER :: ios ! Local integer output status for namelist read 394 380 !!------------------------------------------------------------------- … … 408 394 WRITE(numout,*) 'ice_run : ice share parameters for dynamics/advection/thermo of sea-ice' 409 395 WRITE(numout,*) ' ~~~~~~' 396 !clem WRITE(numout,*) ' number of ice categories = ', jpl 397 !clem WRITE(numout,*) ' number of ice layers = ', nlay_i 398 !clem WRITE(numout,*) ' number of snow layers = ', nlay_s 410 399 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 411 400 WRITE(numout,*) ' maximum ice concentration = ', amax … … 423 412 IF(lwp) WRITE(numout,*) ' The debugging point is : jiindx : ',jiindx, ' jjindx : ',jjindx 424 413 ENDIF 414 ! 415 ! sea-ice timestep and inverse 416 rdt_ice = nn_fsbc * rdttra(1) 417 r1_rdtice = 1._wp / rdt_ice 425 418 ! 426 419 END SUBROUTINE ice_run … … 577 570 END SUBROUTINE ice_lim_flx 578 571 579 SUBROUTINE sbc_lim_ flx0572 SUBROUTINE sbc_lim_diag0 580 573 !!---------------------------------------------------------------------- 581 574 !! *** ROUTINE sbc_lim_flx0 *** … … 610 603 afx_dyn(:,:) = 0._wp ; afx_thd(:,:) = 0._wp 611 604 612 END SUBROUTINE sbc_lim_ flx0605 END SUBROUTINE sbc_lim_diag0 613 606 614 607 FUNCTION fice_cell_ave ( ptab ) … … 623 616 624 617 DO jl = 1, jpl 625 fice_cell_ave (:,:) = fice_cell_ave (:,:) & 626 & + a_i (:,:,jl) * ptab (:,:,jl) 618 fice_cell_ave (:,:) = fice_cell_ave (:,:) + a_i (:,:,jl) * ptab (:,:,jl) 627 619 END DO 628 620
Note: See TracChangeset
for help on using the changeset viewer.