Changeset 12489 for NEMO/trunk/src/ICE
- Timestamp:
- 2020-02-28T16:55:11+01:00 (4 years ago)
- Location:
- NEMO/trunk/src/ICE
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/ice.F90
r11627 r12489 150 150 REAL(wp), PUBLIC :: rn_ecc !: eccentricity of the elliptical yield curve 151 151 INTEGER , PUBLIC :: nn_nevp !: number of iterations for subcycling 152 REAL(wp), PUBLIC :: rn_relast !: ratio => telast/r dt_ice (1/3 or 1/9 depending on nb of subcycling nevp)152 REAL(wp), PUBLIC :: rn_relast !: ratio => telast/rDt_ice (1/3 or 1/9 depending on nb of subcycling nevp) 153 153 ! 154 154 ! !!** ice-advection namelist (namdyn_adv) ** … … 207 207 ! !!** some other parameters 208 208 INTEGER , PUBLIC :: kt_ice !: iteration number 209 REAL(wp), PUBLIC :: r dt_ice !: ice time step210 REAL(wp), PUBLIC :: r1_ rdtice !: = 1. / rdt_ice209 REAL(wp), PUBLIC :: rDt_ice !: ice time step 210 REAL(wp), PUBLIC :: r1_Dt_ice !: = 1. / rDt_ice 211 211 REAL(wp), PUBLIC :: r1_nlay_i !: 1 / nlay_i 212 212 REAL(wp), PUBLIC :: r1_nlay_s !: 1 / nlay_s -
NEMO/trunk/src/ICE/icecor.F90
r12377 r12489 86 86 IF ( nn_icesal == 2 ) THEN ! salinity must stay in bounds [Simin,Simax] ! 87 87 ! !----------------------------------------------------- 88 zzc = rhoi * r1_ rdtice88 zzc = rhoi * r1_Dt_ice 89 89 DO jl = 1, jpl 90 90 DO_2D_11_11 … … 123 123 ! 124 124 IF( ln_icediachk .OR. iom_use('hfxdhc') ) THEN 125 diag_heat(:,:) = - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_ rdtice & ! W.m-2126 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_ rdtice127 diag_sice(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_ rdtice * rhoi128 diag_vice(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_ rdtice * rhoi129 diag_vsnw(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_ rdtice * rhos125 diag_heat(:,:) = - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice & ! W.m-2 126 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 127 diag_sice(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 128 diag_vice(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 129 diag_vsnw(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhos 130 130 ENDIF 131 131 ! ! concentration tendency (dynamics) 132 132 IF( iom_use('afxdyn') .OR. iom_use('afxthd') .OR. iom_use('afxtot') ) THEN 133 zafx(:,:) = SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_ rdtice133 zafx(:,:) = SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice 134 134 CALL iom_put( 'afxdyn' , zafx ) 135 135 ENDIF … … 137 137 CASE( 2 ) !--- thermo trend diagnostics & ice aging 138 138 ! 139 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * r dt_ice ! ice natural aging incrementation139 oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * rDt_ice ! ice natural aging incrementation 140 140 ! 141 141 IF( ln_icediachk .OR. iom_use('hfxdhc') ) THEN 142 142 diag_heat(:,:) = diag_heat(:,:) & 143 & - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_ rdtice &144 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_ rdtice143 & - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice & 144 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 145 145 diag_sice(:,:) = diag_sice(:,:) & 146 & + SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_ rdtice * rhoi146 & + SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 147 147 diag_vice(:,:) = diag_vice(:,:) & 148 & + SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_ rdtice * rhoi148 & + SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 149 149 diag_vsnw(:,:) = diag_vsnw(:,:) & 150 & + SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_ rdtice * rhos150 & + SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhos 151 151 CALL iom_put ( 'hfxdhc' , diag_heat ) 152 152 ENDIF 153 153 ! ! concentration tendency (total + thermo) 154 154 IF( iom_use('afxdyn') .OR. iom_use('afxthd') .OR. iom_use('afxtot') ) THEN 155 zafx(:,:) = zafx(:,:) + SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_ rdtice156 CALL iom_put( 'afxthd' , SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_ rdtice )155 zafx(:,:) = zafx(:,:) + SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice 156 CALL iom_put( 'afxthd' , SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice ) 157 157 CALL iom_put( 'afxtot' , zafx ) 158 158 ENDIF -
NEMO/trunk/src/ICE/icectl.F90
r12377 r12489 104 104 105 105 ! -- mass diag -- ! 106 zdiag_mass = ( glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos, dim=3 ) * e1e2t ) - pdiag_v ) * r1_ rdtice &106 zdiag_mass = ( glob_sum( 'icectl', SUM( v_i * rhoi + v_s * rhos, dim=3 ) * e1e2t ) - pdiag_v ) * r1_Dt_ice & 107 107 & + glob_sum( 'icectl', ( wfx_bog + wfx_bom + wfx_sum + wfx_sni + wfx_opw + wfx_res + wfx_dyn + & 108 108 & wfx_lam + wfx_pnd + wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + & … … 111 111 ! 112 112 ! -- salt diag -- ! 113 zdiag_salt = ( glob_sum( 'icectl', SUM( sv_i * rhoi , dim=3 ) * e1e2t ) - pdiag_s ) * r1_ rdtice &113 zdiag_salt = ( glob_sum( 'icectl', SUM( sv_i * rhoi , dim=3 ) * e1e2t ) - pdiag_s ) * r1_Dt_ice & 114 114 & + glob_sum( 'icectl', ( sfx_bri + sfx_bog + sfx_bom + sfx_sum + sfx_sni + & 115 115 & sfx_opw + sfx_res + sfx_dyn + sfx_sub + sfx_lam ) * e1e2t ) & … … 118 118 ! -- heat diag -- ! 119 119 zdiag_heat = ( glob_sum( 'icectl', ( SUM(SUM(e_i, dim=4), dim=3) + SUM(SUM(e_s, dim=4), dim=3) ) * e1e2t ) - pdiag_t & 120 & ) * r1_ rdtice &120 & ) * r1_Dt_ice & 121 121 & + glob_sum( 'icectl', ( hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 122 122 & - hfx_thd - hfx_dyn - hfx_res - hfx_sub - hfx_spr ) * e1e2t ) & … … 141 141 ! check conservation issues 142 142 IF( ABS(zdiag_mass) > zchk_m * rn_icechk_glo * zarea ) & 143 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * r dt_ice143 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * rDt_ice 144 144 IF( ABS(zdiag_salt) > zchk_s * rn_icechk_glo * zarea ) & 145 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * r dt_ice145 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * rDt_ice 146 146 IF( ABS(zdiag_heat) > zchk_t * rn_icechk_glo * zarea ) & 147 & WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * r dt_ice147 & WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * rDt_ice 148 148 ! check negative values 149 149 IF( zdiag_vmin < 0. ) WRITE(numout,*) cd_routine,' : violation v_i < 0 = ',zdiag_vmin … … 160 160 ! it does not mean UM is not conservative (it is checked with above prints) => update (09/2019): same for Prather now 161 161 !IF( ln_adv_Pra .AND. ABS(zvtrp) > zchk_m * rn_icechk_glo * zarea .AND. cd_routine == 'icedyn_adv' ) & 162 ! & WRITE(numout,*) cd_routine,' : violation adv scheme [kg] = ',zvtrp * r dt_ice162 ! & WRITE(numout,*) cd_routine,' : violation adv scheme [kg] = ',zvtrp * rDt_ice 163 163 ENDIF 164 164 ! … … 201 201 IF( lwp ) THEN 202 202 IF( ABS(zdiag_mass) > zchk_m * rn_icechk_glo * zarea ) & 203 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * r dt_ice203 & WRITE(numout,*) cd_routine,' : violation mass cons. [kg] = ',zdiag_mass * rDt_ice 204 204 IF( ABS(zdiag_salt) > zchk_s * rn_icechk_glo * zarea ) & 205 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * r dt_ice206 !!IF( ABS(zdiag_heat) > zchk_t * rn_icechk_glo * zarea ) WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * r dt_ice205 & WRITE(numout,*) cd_routine,' : violation salt cons. [g] = ',zdiag_salt * rDt_ice 206 !!IF( ABS(zdiag_heat) > zchk_t * rn_icechk_glo * zarea ) WRITE(numout,*) cd_routine,' : violation heat cons. [J] = ',zdiag_heat * rDt_ice 207 207 ENDIF 208 208 ! … … 250 250 251 251 ! -- mass diag -- ! 252 zdiag_mass = ( SUM( v_i * rhoi + v_s * rhos, dim=3 ) - pdiag_v ) * r1_ rdtice &252 zdiag_mass = ( SUM( v_i * rhoi + v_s * rhos, dim=3 ) - pdiag_v ) * r1_Dt_ice & 253 253 & + ( wfx_bog + wfx_bom + wfx_sum + wfx_sni + wfx_opw + wfx_res + wfx_dyn + wfx_lam + wfx_pnd + & 254 254 & wfx_snw_sni + wfx_snw_sum + wfx_snw_dyn + wfx_snw_sub + wfx_ice_sub + wfx_spr ) & … … 257 257 ! 258 258 ! -- salt diag -- ! 259 zdiag_salt = ( SUM( sv_i * rhoi , dim=3 ) - pdiag_s ) * r1_ rdtice &259 zdiag_salt = ( SUM( sv_i * rhoi , dim=3 ) - pdiag_s ) * r1_Dt_ice & 260 260 & + ( sfx_bri + sfx_bog + sfx_bom + sfx_sum + sfx_sni + sfx_opw + sfx_res + sfx_dyn + sfx_sub + sfx_lam ) & 261 261 & - pdiag_fs … … 263 263 ! 264 264 ! -- heat diag -- ! 265 zdiag_heat = ( SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) - pdiag_t ) * r1_ rdtice &265 zdiag_heat = ( SUM( SUM( e_i, dim=4 ), dim=3 ) + SUM( SUM( e_s, dim=4 ), dim=3 ) - pdiag_t ) * r1_Dt_ice & 266 266 & + ( hfx_sum + hfx_bom + hfx_bog + hfx_dif + hfx_opw + hfx_snw & 267 267 & - hfx_thd - hfx_dyn - hfx_res - hfx_sub - hfx_spr ) & … … 455 455 DO jl = 1, jpl 456 456 DO_2D_11_11 457 IF ( ( ( ABS( o_i(ji,jj,jl) ) > r dt_ice ) .OR. &457 IF ( ( ( ABS( o_i(ji,jj,jl) ) > rDt_ice ) .OR. & 458 458 ( ABS( o_i(ji,jj,jl) ) < 0._wp) ) .AND. & 459 459 ( a_i(ji,jj,jl) > 0._wp ) ) THEN … … 651 651 WRITE(numout,*) ' hfx_res : ', hfx_res(ji,jj) 652 652 WRITE(numout,*) ' qsb_ice_bot : ', qsb_ice_bot(ji,jj) 653 WRITE(numout,*) ' qlead : ', qlead(ji,jj) * r1_ rdtice653 WRITE(numout,*) ' qlead : ', qlead(ji,jj) * r1_Dt_ice 654 654 WRITE(numout,*) 655 655 WRITE(numout,*) ' - Salt fluxes at bottom interface ***' -
NEMO/trunk/src/ICE/icedia.F90
r12377 r12489 109 109 ! ---------------------------! 110 110 ! they must be kept outside an IF(iom_use) because of the call to dia_rst below 111 z_frc_volbot = r1_r au0 * glob_sum( 'icedia', -( wfx_ice(:,:) + wfx_snw(:,:) + wfx_err_sub(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-ocean112 z_frc_voltop = r1_r au0 * glob_sum( 'icedia', -( wfx_sub(:,:) + wfx_spr(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-atm113 z_frc_sal = r1_r au0 * glob_sum( 'icedia', - sfx(:,:) * e1e2t(:,:) ) * 1.e-9 ! salt fluxes ice/snow-ocean111 z_frc_volbot = r1_rho0 * glob_sum( 'icedia', -( wfx_ice(:,:) + wfx_snw(:,:) + wfx_err_sub(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-ocean 112 z_frc_voltop = r1_rho0 * glob_sum( 'icedia', -( wfx_sub(:,:) + wfx_spr(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater flux ice/snow-atm 113 z_frc_sal = r1_rho0 * glob_sum( 'icedia', - sfx(:,:) * e1e2t(:,:) ) * 1.e-9 ! salt fluxes ice/snow-ocean 114 114 z_frc_tembot = glob_sum( 'icedia', qt_oce_ai(:,:) * e1e2t(:,:) ) * 1.e-20 ! heat on top of ocean (and below ice) 115 115 z_frc_temtop = glob_sum( 'icedia', qt_atm_oi(:,:) * e1e2t(:,:) ) * 1.e-20 ! heat on top of ice-coean 116 116 ! 117 frc_voltop = frc_voltop + z_frc_voltop * r dt_ice ! km3118 frc_volbot = frc_volbot + z_frc_volbot * r dt_ice ! km3119 frc_sal = frc_sal + z_frc_sal * r dt_ice ! km3*pss120 frc_temtop = frc_temtop + z_frc_temtop * r dt_ice ! 1.e20 J121 frc_tembot = frc_tembot + z_frc_tembot * r dt_ice ! 1.e20 J117 frc_voltop = frc_voltop + z_frc_voltop * rDt_ice ! km3 118 frc_volbot = frc_volbot + z_frc_volbot * rDt_ice ! km3 119 frc_sal = frc_sal + z_frc_sal * rDt_ice ! km3*pss 120 frc_temtop = frc_temtop + z_frc_temtop * rDt_ice ! 1.e20 J 121 frc_tembot = frc_tembot + z_frc_tembot * rDt_ice ! 1.e20 J 122 122 123 123 CALL iom_put( 'ibgfrcvoltop' , frc_voltop ) ! vol forcing ice/snw-atm (km3 equivalent ocean water) … … 128 128 129 129 IF( iom_use('ibgfrchfxtop') .OR. iom_use('ibgfrchfxbot') ) THEN 130 CALL iom_put( 'ibgfrchfxtop' , frc_temtop * z1_e1e2 * 1.e-20 * kt*r dt ) ! heat on top of ice/snw/ocean (W/m2)131 CALL iom_put( 'ibgfrchfxbot' , frc_tembot * z1_e1e2 * 1.e-20 * kt*r dt ) ! heat on top of ocean(below ice) (W/m2)130 CALL iom_put( 'ibgfrchfxtop' , frc_temtop * z1_e1e2 * 1.e-20 * kt*rn_Dt ) ! heat on top of ice/snw/ocean (W/m2) 131 CALL iom_put( 'ibgfrchfxbot' , frc_tembot * z1_e1e2 * 1.e-20 * kt*rn_Dt ) ! heat on top of ocean(below ice) (W/m2) 132 132 ENDIF 133 133 … … 137 137 IF( iom_use('ibgvolume') .OR. iom_use('ibgsaltco') .OR. iom_use('ibgheatco') .OR. iom_use('ibgheatfx') ) THEN 138 138 139 zdiff_vol = r1_r au0 * glob_sum( 'icedia', ( rhoi*vt_i(:,:) + rhos*vt_s(:,:) - vol_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater trend (km3)140 zdiff_sal = r1_r au0 * glob_sum( 'icedia', ( rhoi*st_i(:,:) - sal_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! salt content trend (km3*pss)139 zdiff_vol = r1_rho0 * glob_sum( 'icedia', ( rhoi*vt_i(:,:) + rhos*vt_s(:,:) - vol_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! freshwater trend (km3) 140 zdiff_sal = r1_rho0 * glob_sum( 'icedia', ( rhoi*st_i(:,:) - sal_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-9 ! salt content trend (km3*pss) 141 141 zdiff_tem = glob_sum( 'icedia', ( et_i(:,:) + et_s(:,:) - tem_loc_ini(:,:) ) * e1e2t(:,:) ) * 1.e-20 ! heat content trend (1.e20 J) 142 142 ! + SUM( qevap_ice * a_i_b, dim=3 ) !! clem: I think this term should not be there (but needs a check) -
NEMO/trunk/src/ICE/icedyn_adv.F90
r12377 r12489 93 93 ! diagnostics 94 94 !------------ 95 diag_trp_ei(:,:) = SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_ rdtice96 diag_trp_es(:,:) = SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_ rdtice97 diag_trp_sv(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_ rdtice98 diag_trp_vi(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_ rdtice99 diag_trp_vs(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_ rdtice95 diag_trp_ei(:,:) = SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice 96 diag_trp_es(:,:) = SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 97 diag_trp_sv(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice 98 diag_trp_vi(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice 99 diag_trp_vs(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice 100 100 IF( iom_use('icemtrp') ) CALL iom_put( 'icemtrp' , diag_trp_vi * rhoi ) ! ice mass transport 101 101 IF( iom_use('snwmtrp') ) CALL iom_put( 'snwmtrp' , diag_trp_vs * rhos ) ! snw mass transport -
NEMO/trunk/src/ICE/icedyn_adv_pra.F90
r12377 r12489 122 122 ! Note: the advection split is applied at the next time-step in order to avoid blocking global comm. 123 123 ! this should not affect too much the stability 124 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * r dt_ice * r1_e1u(:,:) )125 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * r dt_ice * r1_e2v(:,:) ) )124 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * rDt_ice * r1_e1u(:,:) ) 125 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * rDt_ice * r1_e2v(:,:) ) ) 126 126 127 127 ! non-blocking global communication send zcflnow and receive zcflprv … … 131 131 ELSE ; icycle = 1 132 132 ENDIF 133 zdt = r dt_ice / REAL(icycle)133 zdt = rDt_ice / REAL(icycle) 134 134 135 135 ! --- transport --- ! … … 687 687 IF ( pv_i(ji,jj,jl) > 0._wp ) THEN 688 688 ! 689 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (r au0-rhoi) * r1_rhos )689 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (rho0-rhoi) * r1_rhos ) 690 690 ! 691 691 IF( zvs_excess > 0._wp ) THEN ! snow-ice interface deplets below the ocean surface -
NEMO/trunk/src/ICE/icedyn_adv_umx.F90
r12377 r12489 128 128 ! Note: the advection split is applied at the next time-step in order to avoid blocking global comm. 129 129 ! this should not affect too much the stability 130 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * r dt_ice * r1_e1u(:,:) )131 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * r dt_ice * r1_e2v(:,:) ) )130 zcflnow(1) = MAXVAL( ABS( pu_ice(:,:) ) * rDt_ice * r1_e1u(:,:) ) 131 zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * rDt_ice * r1_e2v(:,:) ) ) 132 132 133 133 ! non-blocking global communication send zcflnow and receive zcflprv … … 137 137 ELSE ; icycle = 1 138 138 ENDIF 139 zdt = r dt_ice / REAL(icycle)139 zdt = rDt_ice / REAL(icycle) 140 140 141 141 ! --- transport --- ! … … 1505 1505 IF ( pv_i(ji,jj,jl) > 0._wp ) THEN 1506 1506 ! 1507 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (r au0-rhoi) * r1_rhos )1507 zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (rho0-rhoi) * r1_rhos ) 1508 1508 ! 1509 1509 IF( zvs_excess > 0._wp ) THEN ! snow-ice interface deplets below the ocean surface -
NEMO/trunk/src/ICE/icedyn_rdgrft.F90
r12377 r12489 250 250 ELSE 251 251 iterate_ridging = 1 252 zdivu (ji) = zfac * r1_ rdtice252 zdivu (ji) = zfac * r1_Dt_ice 253 253 closing_net(ji) = MAX( 0._wp, -zdivu(ji) ) 254 254 opning (ji) = MAX( 0._wp, zdivu(ji) ) … … 455 455 DO jl = 1, jpl 456 456 DO ji = 1, npti 457 zfac = apartf(ji,jl) * closing_gross(ji) * r dt_ice457 zfac = apartf(ji,jl) * closing_gross(ji) * rDt_ice 458 458 IF( zfac > pa_i(ji,jl) .AND. apartf(ji,jl) /= 0._wp ) THEN 459 closing_gross(ji) = pa_i(ji,jl) / apartf(ji,jl) * r1_ rdtice459 closing_gross(ji) = pa_i(ji,jl) / apartf(ji,jl) * r1_Dt_ice 460 460 ENDIF 461 461 END DO … … 467 467 ! Reduce the opening rate in proportion 468 468 DO ji = 1, npti 469 zfac = pato_i(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * r dt_ice469 zfac = pato_i(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * rDt_ice 470 470 IF( zfac < 0._wp ) THEN ! would lead to negative ato_i 471 opning(ji) = apartf(ji,0) * closing_gross(ji) - pato_i(ji) * r1_ rdtice471 opning(ji) = apartf(ji,0) * closing_gross(ji) - pato_i(ji) * r1_Dt_ice 472 472 ELSEIF( zfac > zasum(ji) ) THEN ! would lead to ato_i > asum 473 opning(ji) = apartf(ji,0) * closing_gross(ji) + ( zasum(ji) - pato_i(ji) ) * r1_ rdtice473 opning(ji) = apartf(ji,0) * closing_gross(ji) + ( zasum(ji) - pato_i(ji) ) * r1_Dt_ice 474 474 ENDIF 475 475 END DO … … 515 515 !-------------------------------------------------------- 516 516 DO ji = 1, npti 517 ato_i_1d(ji) = MAX( 0._wp, ato_i_1d(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * r dt_ice )517 ato_i_1d(ji) = MAX( 0._wp, ato_i_1d(ji) + ( opning(ji) - apartf(ji,0) * closing_gross(ji) ) * rDt_ice ) 518 518 END DO 519 519 … … 533 533 534 534 ! area of ridging / rafting ice (airdg1) and of new ridge (airdg2) 535 airdg1 = aridge(ji,jl1) * closing_gross(ji) * r dt_ice536 airft1 = araft (ji,jl1) * closing_gross(ji) * r dt_ice535 airdg1 = aridge(ji,jl1) * closing_gross(ji) * rDt_ice 536 airft1 = araft (ji,jl1) * closing_gross(ji) * rDt_ice 537 537 538 538 airdg2(ji) = airdg1 * hi_hrdg(ji,jl1) … … 575 575 576 576 ! Ice-ocean exchanges associated with ice porosity 577 wfx_dyn_1d(ji) = wfx_dyn_1d(ji) - vsw * rhoi * r1_ rdtice ! increase in ice volume due to seawater frozen in voids578 sfx_dyn_1d(ji) = sfx_dyn_1d(ji) - vsw * sss_1d(ji) * rhoi * r1_ rdtice579 hfx_dyn_1d(ji) = hfx_dyn_1d(ji) + ersw(ji) * r1_ rdtice ! > 0 [W.m-2]577 wfx_dyn_1d(ji) = wfx_dyn_1d(ji) - vsw * rhoi * r1_Dt_ice ! increase in ice volume due to seawater frozen in voids 578 sfx_dyn_1d(ji) = sfx_dyn_1d(ji) - vsw * sss_1d(ji) * rhoi * r1_Dt_ice 579 hfx_dyn_1d(ji) = hfx_dyn_1d(ji) + ersw(ji) * r1_Dt_ice ! > 0 [W.m-2] 580 580 581 581 ! Put the snow lost by ridging into the ocean 582 582 ! Note that esrdg > 0; the ocean must cool to melt snow. If the ocean temp = Tf already, new ice must grow. 583 583 wfx_snw_dyn_1d(ji) = wfx_snw_dyn_1d(ji) + ( rhos * vsrdg(ji) * ( 1._wp - rn_fsnwrdg ) & ! fresh water source for ocean 584 & + rhos * vsrft(ji) * ( 1._wp - rn_fsnwrft ) ) * r1_ rdtice584 & + rhos * vsrft(ji) * ( 1._wp - rn_fsnwrft ) ) * r1_Dt_ice 585 585 586 586 ! virtual salt flux to keep salinity constant 587 587 IF( nn_icesal /= 2 ) THEN 588 588 sirdg2(ji) = sirdg2(ji) - vsw * ( sss_1d(ji) - s_i_1d(ji) ) ! ridge salinity = s_i 589 sfx_bri_1d(ji) = sfx_bri_1d(ji) + sss_1d(ji) * vsw * rhoi * r1_ rdtice & ! put back sss_m into the ocean590 & - s_i_1d(ji) * vsw * rhoi * r1_ rdtice ! and get s_i from the ocean589 sfx_bri_1d(ji) = sfx_bri_1d(ji) + sss_1d(ji) * vsw * rhoi * r1_Dt_ice & ! put back sss_m into the ocean 590 & - s_i_1d(ji) * vsw * rhoi * r1_Dt_ice ! and get s_i from the ocean 591 591 ENDIF 592 592 … … 611 611 IF( apartf(ji,jl1) > 0._wp .AND. closing_gross(ji) > 0._wp ) THEN 612 612 ! Compute ridging /rafting fractions 613 afrdg = aridge(ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)614 afrft = araft (ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)613 afrdg = aridge(ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 614 afrft = araft (ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 615 615 ! Compute ridging /rafting ice and new ridges for es 616 616 esrdg(ji,jk) = ze_s_2d (ji,jk,jl1) * afrdg … … 618 618 ! Put the snow lost by ridging into the ocean 619 619 hfx_dyn_1d(ji) = hfx_dyn_1d(ji) + ( - esrdg(ji,jk) * ( 1._wp - rn_fsnwrdg ) & ! heat sink for ocean (<0, W.m-2) 620 & - esrft(ji,jk) * ( 1._wp - rn_fsnwrft ) ) * r1_ rdtice620 & - esrft(ji,jk) * ( 1._wp - rn_fsnwrft ) ) * r1_Dt_ice 621 621 ! 622 622 ! Remove energy of new ridge to each category jl1 … … 632 632 IF( apartf(ji,jl1) > 0._wp .AND. closing_gross(ji) > 0._wp ) THEN 633 633 ! Compute ridging /rafting fractions 634 afrdg = aridge(ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)635 afrft = araft (ji,jl1) * closing_gross(ji) * r dt_ice * z1_ai(ji)634 afrdg = aridge(ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 635 afrft = araft (ji,jl1) * closing_gross(ji) * rDt_ice * z1_ai(ji) 636 636 ! Compute ridging ice and new ridges for ei 637 637 eirdg(ji,jk) = ze_i_2d (ji,jk,jl1) * afrdg + ersw(ji) * r1_nlay_i -
NEMO/trunk/src/ICE/icedyn_rhg_evp.F90
r12377 r12489 116 116 INTEGER :: jter ! local integers 117 117 ! 118 REAL(wp) :: zrhoco ! r au0 * rn_cio118 REAL(wp) :: zrhoco ! rho0 * rn_cio 119 119 REAL(wp) :: zdtevp, z1_dtevp ! time step for subcycling 120 120 REAL(wp) :: ecc2, z1_ecc2 ! square of yield ellipse eccenticity … … 213 213 ! 1) define some variables and initialize arrays 214 214 !------------------------------------------------------------------------------! 215 zrhoco = r au0 * rn_cio215 zrhoco = rho0 * rn_cio 216 216 217 217 ! ecc2: square of yield ellipse eccenticrity … … 220 220 221 221 ! Time step for subcycling 222 zdtevp = r dt_ice / REAL( nn_nevp )222 zdtevp = rDt_ice / REAL( nn_nevp ) 223 223 z1_dtevp = 1._wp / zdtevp 224 224 225 225 ! alpha parameters (Bouillon 2009) 226 226 IF( .NOT. ln_aEVP ) THEN 227 zalph1 = ( 2._wp * rn_relast * r dt_ice ) * z1_dtevp227 zalph1 = ( 2._wp * rn_relast * rDt_ice ) * z1_dtevp 228 228 zalph2 = zalph1 * z1_ecc2 229 229 -
NEMO/trunk/src/ICE/iceistate.F90
r12399 r12489 374 374 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 375 375 ! 376 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_r au0377 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_r au0376 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0 377 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0 378 378 ! 379 379 IF( .NOT.ln_linssh ) THEN -
NEMO/trunk/src/ICE/icestp.F90
r12377 r12489 338 338 IF( ln_bdy .AND. ln_icediachk ) CALL ctl_warn('par_init: online conservation check does not work with BDY') 339 339 ! 340 r dt_ice = REAL(nn_fsbc) * rdt !--- sea-ice timestep and its inverse341 r1_ rdtice = 1._wp / rdt_ice340 rDt_ice = REAL(nn_fsbc) * rn_Dt !--- sea-ice timestep and its inverse 341 r1_Dt_ice = 1._wp / rDt_ice 342 342 IF(lwp) WRITE(numout,*) 343 IF(lwp) WRITE(numout,*) ' ice timestep r dt_ice = nn_fsbc*rdt = ', rdt_ice343 IF(lwp) WRITE(numout,*) ' ice timestep rDt_ice = nn_fsbc*rn_Dt = ', rDt_ice 344 344 ! 345 345 r1_nlay_i = 1._wp / REAL( nlay_i, wp ) !--- inverse of nlay_i and nlay_s -
NEMO/trunk/src/ICE/icethd.F90
r12377 r12489 116 116 ELSE ! if no ice dynamics => transmit directly the atmospheric stress to the ocean 117 117 DO_2D_00_00 118 zfric(ji,jj) = r1_r au0 * SQRT( 0.5_wp * &118 zfric(ji,jj) = r1_rho0 * SQRT( 0.5_wp * & 119 119 & ( utau(ji,jj) * utau(ji,jj) + utau(ji-1,jj) * utau(ji-1,jj) & 120 120 & + vtau(ji,jj) * vtau(ji,jj) + vtau(ji,jj-1) * vtau(ji,jj-1) ) ) * tmask(ji,jj,1) … … 136 136 ! 137 137 ! --- Energy received in the lead from atm-oce exchanges, zqld is defined everywhere (J.m-2) --- ! 138 zqld = tmask(ji,jj,1) * r dt_ice * &138 zqld = tmask(ji,jj,1) * rDt_ice * & 139 139 & ( ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) * frq_m(ji,jj) + & 140 140 & ( 1._wp - at_i_b(ji,jj) ) * qns_oce(ji,jj) + qemp_oce(ji,jj) ) 141 141 142 142 ! --- Energy needed to bring ocean surface layer until its freezing (mostly<0 but >0 if supercooling, J.m-2) --- ! 143 zqfr = r au0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) * tmask(ji,jj,1) ! both < 0 (t_bo < sst) and > 0 (t_bo > sst)143 zqfr = rho0 * rcp * e3t_m(ji,jj) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) * tmask(ji,jj,1) ! both < 0 (t_bo < sst) and > 0 (t_bo > sst) 144 144 zqfr_neg = MIN( zqfr , 0._wp ) ! only < 0 145 145 146 146 ! --- Sensible ocean-to-ice heat flux (mostly>0 but <0 if supercooling, W/m2) 147 147 zfric_u = MAX( SQRT( zfric(ji,jj) ), zfric_umin ) 148 qsb_ice_bot(ji,jj) = rswitch * r au0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2149 150 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_ rdtice / MAX( at_i(ji,jj), epsi10 ) )148 qsb_ice_bot(ji,jj) = rswitch * rho0 * rcp * zch * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2 149 150 qsb_ice_bot(ji,jj) = rswitch * MIN( qsb_ice_bot(ji,jj), - zqfr_neg * r1_Dt_ice / MAX( at_i(ji,jj), epsi10 ) ) 151 151 ! upper bound for qsb_ice_bot: the heat retrieved from the ocean must be smaller than the heat necessary to reach 152 152 ! the freezing point, so that we do not have SST < T_freeze … … 154 154 155 155 !-- Energy Budget of the leads (J.m-2), source of ice growth in open water. Must be < 0 to form ice 156 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * r dt_ice ) - zqfr )156 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rDt_ice ) - zqfr ) 157 157 158 158 ! If there is ice and leads are warming => transfer energy from the lead budget and use it for bottom melting 159 159 ! If the grid cell is fully covered by ice (no leads) => transfer energy from the lead budget to the ice bottom budget 160 160 IF( ( zqld >= 0._wp .AND. at_i(ji,jj) > 0._wp ) .OR. at_i(ji,jj) >= (1._wp - epsi10) ) THEN 161 fhld (ji,jj) = rswitch * zqld * r1_ rdtice / MAX( at_i(ji,jj), epsi10 ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90161 fhld (ji,jj) = rswitch * zqld * r1_Dt_ice / MAX( at_i(ji,jj), epsi10 ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90 162 162 qlead(ji,jj) = 0._wp 163 163 ELSE … … 185 185 ! Third step in iceupdate.F90 : heat from ice-ocean mass exchange (zf_mass) + solar 186 186 qt_oce_ai(:,:) = ( 1._wp - at_i_b(:,:) ) * qns_oce(:,:) + qemp_oce(:,:) & ! Non solar heat flux received by the ocean 187 & - qlead(:,:) * r1_ rdtice & ! heat flux taken from the ocean where there is open water ice formation187 & - qlead(:,:) * r1_Dt_ice & ! heat flux taken from the ocean where there is open water ice formation 188 188 & - at_i (:,:) * qsb_ice_bot(:,:) & ! heat flux taken by sensible flux 189 189 & - at_i (:,:) * fhld (:,:) ! heat flux taken during bottom growth/melt -
NEMO/trunk/src/ICE/icethd_da.F90
r12377 r12489 128 128 zwlat = zm1 * ( MAX( 0._wp, sst_1d(ji) - ( t_bo_1d(ji) - rt0 ) ) )**zm2 ! Melt speed rate [m/s] 129 129 ! 130 zda_tot(ji) = MIN( zwlat * zperi * r dt_ice, at_i_1d(ji) ) ! sea ice concentration decrease (>0)130 zda_tot(ji) = MIN( zwlat * zperi * rDt_ice, at_i_1d(ji) ) ! sea ice concentration decrease (>0) 131 131 132 132 ! --- Distribute reduction among ice categories and calculate associated ice-ocean fluxes --- ! … … 137 137 138 138 ! Contribution to salt flux 139 sfx_lam_1d(ji) = sfx_lam_1d(ji) + rhoi * h_i_1d(ji) * zda * s_i_1d(ji) * r1_ rdtice139 sfx_lam_1d(ji) = sfx_lam_1d(ji) + rhoi * h_i_1d(ji) * zda * s_i_1d(ji) * r1_Dt_ice 140 140 141 141 ! Contribution to heat flux into the ocean [W.m-2], (<0) 142 hfx_thd_1d(ji) = hfx_thd_1d(ji) - zda * r1_ rdtice * ( h_i_1d(ji) * r1_nlay_i * SUM( e_i_1d(ji,1:nlay_i) ) &142 hfx_thd_1d(ji) = hfx_thd_1d(ji) - zda * r1_Dt_ice * ( h_i_1d(ji) * r1_nlay_i * SUM( e_i_1d(ji,1:nlay_i) ) & 143 143 + h_s_1d(ji) * r1_nlay_s * SUM( e_s_1d(ji,1:nlay_s) ) ) 144 144 145 145 ! Contribution to mass flux 146 wfx_lam_1d(ji) = wfx_lam_1d(ji) + zda * r1_ rdtice * ( rhoi * h_i_1d(ji) + rhos * h_s_1d(ji) )146 wfx_lam_1d(ji) = wfx_lam_1d(ji) + zda * r1_Dt_ice * ( rhoi * h_i_1d(ji) + rhos * h_s_1d(ji) ) 147 147 148 148 ! new concentration -
NEMO/trunk/src/ICE/icethd_dh.F90
r10786 r12489 76 76 REAL(wp) :: zgrr ! bottom growth rate 77 77 REAL(wp) :: zt_i_new ! bottom formation temperature 78 REAL(wp) :: z1_rho ! 1/(rhos+r au0-rhoi)78 REAL(wp) :: z1_rho ! 1/(rhos+rho0-rhoi) 79 79 80 80 REAL(wp) :: zQm ! enthalpy exchanged with the ocean (J/m2), >0 towards the ocean … … 130 130 ! 131 131 DO ji = 1, npti 132 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * r dt_ice )132 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * rDt_ice ) 133 133 END DO 134 134 ! … … 138 138 zdum = qns_ice_1d(ji) + qsr_ice_1d(ji) - qtr_ice_top_1d(ji) - qcn_ice_top_1d(ji) 139 139 qml_ice_1d(ji) = zdum * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - rt0 ) ) 140 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * r dt_ice )140 zq_top(ji) = MAX( 0._wp, qml_ice_1d(ji) * rDt_ice ) 141 141 END DO 142 142 ! … … 145 145 DO ji = 1, npti 146 146 zf_tt(ji) = qcn_ice_bot_1d(ji) + qsb_ice_bot_1d(ji) + fhld_1d(ji) 147 zq_bot(ji) = MAX( 0._wp, zf_tt(ji) * r dt_ice )147 zq_bot(ji) = MAX( 0._wp, zf_tt(ji) * rDt_ice ) 148 148 END DO 149 149 … … 172 172 DO ji = 1, npti 173 173 IF( t_s_1d(ji,jk) > rt0 ) THEN 174 hfx_res_1d (ji) = hfx_res_1d (ji) + e_s_1d(ji,jk) * zh_s(ji,jk) * a_i_1d(ji) * r1_ rdtice ! heat flux to the ocean [W.m-2], < 0175 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + rhos * zh_s(ji,jk) * a_i_1d(ji) * r1_ rdtice ! mass flux174 hfx_res_1d (ji) = hfx_res_1d (ji) + e_s_1d(ji,jk) * zh_s(ji,jk) * a_i_1d(ji) * r1_Dt_ice ! heat flux to the ocean [W.m-2], < 0 175 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) + rhos * zh_s(ji,jk) * a_i_1d(ji) * r1_Dt_ice ! mass flux 176 176 ! updates 177 177 dh_s_mlt(ji) = dh_s_mlt(ji) - zh_s(ji,jk) … … 193 193 ! 194 194 ! --- precipitation --- 195 zdh_s_pre (ji) = zsnw(ji) * sprecip_1d(ji) * r dt_ice * r1_rhos / at_i_1d(ji) ! thickness change195 zdh_s_pre (ji) = zsnw(ji) * sprecip_1d(ji) * rDt_ice * r1_rhos / at_i_1d(ji) ! thickness change 196 196 zqprec (ji) = - qprec_ice_1d(ji) ! enthalpy of the precip (>0, J.m-3) 197 197 ! 198 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_ rdtice ! heat flux from snow precip (>0, W.m-2)199 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhos * a_i_1d(ji) * zdh_s_pre(ji) * r1_ rdtice ! mass flux, <0198 hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_Dt_ice ! heat flux from snow precip (>0, W.m-2) 199 wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhos * a_i_1d(ji) * zdh_s_pre(ji) * r1_Dt_ice ! mass flux, <0 200 200 201 201 ! --- melt of falling snow --- … … 203 203 zdeltah (ji,1) = - rswitch * zq_top(ji) / MAX( zqprec(ji) , epsi20 ) ! thickness change 204 204 zdeltah (ji,1) = MAX( - zdh_s_pre(ji), zdeltah(ji,1) ) ! bound melting 205 hfx_snw_1d (ji) = hfx_snw_1d (ji) - zdeltah(ji,1) * a_i_1d(ji) * zqprec(ji) * r1_ rdtice ! heat used to melt snow (W.m-2, >0)206 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_ rdtice ! snow melting only = water into the ocean (then without snow precip), >0205 hfx_snw_1d (ji) = hfx_snw_1d (ji) - zdeltah(ji,1) * a_i_1d(ji) * zqprec(ji) * r1_Dt_ice ! heat used to melt snow (W.m-2, >0) 206 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_Dt_ice ! snow melting only = water into the ocean (then without snow precip), >0 207 207 208 208 ! updates available heat + precipitations after melting … … 243 243 zdh_s_mel(ji) = zdh_s_mel(ji) + zdeltah(ji,jk) 244 244 245 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d (ji,jk) * r1_ rdtice ! heat used to melt snow(W.m-2, >0)246 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! snow melting only = water into the ocean (then without snow precip)245 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * e_s_1d (ji,jk) * r1_Dt_ice ! heat used to melt snow(W.m-2, >0) 246 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! snow melting only = water into the ocean (then without snow precip) 247 247 248 248 ! updates available heat + thickness … … 264 264 IF( evap_ice_1d(ji) > 0._wp ) THEN 265 265 ! 266 zdh_s_sub (ji) = MAX( - h_s_1d(ji) , - evap_ice_1d(ji) * r1_rhos * r dt_ice )267 zevap_rema(ji) = evap_ice_1d(ji) * r dt_ice + zdh_s_sub(ji) * rhos ! remaining evap in kg.m-2 (used for ice melting later on)266 zdh_s_sub (ji) = MAX( - h_s_1d(ji) , - evap_ice_1d(ji) * r1_rhos * rDt_ice ) 267 zevap_rema(ji) = evap_ice_1d(ji) * rDt_ice + zdh_s_sub(ji) * rhos ! remaining evap in kg.m-2 (used for ice melting later on) 268 268 zdeltah (ji,1) = MAX( zdh_s_sub(ji), - zdh_s_pre(ji) ) 269 269 270 270 hfx_sub_1d (ji) = hfx_sub_1d(ji) + & ! Heat flux by sublimation [W.m-2], < 0 (sublimate snow that had fallen, then pre-existing snow) 271 271 & ( zdeltah(ji,1) * zqprec(ji) + ( zdh_s_sub(ji) - zdeltah(ji,1) ) * e_s_1d(ji,1) ) & 272 & * a_i_1d(ji) * r1_ rdtice273 wfx_snw_sub_1d(ji) = wfx_snw_sub_1d(ji) - rhos * a_i_1d(ji) * zdh_s_sub(ji) * r1_ rdtice ! Mass flux by sublimation272 & * a_i_1d(ji) * r1_Dt_ice 273 wfx_snw_sub_1d(ji) = wfx_snw_sub_1d(ji) - rhos * a_i_1d(ji) * zdh_s_sub(ji) * r1_Dt_ice ! Mass flux by sublimation 274 274 275 275 ! new snow thickness … … 328 328 zfmdt = - rhoi * zdeltah(ji,jk) ! Recompute mass flux [kg/m2, >0] 329 329 330 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_ rdtice ! Heat flux to the ocean [W.m-2], <0330 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_Dt_ice ! Heat flux to the ocean [W.m-2], <0 331 331 ! ice enthalpy zEi is "sent" to the ocean 332 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux332 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux 333 333 ! using s_i_1d and not sz_i_1d(jk) is ok 334 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux334 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 335 335 336 336 ELSE !-- Surface melting … … 354 354 zQm = zfmdt * zEw ! Energy of the melt water sent to the ocean [J/m2, <0] 355 355 356 sfx_sum_1d(ji) = sfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux >0356 sfx_sum_1d(ji) = sfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux >0 357 357 ! using s_i_1d and not sz_i_1d(jk) is ok) 358 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux [W.m-2], < 0359 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_ rdtice ! Heat flux used in this process [W.m-2], > 0358 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux [W.m-2], < 0 359 hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_Dt_ice ! Heat flux used in this process [W.m-2], > 0 360 360 ! 361 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux361 wfx_sum_1d(ji) = wfx_sum_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 362 362 363 363 END IF … … 369 369 dh_i_sub(ji) = dh_i_sub(ji) + zdum 370 370 371 sfx_sub_1d(ji) = sfx_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * s_i_1d(ji) * r1_ rdtice ! Salt flux >0371 sfx_sub_1d(ji) = sfx_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * s_i_1d(ji) * r1_Dt_ice ! Salt flux >0 372 372 ! clem: flux is sent to the ocean for simplicity 373 373 ! but salt should remain in the ice except 374 374 ! if all ice is melted. => must be corrected 375 hfx_sub_1d(ji) = hfx_sub_1d(ji) + zdum * e_i_1d(ji,jk) * a_i_1d(ji) * r1_ rdtice ! Heat flux [W.m-2], < 0376 377 wfx_ice_sub_1d(ji) = wfx_ice_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * r1_ rdtice ! Mass flux > 0375 hfx_sub_1d(ji) = hfx_sub_1d(ji) + zdum * e_i_1d(ji,jk) * a_i_1d(ji) * r1_Dt_ice ! Heat flux [W.m-2], < 0 376 377 wfx_ice_sub_1d(ji) = wfx_ice_sub_1d(ji) - rhoi * a_i_1d(ji) * zdum * r1_Dt_ice ! Mass flux > 0 378 378 379 379 ! update remaining mass flux … … 400 400 ! remaining "potential" evap is sent to ocean 401 401 DO ji = 1, npti 402 wfx_err_sub_1d(ji) = wfx_err_sub_1d(ji) - zevap_rema(ji) * a_i_1d(ji) * r1_ rdtice ! <=0 (net evap for the ocean in kg.m-2.s-1)402 wfx_err_sub_1d(ji) = wfx_err_sub_1d(ji) - zevap_rema(ji) * a_i_1d(ji) * r1_Dt_ice ! <=0 (net evap for the ocean in kg.m-2.s-1) 403 403 END DO 404 404 … … 428 428 !--- zswi12 if 2.0e-8 < dh/dt < 3.6e-7 429 429 !--- zswi2 if dh/dt > 3.6e-7 430 zgrr = MIN( 1.0e-3, MAX ( dh_i_bog(ji) * r1_ rdtice , epsi10 ) )430 zgrr = MIN( 1.0e-3, MAX ( dh_i_bog(ji) * r1_Dt_ice , epsi10 ) ) 431 431 zswi2 = MAX( 0._wp , SIGN( 1._wp , zgrr - 3.6e-7 ) ) 432 432 zswi12 = MAX( 0._wp , SIGN( 1._wp , zgrr - 2.0e-8 ) ) * ( 1.0 - zswi2 ) … … 448 448 zdE = zEi - zEw ! Specific enthalpy difference (J/kg, <0) 449 449 450 dh_i_bog(ji) = r dt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoi ) )450 dh_i_bog(ji) = rDt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoi ) ) 451 451 452 452 END DO … … 454 454 zfmdt = - rhoi * dh_i_bog(ji) ! Mass flux x time step (kg/m2, < 0) 455 455 456 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux to the ocean [W.m-2], >0457 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_ rdtice ! Heat flux used in this process [W.m-2], <0458 459 sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * s_i_new(ji) * r1_ rdtice ! Salt flux, <0460 461 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * r1_ rdtice ! Mass flux, <0456 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux to the ocean [W.m-2], >0 457 hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_Dt_ice ! Heat flux used in this process [W.m-2], <0 458 459 sfx_bog_1d(ji) = sfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * s_i_new(ji) * r1_Dt_ice ! Salt flux, <0 460 461 wfx_bog_1d(ji) = wfx_bog_1d(ji) - rhoi * a_i_1d(ji) * dh_i_bog(ji) * r1_Dt_ice ! Mass flux, <0 462 462 463 463 ! update heat content (J.m-2) and layer thickness … … 490 490 zfmdt = - zdeltah(ji,jk) * rhoi ! Mass flux x time step > 0 491 491 492 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_ rdtice ! Heat flux to the ocean [W.m-2], <0492 hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_Dt_ice ! Heat flux to the ocean [W.m-2], <0 493 493 ! ice enthalpy zEi is "sent" to the ocean 494 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux494 sfx_res_1d(ji) = sfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux 495 495 ! using s_i_1d and not sz_i_1d(jk) is ok 496 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux496 wfx_res_1d(ji) = wfx_res_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 497 497 498 498 ! update heat content (J.m-2) and layer thickness … … 520 520 zQm = zfmdt * zEw ! Heat exchanged with ocean 521 521 522 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux to the ocean [W.m-2], <0523 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_ rdtice ! Heat used in this process [W.m-2], >0524 525 sfx_bom_1d(ji) = sfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_ rdtice ! Salt flux522 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux to the ocean [W.m-2], <0 523 hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_Dt_ice ! Heat used in this process [W.m-2], >0 524 525 sfx_bom_1d(ji) = sfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * s_i_1d(ji) * r1_Dt_ice ! Salt flux 526 526 ! using s_i_1d and not sz_i_1d(jk) is ok 527 527 528 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_ rdtice ! Mass flux528 wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoi * a_i_1d(ji) * zdeltah(ji,jk) * r1_Dt_ice ! Mass flux 529 529 530 530 ! update heat content (J.m-2) and layer thickness … … 556 556 557 557 zq_rema(ji) = zq_rema(ji) + zdeltah(ji,1) * e_s_1d(ji,1) ! update available heat (J.m-2) 558 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * e_s_1d(ji,1) * r1_ rdtice ! Heat used to melt snow, W.m-2 (>0)559 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_ rdtice ! Mass flux558 hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * e_s_1d(ji,1) * r1_Dt_ice ! Heat used to melt snow, W.m-2 (>0) 559 wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) - rhos * a_i_1d(ji) * zdeltah(ji,1) * r1_Dt_ice ! Mass flux 560 560 dh_s_mlt(ji) = dh_s_mlt(ji) + zdeltah(ji,1) 561 561 ! 562 562 ! Remaining heat flux (W.m-2) is sent to the ocean heat budget 563 qt_oce_ai_1d(ji) = qt_oce_ai_1d(ji) + ( zq_rema(ji) * a_i_1d(ji) ) * r1_ rdtice563 qt_oce_ai_1d(ji) = qt_oce_ai_1d(ji) + ( zq_rema(ji) * a_i_1d(ji) ) * r1_Dt_ice 564 564 565 565 IF( ln_icectl .AND. zq_rema(ji) < 0. .AND. lwp ) WRITE(numout,*) 'ALERTE zq_rema <0 = ', zq_rema(ji) … … 571 571 ! When snow load excesses Archimede's limit, snow-ice interface goes down under sea-level, 572 572 ! flooding of seawater transforms snow into ice dh_snowice is positive for the ice 573 z1_rho = 1._wp / ( rhos+r au0-rhoi )573 z1_rho = 1._wp / ( rhos+rho0-rhoi ) 574 574 DO ji = 1, npti 575 575 ! 576 dh_snowice(ji) = MAX( 0._wp , ( rhos * h_s_1d(ji) + (rhoi-r au0) * h_i_1d(ji) ) * z1_rho )576 dh_snowice(ji) = MAX( 0._wp , ( rhos * h_s_1d(ji) + (rhoi-rho0) * h_i_1d(ji) ) * z1_rho ) 577 577 578 578 h_i_1d(ji) = h_i_1d(ji) + dh_snowice(ji) … … 584 584 zQm = zfmdt * zEw 585 585 586 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_ rdtice ! Heat flux587 588 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_1d(ji) * a_i_1d(ji) * zfmdt * r1_ rdtice ! Salt flux586 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_Dt_ice ! Heat flux 587 588 sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_1d(ji) * a_i_1d(ji) * zfmdt * r1_Dt_ice ! Salt flux 589 589 590 590 ! Case constant salinity in time: virtual salt flux to keep salinity constant 591 591 IF( nn_icesal /= 2 ) THEN 592 sfx_bri_1d(ji) = sfx_bri_1d(ji) - sss_1d (ji) * a_i_1d(ji) * zfmdt * r1_ rdtice & ! put back sss_m into the ocean593 & - s_i_1d(ji) * a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_ rdtice ! and get rn_icesal from the ocean592 sfx_bri_1d(ji) = sfx_bri_1d(ji) - sss_1d (ji) * a_i_1d(ji) * zfmdt * r1_Dt_ice & ! put back sss_m into the ocean 593 & - s_i_1d(ji) * a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_Dt_ice ! and get rn_icesal from the ocean 594 594 ENDIF 595 595 596 596 ! Mass flux: All snow is thrown in the ocean, and seawater is taken to replace the volume 597 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_ rdtice598 wfx_snw_sni_1d(ji) = wfx_snw_sni_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhos * r1_ rdtice597 wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoi * r1_Dt_ice 598 wfx_snw_sni_1d(ji) = wfx_snw_sni_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhos * r1_Dt_ice 599 599 600 600 ! update heat content (J.m-2) and layer thickness … … 618 618 ! mass & energy loss to the ocean 619 619 hfx_res_1d(ji) = hfx_res_1d(ji) + ( 1._wp - rswitch ) * & 620 & ( e_s_1d(ji,jk) * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_ rdtice ) ! heat flux to the ocean [W.m-2], < 0620 & ( e_s_1d(ji,jk) * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_Dt_ice ) ! heat flux to the ocean [W.m-2], < 0 621 621 wfx_res_1d(ji) = wfx_res_1d(ji) + ( 1._wp - rswitch ) * & 622 & ( rhos * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_ rdtice ) ! mass flux622 & ( rhos * h_s_1d(ji) * r1_nlay_s * a_i_1d(ji) * r1_Dt_ice ) ! mass flux 623 623 ! update energy (mass is updated in the next loop) 624 624 e_s_1d(ji,jk) = rswitch * e_s_1d(ji,jk) -
NEMO/trunk/src/ICE/icethd_do.F90
r12377 r12489 141 141 ! Physical constants 142 142 zhicrit = 0.04 ! frazil ice thickness 143 ztwogp = 2. * r au0 / ( grav * 0.3 * ( rau0 - rhoi ) ) ! reduced grav143 ztwogp = 2. * rho0 / ( grav * 0.3 * ( rho0 - rhoi ) ) ! reduced grav 144 144 zsqcd = 1.0 / SQRT( 1.3 * zcai ) ! 1/SQRT(airdensity*drag) 145 145 zgamafr = 0.03 … … 289 289 290 290 ! Contribution to heat flux to the ocean [W.m-2], >0 291 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * zEw * r1_ rdtice291 hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * zEw * r1_Dt_ice 292 292 ! Total heat flux used in this process [W.m-2] 293 hfx_opw_1d(ji) = hfx_opw_1d(ji) - zfmdt * zdE * r1_ rdtice293 hfx_opw_1d(ji) = hfx_opw_1d(ji) - zfmdt * zdE * r1_Dt_ice 294 294 ! mass flux 295 wfx_opw_1d(ji) = wfx_opw_1d(ji) - zv_newice(ji) * rhoi * r1_ rdtice295 wfx_opw_1d(ji) = wfx_opw_1d(ji) - zv_newice(ji) * rhoi * r1_Dt_ice 296 296 ! salt flux 297 sfx_opw_1d(ji) = sfx_opw_1d(ji) - zv_newice(ji) * rhoi * zs_newice(ji) * r1_ rdtice297 sfx_opw_1d(ji) = sfx_opw_1d(ji) - zv_newice(ji) * rhoi * zs_newice(ji) * r1_Dt_ice 298 298 END DO 299 299 -
NEMO/trunk/src/ICE/icethd_ent.F90
r10069 r12489 129 129 ! then we should not (* a_i) again but not important since this is just to check that remap error is ~0 130 130 DO ji = 1, npti 131 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_ rdtice * &131 hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + a_i_1d(ji) * r1_Dt_ice * & 132 132 & ( SUM( qnew(ji,1:nlay_i) ) * zhnew(ji) - SUM( eh_i_old(ji,0:nlay_i+1) ) ) 133 133 END DO -
NEMO/trunk/src/ICE/icethd_pnd.F90
r12377 r12489 165 165 ! melt pond mass flux (<0) 166 166 IF( zdv_mlt > 0._wp ) THEN 167 zfac = zfr_mlt * zdv_mlt * rhow * r1_ rdtice167 zfac = zfr_mlt * zdv_mlt * rhow * r1_Dt_ice 168 168 wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac 169 169 ! -
NEMO/trunk/src/ICE/icethd_sal.F90
r12377 r12489 68 68 CASE( 2 ) ! time varying salinity with linear profile ! 69 69 ! !---------------------------------------------! 70 z1_time_gd = 1._wp / rn_time_gd * r dt_ice71 z1_time_fl = 1._wp / rn_time_fl * r dt_ice70 z1_time_gd = 1._wp / rn_time_gd * rDt_ice 71 z1_time_fl = 1._wp / rn_time_fl * rDt_ice 72 72 ! 73 73 DO ji = 1, npti … … 98 98 99 99 ! Salt flux 100 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoi * a_i_1d(ji) * h_i_1d(ji) * ( zs_i_fl + zs_i_gd ) * r1_ rdtice100 sfx_bri_1d(ji) = sfx_bri_1d(ji) - rhoi * a_i_1d(ji) * h_i_1d(ji) * ( zs_i_fl + zs_i_gd ) * r1_Dt_ice 101 101 ENDIF 102 102 END DO -
NEMO/trunk/src/ICE/icethd_zdf_bl99.F90
r12396 r12489 320 320 DO ji = 1, npti 321 321 zcpi = rcpi + zgamma * sz_i_1d(ji,jk) / MAX( ( t_i_1d(ji,jk) - rt0 ) * ( ztiold(ji,jk) - rt0 ), epsi10 ) 322 zeta_i(ji,jk) = r dt_ice * r1_rhoi * z1_h_i(ji) / MAX( epsi10, zcpi )322 zeta_i(ji,jk) = rDt_ice * r1_rhoi * z1_h_i(ji) / MAX( epsi10, zcpi ) 323 323 END DO 324 324 END DO … … 326 326 DO jk = 1, nlay_s 327 327 DO ji = 1, npti 328 zeta_s(ji,jk) = r dt_ice * r1_rhos * r1_rcpi * z1_h_s(ji)328 zeta_s(ji,jk) = rDt_ice * r1_rhos * r1_rcpi * z1_h_s(ji) 329 329 END DO 330 330 END DO … … 826 826 IF( t_su_1d(ji) < rt0 ) THEN ! case T_su < 0degC 827 827 zhfx_err = ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - qcn_ice_bot_1d(ji) & 828 & + zdq * r1_ rdtice ) * a_i_1d(ji)828 & + zdq * r1_Dt_ice ) * a_i_1d(ji) 829 829 ELSE ! case T_su = 0degC 830 830 zhfx_err = ( qcn_ice_top_1d(ji) + qtr_ice_top_1d(ji) - zradtr_i(ji,nlay_i) - qcn_ice_bot_1d(ji) & 831 & + zdq * r1_ rdtice ) * a_i_1d(ji)831 & + zdq * r1_Dt_ice ) * a_i_1d(ji) 832 832 ENDIF 833 833 … … 835 835 836 836 zhfx_err = ( qcn_ice_top_1d(ji) + qtr_ice_top_1d(ji) - zradtr_i(ji,nlay_i) - qcn_ice_bot_1d(ji) & 837 & + zdq * r1_ rdtice ) * a_i_1d(ji)837 & + zdq * r1_Dt_ice ) * a_i_1d(ji) 838 838 839 839 ENDIF … … 843 843 ! 844 844 ! hfx_dif = Heat flux diagnostic of sensible heat used to warm/cool ice in W.m-2 845 hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_ rdtice * a_i_1d(ji)845 hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_Dt_ice * a_i_1d(ji) 846 846 ! 847 847 END DO -
NEMO/trunk/src/ICE/iceupdate.F90
r12377 r12489 171 171 snwice_mass (ji,jj) = tmask(ji,jj,1) * ( rhos * vt_s(ji,jj) + rhoi * vt_i(ji,jj) ) 172 172 ! ! time evolution of snow+ice mass 173 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_ rdtice173 snwice_fmass (ji,jj) = ( snwice_mass(ji,jj) - snwice_mass_b(ji,jj) ) * r1_Dt_ice 174 174 175 175 END_2D … … 329 329 ENDIF 330 330 331 zrhoco = r au0 * rn_cio331 zrhoco = rho0 * rn_cio 332 332 ! 333 333 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step) -
NEMO/trunk/src/ICE/icevar.F90
r12377 r12489 488 488 DO_3D_11_11( 1, nlay_i ) 489 489 ! update exchanges with ocean 490 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_i(ji,jj,jk,jl) * r1_ rdtice ! W.m-2 <0490 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_i(ji,jj,jk,jl) * r1_Dt_ice ! W.m-2 <0 491 491 e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * zswitch(ji,jj) 492 492 t_i(ji,jj,jk,jl) = t_i(ji,jj,jk,jl) * zswitch(ji,jj) + rt0 * ( 1._wp - zswitch(ji,jj) ) … … 495 495 DO_3D_11_11( 1, nlay_s ) 496 496 ! update exchanges with ocean 497 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s(ji,jj,jk,jl) * r1_ rdtice ! W.m-2 <0497 hfx_res(ji,jj) = hfx_res(ji,jj) - (1._wp - zswitch(ji,jj) ) * e_s(ji,jj,jk,jl) * r1_Dt_ice ! W.m-2 <0 498 498 e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * zswitch(ji,jj) 499 499 t_s(ji,jj,jk,jl) = t_s(ji,jj,jk,jl) * zswitch(ji,jj) + rt0 * ( 1._wp - zswitch(ji,jj) ) … … 505 505 DO_2D_11_11 506 506 ! update exchanges with ocean 507 sfx_res(ji,jj) = sfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * sv_i(ji,jj,jl) * rhoi * r1_ rdtice508 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_i (ji,jj,jl) * rhoi * r1_ rdtice509 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhos * r1_ rdtice507 sfx_res(ji,jj) = sfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * sv_i(ji,jj,jl) * rhoi * r1_Dt_ice 508 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_i (ji,jj,jl) * rhoi * r1_Dt_ice 509 wfx_res(ji,jj) = wfx_res(ji,jj) + (1._wp - zswitch(ji,jj) ) * v_s (ji,jj,jl) * rhos * r1_Dt_ice 510 510 ! 511 511 a_i (ji,jj,jl) = a_i (ji,jj,jl) * zswitch(ji,jj) … … 717 717 !! ** Purpose : compute the equivalent ssh in lead when sea ice is embedded 718 718 !! 719 !! ** Method : ssh_lead = ssh + (Mice + Msnow) / r au0719 !! ** Method : ssh_lead = ssh + (Mice + Msnow) / rho0 720 720 !! 721 721 !! ** Reference : Jean-Michel Campin, John Marshall, David Ferreira, … … 747 747 zintb = REAL( nn_fsbc + 1 ) / REAL( nn_fsbc ) * 0.5_wp 748 748 ! 749 zsnwiceload(:,:) = ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_r au0749 zsnwiceload(:,:) = ( zintn * psnwice_mass(:,:) + zintb * psnwice_mass_b(:,:) ) * r1_rho0 750 750 ! 751 751 ELSE … … 937 937 ! In case snow load is in excess that would lead to transformation from snow to ice 938 938 ! Then, transfer the snow excess into the ice (different from icethd_dh) 939 zdh = MAX( 0._wp, ( rhos * ph_s(ji,jl) + ( rhoi - r au0 ) * ph_i(ji,jl) ) * r1_rau0 )939 zdh = MAX( 0._wp, ( rhos * ph_s(ji,jl) + ( rhoi - rho0 ) * ph_i(ji,jl) ) * r1_rho0 ) 940 940 ! recompute h_i, h_s avoiding out of bounds values 941 941 ph_i(ji,jl) = MIN( hi_max(jl), ph_i(ji,jl) + zdh ) -
NEMO/trunk/src/ICE/icewri.F90
r12377 r12489 87 87 ! Standard outputs 88 88 !----------------- 89 zrho1 = ( r au0 - rhoi ) * r1_rau0 ; zrho2 = rhos * r1_rau089 zrho1 = ( rho0 - rhoi ) * r1_rho0 ; zrho2 = rhos * r1_rho0 90 90 ! masks 91 91 CALL iom_put( 'icemask' , zmsk00 ) ! ice mask 0%
Note: See TracChangeset
for help on using the changeset viewer.