-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathcool_skin.m
187 lines (149 loc) · 7.16 KB
/
cool_skin.m
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
function [delta,Dter,Dqer] = cool_skin(sal,Tw,rhoa,cpa,Pa, ...
U_star,T_star,Q_star, ...
dlw,dsw,nsw,delta,g,Rgas, ...
CtoK,Qsat_coeff)
% COOL_SKIN: compute the cool-skin parameters.
% COOL_SKIN computes the cool-skin parameters. This code follows
% the fortran program bulk_v25b.f. For more details, see the cool-skin
% and warm layer paper by Fairall et al (1996), JGR, 101, 1295-1308.
% All input variables should be vectors (either row or column), except
% Rgas, CtoK, Qsat_coeff, and g, which can be scalars. Uses some
% functions from CSIRO SEAWATER TOOLBOX.
%
% INPUT: sal - salinity [psu (PSS-78)]
% Tw - water surface temperature [C]
% rhoa - air density [kg/m^3]
% cpa - specific heat capacity of air [J/kg/C]
% Pa - air pressure [mb]
% U_star - friction velocity including gustiness [m/s]
% T_star - temperature scale [C]
% Q_star - humidity scale [kg/kg]
% dlw - downwelling (INTO water) longwave radiation [W/m^2]
% dsw - measured insolation [W/m^2]
% nsw - net shortwave radiation INTO water [W/m^2]
% delta - cool-skin layer thickness [m]
% g - gravitational constant [m/s^2]
% Rgas - gas constant for dry air [J/kg/K]
% CtoK - conversion factor for deg C to K
% Qsat_coeff - saturation specific humidity coefficient
%
% OUTPUT: delta - cool-skin layer thickness [m]
% Dter - cool-skin temperature difference [C]; positive if
% surface is cooler than bulk (presently no warm skin
% permitted by model)
% Dqer - cool-skin specific humidity difference [kg/kg]
%
% USAGE: [delta,Dter,Dqer] = cool_skin(sal,Tw,rhoa,cpa,Pa, ...
% U_star,T_star,Q_star, ...
% dlw,dsw,nsw,delta,g,Rgas, ...
% CtoK,Qsat_coeff)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 4/9/99: version 1.2 (contributed by AA)
% 8/5/99: version 2.0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% -> column vectors
sal = sal(:); Tw = Tw(:); rhoa = rhoa(:); cpa = cpa(:); Pa = Pa(:);
U_star = U_star(:); T_star = T_star(:); Q_star = Q_star(:);
dlw = dlw(:); nsw = nsw(:); delta = delta(:); Rgas = Rgas(:);
CtoK = CtoK(:); Qsat_coeff = Qsat_coeff(:); g = g(:);
size_data = size(Tw);
alpha = sw_alpha(sal,Tw,0); % thermal expansion coeff [1/C]
beta_sal = sw_beta(sal,Tw,0); % saline contraction coeff [1/psu]
cpw = sw_cp(sal,Tw,0); % specific heat capacity [J/kg/C]
rhow = sw_dens0(sal,Tw); % density at atmospheric press [kg/m^3]
viscw = sw_visc(sal,Tw,0); % kinematic viscosity of sea-water [m^2/s]
tcondw = sw_tcond(sal,Tw,0); % thermal conductivity of sea-water [W/m/K]
% the following are values used for COARE
% alpha = 2.1e-5*(Tw+3.2).^0.79;% as used for COARE data
% beta_sal = 0.026./sal; % as used for COARE data
% cpw = 4000*ones(size(Tw)); % as used for COARE data
% rhow = 1022*ones(size(Tw)); % as used for COARE data
% viscw = 1e-6*ones(size(Tw)); % as used for COARE data
% tcondw = 0.6*ones(size(Tw)); % as used for COARE data
% latent heat of water
Le = (2.501-0.00237*Tw)*10^6;
% saturation specific humidity;
Qs = Qsat_coeff.*qsat(Tw,Pa);
% a big constant
bigc = (16.*g.*cpw.*(rhow.*viscw).^3)./(tcondw.^2.*rhoa.^2);
% constant for correction of dq; slope of sat. vap.
wetc = 0.622.*Le.*Qs./(Rgas.*(Tw+CtoK).^2);
% compute fluxes out of the ocean (i.e., up = positive)
hsb = - rhoa.*cpa.*U_star.*T_star;
hlb = - rhoa.*Le.*U_star.*Q_star;
% net longwave (positive up)
nlw = - lwhf(Tw,dlw,dsw);
% total heat flux out of the water surface
qout = nlw + hsb + hlb;
% compute deltaSc = fc*Sns, see sec. 2.4 (p. 1297-1298) in cool-skin paper
% 3 choices; comment out those that are not used!
deltaSc = zeros(size_data);
ipos_nsw = find(nsw > 0);
deltaSc(ipos_nsw) = f_c(delta(ipos_nsw),1).*nsw(ipos_nsw); % Paulson and Simpson (1981)
% deltaSc(ipos_nsw) = f_c(delta(ipos_nsw),2).*nsw(ipos_nsw); % COARE approx. to Paulson
% deltaSc(ipos_nsw) = f_c(delta(ipos_nsw),3).*nsw(ipos_nsw); % Hasse (1971)
qcol = qout - deltaSc;
% initialize
alphaQb = zeros(size_data);
lamda = zeros(size_data);
Dter = zeros(size_data);
ipos_qcol = find(qcol > 0);
% eqn. 17 in cool-skin paper
alphaQb(ipos_qcol) = alpha(ipos_qcol).*qcol(ipos_qcol) + ...
sal(ipos_qcol).*beta_sal(ipos_qcol) ...
.*hlb(ipos_qcol).*cpw(ipos_qcol)./Le(ipos_qcol);
% eqn. 14 in cool-skin paper
lamda(ipos_qcol) = 6./(1+(bigc(ipos_qcol).*alphaQb(ipos_qcol) ...
./U_star(ipos_qcol).^4).^0.75).^(1/3);
% eqn. 12 in cool-skin paper
delta(ipos_qcol) = lamda(ipos_qcol).*viscw(ipos_qcol) ...
./(sqrt(rhoa(ipos_qcol)./rhow(ipos_qcol)) ...
.*U_star(ipos_qcol));
% eqn. 13 in cool-skin paper
Dter(ipos_qcol) = qcol(ipos_qcol).*delta(ipos_qcol)./tcondw(ipos_qcol);
Dqer = wetc.*Dter;
function fc = f_c(delta,option)
% F_C: computes the absorption coefficient fc.
% fc=F_C(delta,option) computes the absorption coefficient fc.
%
% INPUT: delta - thickness of cool-skin layer [m]
% option - 1 use Paulson and Simpson (1981) data for seawater;
% See also p. 1298 of Fairall et al (1996) JGR, 101,
% cool-skin and warm-layer paper.
%
% 2 use approximation to Paulson as given in
% p. 1298 of Fairall et al (1996) JGR, 101, cool-skin
% and warm-layer paper.
%
% 3 use fc = const. = 0.19, as suggested by Hasse (1971).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 8/5/99: version 1.2 (contributed by AA)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if option == 1
% Use Paulson and Simpson data
% Wavelength bands for the coefficients [um]
% 1) 0.2-0.6
% 2) 0.6-0.9
% 3) 0.9-1.2
% 4) 1.2-1.5
% 5) 1.5-1.8
% 6) 1.8-2.1
% 7) 2.1-2.4
% 8) 2.4-2.7
% 9) 2.7-3.0
% F_i is the amplitude
F_i = [0.237 0.360 0.179 0.087 0.080 0.0246 0.025 0.007 0.0004];
F_i1 = repmat(F_i,length(delta),1);
% Gam_i is the absorption length [m]
Gam_i = [34.8 2.27 3.15e-2 5.48e-3 8.32e-4 1.26e-4 3.13e-4 7.82e-5 1.44e-5];
Gam_i1 = repmat(Gam_i,length(delta),1);
delta1 = repmat(delta,1,length(Gam_i));
% fc is the absorption in the cool-skin layer of thickness delta
fc = sum(F_i1.*(1-(Gam_i1./delta1).*(1-exp(-delta1./Gam_i1))), 2);
elseif option == 2
% use COARE approximation to Paulson and Simpson data
fc = 0.137+11.*delta-(6.6e-5./delta).*(1-exp(-delta/8e-4));
elseif option == 3
% use Hasse simple approximation
fc = 0.19;
end