Exemple #1
0
double calcSunsetUTC(double JD, double latitude, double longitude)
{

    double t = calcTimeJulianCent(JD);

    // *** First pass to approximate sunset


    double  eqTime = calcEquationOfTime(t);
    double  solarDec = calcSunDeclination(t);
    double  hourAngle = calcHourAngleSunset(latitude, solarDec);
    double  delta = longitude - radToDeg(hourAngle);
    double  timeDiff = 4 * delta;	// in minutes of time	
    double  timeUTC = 720 + timeDiff - eqTime;	// in minutes	
    double  newt = calcTimeJulianCent(calcJDFromJulianCent(t) + timeUTC/1440.0); 


    eqTime = calcEquationOfTime(newt);
    solarDec = calcSunDeclination(newt);


    hourAngle = calcHourAngleSunset(latitude, solarDec);
    delta = longitude - radToDeg(hourAngle);
    timeDiff = 4 * delta;
    timeUTC = 720 + timeDiff - eqTime; // in minutes

    // printf("************ eqTime = %f  \nsolarDec = %f \ntimeUTC = %f\n\n",eqTime,solarDec,timeUTC);


    return timeUTC;
}
Exemple #2
0
double calcSolarZenith(double latitude, double longitude, int year, int month, int day, int timeUTC){
    double T, trueSolarTime, hourAngle, solarDec, csz, zenith, exoatmElevation, te, refractionCorrection;

    T=jd2jcent(mdy2jd(year, month, day) + timeUTC/1440.0);
    trueSolarTime = timeUTC + calcEquationOfTime(T) - 4.0 * longitude;
    hourAngle = trueSolarTime / 4.0 - 180.0;
    solarDec = calcSunDeclination(T);
    csz = sin(deg2rad(latitude)) * sin(deg2rad(solarDec)) +
        cos(deg2rad(latitude)) * cos(deg2rad(solarDec)) *
        cos(deg2rad(hourAngle));
    zenith=rad2deg(acos(csz));
    exoatmElevation = 90.0 - zenith;
    if (exoatmElevation > 85.0) {
        refractionCorrection = 0.0;
    } else {
        te = tan(deg2rad(exoatmElevation));
        if (exoatmElevation > 5.0) {
            refractionCorrection = 58.1/te - 0.07/(te*te*te) +
                0.000086/(te*te*te*te*te);
        } else if (exoatmElevation > -0.575) {
            refractionCorrection = 1735.0 + exoatmElevation*(-518.2 + exoatmElevation*(103.4 + exoatmElevation*(-12.79 + exoatmElevation*0.711)));
        } else {
            refractionCorrection = -20.774 / te;
        }
        refractionCorrection = refractionCorrection / 3600.0;
    }
    return zenith - refractionCorrection;
}