This code is imported direct from http://rredc.nrel.gov/solar/codesandalgorithms/solpos/ Copyrights are retained in the code for each algorithm used. The library calculates the apparent solar position and intensity (theoretical maximum solar energy) based on the date, time, and location on Earth. The calculated data can be used to predict solar radiation, to be used in meteorological, solar energy and irrigation applications.

Committer:
jcobb
Date:
Tue Jul 20 22:45:48 2010 +0000
Revision:
0:fba19b344b6d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jcobb 0:fba19b344b6d 1 /*============================================================================
jcobb 0:fba19b344b6d 2 *
jcobb 0:fba19b344b6d 3 * NAME: solpos00.h
jcobb 0:fba19b344b6d 4 *
jcobb 0:fba19b344b6d 5 * Contains:
jcobb 0:fba19b344b6d 6 * S_solpos (computes the solar position and intensity
jcobb 0:fba19b344b6d 7 * from time and place)
jcobb 0:fba19b344b6d 8 * INPUTS: (from posdata)
jcobb 0:fba19b344b6d 9 * year, month, day, hour, minute, second,
jcobb 0:fba19b344b6d 10 * latitude, longitude, timezone, interval
jcobb 0:fba19b344b6d 11 * OPTIONAL: (from posdata; defaults from S_init function)
jcobb 0:fba19b344b6d 12 * press DEFAULT 1013.0 (standard pressure)
jcobb 0:fba19b344b6d 13 * temp DEFAULT 10.0 (standard temperature)
jcobb 0:fba19b344b6d 14 * tilt DEFAULT 0.0 (horizontal panel)
jcobb 0:fba19b344b6d 15 * aspect DEFAULT 180.0 (South-facing panel)
jcobb 0:fba19b344b6d 16 * sbwid DEFAULT 7.6 (shadowband width)
jcobb 0:fba19b344b6d 17 * sbrad DEFAULT 31.7 (shadowband radius)
jcobb 0:fba19b344b6d 18 * sbsky DEFAULT 0.04 (shadowband sky factor)
jcobb 0:fba19b344b6d 19 *
jcobb 0:fba19b344b6d 20 * OUTPUTS: (posdata) daynum, amass, ampress, azim, cosinc,
jcobb 0:fba19b344b6d 21 * elevref, etr, etrn, etrtilt, prime,
jcobb 0:fba19b344b6d 22 * sbcf, sretr, ssetr, unprime, zenref
jcobb 0:fba19b344b6d 23 *
jcobb 0:fba19b344b6d 24 * RETURNS: Long int status code (defined in solpos.h)
jcobb 0:fba19b344b6d 25 *
jcobb 0:fba19b344b6d 26 * Usage:
jcobb 0:fba19b344b6d 27 * In calling program, along with other 'includes', insert:
jcobb 0:fba19b344b6d 28 *
jcobb 0:fba19b344b6d 29 * #include "solpos.h"
jcobb 0:fba19b344b6d 30 *
jcobb 0:fba19b344b6d 31 * Martin Rymes
jcobb 0:fba19b344b6d 32 * National Renewable Energy Laboratory
jcobb 0:fba19b344b6d 33 * 25 March 1998
jcobb 0:fba19b344b6d 34 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 35
jcobb 0:fba19b344b6d 36 /*============================================================================
jcobb 0:fba19b344b6d 37 *
jcobb 0:fba19b344b6d 38 * Define the function codes
jcobb 0:fba19b344b6d 39 *
jcobb 0:fba19b344b6d 40 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 41 #define L_DOY 0x0001
jcobb 0:fba19b344b6d 42 #define L_GEOM 0x0002
jcobb 0:fba19b344b6d 43 #define L_ZENETR 0x0004
jcobb 0:fba19b344b6d 44 #define L_SSHA 0x0008
jcobb 0:fba19b344b6d 45 #define L_SBCF 0x0010
jcobb 0:fba19b344b6d 46 #define L_TST 0x0020
jcobb 0:fba19b344b6d 47 #define L_SRSS 0x0040
jcobb 0:fba19b344b6d 48 #define L_SOLAZM 0x0080
jcobb 0:fba19b344b6d 49 #define L_REFRAC 0x0100
jcobb 0:fba19b344b6d 50 #define L_AMASS 0x0200
jcobb 0:fba19b344b6d 51 #define L_PRIME 0x0400
jcobb 0:fba19b344b6d 52 #define L_TILT 0x0800
jcobb 0:fba19b344b6d 53 #define L_ETR 0x1000
jcobb 0:fba19b344b6d 54 #define L_ALL 0xFFFF
jcobb 0:fba19b344b6d 55
jcobb 0:fba19b344b6d 56 /*============================================================================
jcobb 0:fba19b344b6d 57 *
jcobb 0:fba19b344b6d 58 * Define the bit-wise masks for each function
jcobb 0:fba19b344b6d 59 *
jcobb 0:fba19b344b6d 60 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 61 #define S_DOY ( L_DOY )
jcobb 0:fba19b344b6d 62 #define S_GEOM ( L_GEOM | S_DOY )
jcobb 0:fba19b344b6d 63 #define S_ZENETR ( L_ZENETR | S_GEOM )
jcobb 0:fba19b344b6d 64 #define S_SSHA ( L_SSHA | S_GEOM )
jcobb 0:fba19b344b6d 65 #define S_SBCF ( L_SBCF | S_SSHA )
jcobb 0:fba19b344b6d 66 #define S_TST ( L_TST | S_GEOM )
jcobb 0:fba19b344b6d 67 #define S_SRSS ( L_SRSS | S_SSHA | S_TST )
jcobb 0:fba19b344b6d 68 #define S_SOLAZM ( L_SOLAZM | S_ZENETR )
jcobb 0:fba19b344b6d 69 #define S_REFRAC ( L_REFRAC | S_ZENETR )
jcobb 0:fba19b344b6d 70 #define S_AMASS ( L_AMASS | S_REFRAC )
jcobb 0:fba19b344b6d 71 #define S_PRIME ( L_PRIME | S_AMASS )
jcobb 0:fba19b344b6d 72 #define S_TILT ( L_TILT | S_SOLAZM | S_REFRAC )
jcobb 0:fba19b344b6d 73 #define S_ETR ( L_ETR | S_REFRAC )
jcobb 0:fba19b344b6d 74 #define S_ALL ( L_ALL )
jcobb 0:fba19b344b6d 75
jcobb 0:fba19b344b6d 76
jcobb 0:fba19b344b6d 77 /*============================================================================
jcobb 0:fba19b344b6d 78 *
jcobb 0:fba19b344b6d 79 * Enumerate the error codes
jcobb 0:fba19b344b6d 80 * (Bit positions are from least significant to most significant)
jcobb 0:fba19b344b6d 81 *
jcobb 0:fba19b344b6d 82 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 83 /* Code Bit Parameter Range
jcobb 0:fba19b344b6d 84 =============== === =================== ============= */
jcobb 0:fba19b344b6d 85 enum {S_YEAR_ERROR, /* 0 year 1950 - 2050 */
jcobb 0:fba19b344b6d 86 S_MONTH_ERROR, /* 1 month 1 - 12 */
jcobb 0:fba19b344b6d 87 S_DAY_ERROR, /* 2 day-of-month 1 - 31 */
jcobb 0:fba19b344b6d 88 S_DOY_ERROR, /* 3 day-of-year 1 - 366 */
jcobb 0:fba19b344b6d 89 S_HOUR_ERROR, /* 4 hour 0 - 24 */
jcobb 0:fba19b344b6d 90 S_MINUTE_ERROR, /* 5 minute 0 - 59 */
jcobb 0:fba19b344b6d 91 S_SECOND_ERROR, /* 6 second 0 - 59 */
jcobb 0:fba19b344b6d 92 S_TZONE_ERROR, /* 7 time zone -12 - 12 */
jcobb 0:fba19b344b6d 93 S_INTRVL_ERROR, /* 8 interval (seconds) 0 - 28800 */
jcobb 0:fba19b344b6d 94 S_LAT_ERROR, /* 9 latitude -90 - 90 */
jcobb 0:fba19b344b6d 95 S_LON_ERROR, /* 10 longitude -180 - 180 */
jcobb 0:fba19b344b6d 96 S_TEMP_ERROR, /* 11 temperature (deg. C) -100 - 100 */
jcobb 0:fba19b344b6d 97 S_PRESS_ERROR, /* 12 pressure (millibars) 0 - 2000 */
jcobb 0:fba19b344b6d 98 S_TILT_ERROR, /* 13 tilt -90 - 90 */
jcobb 0:fba19b344b6d 99 S_ASPECT_ERROR, /* 14 aspect -360 - 360 */
jcobb 0:fba19b344b6d 100 S_SBWID_ERROR, /* 15 shadow band width (cm) 1 - 100 */
jcobb 0:fba19b344b6d 101 S_SBRAD_ERROR, /* 16 shadow band radius (cm) 1 - 100 */
jcobb 0:fba19b344b6d 102 S_SBSKY_ERROR}; /* 17 shadow band sky factor -1 - 1 */
jcobb 0:fba19b344b6d 103
jcobb 0:fba19b344b6d 104 struct posdata
jcobb 0:fba19b344b6d 105 {
jcobb 0:fba19b344b6d 106 /***** ALPHABETICAL LIST OF COMMON VARIABLES *****/
jcobb 0:fba19b344b6d 107 /* Each comment begins with a 1-column letter code:
jcobb 0:fba19b344b6d 108 I: INPUT variable
jcobb 0:fba19b344b6d 109 O: OUTPUT variable
jcobb 0:fba19b344b6d 110 T: TRANSITIONAL variable used in the algorithm,
jcobb 0:fba19b344b6d 111 of interest only to the solar radiation
jcobb 0:fba19b344b6d 112 modelers, and available to you because you
jcobb 0:fba19b344b6d 113 may be one of them.
jcobb 0:fba19b344b6d 114
jcobb 0:fba19b344b6d 115 The FUNCTION column indicates which sub-function
jcobb 0:fba19b344b6d 116 within solpos must be switched on using the
jcobb 0:fba19b344b6d 117 "function" parameter to calculate the desired
jcobb 0:fba19b344b6d 118 output variable. All function codes are
jcobb 0:fba19b344b6d 119 defined in the solpos.h file. The default
jcobb 0:fba19b344b6d 120 S_ALL switch calculates all output variables.
jcobb 0:fba19b344b6d 121 Multiple functions may be or'd to create a
jcobb 0:fba19b344b6d 122 composite function switch. For example,
jcobb 0:fba19b344b6d 123 (S_TST | S_SBCF). Specifying only the functions
jcobb 0:fba19b344b6d 124 for required output variables may allow solpos
jcobb 0:fba19b344b6d 125 to execute more quickly.
jcobb 0:fba19b344b6d 126
jcobb 0:fba19b344b6d 127 The S_DOY mask works as a toggle between the
jcobb 0:fba19b344b6d 128 input date represented as a day number (daynum)
jcobb 0:fba19b344b6d 129 or as month and day. To set the switch (to
jcobb 0:fba19b344b6d 130 use daynum input), the function is or'd; to
jcobb 0:fba19b344b6d 131 clear the switch (to use month and day input),
jcobb 0:fba19b344b6d 132 the function is inverted and and'd.
jcobb 0:fba19b344b6d 133
jcobb 0:fba19b344b6d 134 For example:
jcobb 0:fba19b344b6d 135 pdat->function |= S_DOY (sets daynum input)
jcobb 0:fba19b344b6d 136 pdat->function &= ~S_DOY (sets month and day input)
jcobb 0:fba19b344b6d 137
jcobb 0:fba19b344b6d 138 Whichever date form is used, S_solpos will
jcobb 0:fba19b344b6d 139 calculate and return the variables(s) of the
jcobb 0:fba19b344b6d 140 other form. See the soltest.c program for
jcobb 0:fba19b344b6d 141 other examples. */
jcobb 0:fba19b344b6d 142
jcobb 0:fba19b344b6d 143 /* VARIABLE I/O Function Description */
jcobb 0:fba19b344b6d 144 /* ------------- ---- ---------- ---------------------------------------*/
jcobb 0:fba19b344b6d 145
jcobb 0:fba19b344b6d 146 int day; /* I/O: S_DOY Day of month (May 27 = 27, etc.)
jcobb 0:fba19b344b6d 147 solpos will CALCULATE this by default,
jcobb 0:fba19b344b6d 148 or will optionally require it as input
jcobb 0:fba19b344b6d 149 depending on the setting of the S_DOY
jcobb 0:fba19b344b6d 150 function switch. */
jcobb 0:fba19b344b6d 151 int daynum; /* I/O: S_DOY Day number (day of year; Feb 1 = 32 )
jcobb 0:fba19b344b6d 152 solpos REQUIRES this by default, but
jcobb 0:fba19b344b6d 153 will optionally calculate it from
jcobb 0:fba19b344b6d 154 month and day depending on the setting
jcobb 0:fba19b344b6d 155 of the S_DOY function switch. */
jcobb 0:fba19b344b6d 156 int function; /* I: Switch to choose functions for desired
jcobb 0:fba19b344b6d 157 output. */
jcobb 0:fba19b344b6d 158 int hour; /* I: Hour of day, 0 - 23, DEFAULT = 12 */
jcobb 0:fba19b344b6d 159 int interval; /* I: Interval of a measurement period in
jcobb 0:fba19b344b6d 160 seconds. Forces solpos to use the
jcobb 0:fba19b344b6d 161 time and date from the interval
jcobb 0:fba19b344b6d 162 midpoint. The INPUT time (hour,
jcobb 0:fba19b344b6d 163 minute, and second) is assumed to
jcobb 0:fba19b344b6d 164 be the END of the measurement
jcobb 0:fba19b344b6d 165 interval. */
jcobb 0:fba19b344b6d 166 int minute; /* I: Minute of hour, 0 - 59, DEFAULT = 0 */
jcobb 0:fba19b344b6d 167 int month; /* I/O: S_DOY Month number (Jan = 1, Feb = 2, etc.)
jcobb 0:fba19b344b6d 168 solpos will CALCULATE this by default,
jcobb 0:fba19b344b6d 169 or will optionally require it as input
jcobb 0:fba19b344b6d 170 depending on the setting of the S_DOY
jcobb 0:fba19b344b6d 171 function switch. */
jcobb 0:fba19b344b6d 172 int second; /* I: Second of minute, 0 - 59, DEFAULT = 0 */
jcobb 0:fba19b344b6d 173 int year; /* I: 4-digit year (2-digit year is NOT
jcobb 0:fba19b344b6d 174 allowed */
jcobb 0:fba19b344b6d 175
jcobb 0:fba19b344b6d 176 /***** FLOATS *****/
jcobb 0:fba19b344b6d 177
jcobb 0:fba19b344b6d 178 float amass; /* O: S_AMASS Relative optical airmass */
jcobb 0:fba19b344b6d 179 float ampress; /* O: S_AMASS Pressure-corrected airmass */
jcobb 0:fba19b344b6d 180 float aspect; /* I: Azimuth of panel surface (direction it
jcobb 0:fba19b344b6d 181 faces) N=0, E=90, S=180, W=270,
jcobb 0:fba19b344b6d 182 DEFAULT = 180 */
jcobb 0:fba19b344b6d 183 float azim; /* O: S_SOLAZM Solar azimuth angle: N=0, E=90, S=180,
jcobb 0:fba19b344b6d 184 W=270 */
jcobb 0:fba19b344b6d 185 float cosinc; /* O: S_TILT Cosine of solar incidence angle on
jcobb 0:fba19b344b6d 186 panel */
jcobb 0:fba19b344b6d 187 float coszen; /* O: S_REFRAC Cosine of refraction corrected solar
jcobb 0:fba19b344b6d 188 zenith angle */
jcobb 0:fba19b344b6d 189 float dayang; /* T: S_GEOM Day angle (daynum*360/year-length)
jcobb 0:fba19b344b6d 190 degrees */
jcobb 0:fba19b344b6d 191 float declin; /* T: S_GEOM Declination--zenith angle of solar noon
jcobb 0:fba19b344b6d 192 at equator, degrees NORTH */
jcobb 0:fba19b344b6d 193 float eclong; /* T: S_GEOM Ecliptic longitude, degrees */
jcobb 0:fba19b344b6d 194 float ecobli; /* T: S_GEOM Obliquity of ecliptic */
jcobb 0:fba19b344b6d 195 float ectime; /* T: S_GEOM Time of ecliptic calculations */
jcobb 0:fba19b344b6d 196 float elevetr; /* O: S_ZENETR Solar elevation, no atmospheric
jcobb 0:fba19b344b6d 197 correction (= ETR) */
jcobb 0:fba19b344b6d 198 float elevref; /* O: S_REFRAC Solar elevation angle,
jcobb 0:fba19b344b6d 199 deg. from horizon, refracted */
jcobb 0:fba19b344b6d 200 float eqntim; /* T: S_TST Equation of time (TST - LMT), minutes */
jcobb 0:fba19b344b6d 201 float erv; /* T: S_GEOM Earth radius vector
jcobb 0:fba19b344b6d 202 (multiplied to solar constant) */
jcobb 0:fba19b344b6d 203 float etr; /* O: S_ETR Extraterrestrial (top-of-atmosphere)
jcobb 0:fba19b344b6d 204 W/sq m global horizontal solar
jcobb 0:fba19b344b6d 205 irradiance */
jcobb 0:fba19b344b6d 206 float etrn; /* O: S_ETR Extraterrestrial (top-of-atmosphere)
jcobb 0:fba19b344b6d 207 W/sq m direct normal solar
jcobb 0:fba19b344b6d 208 irradiance */
jcobb 0:fba19b344b6d 209 float etrtilt; /* O: S_TILT Extraterrestrial (top-of-atmosphere)
jcobb 0:fba19b344b6d 210 W/sq m global irradiance on a tilted
jcobb 0:fba19b344b6d 211 surface */
jcobb 0:fba19b344b6d 212 float gmst; /* T: S_GEOM Greenwich mean sidereal time, hours */
jcobb 0:fba19b344b6d 213 float hrang; /* T: S_GEOM Hour angle--hour of sun from solar noon,
jcobb 0:fba19b344b6d 214 degrees WEST */
jcobb 0:fba19b344b6d 215 float julday; /* T: S_GEOM Julian Day of 1 JAN 2000 minus
jcobb 0:fba19b344b6d 216 2,400,000 days (in order to regain
jcobb 0:fba19b344b6d 217 single precision) */
jcobb 0:fba19b344b6d 218 float latitude; /* I: Latitude, degrees north (south negative) */
jcobb 0:fba19b344b6d 219 float longitude; /* I: Longitude, degrees east (west negative) */
jcobb 0:fba19b344b6d 220 float lmst; /* T: S_GEOM Local mean sidereal time, degrees */
jcobb 0:fba19b344b6d 221 float mnanom; /* T: S_GEOM Mean anomaly, degrees */
jcobb 0:fba19b344b6d 222 float mnlong; /* T: S_GEOM Mean longitude, degrees */
jcobb 0:fba19b344b6d 223 float rascen; /* T: S_GEOM Right ascension, degrees */
jcobb 0:fba19b344b6d 224 float press; /* I: Surface pressure, millibars, used for
jcobb 0:fba19b344b6d 225 refraction correction and ampress */
jcobb 0:fba19b344b6d 226 float prime; /* O: S_PRIME Factor that normalizes Kt, Kn, etc. */
jcobb 0:fba19b344b6d 227 float sbcf; /* O: S_SBCF Shadow-band correction factor */
jcobb 0:fba19b344b6d 228 float sbwid; /* I: Shadow-band width (cm) */
jcobb 0:fba19b344b6d 229 float sbrad; /* I: Shadow-band radius (cm) */
jcobb 0:fba19b344b6d 230 float sbsky; /* I: Shadow-band sky factor */
jcobb 0:fba19b344b6d 231 float solcon; /* I: Solar constant (NREL uses 1367 W/sq m) */
jcobb 0:fba19b344b6d 232 float ssha; /* T: S_SRHA Sunset(/rise) hour angle, degrees */
jcobb 0:fba19b344b6d 233 float sretr; /* O: S_SRSS Sunrise time, minutes from midnight,
jcobb 0:fba19b344b6d 234 local, WITHOUT refraction */
jcobb 0:fba19b344b6d 235 float ssetr; /* O: S_SRSS Sunset time, minutes from midnight,
jcobb 0:fba19b344b6d 236 local, WITHOUT refraction */
jcobb 0:fba19b344b6d 237 float temp; /* I: Ambient dry-bulb temperature, degrees C,
jcobb 0:fba19b344b6d 238 used for refraction correction */
jcobb 0:fba19b344b6d 239 float tilt; /* I: Degrees tilt from horizontal of panel */
jcobb 0:fba19b344b6d 240 float timezone; /* I: Time zone, east (west negative).
jcobb 0:fba19b344b6d 241 USA: Mountain = -7, Central = -6, etc. */
jcobb 0:fba19b344b6d 242 float tst; /* T: S_TST True solar time, minutes from midnight */
jcobb 0:fba19b344b6d 243 float tstfix; /* T: S_TST True solar time - local standard time */
jcobb 0:fba19b344b6d 244 float unprime; /* O: S_PRIME Factor that denormalizes Kt', Kn', etc. */
jcobb 0:fba19b344b6d 245 float utime; /* T: S_GEOM Universal (Greenwich) standard time */
jcobb 0:fba19b344b6d 246 float zenetr; /* T: S_ZENETR Solar zenith angle, no atmospheric
jcobb 0:fba19b344b6d 247 correction (= ETR) */
jcobb 0:fba19b344b6d 248 float zenref; /* O: S_REFRAC Solar zenith angle, deg. from zenith,
jcobb 0:fba19b344b6d 249 refracted */
jcobb 0:fba19b344b6d 250 };
jcobb 0:fba19b344b6d 251
jcobb 0:fba19b344b6d 252 /* For users that wish to access individual functions, the following table
jcobb 0:fba19b344b6d 253 lists all output and transition variables, the L_ mask for the function
jcobb 0:fba19b344b6d 254 that calculates them, and all the input variables required by that function.
jcobb 0:fba19b344b6d 255 The function variable is set to the L_ mask, which will force S_solpos to
jcobb 0:fba19b344b6d 256 only call the required function. L_ masks may be ORed as desired.
jcobb 0:fba19b344b6d 257
jcobb 0:fba19b344b6d 258 VARIABLE Mask Required Variables
jcobb 0:fba19b344b6d 259 --------- ---------- ---------------------------------------
jcobb 0:fba19b344b6d 260 amass L_AMASS zenref, press
jcobb 0:fba19b344b6d 261 ampress L_AMASS zenref, press
jcobb 0:fba19b344b6d 262 azim L_SOLAZM elevetr, declin, latitude, hrang
jcobb 0:fba19b344b6d 263 cosinc L_TILT azim, aspect, tilt, zenref, coszen,etrn
jcobb 0:fba19b344b6d 264 coszen L_REFRAC elevetr, press, temp
jcobb 0:fba19b344b6d 265 dayang L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 266 declin L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 267 eclong L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 268 ecobli L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 269 ectime L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 270 elevetr L_ZENETR declin, latitude, hrang
jcobb 0:fba19b344b6d 271 elevref L_REFRAC elevetr, press, temp
jcobb 0:fba19b344b6d 272 eqntim L_TST hrang, hour, minute, second, interval
jcobb 0:fba19b344b6d 273 erv L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 274 etr L_ETR coszen, solcon, erv
jcobb 0:fba19b344b6d 275 etrn L_ETR coszen, solcon, erv
jcobb 0:fba19b344b6d 276 etrtilt L_TILT azim, aspect, tilt, zenref, coszen, etrn
jcobb 0:fba19b344b6d 277 gmst L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 278 hrang L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 279 julday L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 280 lmst L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 281 mnanom L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 282 mnlong L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 283 rascen L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 284 prime L_PRIME amass
jcobb 0:fba19b344b6d 285 sbcf L_SBCF latitude, declin, ssha, sbwid, sbrad, sbsky
jcobb 0:fba19b344b6d 286 ssha L_SRHA latitude, declin
jcobb 0:fba19b344b6d 287 sretr L_SRSS ssha, tstfix
jcobb 0:fba19b344b6d 288 ssetr L_SRSS ssha, tstfix
jcobb 0:fba19b344b6d 289 tst L_TST hrang, hour, minute, second, interval
jcobb 0:fba19b344b6d 290 tstfix L_TST hrang, hour, minute, second, interval
jcobb 0:fba19b344b6d 291 unprime L_PRIME amass
jcobb 0:fba19b344b6d 292 utime L_GEOM All date, time, and location inputs
jcobb 0:fba19b344b6d 293 zenetr L_ZENETR declination, latitude, hrang
jcobb 0:fba19b344b6d 294 zenref L_REFRAC elevetr, press, temp
jcobb 0:fba19b344b6d 295
jcobb 0:fba19b344b6d 296
jcobb 0:fba19b344b6d 297
jcobb 0:fba19b344b6d 298 *============================================================================
jcobb 0:fba19b344b6d 299 * Long int function S_solpos, adapted from the NREL VAX solar libraries
jcobb 0:fba19b344b6d 300 *
jcobb 0:fba19b344b6d 301 * This function calculates the apparent solar position and intensity
jcobb 0:fba19b344b6d 302 * (theoretical maximum solar energy) based on the date, time, and
jcobb 0:fba19b344b6d 303 * location on Earth. (DEFAULT values are from the optional S_posinit
jcobb 0:fba19b344b6d 304 * function.)
jcobb 0:fba19b344b6d 305 *
jcobb 0:fba19b344b6d 306 * Requires:
jcobb 0:fba19b344b6d 307 * Date and time:
jcobb 0:fba19b344b6d 308 * year
jcobb 0:fba19b344b6d 309 * month (optional without daynum)
jcobb 0:fba19b344b6d 310 * day (optional without daynum)
jcobb 0:fba19b344b6d 311 * daynum
jcobb 0:fba19b344b6d 312 * hour
jcobb 0:fba19b344b6d 313 * minute
jcobb 0:fba19b344b6d 314 * second
jcobb 0:fba19b344b6d 315 * Location:
jcobb 0:fba19b344b6d 316 * latitude
jcobb 0:fba19b344b6d 317 * longitude
jcobb 0:fba19b344b6d 318 * Location/time adjuster:
jcobb 0:fba19b344b6d 319 * timezone
jcobb 0:fba19b344b6d 320 * Atmospheric pressure and temperature:
jcobb 0:fba19b344b6d 321 * press DEFAULT 1013.0 mb
jcobb 0:fba19b344b6d 322 * temp DEFAULT 10.0 degrees C
jcobb 0:fba19b344b6d 323 * Tilt of flat surface that receives solar energy:
jcobb 0:fba19b344b6d 324 * aspect DEFAULT 180 (South)
jcobb 0:fba19b344b6d 325 * tilt DEFAULT 0 (Horizontal)
jcobb 0:fba19b344b6d 326 * Shadow band parameters:
jcobb 0:fba19b344b6d 327 * sbwid DEFAULT 7.6 cm
jcobb 0:fba19b344b6d 328 * sbrad DEFAULT 31.7 cm
jcobb 0:fba19b344b6d 329 * sbsky DEFAULT 0.04
jcobb 0:fba19b344b6d 330 * Functionality
jcobb 0:fba19b344b6d 331 * function DEFAULT S_ALL (all output parameters computed)
jcobb 0:fba19b344b6d 332 *
jcobb 0:fba19b344b6d 333 * Returns:
jcobb 0:fba19b344b6d 334 * everything defined at the top of this listing.
jcobb 0:fba19b344b6d 335 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 336 long S_solpos (struct posdata *pdat);
jcobb 0:fba19b344b6d 337
jcobb 0:fba19b344b6d 338 /*============================================================================
jcobb 0:fba19b344b6d 339 * Void function S_init
jcobb 0:fba19b344b6d 340 *
jcobb 0:fba19b344b6d 341 * This function initiates all of the input functions to S_Solpos().
jcobb 0:fba19b344b6d 342 * NOTE: This function is optional if you initialize all input parameters
jcobb 0:fba19b344b6d 343 * in your calling code.
jcobb 0:fba19b344b6d 344 *
jcobb 0:fba19b344b6d 345 * Requires: Pointer to a posdata structure, members of which are
jcobb 0:fba19b344b6d 346 * initialized.
jcobb 0:fba19b344b6d 347 *
jcobb 0:fba19b344b6d 348 * Returns: Void
jcobb 0:fba19b344b6d 349 *
jcobb 0:fba19b344b6d 350 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 351 void S_init(struct posdata *pdat);
jcobb 0:fba19b344b6d 352
jcobb 0:fba19b344b6d 353
jcobb 0:fba19b344b6d 354 /*============================================================================
jcobb 0:fba19b344b6d 355 * Void function S_decode
jcobb 0:fba19b344b6d 356 *
jcobb 0:fba19b344b6d 357 * This function decodes the error codes from S_solpos return value
jcobb 0:fba19b344b6d 358 *
jcobb 0:fba19b344b6d 359 * INPUTS: Long integer S_solpos return value, struct posdata*
jcobb 0:fba19b344b6d 360 *
jcobb 0:fba19b344b6d 361 * OUTPUTS: Descriptive text of errors to stderr
jcobb 0:fba19b344b6d 362 *----------------------------------------------------------------------------*/
jcobb 0:fba19b344b6d 363 void S_decode(long code, struct posdata *pdat);
jcobb 0:fba19b344b6d 364