MeteoIODoc  MeteoIODoc-2.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Suntrajectory.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2009 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of MeteoIO.
5  MeteoIO is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  MeteoIO is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef SUNTAJECTORY_H
19 #define SUNTAJECTORY_H
20 
21 namespace mio {
22 
32  public:
33  SunTrajectory();
34  SunTrajectory(const double& i_latitude, const double& i_longitude);
35 
36  virtual ~SunTrajectory() {}
37 
43  virtual void setDate(const double& i_julian, const double& i_TZ=0.)=0;
44  virtual void setLatLon(const double& i_latitude, const double& i_longitude)=0;
45  virtual void setAll(const double& i_latitude, const double& i_longitude, const double& i_julian, const double& i_TZ=0.)=0;
46  virtual void reset()=0;
47 
50  virtual void getHorizontalCoordinates(double& azimuth, double& elevation) const=0;
51  virtual void getHorizontalCoordinates(double& azimuth, double& elevation, double& eccentricity) const=0;
52  virtual void getDaylight(double& sunrise, double& sunset, double& daylight)=0;
53  virtual double getSolarTime() const;
54  virtual double getSolarTimeOfDay() const;
55 
57  virtual void getEquatorialCoordinates(double& right_ascension, double& declination)=0;
58 
60  double getAngleOfIncidence(const double& slope_azi, const double& slope_elev) const;
61  double getRadiationOnHorizontal(const double& radiation) const;
62  double getRadiationOnSlope(const double& slope_azi, const double& slope_elev, const double& radiation) const;
63  double getHorizontalOnSlope(const double& slope_azi, const double& slope_elev, const double& H_radiation, const double& elev_threshold=5.) const;
64 
66  static double getAngleOfIncidence(const double& sun_azi, const double& sun_elev,
67  const double& slope_azi, const double& slope_elev);
68  static double projectHorizontalToSlope(const double& sun_azi, const double& sun_elev,
69  const double& slope_azi, const double& slope_elev, const double& H_radiation, const double& elev_threshold=5.);
70  static double projectSlopeToHorizontal(const double& sun_azi, const double& sun_elev,
71  const double& slope_azi, const double& slope_elev, const double& S_radiation);
72  static double projectHorizontalToBeam(const double& sun_elev, const double& H_radiation);
73 
74  const std::string toString() const;
75 
76  protected:
77  virtual void update()=0;
78 
79  protected:
80  double julian_gmt, TZ;
86  double HourAngle;
87  static const double nodata;
88 };
89 
103 class SunMeeus : public SunTrajectory {
104  public:
105  SunMeeus();
107  SunMeeus(const double& i_latitude, const double& i_longitude);
108  SunMeeus(const double& i_latitude, const double& i_longitude, const double& i_julian, const double& i_TZ=0.);
109 
110  void setDate(const double& i_julian, const double& i_TZ=0.);
111  void setLatLon(const double& i_latitude, const double& i_longitude);
112  void setAll(const double& i_latitude, const double& i_longitude, const double& i_julian, const double& i_TZ=0.);
113  void reset();
114 
115  void getHorizontalCoordinates(double& azimuth, double& elevation) const;
116  void getHorizontalCoordinates(double& azimuth, double& elevation, double& eccentricity) const;
117  void getDaylight(double& sunrise, double& sunset, double& daylight);
118  void getEquatorialSunVector(double& sunx, double& suny, double& sunz);
119  void getEquatorialCoordinates(double& right_ascension, double& declination);
120  private:
121  void private_init();
122  void update();
123 
124  private:
125  double SolarElevationAtm;
126 
127 };
128 
129 } //end namespace
130 
131 #endif
double longitude
Definition: Suntrajectory.h:81
double SunRightAscension
Definition: Suntrajectory.h:85
static double projectHorizontalToBeam(const double &sun_elev, const double &H_radiation)
Definition: Suntrajectory.cc:159
virtual void getHorizontalCoordinates(double &azimuth, double &elevation) const =0
virtual void setLatLon(const double &i_latitude, const double &i_longitude)=0
void getEquatorialSunVector(double &sunx, double &suny, double &sunz)
Definition: Suntrajectory.cc:327
double SolarElevation
Definition: Suntrajectory.h:82
double SunlightDuration
Definition: Suntrajectory.h:84
double SolarAzimuthAngle
Definition: Suntrajectory.h:82
SunMeeus()
Definition: Suntrajectory.cc:237
virtual void reset()=0
virtual double getSolarTime() const
Return the current solar time. Since the Sun reaches its zenith at a time different than the local no...
Definition: Suntrajectory.cc:182
double getAngleOfIncidence(const double &slope_azi, const double &slope_elev) const
radiation projection methods
Definition: Suntrajectory.cc:53
virtual void update()=0
void setLatLon(const double &i_latitude, const double &i_longitude)
Definition: Suntrajectory.cc:268
double getRadiationOnSlope(const double &slope_azi, const double &slope_elev, const double &radiation) const
Definition: Suntrajectory.cc:83
double SunSet
Definition: Suntrajectory.h:84
double HourAngle
Definition: Suntrajectory.h:86
double SunDeclination
Definition: Suntrajectory.h:85
double SunRise
Definition: Suntrajectory.h:84
virtual ~SunTrajectory()
Definition: Suntrajectory.h:36
static const double nodata
Definition: Suntrajectory.h:87
virtual void getEquatorialCoordinates(double &right_ascension, double &declination)=0
(http://en.wikipedia.org/wiki/Equatorial_coordinate_system)
double SolarNoon
Definition: Suntrajectory.h:84
double TZ
Definition: Suntrajectory.h:80
void reset()
Definition: Suntrajectory.cc:287
double latitude
Definition: Suntrajectory.h:81
void getHorizontalCoordinates(double &azimuth, double &elevation) const
Definition: Suntrajectory.cc:293
virtual void getDaylight(double &sunrise, double &sunset, double &daylight)=0
const std::string toString() const
Definition: Suntrajectory.cc:210
double getHorizontalOnSlope(const double &slope_azi, const double &slope_elev, const double &H_radiation, const double &elev_threshold=5.) const
Project a given horizontal radiation to a given slope. The sun position is the current one...
Definition: Suntrajectory.cc:107
void getDaylight(double &sunrise, double &sunset, double &daylight)
Definition: Suntrajectory.cc:308
double julian_gmt
Definition: Suntrajectory.h:80
void setAll(const double &i_latitude, const double &i_longitude, const double &i_julian, const double &i_TZ=0.)
Definition: Suntrajectory.cc:278
A class to calculate the Sun's position This class is purely virtual.
Definition: Suntrajectory.h:31
~SunMeeus()
Definition: Suntrajectory.h:106
virtual double getSolarTimeOfDay() const
Return the current solar time of day. Since the Sun reaches its zenith at a time different than the l...
Definition: Suntrajectory.cc:197
void getEquatorialCoordinates(double &right_ascension, double &declination)
(http://en.wikipedia.org/wiki/Equatorial_coordinate_system)
Definition: Suntrajectory.cc:318
virtual void setDate(const double &i_julian, const double &i_TZ=0.)=0
Set the date and time if no timezone is specified, GMT is assumed.
static double projectSlopeToHorizontal(const double &sun_azi, const double &sun_elev, const double &slope_azi, const double &slope_elev, const double &S_radiation)
Definition: Suntrajectory.cc:142
double eccentricityEarth
>this is the TRUE solar elevation, not the apparent one
Definition: Suntrajectory.h:83
double getRadiationOnHorizontal(const double &radiation) const
Definition: Suntrajectory.cc:72
void setDate(const double &i_julian, const double &i_TZ=0.)
Set the date and time if no timezone is specified, GMT is assumed.
Definition: Suntrajectory.cc:258
SunTrajectory()
Definition: Suntrajectory.cc:32
virtual void setAll(const double &i_latitude, const double &i_longitude, const double &i_julian, const double &i_TZ=0.)=0
static double projectHorizontalToSlope(const double &sun_azi, const double &sun_elev, const double &slope_azi, const double &slope_elev, const double &H_radiation, const double &elev_threshold=5.)
Definition: Suntrajectory.cc:123
Calculate the Sun's position based on the Meeus algorithm. See J. Meeus, "Astronomical Algorithms"...
Definition: Suntrajectory.h:103