Changeset 8906
- Timestamp:
- 2017-12-05T18:24:20+01:00 (7 years ago)
- Location:
- branches/2017/dev_CNRS_2017/NEMOGCM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_CNRS_2017/NEMOGCM/CONFIG/ORCA2_LIM3_PISCES/EXP00/file_def_nemo-lim.xml
r8882 r8906 14 14 <file_group id="5d" output_freq="5d" output_level="10" enabled=".TRUE."> <!-- 5d files --> 15 15 <file id="file21" name_suffix="_icemod" description="ice variables" enabled=".true." > 16 <field field_ref="sn othic" name="snthic" />16 <field field_ref="snwthic" name="snthic" /> 17 17 <field field_ref="icethic" name="sithic" /> 18 18 <field field_ref="icevolu" name="sivolu" /> 19 <field field_ref="sn owvol" name="snvolu" />19 <field field_ref="snwvolu" name="snvolu" /> 20 20 <field field_ref="iceconc" name="siconc" /> 21 21 </file> -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/icedyn_rdgrft.F90
r8882 r8906 669 669 ! Put the melt pond water into the ocean 670 670 !------------------------------------------ 671 IF ( ln_pnd_fwb ) THEN 672 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) + ( rhofw * vprdg(ji) * ( 1._wp - rn_fpndrdg ) & ! fresh water source for ocean 673 & + rhofw * vprft(ji) * ( 1._wp - rn_fpndrft ) ) * r1_rdtice 674 ENDIF 671 ! clem: I think the following lines must be commented since there 672 ! is no net mass flux between melt ponds and the ocean (see icethd_pnd.F90 for ex.) 673 !IF ( ln_pnd_fwb ) THEN 674 ! wfx_pnd_1d(ji) = wfx_pnd_1d(ji) + ( rhofw * vprdg(ji) * ( 1._wp - rn_fpndrdg ) & ! fresh water source for ocean 675 ! & + rhofw * vprft(ji) * ( 1._wp - rn_fpndrft ) ) * r1_rdtice 676 !ENDIF 675 677 676 678 ! virtual salt flux to keep salinity constant -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/iceforcing.F90
r8889 r8906 138 138 ! 139 139 CASE( jp_usr ) !--- user defined formulation 140 CALL usrdef_sbc_ice_flx( kt )140 CALL usrdef_sbc_ice_flx( kt ) 141 141 ! 142 142 CASE( jp_blk ) !--- bulk formulation 143 CALL blk_ice_flx( t_su, h_s, h_i, alb_ice ) !144 IF( ln_mixcpl )CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i )145 IF( nn_flxdist /= 2 )CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist )143 CALL blk_ice_flx( t_su, h_s, h_i, alb_ice ) ! 144 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 145 IF( nn_flxdist /= -1 ) CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 146 146 ! 147 147 CASE ( jp_purecpl ) !--- coupled formulation 148 CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i )149 IF( nn_flxdist == 2 )CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist )148 CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 149 IF( nn_flxdist /= -1 ) CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 150 150 ! 151 151 END SELECT … … 294 294 CASE( -1 ) 295 295 IF(lwp) WRITE(numout,*) ' ESIM: use per-category fluxes (nn_flxdist = -1) ' 296 IF( ln_cpl ) CALL ctl_stop( 'ice_thd_init : the chosen nn_flxdist for ESIM in coupled mode must be 0 or 2' )297 296 CASE( 0 ) 298 297 IF(lwp) WRITE(numout,*) ' ESIM: use average per-category fluxes (nn_flxdist = 0) ' 299 298 CASE( 1 ) 300 299 IF(lwp) WRITE(numout,*) ' ESIM: use average then redistribute per-category fluxes (nn_flxdist = 1) ' 301 IF( ln_cpl ) CALL ctl_stop( 'ice_thd_init : the chosen nn_flxdist for ESIM in coupled mode must be 0 or 2' )300 IF( ln_cpl ) CALL ctl_stop( 'ice_thd_init: the chosen nn_flxdist for ESIM in coupled mode must be /=1' ) 302 301 CASE( 2 ) 303 302 IF(lwp) WRITE(numout,*) ' ESIM: Redistribute a single flux over categories (nn_flxdist = 2) ' 304 IF( .NOT. ln_cpl ) CALL ctl_stop( 'ice_thd_init : the chosen nn_flxdist for ESIM in forced mode cannot be2' )303 IF( .NOT. ln_cpl ) CALL ctl_stop( 'ice_thd_init: the chosen nn_flxdist for ESIM in forced mode must be /=2' ) 305 304 CASE DEFAULT 306 305 CALL ctl_stop( 'ice_thd_init: ESIM option, nn_flxdist, should be between -1 and 2' ) -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/iceitd.F90
r8885 r8906 296 296 ! 7) Make sure h_i >= minimum ice thickness hi_min 297 297 !---------------------------------------------------------------------------------------------- 298 CALL tab_2d_1d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i (:,:,1))299 CALL tab_2d_1d( npti, nptidx(1:npti), a_i_1d (1:npti), a_i(:,:,1))300 CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_1d (1:npti), a_ip(:,:,1))298 CALL tab_2d_1d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i (:,:,1) ) 299 CALL tab_2d_1d( npti, nptidx(1:npti), a_i_1d (1:npti), a_i (:,:,1) ) 300 CALL tab_2d_1d( npti, nptidx(1:npti), a_ip_1d(1:npti), a_ip(:,:,1) ) 301 301 ! 302 302 DO ji = 1, npti 303 303 IF ( a_i_1d(ji) > epsi10 .AND. h_i_1d(ji) < rn_himin ) THEN 304 304 a_i_1d (ji) = a_i_1d(ji) * h_i_1d(ji) / rn_himin 305 IF ( ln_pnd_H12 )a_ip_1d(ji) = a_ip_1d(ji) * h_i_1d(ji) / rn_himin305 IF( ln_pnd_H12 ) a_ip_1d(ji) = a_ip_1d(ji) * h_i_1d(ji) / rn_himin 306 306 h_i_1d(ji) = rn_himin 307 307 ENDIF 308 308 END DO 309 309 ! 310 CALL tab_1d_2d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i (:,:,1))311 CALL tab_1d_2d( npti, nptidx(1:npti), a_i_1d (1:npti), a_i(:,:,1))312 CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_1d (1:npti), a_ip(:,:,1))310 CALL tab_1d_2d( npti, nptidx(1:npti), h_i_1d (1:npti), h_i (:,:,1) ) 311 CALL tab_1d_2d( npti, nptidx(1:npti), a_i_1d (1:npti), a_i (:,:,1) ) 312 CALL tab_1d_2d( npti, nptidx(1:npti), a_ip_1d(1:npti), a_ip(:,:,1) ) 313 313 ! 314 314 ENDIF -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/icethd_pnd.F90
r8882 r8906 125 125 !! pond contraction: Vp = Vp * exp(0.01*MAX(Tp-Tsu,0)/Tp) 126 126 !! with Tp = -2degC 127 !! 127 !! 128 128 !! ** Tunable parameters : (no real expertise yet, ideas?) 129 129 !! … … 136 136 !! 137 137 !!------------------------------------------------------------------- 138 REAL(wp), PARAMETER :: zrmin = 0.15_wp ! minimum fraction of available meltwater retained for melt ponding139 REAL(wp), PARAMETER :: zrmax = 0.70_wp ! maximum '' '' '' '' ''140 REAL(wp), PARAMETER :: zpnd_aspect = 0.8_wp ! pond aspect ratio141 REAL(wp), PARAMETER :: zTp = -2._wp !142 143 REAL(wp) :: zfr_mlt 138 REAL(wp), PARAMETER :: zrmin = 0.15_wp ! minimum fraction of available meltwater retained for melt ponding 139 REAL(wp), PARAMETER :: zrmax = 0.70_wp ! maximum '' '' '' '' '' 140 REAL(wp), PARAMETER :: zpnd_aspect = 0.8_wp ! pond aspect ratio 141 REAL(wp), PARAMETER :: zTp = -2._wp ! reference temperature 142 143 REAL(wp) :: zfr_mlt ! fraction of available meltwater retained for melt ponding 144 144 REAL(wp) :: zdv_mlt ! available meltwater for melt ponding 145 REAL(wp) :: z1_Tp ! reference temperature 146 REAL(wp) :: z1_rhofw ! inverse freshwater density 147 REAL(wp) :: z1_zpnd_aspect ! inverse pond aspect ratio 148 REAL(wp) :: zvpnd ! dummy pond volume 145 REAL(wp) :: z1_Tp ! inverse reference temperature 146 REAL(wp) :: z1_rhofw ! inverse freshwater density 147 REAL(wp) :: z1_zpnd_aspect ! inverse pond aspect ratio 149 148 REAL(wp) :: zfac, zdum 150 149 151 INTEGER :: ji 150 INTEGER :: ji ! loop indices 152 151 !!------------------------------------------------------------------- 153 152 z1_rhofw = 1. / rhofw … … 159 158 IF( h_i_1d(ji) < rn_himin) THEN ! Case ice thickness < rn_himin ! 160 159 ! !--------------------------------! 161 !--- Remove ponds on thin ice and send water into the ocean 162 IF( ln_pnd_fwb ) THEN 163 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) + h_ip_1d(ji) * a_ip_1d(ji) * rhofw * r1_rdtice 164 ENDIF 160 !--- Remove ponds on thin ice 165 161 a_ip_1d(ji) = 0._wp 166 162 a_ip_frac_1d(ji) = 0._wp … … 170 166 ! !--------------------------------! 171 167 v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji) ! record pond volume at previous time step 172 zvpnd = v_ip_1d(ji)173 168 174 169 ! available meltwater for melt ponding [m, >0] and fraction 175 170 zdv_mlt = -( dh_i_surf(ji)*rhoic + dh_s_mlt(ji)*rhosn ) * z1_rhofw * a_i_1d(ji) 176 zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji) ! !clem CICE doc177 !!! zfr_mlt = zrmin + zrmax * a_i_1d(ji) !!clem Holland paper178 179 !--- Pond gowth 171 zfr_mlt = zrmin + ( zrmax - zrmin ) * a_i_1d(ji) ! from CICE doc 172 !zfr_mlt = zrmin + zrmax * a_i_1d(ji) ! from Holland paper 173 174 !--- Pond gowth ---! 180 175 ! v_ip should never be negative, otherwise code crashes 181 176 ! MV: as far as I saw, UM5 can create very small negative v_ip values (not Prather) 182 177 v_ip_1d(ji) = MAX( 0._wp, v_ip_1d(ji) + zfr_mlt * zdv_mlt ) 183 178 179 ! melt pond mass flux (<0) 184 180 IF( ln_pnd_fwb .AND. zdv_mlt > 0._wp ) THEN 185 ! melt ponds mass flux (<0)186 181 zfac = zfr_mlt * zdv_mlt * rhofw * r1_rdtice 187 182 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 188 183 189 ! adjust ice/snow melting (>0) to take into account ponding184 ! adjust ice/snow melting flux to balance melt pond flux (>0) 190 185 zdum = zfac / ( wfx_snw_sum_1d(ji) + wfx_sum_1d(ji) ) 191 186 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) * (1._wp + zdum) … … 193 188 ENDIF 194 189 195 !--- Pond contraction (due to refreezing) 196 v_ip_1d(ji) 197 198 ! ---Set new pond area and depth assuming linear relation between h_ip and a_ip_frac199 ! 190 !--- Pond contraction (due to refreezing) ---! 191 v_ip_1d(ji) = v_ip_1d(ji) * EXP( 0.01_wp * MAX( zTp+rt0 - t_su_1d(ji), 0._wp ) * z1_Tp ) 192 193 ! Set new pond area and depth assuming linear relation between h_ip and a_ip_frac 194 ! h_ip = zpnd_aspect * a_ip_frac = zpnd_aspect * a_ip/a_i 200 195 a_ip_1d(ji) = SQRT( v_ip_1d(ji) * z1_zpnd_aspect * a_i_1d(ji) ) 201 !NB: the SQRT has been a recurring source of crash when v_ip or a_i tuns to be even only slightly negative202 196 a_ip_frac_1d(ji) = a_ip_1d(ji) / a_i_1d(ji) 203 197 h_ip_1d(ji) = zpnd_aspect * a_ip_frac_1d(ji) 204 205 !! clem: there is no clever way to conserve mass here...206 207 ! IF( ln_pnd_fwb ) THEN208 ! ! melt ponds mass flux (>0 when ponds shrink)209 ! zfac = ( v_ip_1d(ji) - zvpnd ) * rhofw * r1_rdtice210 ! wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac!!211 !212 ! ! adjust ice/snow213 ! zfac = ( v_ip_1d(ji) - zvpnd ) * rhofw / ( a_i_1d(ji)*h_s_1d(ji)*rhosn + a_i_1d(ji)*h_i_1d(ji)*rhoic )!214 !215 ! wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + h_s_1d(ji) * zfac * a_i_1d(ji) * rhosn * r1_rdtice216 ! wfx_sum_1d(ji) = wfx_sum_1d(ji) + h_i_1d(ji) * zfac * a_i_1d(ji) * rhoic * r1_rdtice217 !218 ! !!h_s_1d(ji) = h_s_1d(ji) * ( 1._wp + zfac )219 ! !!h_i_1d(ji) = h_i_1d(ji) * ( 1._wp + zfac )!220 !221 ! ENDIF222 198 223 199 ENDIF -
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/icevar.F90
r8885 r8906 479 479 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhosn * r1_rdtice 480 480 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s (ji,jj,1,jl) * r1_rdtice ! W.m-2 <0 481 IF( ln_pnd_fwb ) THEN482 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_ip(ji,jj,jl) * rhofw * r1_rdtice483 ENDIF484 481 !----------------------------------------------------------------- 485 482 ! Zap snow energy
Note: See TracChangeset
for help on using the changeset viewer.