Rev 1221 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
#ifndef SolarRadiation_H
#define SolarRadiation_H
//---------------------------------------------------------------------------
class HemiGrid;
/** Handles sun and radiation calculations.
This class contains functions to calculate daylength, and hemipherical radiation intensities
based on latitude. */
class SolarRadiation
{
public:
SolarRadiation(): mMinDay(-1), mMaxDay(367), mDiffusRadFraction(0.5) {}
void Setup(double BreiteGrad);
/** calculate radiation matrix.
calculates for each sector of the "Grid" the yearly radiation intensites.
Intensities are influenced by latitude, vegetation period and the fraction of diffuse radiation.
@param Step_deg size of one cell in degree (e.g. 5 -> each pixel has a size of 5°x5°)
@param Grid results are stored in that HemiGrid (no setup required) */
void calculateRadMatrix(const float Step_deg, HemiGrid &Grid);
/// set fraction of diffuse radiation (1: only diffuse rad, 0: only direct rad)
void setDiffusRadFraction(double fraction_of_diffus_rad) { mDiffusRadFraction = fraction_of_diffus_rad; }
/// set latitude in degree
void setLatidude(const double lat_degree) { Latitude = lat_degree * M_PI/180.; }
void setVegetationPeriod(int day_start, int day_end) { mMinDay=day_start; mMaxDay=day_end; }
private:
int FTime; ///< time of day
double DayLength[366]; ///< length of day (seconds)
double RadExtraTerrestrisch[366]; ///< total radiation Extraterrestrisch kJ/m2 daysum
double SolarConstant; ///< radiation constant in space
double Latitude; ///< Latitude in rad
int mMinDay; ///< start of vegetation period (day)
int mMaxDay; ///< end of vegetation period (day)
double mDiffusRadFraction;
void calcDay(int day);
///< calculate daylength and daily radiation values
};
#endif