


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)


0001 function [delta,Dter,Dqer] = cool_skin(sal,Tw,rhoa,cpa,Pa, ... 0002 U_star,T_star,Q_star, ... 0003 dlw,dsw,nsw,delta,g,Rgas, ... 0004 CtoK,Qsat_coeff) 0005 % COOL_SKIN: compute the cool-skin parameters. 0006 % COOL_SKIN computes the cool-skin parameters. This code follows 0007 % the fortran program bulk_v25b.f. For more details, see the cool-skin 0008 % and warm layer paper by Fairall et al (1996), JGR, 101, 1295-1308. 0009 % All input variables should be vectors (either row or column), except 0010 % Rgas, CtoK, Qsat_coeff, and g, which can be scalars. Uses some 0011 % functions from CSIRO SEAWATER TOOLBOX. 0012 % 0013 % INPUT: sal - salinity [psu (PSS-78)] 0014 % Tw - water surface temperature [C] 0015 % rhoa - air density [kg/m^3] 0016 % cpa - specific heat capacity of air [J/kg/C] 0017 % Pa - air pressure [mb] 0018 % U_star - friction velocity including gustiness [m/s] 0019 % T_star - temperature scale [C] 0020 % Q_star - humidity scale [kg/kg] 0021 % dlw - downwelling (INTO water) longwave radiation [W/m^2] 0022 % dsw - measured insolation [W/m^2] 0023 % nsw - net shortwave radiation INTO water [W/m^2] 0024 % delta - cool-skin layer thickness [m] 0025 % g - gravitational constant [m/s^2] 0026 % Rgas - gas constant for dry air [J/kg/K] 0027 % CtoK - conversion factor for deg C to K 0028 % Qsat_coeff - saturation specific humidity coefficient 0029 % 0030 % OUTPUT: delta - cool-skin layer thickness [m] 0031 % Dter - cool-skin temperature difference [C]; positive if 0032 % surface is cooler than bulk (presently no warm skin 0033 % permitted by model) 0034 % Dqer - cool-skin specific humidity difference [kg/kg] 0035 % 0036 % USAGE: [delta,Dter,Dqer] = cool_skin(sal,Tw,rhoa,cpa,Pa, ... 0037 % U_star,T_star,Q_star, ... 0038 % dlw,dsw,nsw,delta,g,Rgas, ... 0039 % CtoK,Qsat_coeff) 0040 0041 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0042 % 4/9/99: version 1.2 (contributed by AA) 0043 % 8/5/99: version 2.0 0044 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0045 0046 % -> column vectors 0047 sal = sal(:); Tw = Tw(:); rhoa = rhoa(:); cpa = cpa(:); Pa = Pa(:); 0048 U_star = U_star(:); T_star = T_star(:); Q_star = Q_star(:); 0049 dlw = dlw(:); nsw = nsw(:); delta = delta(:); Rgas = Rgas(:); 0050 CtoK = CtoK(:); Qsat_coeff = Qsat_coeff(:); g = g(:); 0051 0052 0053 size_data = size(Tw); 0054 0055 alpha = sw_alpha(sal,Tw,0); % thermal expansion coeff [1/C] 0056 beta_sal = sw_beta(sal,Tw,0); % saline contraction coeff [1/psu] 0057 cpw = sw_cp(sal,Tw,0); % specific heat capacity [J/kg/C] 0058 rhow = sw_dens0(sal,Tw); % density at atmospheric press [kg/m^3] 0059 viscw = sw_visc(sal,Tw,0); % kinematic viscosity of sea-water [m^2/s] 0060 tcondw = sw_tcond(sal,Tw,0); % thermal conductivity of sea-water [W/m/K] 0061 0062 % the following are values used for COARE 0063 % alpha = 2.1e-5*(Tw+3.2).^0.79;% as used for COARE data 0064 % beta_sal = 0.026./sal; % as used for COARE data 0065 % cpw = 4000*ones(size(Tw)); % as used for COARE data 0066 % rhow = 1022*ones(size(Tw)); % as used for COARE data 0067 % viscw = 1e-6*ones(size(Tw)); % as used for COARE data 0068 % tcondw = 0.6*ones(size(Tw)); % as used for COARE data 0069 0070 % latent heat of water 0071 Le = (2.501-0.00237*Tw)*10^6; 0072 0073 % saturation specific humidity; 0074 Qs = Qsat_coeff.*qsat(Tw,Pa); 0075 0076 % a big constant 0077 bigc = (16.*g.*cpw.*(rhow.*viscw).^3)./(tcondw.^2.*rhoa.^2); 0078 0079 % constant for correction of dq; slope of sat. vap. 0080 wetc = 0.622.*Le.*Qs./(Rgas.*(Tw+CtoK).^2); 0081 0082 % compute fluxes out of the ocean (i.e., up = positive) 0083 hsb = - rhoa.*cpa.*U_star.*T_star; 0084 hlb = - rhoa.*Le.*U_star.*Q_star; 0085 0086 % net longwave (positive up) 0087 nlw = - lwhf(Tw,dlw,dsw); 0088 0089 % total heat flux out of the water surface 0090 qout = nlw + hsb + hlb; 0091 0092 % compute deltaSc = fc*Sns, see sec. 2.4 (p. 1297-1298) in cool-skin paper 0093 % 3 choices; comment out those that are not used! 0094 deltaSc = zeros(size_data); 0095 ipos_nsw = find(nsw > 0); 0096 deltaSc(ipos_nsw) = f_c(delta(ipos_nsw),1).*nsw(ipos_nsw); % Paulson and Simpson (1981) 0097 % deltaSc(ipos_nsw) = f_c(delta(ipos_nsw),2).*nsw(ipos_nsw); % COARE approx. to Paulson 0098 % deltaSc(ipos_nsw) = f_c(delta(ipos_nsw),3).*nsw(ipos_nsw); % Hasse (1971) 0099 0100 qcol = qout - deltaSc; 0101 0102 % initialize 0103 alphaQb = zeros(size_data); 0104 lamda = zeros(size_data); 0105 Dter = zeros(size_data); 0106 0107 ipos_qcol = find(qcol > 0); 0108 0109 % eqn. 17 in cool-skin paper 0110 alphaQb(ipos_qcol) = alpha(ipos_qcol).*qcol(ipos_qcol) + ... 0111 sal(ipos_qcol).*beta_sal(ipos_qcol) ... 0112 .*hlb(ipos_qcol).*cpw(ipos_qcol)./Le(ipos_qcol); 0113 0114 % eqn. 14 in cool-skin paper 0115 lamda(ipos_qcol) = 6./(1+(bigc(ipos_qcol).*alphaQb(ipos_qcol) ... 0116 ./U_star(ipos_qcol).^4).^0.75).^(1/3); 0117 0118 % eqn. 12 in cool-skin paper 0119 delta(ipos_qcol) = lamda(ipos_qcol).*viscw(ipos_qcol) ... 0120 ./(sqrt(rhoa(ipos_qcol)./rhow(ipos_qcol)) ... 0121 .*U_star(ipos_qcol)); 0122 0123 % eqn. 13 in cool-skin paper 0124 Dter(ipos_qcol) = qcol(ipos_qcol).*delta(ipos_qcol)./tcondw(ipos_qcol); 0125 0126 Dqer = wetc.*Dter; 0127 0128 0129 0130 0131 function fc = f_c(delta,option) 0132 % F_C: computes the absorption coefficient fc. 0133 % fc=F_C(delta,option) computes the absorption coefficient fc. 0134 % 0135 % INPUT: delta - thickness of cool-skin layer [m] 0136 % option - 1 use Paulson and Simpson (1981) data for seawater; 0137 % See also p. 1298 of Fairall et al (1996) JGR, 101, 0138 % cool-skin and warm-layer paper. 0139 % 0140 % 2 use approximation to Paulson as given in 0141 % p. 1298 of Fairall et al (1996) JGR, 101, cool-skin 0142 % and warm-layer paper. 0143 % 0144 % 3 use fc = const. = 0.19, as suggested by Hasse (1971). 0145 0146 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0147 % 8/5/99: version 1.2 (contributed by AA) 0148 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0149 0150 if option == 1 0151 % Use Paulson and Simpson data 0152 0153 % Wavelength bands for the coefficients [um] 0154 % 1) 0.2-0.6 0155 % 2) 0.6-0.9 0156 % 3) 0.9-1.2 0157 % 4) 1.2-1.5 0158 % 5) 1.5-1.8 0159 % 6) 1.8-2.1 0160 % 7) 2.1-2.4 0161 % 8) 2.4-2.7 0162 % 9) 2.7-3.0 0163 0164 % F_i is the amplitude 0165 F_i = [0.237 0.360 0.179 0.087 0.080 0.0246 0.025 0.007 0.0004]; 0166 F_i1 = repmat(F_i,length(delta),1); 0167 0168 % Gam_i is the absorption length [m] 0169 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]; 0170 Gam_i1 = repmat(Gam_i,length(delta),1); 0171 0172 delta1 = repmat(delta,1,length(Gam_i)); 0173 0174 % fc is the absorption in the cool-skin layer of thickness delta 0175 fc = sum(F_i1.*(1-(Gam_i1./delta1).*(1-exp(-delta1./Gam_i1))), 2); 0176 0177 elseif option == 2 0178 % use COARE approximation to Paulson and Simpson data 0179 0180 fc = 0.137+11.*delta-(6.6e-5./delta).*(1-exp(-delta/8e-4)); 0181 0182 elseif option == 3 0183 % use Hasse simple approximation 0184 0185 fc = 0.19; 0186 0187 end