1 |
function x=rho(S,T,P); |
2 |
% RHO density of seawater (kg/m^3) |
3 |
% |
4 |
% x=rho(S,T,P) |
5 |
% |
6 |
% given the salinity S (ppt), in situ temperature T (deg C) |
7 |
% and pressure P (dbars). |
8 |
% |
9 |
% Note: D. Menemenlis (MIT 18 jul 94) |
10 |
% This routine is a leaner version of SWSTATE for large matrices, |
11 |
% and the user can mix and match scalar, vector, and matrix inputs. |
12 |
% |
13 |
% See also SWSTATE |
14 |
|
15 |
% check that input arguments are same size, etc. |
16 |
if length(size(S))>2 | length(size(T))>2 | length(size(P))>2 |
17 |
if length(size(S)) ~= length(size(T)) | length(size(S)) ~= length(size(P)) |
18 |
error('for 3+ dimensioned arrays, S, T, and P must have same dimension') |
19 |
end |
20 |
if any(size(S)~=size(T)) | any(size(S)~=size(P)) |
21 |
error('for 3+ dimensioned arrays, S, T, and P must have same size') |
22 |
end |
23 |
else |
24 |
[NS,MS]=size(S); [NT,MT]=size(T); |
25 |
if ((NS==1 & MS==1) & (NT ~=1 | MT ~=1) ), |
26 |
S=S*ones(NT,MT); |
27 |
[NS,MS]=size(S); |
28 |
elseif ((NT==1 & MT==1) & (NS ~=1 | MS ~=1) ), |
29 |
T=T*ones(NS,MS); |
30 |
[NT,MT]=size(T); |
31 |
end |
32 |
|
33 |
if (NT+MT) > (NS+MS) |
34 |
if (MS==1), S=S*ones(1,MT); |
35 |
elseif (NS==1), S=S'*ones(1,MT); |
36 |
end |
37 |
elseif (NT+MT) < (NS+MS) |
38 |
if (MT==1), T=T*ones(1,MS); |
39 |
elseif (NT==1), T=T'*ones(1,MS); |
40 |
end |
41 |
[NT,MT]=size(T); |
42 |
end |
43 |
|
44 |
[NP,MP]=size(P); |
45 |
if max(NP,MP)>1 |
46 |
if (MP==1), P=P*ones(1,MT); |
47 |
elseif (NP==1), P=P'*ones(1,MT); |
48 |
end |
49 |
end |
50 |
end |
51 |
|
52 |
% CONVERT PRESSURE TO BARS AND TAKE SQUARE ROOT SALINITY. |
53 |
P=P/10.; |
54 |
SR = sqrt(abs(S)); |
55 |
|
56 |
% INTERNATIONAL ONE-ATMOSPHERE EQUATION OF STATE OF SEAWATER |
57 |
x = (4.8314E-4 * S + ... |
58 |
((-1.6546E-6*T+1.0227E-4).*T-5.72466E-3) .* SR + ... |
59 |
(((5.3875E-9*T-8.2467E-7).*T+7.6438E-5).*T-4.0899E-3).*T+8.24493E-1) ... |
60 |
.*S + ((((6.536332E-9*T-1.120083E-6).*T+1.001685E-4).*T ... |
61 |
-9.095290E-3).*T+6.793952E-2).*T-28.263737; |
62 |
|
63 |
% SPECIFIC VOLUME AT ATMOSPHERIC PRESSURE |
64 |
V350P = 1.0/1028.1063; |
65 |
x = -x*V350P./(1028.1063+x); |
66 |
|
67 |
% COMPUTE COMPRESSION TERMS |
68 |
SR = ((((9.1697E-10*T+2.0816E-8).*T-9.9348E-7) .* S + ... |
69 |
(5.2787E-8*T-6.12293E-6).*T+3.47718E-5) .*P + ... |
70 |
(1.91075E-4 * SR + (-1.6078E-6*T-1.0981E-5).*T+2.2838E-3) .* ... |
71 |
S + ((-5.77905E-7*T+1.16092E-4).*T+1.43713E-3).*T-0.1194975) ... |
72 |
.*P + (((-5.3009E-4*T+1.6483E-2).*T+7.944E-2) .* SR + ... |
73 |
((-6.1670E-5*T+1.09987E-2).*T-0.603459).*T+54.6746) .* S + ... |
74 |
(((-5.155288E-5*T+1.360477E-2).*T-2.327105).*T+148.4206).*T-1930.06; |
75 |
|
76 |
% EVALUATE PRESSURE POLYNOMIAL |
77 |
B = (5.03217E-5*P+3.359406).*P+21582.27; |
78 |
x = x.*(1.0 - P./B) + (V350P+x).*P.*SR./(B.*(B+SR)); |
79 |
SR = V350P.*(1.0 - P./B); |
80 |
x= 1028.106331 + P./B./SR - x ./ (SR.*(SR+x)); |