Changeset 5047 for branches/2015/dev_r5044_CNRS_LIM3CLEAN
- Timestamp:
- 2015-01-29T14:13:14+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r4990 r5047 167 167 ! !!** ice-dynamic namelist (namicedyn) ** 168 168 INTEGER , PUBLIC :: nevp !: number of iterations for subcycling 169 REAL(wp), PUBLIC :: epsd !: tolerance parameter for dynamic170 REAL(wp), PUBLIC :: om !: relaxation constant171 169 REAL(wp), PUBLIC :: cw !: drag coefficient for oceanic stress 172 170 REAL(wp), PUBLIC :: pstar !: determines ice strength (N/M), Hibler JPO79 … … 175 173 REAL(wp), PUBLIC :: ecc !: eccentricity of the elliptical yield curve 176 174 REAL(wp), PUBLIC :: ahi0 !: sea-ice hor. eddy diffusivity coeff. (m2/s) 177 REAL(wp), PUBLIC :: telast !: timescale for elastic waves (s)178 175 REAL(wp), PUBLIC :: relast !: ratio => telast/rdt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 179 REAL(wp), PUBLIC :: alphaevp !: coeficient of the internal stresses180 176 REAL(wp), PUBLIC :: hminrhg !: ice volume (a*h, in m) below which ice velocity is set to ocean velocity 181 177 … … 183 179 REAL(wp), PUBLIC :: s_i_max !: maximum ice salinity [PSU] 184 180 REAL(wp), PUBLIC :: s_i_min !: minimum ice salinity [PSU] 185 REAL(wp), PUBLIC :: s_i_0 !: 1st sal. value for the computation of sal .prof. [PSU]186 REAL(wp), PUBLIC :: s_i_1 !: 2nd sal. value for the computation of sal .prof. [PSU]187 181 REAL(wp), PUBLIC :: sal_G !: restoring salinity for gravity drainage [PSU] 188 182 REAL(wp), PUBLIC :: sal_F !: restoring salinity for flushing [PSU] … … 389 383 LOGICAL , PUBLIC :: ln_limdyn !: flag for ice dynamics (T) or not (F) 390 384 LOGICAL , PUBLIC :: ln_nicep !: flag for sea-ice points output (T) or not (F) 391 REAL(wp) , PUBLIC :: cai !: atmospheric drag over sea ice392 REAL(wp) , PUBLIC :: cao !: atmospheric drag over ocean393 385 REAL(wp) , PUBLIC :: amax !: maximum ice concentration 394 386 ! -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/iceini.F90
r4873 r5047 131 131 !! ** input : Namelist namicerun 132 132 !!------------------------------------------------------------------- 133 NAMELIST/namicerun/ cn_icerst_in, cn_icerst_out, ln_limdyn, amax, cai, cao,ln_nicep, ln_limdiahsb, ln_limdiaout133 NAMELIST/namicerun/ cn_icerst_in, cn_icerst_out, ln_limdyn, amax, ln_nicep, ln_limdiahsb, ln_limdiaout 134 134 INTEGER :: ios ! Local integer output status for namelist read 135 135 !!------------------------------------------------------------------- … … 155 155 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 156 156 WRITE(numout,*) ' maximum ice concentration = ', amax 157 WRITE(numout,*) ' atmospheric drag over sea ice = ', cai158 WRITE(numout,*) ' atmospheric drag over ocean = ', cao159 157 WRITE(numout,*) ' Several ice points in the ice or not in ocean.output = ', ln_nicep 160 158 WRITE(numout,*) ' Diagnose heat/salt budget or not ln_limdiahsb = ', ln_limdiahsb -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90
r4990 r5047 241 241 !!------------------------------------------------------------------- 242 242 INTEGER :: ios ! Local integer output status for namelist read 243 NAMELIST/namicedyn/ epsd, om,cw, pstar, &243 NAMELIST/namicedyn/ cw, pstar, & 244 244 & c_rhg, creepl, ecc, ahi0, & 245 & nevp, relast, alphaevp,hminrhg245 & nevp, relast, hminrhg 246 246 !!------------------------------------------------------------------- 247 247 … … 259 259 WRITE(numout,*) 'lim_dyn_init : ice parameters for ice dynamics ' 260 260 WRITE(numout,*) '~~~~~~~~~~~~' 261 WRITE(numout,*) ' tolerance parameter epsd = ', epsd262 WRITE(numout,*) ' relaxation constant om = ', om263 261 WRITE(numout,*) ' drag coefficient for oceanic stress cw = ', cw 264 262 WRITE(numout,*) ' first bulk-rheology parameter pstar = ', pstar … … 269 267 WRITE(numout,*) ' number of iterations for subcycling nevp = ', nevp 270 268 WRITE(numout,*) ' ratio of elastic timescale over ice time step relast = ', relast 271 WRITE(numout,*) ' coefficient for the solution of int. stresses alphaevp = ', alphaevp272 269 WRITE(numout,*) ' min ice thickness for rheology calculations hminrhg = ', hminrhg 273 270 ENDIF … … 275 272 usecc2 = 1._wp / ( ecc * ecc ) 276 273 rhoco = rau0 * cw 277 278 ! elastic damping279 telast = relast * rdt_ice280 274 281 275 ! Diffusion coefficients. -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limhdf.F90
r4990 r5047 54 54 REAL(wp), DIMENSION(jpi,jpj), INTENT( inout ) :: ptab ! Field on which the diffusion is applied 55 55 ! 56 INTEGER :: ji, jj ! dummy loop indices57 INTEGER :: its, iter, ierr ! local integers58 REAL(wp) :: zalfa, zrlxint, zconv ! local scalars56 INTEGER :: ji, jj ! dummy loop indices 57 INTEGER :: its, iter, ierr ! local integers 58 REAL(wp) :: zalfa, zrlxint, zconv ! local scalars 59 59 REAL(wp), POINTER, DIMENSION(:,:) :: zrlx, zflu, zflv, zdiv0, zdiv, ztab0 60 CHARACTER(lc) :: charout ! local character 60 CHARACTER(lc) :: charout ! local character 61 REAL(wp), PARAMETER :: zrelax = 0.5_wp ! relaxation constant for iterative procedure 61 62 !!------------------------------------------------------------------- 62 63 … … 117 118 & + ( 1.0 - zalfa ) * zdiv0(ji,jj) ) ) & 118 119 & / ( 1.0 + zalfa * rdt_ice * efact(ji,jj) ) 119 zrlx(ji,jj) = ptab(ji,jj) + om* ( zrlxint - ptab(ji,jj) )120 zrlx(ji,jj) = ptab(ji,jj) + zrelax * ( zrlxint - ptab(ji,jj) ) 120 121 END DO 121 122 END DO -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90
r4990 r5047 102 102 !! and charge ellipse. 103 103 !! The user should make sure that the parameters 104 !! nevp, telastand creepl maintain stress state104 !! nevp, elastic time scale and creepl maintain stress state 105 105 !! on the charge ellipse for plastic flow 106 106 !! e.g. in the Canadian Archipelago … … 108 108 !! References : Hunke and Dukowicz, JPO97 109 109 !! Bouillon et al., Ocean Modelling 2009 110 !! Vancoppenolle et al., Ocean Modelling 2008111 110 !!------------------------------------------------------------------- 112 111 INTEGER, INTENT(in) :: k_j1 ! southern j-index for ice computation … … 152 151 ! ocean surface (ssh_m) if ice is not embedded 153 152 ! ice top surface if ice is embedded 153 154 REAL(wp), PARAMETER :: zepsi = 1.0e-20_wp ! tolerance parameter 154 155 !!------------------------------------------------------------------- 155 156 … … 200 201 #endif 201 202 ! tmi = 1 where there is ice or on land 202 tmi(ji,jj) = 1._wp - ( 1._wp - MAX( 0._wp , SIGN ( 1._wp , vt_i(ji,jj) - epsd) ) ) * tms(ji,jj)203 tmi(ji,jj) = 1._wp - ( 1._wp - MAX( 0._wp , SIGN ( 1._wp , vt_i(ji,jj) - zepsi ) ) ) * tms(ji,jj) 203 204 END DO 204 205 END DO … … 218 219 & zpresh(ji+1,jj) * wght(ji+1,jj+1,2,1) + & 219 220 & zpresh(ji,jj) * wght(ji+1,jj+1,1,1) & 220 & ) / MAX( zstms, epsd)221 & ) / MAX( zstms, zepsi ) 221 222 END DO 222 223 END DO … … 270 271 271 272 ! Leads area. 272 zfrld1(ji,jj) = ( zt12 * ( 1.0 - at_i(ji,jj) ) + zt11 * ( 1.0 - at_i(ji+1,jj) ) ) / ( zt11 + zt12 + epsd)273 zfrld2(ji,jj) = ( zt22 * ( 1.0 - at_i(ji,jj) ) + zt21 * ( 1.0 - at_i(ji,jj+1) ) ) / ( zt21 + zt22 + epsd)273 zfrld1(ji,jj) = ( zt12 * ( 1.0 - at_i(ji,jj) ) + zt11 * ( 1.0 - at_i(ji+1,jj) ) ) / ( zt11 + zt12 + zepsi ) 274 zfrld2(ji,jj) = ( zt22 * ( 1.0 - at_i(ji,jj) ) + zt21 * ( 1.0 - at_i(ji,jj+1) ) ) / ( zt21 + zt22 + zepsi ) 274 275 275 276 ! Mass, coriolis coeff. and currents 276 zmass1(ji,jj) = ( zt12*zc1 + zt11*zc2 ) / (zt11+zt12+ epsd)277 zmass2(ji,jj) = ( zt22*zc1 + zt21*zc3 ) / (zt21+zt22+ epsd)277 zmass1(ji,jj) = ( zt12*zc1 + zt11*zc2 ) / (zt11+zt12+zepsi) 278 zmass2(ji,jj) = ( zt22*zc1 + zt21*zc3 ) / (zt21+zt22+zepsi) 278 279 zcorl1(ji,jj) = zmass1(ji,jj) * ( e1t(ji+1,jj)*fcor(ji,jj) + e1t(ji,jj)*fcor(ji+1,jj) ) & 279 & / ( e1t(ji,jj) + e1t(ji+1,jj) + epsd)280 & / ( e1t(ji,jj) + e1t(ji+1,jj) + zepsi ) 280 281 zcorl2(ji,jj) = zmass2(ji,jj) * ( e2t(ji,jj+1)*fcor(ji,jj) + e2t(ji,jj)*fcor(ji,jj+1) ) & 281 & / ( e2t(ji,jj+1) + e2t(ji,jj) + epsd)282 & / ( e2t(ji,jj+1) + e2t(ji,jj) + zepsi ) 282 283 ! 283 284 u_oce1(ji,jj) = u_oce(ji,jj) … … 319 320 ! Time step for subcycling 320 321 dtevp = rdt_ice / nevp 322 #if defined key_lim3 323 dtotel = dtevp / ( 2._wp * relast * rdt_ice ) 324 #else 321 325 dtotel = dtevp / ( 2._wp * telast ) 322 326 #endif 323 327 !-ecc2: square of yield ellipse eccenticrity (reminder: must become a namelist parameter) 324 328 ecc2 = ecc * ecc … … 504 508 zcca = z0+za 505 509 zccb = zcorl1(ji,jj) 506 u_ice(ji,jj) = (zr+zccb*zv_ice1)/(zcca+ epsd)*zmask510 u_ice(ji,jj) = (zr+zccb*zv_ice1)/(zcca+zepsi)*zmask 507 511 508 512 END DO … … 534 538 zcca = z0+za 535 539 zccb = zcorl2(ji,jj) 536 v_ice(ji,jj) = (zr-zccb*zu_ice2)/(zcca+ epsd)*zmask540 v_ice(ji,jj) = (zr-zccb*zu_ice2)/(zcca+zepsi)*zmask 537 541 538 542 END DO … … 565 569 zcca = z0+za 566 570 zccb = zcorl2(ji,jj) 567 v_ice(ji,jj) = (zr-zccb*zu_ice2)/(zcca+ epsd)*zmask571 v_ice(ji,jj) = (zr-zccb*zu_ice2)/(zcca+zepsi)*zmask 568 572 569 573 END DO … … 594 598 zcca = z0+za 595 599 zccb = zcorl1(ji,jj) 596 u_ice(ji,jj) = (zr+zccb*zv_ice1)/(zcca+ epsd)*zmask600 u_ice(ji,jj) = (zr+zccb*zv_ice1)/(zcca+zepsi)*zmask 597 601 END DO ! ji 598 602 END DO ! jj -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90
r4990 r5047 563 563 !!------------------------------------------------------------------- 564 564 INTEGER :: ios ! Local integer output status for namelist read 565 NAMELIST/namicethd/ h melt , hiccrit, fraz_swi, maxfrazb, vfrazb, Cfrazb, &566 & hiclim, hnzst,parsub, betas, &565 NAMELIST/namicethd/ hiccrit, fraz_swi, maxfrazb, vfrazb, Cfrazb, & 566 & hiclim, parsub, betas, & 567 567 & kappa_i, nconv_i_thd, maxer_i_thd, thcon_i_swi 568 568 !!------------------------------------------------------------------- … … 588 588 WRITE(numout,*) 589 589 WRITE(numout,*)' Namelist of ice parameters for ice thermodynamic computation ' 590 WRITE(numout,*)' maximum melting at the bottom hmelt = ', hmelt591 590 WRITE(numout,*)' ice thick. for lateral accretion hiccrit = ', hiccrit 592 591 WRITE(numout,*)' Frazil ice thickness as a function of wind or not fraz_swi = ', fraz_swi … … 596 595 WRITE(numout,*)' minimum ice thickness hiclim = ', hiclim 597 596 WRITE(numout,*)' numerical carac. of the scheme for diffusion in ice ' 598 WRITE(numout,*)' thickness of the surf. layer in temp. computation hnzst = ', hnzst599 597 WRITE(numout,*)' switch for snow sublimation (=1) or not (=0) parsub = ', parsub 600 598 WRITE(numout,*)' coefficient for ice-lead partition of snowfall betas = ', betas -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r4990 r5047 70 70 71 71 REAL(wp) :: ztmelts ! local scalar 72 REAL(wp) :: z dh, zfdum !72 REAL(wp) :: zfdum 73 73 REAL(wp) :: zfracs ! fractionation coefficient for bottom salt entrapment 74 74 REAL(wp) :: zcoeff ! dummy argument for snowfall partitioning over ice and leads … … 91 91 REAL(wp), POINTER, DIMENSION(:) :: zq_su ! heat for surface ablation (J.m-2) 92 92 REAL(wp), POINTER, DIMENSION(:) :: zq_bo ! heat for bottom ablation (J.m-2) 93 REAL(wp), POINTER, DIMENSION(:) :: zq_1cat ! corrected heat in case 1-cat and hmelt>15cm (J.m-2)94 93 REAL(wp), POINTER, DIMENSION(:) :: zq_rema ! remaining heat at the end of the routine (J.m-2) 95 94 REAL(wp), POINTER, DIMENSION(:) :: zf_tt ! Heat budget to determine melting or freezing(W.m-2) … … 107 106 REAL(wp), POINTER, DIMENSION(:) :: zq_s ! total snow enthalpy (J.m-3) 108 107 109 ! mass and salt flux (clem) 110 REAL(wp) :: zdvres, zswitch_sal 108 REAL(wp) :: zswitch_sal 111 109 112 110 ! Heat conservation … … 121 119 END SELECT 122 120 123 CALL wrk_alloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_ 1cat, zq_rema )121 CALL wrk_alloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 124 122 CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 125 123 CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) … … 130 128 131 129 zqprec (:) = 0._wp ; zq_su (:) = 0._wp ; zq_bo (:) = 0._wp ; zf_tt (:) = 0._wp 132 zq_ 1cat(:) = 0._wp ; zq_rema(:) = 0._wp130 zq_rema(:) = 0._wp 133 131 134 132 zh_s (:) = 0._wp … … 579 577 END DO ! jk 580 578 581 !------------------------------------------------------------------------------!582 ! Excessive ablation in a 1-category model583 ! in a 1-category sea ice model, bottom ablation must not exceed hmelt (-0.15)584 !------------------------------------------------------------------------------!585 ! ??? keep ???586 ! clem bug: I think this should be included above, so we would not have to587 ! track heat/salt/mass fluxes backwards588 ! IF( jpl == 1 ) THEN589 ! DO ji = kideb, kiut590 ! IF( zf_tt(ji) >= 0._wp ) THEN591 ! zdh = MAX( hmelt , dh_i_bott(ji) )592 ! zdvres = zdh - dh_i_bott(ji) ! >=0593 ! dh_i_bott(ji) = zdh594 !595 ! ! excessive energy is sent to lateral ablation596 ! rswitch = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) )597 ! zq_1cat(ji) = rswitch * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0598 !599 ! ! correct salt and mass fluxes600 ! sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdvres * rhoic * r1_rdtice ! this is only a raw approximation601 ! wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdvres * r1_rdtice602 ! ENDIF603 ! END DO604 ! ENDIF605 606 579 !------------------------------------------- 607 580 ! Update temperature, energy … … 635 608 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 636 609 ! Remaining heat flux (W.m-2) is sent to the ocean heat budget 637 hfx_out(ii,ij) = hfx_out(ii,ij) + ( zq_ 1cat(ji) + zq_rema(ji) * a_i_1d(ji) ) * r1_rdtice610 hfx_out(ii,ij) = hfx_out(ii,ij) + ( zq_rema(ji) * a_i_1d(ji) ) * r1_rdtice 638 611 639 612 IF( ln_nicep .AND. zq_rema(ji) < 0. .AND. lwp ) WRITE(numout,*) 'ALERTE zq_rema <0 = ', zq_rema(ji) … … 716 689 END DO 717 690 718 CALL wrk_dealloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_ 1cat, zq_rema )691 CALL wrk_dealloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_rema ) 719 692 CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 720 693 CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r4990 r5047 112 112 REAL(wp) :: ztmelt_i ! ice melting temperature 113 113 REAL(wp) :: zerritmax ! current maximal error on temperature 114 REAL(wp) :: zhsu 114 115 REAL(wp), POINTER, DIMENSION(:) :: ztfs ! ice melting point 115 116 REAL(wp), POINTER, DIMENSION(:) :: ztsub ! old surface temperature (before the iterative procedure ) … … 123 124 REAL(wp), POINTER, DIMENSION(:) :: zdifcase ! case of the equation resolution (1->4) 124 125 REAL(wp), POINTER, DIMENSION(:) :: zftrice ! solar radiation transmitted through the ice 125 REAL(wp), POINTER, DIMENSION(:) :: zihic , zhsu126 REAL(wp), POINTER, DIMENSION(:) :: zihic 126 127 REAL(wp), POINTER, DIMENSION(:,:) :: ztcond_i ! Ice thermal conductivity 127 128 REAL(wp), POINTER, DIMENSION(:,:) :: zradtr_i ! Radiation transmitted through the ice … … 150 151 CALL wrk_alloc( jpij, numeqmin, numeqmax, isnow ) 151 152 CALL wrk_alloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 152 CALL wrk_alloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic , zhsu)153 CALL wrk_alloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic ) 153 154 CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0) 154 155 CALL wrk_alloc( jpij, nlay_s+1, zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) … … 212 213 ! zftrice = io.qsr_ice is below the surface 213 214 ! ftr_ice = io.qsr_ice.exp(-k(h_i)) transmitted below the ice 214 215 zhsu = 0.1_wp ! threshold for the computation of i0 216 !fr1_i0_1d = i0 for a thin ice surface 217 !fr1_i0_2d = i0 for a thick ice surface 215 218 DO ji = kideb , kiut 216 219 ! switches 217 220 isnow(ji) = NINT( 1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) ) 218 221 ! hs > 0, isnow = 1 219 zhsu (ji) = hnzst ! threshold for the computation of i0 220 zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_1d(ji) / zhsu(ji) ) ) 222 zihic(ji) = MAX( 0._wp , 1._wp - ( ht_i_1d(ji) / zhsu ) ) 221 223 222 224 i0(ji) = REAL( 1 - isnow(ji) ) * ( fr1_i0_1d(ji) + zihic(ji) * fr2_i0_1d(ji) ) 223 !fr1_i0_1d = i0 for a thin ice surface224 !fr1_i0_2d = i0 for a thick ice surface225 ! a function of the cloud cover226 !227 !i0(ji) = (1.0-FLOAT(isnow(ji)))*3.0/(100*ht_s_1d(ji)+10.0)228 !formula used in Cice229 225 END DO 230 226 … … 775 771 CALL wrk_dealloc( jpij, numeqmin, numeqmax, isnow ) 776 772 CALL wrk_dealloc( jpij, ztfs, ztsub, ztsubit, zh_i, zh_s, zfsw ) 777 CALL wrk_dealloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic , zhsu)773 CALL wrk_dealloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic ) 778 774 CALL wrk_dealloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, & 779 775 & ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90
r4990 r5047 112 112 113 113 REAL(wp), POINTER, DIMENSION(:,:) :: zvrel ! relative ice / frazil velocity 114 115 REAL(wp) :: zcai = 1.4e-3_wp 114 116 !!-----------------------------------------------------------------------! 115 117 … … 166 168 zhicrit = 0.04 ! frazil ice thickness 167 169 ztwogp = 2. * rau0 / ( grav * 0.3 * ( rau0 - rhoic ) ) ! reduced grav 168 zsqcd = 1.0 / SQRT( 1.3 * cai ) ! 1/SQRT(airdensity*drag)170 zsqcd = 1.0 / SQRT( 1.3 * zcai ) ! 1/SQRT(airdensity*drag) 169 171 zgamafr = 0.03 170 172 -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90
r4872 r5047 135 135 INTEGER :: ios ! Local integer output status for namelist read 136 136 NAMELIST/namicesal/ num_sal, bulk_sal, sal_G, time_G, sal_F, time_F, & 137 & s_i_max, s_i_min , s_i_0, s_i_1137 & s_i_max, s_i_min 138 138 !!------------------------------------------------------------------- 139 139 ! … … 159 159 WRITE(numout,*) ' Maximum tolerated ice salinity : ', s_i_max 160 160 WRITE(numout,*) ' Minimum tolerated ice salinity : ', s_i_min 161 WRITE(numout,*) ' 1st salinity for salinity profile : ', s_i_0162 WRITE(numout,*) ' 2nd salinity for salinity profile : ', s_i_1163 161 ENDIF 164 162 ! -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90
r4990 r5047 281 281 !! ** Purpose : computes salinity profile in function of bulk salinity 282 282 !! 283 !! ** Method : If bulk salinity greater than s_i_1,283 !! ** Method : If bulk salinity greater than zsi1, 284 284 !! the profile is assumed to be constant (S_inf) 285 !! If bulk salinity lower than s_i_0,285 !! If bulk salinity lower than zsi0, 286 286 !! the profile is linear with 0 at the surface (S_zero) 287 !! If it is between s_i_0 and s_i_1, it is a287 !! If it is between zsi0 and zsi1, it is a 288 288 !! alpha-weighted linear combination of s_inf and s_zero 289 289 !! … … 291 291 !!------------------------------------------------------------------ 292 292 INTEGER :: ji, jj, jk, jl ! dummy loop index 293 REAL(wp) :: dummy_fac0, dummy_fac1, dummy_fac, zsal ! local scalar 294 REAL(wp) :: zswi0, zswi01, zswibal, zargtemp , zs_zero ! - - 295 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_slope_s, zalpha ! 3D pointer 293 REAL(wp) :: dummy_fac0, dummy_fac1, dummy_fac, zsal 294 REAL(wp) :: zswi0, zswi01, zswibal, zargtemp , zs_zero 295 REAL(wp), POINTER, DIMENSION(:,:,:) :: z_slope_s, zalpha 296 REAL(wp), PARAMETER :: zsi0 = 3.5_wp 297 REAL(wp), PARAMETER :: zsi1 = 4.5_wp 296 298 !!------------------------------------------------------------------ 297 299 … … 320 322 END DO 321 323 ! 322 dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 ) ! Weighting factor between zs_zero and zs_inf323 dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 )324 dummy_fac0 = 1._wp / ( zsi0 - zsi1 ) ! Weighting factor between zs_zero and zs_inf 325 dummy_fac1 = zsi1 / ( zsi1 - zsi0 ) 324 326 ! 325 327 zalpha(:,:,:) = 0._wp … … 327 329 DO jj = 1, jpj 328 330 DO ji = 1, jpi 329 ! zswi0 = 1 if sm_i le s_i_0 and 0 otherwise330 zswi0 = MAX( 0._wp , SIGN( 1._wp , s_i_0 - sm_i(ji,jj,jl) ) )331 ! zswi01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws332 zswi01 = ( 1._wp - zswi0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i(ji,jj,jl) ) )331 ! zswi0 = 1 if sm_i le zsi0 and 0 otherwise 332 zswi0 = MAX( 0._wp , SIGN( 1._wp , zsi0 - sm_i(ji,jj,jl) ) ) 333 ! zswi01 = 1 if sm_i is between zsi0 and zsi1 and 0 othws 334 zswi01 = ( 1._wp - zswi0 ) * MAX( 0._wp , SIGN( 1._wp , zsi1 - sm_i(ji,jj,jl) ) ) 333 335 ! If 2.sm_i GE sss_m then zswibal = 1 334 336 ! this is to force a constant salinity profile in the Baltic Sea … … 453 455 ! 454 456 REAL(wp), POINTER, DIMENSION(:) :: z_slope_s 457 REAL(wp), PARAMETER :: zsi0 = 3.5_wp 458 REAL(wp), PARAMETER :: zsi1 = 4.5_wp 455 459 !!--------------------------------------------------------------------- 456 460 … … 474 478 ! Weighting factor between zs_zero and zs_inf 475 479 !--------------------------------------------- 476 dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 )477 dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 )480 dummy_fac0 = 1._wp / ( zsi0 - zsi1 ) 481 dummy_fac1 = zsi1 / ( zsi1 - zsi0 ) 478 482 dummy_fac2 = 1._wp / REAL(nlay_i,wp) 479 483 … … 484 488 ii = MOD( npb(ji) - 1 , jpi ) + 1 485 489 ij = ( npb(ji) - 1 ) / jpi + 1 486 ! zswi0 = 1 if sm_i le s_i_0 and 0 otherwise487 zswi0 = MAX( 0._wp , SIGN( 1._wp , s_i_0 - sm_i_1d(ji) ) )488 ! zswi01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws489 zswi01 = ( 1._wp - zswi0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_1d(ji) ) )490 ! zswi0 = 1 if sm_i le zsi0 and 0 otherwise 491 zswi0 = MAX( 0._wp , SIGN( 1._wp , zsi0 - sm_i_1d(ji) ) ) 492 ! zswi01 = 1 if sm_i is between zsi0 and zsi1 and 0 othws 493 zswi01 = ( 1._wp - zswi0 ) * MAX( 0._wp , SIGN( 1._wp , zsi1 - sm_i_1d(ji) ) ) 490 494 ! if 2.sm_i GE sss_m then zswibal = 1 491 495 ! this is to force a constant salinity profile in the Baltic Sea -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90
r4990 r5047 19 19 !!--------------------------- 20 20 ! !!! ** ice-thermo namelist (namicethd) ** 21 REAL(wp), PUBLIC :: hmelt !: maximum melting at the bottom; active only for one category22 21 REAL(wp), PUBLIC :: hiclim !: minimum ice thickness 23 REAL(wp), PUBLIC :: hnzst !: thick. of the surf. layer in temp. comp.24 22 REAL(wp), PUBLIC :: parsub !: switch for snow sublimation or not 25 23 REAL(wp), PUBLIC :: maxfrazb !: maximum portion of frazil ice collecting at the ice bottom -
branches/2015/dev_r5044_CNRS_LIM3CLEAN/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r5008 r5047 62 62 LOGICAL :: lbulk_init = .TRUE. ! flag, bulk initialization done or not) 63 63 64 #if ! defined key_lim365 ! in namicerun with LIM366 64 REAL(wp) :: cai = 1.40e-3 ! best estimate of atm drag in order to get correct FS export in ORCA2-LIM 67 65 REAL(wp) :: cao = 1.00e-3 ! chosen by default ==> should depends on many things... !!gmto be updated 68 #endif69 66 70 67 REAL(wp) :: rdtbs2 !:
Note: See TracChangeset
for help on using the changeset viewer.