function [tau_rain,heat_rain] = rain_flux(Ta,Pa,rh,rain,Ts,sal,u,zu)
% RAIN_FLUX: computes heat and momentum flux due to rain.
% RAIN_FLUX computes heat flux and momentum flux due to rain. This 
% code follows the Fortran program bulk_v25b.f. For more details, 
% see Fairall et al. (1996), JGR, 101, 3751-3752.
%
% INPUT:  Ta        -  air temperature          [C]
%         Pa        -  air pressure             [mb]
%         rh        -  relative humidity        [%]
%         rain      -  rain rate                [mm/hr]
%         Ts        -  sea surface temperature  [C]
%         sal       -  salinity                 [psu (PSS-78)]
%         u         -  wind speed               [m/s]
%         zu        -  wind measurement height  [m]
%
% OUTPUT: tau_rain  -  momentum flux of rainfall            [N/m^2]
%         heat_rain -  heat flux of rainfall (OUT of ocean) [W/m^2]
%
% USAGE: [tau_rain,heat_rain] = RAIN_FLUX(Ta,Pa,rh,rain,Ts,sal,u,zu) 
  
% NOTE: All input variables should be vectors (either row or column), zu
%       may also be a fixed scalar. Output variables are column vectors.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 4/3/99: version 1.2 (contributed by AA)
% 8/5/99: version 2.0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% -> column vectors
Ta = Ta(:); Pa = Pa(:); rh = rh(:); rain = rain(:); Ts = Ts(:);
sal = sal(:); u = u(:); zu = zu(:);

% get constants
as_consts;
cpa = cp;


o61  = 1/eps_air - 1;              % ~0.61 (moisture correction for temp.)
Qa   = 0.01*rh.*qsat(Ta,Pa);       % specific humidity of air [kg/kg]
T    = Ta + CtoK;                  % C -> K
Tv   = T.*(1 + o61*Qa);            % air virtual temperature
rhoa = (100*Pa)./(gas_const_R*Tv); % air density
Le   = (2.501-0.00237*Ts)*1e6;     % latent heat of vaporization at Ts
Qs   = Qsat_coeff*qsat(Ts,Pa);     % saturation specific humidity


% compute heat flux of rainfall OUT of ocean
dwat   = 2.11e-5*(T./CtoK).^1.94;    % water vapour diffusivity
dtmp   = (1+3.309e-3*Ta-1.44e-6*Ta.^2)*0.02411./(rhoa.*cpa); % heat diffusivity
dqs_dt = Qa.*Le./(gas_const_R*T.^2); % Clausius-Clapeyron
alfac  = 1./(1+0.622*(dqs_dt.*Le.*dwat)./(cpa.*dtmp)); % wet bulb factor
cpw    = sw_cp(sal,Ts,0);            % heat capacity of sea water 

heat_rain = rain.*alfac.*cpw.*((Ts-Ta)+(Qs-Qa).*Le./cpa)/3600;

% compute momentum flux of rainfall
[cd10,u10] = cdntc(u,zu,Ta);% use Smith's formula to compute wind speed at 10m
tau_rain   = rain.*u10/3600;

