-
Notifications
You must be signed in to change notification settings - Fork 1
/
cloudcor.m
140 lines (64 loc) · 2.43 KB
/
cloudcor.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
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;