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;

