/[MITgcm]/MITgcm/pkg/exf/exf_zenithangle_table.F
ViewVC logotype

Annotation of /MITgcm/pkg/exf/exf_zenithangle_table.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (hide annotations) (download)
Wed Apr 14 23:02:18 2010 UTC (14 years, 1 month ago) by gforget
Branch: MAIN
CVS Tags: checkpoint62e
Changes since 1.2: +8 -9 lines
improving readability of ALLOW_ZENITHANGLE related code
- remove nSx,nSy dims from zen_albedo_table
- rename useExfZenithAngle to useExfZenIncoming/useExfZenAlbedo
  and document them in EXF_PARAM.h
- document ALLOW_ZENITHANGLE in EXF_OPTIONS.h and set it to false
- document variables in EXF_FIELDS.h

1 gforget 1.3 C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_zenithangle_table.F,v 1.2 2010/04/13 16:24:50 gforget Exp $
2 gforget 1.1 C $Name: $
3    
4     #include "EXF_OPTIONS.h"
5    
6     SUBROUTINE EXF_ZENITHANGLE_TABLE(myThid)
7    
8     C ==================================================================
9     C SUBROUTINE exf_zenithangle_table
10     C ==================================================================
11     C
12     C o compute table of daily mean albedo that will be used in exf_zenithangle.F
13     C
14     C ==================================================================
15     C SUBROUTINE exf_zenithangle_table
16     C ==================================================================
17    
18     IMPLICIT NONE
19    
20     C == global variables ==
21    
22     #include "EEPARAMS.h"
23     #include "SIZE.h"
24     #include "PARAMS.h"
25     #include "DYNVARS.h"
26     #include "GRID.h"
27    
28     #include "EXF_PARAM.h"
29     #include "EXF_FIELDS.h"
30     #include "EXF_CONSTANTS.h"
31    
32     C == routine arguments ==
33    
34     INTEGER myThid
35    
36     #ifdef ALLOW_DOWNWARD_RADIATION
37     #ifdef ALLOW_ZENITHANGLE
38     C == local variables ==
39    
40     INTEGER bi,bj
41     INTEGER i,j
42    
43     _RL FSOL, dD0dDsq, SOLC, tmpINT1, tmpINT2
44     _RL LLLAT, TYEAR, TDAY, ALPHA, CZEN, ALBSEA1
45     _RL DECLI, ZS, ZC, SJ, CJ, TMPA, TMPB
46     integer iLat,iTyear,iTday
47    
48     C == end of interface ==
49    
50 gforget 1.3 _BEGIN_MASTER( myThid )
51 gforget 1.1
52     c solar constant
53     c --------------
54     SOLC = 1368. _d 0
55    
56     DO iLat=1,181
57 gforget 1.2 DO iTyear=1,366
58 gforget 1.1
59 gforget 1.2 LLLAT=(iLat-91. _d 0)
60     TYEAR=(iTyear-1. _d 0)/365. _d 0
61 gforget 1.1
62     c determine solar declination
63     c ---------------------------
64     c (formula from Hartmann textbook, after Spencer 1971)
65     ALPHA= 2. _d 0*PI*TYEAR
66     DECLI = 0.006918 _d 0
67     & - 0.399912 _d 0 * cos ( 1. _d 0 * ALPHA )
68     & + 0.070257 _d 0 * sin ( 1. _d 0 * ALPHA )
69     & - 0.006758 _d 0 * cos ( 2. _d 0 * ALPHA )
70     & + 0.000907 _d 0 * sin ( 2. _d 0 * ALPHA )
71     & - 0.002697 _d 0 * cos ( 3. _d 0 * ALPHA )
72     & + 0.001480 _d 0 * sin ( 3. _d 0 * ALPHA )
73    
74     ZC = COS(DECLI)
75     ZS = SIN(DECLI)
76     SJ = SIN(LLLAT * deg2rad)
77     CJ = COS(LLLAT * deg2rad)
78     TMPA = SJ*ZS
79     TMPB = CJ*ZC
80    
81     c compute squared earth-sun distance ratio
82     c ----------------------------------------
83     c (formula from Hartmann textbook, after Spencer 1971)
84     dD0dDsq = 1.000110 _d 0
85     & + 0.034221 _d 0 * cos ( 1. _d 0 * ALPHA )
86     & + 0.001280 _d 0 * sin ( 1. _d 0 * ALPHA )
87     & + 0.000719 _d 0 * cos ( 2. _d 0 * ALPHA )
88     & + 0.000077 _d 0 * sin ( 2. _d 0 * ALPHA )
89    
90     tmpINT1=0. _d 0
91 gforget 1.2 tmpINT2=0. _d 0
92     DO iTday=1,100
93     TDAY=iTday/100. _d 0
94 gforget 1.1 c determine DAILY VARYING cos of solar zenith angle CZEN
95     c ------------------------------------------------------
96     CZEN = TMPA + TMPB *
97     & cos( 2. _d 0 *PI* TDAY + 0. _d 0 * deg2rad )
98 gforget 1.2 if ( CZEN .LE.0 ) CZEN = 0. _d 0
99 gforget 1.1 c compute incoming flux at the top of the atm.:
100     c ---------------------------------------------
101     FSOL = SOLC * dD0dDsq * MAX( 0. _d 0, CZEN )
102     c determine direct ocean albedo
103     c -----------------------------
104     c (formula from Briegleb, Minnis, et al 1986)
105     ALBSEA1 = ( ( 2.6 _d 0 / (CZEN**(1.7 _d 0) + 0.065 _d 0) )
106     & + ( 15. _d 0 * (CZEN-0.1 _d 0) * (CZEN-0.5 _d 0)
107     & * (CZEN-1.0 _d 0) ) ) / 100.0 _d 0
108     c accumulate averages
109     c -------------------
110     tmpINT1=tmpINT1+FSOL*ALBSEA1/100. _d 0
111     tmpINT2=tmpINT2+FSOL/100. _d 0
112 gforget 1.2 ENDDO
113 gforget 1.1 c compute weighted average of albedo
114     c ----------------------------------
115 gforget 1.2 if ( 0.5 _d 0 * tmpINT2 .GT. tmpINT1) then
116 gforget 1.3 zen_albedo_table(iTyear,iLat)=tmpINT1/tmpINT2
117 gforget 1.2 else
118 gforget 1.3 zen_albedo_table(iTyear,iLat)=0.5 _d 0
119 gforget 1.2 endif
120 gforget 1.1
121     ENDDO
122     ENDDO
123    
124 gforget 1.3 _END_MASTER( myThid )
125     _BARRIER
126 gforget 1.1
127    
128     c determine interpolation coefficient for each grid point
129     DO bj = myByLo(myThid),myByHi(myThid)
130 gforget 1.2 DO bi = myBxLo(myThid),myBxHi(myThid)
131     DO j = 1,sNy
132     DO i = 1,sNx
133 gforget 1.1 LLLAT=yC(i,j,bi,bj)+91. _d 0
134 gforget 1.2 c ensure that it is in valid range
135 gforget 1.3 LLLAT=max(LLLAT, 1. _d 0)
136     LLLAT=min(LLLAT, 181. _d 0)
137 gforget 1.1 c store
138     zen_albedo_pointer(i,j,bi,bj)=LLLAT
139     ENDDO
140     ENDDO
141     ENDDO
142     ENDDO
143    
144     #endif /* ALLOW_ZENITHANGLE */
145     #endif /* ALLOW_DOWNWARD_RADIATION */
146    
147     RETURN
148     END

  ViewVC Help
Powered by ViewVC 1.1.22