def pt_from_t(SA, t, p, p_ref=0): r"""Calculates potential temperature with the general reference pressure, pr, from in situ temperature. Parameters ---------- SA : array_like Absolute salinity [g kg :sup:`-1`] t : array_like in situ temperature [:math:`^\circ` C (ITS-90)] p : array_like pressure [dbar] p_ref : int, float, optional reference pressure, default = 0 Returns ------- pt : array_like potential temperature [:math:`^\circ` C (ITS-90)] See Also -------- TODO Notes ----- This function calls `entropy_part` which evaluates entropy except for the parts which are a function of Absolute Salinity alone. A faster routine exists pt0_from_t(SA,t,p) if p_ref is indeed zero dbar. Examples -------- >>> import gsw >>> SA = [34.7118, 34.8915, 35.0256, 34.8472, 34.7366, 34.7324] >>> t = [28.7856, 28.4329, 22.8103, 10.2600, 6.8863, 4.4036] >>> p = [10, 50, 125, 250, 600, 1000] >>> gsw.pt_from_t(SA, t, p) array([ 28.78319682, 28.42098334, 22.7849304 , 10.23052366, 6.82923022, 4.32451057]) >>> gsw.pt_from_t(SA, t, p, pr = 1000) array([ 29.02665528, 28.662375 , 22.99149634, 10.35341725, 6.92732954, 4.4036 ]) References ---------- .. [1] IOC, SCOR and IAPSO, 2010: The international thermodynamic equation of seawater - 2010: Calculation and use of thermodynamic properties. Intergovernmental Oceanographic Commission, Manuals and Guides No. 56, UNESCO (English), 196 pp. See section 3.1. .. [2] McDougall T.J., P.M. Barker, R. Feistel and D.R. Jackett, 2011: A computationally efficient 48-term expression for the density of seawater in terms of Conservative Temperature, and related properties of seawater. Modifications: 2011-03-29. Trevor McDougall, David Jackett, Claire Roberts-Thomson and Paul Barker. """ p_ref = np.asanyarray(p_ref) SA = np.maximum(SA, 0) s1 = SA * 35. / SSO pt = (t + (p - p_ref) * (8.65483913395442e-6 - s1 * 1.41636299744881e-6 - (p + p_ref) * 7.38286467135737e-9 + t * (-8.38241357039698e-6 + s1 * 2.83933368585534e-8 + t * 1.77803965218656e-8 + (p + p_ref) * 1.71155619208233e-10))) dentropy_dt = cp0 / ((Kelvin + pt) * (1 - 0.05 * (1 - SA / SSO))) true_entropy_part = entropy_part(SA, t, p) for Number_of_iterations in range(0, 2, 1): pt_old = pt dentropy = entropy_part(SA, pt_old, p_ref) - true_entropy_part pt = pt_old - dentropy / dentropy_dt # half way through the method ptm = 0.5 * (pt + pt_old) dentropy_dt = -gibbs(n0, n2, n0, SA, ptm, p_ref) pt = pt_old - dentropy / dentropy_dt """maximum error of 6.3x10^-9 degrees C for one iteration. maximum error is 1.8x10^-14 degrees C for two iterations (two iterations is the default, "for Number_of_iterations = 1:2). These errors are over the full "oceanographic funnel" of McDougall et al. (2010), which reaches down to p = 8000 dbar.""" return pt
def pt0_from_t(SA, t, p): r"""Calculates potential temperature with reference pressure, pr = 0 dbar. The present routine is computationally faster than the more general function "pt_from_t(SA, t, p, pr)" which can be used for any reference pressure value. Parameters ---------- SA : array_like Absolute salinity [g kg :sup:`-1`] t : array_like in situ temperature [:math:`^\circ` C (ITS-90)] p : array_like pressure [dbar] Returns ------- pt0 : array_like potential temperature relative to 0 dbar [:math:`^\circ` C (ITS-90)] See Also -------- entropy_part, gibbs_pt0_pt0, entropy_part_zerop Notes ----- pt_from_t has the same result (only slower) Examples -------- >>> import gsw >>> SA = [34.7118, 34.8915, 35.0256, 34.8472, 34.7366, 34.7324] >>> t = [28.7856, 28.4329, 22.8103, 10.2600, 6.8863, 4.4036] >>> p = [10, 50, 125, 250, 600, 1000] >>> gsw.pt0_from_t(SA, t, p) array([ 28.78319682, 28.42098334, 22.7849304 , 10.23052366, 6.82923022, 4.32451057]) References ---------- .. [1] IOC, SCOR and IAPSO, 2010: The international thermodynamic equation of seawater - 2010: Calculation and use of thermodynamic properties. Intergovernmental Oceanographic Commission, Manuals and Guides No. 56, UNESCO (English), 196 pp. See section 3.1. .. [2] McDougall T. J., D. R. Jackett, P. M. Barker, C. Roberts-Thomson, R. Feistel and R. W. Hallberg, 2010: A computationally efficient 25-term expression for the density of seawater in terms of Conservative Temperature, and related properties of seawater. Modifications: 2011-03-29. Trevor McDougall, David Jackett, Claire Roberts-Thomson and Paul Barker. """ s1 = SA * (35. / SSO) pt0 = t + p * (8.65483913395442e-6 - s1 * 1.41636299744881e-6 - p * 7.38286467135737e-9 + t * (-8.38241357039698e-6 + s1 * 2.83933368585534e-8 + t * 1.77803965218656e-8 + p * 1.71155619208233e-10)) dentropy_dt = cp0 / ((Kelvin + pt0) * (1 - 0.05 * (1 - SA / SSO))) true_entropy_part = entropy_part(SA, t, p) for Number_of_iterations in range(0, 2, 1): pt0_old = pt0 dentropy = entropy_part_zerop(SA, pt0_old) - true_entropy_part pt0 = pt0_old - dentropy / dentropy_dt # Half way through mod. method. pt0m = 0.5 * (pt0 + pt0_old) dentropy_dt = -gibbs_pt0_pt0(SA, pt0m) pt0 = pt0_old - dentropy / dentropy_dt """maximum error of 6.3x10^-9 degrees C for one iteration. maximum error is 1.8x10^-14 degrees C for two iterations (two iterations is the default, "for Number_of_iterations = 1:2"). These errors are over the full "oceanographic funnel" of McDougall et al. (2010), which reaches down to p = 8000 dbar.""" return pt0
def pt0_from_t(SA, t, p): r"""Calculates potential temperature with reference pressure, pr = 0 dbar. The present routine is computationally faster than the more general function "pt_from_t(SA, t, p, pr)" which can be used for any reference pressure value. Parameters ---------- SA : array_like Absolute salinity [g kg :sup:`-1`] t : array_like in situ temperature [:math:`^\circ` C (ITS-90)] p : array_like pressure [dbar] Returns ------- pt0 : array_like potential temperature relative to 0 dbar [:math:`^\circ` C (ITS-90)] See Also -------- entropy_part, gibbs_pt0_pt0, entropy_part_zerop Notes ----- pt_from_t has the same result (only slower) Examples -------- >>> import gsw >>> SA = [34.7118, 34.8915, 35.0256, 34.8472, 34.7366, 34.7324] >>> t = [28.7856, 28.4329, 22.8103, 10.2600, 6.8863, 4.4036] >>> p = [10, 50, 125, 250, 600, 1000] >>> gsw.pt0_from_t(SA, t, p) array([ 28.78319682, 28.42098334, 22.7849304 , 10.23052366, 6.82923022, 4.32451057]) References ---------- .. [1] IOC, SCOR and IAPSO, 2010: The international thermodynamic equation of seawater - 2010: Calculation and use of thermodynamic properties. Intergovernmental Oceanographic Commission, Manuals and Guides No. 56, UNESCO (English), 196 pp. See section 3.1. .. [2] McDougall T. J., D. R. Jackett, P. M. Barker, C. Roberts-Thomson, R. Feistel and R. W. Hallberg, 2010: A computationally efficient 25-term expression for the density of seawater in terms of Conservative Temperature, and related properties of seawater. Modifications: 2011-03-29. Trevor McDougall, David Jackett, Claire Roberts-Thomson and Paul Barker. """ SA = np.maximum(SA, 0) s1 = SA * (35. / SSO) pt0 = t + p * (8.65483913395442e-6 - s1 * 1.41636299744881e-6 - p * 7.38286467135737e-9 + t * (-8.38241357039698e-6 + s1 * 2.83933368585534e-8 + t * 1.77803965218656e-8 + p * 1.71155619208233e-10)) dentropy_dt = cp0 / ((Kelvin + pt0) * (1 - 0.05 * (1 - SA / SSO))) true_entropy_part = entropy_part(SA, t, p) for Number_of_iterations in range(0, 2, 1): pt0_old = pt0 dentropy = entropy_part_zerop(SA, pt0_old) - true_entropy_part # Half way the mod. method (McDougall and Wotherspoon, 2012). pt0 = pt0_old - dentropy / dentropy_dt pt0m = 0.5 * (pt0 + pt0_old) dentropy_dt = -gibbs_pt0_pt0(SA, pt0m) pt0 = pt0_old - dentropy / dentropy_dt """maximum error of 6.3x10^-9 degrees C for one iteration. maximum error is 1.8x10^-14 degrees C for two iterations (two iterations is the default, "for Number_of_iterations = 1:2"). These errors are over the full "oceanographic funnel" of McDougall et al. (2010), which reaches down to p = 8000 dbar.""" return pt0
def pt_from_t(SA, t, p, p_ref=0): r"""Calculates potential temperature with the general reference pressure, pr, from in situ temperature. Parameters ---------- SA : array_like Absolute salinity [g kg :sup:`-1`] t : array_like in situ temperature [:math:`^\circ` C (ITS-90)] p : array_like pressure [dbar] p_ref : int, float, optional reference pressure, default = 0 Returns ------- pt : array_like potential temperature [:math:`^\circ` C (ITS-90)] See Also -------- TODO Notes ----- This function calls `entropy_part` which evaluates entropy except for the parts which are a function of Absolute Salinity alone. A faster routine exists pt0_from_t(SA,t,p) if p_ref is indeed zero dbar. Examples -------- >>> import gsw >>> SA = [34.7118, 34.8915, 35.0256, 34.8472, 34.7366, 34.7324] >>> t = [28.7856, 28.4329, 22.8103, 10.2600, 6.8863, 4.4036] >>> p = [10, 50, 125, 250, 600, 1000] >>> gsw.pt_from_t(SA, t, p) array([ 28.78319682, 28.42098334, 22.7849304 , 10.23052366, 6.82923022, 4.32451057]) >>> gsw.pt_from_t(SA, t, p, pr = 1000) array([ 29.02665528, 28.662375 , 22.99149634, 10.35341725, 6.92732954, 4.4036 ]) References ---------- .. [1] IOC, SCOR and IAPSO, 2010: The international thermodynamic equation of seawater - 2010: Calculation and use of thermodynamic properties. Intergovernmental Oceanographic Commission, Manuals and Guides No. 56, UNESCO (English), 196 pp. See section 3.1. .. [2] McDougall T.J., P.M. Barker, R. Feistel and D.R. Jackett, 2011: A computationally efficient 48-term expression for the density of seawater in terms of Conservative Temperature, and related properties of seawater. Modifications: 2011-03-29. Trevor McDougall, David Jackett, Claire Roberts-Thomson and Paul Barker. """ p_ref = np.asanyarray(p_ref) n0, n2 = 0, 2 SA[SA < 0] = 0 s1 = SA * 35. / SSO pt = (t + (p - p_ref) * (8.65483913395442e-6 - s1 * 1.41636299744881e-6 - (p + p_ref) * 7.38286467135737e-9 + t * (-8.38241357039698e-6 + s1 * 2.83933368585534e-8 + t * 1.77803965218656e-8 + (p + p_ref) * 1.71155619208233e-10))) dentropy_dt = cp0 / ((Kelvin + pt) * (1 - 0.05 * (1 - SA / SSO))) true_entropy_part = entropy_part(SA, t, p) for Number_of_iterations in range(0, 2, 1): pt_old = pt dentropy = entropy_part(SA, pt_old, p_ref) - true_entropy_part pt = pt_old - dentropy / dentropy_dt # half way through the method ptm = 0.5 * (pt + pt_old) dentropy_dt = -gibbs(n0, n2, n0, SA, ptm, p_ref) pt = pt_old - dentropy / dentropy_dt """maximum error of 6.3x10^-9 degrees C for one iteration. maximum error is 1.8x10^-14 degrees C for two iterations (two iterations is the default, "for Number_of_iterations = 1:2). These errors are over the full "oceanographic funnel" of McDougall et al. (2010), which reaches down to p = 8000 dbar.""" return pt