MOM6
mom_tfreeze Module Reference

Detailed Description

Freezing point expressions.

Data Types

interface  calculate_tfreeze_linear
 Compute the freezing point potential temperature [degC] from salinity [ppt] and pressure [Pa] using a simple linear expression, with coefficients passed in as arguments. More...
 
interface  calculate_tfreeze_millero
 Compute the freezing point potential temperature [degC] from salinity [PSU] and pressure [Pa] using the expression from Millero (1978) (and in appendix A of Gill 1982), but with the of the pressure dependence changed from 7.53e-8 to 7.75e-8 to make this an expression for potential temperature (not in situ temperature), using a value that is correct at the freezing point at 35 PSU and 5e6 Pa (500 dbar). More...
 
interface  calculate_tfreeze_teos10
 Compute the freezing point conservative temperature [degC] from absolute salinity [g/kg] and pressure [Pa] using the TEOS10 package. More...
 

Functions/Subroutines

subroutine calculate_tfreeze_linear_scalar (S, pres, T_Fr, TFr_S0_P0, dTFr_dS, dTFr_dp)
 This subroutine computes the freezing point potential temperature [degC] from salinity [ppt], and pressure [Pa] using a simple linear expression, with coefficients passed in as arguments. More...
 
subroutine calculate_tfreeze_linear_array (S, pres, T_Fr, start, npts, TFr_S0_P0, dTFr_dS, dTFr_dp)
 This subroutine computes an array of freezing point potential temperatures [degC] from salinity [ppt], and pressure [Pa] using a simple linear expression, with coefficients passed in as arguments. More...
 
subroutine calculate_tfreeze_millero_scalar (S, pres, T_Fr)
 This subroutine computes the freezing point potential temperature [degC] from salinity [ppt], and pressure [Pa] using the expression from Millero (1978) (and in appendix A of Gill 1982), but with the of the pressure dependence changed from 7.53e-8 to 7.75e-8 to make this an expression for potential temperature (not in situ temperature), using a value that is correct at the freezing point at 35 PSU and 5e6 Pa (500 dbar). More...
 
subroutine calculate_tfreeze_millero_array (S, pres, T_Fr, start, npts)
 This subroutine computes the freezing point potential temperature [degC] from salinity [ppt], and pressure [Pa] using the expression from Millero (1978) (and in appendix A of Gill 1982), but with the of the pressure dependence changed from 7.53e-8 to 7.75e-8 to make this an expression for potential temperature (not in situ temperature), using a value that is correct at the freezing point at 35 PSU and 5e6 Pa (500 dbar). More...
 
subroutine calculate_tfreeze_teos10_scalar (S, pres, T_Fr)
 This subroutine computes the freezing point conservative temperature [degC] from absolute salinity [g/kg], and pressure [Pa] using the TEOS10 package. More...
 
subroutine calculate_tfreeze_teos10_array (S, pres, T_Fr, start, npts)
 This subroutine computes the freezing point conservative temperature [degC] from absolute salinity [g/kg], and pressure [Pa] using the TEOS10 package. More...
 

Function/Subroutine Documentation

◆ calculate_tfreeze_linear_array()

subroutine mom_tfreeze::calculate_tfreeze_linear_array ( real, dimension(:), intent(in)  S,
real, dimension(:), intent(in)  pres,
real, dimension(:), intent(out)  T_Fr,
integer, intent(in)  start,
integer, intent(in)  npts,
real, intent(in)  TFr_S0_P0,
real, intent(in)  dTFr_dS,
real, intent(in)  dTFr_dp 
)
private

This subroutine computes an array of freezing point potential temperatures [degC] from salinity [ppt], and pressure [Pa] using a simple linear expression, with coefficients passed in as arguments.

Parameters
[in]ssalinity [ppt].
[in]prespressure [Pa].
[out]t_frFreezing point potential temperature [degC].
[in]startthe starting point in the arrays.
[in]nptsthe number of values to calculate.
[in]tfr_s0_p0The freezing point at S=0, p=0, [degC].
[in]dtfr_dsThe derivative of freezing point with salinity, [degC PSU-1].
[in]dtfr_dpThe derivative of freezing point with pressure, [degC Pa-1].

Definition at line 62 of file MOM_TFreeze.F90.

