1 |
|
---|
2 |
function [n2,q,p_ave] = sw_bfrq(S,T,P,LAT) |
---|
3 |
|
---|
4 |
% SW_BFRQ Brunt-Vaisala Frequency Squared (N^2) |
---|
5 |
%=========================================================================== |
---|
6 |
% SW_BFRQ $Id: sw_bfrq.m,v 1.1 2003/12/12 04:23:22 pen078 Exp $ |
---|
7 |
% Copyright (C) CSIRO, Phil Morgan 1993. |
---|
8 |
% |
---|
9 |
% USAGE: [bfrq,vort,p_ave] = sw_bfrq(S,T,P,{LAT}) |
---|
10 |
% |
---|
11 |
% DESCRIPTION: |
---|
12 |
% Calculates Brunt-Vaisala Frequency squared (N^2) at the mid depths |
---|
13 |
% from the equation, |
---|
14 |
% |
---|
15 |
% -g d(pdens) |
---|
16 |
% N2 = ----- x -------- |
---|
17 |
% pdens d(z) |
---|
18 |
% |
---|
19 |
% Also returns Potential Vorticity from q = f*N2/g. |
---|
20 |
% |
---|
21 |
% INPUT: (all must have same dimensions MxN) |
---|
22 |
% S = salinity [psu (PSS-78) ] |
---|
23 |
% T = temperature [degree C (ITS-90)] |
---|
24 |
% P = pressure [db] |
---|
25 |
% |
---|
26 |
% OPTIONAL: |
---|
27 |
% LAT = Latitude in decimal degrees north [-90..+90] |
---|
28 |
% May have dimensions 1x1 or 1xN where S(MxN). |
---|
29 |
% (Will use sw_g instead of the default g=9.8 m^2/s) |
---|
30 |
% (Will also calc d(z) instead of d(p) in numerator) |
---|
31 |
% OUTPUT: |
---|
32 |
% bfrq = Brunt-Vaisala Frequency squared (M-1xN) [s^-2] |
---|
33 |
% vort = Planetary Potential Vorticity (M-1xN) [(ms)^-1] |
---|
34 |
% (if isempty(LAT) vort=NaN ) |
---|
35 |
% p_ave = Mid pressure between P grid (M-1xN) [db] |
---|
36 |
% |
---|
37 |
% AUTHOR: Phil Morgan 93-06-24, Lindsay Pender (Lindsay.Pender@csiro.au) |
---|
38 |
% |
---|
39 |
% DISCLAIMER: |
---|
40 |
% This software is provided "as is" without warranty of any kind. |
---|
41 |
% See the file sw_copy.m for conditions of use and licence. |
---|
42 |
% |
---|
43 |
% REFERENCES: |
---|
44 |
% A.E. Gill 1982. p.54 eqn 3.7.15 |
---|
45 |
% "Atmosphere-Ocean Dynamics" |
---|
46 |
% Academic Press: New York. ISBN: 0-12-283522-0 |
---|
47 |
% |
---|
48 |
% Jackett, D.R. and McDougall, T.J. 1994. |
---|
49 |
% Minimal adjustment of hydrographic properties to achieve static |
---|
50 |
% stability. submitted J.Atmos.Ocean.Tech. |
---|
51 |
% |
---|
52 |
% Greg Johnson (gjohnson@pmel.noaa.gov) |
---|
53 |
% added potential vorticity calcuation |
---|
54 |
%========================================================================= |
---|
55 |
|
---|
56 |
% Modifications |
---|
57 |
% 03-12-12. Lindsay Pender, Converted to ITS-90. |
---|
58 |
% 06-04-19. Lindsay Pender, Corrected sign of PV. |
---|
59 |
|
---|
60 |
% CALLER: general purpose |
---|
61 |
% CALLEE: sw_dens.m sw_pden.m |
---|
62 |
|
---|
63 |
%$Id: sw_bfrq.m,v 1.1 2003/12/12 04:23:22 pen078 Exp $ |
---|
64 |
|
---|
65 |
%------------- |
---|
66 |
% Check Inputs |
---|
67 |
%------------- |
---|
68 |
|
---|
69 |
error(nargchk(3, 4, nargin)); |
---|
70 |
|
---|
71 |
if nargin == 3 |
---|
72 |
LAT = []; |
---|
73 |
end |
---|
74 |
|
---|
75 |
% Get S,T,P dimensions and check consistency |
---|
76 |
|
---|
77 |
[ms,ns] = size(S); |
---|
78 |
[mt,nt] = size(T); |
---|
79 |
[mp,np] = size(P); |
---|
80 |
|
---|
81 |
% Check S, T P and have the same shape |
---|
82 |
|
---|
83 |
if (ms~=mt) | (ns~=nt) | (np~=np) |
---|
84 |
error('S, T & P must have same dimensions') |
---|
85 |
end |
---|
86 |
|
---|
87 |
% Check S and T have length at least of 2 |
---|
88 |
|
---|
89 |
if (ms * ns == 1) |
---|
90 |
error('Length of T, S and P must be at least 2') |
---|
91 |
end |
---|
92 |
|
---|
93 |
% If S, T and P are row vectors - transpose |
---|
94 |
|
---|
95 |
if ms == 1 |
---|
96 |
S = S'; |
---|
97 |
T = T'; |
---|
98 |
P = P'; |
---|
99 |
transpose = 1; |
---|
100 |
else |
---|
101 |
transpose = 0; |
---|
102 |
end |
---|
103 |
|
---|
104 |
% If lat passed then verify dimensions |
---|
105 |
|
---|
106 |
if ~isempty(LAT) |
---|
107 |
[mL,nL] = size(LAT); |
---|
108 |
if mL==1 & nL==1 |
---|
109 |
LAT = LAT*ones(size(S)); |
---|
110 |
else |
---|
111 |
if (ms~=mL) | (ns~=nL) % S & LAT are not the same shape |
---|
112 |
if (ns==nL) & (mL==1) % copy LATS down each column |
---|
113 |
LAT = LAT( ones(1,ms), : ); % s.t. dim(S)==dim(LAT) |
---|
114 |
else |
---|
115 |
error('Inputs arguments have wrong dimensions') |
---|
116 |
end |
---|
117 |
end |
---|
118 |
end |
---|
119 |
end |
---|
120 |
|
---|
121 |
%------ |
---|
122 |
% Begin |
---|
123 |
%------ |
---|
124 |
|
---|
125 |
if ~isempty(LAT) |
---|
126 |
% note that sw_g expects height as argument |
---|
127 |
Z = sw_dpth(P,LAT); |
---|
128 |
g = sw_g(LAT,-Z); |
---|
129 |
f = sw_f(LAT); |
---|
130 |
else |
---|
131 |
Z = P; |
---|
132 |
g = 9.8*ones(size(P)); |
---|
133 |
f = NaN*ones(size(P)); |
---|
134 |
end %if |
---|
135 |
|
---|
136 |
[m,n] = size(P); |
---|
137 |
iup = 1:m-1; |
---|
138 |
ilo = 2:m; |
---|
139 |
p_ave = (P(iup,:)+P(ilo,:) )/2; |
---|
140 |
pden_up = sw_pden(S(iup,:),T(iup,:),P(iup,:),p_ave); |
---|
141 |
pden_lo = sw_pden(S(ilo,:),T(ilo,:),P(ilo,:),p_ave); |
---|
142 |
|
---|
143 |
mid_pden = (pden_up + pden_lo )/2; |
---|
144 |
dif_pden = pden_up - pden_lo; |
---|
145 |
mid_g = (g(iup,:)+g(ilo,:))/2; |
---|
146 |
dif_z = diff(Z); |
---|
147 |
n2 = -mid_g .* dif_pden ./ (dif_z .* mid_pden); |
---|
148 |
|
---|
149 |
mid_f = f(iup,:); |
---|
150 |
q = -mid_f .* dif_pden ./ (dif_z .* mid_pden); |
---|
151 |
|
---|
152 |
if transpose |
---|
153 |
n2 = n2'; |
---|
154 |
q = q'; |
---|
155 |
p_ave = p_ave'; |
---|
156 |
end |
---|
157 |
|
---|