Determination of the Historical Solar Resource for any Latitude

CONTRACT REPORT
Determination of the Historical Solar Resource
for any Latitude – Longitude location in Florida
Author
Dr. Charles J Cromer
Publication Number
FSEC-CR-1894-11
Copyright
Copyright © Florida Solar Energy Center/University of Central Florida
1679 Clearlake Road, Cocoa, Florida 32922, USA (321)
638-1000
All rights reserved.
Disclaimer
The Florida Solar Energy Center/University of Central Florida nor any agency thereof, nor any of their employees,
makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness,
or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe
privately owned rights. Reference herein to any specific commercial product, process, or
service by trade name, trademark, manufacturer, or otherwise does not necessarily constitute or imply its
endorsement, recommendation, or favoring by the Florida Solar Energy Center/University of Central Florida or
any agency thereof. The views and opinions of authors expressed herein do not necessarily state or reflect those of
the Florida Solar Energy Center/University of Central Florida or any agency thereof.
1
Determination of the Historical Solar Resource for any
Latitude – Longitude location in Florida.
Dr. Charles J. Cromer, Ph.D.,P.E.
Florida Solar Energy Center, Cocoa, FL
FSEC-CR-1894-11, 18 August 2011
Abstract :
The direct beam and direct global solar resource values for any geographical location in
Florida were found by using actual data taken at the Florida Solar Energy Center (FSEC) for
2010 and correlating those values against clearness values derived from NOAA geostationary
satellite data. Using the correlations developed, eleven years of satellite data (2000 – 2010)
were used to provide expected monthly average solar resource values for any location in
Florida. This report provides the detailed derivation of those resource values.
Introduction:
The problem is that historical solar radiation data are not available for many locations across
the state of Florida. They are typically unavailable for more remote locations and situations
where microclimates may mediate more generalized predictions. Studies of solar systems
(especially concentrator systems) contemplated for installation require as input, a prediction
of the available solar resource throughout the year for the specific installation location. This
project was developed to improve the historical radiation data base available to conduct these
studies. Such studies are necessary to predict the anticipated return on investment expected
from a solar installation. This report describes the process utilized in the development of this
radiation data base for Florida.
Objective:
The objective of this effort is to produce a detailed Florida mapping of the solar direct beam
and global direct resource available for use in Florida whereby a potential user of solar
energy can enter a location latitude and longitude and receive a table of solar energy monthly
averages for that specific location as derived from the past eleven years of historical data.
Literature Search:
Various methodologies to resolve the problem were investigated through literature search.
Over 40 published papers were reviewed for information on the determination of the solar
radiation resource at a particular location and the establishment and validation of predicting
equations. Those papers ultimately used in the development of the Florida solar resource
database are provided in the references section of this report.
Method Selected: Among several methodologies, the Heliostat-2 method was selected as
the most viable approach to provide validated historical radiation data for Florida. This
method (developed in the 1990’s by Ecole de Mines de Paris) basically consists of first using
two parameters, turbidity (a generalized value for the atmospheric condition of an area), and
1
elevation. These are used as input, to provide an estimation of the total, direct beam and
direct diffuse radiation based on a “clear sky model”. That is, the amount of direct beam and
diffuse radiation that would reach the ground is calculated for a totally clear sky, given
location, time of year, and time of day. Then historical satellite images (visible band – grey
level on the pixel/point of the image), from the Heliostat-2 satellite are used to calculate a
prediction of the clearness level for each pixel of the satellite image. The hypothesis is that
with each pixel on a gray scale, the darker the pixel, the lower is the reflection of the
atmosphere and more solar energy reaches the ground; and conversely, the whiter the pixel,
the more solar energy is being reflected and less reaches the ground. Using these clearness
levels, algorithms are correlated against actual ground based data to modify the “clear sky”
data to produce predicted values of the direct beam and direct diffuse solar radiation that
reaches the ground. Statistical data correlations provide measures of the “goodness” of fits
for the predictive algorithms. Once these predictive algorithmic equations are developed and
validated statistically, they can be used to produce a historical data set of solar radiation for
any given lat – long location across a geographical area. Rather than using the Heliostat-2
images, it was determined that smaller coverage units (the size of each pixel) and historical
weather pictures of Florida were available from NOAA weather satellite photo archives.
Project Tasks
The project was broken into various tasks that needed to be completed to move toward the
project objective. These are:
1. Validate the hypothesis that the NOAA weather satellite image data can provide clearness
values that will correlate to ground measured values in a way similar to the correlations
developed from Heliostat-2 images.
2. Given validation of the method, obtain years 2000 through 2010 of GOES satellite photos
of Florida from archives for each day for times 13:15, 15:15, 17:15, 19:15, and 21:15 Zulu
time (9:15 to 5:15 local time). Review files and correct any anomalies.
3. Determine latitude and longitude for various pixels in the photo format and develop
equations that will determine an individual pixel location within the file given its latitude and
longitude.
4. Write a program that adjusts various gray scales used in archived photos to a uniform gray
scale across all photos and use it to adjust all pixel data.
5. Write a program that totalizes the five hourly photos of each day to produce a total
clearness count for each day of the 11 year data set.
6. Write a program that finds the max and min clearness value for each pixel across the
eleven years, and uses these values through a program to change totalized clearness values of
all days to normalized clearness values.
2
7. Write a program that calculates the predicted clear sky direct beam solar for each day of
the year and each latitude-longitude pixel location of the Florida map.
8. Using the values of the FSEC location pixel from task 6 as clearness, and values for this
location from task 7 as clear sky direct beam solar, develop correlation algorithms for ground
direct beam solar and ground direct global solar radiation correlating against actual Florida
Solar Energy Center (FSEC) measurements.
9. Write a program that uses the developed correlation equations of Task 8 and the
normalized clearness values of Task 6 that produces a table of direct beam radiation values
for each pixel and each day of the eleven years. Also, produce a table of direct global
radiation values from its correlation equations.
10. Write a program that develops tables for each year of the study that includes monthly
averages for each of the years: 2000 – 2010.
11. Write a program that uses the yearly monthly tables developed in Task 10 and averages
them into monthly tables of direct beam radiation values (average for the past 11 years). Do
the same to produce eleven year average monthly tables for direct global radiation values.
12. Write a program (Excel) that, with input of a latitude-longitude value, reads the averaged
monthly table data developed in Task 11, and formats the direct beam and direct global
radiation values by month. Also, provide radiation values for fixed mount collectors facing
south at latitude tilt, and values for tilts other than latitude and orientations other than due
south.
13. Complete the Project Report.
Task 1. Validation of hypothesis.
In the European studies, the Heliostat-2 satellite photos were used to provide clearness
values. In this study, it was hypothesized that the NOAA weather satellite image data can
provide clearness values that will correlate to ground measured values in a way similar to the
correlations developed from Heliostat-2 images in Europe.
To test this hypothesis 200 days of satellite photos with five photos each day were
downloaded on a weekly basis from the NOAA web site. For this test, the GOES East
Hurricane sector was used with the visible spectrum. A typical satellite photo of this GOES
region is provided as Figure 1.
The pixel number in the bit mapped file that represents the pixel that includes the Florida
Solar Energy Center was determined, and the clearness values for this location were
extracted from the series of photos. The hourly clearness values were totalized for each day
and the maximum and minimum values over the 200 day period were determined. Each days
clearness value total (t) was then normalized using the equation:
3
X = max – t / max – min
[1]
Thus, the clearness value X when normalized, ranges from 0 to 1 for the pixel. In addition,
the equations to predict theoretical optimum clear sky daily insolation (Hc) for the FSEC
latitude and longitude were programmed into an Excel file. The hypothesis is that clearness
values (X) of the pixel from the satellite photos can be used to mediate the clear sky
insolation values to produce ground level predicted values (Hd) for that pixel area (5 miles x
5 miles).
Figure 1. GOES Photo of East Hurricane Sector.
Laws of atmospheric scattering suggest that the form should be represented by a negative
exponential:
Hd = Hc (a + bEXP(-X/c))
[2]
Where a , b, and c are correlation coefficients.
With Hd as measured values from the FSEC meteorological station and Hc calculated from
the clear sky equations (provided in detail in Task 7), a direct correlation to the normalized
clearness values can be determined from an adjustment of equation [2] as:
Hd/Hc = a + bEXP(-X/c)
[3]
4
The least squares fit of the equation [3] form to the data is provided in Figure 2. Indeed, one
of the best least squares fits is a negative exponential form. Correlations (r sq) of predicted
vs. real values were found to be at 0.85 at the 95% confidence level. This result validates the
concept. It appears that a decent correlation can be derived from the NOAA GOES satellite
images representing the clearness index of a location to the actual measured daily radiation
for that site.
Figure 2. Normalized brightness(X) on X axis vs. Hd/Hc ratio on Y axis.
Task 2. Obtain Historic Files and Review.
Daytime satellite photos of the past eleven years were purchased from NOAA archives.
These archives are maintained by the Space Science and Engineering Center (SSEC)
Madison, WI., with Jerrold (Jerry) Robaidek as PI. Jeanean Hill was very helpful in
obtaining photos of the size that would provide Florida as the coverage area in bitmap (.bmp)
format. Data was obtained for each day of the years from 2000 to 2010 for a total of eleven
years. As in the preliminary study, five photos for each day were retrieved representing
13:15, 15:15, 17:15, 19:15, and 21:15 Zulu time (9:15 to 5:15 local time). In each photo, a
pixel covers a 5 mile x 5 mile square and there are 10,272 pixels over the Florida area in each
photo. The 20,075 photos were reviewed and if any anomalies (blank areas or bands across
the photo) were found, the photo was corrected. For example, if the photo was good except
for a white stripe across it – this represents a drop of data transmission from the satellite – the
white stripe was filled in with pixel data from the next good raster (data row) either above or
below the dropped data line. SSEC provided a listing of the known anomalies (341 in all) in
the data by file and these were corrected. Every photo was reviewed and several additional
5
anomalies were found and corrected. During this review, those photos that had the clearest
sky were identified.
Task 3. Map Pixels to Latitude and Longitude.
A clear sky photo was selected as the working photo. This is provided as Figure 3. Bitmap
photos draw the picture by using two tables. The first table is the color table. Each location
sequence in the color table contains the three primary colors represented by that location
number. For example, if this table has 200 locations, for a gray scale (used in these photos)
the first location may contain 255,255,255 which represents whitest white, and location 200
may contain 0,0,0 which represents blackest black. The interim locations contain the
gradations of gray from white to black. The second table of the photo file is the data table. In
this table, each value represents a pixel of the photo. The first location is the lowest left pixel
of the photo and the pixel data moves from left to right to the rightmost edge of the photo,
then up to the next row left most pixel and so on. Each value within the data table refers to
the color table. So if the first value in the data table was a one, it would refer to the color
table’s first position, which is white, and that lowest left pixel would be white on the photo.
Figure 3. Sample of GOES Archive Weather Photo.
The software “Hex Editor NEO” was used to read the bitmapped files and make changes to
the data tables within the files. The highlighted pixels at the corners were used to correlate
the pixel data file locations with locations on the actual photo. A portion of the photo format
shown above was used to enclose the Florida land mass. This rectangle, 96 pixels high and
6
107 pixels wide contains 10272 pixels. This matrix represents the basic data file format used
to extract clearness values from each picture of the data base. Notice three yellow pixels – on
the east coast east of Lake Okeechobee, in Tampa Bay, and over an island on the south coast
of the Florida Panhandle. Using printed NOAA navigational charts and GOOGLE Earth,
latitude-longitude values were determined for the highlighted pixels. The rows and columns
of the data matrix locations for the photos were then correlated with their Latitude and
Longitude values and the following equations were developed for the photo data set such
that, given the Latitude and Longitude of a ground location, its respective pixel location in
the picture data file could be calculated:
Row = (-INT((33.185965 - Latitude)/0.0719298)-151)
[4]
Column = INT((93.9545 - Longitude)/0.072681)
[5]
File Location = ((Row-26)*107) + (Column-85)
[6]
Task 4. Adjust Various Gray Scales to A Standard Format.
In working with the internal data matrix files contained within each bitmap photo, it was
found that the color tables used varied in size among the photos. Though they all consistently
had uniform graduations of gray from white to black when progressing through the table
from first to last location, the table sizes ranged from as small as 80 graduations to a as many
as 200 graduations in a few files. Most files had approximately 100 shades of gray. Because
the gray scale map varied among photos, a program was written to correct all photo data to
represent a standard gray scale map of 100 shades of gray and all photos’ pixels were
adjusted to this gray scale base with this program. This was accomplished by extracting each
photo’s pixel color reference, and normalizing it to the total number of graduations of that
particular photo using the equation:
New Grayness Value = 100 * Old Grayness Value/ Number of Gray Shades in Photo [7]
The picture data tables were revised by the program written to accomplish this task entitled
REVISEA.BAS which is provided in the Appendix. With 5 hours represented for each day,
and 365 days of the year, each year had 1825 text files created by the REVISEA program that
included the grayness value matrix representing the 10272 pixels of each photo. The format
used for the file names was important to keep things orderly. The first digit represents the
year, 0 for 2000 , 1 for 2001. . . A for 2010. The second digit of these files is R for Revise,
followed by an enclosed parenthesis depicting the sequential photo of the yearly file, that is it
ranges from 1 (Jan 1 at 13:15Z) to 1825 (Dec. 31, 21:15Z).
Task 5. Totalize the hourly clearness data to produce a daily clearness count.
The European work with Heliostat-2 indicated that five daily photos were sufficient to
characterize the weather pattern for that day. Five photos per day were used in the validation
7
study of Task 1 and that study indicated this would also be sufficient for the GOES satellite
data. Because ultimately, we desire to have a prediction of the total solar radiation received
per day, it is appropriate to sum the clearness values of each of the five hour’s photos to
produce a value representative of that day. Averaging of these hours for each day could also
have been used, but it is simply easier and faster from a programming stand point to work
with integer files representing clearness for each day’s pixel ranging from 0 to 500 than
working with the decimals associated with averages.
A program was written entitled PIXSUMA.BAS that did this summation for each day and
created files with the form of their names being 0T(1)…0T(365) to AT(1)…AT(365), where
the value in the parenthesis is the Julian day of the year. This program is provided in the
APPENDIX.
Task 6. Normalize the daily clearness values.
The data photos were searched to determine the clearest days of the eleven year data base.
Figure 3 is an example of one of those days. Notice that any one pixel over the land mass of
Florida does not necessarily have the same reflectivity (darkness) as another. It is assumed
that the darkness for each pixel during these purest clear sky conditions of the past 11 years
represents the satellite image grayness of the surface itself. This value was used as the
baseline value to represent the clearest sky condition and thus, on a normalized clearness
index, should produce a normalized value of zero for that pixel location.
A program titled MAXA.BAS was written that finds the maximum clearness value for each
pixel across the eleven years (Xmax) and creates a file holding the 10272 max values. A
program titled MINA.BAS that finds the minimum clearness value across the eleven years
(Xmin) was written and also a file to hold the 10272 minimum values was created. A
program titled NORMA.BAS was written that uses these maximum and minimum values and
the totalized daily clearness values (Xt) of Task 5 (these could range from 0 to 500) to create
daily files of normalized clearness values for the eleven years. The programs: MAXA.BAS,
MINA.BAS and NORMA.BAS are provided in the Appendix. The following equation was
used to produce the normalization value X.
X = INT (1000 * (Xt – Xmin)/(Xmax –Xmin))
[8]
Normalization usually produces a data set that goes from 0 to 1.0, however because the
values are multiplied by 1000, the normalized clearness values for each pixel of each day of
each year here have a range as integers from 0 to 1000.
Task 7. Calculate clear sky direct beam solar.
The clear sky beam value (the solar beam irradiation expected to be received on the surface
during the clearest sky) is determined from fundamental theory of extraterrestrial light
scattering and absorption as an effect of the atmospheric distance the light must travel
8
associated with any location (lat/lon), time of day, day of year, and elevation. This
calculation begins with the extraterrestrial irradiance (received in space outside the
atmosphere) the mean generally accepted as 1367 W/sq m (Io). The earth’s orbit is slightly
eccentric so the sun earth distance varies across the year, so the mean value is mediated by
the equation:
Go = Io * E
[9]
Where Go is the expected extraterrestrial value for the day of year.
where, E = 1 + 0.03344 * Cos( j’ -0. 0488869)
and radians day angle j’ = 2 PI j/365.25
where j = the day of the year number, 1 to 365.
To determine the amount of scattering and absorption, the air mass (m) that the light must
travel through must be calculated. One air mass is defined as the value going straight up from
the sea level surface to the top of the atmosphere. Thus, the angle direction to the sun away
from the vertical will define this value by the equation:
m = (p/po)/sin ho
[10](Kastin,1996)
where p/po = exp (-z/8434.5) and z is the elevation in meters. For small elevations (under
several hundred feet) this factor has little influence on the air mass. Because all of Florida
elevation is under several hundred feet, a median elevation of 10 m for Florida was used
which produces a value of 0.9988 for p/po. The value ho in equation [10] is the solar altitude
angle (the angle between the sun location and a horizontal surface).
Solar declination (d) is the angle between the earth-sun line and the earth’s equatorial plane.
This varies day to day due to the earth’s tilted axis and is found by:
d = 23.45 sin (360*(248 + j/265))
[11](Ashrae,2007)
where j is the Julian day of the year.
ho for equation [10] is found by:
sin ho = cos (Lat) cos d cos H + sin (Lat) sin d
[12](Ashrae,2007)
Where Lat is the latitude of the location and H is the solar time expressed in degrees east or
west of solar noon.
The direct beam clear sky estimate (Hc) is found by the equation:
Hc = Go EXP (-0.8662 Tlk * m(Sf))
[13](Kastin,1996)
9
Where Go is the extraterrestrial radiation from equation [9], Tlk is the Link Turbidity Factor
(2.0 for Florida), m is the air mass from equation [10] and Sf is the scattering factor as a
function of air mass found by:
Sf = 1 / 6.6296 + 1.7513m – 0.1202m^2 + 0.0065 m^3 - 0.00013 m^4 [14](Kastin, 1996)
A program was written that, using equation [13], calculated and output the theoretical clear
sky direct beam solar energy (Hc) available for each day of the year for each Florida
location. This program titled CLRSKYA.BAS is provided in the Appendix.
Task 8. Develop Correlation Equations.
Using the normalized values of FSEC’s latitude and longitude location pixel from Task 6 as
clearness (X) , and values for this latitude and longitude location from Task 7 as clear sky
direct beam solar (Hc), a correlation algorithm that would predict the value of direct beam
solar on the ground (Hd) was derived using least square fit by correlating against actual
Florida Solar Energy Center (FSEC) measurements at this latitude/longitude site.
Recall from equation [3] that the direct beam ratio Hd/Hc is equal to a multiplier value that is
a function of the clearness (X). Thus, the data is plotted with the direct beam ratio on the Y
axis, and clearness value (X) on the X axis. All 2010 data from the FSEC station (except the
days the instrument was down) is plotted in this format as Figure 4.
All 2010 Data
1.2
Direct Ratio
1
Direct Beam
0.8
0.6
0.4
0.2
0
0
0.2
0.4
0.6
0.8
Normalized Clearness
Figure 4. Plot of Normalized Clearness (X) vs. Direct Beam Ratio (H/Hc).
10
1
This data was correlated using the least square fit program Tablecurve and the curve fit is
shown as Figure 5.
Figure 5. Correlation of Clearness X vs. Direct Beam Ratio using FSEC Measurements.
Thus, the predicting equation for direct beam radiation expected to be received on the ground
(Hd) is a negative exponential form:
Hd = Hc * (- 0.08939148 + 1.0686478*EXP(-X/0.31509295))
[15]
A similar correlation was completed on the daily direct global value (Hg) using the direct
global measurements for all days of 2010 taken at FSEC. The best fit correlated equation was
found to be a linear fit:
Hg = Hc * (0.91129029 – 0.99991612 X)
11
[16]
Thus, the above equations [15] and [16] can be used to predict direct beam and direct global
radiation values for the latitude/longitude locations of the Florida map.
Task 9. Develop Daily Tables.
A program was written that uses the developed correlation equations of Task 8 and the
normalized clearness values of Task 6 to produces a table of direct beam radiation values for
each pixel and each day of the eleven years of clearness data. Also, the program uses the
direct global correlation to produce a table of daily direct global radiation values for each day
of the eleven years. This program, titled DAYSOLA.BAS, is provided in the Appendix.
Task 10. Develop Monthly Tables for Each Year.
The daily predicted radiation values from the historical data of the last eleven years are of
limited applicability. That is, even the average value of any one day across the years has a
large variability to the insolation one might get for that day this year. The value of the
historical data is in the averages over a greater time which can be expected to be better
predictors of average actual radiation received over a longer period; perhaps the operational
life of a system. A program titled YRMOAVEA.BAS and included in the Appendix, was
written to average the daily files of each month into a monthly average value for each
latitude/longitude location of the file. This was done for each of the eleven years. This
program also produced monthly tables for the global direct data.
Task 11. Average the Monthly Tables for the Eleven Years.
The monthly averages for each of the eleven years were averaged again to produce eleven
year monthly averages of solar radiation for all latitude/longitude locations of the data base.
The Appendix provides a program, YRSAVDA.BAS, that used the yearly monthly tables
developed in Task 10 and averaged them into monthly tables of direct beam radiation values
(average for the past 11 years). Thus, there is produced a table for each month. Each table
contains 10272 locations, each one representative of one pixel latitude/longitude location of
the Florida map. The value within each table location is the expected average solar radiation
that was received over the past eleven years at that location. A similar program,
YRSAVGA.BAS was written to produce eleven year average monthly tables for direct global
radiation values.
Task 12. Provide Output Format in Excel.
The monthly tables of eleven year averages developed in Task 11 were incorporated into an
excel file named FindSolarValues.xls. The latitude and longitude mapping program of Task 3
provides that a user can input their location’s latitude and longitude for any location across
the Florida map. The algorithm converts this to a mapped location within the Monthly tables
12
and provides a monthly output table of direct beam and direct global radiation values (the 11
year averages from Task 11). This excel program can be incorporated into a web-site for
public use.
This direct beam radiation data represents the radiation energy at a particular location that
would be available for a tracking dish concentrator solar system to use, or a trough
concentrator to use. The global direct radiation data represents the energy that would be
available to a flat plate collector that is on a tracker that tracks the sun as it moves across the
sky. However, most flat plate collector installations are not on trackers but instead are fixed
in place - mounted at a fixed tilt angle and orientation toward the south.
A fixed mounted flat collector will have less global radiation available to it than does a flat
collector that tracks the sun. The amount of loss of available global radiation depends on the
latitude of the location. The higher the latitude, the greater the air mass of the radiation path
and thus the greater is the reducing effect of off-angles and the greater the improvement from
tracking. The average clearness values for the site also have an effect as well. The more
diffuse the general radiation availability, the less improvement is realized from tracking.
Improvements of tracking have been measured from 20 to 32 percent over latitude fixed
mount. In Colorado, a 23% tracker improvement was measured by Ray Tracker (David
Appleyard, 2009). In Madison Wisconson, an improvement of 27% was measured (Tracked
vs. Fixed, 2010). In a test by Sandia National Lab 2 axis tracking was found to provide a
32% improvement in Albuquerque, 31% in Sacramento, and 23% in Buffalo (King, Boysin,
et al). Because Florida is in the lowest latitude region and has a very high diffuse component,
both of these factors tend to reduce the improvement obtained from tracking. To convert the
direct global radiation values to fixed at latitude radiation values, a tracker improvement of
23% was assumed. Additional research may be in order to analytically determine the actual
monthly values for the Florida environment.
The Excel program thus calculates fixed mount radiation at latitude tilt from the global direct
values for each month. However, many collectors and arrays are mounted directly onto a roof
or are tilted up from horizontal at an angle that is different from latitude. Latitude mount
provides the highest expected radiation value for the year total. However, as one tilts up from
horizontal at an angle greater than latitude, one receives more radiation during the winter
period. Conversely, a collector mounted at a fixed angle less than latitude and closer to
horizontal will receive more radiation during the summer period and less during the winter.
The magnitude of this effect is again a function of latitude. Figure 6 (Messenger,Ventre,
2000) provides this variation for 28 degrees North Latitude which is typical for Florida.
13
Figure 6. Monthly Collector Performance a Function of Tilt Angle (Messener, Ventre, 2000).
The monthly adjustments of the graphic above were used to adjust the latitude radiation
values in the Excel file to calculate the insolation radiation variation expected if the collector
surface was mounted at a tilt angle different from the latitude.
The fixed collector radiation values above have all been derived with the assumption that the
collector is facing due south. Due south orientation provides the maximum annual radiation
available for fixed orientations. However, it may not be possible to mount the collector with
this due south orientation – fixed mounting flush with a roof for example. The orientation off
of south is measured in degrees – either degrees toward the east or degrees toward the west.
By a series of measurements taken at the Florida Solar Energy Center, Doug Root produced
the following graphic which has been used by FSEC in its Installer’s Manual since the early
1980s as a means of calculating the penalty an installation incurs because the orientation is
not due south. (FSEC-IN-21-82, 1992)
14
Figure 7. Adjustment for Radiation Due to Orientation East or West of Due South.
The values of Figure 7 were used to adjust the tilt adjusted radiation values to provide a set of
radiation values by month that are adjusted for an orientation off of south, either east or west,
by degrees.
Statistical Accuracy of the Direct Beam Tables.
The direct beam tables are provided as monthly averages. The accuracy of the predicting
correlation can be determined from the monthly average tables produced through the
predicting correlation for the year 2010 for the FSEC site vs. the actual average monthly
values for 2010 measured on the ground at the Florida Solar Energy Center.
A standard statistical t-test was conducted on the actual measured direct beam values vs. the
predicted direct beam values, to estimate the accuracy of the prediction algorithm.. The
predicted direct beam averaged 159 W/ sq m per day high from the actual measured values.
The 95% confidence interval provides that the actual value of a monthly average will fall
within plus or minus 428 W/sq m per day. For example, if the predicted monthly value was
6659 W/sq m per day, its 95% confidence interval would be: 6659 – 159 = 6500 plus or
minus 428, or 6072 to 6928 W/sq m per day (-8.8% to +4.0%). Thus, assuming uniformly
random scatter about the mean, the average error for the direct beam data at the 95%
confidence interval should be within 6.4%.
15
Statistical Accuracy of the Global Direct Tables.
A standard statistical t-test was conducted on the actual measured global direct values vs. the
predicted global direct values to estimate the accuracy of the prediction algorithm,. The
predicted global direct data averaged 92 W/ sq m per day high from the actual measured
values. The 95% confidence interval for the global direct readings was not as tight as the
direct beam readings due to more scatter in the measured values. The 95% confidence
interval provides that the actual value of a monthly average will fall within plus or minus 588
W/sq m per day. For example, if the predicted monthly value was 6659 W/sq m per day, its
95% confidence interval would be: 6659 – 92 = 6567 plus or minus 588, or 5979 to 7155
W/sq m per day (-10.2% to +7.4%). Thus, assuming uniformly random scatter about the
mean, the average error for the global direct data at the 95% confidence interval should be
within 8.8%.
Conclusions.
The direct beam and direct global solar resource values for any geographical location in
Florida were found by using actual data taken at the Florida Solar Energy Center (FSEC) for
2010 and then correlating those values against clearness values derived from NOAA
geostationary satellite data. The correlations were tested by comparing the predicted monthly
average values of 2010 vs. the actual measured values.
Using the correlations developed, eleven years of satellite data (2000 – 2010) were used to
provide expected monthly average solar resource values for any location in Florida.
Overall, it is expected that these correlations using NOAA GOES satellite clearness values,
will provide predicted monthly solar resource values with average error less than 6.5% for
the direct beam data and less than 8.9% for global direct data for values measured on the
ground at the 95% confidence interval.
16
Bibliography.
2007 ASHRAE Handbook, Heating Ventilating, and Air-Conditioning Applications, Chapter
33, “Solar Energy Use”, American Society of Heating, Refrigerating and Air-Conditioning
Engineers, Inc. 1791 Tullie Circle, N.E. Atlanta, GA 30329, pp 33-1 to 33-3.
Florida Solar Energy Center, Solar Water and Pool Heating Design and Installation Manual,
FSEC-IN-21-82, Revised August 1992, 1769 Clearlake Road, Cocoa, FL, 32922, p 2-6
Hofierka, J. and Suri, M, “The Solar Radiation Model for Open Source GIS: Impelmentation
and Applications,” Proceedings of the Open Source GRASS-GIS Users Conference, Trento,
Italy, September 13, 2002
Kasten, F., “The Linke Turbidity Factor Based on Improved Values of the Integral Rayleigh
Optical Thickness”, Solar Energy, Vol 56, No 3, 1996, Pergamon Press, Great Britain, pp.
239-244.
King, Boysin, et al, “Analysis of Factors Influencing the Annual Energy Production of
Photovoltaic Systems”, Proceedings 2002 PV Specialists Conference, IEEE, p.1357
Messenger, Roger and Ventre, Jerry, Photovoltaic Systems Engineering, 2000, CRC Press,
LLC, 2000 Corporate Bulvd, N.B. Boca Raton, Florida 3343, p 35
NOAA Earth Systems Research Laboratory (ESRL), “Rayleigh Optical Depth Calculations”,
Section 3.2.10, Website,
http://www.esrl.noaa.gov/gmd/publications/annrpt25/3_2_10.pdf
Rigollier, C., Lefevre, M., Cros, S., Wald, L.,”Heliosat-2 : An Improved Method for the
Mapping of the Solar radiation From Metosat Imagery,” Sol. Energy 83, 2009, pp. 150–156.
Rigollier, C., Lefevre, M., Wald, L.,“The Method Heliosat-2 for Deriving Shortwave Solar
Radiation from Satellite Images.” Sol. Energy 77, 2004, pp. 159–169.
Rigollier, Bauer, and Wald, “On the Clear Sky Model of the ESRA – European solar
Radiation Atlas – with Respect to the Heliosat Method,” Solar Energy, Vol. 68, No. 1, 2000,
Pergamon Press, Great Britain, pp 33-48
17
APPENDIX
REVISEA.BAS
10 REM This program reads the number of shades of gray available
20 REM in the color table and makes that the range. It then calculates
30 REM the % of lightness of each pixel and outputs that % to a
40 REM file with the same number in the format YR(number).txt,
50 REM where Y is the single digit year.
95 DIM LOC.VAL!(10280)
100 INPUT "ENTER THE YEAR TO MAKE SUM FILES, 0-10;",YR
120 IF YR = 10 THEN YR$=" A" ELSE YR$=STR$(YR)
200 FLCTR=1:DAYCTR=1
250 FLCTR$=STR$(FLCTR)
260 IF FLCTR<10 THEN FLCTR$=RIGHT$(FLCTR$,1):GOTO 300
270 IF FLCTR<100 THEN FLCTR$=RIGHT$(FLCTR$,2):GOTO 300
280 IF FLCTR<1000 THEN FLCTR$=RIGHT$(FLCTR$,3):GOTO 300
290 FLCTR$=RIGHT$(FLCTR$,4)
300 FILE$= RIGHT$(YR$,1)+" ("+FLCTR$+").bmp"
320 GOSUB 2000
340 GOSUB 3000
400 FLCTR=FLCTR+1
500 IF FLCTR > 1825 GOTO 1000
550 GOTO 250
1000 CLOSE:STOP
2000 REM OPEN FILE, RETRIEVE AND ADD MATRIX DATA, CLOSE FILE
2020 OPEN FILE$ AS #1 LEN=1:FIELD #1,1 AS X$
2030 FILE.LOC=1600
2044 GET #1, FILE.LOC
2046 X%=ASC(X$):COL.RANGE=X%-2
2048 FILE.LOC=7463:MCTR=0
2050 FOR ROW=1 TO 96:FOR COL=1 TO 107
2070 GET #1, FILE.LOC +1
2080 X%=ASC(X$)
2090 MCTR = MCTR+1
2100 LOC.VAL(MCTR)=INT(100*(X%/COL.RANGE))
2110 FILE.LOC =FILE.LOC+1
2120 NEXT COL
2130 FILE.LOC = FILE.LOC + 145
2140 NEXT ROW
2200 CLOSE #1
2600 RETURN
3000 REM MAKE FILE OF REVISED HOURLY FILE
3005 DAYCTR = FLCTR
3010 DOY$=STR$(DAYCTR)
18
3020 IF DAYCTR<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 3050
3030 IF DAYCTR<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 3050
3032 IF DAYCTR<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 3050
3040 DOY$=RIGHT$(DOY$,4):GOTO 3050
3050 FILE.REV$ = RIGHT$(YR$,1)+"R"+"("+FLCTR$+").txt"
3070 PRINT FILE.REV$;
3100 OPEN FILE.REV$ FOR APPEND AS #2
3110 FOR J = 1 TO 10272
3112 S$=STR$(LOC.VAL!(J))
3115 IF LEN(S$)=5 THEN STOP
3120 IF LEN(S$)=4 THEN S$= RIGHT$(S$,3)+","
3130 IF LEN(S$)=3 THEN S$="0"+RIGHT$(S$,2)+","
3150 IF LEN(S$)=2 THEN S$="00"+RIGHT$(S$,1)+","
3160 PRINT#2, RIGHT$(S$,4);
3166 NEXT J
3220 CLOSE #2
3300 FOR J = 1 TO 10280: LOC.VAL(J)=0 :NEXT J
3500 RETURN
19
PIXSUMA.BAS
1 REM This program sums the clearness values for the five
2 REM hours of each day into a single file for each day
3 REM of the year. Each year has 365 of these files.
100 INPUT "ENTER THE YEAR TO MAKE SUM FILES, 0-10;",YR
105 DIM LOC.VAL(10280)
110 FOR I = 0 TO 10280: LOC.VAL(I) = 0: NEXT I
120 IF YR = 10 THEN YR$=" A" ELSE YR$=STR$(YR)
200 FLCTR=1:DAYCTR=1:LOP5.CTR=0
250 FLCTR$=STR$(FLCTR)
260 IF FLCTR<10 THEN FLCTR$=RIGHT$(FLCTR$,1):GOTO 300
270 IF FLCTR<100 THEN FLCTR$=RIGHT$(FLCTR$,2):GOTO 300
280 IF FLCTR<1000 THEN FLCTR$=RIGHT$(FLCTR$,3):GOTO 300
290 FLCTR$=RIGHT$(FLCTR$,4)
300 FILE$= RIGHT$(YR$,1)+"R("+FLCTR$+").txt"
320 GOSUB 2000:REM Get Pix Values
400 FLCTR=FLCTR+1:DAYCTR=((FLCTR-1)\5)
402 LOP5.CTR = LOP5.CTR + 1
420 IF LOP5.CTR > 4 THEN GOSUB 3000:REM Output Day's File
500 IF FLCTR > 1825 GOTO 1000
550 GOTO 250
1000 CLOSE:STOP
2000 REM OPEN FILE, RETRIEVE AND ADD MATRIX DATA, CLOSE FILE
2020 OPEN "I", #1, FILE$
2030 MCTR=1
2050 X$ = INPUT$ (4,#1)
2060 X% = VAL(X$)
2080 LOC.VAL(MCTR) = LOC.VAL(MCTR)+X%
2090 MCTR = MCTR + 1
2100 IF MCTR < 10273 THEN GOTO 2050
2200 CLOSE #1
2600 RETURN
3000 REM MAKE A DAILY FILE OF 5 SUMMED HOURLY FILES
3010 DOY$=STR$(DAYCTR)
3020 IF DAYCTR<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 3050
3030 IF DAYCTR<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 3050
3040 DOY$=RIGHT$(DOY$,3):GOTO 3050
3050 FILE.TOT$ = RIGHT$(YR$,1)+"T"+"("+DOY$+").txt"
3070 PRINT FILE.TOT$
3100 OPEN FILE.TOT$ FOR APPEND AS #2
3110 FOR J = 1 TO 10272
3112 S$=STR$(LOC.VAL(J))
3115 IF LEN(S$)=5 THEN STOP
3120 IF LEN(S$)=4 THEN S$= RIGHT$(S$,3)+","
3130 IF LEN(S$)=3 THEN S$="0"+RIGHT$(S$,2)+","
20
3150 IF LEN(S$)=2 THEN S$="00"+RIGHT$(S$,1)+","
3160 PRINT#2, RIGHT$(S$,4);
3166 NEXT J
3220 CLOSE #2
3300 FOR J = 1 TO 10280: LOC.VAL(J)=0 :NEXT J
3400 LOP5.CTR = 0
3500 RETURN
21
MAXA.BAS
10 REM This program finds the max-min and range of all pix DOY values
20 REM and outputs the range of each pix to a matrix file.
100 REM CREATE FILE NAME OF TOTALIZED DATA FILES
110 DIM MAX.VAL(10280)
115 YR=0:DOY=1
120 DOY=1
130 DOY$=STR$(DOY)
200 IF YR=10 THEN YR$="A" ELSE YR$=STR$(YR)
210 IF DOY<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 300
220 IF DOY<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 300
230 IF DOY<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 300
300 FILE$=RIGHT$(YR$,1)+"T("+DOY$+").txt"
310 PRINT FILE$
400 GOTO 2000
480 DOY=DOY+1
500 IF DOY<366 THEN GOTO 130 ELSE GOTO 510
510 YR = YR+1
520 IF YR > 10 THEN GOTO 3000:REM OUTPUT FILE
600 GOTO 120
1000 STOP
2000 REM OPEN FILE,GET DATA, CALC MAX-MIN TO MATRIX
2020 OPEN "I", #1, FILE$
2040 MCTR=1:FILE.LOC=1
2050 X$=INPUT$ (4,#1)
2060 X%=VAL(X$)
2070 IF X% > MAX.VAL(MCTR) THEN MAX.VAL(MCTR) = X%
2080 FILE.LOC = FILE.LOC+1
2090 MCTR=MCTR+1
2100 IF MCTR < 10273 GOTO 2050
2900 CLOSE
2910 GOTO 480
3000 REM CREATE AND OUTPUT MAXVAL.txt FILE
3010 OPEN "MAXVAL.TXT" FOR APPEND AS #2
3020 FOR J=1 TO 10272
3030 S$=STR$(MAX.VAL(J))
3040 IF LEN(S$)=5 THEN STOP
3050 IF LEN(S$)=4 THEN S$=RIGHT$(S$,3)+","
3060 IF LEN(S$)=3 THEN S$="0"+RIGHT$(S$,2)+","
3070 IF LEN(S$)=2 THEN S$="00"+RIGHT$(S$,1)+","
3080 PRINT#2,RIGHT$(S$,4);
3100 NEXT J
3910 CLOSE:STOP
22
MINA.BAS
10 REM This program finds the max-min and range of all pix DOY values
20 REM and outputs the range of each pix to a matrix file.
100 REM CREATE FILE NAME OF TOTALIZED DATA FILES
110 DIM MIN.VAL(10280)
112 FOR I=1 TO 10280:MIN.VAL(I)=500:NEXT I
115 YR=0:DOY=1
120 DOY=1
130 DOY$=STR$(DOY)
200 IF YR=10 THEN YR$="A" ELSE YR$=STR$(YR)
210 IF DOY<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 300
220 IF DOY<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 300
230 IF DOY<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 300
300 FILE$=RIGHT$(YR$,1)+"T("+DOY$+").txt"
310 PRINT FILE$
400 GOTO 2000
480 DOY=DOY+1
500 IF DOY<366 THEN GOTO 130 ELSE GOTO 510
510 YR = YR+1
520 IF YR > 10 THEN GOTO 3000:REM OUTPUT FILE
600 GOTO 120
1000 STOP
2000 REM OPEN FILE,GET DATA, CALC MAX-MIN TO MATRIX
2020 OPEN "I", #1, FILE$
2040 MCTR=1:FILE.LOC=1
2050 X$=INPUT$ (4,#1)
2060 X%=VAL(X$)
2070 IF X% < MIN.VAL(MCTR) THEN MIN.VAL(MCTR) = X%
2080 FILE.LOC = FILE.LOC+1
2090 MCTR=MCTR+1
2100 IF MCTR < 10273 GOTO 2050
2900 CLOSE
2910 GOTO 480
3000 REM CREATE AND OUTPUT MINVAL.txt FILE
3010 OPEN "MINVAL.TXT" FOR APPEND AS #2
3020 FOR J=1 TO 10272
3030 S$=STR$(MIN.VAL(J))
3040 IF LEN(S$)=5 THEN STOP
3050 IF LEN(S$)=4 THEN S$=RIGHT$(S$,3)+","
3060 IF LEN(S$)=3 THEN S$="0"+RIGHT$(S$,2)+","
3070 IF LEN(S$)=2 THEN S$="00"+RIGHT$(S$,1)+","
3080 PRINT#2,RIGHT$(S$,4);
3100 NEXT J
3910 CLOSE:STOP
23
NORMA.BAS
10 REM This calcs the normalized clearness val from max-min for all pix DOYs
20 REM and outputs the normalized value of each pix to a matrix file.
100 REM CREATE FILE NAME OF PREVIOUSLY TOTALIZED DATA FILES
110 DIM NOR.VAL!(10280)
115 YR=0:DOY=1
120 DOY=1
130 DOY$=STR$(DOY)
200 IF YR=10 THEN YR$="A" ELSE YR$=STR$(YR)
210 IF DOY<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 300
220 IF DOY<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 300
230 IF DOY<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 300
300 FILE$=RIGHT$(YR$,1)+"T("+DOY$+").txt"
310 PRINT FILE$
400 GOSUB 2000
420 GOSUB 3000
480 DOY=DOY+1
500 IF DOY<366 THEN GOTO 130 ELSE GOTO 510
510 YR = YR+1
520 IF YR > 10 THEN GOTO 1000:REM DONE
600 GOTO 120
1000 STOP
2000 REM OPEN FILE,GET DATA, CALC NORMALIZED CLEARNESS TO MATRIX
2020 OPEN "I", #1, FILE$
2022 OPEN "I", #2, "MAXVAL.txt"
2024 OPEN "I", #3, "MINVAL.txt"
2040 MCTR=1
2050 X$=INPUT$ (4,#1)
2052 MAX$=INPUT$ (4,#2)
2054 MIN$=INPUT$ (4,#3)
2060 X%=VAL(X$)
2062 MAX.VAL%=VAL(MAX$)
2064 MIN.VAL%=VAL(MIN$)
2070 NOR.VAL!(MCTR)= CINT(1000*(X%-MIN.VAL%)/(MAX.VAL%-MIN.VAL%))
2072 S$=STR$(NOR.VAL(MCTR))
2090 MCTR=MCTR+1
2100 IF MCTR < 10273 GOTO 2050
2900 CLOSE
2910 RETURN:REM CALCS DONE FOR THIS DAY
3000 REM CREATE AND OUTPUT DAILY MATRIX FILE WITH NORMALIZED c
3002 FIL.OUT$=RIGHT$(YR$,1)+"N("+DOY$+").txt"
3010 OPEN FIL.OUT$ FOR APPEND AS #2
3020 FOR J=1 TO 10272
3030 S$=STR$(NOR.VAL(J))
3040 IF LEN(S$)=5 THEN STOP
24
3050 IF LEN(S$)=4 THEN S$=RIGHT$(S$,3)+","
3060 IF LEN(S$)=3 THEN S$="0"+RIGHT$(S$,2)+","
3070 IF LEN(S$)=2 THEN S$="00"+RIGHT$(S$,1)+","
3080 PRINT#2,RIGHT$(S$,4);
3100 NEXT J
3910 CLOSE
3990 RETURN
25
CLEARSKYA.BAS
10 REM This calcs the predicted clear sky direct beam solar from the
20 REM extraterrestrial value for each pixel of the Florida coverage.
30 REM It makes a file for each day of the year,ie 365 files.
110 DIM SOL.VAL!(10280):PI=3.1415927#
112 ZT1=13.25:ZT2=15.25:ZT3=17.25:ZT4=19.25:ZT5=21.25:REM SET ZULU TIME
118 REM CREATE FILE NAMEs FOR DAILY OUTPUT DATA FILES
120 DOY%=1
130 DOY$=STR$(DOY%):MCTR%=0
210 IF DOY%<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 300
220 IF DOY%<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 300
230 IF DOY%<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 300
300 FILE$="CS("+DOY$+").txt"
350 GOSUB 2000: REM USING DOY%, FIND EXTRATERRESTRIAL SOLAR W/M2
410 GOSUB 2100: REM USING DOY%, GET EARTH DECLINATION (DEC.DEG)
420 GOSUB 2200: REM USING DOY%, GET EQUATION OF TIME(EOT)
430 FOR ROW% = 26 TO 121
432 FOR COL% = 86 TO 192
440 GOSUB 2300: REM USING ROW%,COL% FIND LAT,LON
&LATR,LONR(RADIANS)
450 GOSUB 2400: REM USING ZULU TIMES,EQT,LON FIND LOCAL SOLAR
TIMES(LT1..LT5)
460 GOSUB 2500: REM USING LAT,DEC.RAD,&SOLAR TIMES,FIND SIN.BETA1..5
470 GOSUB 2600: REM USING SIN.BATA1..5 FIND AIR MASS M1..M5
480 GOSUB 2700: REM USING AIR MASS M1..M5 FIND EXPONENTIAL
MUTIPLIERS
490 GOSUB 2800: REM USING EXTRATERRESTRIAL AND MULTIPLIERS,FIND
DAILY DIRECT
600 NEXT COL%
610 NEXT ROW%
900 GOSUB 3000: REM OUTPUT DAY FILE
990 DOY%=DOY%+1
1000 IF DOY%<366 THEN GOTO 130 ELSE GOTO 1010
1010 CLOSE:STOP:REM DONE WITH ALL DAYS
2000 REM USING DOY%, FIND EXTRATERRESTRIAL SOLAR W/M2(EX.SOL)
2020 EX.SOL=1367*(1.00011+(.034221*COS((DOY%*360/365.2422)-2.7206)))
2028 RETURN
2100 REM USING DOY%, FIND DECLINATION ANGLE (DEC.DEG) AND
DEC.RAD(RADIANS)
2110 DCD=360*((284+DOY%)/365):REM LOCATION OF ROTATION IN DEGREES
2120 DCR=DCD*PI/180:REM CONVERT TO RADIANS FOR SIN
2130 DEC.DEG=23.45*SIN(DCR):REM DECLINATION IN DEGREES
2140 DEC.RAD=DEC.DEG*PI/180
2150 RETURN
2200 REM USING DOY%, GET EQUATION OF TIME (EQT) IN MINUTES
26
2210 IF DOY% < 107 THEN EQT = -14.2*SIN(PI*(DOY%+7)/111):GOTO 2250
2220 IF DOY% < 167 THEN EQT = 4!*SIN(PI*(DOY%-106)/59):GOTO 2250
2230 IF DOY% < 247 THEN EQT = -6.5*SIN(PI*(DOY%-166)/80):GOTO 2250
2240 IF DOY% < 367 THEN EQT = 16.4*SIN(PI*(DOY%-247)/113):GOTO 2250
2250 RETURN
2300 REM USING ROW% & COL% FIND LAT,LON,LATR,LONR
2310 LAT = - 1*(((151-ROW%)*.0719298)-33.185965#)
2312 LATR = LAT*PI/180
2320 LON = 93.9545-(COL%*.072681)
2322 LONR = LON*PI/180
2340 RETURN
2400 REM USING ZULU TIME ZT1,ET&LON FIND LOCAL SOLAR TIMES(LT1..LT5)
2402 REM WITH LOCAL SOLAR TIME, CALC SOLAR HOUR ANGLE RADIANS
SHAR1..5
2410 LT1=ZT1+(EQT/60)+((0-LON)/15):SHA1=15*(12-LT1):SHAR1=SHA1*PI/180
2420 LT2=LT1+2:SHA2=15*(12-LT2):SHAR2=SHA2*PI/180
2430 LT3=LT1+4:SHA3=15*(12-LT3):SHAR3=SHA3*PI/180
2440 LT4=LT1+6:SHA4=15*(12-LT4):SHAR4=SHA4*PI/180
2450 LT5=LT1+8:SHA5=15*(12-LT5):SHAR5=SHA5*PI/180
2490 RETURN
2500 REM USING LATR,DEC.RAD,SHAR1..5 FIND SIN OF ALTITUDES
SIN.BETA1..5
2510 A = COS(LATR)*COS(DEC.RAD)
2520 B = SIN(LATR)*SIN(DEC.RAD)
2530 SIN.BETA1=(A*COS(SHAR1))+B
2540 SIN.BETA2=(A*COS(SHAR2))+B
2550 SIN.BETA3=(A*COS(SHAR3))+B
2560 SIN.BETA4=(A*COS(SHAR4))+B
2570 SIN.BETA5=(A*COS(SHAR5))+B
2580 RETURN
2600 REM USING SIN.BETA1..5 FIND AIR MASSES M1..M5
2610 REM CONSTANT .9988 IS FOR CONSTANT 10 METER ELEVATION
2620 M1=.9988/SIN.BETA1
2630 M2=.9988/SIN.BETA2
2640 M3=.9988/SIN.BETA3
2650 M4=.9988/SIN.BETA4
2660 M5=.9988/SIN.BETA5
2690 RETURN
2700 REM GIVEN AIR MASS (M1..5)FIND EX.MULT1..5
2710 EX.MULT1=EXP(-(.8662*2*M1)/(6.6296+(1.7513*M1)(.1202*M1^2)+(.0065*M1^3)-(.00013*M1^4)))
2720 EX.MULT2=EXP(-(.8662*2*M2)/(6.6296+(1.7513*M2)(.1202*M2^2)+(.0065*M2^3)-(.00013*M2^4)))
2730 EX.MULT3=EXP(-(.8662*2*M3)/(6.6296+(1.7513*M3)(.1202*M3^2)+(.0065*M3^3)-(.00013*M3^4)))
27
2740 EX.MULT4=EXP(-(.8662*2*M4)/(6.6296+(1.7513*M4)(.1202*M4^2)+(.0065*M4^3)-(.00013*M4^4)))
2750 EX.MULT5=EXP(-(.8662*2*M5)/(6.6296+(1.7513*M5)(.1202*M5^2)+(.0065*M5^3)-(.00013*M5^4)))
2780 RETURN
2800 REM USING EX.SOL & EX.MULT1..5, TOTALIZE SOLAR DIRECT FOR THIS
DAY AND LAT-LON (H.DAY)
2810 H1=EX.SOL*EX.MULT1
2820 H2=EX.SOL*EX.MULT2
2830 H3=EX.SOL*EX.MULT3
2840 H4=EX.SOL*EX.MULT4
2850 H5=EX.SOL*EX.MULT5
2860 H.DAY= 2*(H1+H2+H3+H4+H5)
2870 MCTR%=MCTR% + 1
2880 SOL.VAL!(MCTR%)= CINT(H.DAY)
2890 RETURN
2910 RETURN:REM CALCS DONE FOR THIS DAY
3000 REM CREATE AND OUTPUT DAILY MATRIX FILE WITH CLEAR SKY
DIRECT
3010 FIL.OUT$="CLR("+DOY$+").txt"
3012 PRINT FIL.OUT$
3015 OPEN FIL.OUT$ FOR APPEND AS #2
3020 FOR J=1 TO 10272
3030 S$=STR$(SOL.VAL!(J))
3040 IF LEN(S$)=7 THEN STOP
3050 IF LEN(S$)=6 THEN S$=RIGHT$(S$,5)+","
3060 IF LEN(S$)=5 THEN S$="0"+RIGHT$(S$,4)+","
3070 IF LEN(S$)=4 THEN S$="00"+RIGHT$(S$,3)+","
3080 PRINT#2,RIGHT$(S$,6);
3100 NEXT J
3910 CLOSE
3990 RETURN
28
DAYSOLA.BAS
10 REM This program sequentially retrieves clearsky value and clearness value
20 REM for each day for the given year, calculates the projected direct beam
30 REM and direct global w/m2 per day and outputs the values to 2 text files,
40 REM one for direct beam 0D(1).txt..AD(365).txt and direct global 0G(1).txt..AG(365).txt
100 REM CREATE FILE NAMEs OF clearsky and clearness files for retrieval.
115 INPUT "ENTER THE YEAR TO RETRIEVE VALUES, O-10:",YR
117 LC% = 10272:REM EACH FILE HAS 10272 PIXALS
118 DIM GLOB%(10273)
120 DOY%=1
130 DOY$=STR$(DOY%)
200 IF YR=10 THEN YR$="A" ELSE YR$=STR$(YR)
210 IF DOY%<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 300
220 IF DOY%<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 300
230 IF DOY%<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 300
300 FILE$=RIGHT$(YR$,1)+"N("+DOY$+").txt"
310 FILE2$="CLR("+DOY$+").txt"
320 FILE3$=RIGHT$(YR$,1)+"D("+DOY$+").txt"
330 FILE4$=RIGHT$(YR$,1)+"G("+DOY$+").txt"
340 PRINT FILE$
400 GOSUB 2000: REM GET CLEARSKY VALUE (Y) & CLEARNESS VAL (X) &
CALC SOLAR
480 DOY%=DOY%+1
500 IF DOY%<366 THEN GOTO 130 ELSE GOTO 510
510 CLOSE: STOP: REM DONE
600 GOTO 120
1000 STOP
2000 REM OPEN FILES,GET DATA,OUTPUT DATA
2020 OPEN "I", #1, FILE$
2040 OPEN "I", #2, FILE2$
2042 OPEN FILE3$ FOR APPEND AS #3
2046 FOR I = 1 TO LC%
2050 X$=INPUT$ (4,#1):X=VAL(X$)
2060 Y$=INPUT$ (6,#2):Y=VAL(Y$)
2070 BEAM%=Y*(-0.08939148+(1.0686478*(EXP(-(X/1000)/0.31509295))))
2080 IF BEAM% < 1 THEN BEAM% = 1
2090 GLOB%(I)=Y*(0.91129029-(0.9999162*X/1000))
2100 IF GLOB%(I) < 1 THEN GLOB%(I) = 1
2200 B$=STR$(BEAM%)
2210 IF LEN(B$)=6 THEN B$=RIGHT$(B$,5)+","
2220 IF LEN(B$)=5 THEN B$="0"+RIGHT$(B$,4)+","
2230 IF LEN(B$)=4 THEN B$="00"+RIGHT$(B$,3)+","
2240 IF LEN(B$)=3 THEN B$="000"+RIGHT$(B$,2)+","
2250 IF LEN(B$)=2 THEN B$="0000"+RIGHT$(B$,1)+","
2300 PRINT#3, RIGHT$(B$,6);
29
2310 NEXT I
2400 CLOSE
2410 OPEN FILE4$ FOR APPEND AS #1
2420 FOR I =1 TO LC%
2430 G$= STR$(GLOB%(I))
2440 IF LEN(G$)=6 THEN G$=RIGHT$(G$,5)+","
2450 IF LEN(G$)=5 THEN G$="0"+RIGHT$(G$,4)+","
2460 IF LEN(G$)=4 THEN G$="00"+RIGHT$(G$,3)+","
2470 IF LEN(G$)=3 THEN G$="000"+RIGHT$(G$,2)+","
2480 IF LEN(G$)=2 THEN G$="0000"+RIGHT$(G$,1)+","
2490 PRINT#1, RIGHT$(G$,6);
2500 NEXT I
2900 CLOSE
2910 RETURN
30
YRMOAVEA.BAS
10 REM This program retrieves direct beam daily files for a given year
20 REM and averages them by month and outputs monthly direct beam files
30 REM with the format 1AD(1)...1AD(12). YRMOAVGA.BAS does the same for
40 REM direct golobal values making 1AG(1)...1AD(12)or YRAG(MO) form.
100 REM Get year and cycle through months.
115 INPUT "ENTER THE YEAR TO RETRIEVE VALUES, O-10:",YR
117 LC% = 10272:REM EACH FILE HAS 10272 PIXALS
118 DIM AVEVAL(10273)
340 FOR MO% = 1 TO 12
342 FOR I = 1 TO LC%: AVEVAL(I)=0:NEXT I
344 DAYSINMO% = 0
350 MO$=STR$(MO%)
360 IF MO%<10 THEN MO$ = RIGHT$(MO$,1):GOTO 380
370 IF MO%>9 THEN MO$ = RIGHT$(MO$,2)
380 IF MO% = 1 THEN FIRST.DAY%=1: LAST.DAY% = 31:GOTO 460
390 IF MO% = 2 THEN FIRST.DAY%=32: LAST.DAY% = 59:GOTO 460
400 IF MO% = 3 THEN FIRST.DAY%=60: LAST.DAY% = 90:GOTO 460
410 IF MO% = 4 THEN FIRST.DAY%=91: LAST.DAY% = 120:GOTO 460
420 IF MO% = 5 THEN FIRST.DAY%=121: LAST.DAY% = 151:GOTO 460
425 IF MO% = 6 THEN FIRST.DAY%=152: LAST.DAY% = 181:GOTO 460
430 IF MO% = 7 THEN FIRST.DAY%=182: LAST.DAY% = 212:GOTO 460
435 IF MO% = 8 THEN FIRST.DAY%=213: LAST.DAY% = 243:GOTO 460
440 IF MO% = 9 THEN FIRST.DAY%=244: LAST.DAY% = 273:GOTO 460
445 IF MO% = 10 THEN FIRST.DAY%=274: LAST.DAY% = 304:GOTO 460
450 IF MO% = 11 THEN FIRST.DAY%=305: LAST.DAY% = 334:GOTO 460
455 IF MO% = 12 THEN FIRST.DAY%=335: LAST.DAY% = 365:GOTO 460
460 GOSUB 2000: REM GET AVERAGE MONTHLY DIRECT BEAM DATA AND
OUTPUT
520 NEXT MO%
1000 CLOSE:STOP
2000 REM OPEN BEAM FILES,GET DATA,OUTPUT DATA
2050 FOR DOY% = FIRST.DAY% TO LAST.DAY%
2060 DAYSINMO% = DAYSINMO% + 1
2190 DOY$=STR$(DOY%)
2200 IF YR=10 THEN YR$="A" ELSE YR$=STR$(YR)
2210 IF DOY%<10 THEN DOY$=RIGHT$(DOY$,1):GOTO 2320
2220 IF DOY%<100 THEN DOY$=RIGHT$(DOY$,2):GOTO 2320
2230 IF DOY%<1000 THEN DOY$=RIGHT$(DOY$,3):GOTO 2320
2320 FILE$=RIGHT$(YR$,1)+"D("+DOY$+").txt"
2340 OPEN "I",#1, FILE$
2350 FOR I = 1 TO LC%
2360 X$=INPUT$ (6,#1):X=VAL(X$)
2370 AVEVAL(I)=AVEVAL(I)+X
2380 NEXT I
31
2390 CLOSE #1
2400 NEXT DOY%
2410 FILE2$=RIGHT$(YR$,1)+"AD("+MO$+").txt"
2412 PRINT FILE2$
2414 OPEN FILE2$ FOR APPEND AS #2
2420 FOR I = 1 TO LC%
2430 AVEVAL(I)=AVEVAL(I)/DAYSINMO%
2440 AVEVAL% = AVEVAL(I)
2442 AVEVAL$= STR$(AVEVAL%)
2444 IF LEN(AVEVAL$)=5 THEN AVEVAL$= RIGHT$(AVEVAL$,4)+",":GOTO 2450
2446 IF LEN(AVEVAL$)=4 THEN AVEVAL$="0"+RIGHT$(AVEVAL$,3)+",":GOTO
2450
2450 PRINT#2, RIGHT$(AVEVAL$,5);
2470 NEXT I
2480 CLOSE #2
2500 RETURN
5000 STOP
32
YRSAVDA.BAS
10 REM This program retrieves direct beam monthly files for the 11 years
20 REM and averages them by month and outputs monthly direct beam files
30 REM with the format DSOL(1)...DSOL(12). YRSAVGA.BAS does the same for
40 REM direct golobal values making GSOL(1)...GSOL(12).
100 REM cycle through months.
117 LC% = 10272:REM EACH FILE HAS 10272 PIXALS
118 DIM AVEVAL(10273)
340 FOR MO% = 1 TO 12
342 FOR I = 1 TO LC%: AVEVAL(I)=0:NEXT I
350 MO$=STR$(MO%)
360 IF MO%<10 THEN MO$ = RIGHT$(MO$,1):GOTO 460
370 IF MO%>9 THEN MO$ = RIGHT$(MO$,2)
460 GOSUB 2000: REM GET AVERAGE MONTHLY DIRECT BEAM DATA AND
OUTPUT
520 NEXT MO%
1000 CLOSE:STOP
2000 REM OPEN BEAM FILES,GET DATA,OUTPUT DATA
2050 FOR YR% = 0 TO 10
2200 IF YR%=10 THEN YR$="A" ELSE YR$=RIGHT$(STR$(YR%),1)
2220 FILE$= YR$+"AD("+MO$+").txt"
2340 OPEN "I",#1, FILE$
2350 FOR I = 1 TO LC%
2360 X$=INPUT$ (5,#1):X=VAL(X$)
2370 AVEVAL(I)=AVEVAL(I)+X
2380 NEXT I
2390 CLOSE #1
2400 NEXT YR%
2410 FILE2$="DSOL("+MO$+").txt"
2412 PRINT FILE2$
2414 OPEN FILE2$ FOR APPEND AS #2
2420 FOR I = 1 TO LC%
2430 AVEVAL(I)=AVEVAL(I)/11
2440 AVEVAL% = AVEVAL(I)
2442 AVEVAL$= STR$(AVEVAL%)
2444 IF LEN(AVEVAL$)=5 THEN AVEVAL$= RIGHT$(AVEVAL$,4)+",":GOTO 2450
2446 IF LEN(AVEVAL$)=4 THEN AVEVAL$="0"+RIGHT$(AVEVAL$,3)+",":GOTO
2450
2450 PRINT#2, RIGHT$(AVEVAL$,5);
2470 NEXT I
2480 CLOSE #2
2500 RETURN
5000 STOP
33
YRSAVGA.BAS
10 REM This program retrieves direct GLOBAL monthly files for the 11 years
20 REM and averages them by month and outputs monthly direct GLOBAL files
30 REM with the format GSOL(1)...GSOL(12).
40 REM
100 REM cycle through months.
117 LC% = 10272:REM EACH FILE HAS 10272 PIXALS
118 DIM AVEVAL(10273)
340 FOR MO% = 1 TO 12
342 FOR I = 1 TO LC%: AVEVAL(I)=0:NEXT I
350 MO$=STR$(MO%)
360 IF MO%<10 THEN MO$ = RIGHT$(MO$,1):GOTO 460
370 IF MO%>9 THEN MO$ = RIGHT$(MO$,2)
460 GOSUB 2000: REM GET AVERAGE MONTHLY DIRECT BEAM DATA AND
OUTPUT
520 NEXT MO%
1000 CLOSE:STOP
2000 REM OPEN GLOBAL FILES,GET DATA,OUTPUT DATA
2050 FOR YR% = 0 TO 10
2200 IF YR%=10 THEN YR$="A" ELSE YR$=RIGHT$(STR$(YR%),1)
2220 FILE$= YR$+"AG("+MO$+").txt"
2340 OPEN "I",#1, FILE$
2350 FOR I = 1 TO LC%
2360 X$=INPUT$ (5,#1):X=VAL(X$)
2370 AVEVAL(I)=AVEVAL(I)+X
2380 NEXT I
2390 CLOSE #1
2400 NEXT YR%
2410 FILE2$="GSOL("+MO$+").txt"
2412 PRINT FILE2$
2414 OPEN FILE2$ FOR APPEND AS #2
2420 FOR I = 1 TO LC%
2430 AVEVAL(I)=AVEVAL(I)/11
2440 AVEVAL% = AVEVAL(I)
2442 AVEVAL$= STR$(AVEVAL%)
2444 IF LEN(AVEVAL$)=5 THEN AVEVAL$= RIGHT$(AVEVAL$,4)+",":GOTO 2450
2446 IF LEN(AVEVAL$)=4 THEN AVEVAL$="0"+RIGHT$(AVEVAL$,3)+",":GOTO
2450
2450 PRINT#2, RIGHT$(AVEVAL$,5);
2470 NEXT I
2480 CLOSE #2
2500 RETURN
5000 STOP
34