62  real, dimension(:), intent(in) :: S !< salinity [ppt].
63  real, dimension(:), intent(in) :: pres !< pressure [Pa].
64  real, dimension(:), intent(out) :: T_Fr !< Freezing point potential temperature [degC].
65  integer, intent(in) :: start !< the starting point in the arrays.
66  integer, intent(in) :: npts !< the number of values to calculate.
67  real, intent(in) :: TFr_S0_P0 !< The freezing point at S=0, p=0, [degC].
68  real, intent(in) :: dTFr_dS !< The derivative of freezing point with salinity,
69  !! [degC PSU-1].
70  real, intent(in) :: dTFr_dp !< The derivative of freezing point with pressure,
71  !! [degC Pa-1].
72  integer :: j
73 
74  do j=start,start+npts-1
75  t_fr(j) = (tfr_s0_p0 + dtfr_ds*s(j)) + dtfr_dp*pres(j)
76  enddo
77 

◆ calculate_tfreeze_linear_scalar()

subroutine mom_tfreeze::calculate_tfreeze_linear_scalar ( real, intent(in)  S,
real, intent(in)  pres,
real, intent(out)  T_Fr,
real, intent(in)  TFr_S0_P0,
real, intent(in)  dTFr_dS,
real, intent(in)  dTFr_dp 
)
private

This subroutine computes the freezing point potential temperature [degC] from salinity [ppt], and pressure [Pa] using a simple linear expression, with coefficients passed in as arguments.

Parameters
[in]ssalinity [ppt].
[in]prespressure [Pa].
[out]t_frFreezing point potential temperature [degC].
[in]tfr_s0_p0The freezing point at S=0, p=0 [degC].
[in]dtfr_dsThe derivative of freezing point with salinity, [degC ppt-1].
[in]dtfr_dpThe derivative of freezing point with pressure, [degC Pa-1].

Definition at line 44 of file MOM_TFreeze.F90.

44  real, intent(in) :: S !< salinity [ppt].
45  real, intent(in) :: pres !< pressure [Pa].
46  real, intent(out) :: T_Fr !< Freezing point potential temperature [degC].
47  real, intent(in) :: TFr_S0_P0 !< The freezing point at S=0, p=0 [degC].
48  real, intent(in) :: dTFr_dS !< The derivative of freezing point with salinity,
49  !! [degC ppt-1].
50  real, intent(in) :: dTFr_dp !< The derivative of freezing point with pressure,
51  !! [degC Pa-1].
52 
53  t_fr = (tfr_s0_p0 + dtfr_ds*s) + dtfr_dp*pres
54 

◆ calculate_tfreeze_millero_array()

subroutine mom_tfreeze::calculate_tfreeze_millero_array ( real, dimension(:), intent(in)  S,
real, dimension(:), intent(in)  pres,
real, dimension(:), intent(out)  T_Fr,
integer, intent(in)  start,
integer, intent(in)  npts 
)
private

This subroutine computes the freezing point potential temperature [degC] from salinity [ppt], and pressure [Pa] using the expression from Millero (1978) (and in appendix A of Gill 1982), but with the of the pressure dependence changed from 7.53e-8 to 7.75e-8 to make this an expression for potential temperature (not in situ temperature), using a value that is correct at the freezing point at 35 PSU and 5e6 Pa (500 dbar).

Parameters
[in]sSalinity [PSU].
[in]presPressure [Pa].
[out]t_frFreezing point potential temperature [degC].
[in]startThe starting point in the arrays.
[in]nptsThe number of values to calculate.

Definition at line 106 of file MOM_TFreeze.F90.

106  real, dimension(:), intent(in) :: S !< Salinity [PSU].
107  real, dimension(:), intent(in) :: pres !< Pressure [Pa].
108  real, dimension(:), intent(out) :: T_Fr !< Freezing point potential temperature [degC].
109  integer, intent(in) :: start !< The starting point in the arrays.
110  integer, intent(in) :: npts !< The number of values to calculate.
111 
112  ! Local variables
113  real, parameter :: cS1 = -0.0575, cs3_2 = 1.710523e-3, cs2 = -2.154996e-4
114  real, parameter :: dTFr_dp = -7.75e-8
115  integer :: j
116 
117  do j=start,start+npts-1
118  t_fr(j) = s(j)*(cs1 + (cs3_2 * sqrt(max(s(j),0.0)) + cs2 * s(j))) + &
119  dtfr_dp*pres(j)
120  enddo
121 

◆ calculate_tfreeze_millero_scalar()

