7
from library import gibbs
8
from gsw.utilities import match_args_return, strip_mask
9
from constants import Kelvin, db2Pascal, P0, SSO, cp0, R, sfac
10
from conversions import pt_from_CT, pt_from_t, pt0_from_t, molality_from_SA
11
from absolute_salinity_sstar_ct import CT_from_t
7
from .library import gibbs
8
from .absolute_salinity_sstar_ct import CT_from_t
9
from ..utilities import match_args_return, strip_mask
10
from .conversions import pt_from_CT, pt_from_t, pt0_from_t
11
from .constants import Kelvin, db2Pascal, P0, SSO, cp0, R, sfac, M_S
96
99
2011-03-29. Trevor McDougall
100
g000 = gibbs(n0, n0, n0, SA, t, p)
101
g001 = gibbs(n0, n0, n1, SA, t, p)
102
return (g000 - (db2Pascal * p + P0) * g001)
102
return (gibbs(n0, n0, n0, SA, t, p) -
103
(db2Pascal * p + P0) * gibbs(n0, n0, n1, SA, t, p))
105
106
@match_args_return
150
151
2011-03-29. Paul Barker, David Jackett and Trevor McDougal
154
rho = 1. / gibbs(n0, n0, n1, SA, t, p)
154
return 1. / gibbs(n0, n0, n1, SA, t, p)
159
157
@match_args_return
292
291
2011-03-29. David Jackett, Trevor McDougall and Paul Barker.
296
g000 = gibbs(n0, n0, n0, SA, t, p)
297
g010 = gibbs(n0, n1, n0, SA, t, p)
298
return g000 - (t + Kelvin) * g010
294
return (gibbs(n0, n0, n0, SA, t, p) -
295
(t + Kelvin) * gibbs(n0, n1, n0, SA, t, p))
301
298
@match_args_return
520
513
2011-03-29. David Jackett, Paul Barker and Trevor McDougall.
524
g020 = gibbs(n0, n2, n0, SA, t, p)
525
g011 = gibbs(n0, n1, n1, SA, t, p)
526
g001 = gibbs(n0, n0, n1, SA, t, p)
527
g002 = gibbs(n0, n0, n2, SA, t, p)
528
return g001 * np.sqrt(g020 / (g011 ** 2 - g020 * g002))
516
return (gibbs(n0, n0, n1, SA, t, p) * np.sqrt(gibbs(n0, n2, n0, SA, t, p) /
517
(gibbs(n0, n1, n1, SA, t, p) ** 2 - gibbs(n0, n2, n0, SA, t, p) *
518
gibbs(n0, n0, n2, SA, t, p))))
531
521
@match_args_return
579
569
2011-03-23. Trevor McDougall and Paul Barker
584
572
pt_zero = pt_from_CT(SSO, 0)
586
573
t_zero = pt_from_t(SSO, pt_zero, 0, p)
588
return (gibbs(n0, n0, n1, SA, t, p) - gibbs(n0, n0, n1, SSO, t_zero, p))
574
return (gibbs(n0, n0, n1, SA, t, p) -
575
gibbs(n0, n0, n1, SSO, t_zero, p))
591
578
@match_args_return
696
682
2011-03-29. Trevor McDougall
700
g000 = gibbs(n0, n0, n0, SA, t, p)
701
g010 = gibbs(n0, n1, n0, SA, t, p)
702
g001 = gibbs(n0, n0, n1, SA, t, p)
703
return g000 - (Kelvin + t) * g010 - (db2Pascal * p + P0) * g001
685
return (gibbs(n0, n0, n0, SA, t, p) -
686
(Kelvin + t) * gibbs(n0, n1, n0, SA, t, p) -
687
(db2Pascal * p + P0) * gibbs(n0, n0, n1, SA, t, p))
706
690
@match_args_return
757
741
2011-03-29. David Jackett, Trevor McDougall and Paul Barker
761
g002 = gibbs(n0, n0, n2, SA, t, p)
762
g001 = gibbs(n0, n0, n1, SA, t, p)
744
return -gibbs(n0, n0, n2, SA, t, p) / gibbs(n0, n0, n1, SA, t, p)
766
747
@match_args_return
816
797
2011-03-29. David Jackett, Trevor McDougall and Paul Barker
821
g011 = gibbs(n0, n1, n1, SA, t, p)
822
g001 = gibbs(n0, n0, n1, SA, t, p)
800
return gibbs(n0, n1, n1, SA, t, p) / gibbs(n0, n0, n1, SA, t, p)
826
803
@match_args_return
870
847
2011-03-29. Trevor McDougall
875
g020 = gibbs(n0, n2, n0, SA, t, p)
876
g011 = gibbs(n0, n1, n1, SA, t, p)
877
g002 = gibbs(n0, n0, n2, SA, t, p)
879
return -(Kelvin + t) * (g020 - g011 * g011 / g002)
850
return (-(Kelvin + t) * (gibbs(n0, n2, n0, SA, t, p) -
851
gibbs(n0, n1, n1, SA, t, p) ** 2 / gibbs(n0, n0, n2, SA, t, p)))
882
854
@match_args_return
944
916
2011-03-23. David Jackett, Trevor McDougall and Paul Barker
949
g020 = gibbs(n0, n2, n0, SA, t, p)
950
g011 = gibbs(n0, n1, n1, SA, t, p)
951
g002 = gibbs(n0, n0, n2, SA, t, p)
952
g001 = gibbs(n0, n0, n1, SA, t, p)
954
return (g011 ** 2 - g020 * g002) / (g001 * g020)
919
return ((gibbs(n0, n1, n1, SA, t, p) ** 2 - gibbs(n0, n2, n0, SA, t, p) *
920
gibbs(n0, n0, n2, SA, t, p)) / (gibbs(n0, n0, n1, SA, t, p) *
921
gibbs(n0, n2, n0, SA, t, p)))
957
924
@match_args_return
1017
984
2011-03-28. Trevor McDougall and Paul Barker.
1021
987
v_lab = np.ones_like(rho) / rho
1022
988
v_0 = gibbs(n0, n0, n1, 0, t, p)
1023
989
v_120 = gibbs(n0, n0, n1, 120, t, p)
1024
SA = 120 * (v_lab - v_0) / (v_120 - v_0) # Initial estimate of SA.
1025
Ior = (SA < 0) | (SA > 120)
1026
v_SA = (v_120 - v_0) / 120 # Initial estimate of v_SA, SA derivative of v
991
# Initial estimate of SA.
992
SA = 120 * (v_lab - v_0) / (v_120 - v_0)
993
Ior = np.logical_or(SA < 0, SA > 120)
995
# Initial estimate of v_SA, SA derivative of v
996
v_SA = (v_120 - v_0) / 120
1028
998
for k in range(0, 2):
1030
1000
delta_v = gibbs(n0, n0, n1, SA_old, t, p) - v_lab
1031
# Half way through the modified N-R method.
1001
# Half way the mod. N-R method (McDougall and Wotherspoon, 2012)
1032
1002
SA = SA_old - delta_v / v_SA
1033
1003
SA_mean = 0.5 * (SA + SA_old)
1034
1004
v_SA = gibbs(n1, n0, n1, SA_mean, t, p)
1134
1104
I_salty = alpha_freezing > alpha_limit
1136
t_diff = 40*ones(size(I_salty)) - t_freezing(I_salty);
1106
t_diff = 40. * np.ones_like(I_salty) - t_freezing(I_salty)
1138
1108
top = (rho_40[I_salty] - rho_freezing[I_salty] +
1139
1109
rho_freezing[I_salty] * alpha_freezing[I_salty] * t_diff)
1141
a = top / (t_diff ** 2)
1111
a = top / (t_diff ** 2)
1142
1112
b = -rho_freezing[I_salty] * alpha_freezing[I_salty]
1143
1113
c = rho_freezing[I_salty] - rho[I_salty]
1144
1114
sqrt_disc = np.sqrt(b ** 2 - 4 * a * c)
1314
1285
2011-03-29. Trevor McDougall and Paul Barker
1317
n0, n1, n2 = 0, 1, 2
1319
1288
pt0 = pt0_from_t(SA, t, p)
1321
1289
factor = -cp0 / ((Kelvin + pt0) * gibbs(n0, n2, n0, SA, t, p))
1323
g011 = gibbs(n0, n1, n1, SA, t, p)
1324
g001 = gibbs(n0, n0, n1, SA, t, p)
1326
return factor * (g011 / g001)
1290
return factor * (gibbs(n0, n1, n1, SA, t, p) / gibbs(n0, n0, n1, SA, t, p))
1329
1293
@match_args_return
1374
1338
2011-03-29. David Jackett, Trevor McDougall and Paul Barker
1377
n0, n1, n2 = 0, 1, 2
1379
1341
pt0 = pt0_from_t(SA, t, p)
1381
1342
factor = gibbs(n0, n2, n0, SA, pt0, 0) / gibbs(n0, n2, n0, SA, t, p)
1382
g011 = gibbs(n0, n1, n1, SA, t, p)
1383
g001 = gibbs(n0, n0, n1, SA, t, p)
1385
return factor * (g011 / g001)
1343
return factor * (gibbs(n0, n1, n1, SA, t, p) / gibbs(n0, n0, n1, SA, t, p))
1388
1346
@match_args_return
1436
1394
# TODO: Original GSW-V3 re-implements gibbs, check what to do here!
1438
n0, n1, n2 = 0, 1, 2
1440
1396
pt0 = pt0_from_t(SA, t, p)
1442
g001 = gibbs(n0, n0, n1, SA, t, p)
1443
g110 = gibbs(n1, n1, n0, SA, t, p)
1444
g100 = gibbs(n1, n0, n0, SA, pt0, 0)
1446
factora = g110 - g100 / (Kelvin + pt0)
1447
g020 = gibbs(n0, n2, n0, SA, t, p)
1448
factor = factora / (g001 * g020)
1450
g011 = gibbs(n0, n1, n1, SA, t, p)
1451
g101 = gibbs(n1, n0, n1, SA, t, p)
1453
return g011 * factor - g101 / g001
1398
factora = (gibbs(n1, n1, n0, SA, t, p) - gibbs(n1, n0, n0, SA, pt0, 0) /
1400
factor = (factora / (gibbs(n0, n0, n1, SA, t, p) *
1401
gibbs(n0, n2, n0, SA, t, p)))
1403
return (gibbs(n0, n1, n1, SA, t, p) * factor -
1404
gibbs(n1, n0, n1, SA, t, p) / gibbs(n0, n0, n1, SA, t, p))
1456
1407
@match_args_return
1501
1452
2011-04-10. Trevor McDougall and Paul Barker
1503
# TODO: Original GSW-V3 re-implements gibbs, check what to do here!
1505
n0, n1, n2 = 0, 1, 2
1454
# NOTE: The original Matlab toolbox re-implement some code here. Why?
1507
1456
pt0 = pt0_from_t(SA, t, p)
1509
g001 = gibbs(n0, n0, n1, SA, t, p)
1510
g110 = gibbs(n1, n1, n0, SA, t, p)
1511
factora = g110 - gibbs(n1, n1, n0, SA, pt0, 0)
1513
g020 = gibbs(n0, n2, n0, SA, t, p)
1514
factor = factora / (g001 * g020)
1516
g011 = gibbs(n0, n1, n1, SA, t, p)
1517
g101 = gibbs(n1, n0, n1, SA, t, p)
1519
return g011 * factor - g101 / g001
1458
factora = gibbs(n1, n1, n0, SA, t, p) - gibbs(n1, n1, n0, SA, pt0, 0)
1460
factor = (factora / (gibbs(n0, n0, n1, SA, t, p) *
1461
gibbs(n0, n2, n0, SA, t, p)))
1463
return (gibbs(n0, n1, n1, SA, t, p) * factor -
1464
gibbs(n1, n0, n1, SA, t, p) / gibbs(n0, n0, n1, SA, t, p))
1522
1467
@match_args_return
1567
1512
2011-03-29. David Jackett, Trevor McDougall and Paul Barker
1572
g101 = gibbs(n1, n0, n1, SA, t, p)
1573
g001 = gibbs(n0, n0, n1, SA, t, p)
1515
return -gibbs(n1, n0, n1, SA, t, p) / gibbs(n0, n0, n1, SA, t, p)
1577
1518
@match_args_return
1798
1739
2011-03-29. Trevor McDougall and Paul Barker
1801
n0, n1, n2 = 0, 1, 2
1802
g011 = gibbs(n0, n1, n1, SA, t, p)
1803
g020 = gibbs(n0, n2, n0, SA, t, p)
1804
return - g011 / g020
1742
return -gibbs(n0, n1, n1, SA, t, p) / gibbs(n0, n2, n0, SA, t, p)
1807
1745
@match_args_return
1848
1786
UNESCO (English), 196 pp.
1851
2011-04-01. Trevor McDougall and Paul Barker
1789
2011-04-01. Trevor McDougall and Paul Barker.
1790
2012-11-15. Trevor McDougall and Paul Barker.
1856
# Molality of seawater in mol/kg.
1857
molal = molality_from_SA(SA)
1858
part = molal * R * (Kelvin + t)
1861
g000 = gibbs(n0, n0, n0, SAzero, t, p)
1862
return (g000 - chem_potential_water_t_exact(SA, t, p)) / part
1793
SA = np.maximum(SA, 0)
1795
part = k * (1000 - SA) / (Kelvin + t)
1800
# Note that the input pressure (p) is sea pressure in units of dbar.
1803
oc = (7.231916621570606e1, 1.059039593127674e1, -3.025914794694813e1,
1804
5.040733670521486e1, -4.074543321119333e1, 1.864215613820487e1,
1805
-3.022566485046178, -6.138647522851840, 1.353207379758663e1,
1806
-7.316560781114737, 1.829232499785750, -5.358042980767074e-1,
1807
-1.705887283375562, -1.246962174707332e-1, 1.228376913546017,
1808
1.089364009088042e-2, -4.264828939262248e-1, 6.213127679460041e-2,
1809
2.481543497315280, -1.363368964861909, -5.640491627443773e-1,
1810
1.344724779893754, -2.180866793244492, 4.765753255963401,
1811
-5.726993916772165, 2.918303792060746, -6.506082399183509e-1,
1812
-1.015695507663942e-1, 1.035024326471108, -6.742173543702397e-1,
1813
8.465642650849419e-1, -7.508472135244717e-1, -3.668086444057845e-1,
1814
3.189939162107803e-1, -4.245629194309487e-2)
1816
tl = (oc[0] + oc[1] * y + x * (oc[2] + x * (oc[3] + x * (oc[4] + x *
1817
(oc[5] + oc[6] * x))) + y * (oc[7] + x * (oc[8] + x *
1818
(oc[9] + oc[10] * x)) + y * (oc[11] + oc[12] * x + y * (oc[13] +
1819
oc[14] * x + y * (oc[15] + x * (oc[16] + oc[17] * y))))) + z *
1820
(oc[18] + x * (oc[19] + oc[20] * y + oc[21] * x) + y * (oc[22] + y *
1821
(oc[23] + y * (oc[24] + oc[25] * y))) + z * (oc[26] + oc[27] * x + y *
1822
(oc[28] + oc[29] * y) + z * (oc[30] + oc[31] * x + y * (oc[32] +
1823
oc[33] * y) + oc[34] * z)))))
1865
1828
@match_args_return
1968
1930
for Number_of_iterations in range(0, 3):
1970
1932
gibbs_PT = gibbs(n0, n1, n1, SA, t_old, p)
1971
# This is half way through the modified method
1933
# Half way through the mod. method (McDougall and Wotherspoon, 2012)
1972
1934
t = t_old - gibbs_PT / gibbs_PTT
1973
1935
t_mean = 0.5 * (t + t_old)
1974
1936
gibbs_PTT = (gibbs(n0, n1, n1, SA, t_mean + dt, p) -
2022
1984
2011-05-26. Trevor McDougall and Paul Barker
1986
SA = np.maximum(SA, 0)
2025
1987
gibbs_pure_water = gibbs(0, 0, 0, 0, t, pw)
2027
1989
# Initial guess of p, in dbar.
2028
1990
p = pw + 235.4684
2030
1992
# Initial guess of df/dp.
2031
df_dp = -db2Pascal * (gibbs(0, 0, 1, SA, t, p) -
2032
SA * gibbs(1, 0, 1, SA, t, p))
1993
df_dp = -db2Pascal * (gibbs(n0, n0, n1, SA, t, p) -
1994
SA * gibbs(n1, n0, n1, SA, t, p))
2034
1996
for Number_of_iterations in range(0, 2):