function Fc=cloudcor(C,optns,lat)
% CLOUDCOR: computes cloud correction factor for bulk long-wave flux.
% Fc=CLOUDCOR(C,optns,lat) computes the cloud correction factor F(C)
% as a function of the cloud fraction C for bulk long-wave flux formulae.
% In general, these are functions of the form
%             1 - a_n*C^n
% Since the coefficients and powers depend a lot on the dominant cloud
% type which may vary from region to region and season to season, it is
% not clear which parametrization is best (see Fung et al (1984), 
% Rev. of Geophys. and Space Phys., 22, 177-193). 
%
% The particular parametrization used here depends on the second input
% variable, for which no default is given to emphasize the fact that you
% really need to understand what you are doing here!
%
% optns = [a1 a2] = use a correction factor of [1-a1*C-a2*C^2].
%
% There are several "built-in" formulae (from Fung et al) that all have
% a latitude-dependence of some kind.
%
% optns = 'clarke',lat = Clarke (1974) corrections for abs(lat)<50.
%       = 'bunker',lat = Bunker (1976) corrections for N Atlantic.
%
% INPUT:   C - cloud fraction
%          optns - see above for details
%          lat - latitude [deg] - required for "built-in" formulae only
%
% OUTPUT:  Fc - correction factor used as input to BLWHF

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3/12/98: version 1.1 (contributed by RP)
% 8/5/99: version 2.0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if isstr(optns),

  switch optns(1),
    case 'c',
      a1=0;
      if     abs(lat)>55, a2=NaN;
      elseif abs(lat)>45, a2=0.73;
      elseif abs(lat)>35, a2=0.69;
      elseif abs(lat)>25, a2=0.64;
      elseif abs(lat)>15, a2=0.60;
      elseif abs(lat)> 7, a2=0.56;
      elseif abs(lat)> 2, a2=0.53;
      else                a2=0.51;
      end;
        
    case 'b',
      a2=0;
      if     abs(lat)>75, a1=0.84;
      elseif abs(lat)>65, a1=0.80;
      elseif abs(lat)>55, a1=0.76;
      elseif abs(lat)>45, a1=0.72;
      elseif abs(lat)>35, a1=0.68;
      elseif abs(lat)>25, a1=0.63;
      elseif abs(lat)>15, a1=0.59;
      elseif abs(lat)>7,  a1=0.52;
      else                a1=0.50;
      end;
      
    otherwise
      error('Unrecognized option');
  end;
else
 a1=optns(1);a2=optns(2);
end;

Fc = 1 - a1*C - a2.*C.^2;
