Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
function dens = sw_dens(S,T,P)
% SW_DENS Density of sea water
%=========================================================================
% SW_DENS $Revision: 1.3 $ $Date: 1994/10/10 04:39:16 $
% Copyright (C) CSIRO, Phil Morgan 1992.
%
% USAGE: dens = sw_dens(S,T,P)
%
% DESCRIPTION:
% Density of Sea Water using UNESCO 1983 (EOS 80) polynomial.
%
% INPUT: (all must have same dimensions)
% S = salinity [psu (PSS-78)]
% T = temperature [degree C (IPTS-68)]
% P = pressure [db]
% (P may have dims 1x1, mx1, 1xn or mxn for S(mxn) )
%
% OUTPUT:
% dens = density [kg/m^3]
%
% AUTHOR: Phil Morgan 92-11-05 (morgan@ml.csiro.au)
%
% DISCLAIMER:
% This software is provided "as is" without warranty of any kind.
% See the file sw_copy.m for conditions of use and licence.
%
% REFERENCES:
% Fofonoff, P. and Millard, R.C. Jr
% Unesco 1983. Algorithms for computation of fundamental properties of
% seawater, 1983. _Unesco Tech. Pap. in Mar. Sci._, No. 44, 53 pp.
%
% Millero, F.J., Chen, C.T., Bradshaw, A., and Schleicher, K.
% " A new high pressure equation of state for seawater"
% Deap-Sea Research., 1980, Vol27A, pp255-264.
%=========================================================================
% CALLER: general purpose
% CALLEE: sw_dens0.m sw_seck.m
% UNESCO 1983. eqn.7 p.15
%----------------------
% CHECK INPUT ARGUMENTS
%----------------------
if nargin ~=3
error('sw_dens.m: Must pass 3 parameters')
end %if
% CHECK S,T,P dimensions and verify consistent
[ms,ns] = size(S);
[mt,nt] = size(T);
[mp,np] = size(P);
% CHECK THAT S & T HAVE SAME SHAPE
if (ms~=mt) | (ns~=nt)
error('check_stp: S & T must have same dimensions')
end %if
% CHECK OPTIONAL SHAPES FOR P
if mp==1 & np==1 % P is a scalar. Fill to size of S
P = P(1)*ones(ms,ns);
elseif np==ns & mp==1 % P is row vector with same cols as S
P = P( ones(1,ms), : ); % Copy down each column.
elseif mp==ms & np==1 % P is column vector
P = P( :, ones(1,ns) ); % Copy across each row
elseif mp==ms & np==ns % PR is a matrix size(S)
% shape ok
else
error('check_stp: P has wrong dimensions')
end %if
[mp,np] = size(P);
% IF ALL ROW VECTORS ARE PASSED THEN LET US PRESERVE SHAPE ON RETURN.
Transpose = 0;
if mp == 1 % row vector
P = P(:);
T = T(:);
S = S(:);
Transpose = 1;
end %if
%***check_stp
%------
% BEGIN
%------
densP0 = sw_dens0(S,T);
K = sw_seck(S,T,P);
P = P/10; % convert from db to atm pressure units
dens = densP0./(1-P./K);
if Transpose
dens = dens';
end %if
return
%--------------------------------------------------------------------