diff --git a/src/SIS2_ice_thm.F90 b/src/SIS2_ice_thm.F90 index fd194839..ebd7bf8f 100644 --- a/src/SIS2_ice_thm.F90 +++ b/src/SIS2_ice_thm.F90 @@ -34,7 +34,7 @@ module SIS2_ice_thm real :: LI !< The latent heat of fusion [J kg-1]. real :: Lat_Vapor !< The latent heat of vaporization [J kg-1]. real :: dTf_dS !< The derivative of the freezing point with salinity, - !! [degC PSU-1]. (dTf_dS is negative.) + !! [degC kg gSalt-1]. (dTf_dS is negative.) real :: enth_liq_0 = 0.0 !< The value of enthalpy for liquid fresh water at 0 degC [J kg-1]. real :: enth_unit = 1.0 !< A conversion factor for enthalpy from Joules kg-1. @@ -53,8 +53,8 @@ module SIS2_ice_thm !> The control structure for the SIS2 ice thermodynamics type, public :: SIS2_ice_thm_CS ; private ! properties of ice, snow, and seawater (NCAR CSM values) - real :: KS !< Thermal conductivity of snow, often 0.31 W/(mK) - real :: KI !< Thermalconductivity of ice, often 2.03 W/(mK) + real :: KS !< Thermal conductivity of snow, often 0.31 [W m-1 degC-1] + real :: KI !< Thermalconductivity of ice, often 2.03 [W m-1 degC-1] real :: temp_ice_freeze !< The freezing temperature of the top ice layer [degC]. real :: temp_range_est !< An estimate of the range of snow and ice temperatures @@ -164,7 +164,7 @@ subroutine ice_temp_SIS2(m_pond, m_snow, m_ice, enthalpy, sice, SF_0, dSF_dT, so intent(inout) :: enthalpy !< The enthalpy of each layer in a column of !! snow and ice, in enth_unit (J kg-1). real, dimension(NkIce), & - intent(in) :: Sice !< ice salinity by layer (g/kg) + intent(in) :: Sice !< ice salinity by layer [gSalt kg-1] real, intent(in ) :: SF_0 !< net upward surface heat flux at ts=0 [W m-2] real, intent(in ) :: dSF_dT !< d(sfc heat flux)/d(ts) [W m-2 degC-1] real, dimension(0:NkIce), & @@ -239,7 +239,7 @@ subroutine ice_temp_SIS2(m_pond, m_snow, m_ice, enthalpy, sice, SF_0, dSF_dT, so real :: Cp_brine ! The heat capacity of liquid water in the brine pockets, ! [J kg-1 degC-1]. real :: Lat_fus ! The latent heat of fusion [J kg-1]. - real :: enth_unit ! A conversion factor for enthalpy from Joules kg-1. + real :: enth_unit ! A conversion factor for enthalpy [Enth J-1 kg ~> 1]. real :: I_enth_unit ! The inverse of enth_unit. logical :: col_check integer :: k @@ -254,7 +254,7 @@ subroutine ice_temp_SIS2(m_pond, m_snow, m_ice, enthalpy, sice, SF_0, dSF_dT, so I_enth_unit = 1.0 / enth_unit mL_ice = m_ice / NkIce ! ice mass per unit area of each layer - mL_snow = m_snow ! snow mass per unit area (in kg m-2). + mL_snow = m_snow ! snow mass per unit area [kg m-2]. call calculate_T_Freeze(sice, tfi, ITV) ! freezing temperature of ice layers ! Set the effective thickness of each ice and snow layer, limited to avoid @@ -474,7 +474,7 @@ subroutine ice_temp_SIS2(m_pond, m_snow, m_ice, enthalpy, sice, SF_0, dSF_dT, so tflux_bot_diff = -heat_flux_int(NkIce)*dtt ! Estimate the errors with these two expressions from 64-bit roundoff. - tfb_diff_err = 1e-15*2.0*kk*dtt * sqrt(tfw**2 + 10.0**2) ! The -10 deg is arbitrary but good enough? + tfb_diff_err = 1e-15*2.0*kk*dtt * sqrt(tfw**2 + 10.0**2) ! The -10 degC is arbitrary but good enough? tfb_resid_err = 1e-15*sqrt(col_enth2**2 + col_enth1**2 + sum_sol**2 + tflux_sfc**2) d_tflux_bot = tflux_bot_diff - tflux_bot_resid @@ -545,7 +545,7 @@ subroutine estimate_tsurf(m_pond, m_snow, m_ice, enthalpy, sice, SF_0, dSF_dT, & intent(in ) :: enthalpy !< The enthalpy of each layer in a column of !! snow and ice, in enth_unit [J kg-1]. real, dimension(NkIce), & - intent(in) :: Sice !< ice salinity by layer [g/kg] + intent(in) :: Sice !< ice salinity by layer [gSalt kg-1] real, intent(in ) :: SF_0 !< net upward surface heat flux when Tsurf=0 [W m-2] real, intent(in ) :: dSF_dT !< d(sfc heat flux)/d(ts) [W m-2 degC-1] real, dimension(0:NkIce), & @@ -703,13 +703,13 @@ end subroutine estimate_tsurf !> laytemp_SIS2 does an implicit calculation of new layer temperature function laytemp_SIS2(m, T_fr, f, b, tp, enth, salin, dtt, ITV) result (new_temp) real :: new_temp !< The new temperature of the ice layer [degC] - real, intent(in) :: m !< mass of ice - kg/m2 + real, intent(in) :: m !< mass of ice [kg m-2] real, intent(in) :: T_fr !< ice freezing temp. (determined by salinity) - real, intent(in) :: f !< Inward forcing - W/m2 - real, intent(in) :: b !< response of outward heat flux to local temperature - W/m2/K + real, intent(in) :: f !< Inward forcing [W m-2] + real, intent(in) :: b !< response of outward heat flux to local temperature [W m-2 degC] real, intent(in) :: tp !< prior step temperature [degC] real, intent(in) :: enth !< prior step enthalpy - real, intent(in) :: salin !< ice salinity in ppt. + real, intent(in) :: salin !< ice salinity [gSalg kg-1]. real, intent(in) :: dtt !< timestep [s] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -860,7 +860,7 @@ end function laytemp_SIS2 subroutine update_lay_enth(m_lay, sice, enth, ftop, ht_body, fbot, dftop_dT, & dfbot_dT, dtt, hf_err_rat, ITV, extra_heat, temp_new, temp_max) real, intent(in) :: m_lay !< This layers mass of ice [kg m-2] - real, intent(in) :: sice !< ice salinity in g/kg + real, intent(in) :: sice !< ice salinity [gSalt kg-1] real, intent(inout) :: enth !< ice enthalpy in enth_units [Enth ~> J kg-1]. real, intent(inout) :: ftop !< Downward heat flux atop the layer at T = 0 degC, or !! the prescribed heat flux if dftop_dT = 0 [W m-2]. @@ -902,7 +902,7 @@ subroutine update_lay_enth(m_lay, sice, enth, ftop, ht_body, fbot, dftop_dT, & real :: Err_Tmin, Err_Tmax ! The errors at T_max and T_min [J m-2]. real :: T_prev ! The previous value of T_g [degC]. real :: dErr_dT ! The partial derivative of Err with T_g [J m-2 degC-1]. - real :: Enth_tol = 1.0e-15 ! The fractional Enthalpy difference tolerance for convergence. + real :: Enth_tol = 1.0e-15 ! The fractional Enthalpy difference tolerance for convergence [nondim]. real :: TfxdCp_WI, TfxdCp_BI, Err_Tind real :: Cp_ice ! The heat capacity of ice [J kg-1 degC-1]. real :: Cp_brine ! The heat capacity of liquid water in the brine pockets, @@ -1117,7 +1117,7 @@ subroutine ice_check(ms, mi, enthalpy, s_ice, NkIce, msg_part, ITV, & real, intent(in) :: mi !< The mass of ice [kg m-2] real, dimension(0:NkIce), & intent(in) :: enthalpy !< The ice enthalpy, in enthalpy units (often J/kg) - real, dimension(NkIce), intent(in) :: s_ice !< The ice bulk salinity in g/kg + real, dimension(NkIce), intent(in) :: s_ice !< The ice bulk salinity [gSalt kg-1] integer, intent(in) :: NkIce !< The number of vertical temperature layers in the ice character(len=*), intent(in) :: msg_part !< An identifying message type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -1179,9 +1179,9 @@ subroutine ice_resize_SIS2(a_ice, m_pond, m_lay, Enthalpy, Sice_therm, Salin, & intent(inout) :: Enthalpy !< Snow, ice, and ocean enthalpy by layer in enth_units !! (which might be J/kg). real, dimension(NkIce), & - intent(in) :: Sice_therm !< ice salinity by layer, as used for thermodynamics (g/kg) + intent(in) :: Sice_therm !< ice salinity by layer, as used for thermodynamics [gSalt kg-1] real, dimension(NkIce+1), & - intent(inout) :: Salin !< Conserved ice bulk salinity by layer (g/kg) + intent(inout) :: Salin !< Conserved ice bulk salinity by layer [gSalt kg-1] real, intent(in ) :: snow !< new snow [kg m-2] real, intent(in ) :: rain !< rain for pond source [kg m-2] - not yet active real, intent(in ) :: evap !< ice evaporation/sublimation [kg m-2] @@ -1195,8 +1195,8 @@ subroutine ice_resize_SIS2(a_ice, m_pond, m_lay, Enthalpy, Sice_therm, Salin, & real, intent( out) :: h2o_ice_to_ocn !< liquid water flux to ocean [kg m-2] real, intent( out) :: h2o_ocn_to_ice !< liquid water flux from ocean [kg m-2] real, intent( out) :: evap_from_ocn!< evaporation flux from ocean [kg m-2] - real, intent( out) :: snow_to_ice !< snow below waterline becomes ice - real, intent( out) :: salt_to_ice !< Net flux of salt to the ice, in g m-2. + real, intent( out) :: snow_to_ice !< snow below waterline becomes ice [kg m-2] + real, intent( out) :: salt_to_ice !< Net flux of salt to the ice [g m-2]. type(SIS2_ice_thm_CS), intent(in) :: CS !< The SIS2_ice_thm control structure. type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -1222,7 +1222,7 @@ subroutine ice_resize_SIS2(a_ice, m_pond, m_lay, Enthalpy, Sice_therm, Salin, & real :: evap_left ! The remaining evaporation [kg m-2]. real :: evap_here ! The evaporation from the current layer [kg m-2]. real :: m_submerged ! The submerged mass of ice [kg m-2]. - real :: salin_freeze ! The salinity of newly frozen ice, in g kg-1. + real :: salin_freeze ! The salinity of newly frozen ice [gSalt kg-1]. real :: enthM_evap, enthM_melt, enthM_freezing, enthM_snowfall real :: enth_unit ! A conversion factor for enthalpy from Joules kg-1. real :: LI ! The latent heat of fusion [J kg-1]. @@ -1491,17 +1491,17 @@ subroutine add_frazil_SIS2(m_lay, Enthalpy, Sice_therm, Salin, npassive, TrLay, intent(inout) :: Enthalpy !< Snow, ice, and ocean enthalpy by layer in enth_units !! (which might be J/kg). real, dimension(NkIce), & - intent(in) :: Sice_therm !< ice salinity by layer, as used for thermodynamics (g/kg) + intent(in) :: Sice_therm !< ice salinity by layer, as used for thermodynamics [gSalt kg-1] real, dimension(NkIce+1), & - intent(inout) :: Salin !< Conserved ice bulk salinity by layer (g/kg) + intent(inout) :: Salin !< Conserved ice bulk salinity by layer [gSalt kg-1] integer, intent(in) :: npassive !< Number of passive tracers real, dimension(NkIce+1,npassive), & - intent(inout) :: TrLay !< Passive tracer in the column layer - real, intent(in ) :: frazil !< frazil in energy units + intent(inout) :: TrLay !< Passive tracer in the column layer [Conc] + real, intent(in ) :: frazil !< frazil in energy units [J m-2] real, intent(in ) :: tfw !< seawater freezing temperature [degC] integer, intent(in) :: NkIce !< The number of ice layers. real, intent( out) :: h2o_ocn_to_ice !< liquid water flux from ocean [kg m-2] - real, intent( out) :: salt_to_ice !< Net flux of salt to the ice, in g m-2. + real, intent( out) :: salt_to_ice !< Net flux of salt to the ice [gSalt m-2]. type(SIS2_ice_thm_CS), intent(in) :: CS !< The SIS2_ice_thm control structure. type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -1518,7 +1518,7 @@ subroutine add_frazil_SIS2(m_lay, Enthalpy, Sice_therm, Salin, npassive, TrLay, ! the latent heat of fusion in a small fraction of ! the water, in Enth_unit kg-1 (perhaps J kg-1). real :: m_freeze ! The newly formed ice from freezing [kg m-2]. - real :: salin_freeze ! The salinity of newly frozen ice, in g kg-1. + real :: salin_freeze ! The salinity of newly frozen ice [gSalt kg-1]. real :: enthM_freezing ! The enthalpy gain due to the mass gain by ! freezing, in enth_unit kg m-2 (often J m-2). real :: enth_unit ! The units for enthalpy (often J kg-1). @@ -1599,7 +1599,7 @@ subroutine rebalance_ice_layers(m_lay, mtot_ice, Enthalpy, Salin, NkIce, npassiv real, dimension(0:NkIce), intent(inout) :: m_lay !< The ice mass by layer [kg m-2]. real, intent(out) :: mtot_ice !< The summed ice mass [kg m-2]. real, dimension(0:NkIce+1), intent(inout) :: Enthalpy !< Snow, ice, and ocean enthalpy by layer in enth_units. - real, dimension(NkIce+1), intent(inout) :: Salin !< Conserved ice bulk salinity by layer (g/kg) + real, dimension(NkIce+1), intent(inout) :: Salin !< Conserved ice bulk salinity by layer [gSalt kg-1] integer, intent(in) :: NkIce !< The number of ice layers. integer, intent(in) :: npassive !< Number of passive tracers real, dimension(0:NkIce+1,npassive), & @@ -1768,7 +1768,7 @@ end subroutine ice_thermo_init !> T_Freeze returns the freezing temperature as a function of salinity. !### (and possibly later pressure). function T_Freeze(S, ITV) - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: T_Freeze !< The freezing point temperature [degC] @@ -1780,7 +1780,7 @@ end function T_Freeze !> calculate_T_Freeze calculates an array of freezing temperatures for an !! an array of salinities (and maybe later pressures). subroutine calculate_T_Freeze(S, T_Freeze, ITV) - real, dimension(:), intent(in) :: S !< The ice bulk salinity in g/kg + real, dimension(:), intent(in) :: S !< The ice bulk salinity [gSalt kg-1] real, dimension(:), intent(out) :: T_Freeze !< The freezing point temperature [degC] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -1795,7 +1795,7 @@ end subroutine calculate_T_Freeze !> enthalpy_from_TS sets a column of enthalpies from temperature and salinity. subroutine enthalpy_from_TS(T, S, enthalpy, ITV) real, dimension(:), intent(in) :: T !< The ice temperature [degC] - real, dimension(:), intent(in) :: S !< The ice bulk salinity in g/kg + real, dimension(:), intent(in) :: S !< The ice bulk salinity [gSalt kg-1] real, dimension(:), intent(out) :: enthalpy !< The ice enthalpy, in enthalpy units (often J/kg) type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -1809,7 +1809,7 @@ end subroutine enthalpy_from_TS !> enth_from_TS returns an ice enthalpy given temperature and salinity. function enth_from_TS(T, S, ITV) result(enthalpy) real, intent(in) :: T !< The ice temperature [degC] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: enthalpy !< The ice enthalpy, in enthalpy units (often J/kg) @@ -1843,7 +1843,7 @@ end function enth_from_TS !> enthalpy_liquid_freeze returns the enthalpy of liquid water at the freezing !! point for a given salinity. function enthalpy_liquid_freeze(S, ITV) - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: enthalpy_liquid_freeze @@ -1857,7 +1857,7 @@ end function enthalpy_liquid_freeze !! temperature and salinity, in enth_unit. function enthalpy_liquid(T, S, ITV) real, intent(in) :: T !< The ice temperature [degC] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: enthalpy_liquid @@ -1867,10 +1867,10 @@ end function enthalpy_liquid !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~! !> enth_melt returns the enthalpy change associated with melting water of -!! a given temperature (T, in C) and salinity (S), in enth_unit. +!! a given temperature (T) and salinity (S), in enthalpy units [Enth ~> J kg-1]. function enth_melt(T, S, ITV) result (emelt) real, intent(in) :: T !< The ice temperature [degC] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: emelt @@ -1913,7 +1913,7 @@ end function latent_sublimation !> Temp_from_Enth_S sets a column of temperatures from enthalpy and salinity. subroutine Temp_from_Enth_S(En, S, Temp, ITV) real, dimension(:), intent(in) :: En !< The ice enthalpy, in enthalpy units (often J/kg) - real, dimension(:), intent(in) :: S !< The ice bulk salinity in g/kg + real, dimension(:), intent(in) :: S !< The ice bulk salinity [gSalt kg-1] real, dimension(:), intent(out) :: Temp !< The ice temperature [degC] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. @@ -1932,7 +1932,7 @@ end subroutine Temp_from_Enth_S !! for ice of a given enthalpy and salinity. function dTemp_dEnth_EnS(En, S, ITV) result(dT_dE) real, intent(in) :: En !< The ice enthalpy, in enthalpy units [Enth_unit ~> J kg-1] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: dT_dE !< Partial derivative of temperature with enthalpy [degC Enth_unit-1 ~> degC kg J-1]. @@ -1975,7 +1975,7 @@ end function dTemp_dEnth_EnS !! for ice of a given temperature and salinity. function dTemp_dEnth_TS(Temp, S, ITV) result(dT_dE) real, intent(in) :: Temp !< The ice temperature [degC] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: dT_dE !< Partial derivative of temperature with enthalpy [degC Enth_unit-1 ~> degC kg J-1]. @@ -2015,7 +2015,7 @@ end function dTemp_dEnth_TS !! and salinity. function Temp_from_En_S(En, S, ITV) result(Temp) real, intent(in) :: En !< The ice enthalpy, in enthalpy units [Enth ~> J/kg] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: Temp !< Temperature [degC]. @@ -2130,7 +2130,7 @@ end function Temp_from_En_S !! configuration [J kg-1]. function e_to_melt_TS(T, S, ITV) result(e_to_melt) real, intent(in) :: T !< The ice temperature [degC] - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: e_to_melt !< The energy required to melt this mixture of ice and brine @@ -2156,7 +2156,7 @@ end function e_to_melt_TS !! configuration [J kg-1]. function energy_melt_enthS(En, S, ITV) result(e_to_melt) real, intent(in) :: En !< The ice enthalpy, in enthalpy units (often J/kg) - real, intent(in) :: S !< The ice bulk salinity in g/kg + real, intent(in) :: S !< The ice bulk salinity [gSalt kg-1] type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: e_to_melt !< The energy required to melt this mixture of ice and brine @@ -2176,7 +2176,7 @@ subroutine get_SIS2_thermo_coefs(ITV, ice_salinity, enthalpy_units, & type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real, dimension(:), & optional, intent(out) :: ice_salinity !< The specified salinity of each layer when the - !! thermodynamic salinities are pre-specified, in g kg-1. + !! thermodynamic salinities are pre-specified [gSalt kg-1]. real, optional, intent(out) :: enthalpy_units !< A unit conversion factor for enthalpy from its !! internal representation to Joules kg-1. real, optional, intent(out) :: Cp_Ice !< The heat capacity of ice [J kg-1 degC-1]. diff --git a/src/SIS_fast_thermo.F90 b/src/SIS_fast_thermo.F90 index fe267686..4c7455bd 100644 --- a/src/SIS_fast_thermo.F90 +++ b/src/SIS_fast_thermo.F90 @@ -612,7 +612,7 @@ subroutine do_update_ice_model_fast(Atmos_boundary, IST, sOSS, Rad, FIA, & flux_sw ! The downward shortwave heat fluxes [W m-2]. The fourth ! dimension is a combination of angular orientation and frequency. real, dimension(0:IG%NkIce) :: T_col ! The temperature of a column of ice and snow [degC]. - real, dimension(IG%NkIce) :: S_col ! The thermodynamic salinity of a column of ice, in g/kg. + real, dimension(IG%NkIce) :: S_col ! The thermodynamic salinity of a column of ice [gSalt kg-1]. real, dimension(0:IG%NkIce) :: enth_col ! The enthalpy of a column of snow and ice, in enth_unit (J/kg?). real, dimension(0:IG%NkIce) :: SW_abs_col ! The shortwave absorption within a column of snow and ice [W m-2]. real :: dt_fast ! The fast thermodynamic time step [s]. @@ -873,7 +873,7 @@ subroutine redo_update_ice_model_fast(IST, sOSS, Rad, FIA, TSF, optics_CSp, & type(ice_grid_type), intent(in) :: IG !< The ice vertical grid type real, dimension(IG%NkIce) :: & - S_col ! The thermodynamic salinity of a column of ice, in g/kg. + S_col ! The thermodynamic salinity of a column of ice [gSalt kg-1]. real, dimension(0:IG%NkIce) :: & T_col, & ! The temperature of a column of ice and snow [degC]. SW_abs_col, & ! The shortwave absorption within a column of snow and ice [W m-2]. diff --git a/src/SIS_optics.F90 b/src/SIS_optics.F90 index 530e50b3..da678ae5 100644 --- a/src/SIS_optics.F90 +++ b/src/SIS_optics.F90 @@ -190,7 +190,7 @@ subroutine ice_optics_SIS2(mp, hs, hi, ts, tfw, NkIce, albedos, abs_sfc, & real :: rho_water ! The nominal density of sea water [kg m-3]. real :: pen ! The fraction of the shortwave flux that will pass below ! the surface (frac 1-pen absorbed at the surface) [nondim] - real :: sal_ice_top(1) ! A specified surface salinity of ice [ppt]. + real :: sal_ice_top(1) ! A specified surface salinity of ice [gSalt kg-1]. real :: temp_ice_freeze ! The freezing temperature of the top ice layer [degC]. integer :: m, b, nb character(len=200) :: mesg @@ -402,7 +402,7 @@ function bright_ice_temp(CS, ITV) result(bright_temp) type(ice_thermo_type), intent(in) :: ITV !< The ice thermodynamic parameter structure. real :: bright_temp - real :: salin_max ! The maximum attainable salinity, in PSU. + real :: salin_max ! The maximum attainable salinity [gSalt kg-1]. real :: temp_freeze_min ! The freezing temperature of water at salin_max [degC]. salin_max = 40.0 diff --git a/src/SIS_slow_thermo.F90 b/src/SIS_slow_thermo.F90 index 3d0b9896..bd0eb060 100644 --- a/src/SIS_slow_thermo.F90 +++ b/src/SIS_slow_thermo.F90 @@ -81,7 +81,7 @@ module SIS_slow_thermo type slow_thermo_CS ; private logical :: specified_ice !< If true, the sea ice is specified and there is !! no need for ice dynamics. - real :: ice_bulk_salin !< The globally constant sea ice bulk salinity, in g/kg + real :: ice_bulk_salin !< The globally constant sea ice bulk salinity [gSalt kg-1] !! that is used to calculate the ocean salt flux. real :: ice_rel_salin !< The initial bulk salinity of sea-ice relative to the !! salinity of the water from which it formed, nondim. @@ -589,13 +589,13 @@ subroutine SIS2_thermodynamics(IST, dt_slow, CS, OSS, FIA, IOF, G, IG) real, dimension(SZI_(G),SZJ_(G),1:IG%CatIce) :: heat_in, enth_prev, enth real, dimension(SZI_(G),SZJ_(G)) :: heat_in_col, enth_prev_col, enth_col, enth_mass_in_col - real, dimension(IG%NkIce) :: S_col ! The salinity of a column of ice, in g/kg. + real, dimension(IG%NkIce) :: S_col ! The salinity of a column of ice [gSalt kg-1]. real, dimension(IG%NkIce+1) :: Salin ! The conserved bulk salinity of each - ! layer in g/kg, with the salinity of + ! layer [gSalt kg-1], with the salinity of ! newly formed ice in layer NkIce+1. real, dimension(0:IG%NkIce) :: m_lay ! The masses of a column of ice and snow [kg m-2]. real, dimension(0:IG%NkIce) :: Tcol0 ! The temperature of a column of ice and snow [degC]. - real, dimension(0:IG%NkIce) :: S_col0 ! The salinity of a column of ice and snow, in g/kg. + real, dimension(0:IG%NkIce) :: S_col0 ! The salinity of a column of ice and snow [gSalt kg-1]. real, dimension(0:IG%NkIce) :: Tfr_col0 ! The freezing temperature of a column of ice and snow [degC]. real, dimension(0:IG%NkIce+1) :: & enthalpy ! The initial enthalpy of a column of ice and snow diff --git a/src/SIS_sum_output.F90 b/src/SIS_sum_output.F90 index 89292057..f864f1f1 100644 --- a/src/SIS_sum_output.F90 +++ b/src/SIS_sum_output.F90 @@ -53,9 +53,9 @@ module SIS_sum_output real :: fresh_water_input !< The total mass of fresh water added by !! surface fluxes since the last time that real :: salt_prev !< The total amount of salt in the sea ice the last - !! time that write_ice_statistics was called, in PSU kg. + !! time that write_ice_statistics was called [gSalt]. real :: net_salt_input !< The total salt added by surface fluxes since the last - !! time that write_ice_statistics was called, in PSU kg. + !! time that write_ice_statistics was called [gSalt]. real :: heat_prev !< The total amount of heat in the sea ice the last !! time that write_ice_statistics was called [J]. real :: net_heat_input !< The total heat added by surface fluxes since the last @@ -242,7 +242,7 @@ subroutine write_ice_statistics(IST, day, n, G, IG, CS, message, check_column, t Heat_NS, & ! The total sea-ice enthalpy in the two hemispheres [J]. mass_NS, & ! The total sea-ice mass in the two hemispheres [kg]. salt_NS, & ! The total sea-ice salt in the two hemispheres [kg]. - salinity_NS ! The average sea-ice salinity in the two hemispheres, in g/kg. + salinity_NS ! The average sea-ice salinity in the two hemispheres [gSalt kg-1]. real :: Mass ! The total mass of the sea ice and snow atop it [kg]. real :: mass_chg ! The change in total sea ice mass of fresh water since @@ -250,17 +250,17 @@ subroutine write_ice_statistics(IST, day, n, G, IG, CS, message, check_column, t real :: mass_anom ! The change in fresh water that cannot be accounted for ! by the surface fluxes [kg]. real :: I_Mass ! Adcroft's rule reciprocal of mass: 1/Mass or 0 [kg-1]. - real :: Salt ! The total amount of salt in the ocean, in PSU kg. + real :: Salt ! The total amount of salt in the ocean [gSalt]. real :: Salt_chg ! The change in total sea ice salt since the last call - ! to this subroutine, in PSU kg. + ! to this subroutine [gSalt]. real :: Salt_anom ! The change in salt that cannot be accounted for by - ! the surface fluxes, in PSU kg. + ! the surface fluxes [gSalt]. real :: Salt_anom_norm ! The salt anomaly normalized by salt (if it is nonzero). - real :: salin ! The mean salinity of the ocean, in PSU. + real :: salin ! The mean salinity of the ocean [gSalt kg-1]. real :: salin_chg ! The change in total salt since the last call - ! to this subroutine divided by total mass, in PSU. + ! to this subroutine divided by total mass [gSalt kg-1]. real :: salin_anom ! The change in total salt that cannot be accounted for by - ! the surface fluxes divided by total mass in PSU. + ! the surface fluxes divided by total mass [gSalt kg-1]. real :: salin_mass_in ! The mass of salt input since the last call [kg]. real :: Heat ! The total amount of Heat in the ocean [J]. real :: Heat_chg ! The change in total sea ice heat since the last call @@ -525,8 +525,8 @@ subroutine write_ice_statistics(IST, day, n, G, IG, CS, message, check_column, t ! if (G%Boussinesq) then mass_anom_EFP = mass_chg_EFP - CS%fresh_water_in_EFP ! else - ! net_salt_input needs to be converted from psu m s-1 to kg m-2 s-1. ! mass_anom_EFP = mass_chg_EFP - CS%fresh_water_in_EFP + ! net_salt_input needs to be converted from gSalt kg-1 m s-1 to kg m-2 s-1. ! salin_mass_in = 0.001*EFP_to_real(CS%net_salt_in_EFP) ! endif mass_chg = EFP_to_real(mass_chg_EFP) @@ -775,7 +775,7 @@ subroutine accumulate_input_1(IST, FIA, OSS, dt, G, IG, CS) real, dimension(SZI_(G),SZJ_(G)) :: & FW_in, & ! The net fresh water input, integrated over a timestep [kg]. salt_in, & ! The total salt added by surface fluxes, integrated - ! over a time step [PSU kg]. + ! over a time step [gSalt]. heat_in ! The total heat added by surface fluxes, integrated ! over a time step [J]. real :: FW_input ! The net fresh water input, integrated over a timestep @@ -788,7 +788,7 @@ subroutine accumulate_input_1(IST, FIA, OSS, dt, G, IG, CS) real :: enth_units type(EFP_type) :: & FW_in_EFP, & ! Extended fixed point version of FW_input [kg] - salt_in_EFP, & ! Extended fixed point version of salt_input [PSU kg] + salt_in_EFP, & ! Extended fixed point version of salt_input [gSalt] heat_in_EFP ! Extended fixed point version of heat_input [J] integer :: i, j, k, isc, iec, jsc, jec, ncat, b, nb diff --git a/src/SIS_types.F90 b/src/SIS_types.F90 index 4aa4a276..ed4dde38 100644 --- a/src/SIS_types.F90 +++ b/src/SIS_types.F90 @@ -78,7 +78,7 @@ module SIS_types t_surf !< The surface temperature, in Kelvin. real, allocatable, dimension(:,:,:,:) :: sal_ice !< The salinity of the sea ice - !! in each category and fractional thickness layer, in g/kg. + !! in each category and fractional thickness layer [gSalt kg-1]. real, allocatable, dimension(:,:,:,:) :: enth_ice !< The enthalpy of the sea ice !! in each category and fractional thickness layer, in enth_unit (J/kg or rescaled). real, allocatable, dimension(:,:,:,:) :: enth_snow !< The enthalpy of the snow @@ -99,7 +99,7 @@ module SIS_types type ocean_sfc_state_type ! 7 of the following 9 variables describe the ocean state as seen by the sea ice. real, allocatable, dimension(:,:) :: & - s_surf , & !< The ocean's surface salinity in g/kg. + s_surf , & !< The ocean's surface salinity [gSalt kg-1]. SST_C , & !< The ocean's bulk surface temperature [degC]. T_fr_ocn, & !< The freezing point temperature at the ocean's surface salinity [degC]. u_ocn_B, & !< The ocean's zonal velocity on B-grid points [m s-1]. @@ -139,7 +139,7 @@ module SIS_types ! The following 5 variables describe the ocean state as seen by the ! atmosphere and use for the rapid thermodynamic sea ice changes. real, allocatable, dimension(:,:) :: & - s_surf , & !< The ocean's surface salinity in g/kg. + s_surf , & !< The ocean's surface salinity [gSalt kg-1]. SST_C , & !< The ocean's bulk surface temperature [degC]. T_fr_ocn, & !< The freezing point temperature at the ocean's surface salinity [degC]. u_ocn_A, & !< The ocean's zonal surface velocity on A-grid points [m s-1]. diff --git a/src/ice_age_tracer.F90 b/src/ice_age_tracer.F90 index ac894794..13804b8d 100644 --- a/src/ice_age_tracer.F90 +++ b/src/ice_age_tracer.F90 @@ -50,11 +50,11 @@ module ice_age_tracer ! can be found, or an empty string for internal initialization. type(time_type), pointer :: Time !< A pointer to the ocean model's clock. type(SIS_tracer_registry_type), pointer :: TrReg => NULL() !< A pointer to the tracer registry - real, pointer :: tr(:,:,:,:,:) => NULL() !< The array of tracers used in this subroutine, in g m-3? - real, pointer :: tr_aux(:,:,:,:,:) => NULL() !< The masked tracer concentration for output, in g m-3. + real, pointer :: tr(:,:,:,:,:) => NULL() !< The array of tracers used in this subroutine [g kg-1]. + real, pointer :: tr_aux(:,:,:,:,:) => NULL() !< The masked tracer concentration for output [g kg-1]. type(p3d), dimension(NTR_MAX) :: & - tr_adx, & !< Tracer zonal advective fluxes in g m-3 m3 s-1. - tr_ady !< Tracer meridional advective fluxes in g m-3 m3 s-1. + tr_adx, & !< Tracer zonal advective fluxes [g s-1]. + tr_ady !< Tracer meridional advective fluxes [g s-1]. real, pointer :: ocean_BC(:,:,:,:)=>NULL() !< Ocean boundary value of the tracer by category real, pointer :: snow_BC(:,:,:,:)=>NULL() !< Snow boundary value of the tracer by category diff --git a/src/ice_boundary_types.F90 b/src/ice_boundary_types.F90 index f3ca1c1c..cbce263e 100644 --- a/src/ice_boundary_types.F90 +++ b/src/ice_boundary_types.F90 @@ -32,7 +32,7 @@ module ice_boundary_types v => NULL(), & !< The y-direction ocean velocity at a position !! determined by stagger [m s-1]. t => NULL(), & !< The ocean's surface temperature, in Kelvin. - s => NULL(), & !< The ocean's surface salinity, in g/kg. + s => NULL(), & !< The ocean's surface salinity [gSalt kg-1]. frazil => NULL(), & !< The frazil heat rejected by the ocean [J m-2]. sea_level => NULL() !< The sea level after adjustment for any surface !! pressure that the ocean allows to be expressed [m]. diff --git a/src/ice_model.F90 b/src/ice_model.F90 index 3a72377e..f6333660 100644 --- a/src/ice_model.F90 +++ b/src/ice_model.F90 @@ -1721,7 +1721,7 @@ subroutine ice_model_init(Ice, Time_Init, Time, Time_step_fast, Time_step_slow, real, allocatable, target, dimension(:,:,:) :: t_snow_tmp real, parameter :: T_0degC = 273.15 ! 0 degrees C in Kelvin real :: g_Earth ! The gravitational acceleration [m s-2]. - real :: ice_bulk_salin ! The globally constant sea ice bulk salinity, in g/kg + real :: ice_bulk_salin ! The globally constant sea ice bulk salinity [gSalt kg-1] = [ppt] ! that is used to calculate the ocean salt flux. real :: ice_rel_salin ! The initial bulk salinity of sea-ice relative to the ! salinity of the water from which it formed, nondim. diff --git a/src/ice_type.F90 b/src/ice_type.F90 index 5a30470e..a53f3917 100644 --- a/src/ice_type.F90 +++ b/src/ice_type.F90 @@ -77,17 +77,17 @@ module ice_type_mod albedo_nir_dif => NULL(), & !< The surface albedo for diffuse near-infrared shortwave radiation !! in each ice-thickness category. Nondim, between 0 and 1. rough_mom => NULL(), & !< The roughness for momentum at the ocean surface, as provided by - !! ocean_rough_mod, apparently in m. + !! ocean_rough_mod, apparently [m]. rough_heat => NULL(), & !< The roughness for heat at the ocean surface, as provided by !! ocean_rough_mod, apparently in m. rough_moist => NULL(), & !< The roughness for moisture at the ocean surface, as provided by - !! ocean_rough_mod, apparently in m. + !! ocean_rough_mod, apparently [m]. t_surf => NULL(), & !< The surface temperature for the ocean or for !! each ice-thickness category, in Kelvin. u_surf => NULL(), & !< The eastward surface velocities of the ocean (:,:,1) or sea-ice [m s-1]. v_surf => NULL() !< The northward surface elocities of the ocean (:,:,1) or sea-ice [m s-1]. real, pointer, dimension(:,:) :: & - s_surf =>NULL() !< The ocean's surface salinity, in g/kg. + s_surf =>NULL() !< The ocean's surface salinity [gSalt kg-1]. ! These arrays will be used to set the forcing for the ocean. real, pointer, dimension(:,:) :: &