subroutine mom_tfreeze::calculate_tfreeze_millero_scalar ( real, intent(in)  S,
real, intent(in)  pres,
real, intent(out)  T_Fr 
)
private

This subroutine computes the freezing point potential temperature [degC] from salinity [ppt], and pressure [Pa] using the expression from Millero (1978) (and in appendix A of Gill 1982), but with the of the pressure dependence changed from 7.53e-8 to 7.75e-8 to make this an expression for potential temperature (not in situ temperature), using a value that is correct at the freezing point at 35 PSU and 5e6 Pa (500 dbar).

Parameters
[in]sSalinity in PSU.
[in]presPressure [Pa].
[out]t_frFreezing point potential temperature [degC].

Definition at line 87 of file MOM_TFreeze.F90.

87  real, intent(in) :: S !< Salinity in PSU.
88  real, intent(in) :: pres !< Pressure [Pa].
89  real, intent(out) :: T_Fr !< Freezing point potential temperature [degC].
90 
91  ! Local variables
92  real, parameter :: cS1 = -0.0575, cs3_2 = 1.710523e-3, cs2 = -2.154996e-4
93  real, parameter :: dTFr_dp = -7.75e-8
94 
95  t_fr = s*(cs1 + (cs3_2 * sqrt(max(s,0.0)) + cs2 * s)) + dtfr_dp*pres
96 

◆ calculate_tfreeze_teos10_array()

subroutine mom_tfreeze::calculate_tfreeze_teos10_array ( real, dimension(:), intent(in)  S,
real, dimension(:), intent(in)  pres,
real, dimension(:), intent(out)  T_Fr,
integer, intent(in)  start,
integer, intent(in)  npts 
)
private

This subroutine computes the freezing point conservative temperature [degC] from absolute salinity [g/kg], and pressure [Pa] using the TEOS10 package.

Parameters
[in]sabsolute salinity [g/kg].
[in]prespressure [Pa].
[out]t_frFreezing point conservative temperature [degC].
[in]startthe starting point in the arrays.
[in]nptsthe number of values to calculate.

Definition at line 148 of file MOM_TFreeze.F90.

148  real, dimension(:), intent(in) :: S !< absolute salinity [g/kg].
149  real, dimension(:), intent(in) :: pres !< pressure [Pa].
150  real, dimension(:), intent(out) :: T_Fr !< Freezing point conservative temperature [degC].
151  integer, intent(in) :: start !< the starting point in the arrays.
152  integer, intent(in) :: npts !< the number of values to calculate.
153 
154  ! Local variables
155  real, parameter :: Pa2db = 1.e-4 ! The conversion factor from Pa to dbar.
156  real :: zs,zp
157  integer :: j
158  ! Assume sea-water contains no dissolved air.
159  real, parameter :: saturation_fraction = 0.0
160 
161  do j=start,start+npts-1
162  !Conversions
163  zs = s(j)
164  zp = pres(j)* pa2db !Convert pressure from Pascal to decibar
165 
166  if (s(j) < -1.0e-10) cycle !Can we assume safely that this is a missing value?
167  t_fr(j) = gsw_ct_freezing_exact(zs,zp,saturation_fraction)
168  enddo
169 

Referenced by calculate_tfreeze_teos10_scalar().

Here is the caller graph for this function:

◆ calculate_tfreeze_teos10_scalar()

subroutine mom_tfreeze::calculate_tfreeze_teos10_scalar ( real, intent(in)  S,
real, intent(in)  pres,
real, intent(out)  T_Fr 
)
private

This subroutine computes the freezing point conservative temperature [degC] from absolute salinity [g/kg], and pressure [Pa] using the TEOS10 package.

Parameters
[in]sAbsolute salinity [g/kg].
[in]presPressure [Pa].
[out]t_frFreezing point conservative temperature [degC].

Definition at line 128 of file MOM_TFreeze.F90.

128  real, intent(in) :: S !< Absolute salinity [g/kg].
129  real, intent(in) :: pres !< Pressure [Pa].
130  real, intent(out) :: T_Fr !< Freezing point conservative temperature [degC].
131 
132  ! Local variables
133  real, dimension(1) :: S0, pres0
134  real, dimension(1) :: tfr0
135 
136  s0(1) = s
137  pres0(1) = pres
138 
139  call calculate_tfreeze_teos10_array(s0, pres0, tfr0, 1, 1)
140  t_fr = tfr0(1)
141 

References calculate_tfreeze_teos10_array().

Here is the call graph for this function: